{"version":3,"file":"js/main.js","mappings":"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;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI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,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA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AE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAE,KAAI,KAAI,KAAI,KAAI,GAAE,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAE,KAAI,GAAE,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAE,KAAI,KAAI,GAAE,KAAI,KAAI,KAAI,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,KAAI,GAAE,KAAI,GAAE,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,KAAI,GAAE,GAAE,GAAE,KAAI,GAAE,GAAE,KAAI,KAAI,KAAI,KAAI,GAAE,GAAE,GAAE,CAAC,GAAE,EAAE,IAAI,iBAAe,SAASC,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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ACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;;;;;WC/BA;WACA;WACA;;;;;WCFA;;;;;WCAA;WACA;WACA;WACA;WACA,+BAA+B,wCAAwC;WACvE;WACA;WACA;WACA;WACA,iBAAiB,qBAAqB;WACtC;WACA;WACA;WACA;WACA,kBAAkB,qBAAqB;WACvC,oHAAoH,iDAAiD;WACrK;WACA,KAAK;WACL;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;;;;WC7BA;WACA;WACA;WACA,eAAe,4BAA4B;WAC3C,eAAe;WACf,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD,8CAA8C;;;;;WCA9C;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;;;;WClBA;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA,8CAA8C;;WAE9C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,iCAAiC,mCAAmC;WACpE;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM,qBAAqB;WAC3B;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;;;;;UElDA;UACA;UACA;UACA,wJAAwJ,6EAA6E;UACrO,kLAAkL,4CAA4C;UAC9N","sources":["webpack:///./js/modules/components/preloader/DreamsSlider/Worker/offscreen.worker.js","webpack:///./js/app.js","webpack:///./js/common.js","webpack:///./js/functions.js","webpack:///./js/libs/AdaptiveToneMappingPass.js","webpack:///./js/libs/CSS2DRenderer.js","webpack:///./js/libs/CubemapToEquirectangular.js","webpack:///./js/libs/OrbitControls.js","webpack:///./js/libs/PlanarUV.js","webpack:///./js/libs/PolyLabel.js","webpack:///./js/libs/Polygon.js","webpack:///./js/libs/TinyQueue.js","webpack:///./js/libs/ToneMapShader.js","webpack:///./js/libs/TrackballControls.js","webpack:///./js/libs/addToHomeScreen/add-to-homescreen.min.js","webpack:///./js/libs/directive.js","webpack:///./js/libs/outlineEdges/OutlineEdges.js","webpack:///./js/libs/photoswiper/photoswipe.esm.js","webpack:///./js/libs/share/jsshare.js","webpack:///./js/libs/three-geo.esm.js","webpack:///./js/libs/tween.umd.js","webpack:///./js/lordicon.js","webpack:///./js/modules/Cookie/Cookie.js","webpack:///./js/modules/MiniMap/GoogleMiniMap.js","webpack:///./js/modules/MiniMap/MiniMap.js","webpack:///./js/modules/MiniMap/google/Google3DMap.js","webpack:///./js/modules/MiniMap/overlay/ThreeJsOverlay.js","webpack:///./js/modules/MiniMap/scene/MiniMapBuilding.js","webpack:///./js/modules/MiniMap/scene/MiniMapScene.js","webpack:///./js/modules/analytics/analytics.js","webpack:///./js/modules/analytics/conferenceStatistic.js","webpack:///./js/modules/analytics/statistic.js","webpack:///./js/modules/api/Cloudflare.js","webpack:///./js/modules/api/GoogleMaps.js","webpack:///./js/modules/api/UserAPI.js","webpack:///./js/modules/building/Building.js","webpack:///./js/modules/building/BuildingOutline.js","webpack:///./js/modules/building/District.js","webpack:///./js/modules/cards/OptionsCardViewer.js","webpack:///./js/modules/cards/Paint.js","webpack:///./js/modules/cards/Price.js","webpack:///./js/modules/cards/cardsAnimation.js","webpack:///./js/modules/cards/cardsConfig.js","webpack:///./js/modules/cards/cardsFunctions.js","webpack:///./js/modules/cards/compareCards.js","webpack:///./js/modules/cards/optionsCards.js","webpack:///./js/modules/cards/unitCards/UnitCardClass.js","webpack:///./js/modules/cards/unitCards/unitCardFunctions.js","webpack:///./js/modules/cards/urlParamModal.js","webpack:///./js/modules/components/Amenities/Amenities.js","webpack:///./js/modules/components/Amenities/FloorAmenities.js","webpack:///./js/modules/components/Banner.js","webpack:///./js/modules/components/ConfigInformer/ConfigInformer.js","webpack:///./js/modules/components/CylinderControlPanel/CylinderControlPanel.js","webpack:///./js/modules/components/Disappear/Disappear.js","webpack:///./js/modules/components/Disclaimer/Disclaimer.js","webpack:///./js/modules/components/Environment/Environment.js","webpack:///./js/modules/components/Environment/EnvironmentLayers/BuildingEnvironment.js","webpack:///./js/modules/components/Environment/EnvironmentLayers/DayNightEnvironment.js","webpack:///./js/modules/components/Environment/EnvironmentLayers/EducationEnvironment.js","webpack:///./js/modules/components/Environment/EnvironmentLayers/EnvironmentLayer.js","webpack:///./js/modules/components/Environment/EnvironmentLayers/FunEnvironment.js","webpack:///./js/modules/components/Environment/EnvironmentLayers/LeisureEnvironment.js","webpack:///./js/modules/components/Environment/EnvironmentLayers/ParksEnvironment.js","webpack:///./js/modules/components/Environment/EnvironmentLayers/RailwayEnvironment.js","webpack:///./js/modules/components/Environment/EnvironmentLayers/RoadsEnvironment.js","webpack:///./js/modules/components/Environment/EnvironmentLayers/RoutsEnvironment.js","webpack:///./js/modules/components/Environment/EnvironmentLayers/SeaEnvironment.js","webpack:///./js/modules/components/Environment/EnvironmentLayers/TreesEnvironment.js","webpack:///./js/modules/components/Favorite/Favorite.js","webpack:///./js/modules/components/Fullscreen/Fullscreen.js","webpack:///./js/modules/components/IntersectionLegenda.js","webpack:///./js/modules/components/OptionsCardGallery/OptionsCardGallery.js","webpack:///./js/modules/components/PWA.js","webpack:///./js/modules/components/Password/Password.js","webpack:///./js/modules/components/Prepayment/Prepayment.js","webpack:///./js/modules/components/ProjectLogs.js","webpack:///./js/modules/components/Scheduler/Scheduler.js","webpack:///./js/modules/components/ScreenLogo.js","webpack:///./js/modules/components/StaticPrepayment.js","webpack:///./js/modules/components/Terrain/Terrain.js","webpack:///./js/modules/components/Terrain/TilesTerrain.js","webpack:///./js/modules/components/TraverseSwitcher/TraverseSwitcher.js","webpack:///./js/modules/components/VideoPopUp.js","webpack:///./js/modules/components/apply-now/applyNow.js","webpack:///./js/modules/components/apply-now/applyNowContent.js","webpack:///./js/modules/components/building-switch/CylinderBuildingLabels.js","webpack:///./js/modules/components/building-switch/buildingHover.js","webpack:///./js/modules/components/building-switch/buildingLabels.js","webpack:///./js/modules/components/building-switch/building_switch.js","webpack:///./js/modules/components/chats/chats.js","webpack:///./js/modules/components/compass/compass.js","webpack:///./js/modules/components/cylinderFloorNumbers/cylinderFloorNumbers.js","webpack:///./js/modules/components/displayOptions/DisplayOptions.js","webpack:///./js/modules/components/flatLabels/CylinderFlatLabels.js","webpack:///./js/modules/components/flatLabels/flatLabels.js","webpack:///./js/modules/components/flatTooltip/flatTooltip.js","webpack:///./js/modules/components/floorSlider/floorSlider.js","webpack:///./js/modules/components/form/McIdLeadForm.js","webpack:///./js/modules/components/form/form.js","webpack:///./js/modules/components/futureDevelopment/FutureDevelopment.js","webpack:///./js/modules/components/langSwitcher/langSwitcher.js","webpack:///./js/modules/components/location/Location.js","webpack:///./js/modules/components/pagination/Pagination.js","webpack:///./js/modules/components/poweredLogo/RenderingLogo.js","webpack:///./js/modules/components/poweredLogo/poweredLogo.js","webpack:///./js/modules/components/preloader/DreamsPreloader.js","webpack:///./js/modules/components/preloader/DreamsSlider/Slider/DreamsSlider.js","webpack:///./js/modules/components/preloader/DreamsSlider/Slider/Slide.js","webpack:///./js/modules/components/preloader/DreamsSlider/SubPreloader/SubPreloader.js","webpack:///./js/modules/components/preloader/DreamsSlider/Text/Troika.js","webpack:///./js/modules/components/preloader/DreamsSlider/Viewer/Viewer.js","webpack:///./js/modules/components/preloader/DreamsSlider/World/Loop.js","webpack:///./js/modules/components/preloader/DreamsSlider/World/World.js","webpack:///./js/modules/components/preloader/Sound.js","webpack:///./js/modules/components/preloader/preloader.js","webpack:///./js/modules/components/preview/Preview.js","webpack:///./js/modules/components/publicLayers/Deals.js","webpack:///./js/modules/components/publicLayers/Education.js","webpack:///./js/modules/components/publicLayers/Fun.js","webpack:///./js/modules/components/publicLayers/Highway.js","webpack:///./js/modules/components/publicLayers/Layer.js","webpack:///./js/modules/components/publicLayers/Leisure.js","webpack:///./js/modules/components/publicLayers/Orbit360.js","webpack:///./js/modules/components/publicLayers/Orbit360Viewer.js","webpack:///./js/modules/components/publicLayers/Parks.js","webpack:///./js/modules/components/publicLayers/PoiLayer.js","webpack:///./js/modules/components/publicLayers/Popup.js","webpack:///./js/modules/components/publicLayers/PublicLayers.js","webpack:///./js/modules/components/publicLayers/Railway.js","webpack:///./js/modules/components/share/Share.js","webpack:///./js/modules/components/street-names/addStreetNames.js","webpack:///./js/modules/components/vantage/PhotographicViewer.js","webpack:///./js/modules/components/vantage/Vantage.js","webpack:///./js/modules/components/weather/ClearSky.js","webpack:///./js/modules/components/weather/Clouds.js","webpack:///./js/modules/components/weather/CloudsShader.js","webpack:///./js/modules/components/weather/Drizzle.js","webpack:///./js/modules/components/weather/Rain.js","webpack:///./js/modules/components/weather/Snow.js","webpack:///./js/modules/components/weather/StaticClouds.js","webpack:///./js/modules/components/weather/Thunderstorm.js","webpack:///./js/modules/components/weather/Weather.js","webpack:///./js/modules/controls/Joystick.js","webpack:///./js/modules/controls/SkyLineController.js","webpack:///./js/modules/controls/destroyBuilding.js","webpack:///./js/modules/controls/mouse-n-touches.js","webpack:///./js/modules/controls/orbitControls.js","webpack:///./js/modules/controls/swipe.js","webpack:///./js/modules/controls/trackballControls.js","webpack:///./js/modules/controls/zoomControl.js","webpack:///./js/modules/crm/crm-requests.js","webpack:///./js/modules/customStyles/customStyles.js","webpack:///./js/modules/cylinderGrid/CylinderBase.js","webpack:///./js/modules/gui/FPS.js","webpack:///./js/modules/gui/LoaderTask.js","webpack:///./js/modules/gui/gui.js","webpack:///./js/modules/interfaces/BaseElement.js","webpack:///./js/modules/interfaces/Drag.js","webpack:///./js/modules/interfaces/DropDown.js","webpack:///./js/modules/interfaces/EventBus.js","webpack:///./js/modules/interfaces/Form.js","webpack:///./js/modules/interfaces/GetElement.js","webpack:///./js/modules/interfaces/MultipleSelector.js","webpack:///./js/modules/interfaces/buttons/Button.js","webpack:///./js/modules/interfaces/buttons/Specific/ExploreButton.js","webpack:///./js/modules/interfaces/buttons/apple/IconTextLong.js","webpack:///./js/modules/interfaces/pages/PopUp.js","webpack:///./js/modules/interfaces/switchers/HistogramSlider.js","webpack:///./js/modules/interfaces/switchers/Range.js","webpack:///./js/modules/interfaces/switchers/Switch.js","webpack:///./js/modules/liveAnimations/AnimateObject.js","webpack:///./js/modules/liveAnimations/DayNight/OrbitDayAndNight.js","webpack:///./js/modules/liveAnimations/DayNight/sea/OrbitSea.js","webpack:///./js/modules/liveAnimations/clouds/clouds.js","webpack:///./js/modules/liveAnimations/litemode/cars/Cars.js","webpack:///./js/modules/liveAnimations/litemode/dayNight/TimesOfDay.js","webpack:///./js/modules/liveAnimations/litemode/plug/Plug.js","webpack:///./js/modules/liveAnimations/litemode/sea/Sea.js","webpack:///./js/modules/liveAnimations/litemode/sky/Sky.js","webpack:///./js/modules/liveAnimations/litemode/trees/Trees.js","webpack:///./js/modules/liveAnimations/litemode/windows/Windows.js","webpack:///./js/modules/menu/PrivacyAndTerms.js","webpack:///./js/modules/menu/about/aboutv3.js","webpack:///./js/modules/menu/contactUs/CustomerContactNow.js","webpack:///./js/modules/menu/contactUs/McID.js","webpack:///./js/modules/menu/contactUs/contactUs.js","webpack:///./js/modules/menu/contactUs/contactUsConfig.js","webpack:///./js/modules/menu/documents/Documents.js","webpack:///./js/modules/menu/gallery/galleryDesktop.js","webpack:///./js/modules/menu/getApp/getApp.js","webpack:///./js/modules/menu/menu.js","webpack:///./js/modules/menu/navigation/bottom-nav-bar.js","webpack:///./js/modules/menu/navigation/compareButton.js","webpack:///./js/modules/menu/navigation/right-nav-bar.js","webpack:///./js/modules/menu/search/MobileSearch/BottomElement/BuildingSwitcher.js","webpack:///./js/modules/menu/search/MobileSearch/BottomElement/ResultsAmount.js","webpack:///./js/modules/menu/search/MobileSearch/BottomElement/ResultsViewer/ApartmentCard.js","webpack:///./js/modules/menu/search/MobileSearch/BottomElement/ResultsViewer/ResultsViewer.js","webpack:///./js/modules/menu/search/MobileSearch/BottomElement/SearchBottomElement.js","webpack:///./js/modules/menu/search/MobileSearch/Filter/BackButton.js","webpack:///./js/modules/menu/search/MobileSearch/Filter/FavoriteButton.js","webpack:///./js/modules/menu/search/MobileSearch/Filter/Filter.js","webpack:///./js/modules/menu/search/MobileSearch/Filter/SearchFilter.js","webpack:///./js/modules/menu/search/MobileSearch/MobileSearch.js","webpack:///./js/modules/menu/search/SearchResultsNotificator.js","webpack:///./js/modules/menu/search/ShrinkSearch/ActiveFiltersCounter.js","webpack:///./js/modules/menu/search/ShrinkSearch/ShrinkSearch.js","webpack:///./js/modules/menu/search/multipleSearch.js","webpack:///./js/modules/menu/search/search.js","webpack:///./js/modules/menu/search/similarSearch.js","webpack:///./js/modules/mode/BmbyMode.js","webpack:///./js/modules/mode/Rotor.js","webpack:///./js/modules/mode/cylinder.js","webpack:///./js/modules/mode/floorPlan.js","webpack:///./js/modules/mode/liteMode.js","webpack:///./js/modules/poi/Route.js","webpack:///./js/modules/poi/poi.js","webpack:///./js/modules/poi/poiCss.js","webpack:///./js/modules/points/points.js","webpack:///./js/modules/post-processing/Composer.js","webpack:///./js/modules/post-processing/Passes/Bloom.js","webpack:///./js/modules/post-processing/Passes/CylinderAnimation.js","webpack:///./js/modules/post-processing/Passes/DOF.js","webpack:///./js/modules/post-processing/Passes/DayNightPass.js","webpack:///./js/modules/post-processing/Passes/Effect.js","webpack:///./js/modules/post-processing/Passes/Fog.js","webpack:///./js/modules/post-processing/Passes/GTAOLite.js","webpack:///./js/modules/post-processing/Passes/LUT.js","webpack:///./js/modules/post-processing/Passes/MaskObjectPass.js","webpack:///./js/modules/post-processing/Passes/SSAO.js","webpack:///./js/modules/post-processing/Passes/SceneLUT.js","webpack:///./js/modules/post-processing/Passes/ToneMapping.js","webpack:///./js/modules/post-processing/Passes/TransitionPass.js","webpack:///./js/modules/post-processing/post-processing.js","webpack:///./js/modules/projectTime/Lerp.js","webpack:///./js/modules/projectTime/Time.js","webpack:///./js/modules/pushNotifications/PushNotifications.js","webpack:///./js/modules/qa/QA.js","webpack:///./js/modules/qa/QAApartmentsPlan.js","webpack:///./js/modules/qa/QAExposure.js","webpack:///./js/modules/qa/QAFloorValidator.js","webpack:///./js/modules/qa/QAObjects.js","webpack:///./js/modules/qa/QAPoi.js","webpack:///./js/modules/qa/QAPublicLayers.js","webpack:///./js/modules/qa/QAReport.js","webpack:///./js/modules/qa/QARotor.js","webpack:///./js/modules/qa/QAVantages.js","webpack:///./js/modules/threejs/CameraCollision.js","webpack:///./js/modules/threejs/Cloth/ClothSimulation.js","webpack:///./js/modules/threejs/Cluster/CSS2DCluster.js","webpack:///./js/modules/threejs/DayNightButton/DayNightButton.js","webpack:///./js/modules/threejs/GSAPMixer.js","webpack:///./js/modules/threejs/GroundProjectedSkybox2.js","webpack:///./js/modules/threejs/Hmap.js","webpack:///./js/modules/threejs/InstanceLOD/InstanceLOD.js","webpack:///./js/modules/threejs/Materials/DisplacementMaterial.js","webpack:///./js/modules/threejs/Materials/FluffyMaterial.js","webpack:///./js/modules/threejs/Materials/InteriorMaterial.js","webpack:///./js/modules/threejs/Materials/LayerMaterial.js","webpack:///./js/modules/threejs/Materials/SeaMaterial.js","webpack:///./js/modules/threejs/Objects/Arrow.js","webpack:///./js/modules/threejs/Objects/Box.js","webpack:///./js/modules/threejs/Objects/ObjectCore.js","webpack:///./js/modules/threejs/Objects/Objects.js","webpack:///./js/modules/threejs/Objects/PointView.js","webpack:///./js/modules/threejs/Objects/Sphere.js","webpack:///./js/modules/threejs/Objects/Text3D.js","webpack:///./js/modules/threejs/RenderList.js","webpack:///./js/modules/threejs/SalesPlane.js","webpack:///./js/modules/threejs/SchematicBuilding/Apartment.js","webpack:///./js/modules/threejs/SchematicBuilding/BuildingShape.js","webpack:///./js/modules/threejs/SchematicBuilding/Facing.js","webpack:///./js/modules/threejs/SchematicBuilding/Floor.js","webpack:///./js/modules/threejs/SchematicBuilding/SchematicBuilding.js","webpack:///./js/modules/threejs/SchematicBuilding/SchematicBuildingModel.js","webpack:///./js/modules/threejs/SchematicBuilding/SchematicDraw/Grid.js","webpack:///./js/modules/threejs/SchematicBuilding/SchematicDraw/SchematicDraw.js","webpack:///./js/modules/threejs/Shaders/meshstandard_fragment_full_130.js","webpack:///./js/modules/threejs/Slicer.js","webpack:///./js/modules/threejs/animation.js","webpack:///./js/modules/threejs/autoBuildingFunctions.js","webpack:///./js/modules/threejs/autoProjectScript.js","webpack:///./js/modules/threejs/autoSelectionBoxes.js","webpack:///./js/modules/threejs/camera.js","webpack:///./js/modules/threejs/colorCorrection.js","webpack:///./js/modules/threejs/environment.js","webpack:///./js/modules/threejs/lights.js","webpack:///./js/modules/threejs/loader/LazyTextureLoader.js","webpack:///./js/modules/threejs/loader/Loader.js","webpack:///./js/modules/threejs/raycast.js","webpack:///./js/modules/threejs/sceneBackground.js","webpack:///./js/modules/threejs/threejs-components.js","webpack:///./js/modules/widgets/poi/poiv3.js","webpack:///./js/modules/widgets/widgets.js","webpack:///./js/settings.js","webpack:///./js/libs/addToHomeScreen/add-to-homescreen.min.css?74b1","webpack:///./js/libs/photoswiper/photoswipe.css?364a","webpack:///./scss/main-style.scss?1116","webpack:///./js/modules/components/preloader/DreamsSlider/Viewer/Shaders/fragment.glsl","webpack:///./js/modules/components/preloader/DreamsSlider/Viewer/Shaders/vertex.glsl","webpack:///./js/modules/liveAnimations/DayNight/sea/fragmnet.glsl","webpack:///./js/modules/liveAnimations/DayNight/sea/vertex.glsl","webpack:///./js/modules/liveAnimations/DayNight/sky/SkyFragment.glsl","webpack:///./js/modules/liveAnimations/DayNight/sky/SkyVertex.glsl","webpack:///./js/modules/liveAnimations/litemode/plug/fragment.glsl","webpack:///./js/modules/liveAnimations/litemode/plug/vertex.glsl","webpack:///./js/modules/liveAnimations/litemode/sea/fragment.glsl","webpack:///./js/modules/liveAnimations/litemode/sea/vertex.glsl","webpack:///./js/modules/liveAnimations/litemode/sky/fragment.glsl","webpack:///./js/modules/liveAnimations/litemode/sky/vertex.glsl","webpack:///./js/modules/liveAnimations/litemode/trees/fragment.glsl","webpack:///./js/modules/liveAnimations/litemode/trees/vertex.glsl","webpack:///./js/modules/post-processing/Passes/Shaders/CylinderAnimation/fragment.glsl","webpack:///./js/modules/post-processing/Passes/Shaders/CylinderAnimation/vertex.glsl","webpack:///./js/modules/post-processing/Passes/Shaders/DOF/fragment.glsl","webpack:///./js/modules/post-processing/Passes/Shaders/DOF/vertex.glsl","webpack:///./js/modules/post-processing/Passes/Shaders/DayNight/fragment.glsl","webpack:///./js/modules/post-processing/Passes/Shaders/DayNight/vertex.glsl","webpack:///./js/modules/post-processing/Passes/Shaders/Fog/fragment.glsl","webpack:///./js/modules/post-processing/Passes/Shaders/Fog/vertex.glsl","webpack:///./js/modules/post-processing/Passes/Shaders/MaskObject/fragment.glsl","webpack:///./js/modules/post-processing/Passes/Shaders/MaskObject/vertex.glsl","webpack:///./js/modules/threejs/Shaders/Rotor/fragment.glsl","webpack:///./js/modules/threejs/Shaders/Rotor/vertex.glsl","webpack:///./js/modules/threejs/Shaders/background/fragment.glsl","webpack:///./js/modules/threejs/Shaders/background/vertex.glsl","webpack:///./js/modules/threejs/Shaders/liteMode/liteModeFragment_2.glsl","webpack:///./js/modules/threejs/Shaders/liteMode/liteModeVertex.glsl","webpack:///./js/modules/threejs/Shaders/transition/transition_fragment.glsl","webpack:///./js/modules/threejs/Shaders/transition/transition_vertex.glsl","webpack:///./js/modules/threejs/Shaders/weather/drizzle/fragment.glsl","webpack:///./js/modules/threejs/Shaders/weather/drizzle/vertex.glsl","webpack:///./js/modules/threejs/Shaders/weather/rain/fragmentShader.glsl","webpack:///./js/modules/threejs/Shaders/weather/rain/vertexShader.glsl","webpack:///./js/modules/threejs/Shaders/weather/snow/fragmentShader.glsl","webpack:///./js/modules/threejs/Shaders/weather/snow/vertexShader.glsl","webpack:///./js/modules/threejs/Shaders/weather/thunderstorm/fragmentShader.glsl","webpack:///./js/modules/threejs/Shaders/weather/thunderstorm/vertexShader.glsl","webpack:///webpack/bootstrap","webpack:///webpack/runtime/amd define","webpack:///webpack/runtime/amd options","webpack:///webpack/runtime/chunk loaded","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///webpack/runtime/publicPath","webpack:///webpack/runtime/jsonp chunk loading","webpack:///webpack/before-startup","webpack:///webpack/startup","webpack:///webpack/after-startup"],"sourcesContent":["export default function Worker_fn() {\n return new Worker(__webpack_public_path__ + \"js/offscreen.worker.worker.js\");\n}\n","'use strict';\n\nimport TWEEN from './libs/tween.umd';\nimport {BufferGeometry, Clock, Material, Mesh, Vector2} from 'three';\nimport {CSS2DRenderer} from \"./libs/CSS2DRenderer.js\";\nimport {\n\tgetUrlParam,\n\tlockScreenForTablet,\n\tuserPrevent,\n\tsetParametersDependsOnCanvasArea,\n\tcheckHash,\n\tupdateProjectAPIData,\n\tisUrlHasParam,\n\taddWatermark,\n\tisOptionsCardOpened,\n\tsetSelectionBoxesColors,\n\tsetCSSVar,\n\tlockScreenOrientation,\n\tshowSoldApartmentsFromCurrentDay,\n\tisCylinderDisplayModeEqual, getUrlSearchQuery, applyShortBuildingNameRule,\n} from './functions';\nimport {\n\tBuildings,\n\tcardsData, components,\n\tisDesktop,\n\tisMobile,\n\tisSafari,\n\tprojectMode,\n\tsettingsData,\n\tthreeJsVariables, TRoot, UIRoot\n} from './settings';\nimport {createThreeJsEnvironment, setStats} from \"./modules/threejs/threejs-components\";\nimport {getVars} from \"./modules/customStyles/customStyles\";\nimport {langSwitcher} from \"./modules/components/langSwitcher/langSwitcher\";\nimport {RaycastHandler} from \"./modules/controls/mouse-n-touches\";\nimport {moveElements, rightNavigationBar, rightNavMenuZIndexChange} from \"./modules/menu/navigation/right-nav-bar\";\nimport {fitModelInViewport} from './modules/controls/zoomControl';\nimport {\n\tautoRotateInit,\n\tautoRotateTimerAction,\n\tdebugOrbitControls,\n\torbitControlsInit,\n} from './modules/controls/orbitControls';\nimport {\n\tsetOptionsCardButtonsWidthIntoCssVar, setOptionsCardDataHeightInCssVar,\n\tsetPlansBlockBoundaries,\n\tsetWidthOfCardDependingOnMenu\n} from \"./modules/cards/optionsCards\";\nimport {\n\tbuildingsLabelResize\n} from './modules/components/building-switch/buildingLabels';\nimport {ViewMode} from \"./common\";\nimport {getCurrentLangDirection, setInitialHtmlDirection} from './modules/components/langSwitcher/langSwitcher';\nimport {setMinAndMaxControlsDistance} from './modules/controls/orbitControls';\nimport {additionalMenuToggle, getActiveMenuData, menuInit} from './modules/menu/menu';\nimport {bottomNavBarInit} from './modules/menu/navigation/bottom-nav-bar';\nimport {compassInit} from './modules/components/compass/compass';\nimport {\n\tpreloaderSliderInit\n} from './modules/components/preloader/preloader';\nimport {widgetsInit} from './modules/widgets/widgets';\nimport {\n\taddPoiWidgetBasicStyle,\n\tpanoramaOrbitResize,\n\tpoiOrientationHandler,\n} from './modules/widgets/poi/poiv3';\nimport {initForm} from \"./modules/components/form/form\";\nimport {addGui} from \"./modules/gui/gui\";\nimport {trackballControlsInit} from './modules/controls/trackballControls';\nimport {\n\tsetSearchContainerMaxHeight,\n\tupdateComponentsOnCanvasResize\n} from './modules/menu/search/search';\nimport {cssPoiHandler, resizeOrbitPoiCard} from './modules/poi/poiCss';\nimport {renderLoop} from \"./modules/threejs/environment\";\nimport {createStreetNames} from \"./modules/components/street-names/addStreetNames\";\nimport {addPoweredLogo} from './modules/components/poweredLogo/poweredLogo';\nimport {checkIntersection} from \"./modules/threejs/raycast\";\nimport {setWidthOfApplyNow} from \"./modules/components/apply-now/applyNow\";\nimport './libs/addToHomeScreen/add-to-homescreen.min.css';\nimport './libs/addToHomeScreen/add-to-homescreen.min';\nimport 'multiple-select/dist/multiple-select.min.css';\nimport 'multiple-select/dist/multiple-select.min';\nimport '../scss/main-style.scss';\nimport {getGoogleAnalyticsData} from \"./modules/analytics/statistic\";\nimport {UnitCardClass} from \"./modules/cards/unitCards/UnitCardClass\";\nimport {chatsInit} from './modules/components/chats/chats';\nimport {getLordIconColors} from './lordicon';\nimport {update as cameraUpdate, cameraAnimationActive} from \"./modules/threejs/camera\";\nimport {\n\tanimationMixerUpdate\n} from './modules/post-processing/post-processing';\nimport {Pagination} from \"./modules/components/pagination/Pagination\";\nimport {Weather} from './modules/components/weather/Weather';\nimport {CylinderBase} from './modules/cylinderGrid/CylinderBase';\nimport {DisplayOptions} from \"./modules/components/displayOptions/DisplayOptions\";\nimport {PublicLayers} from './modules/components/publicLayers/PublicLayers';\nimport {Favorite} from './modules/components/Favorite/Favorite';\nimport {EnvironmentToggle, OSMEnv} from './modules/threejs/sceneBackground';\nimport {CustomerContactNow} from \"./modules/menu/contactUs/CustomerContactNow\";\nimport {BaseElement} from \"./modules/interfaces/BaseElement\";\nimport {Vantages} from './modules/components/vantage/Vantage';\nimport {resizeGallery} from './modules/menu/gallery/galleryDesktop';\nimport {RenderingLogo} from \"./modules/components/poweredLogo/RenderingLogo\";\nimport {recreateBlockWhenLangSwitch} from './modules/menu/search/similarSearch';\nimport {ScreenLogo} from \"./modules/components/ScreenLogo\";\nimport {PushNotifications} from './modules/pushNotifications/PushNotifications';\nimport {UserAPI} from './modules/api/UserAPI';\nimport {Banner} from \"./modules/components/Banner\";\nimport {VideoPopUp} from \"./modules/components/VideoPopUp\";\nimport {Password} from './modules/components/Password/Password';\nimport {getCommonAssets, getSales, sendLogs} from \"./modules/crm/crm-requests\";\nimport {Environment} from './modules/components/Environment/Environment';\nimport {computeBoundsTree, disposeBoundsTree, acceleratedRaycast} from 'three-mesh-bvh';\nimport {CameraMarker, ZoomArea} from './modules/MiniMap/MiniMap';\nimport {ResizeObserver} from 'resize-observer';\nimport {Cloudflare} from \"./modules/api/Cloudflare\";\nimport {GetElement} from \"./modules/interfaces/GetElement\";\nimport {ProjectLogs} from \"./modules/components/ProjectLogs\";\nimport {analytics} from \"./modules/analytics/analytics\";\nimport {Disclaimer} from \"./modules/components/Disclaimer/Disclaimer\";\nimport {ConfigInformer} from \"./modules/components/ConfigInformer/ConfigInformer\";\nimport { Joystick } from './modules/controls/Joystick';\nimport {McID} from \"./modules/menu/contactUs/McID\";\nimport {getContactsDataFromAPI} from \"./modules/menu/contactUs/contactUs\";\nimport {EventBus} from \"./modules/interfaces/EventBus\";\nimport { PWA } from './modules/components/PWA';\nimport { OptionsCardViewer } from './modules/cards/OptionsCardViewer';\nimport { SkyLineController } from './modules/controls/SkyLineController';\nimport { BmbyMode } from './modules/mode/BmbyMode';\nimport {poiIntersection} from './modules/poi/poiCss';\nimport { SalesPlane } from './modules/threejs/SalesPlane.js';\n\nwindow.onerror = function (message, source, lineno, colno, error) {\n\t// console.error(\"Global error caught:\", message, source, lineno, colno, error);\n\tconst isLocalhost = source.split('/').includes('localhost:3100');\n\tconst isGoogleBotFetch = message === 'Failed to fetch' && '/Googlebot\\\\/\\\\d+\\\\.\\\\d+/'.test(navigator.userAgent);\n\tif (\n\t\tisLocalhost\n\t\t|| !Boolean(config)\n\t\t|| isGoogleBotFetch\n\t)\n\t\treturn;\n\n\tsendLogs({\n\t\tmessage,\n\t\tsource,\n\t\tlineno,\n\t\tcolno,\n\t\terror,\n\t\tsearchQuery: getUrlSearchQuery(),\n\t\tpaginationHistory: Pagination.history,\n\t\tuserAgent: navigator.userAgent,\n\t}, 'error');\n};\n\n// window.addEventListener(\"unhandledrejection\", function (event) {\n// \t// console.error(\"Unhandled rejection:\", event.reason);\n// \tsendLogs(event.reason, 'error');\n// });\n\nBufferGeometry.prototype.computeBoundsTree = computeBoundsTree;\nBufferGeometry.prototype.disposeBoundsTree = disposeBoundsTree;\nMesh.prototype.raycast = acceleratedRaycast;\nMaterial.prototype.onBeforeCompile = function (shader) {\n\tif (this.customPrograms && this.customPrograms.length) {\n\t\tthis.customPrograms.forEach(fn => fn(shader,this));\n\t}\n};\n\nlet controls;\nlet trackballControls;\nconst password = new Password();\nwindow.tl = new ProjectLogs();\nconst pwa = new PWA();\npwa.addEvents();\n\n\nconst marketingId = getUrlParam('id');\nif (marketingId) {\n\tconfig.projectGuid = marketingId;\n}\n\n\nif (BmbyMode.active) {\n\tdocument.body.classList.add('bmby-mode','light-theme');\n\tconfig.resources.background.cylinderBg = '';\n\tconfig.resources.bundle.selectionBoxes.colorStatus = config.resources.bundle.selectionBoxes.colorStatus.concat([\n\t\t\t{\n\t\t\t\t\"status\": \"for sale\",\n\t\t\t\t\"basic\": \"0d61af\",\n\t\t\t\t\"hover\": \"4BA8FD\",\n\t\t\t\t\"active\": \"0d84f2\",\n\t\t\t\t\"isActive\": true,\n\t\t\t\t\"opacity\": {\n\t\t\t\t\t\"basic\": 0.2,\n\t\t\t\t\t\"hover\": 0.8\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"status\": \"not for sale\",\n\t\t\t\t\"basic\": \"c60745\",\n\t\t\t\t\"hover\": \"FF4B85\",\n\t\t\t\t\"active\": \"ef0853\",\n\t\t\t\t\"isActive\": true,\n\t\t\t\t\"opacity\": {\n\t\t\t\t\t\"basic\": 0.2,\n\t\t\t\t\t\"hover\": 0.8\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"status\": \"contract\",\n\t\t\t\t\"basic\": \"59ba41\",\n\t\t\t\t\"hover\": \"34704d\",\n\t\t\t\t\"active\": \"1f3f2d\",\n\t\t\t\t\"isActive\": true,\n\t\t\t\t\"opacity\": {\n\t\t\t\t\t\"basic\": 0.2,\n\t\t\t\t\t\"hover\": 0.8\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"status\": \"precontract\",\n\t\t\t\t\"basic\": \"EED527\",\n\t\t\t\t\"hover\": \"EED527\",\n\t\t\t\t\"active\": \"EED527\",\n\t\t\t\t\"isActive\": true,\n\t\t\t\t\"opacity\": {\n\t\t\t\t\t\"basic\": 0.2,\n\t\t\t\t\t\"hover\": 0.8\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"status\": \"rent contract\",\n\t\t\t\t\"basic\": \"C49FFF\",\n\t\t\t\t\"hover\": \"C49FFF\",\n\t\t\t\t\"active\": \"C49FFF\",\n\t\t\t\t\"isActive\": true,\n\t\t\t\t\"opacity\": {\n\t\t\t\t\t\"basic\": 0.2,\n\t\t\t\t\t\"hover\": 0.8\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"status\": \"registration contract\",\n\t\t\t\t\"basic\": \"37b6b3\",\n\t\t\t\t\"hover\": \"37b6b3\",\n\t\t\t\t\"active\": \"37b6b3\",\n\t\t\t\t\"isActive\": true,\n\t\t\t\t\"opacity\": {\n\t\t\t\t\t\"basic\": 0.2,\n\t\t\t\t\t\"hover\": 0.8\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"status\": \"reserved\",\n\t\t\t\t\"basic\": \"FDAA05\",\n\t\t\t\t\"hover\": \"FFBB33\",\n\t\t\t\t\"active\": \"F9CF7C\",\n\t\t\t\t\"isActive\": true,\n\t\t\t\t\"opacity\": {\n\t\t\t\t\t\"basic\": 0.2,\n\t\t\t\t\t\"hover\": 0.8\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"status\": \"occupied\",\n\t\t\t\t\"basic\": \"AAC1CC\",\n\t\t\t\t\"hover\": \"AAC1CC\",\n\t\t\t\t\"active\": \"AAC1CC\",\n\t\t\t\t\"isActive\": true,\n\t\t\t\t\"opacity\": {\n\t\t\t\t\t\"basic\": 0.2,\n\t\t\t\t\t\"hover\": 0.8\n\t\t\t\t}\n\t\t\t}\n\t\t]);\n}\n\nnew OptionsCardViewer().open()\n\t.then(() => {\n\t\tpassword.create()\n\t\t\t.then(() => {\n\t\t\t\tProjectLogs.timerStartFor('total');\n\t\t\t\taddGui();\n\t\t\t\tpreloaderSliderInit();\n\t\t\t\tcreateThreeJsEnvironment();\n\t\t\t\ttemplateResizeFunctionDuringProjectIsLoading();\n\t\t\t\tcontrols = orbitControlsInit();\n\t\t\t\ttrackballControls = trackballControlsInit();\n\t\t\t\tsetStats();\n\t\t\t\tanimate();\n\t\t\t});\n\t});\n\n\nprojectMode.Pagination = new Pagination();\naddDocumentProperties();\naddPoiWidgetBasicStyle();\n\nconst clock = new Clock();\nlet elapsedTime = 0;\n\nfunction templateResizeFunctionDuringProjectIsLoading() {\n\twindow.addEventListener('resize', onLoadWindowResize, false);\n\twindow.addEventListener('orientationchange', onLoadWindowResize, false);\n\n\tfunction onLoadWindowResize() {\n\t\tif (settingsData.projectLoaded) {\n\t\t\twindow.removeEventListener('resize', onLoadWindowResize, false);\n\t\t\twindow.removeEventListener('orientationchange', onLoadWindowResize, false);\n\t\t\treturn;\n\t\t}\n\t\t// settingsData.isLandscape = window.matchMedia(\"(orientation: landscape)\").matches;\n\t\tcheckAndSetScreenOrientation();\n\t\tthreeJsVariables.perspectiveCamera.aspect = window.innerWidth / window.innerHeight;\n\t\tthreeJsVariables.perspectiveCamera.updateProjectionMatrix();\n\t\tthreeJsVariables.renderer.setSize(window.innerWidth, window.innerHeight);\n\t\tprojectMode.LiteMode?.resizeContainer();\n\t}\n}\n\nexport async function startProject(settings = config['crmProjectSettings']) {\n\tconsole.log('Start app');\n\tCustomerContactNow.addExternalParams();\n\tuserPrevent(true);\n\tgetVars(settings);\n\tthreeJsVariables.cloth.updateColor();\n\tsetSelectionBoxesColors();\n\tgetLordIconColors();\n\tdebugOrbitControls();\n\taddWatermark();\n\tsetInitialHtmlDirection(settings);\n\tsettingsData.isLandscape = window.matchMedia(\"(orientation: landscape)\").matches;\n\tnew EventBus();\n\n\tif (checkHash('showPrice'))\n\t\tconfig.crmProjectSettings.property.settings.displayPrice = 'button';\n\tif (checkHash('price'))\n\t\tconfig.crmProjectSettings.property.settings.displayPrice = 'show';\n\tif ((parseInt(getUrlParam('prepayment')) === 1))\n\t\tconfig.features.prepayment = true;\n\tif ((parseInt(getUrlParam('day-night-debug')) === 1))\n\t\tconfig.features.dayNight.debug = true;\n\n\t!BmbyMode.active && new UserAPI().send();\n\t//new Fullscreen().addBtn(UIRoot, 'body');\n\tFavorite.load();\n\tif (isUrlHasParam('reload')) {\n\t\tlet secondsBetweenReloads = Math.abs(parseInt(getUrlParam('reload')));\n\t\tsetInterval(() => {\n\t\t\tupdateProjectAPIData();\n\t\t}, secondsBetweenReloads * 1000);\n\t}\n\tRaycastHandler(settings);\n\tif (!isMobile)\n\t\trightNavigationBar();\n\tawait getContactsDataFromAPI()\n\t\t.then((response) => {\n\t\t\tif (BmbyMode.active)\n\t\t\t\treturn;\n\t\t\tconfig.contactWidget = response.find(item => item.title === 'contactWidget').crmData;\n\t\t\tconfig.consolto = response.find(item => item.title === 'consolto').crmData;\n\t\t\tconfig.schedulerId = response.find(item => item.title === 'schedulerId').crmData;\n\n\t\t\tmenuInit(settings);\n\t\t\tchatsInit();\n\t\t});\n\tif (SalesPlane.canActivate())\n\t\tnew SalesPlane();\n\taddMainScreenDisclaimer();\n\tnew VideoPopUp();\n\tnew RenderingLogo();\n\tlangSwitcher(settings);\n\tif (config.features.weather.active && (!config.features.liteMode?.active || config.features.liteMode?.active && config.features.liteMode?.settings?.sky?.active))\n\t\tnew DisplayOptions(UIRoot);\n\tconst bottomNavBar = bottomNavBarInit();\n\tcompassInit(bottomNavBar);\n\tnew CylinderBase();\n\taddLabelRenderContainer();\n\tpoiIntersection();\n\tupdateComponentsOnCanvasResize();\n\twidgetsInit(settings);\n\n\tuserPrevent(false);\n\tthreeJsVariables.tasks.run();\n\t!BmbyMode.active && new PushNotifications().connect();\n\tnew ScreenLogo(settings.general.logo);\n\tprojectMode.LiteMode?.runProjectStartAdditionalFunctions();\n\t// projectMode.LiteMode?.rotor?.runLazyLoading();\n\tinitForm(UIRoot);\n\t!isMobile && createStreetNames();\n\taddPoweredLogo();\n\t!isMobile && EnvironmentToggle.preloadOSM();\n\n\tif (config.features?.banners)\n\t\tnew Banner(config.features.banners[0]);\n\n\t/**\n\t * Disable zoom on DOM elements\n\t */\n\n\tlet touchDist2;\n\tdocument.body.addEventListener('touchmove', (e) => {\n\t\tif (e.touches.length >= 2) {\n\t\t\tconst dx = e.touches[0].screenX - e.touches[1].screenX;\n\t\t\tconst dy = e.touches[0].screenY - e.touches[1].screenY;\n\t\t\ttouchDist2 = Math.sqrt((dx * dx) + (dy * dy));\n\n\t\t\tif (touchDist2 > 70) {\n\t\t\t\te.preventDefault();\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}, {passive: false});\n\n\twindow.addEventListener('resize', onWindowResize, false);\n\tconst resizeObserver = new ResizeObserver(() => {\n\t\tupdateComponentsOnCanvasResize()\n\t});\n\tresizeObserver.observe(TRoot);\n\tcheckAndSetScreenOrientation();\n\n\tprojectMode.LiteMode?.resizeContainer();\n\n\tlockScreenOrientation();\n\n\tsetTimeout(() => autoRotateInit(), isMobile ? 3000 : 0);\n\tgetGoogleAnalyticsData();\n\tgetCommonAssets().then((response) => {\n\t\tsettingsData.commonAssets = response.data;\n\t\tprojectMode.FloorPlan.floorAmenities.settingsData = settingsData.commonAssets;\n\t});\n\tthreeJsVariables.slicer.intro();\n\n\t// const cameraMarker = new CameraMarker('camera', threeJsVariables.perspectiveCamera, threeJsVariables.orbitControls);\n\t// const areaLimit = new ZoomArea('zoom');\n\t// threeJsVariables.miniMap.addMarker(cameraMarker);\n\t// threeJsVariables.miniMap.addMarker(areaLimit);\n\t// threeJsVariables.miniMap.computeBoundingBox();\n\t// cameraMarker.enabled = true;\n\t// threeJsVariables.miniMap.show();\n\n\tthreeJsVariables.googleMiniMap.init();\n\tnew Joystick().create(TRoot);\n\tnew SkyLineController(threeJsVariables.orbitControls).ui(TRoot);\n\tnew ConfigInformer();\n\t!BmbyMode.active && showSoldApartmentsFromCurrentDay('-7');\n\tpwa.show();\n\t// projectMode.LiteMode?.rotor?.runLazyLoading();\n\tsetTimeout(() => {\n\t\tif (settingsData.activeViewMode === ViewMode.Orbit) {\n\t\t\tprojectMode.LiteMode?.sceneVisibility(false);\n\t\t}\n\t},100);\n}\n\nfunction addMainScreenDisclaimer() {\n\tif (config.crmProjectSettings.general?.disclaimer)\n\t\tnew Disclaimer(TRoot, config.crmProjectSettings.general?.disclaimer, 'disclaimer__main-screen');\n}\n\nexport function renderUpdateValuesOnDemand(value = false) {\n\tif (settingsData.stopRender !== value) {\n\t\tsettingsData.stopRender = value;\n\n\t\tif (value) {\n\t\t\tconsole.warn('-=RENDER STOPPED=-');\n\t\t} else {\n\t\t\tconsole.warn('-=RENDER STARTED=-');\n\t\t\tsettingsData.last_interaction = Date.now();\n\t\t}\n\t}\n}\n\nlet onWindowResizeTimeout;\n\nasync function onWindowResize() {\n\tif (settingsData.stopWindowResizeEvents)\n\t\treturn;\n\n\tif (isMobile && settingsData.activeModeSwitching) {\n\t\tclearTimeout(onWindowResizeTimeout);\n\t\tUnitCardClass.closeMobileCard();\n\t\tonWindowResizeTimeout = setTimeout(() => onWindowResize(), 100);\n\t\treturn;\n\t}\n\n\tconst activeMenu = getActiveMenuData();\n\tif (activeMenu === '3dModel' || activeMenu === 'search') {\n\t\trenderUpdateValuesOnDemand(false);\n\t} else {\n\t\trenderUpdateValuesOnDemand(true);\n\t}\n\tawait fitModelInViewport(true);\n\tbuildingsLabelResize();\n\trightNavMenuZIndexChange();\n\tcheckAndSetScreenOrientation();\n\tadditionalMenuToggle();\n\tsetWidthOfApplyNow();\n\tresizeGallery();\n\n\tsetCSSVar(\n\t\t'--optionsCardPlansBoxWidth',\n\t\t`${Math.round(new GetElement('.options-card__plans-box').width)}px`\n\t);\n\n\t// if (isMobile) {\n\t// \tcollapseFilterHeader();\n\t// \tif (settingsData.isLandscape) {\n\t// \t\tdocument.querySelector('.search__container-bottom')?.classList.remove('hidden');\n\t// \t\tdocument.querySelector('.search__title-wrapper')?.classList.remove('hidden');\n\t// \t\tdocument.querySelector('.search__checker')?.classList.remove('hidden');\n\t// \t\tdocument.querySelector('.search__result-count')?.classList.add('hidden');\n\t// \t\tif (!document.querySelector('.search__advanced-search:not(.hidden)'))\n\t// \t\t\tdocument.querySelector('.search__top-wrapper')?.classList.add('hidden');\n\t// \t} else {\n\t// \t\tsearchSwipeUpHandler();\n\t// \t}\n\t// }\n\n\n\tsetTimeout(() => {\n\t\tlockScreenOrientation();\n\n\t\tmoveElements();\n\t\tsetMinAndMaxControlsDistance();\n\t\tresizeOrbitPoiCard();\n\t\tfitModelInViewport(true);\n\t\tpanoramaOrbitResize();\n\t\tpoiOrientationHandler();\n\t\tDisplayOptions.displayOptionsVisibility('update');\n\t\tprojectMode.LiteMode?.resizeContainer();\n\t}, 100);\n\n\tconst compareCards = document.querySelector(`.compare-block`);\n\tif (compareCards)\n\t\tsetWidthOfCardDependingOnMenu(compareCards);\n\n\tsetOptionsCardButtonsWidthIntoCssVar();\n\tif (document.getElementById('building-switcher'))\n\t\tsetParametersDependsOnCanvasArea('building-switcher');\n\tif (document.querySelector('.display-options')?.classList.contains('display-options--expanded'))\n\t\tDisplayOptions.hideDisplayOptions();\n\n\tif (isOptionsCardOpened()) {\n\t\tsetPlansBlockBoundaries();\n\t\tif (isMobile)\n\t\t\trecreateBlockWhenLangSwitch();\n\t\tUnitCardClass.applyOptionsCardRules();\n\t\tif (cardsData.cardMode.isAmenities)\n\t\t\tsetOptionsCardDataHeightInCssVar();\n\t}\n\n\tsetSearchContainerMaxHeight();\n\tMcID.resizeHandler();\n\tif (components?.contactWidget)\n\t\tcomponents.contactWidget.positionRecalc();\n}\n\nfunction checkAndSetScreenOrientation() {\n\tconst currentOrientation = window.matchMedia(\"(orientation: landscape)\").matches;\n\tif (currentOrientation !== settingsData.isLandscape) {\n\t\tsettingsData.isLandscape = window.matchMedia(\"(orientation: landscape)\").matches;\n\t\tif (isMobile)\n\t\t\tanalytics('orientation', settingsData.isLandscape ? 'landscape' : 'portrait');\n\t}\n\n}\n\nfunction updateControls() {\n\tif (cameraAnimationActive())\n\t\treturn;\n\n\tconst orbitControlsTarget = controls.target;\n\tcontrols.update();\n\ttrackballControls.target.set(orbitControlsTarget.x, orbitControlsTarget.y, orbitControlsTarget.z);\n\ttrackballControls.update();\n}\n\nfunction addDocumentProperties() {\n\tconst {projectTitle, cdnRepository, projectFolder} = config;\n\tdocument.title = projectTitle;\n\t// const favicon = createHtmlElement(document.head, '', 'link', []);\n\t// favicon.setAttribute('rel', 'shortcut icon');\n\t// favicon.setAttribute('type', 'image/png');\n\t// favicon.href = `${cdnRepository}/${projectFolder}/resources/img/favicon.png?v=${Cloudflare.version}`;\n\n\tnew BaseElement('link')\n\t\t.setAttributes({\n\t\t\t'rel': 'shortcut icon',\n\t\t\t'type': 'image/png',\n\t\t\t'href': `${cdnRepository}/${projectFolder}/resources/img/favicon.png?v=${Cloudflare.version}`\n\t\t})\n\t\t.appendTo(document.head);\n}\n\n// let fps_last_check = performance.now();\n// let fps_average = 0;\n// let fps_check_count = 0;\n// let last_time = 0;\n// let last_time_check = 0;\n// let fps_30 = 1000/30; //\n// let fps_60 = 1000/60; //\n// let max_fps = fps_30; // ограничение кадров в секунду, можно для мобилок сделать 30fps\n\n// set errorTarget before flyIsComplete.\n// flag is using to prevent infinite setting and rendering\nlet isErrorTargetSet = false;\nlet originErrorTarget = null;\nif (!isMobile) {\n\toriginErrorTarget = threeJsVariables.tilesRenderer?.errorTarget;\n\tif (threeJsVariables.tilesRenderer?.hasOwnProperty('initialErrorTarget')) {\n\t\tthreeJsVariables.tilesRenderer.errorTarget = threeJsVariables.tilesRenderer.initialErrorTarget;\n\t} else {\n\t\tisErrorTargetSet = true;\n\t}\n}\n\nlet delta = 0;\n\n// let now = 0;\n\nexport function animate() {\n\tthreeJsVariables.renderer.info.reset();\n\t// now = performance.now();\n\tdelta = clock.getDelta();\n\telapsedTime = clock.elapsedTime;\n\n\t// проверяем частоту кадров\n\t// fps_average = fps_average + (now - last_time_check);\n\t// fps_check_count = fps_check_count + 1;\n\t// last_time_check = now;\n\n\tsettingsData.renderAnim = requestAnimationFrame(animate);\n\n\t// if (delta < max_fps) {\n\t// return;\n\t// } else {\n\t// if ((now - fps_last_check)>1000.0){\n\t// fps_last_check = now;\n\t// fps_average = fps_average / fps_check_count;\n\t// if (fps_average= settingsData.stopTimeRender)) {\n\t\trenderUpdateValuesOnDemand(true);\n\t}\n\n\tif (\n\t\t(settingsData.resolveTilesUpdate && settingsData.needsRerender && settingsData.activeViewMode === ViewMode.Orbit) ||\n\t\t(settingsData.needsRerender && isCylinderDisplayModeEqual('show all')) ||\n\t\t(settingsData.needsRerender && config.features.privateHouseMode)) {\n\t\trenderLoop();\n\t}\n\n\tif (!settingsData.stopRender) {\n\t\tupdateControls();\n\t\tWeather.render(elapsedTime);\n\t\tupdateLabelsRenderer();\n\t\t// flatLabelResize();\n\t\tprojectMode.LiteMode?.updateTime(delta);\n\t\tOSMEnv.update(elapsedTime);\n\t\tPublicLayers.animate(delta);\n\t\tEnvironment.animate(delta);\n\t\tanimationMixerUpdate(delta);\n\t\tif (Vantages.isActive()) {\n\t\t\tVantages.render(delta);\n\t\t} else {\n\n\t\t\tthreeJsVariables.composer.render(delta);\n\t\t}\n\t\tthreeJsVariables.fps.update();\n\n\t\tif (threeJsVariables.stats !== null)\n\t\t\tthreeJsVariables.stats.update();\n\n\t} else {\n\t\tsettingsData.isIntersection = false;\n\t\tautoRotateTimerAction('cancel');\n\t}\n}\n\nexport function updateRaycaster() {\n\tif (projectMode.LiteMode.isActive()) {\n\t\tif (projectMode.LiteMode.isVisible()) {\n\t\t\tthreeJsVariables.raycaster.setFromCamera(threeJsVariables.mouse, projectMode.LiteMode.camera);\n\t\t\tprojectMode.LiteMode.updateDepthPosition();\n\t\t} else {\n\t\t\tthreeJsVariables.raycaster.setFromCamera(threeJsVariables.mouse, threeJsVariables.perspectiveCamera);\n\t\t}\n\t} else {\n\t\tthreeJsVariables.raycaster.setFromCamera(threeJsVariables.mouse, threeJsVariables.perspectiveCamera);\n\t}\n\tcheckIntersection();\n}\n\nexport function updateLabelsRenderer() {\n\tif (threeJsVariables.labelRenderer) {\n\t\tif (projectMode.LiteMode.isActive() && projectMode.LiteMode.isVisible()) {\n\t\t\tthreeJsVariables.labelRenderer.render(threeJsVariables.scene, projectMode.LiteMode.camera);\n\t\t} else {\n\t\t\tthreeJsVariables.labelRenderer.render(threeJsVariables.scene, threeJsVariables.perspectiveCamera);\n\t\t}\n\t}\n}\n\nexport function getCanvasWidthDiff() {\n\tconst {innerWidth} = window;\n\tconst canvas = threeJsVariables.renderer.getSize(new Vector2());\n\n\tif (isMobile) {\n\t\treturn new Vector2(0, 0);\n\t} else if (isDesktop) {\n\t\treturn new Vector2(0, 0);\n\t} else {\n\t\tif (getCurrentLangDirection() === 'ltr') {\n\t\t\treturn new Vector2(innerWidth - canvas.x, canvas.y);\n\t\t} else {\n\t\t\treturn new Vector2(0, 0);\n\t\t}\n\t}\n}\n\n// export function updateLabels() {\n// return;\n// // const canvasSize = threeJsVariables.renderer.getSize(new Vector2());\n// if (Object.keys(threeJsVariables.labelRenderer).length) {\n// // threeJsVariables.labelRenderer.setSize(canvasSize.x, canvasSize.y);\n// const langDirection = getCurrentLangDirection();\n// switch (langDirection) {\n// case 'rtl':\n// threeJsVariables.labelRenderer.domElement.style.right = '0';\n// break;\n// case 'ltr':\n// threeJsVariables.labelRenderer.domElement.style.left = '0';\n// break;\n// }\n// }\n// }\n\nfunction addLabelRenderContainer() {\n\tconst rootHeight = TRoot.getBoundingClientRect().height;\n\tconst rootWidth = TRoot.getBoundingClientRect().width;\n\tthreeJsVariables.labelRenderer = new CSS2DRenderer();\n\tthreeJsVariables.labelRenderer.setSize(rootWidth, rootHeight);\n\tthreeJsVariables.labelRenderer.domElement.addEventListener('click', (e) => {\n\t\tcssPoiHandler(e);\n\t});\n\n\tnew BaseElement()\n\t\t.addAttribute('id', 'three_d_css')\n\t\t.appendTo(TRoot)\n\t\t.appendElement(threeJsVariables.labelRenderer.domElement);\n\n\treturn threeJsVariables.labelRenderer;\n}\n\nexport const applySafariFixForFlatLabels = () => {\n\tconst three_d_css = document.getElementById('three_d_css');\n\tif (!Boolean(three_d_css))\n\t\treturn;\n\n\tconst rtl = document.documentElement.getAttribute('dir') === 'rtl';\n\tif (isSafari && !rtl)\n\t\tthree_d_css.classList.add('safari');\n}\n\nexport const removeSafariFixForFlatLabels = () => {\n\tconst three_d_css = document.getElementById('three_d_css');\n\tif (!Boolean(three_d_css))\n\t\treturn;\n\n\tthree_d_css.classList.remove('safari');\n}\n\n// const doubleClickHandler = (e) => {\n// e.preventDefault();\n// // console.log('window: ', settingsData.doubleClick)\n// settingsData.doubleClick = true;\n// setTimeout(() => {settingsData.doubleClick = false}, 1000)\n// }\n\n// export function checkTabletMode () {\n// // const correctViewPort = window.innerWidth >= 768 && window.innerWidth <= 1024 && window.innerHeight >= 850 && window.innerHeight <= 1366;\n// // const correctUserAgent = navigator.userAgent.match(/Tablet|iPad/i);\n// //\n// // return correctUserAgent && correctViewPort;\n//\n// return false;\n// }\n\n// export function rendererAnimationPause(value) {\n// return;\n// if (value) {\n// setTimeout(() => {\n// settingsData.stopRender = value;\n// }, 1000);\n// } else {\n// settingsData.stopRender = value;\n// }\n// }\n\n// export function updateRenderer() {\n// //threeJsVariables.renderer.render(threeJsVariables.scene, threeJsVariables.perspectiveCamera); // not stop renderer\n// }\n\n// function waitAnimations () {\n// if (settingsData.animationsList.length === 0){\n// return;\n// }\n//\n// userPrevent(true);\n//\n// settingsData.activeViewMode === ViewMode.FloorPlan && flatLabelsRemove();\n//\n// Promise.all(settingsData.animationsList)\n// .then(()=>{\n// settingsData.animationsList = [];\n// userPrevent(false);\n// settingsData.activeViewMode === ViewMode.FloorPlan && flatLabelsUpdate(settingsData.currentFloor);\n// })\n// }\n\n// export const manager = new LoadingManager();\n// manager.onStart = function (url, itemsLoaded, itemsTotal) {\n// };\n//\n// manager.onProgress = (url, itemsLoaded, itemsTotal) => {\n// // console.log(`itemsTotal / itemsLoaded = ${itemsTotal} / ${itemsLoaded}`);\n// settingsData.totalPercent = (itemsLoaded / itemsTotal * 100);\n// console.log(settingsData.totalPercent,url);\n// };\n//\n//\n// manager.onLoad = async () => {\n// //await loadCylinderGrid();\n// // loadCylinderGrid();\n// // if (config.cesiumEnvironment.envType !== EnvironmentTypes.TilesEnv){\n// //removePreloader();\n// await startProjectWithError();\n// projectMode.Cylinder = new Cylinder();\n// projectMode.FloorPlan = new FloorPlan();\n//\n// // }\n// };\n\n// const cursorOffset = {\n// left : 20,\n// top : -15\n// };\n//\n// const cursor = document.getElementById('cursor');\n//\n// document.getElementById('c').addEventListener('mousemove',function(e) {\n// if (settingsData.customCursor){\n// e.target.style.cursor = 'none';\n// cursor.style.left = (e.pageX - cursorOffset.left) + 'px';\n// cursor.style.top = (e.pageY - cursorOffset.top) + 'px';\n// cursor.style.display = 'block';\n// } else {\n// cursor.style.display = 'none';\n// }\n// }, false);\n","/** Constants and Enums **/\n\nexport const SelectedObjectType = {\n Building: 'building',\n SelectionBoxes: 'selectionBoxes',\n Route:'route',\n Plug: 'plug',\n Arrow: 'arrow',\n Cloth: 'cloth'\n}\n\nexport const ViewMode = {\n District: 'district',\n Orbit: 'orbit',\n Cylinder: 'cylinder',\n FloorPlan: 'floorplan'\n}\n\nexport const EnvironmentTypes = {\n CesiumEnv: 'cesium',\n CesiumMultiEnv: 'cesium-multi',\n TilesEnv: 'tiles',\n GooglePhotorealistic: 'google-tiles',\n Ground: 'ground',\n Buildings: 'buildings',\n Trees: 'trees',\n BackHouses: 'backHouses',\n}\n\nexport const CardTypes = {\n Unit: 'unit',\n Options: 'options',\n Amenities: 'amenities',\n Similar: 'similar',\n MobileCard: 'mobile'\n}\n\nexport const FilterTypes = {\n Range: 'range'\n}\n\nexport const PagesForPagination = {\n Gallery: 'gallery',\n Map: 'map',\n About : 'about',\n Model3D: '3dModel',\n Search: 'search',\n ContactUs: 'contactUs',\n Documents: 'documents',\n Specifications: 'specifications'\n}\n","'use strict';\n\nimport TWEEN from '../js/libs/tween.umd';\nimport {\n Buildings,\n cardsData, components, GSAPAnimationMixer, isDesktop, isDev,\n isMobile, isTablet, isWeb,\n projectMode, resourcesFolder,\n settingsData,\n threeJsVariables, UIRoot,\n} from './settings';\nimport {add_tween_animation, animateCamera} from './modules/threejs/animation';\nimport {CardTypes, ViewMode} from \"./common\";\nimport {\n changeSelectionBoxesStatusColor,\n markSelectedApartments,\n searchGetResults, updateComponentsOnCanvasResize,\n} from './modules/menu/search/search';\n\nimport {\n enableOrbitControls,\n enableTrackballControls,\n getCurrentCameraDistance,\n getOrbitControlsDistanceAndPan,\n getPolarAngleFromViewMode,\n getWorldData,\n resetPanLimits,\n setMinAndMaxControlsDistance,\n setPanLimits,\n setPolarAngle,\n} from './modules/controls/orbitControls';\nimport {\n changeLangToCurrent,\n getCurrentLang,\n getCurrentLangDirection\n} from \"./modules/components/langSwitcher/langSwitcher\";\nimport {\n setMenuActive\n} from \"./modules/menu/menu\";\nimport {\n Box3,\n BufferGeometry,\n CatmullRomCurve3,\n BufferAttribute,\n Group,\n Mesh,\n EllipseCurve, Line, LineBasicMaterial,\n MeshBasicMaterial,\n MeshPhongMaterial,\n Texture,\n Vector2,\n Vector3,\n} from 'three';\nimport {openOptionsCard} from \"./modules/cards/optionsCards\";\nimport {similarFavoriteHandle} from \"./modules/menu/search/similarSearch\";\nimport {analytics} from \"./modules/analytics/analytics\";\nimport {UnitCardClass} from \"./modules/cards/unitCards/UnitCardClass\";\nimport {setLordIcon} from './lordicon';\nimport {buildingHoverOut, intersectionClickHandler, selectionBoxesSetStatusColor} from './modules/threejs/raycast';\nimport {Spherical} from 'three';\nimport {OutlineEdges} from './libs/outlineEdges/OutlineEdges';\nimport {Favorite} from './modules/components/Favorite/Favorite';\nimport {BaseElement} from \"./modules/interfaces/BaseElement\";\nimport {getProps, getSales} from \"./modules/crm/crm-requests\";\nimport {IntersectionLegenda} from \"./modules/components/IntersectionLegenda\";\nimport gsap from 'gsap';\nimport Notiflix from \"notiflix\";\nimport {\n autoZoomIsActive,\n fitModelInViewport,\n getObjectViewDistance,\n getZoomParams,\n} from './modules/controls/zoomControl';\nimport {\n cylinderFloorNumbers,\n removeCylinderFloorNumbers, rotateCylinderFloorNumbers,\n} from './modules/components/cylinderFloorNumbers/cylinderFloorNumbers';\nimport {BmbyMode} from \"./modules/mode/BmbyMode\";\nimport { Lerp } from './modules/projectTime/Lerp';\nimport {renderUpdateValuesOnDemand} from \"./app\";\nimport { mergeGroups } from 'three/examples/jsm/utils/BufferGeometryUtils';\n\nconst md5 = require('md5');\n\nexport const RTL_LANGUAGES = ['he', 'ar'];\n\nexport function restrictUserInteractions(action) {\n action = !!action;\n\n enableTrackballControls(!action);\n enableOrbitControls(!action);\n userPrevent(action);\n}\n\nexport function moveCameraToBuildingInCylinder(name) {\n const mixer = GSAPAnimationMixer.registerNewMixer('moveToBuilding');\n const building = Buildings.getBuilding(name);\n const buildingSelectionBoxes = building.selectionsGroup;\n const selectionBox = new Box3().setFromObject(buildingSelectionBoxes);\n const {minDistance, maxDistance} = getOrbitControlsDistanceAndPan(ViewMode.Cylinder);\n const {minAngle} = getPolarAngleFromViewMode(ViewMode.Cylinder);\n const buildingBoxCenter = selectionBox.getCenter(new Vector3());\n const buildingCenterPoint = buildingSelectionBoxes.getWorldPosition(new Vector3()).setY(buildingBoxCenter.y);\n const {cameraVector, orbitControlsVector} = getWorldData();\n\n if (document.getElementById('building-switcher')) {\n const activeItem = document.querySelector('#building-switcher .building-item.active');\n const targetItem = document.querySelector(`.building-item[data-building=\"${building.name}\"]`);\n activeItem.classList.remove('active');\n targetItem.classList.add('active');\n }\n\n mixer.addCallback('onComplete', () => {\n cylinderFloorNumbers().then(() => rotateCylinderFloorNumbers());\n if (config.features.privateHouseMode) {\n setPolarAngle(ViewMode.Orbit);\n setMinAndMaxControlsDistance(ViewMode.Orbit);\n setPanLimits(ViewMode.Orbit);\n } else {\n setPolarAngle(ViewMode.Cylinder);\n setMinAndMaxControlsDistance(ViewMode.Cylinder);\n setPanLimits(ViewMode.Cylinder);\n }\n Buildings.deactivateBuilding();\n Buildings.activateBuilding(building.name);\n IntersectionLegenda.build();\n projectMode.Cylinder.setApartmentsToIntersection(building);\n });\n\n const cameraAnimation = animateCamera(\n cameraVector,\n cameraVector,\n orbitControlsVector,\n buildingCenterPoint,\n undefined,\n minDistance,\n minAngle,\n config.threejs.orbitControls.polarCameraCorrection,\n 1000,\n TWEEN.Easing.Sinusoidal.InOut,\n () => {\n buildingHoverOut();\n resetPanLimits();\n removeCylinderFloorNumbers();\n }\n );\n\n mixer.addAnimation(cameraAnimation);\n mixer.play();\n}\n\nexport async function flatClick(apartment) {\n\tif (settingsData.bombBlock && !settingsData.doubleClick || userPrevent())\n\t\treturn;\n\n\tif (config.features.privateHouseMode) {\n\t const activeBuilding = Buildings.getActiveBuilding();\n\t const targetBuilding = apartment.userData.crm_data.buildingEngineId;\n\t if (activeBuilding && activeBuilding.name !== targetBuilding) {\n moveCameraToBuildingInCylinder(targetBuilding);\n }\n\t}\n\n const id = apartment.userData.crm_data?.engineId;\n if (id) {\n projectMode.Cylinder.cylinderBuildingLabels.markLabel(id,'click');\n const openedCard = UnitCardClass.findCard(id);\n if (openedCard) {\n if (settingsData.doubleClick\n && (apartment === settingsData.selectedObject)\n && !document.querySelector(`.${CardTypes.Options}-card`))\n openOptionsCard();\n\n if (config.features.privateHouseMode) {\n markSelectedApartments(id);\n }\n return;\n }\n }\n\n cardsData.cardMode.isAmenities = apartment.userData?.customSelection;\n\n if (!config.features.privateHouseMode && apartment.userData.crm_data?.engineId !== '') {\n if ((!projectMode.LiteMode.modeIs('picture') && !projectMode.LiteMode.modeIs('empty')) && !cardsData.cardMode.isAmenities) {\n !settingsData.buildingDestroyed\n ? rotation_to_flat(apartment)\n : await moveAroundTheFloors(apartment.userData.crm_data.engineId);\n }\n }\n\n const floorIndex = apartment.userData?.floor;\n settingsData.currentFloor = !cardsData.cardMode.isAmenities ? floorIndex : settingsData.currentFloor;\n if (cardsData.cardMode.isAmenities) {\n if (isMobile) {\n components.mobileSearch.focusOnApartment(id);\n } else {\n openOptionsCard({object: apartment.userData?.crm_data?.engineId === '' ? apartment.userData.crm_data : undefined});\n }\n } else if (!apartment?.userData?.buildingFloors) {\n if (settingsData.doubleClick && !document.querySelector(`.${CardTypes.Options}-card`))\n openOptionsCard();\n\n if (isMobile) {\n components.mobileSearch.focusOnApartment(id);\n } else {\n UnitCardClass.cards.push(new UnitCardClass(apartment.userData.crm_data));\n const currentCard = UnitCardClass.cards.find(card => card.engineId === apartment.userData.crm_data.engineId);\n currentCard.createCard();\n }\n }\n\n if (isMobile) {\n markSelectedApartments(id);\n } else {\n if (!cardsData.cardMode.isAmenities)\n markSelectedApartments(id);\n }\n}\n\nexport function lazyLoadingData(loader, url) {\n return new Promise((res, rej) => {\n loader.load(\n url,\n loadData => {\n res(loadData);\n },\n undefined,\n (err) => {\n settingsData.loadingError = true;\n rej(err);\n });\n });\n}\n\nexport function lazyLoadingAll(promises) {\n return Promise.all(promises);\n}\n\nexport function setColorsKeyPlan(currentFloorIndex = null) {\n const activeBuilding = Buildings.getActiveBuilding();\n\n for (const apt of activeBuilding.apartments) {\n const isFirstFloor = currentFloorIndex === 0 && apt.userData.floor === 0;\n\n if (apt.userData.isInSearch)\n continue;\n\n if (isFirstFloor || currentFloorIndex && apt.userData.floor === currentFloorIndex) {\n selectionBoxesSetStatusColor(apt, 'lock');\n } else {\n const searchIsOpen = document.querySelector('.search__container-main');\n if (!searchIsOpen || !apt.userData.isInSearch)\n selectionBoxesSetStatusColor(apt, 'unlock');\n }\n\n apt.userData.isClicked && selectionBoxesSetStatusColor(apt, 'click');\n }\n}\n\nexport function isPortraitMode() {\n return window.matchMedia(\"(orientation: portrait)\").matches;\n}\n\n// export function detectMobile() {\n// \tlet t = getUrlParam('type')\n// \tif (t === 'android' || t === 'ios') {\n// \t\treturn true;\n// \t} else {\n// \t\tif (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|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|phone)|xda|xiino/i.test(navigator.userAgent)\n// \t\t\t|| /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(navigator.userAgent.substr(0, 4))) {\n//\n// \t\t\treturn true;\n// \t\t}\n// \t}\n// \treturn false;\n// }\n\nexport function numberWithCommas(number, isPrice = false) {\n\tlet param;\n\tswitch (getCurrentLang()) {\n\t\tcase 'en':\n\t\t\tparam = 'en-US';\n\t\t\tbreak;\n\t\tcase 'ar':\n\t\tcase 'he':\n\t\t\tparam = 'he-IL';\n\t\t\tbreak;\n\t\t// case 'ar':\n\t\t// \tparam = 'ar-IL';\n\t\t// \tbreak;\n\t\tcase 'el':\n\t\t\tparam = 'el-GR';\n\t\t\tbreak;\n\t\tcase 'fr':\n\t\t\tparam = 'fr-FR';\n\t\t\tbreak;\n\t\tcase 'es':\n\t\t\tparam = 'es-ES';\n\t\t\tbreak;\n\t\tcase 'ru':\n\t\t\tparam = 'ru-RU';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tparam = 'en-US';\n\t}\n\n if (isPrice) {\n number = number.toString().replace(/[,.\\s]/g, '');\n } else {\n number = number.toString().replace(/[,\\s]/g, '.');\n }\n\n if (parseInt(number) < 0)\n return number;\n return parseFloat(number).toLocaleString(param);\n}\n\n// export function object_disappear(object, duration = 1000, delay = 0, easing = TWEEN.Easing.Linear.None) {\n// if (object.children.length > 0) {\n// object.children.forEach(function (children) {\n// object_disappear(children, duration, delay, easing);\n// });\n// } else {\n// let object_materials = object.material;\n// if (Array.isArray(object_materials)) {\n// object_materials.forEach(function (material) {\n// material_disappear(material, duration, delay, easing);\n// });\n// } else {\n// material_disappear(object_materials, duration, delay, easing);\n// }\n// }\n// setTimeout(function () {\n// object.visible = false;\n// }, duration);\n// }\n\n// export function object_appear(object, duration = 1000, delay = 0, easing = TWEEN.Easing.Linear.None) {\n// object.visible = true;\n// if (object.children.length > 0) {\n// object.children.forEach(function (children) {\n// object_appear(children, duration, delay, easing);\n// });\n//\n// } else {\n// let object_materials = object.material;\n// if (Array.isArray(object_materials)) {\n// object_materials.forEach(function (material) {\n// material_appear(material, duration, delay, easing);\n// });\n// } else {\n// material_appear(object_materials, duration, delay, easing);\n// }\n// }\n// }\n\n// function material_disappear(material, duration, delay, easing) {\n// material.transparent = true;\n// if (!material.userData.base_opacity) {\n// material.userData.base_opacity = material.opacity;\n// }\n//\n// add_tween_animation({\n// 'animation_obj': settingsData.tween_animations,\n// 'start': {\n// opacity: material.opacity\n// },\n// 'target': {\n// opacity: 0\n// },\n// 'duration': duration,\n// 'easing': easing,\n// 'delay': delay\n// }, function (e) {\n// material.opacity = e.opacity;\n// }, function (e) {\n// material.opacity = 0;\n// }, () => {\n// });\n// }\n\n// function material_appear(material, duration, delay, easing) {\n// material.transparent = true;\n// add_tween_animation({\n// 'animation_obj': settingsData.tween_animations,\n// 'start': {\n// opacity: material.opacity\n// },\n// 'target': {\n// opacity: material.userData.base_opacity\n// },\n// 'duration': duration,\n// 'easing': easing,\n// 'delay': delay\n// }, function (e) {\n// material.opacity = e.opacity;\n// }, function (e) {\n// material.opacity = material.userData.base_opacity;\n// // rendererAnimationPause(true);\n// }, () => {\n// // rendererAnimationPause(false)\n// });\n// }\n\nexport function createHtmlElement(parent, elementName, elementTag, elementClass) {\n const el = document.createElement(elementTag);\n if (Array.isArray(elementClass)) {\n elementClass.forEach(classElement => {\n el.classList.add(classElement);\n });\n } else {\n el.style.cssText = elementClass;\n }\n el.innerHTML = elementName;\n if (parent) {\n parent.appendChild(el);\n }\n return el;\n}\n\nexport function rotation_to_flat(apartment, smooth = true) {\n if (config.threejs.orbitControls.cylinder.controls === 'map') return;\n\n const {flatVector} = getWorldData(apartment);\n const delta = calculateDeltaFromVec3(flatVector);\n const from = threeJsVariables.orbitControls.getAzimuthalAngle();\n\n if (smooth) {\n const azimuth = {\n value: 0\n };\n\n if (from !== from + delta) {\n const animation = gsap.to(azimuth, {\n value: delta,\n duration: GSAPAnimationMixer.duration,\n ease: GSAPAnimationMixer.ease,\n onUpdate: () => threeJsVariables.orbitControls.setAzimuthAngle(from + azimuth.value),\n // onComplete: () => isMobile && zoomToTheFlat()\n });\n\n GSAPAnimationMixer.addToMixer('floorPlan', animation);\n }\n\n } else {\n threeJsVariables.orbitControls.setAzimuthDeltaAngle(delta);\n }\n\n return delta;\n}\n\nfunction zoomToTheFlat() {\n const dummy = {value: 0};\n gsap.to(\n dummy,\n {\n value: isMobile ? 0 : 0.3,\n duration: 0.5,\n ease: 'power2.out',\n onStart: () => {\n userPrevent(true)\n },\n onUpdate: () => {\n threeJsVariables.trackballControls.zoomCamera(dummy.value);\n },\n onComplete: () => {\n userPrevent(false)\n }\n }\n );\n}\n\nexport function freezingCanvas (state) {\n if (state) {\n threeJsVariables.canvasResize = false;\n } else {\n threeJsVariables.canvasResize = true;\n updateComponentsOnCanvasResize();\n }\n}\n\nexport function zoomToApartment (apt) {\n if (settingsData.activeViewMode !== ViewMode.Cylinder)\n return;\n\n const {flatVector,orbitControlsVector} = getWorldData(apt);\n const target = new Vector3(orbitControlsVector.x,flatVector.y,orbitControlsVector.z);\n const delta = calculateDeltaFromVec3(flatVector);\n const currentDelta = threeJsVariables.orbitControls.getAzimuthalAngle();\n const thetaLerp = new Lerp(currentDelta,currentDelta + delta);\n const distanceLerp = new Lerp(getCurrentCameraDistance(),threeJsVariables.trackballControls.minDistance);\n\n gsap.to(orbitControlsVector,{\n x: target.x,\n y: target.y,\n z: target.z,\n duration: GSAPAnimationMixer.duration,\n ease: GSAPAnimationMixer.ease,\n onUpdate: () => threeJsVariables.orbitControls.target.copy(orbitControlsVector)\n });\n\n const cameraProgress = {\n value: 0\n };\n\n const direction = new Vector3();\n\n gsap.to(cameraProgress,{\n value: 1,\n duration: GSAPAnimationMixer.duration,\n ease: GSAPAnimationMixer.ease,\n onUpdate: () => {\n threeJsVariables.orbitControls.setAzimuthAngle(thetaLerp.lerp(cameraProgress.value));\n direction.subVectors(threeJsVariables.perspectiveCamera.position,threeJsVariables.orbitControls.target);\n direction.normalize().setLength(distanceLerp.lerp(cameraProgress.value)).add(threeJsVariables.orbitControls.target);\n threeJsVariables.perspectiveCamera.position.copy(direction);\n }\n });\n}\n\n\nexport async function zoomOut () {\n const activeBuilding = Buildings.getActiveBuilding();\n if (!activeBuilding.selectionsGroup || settingsData.activeViewMode !== ViewMode.Cylinder)\n return;\n\n const box = new Box3().setFromObject(activeBuilding.selectionsGroup);\n const center = new Vector3();\n box.getCenter(center);\n const distance = getObjectViewDistance(activeBuilding.selectionsGroup);\n const distanceLerp = new Lerp(getCurrentCameraDistance(),distance);\n const targetLerp = new Lerp(threeJsVariables.orbitControls.target.y,center.y);\n const distanceProgress = {\n value: 0\n };\n\n const direction = new Vector3();\n\n gsap.to(distanceProgress,{\n value: 1,\n duration: GSAPAnimationMixer.duration,\n ease: GSAPAnimationMixer.ease,\n onUpdate: () => {\n threeJsVariables.orbitControls.target.y = targetLerp.lerp(distanceProgress.value);\n direction.subVectors(threeJsVariables.perspectiveCamera.position,threeJsVariables.orbitControls.target);\n direction.normalize().setLength(distanceLerp.lerp(distanceProgress.value)).add(threeJsVariables.orbitControls.target);\n threeJsVariables.perspectiveCamera.position.copy(direction);\n }\n })\n}\n\nexport function enableSwitcherBtns(action) {\n const nav_btns = document.querySelectorAll('#building-switcher .new-ui-direction-btn');\n if (nav_btns.length > 0) {\n nav_btns.forEach(switcherBtn => {\n if (action) {\n switcherBtn.removeAttribute('disabled');\n } else {\n switcherBtn.setAttribute('disabled', 'true');\n }\n });\n }\n}\n\n// export function get_url_param(name) {\n// \tconst queryString = window.location.search;\n// \tconst urlParams = new URLSearchParams(queryString);\n// \tif (urlParams) {\n// \t\tlet param = urlParams.get(name);\n// \t\tif (param !== null) {\n// \t\t\treturn param;\n// \t\t} else {\n// \t\t\treturn false;\n// \t\t}\n// \t}\n// }\n\nexport function getUrlParam(name) {\n const url = new URL(window.location.href);\n const searchParam = url.searchParams.get(name);\n\n return searchParam;\n}\n\nexport function isUrlHasParam(name) {\n const url = new URL(window.location.href);\n const isParamExist = url.searchParams.has(name);\n\n return isParamExist;\n}\n\nexport function getUrlSearchQuery() {\n const url = new URL(window.location.href);\n\n return url.search;\n}\n\nexport function checkHash(name) {\n const value = getUrlParam(name);\n config.general.hash = md5(window.location.host);\n return config.general.hash === value;\n}\n\nexport function createMaterialAndSetBaseColor(apartment, addEdges = true) {\n\n\tconst {active, color} = config.resources.bundle.selectionBoxes.edges;\n\t//\n\t// if (projectMode.LiteMode.isActive() && !projectMode.LiteMode.modeIs('regular')) {\n\t// \tapartment.material = new MeshPhongMaterial({\n\t// \t\tcolor: '#0d61af',\n\t// \t\ttransparent: true,\n\t// \t\topacity: 0,\n\t// \t\tdepthWrite: false,\n\t// \t\tdepthTest: true,\n\t// \t});\n\t//\n\t// \tif (active && addEdges) {\n\t// \t\tnew OutlineEdges(apartment, {\n\t// \t\t\tcolor: `${color}`\n\t// \t\t});\n\t// \t}\n\t//\n\t// } else {\n\n apartment.material = new MeshBasicMaterial({\n color: '#0d61af',\n transparent: true,\n opacity: 0,\n depthWrite: false,\n depthTest: true,\n });\n\n\t\tconst isAmenity = apartment.name.match(/_amenity_/g);\n\t\t// const allowedStatuses = ['Available', 'Saved', 'inSaving', 'Sold', 'Unavailable'];\n\t\t// const areCrmDataAndStatusPresent = apartment.userData.crm_data && allowedStatuses.includes(apartment.userData.crm_data.status);\n\t\tif (active && !isAmenity && apartment.userData.crm_data && addEdges) {\n\t\t\tnew OutlineEdges(apartment, {\n\t\t\t\tcolor: `${color}`\n\t\t\t});\n\t\t}\n\t// }\n\n // apartment.material = new THREE.MeshBasicMaterial({\n // color: '#0d61af',\n // transparent: true,\n // opacity: 0,\n // depthWrite: false,\n // depthTest: true,\n // });\n\n}\n\nexport function removeSelectionBoxesLockColor(building, switchBuilding) {\n if (projectMode.LiteMode.isActive() && (projectMode.LiteMode.modeIs('picture') || projectMode.LiteMode.modeIs('empty')) || config.features.privateHouseMode) {\n const buildings = Buildings.getBuildingsArray();\n\n buildings.forEach(building => {\n const apartments = building.getApartments();\n apartments.forEach(apt => {\n apt.userData.isActive = false;\n apt.userData.isInSearch = false;\n apt.userData.isClicked = false;\n selectionBoxesSetStatusColor(apt, 'unlock');\n });\n\n });\n\n return;\n }\n\n if (!building) {\n building = Buildings.getActiveBuilding();\n }\n\n if (config.resources.bundle.selectionBoxes.edges.active && !projectMode.LiteMode.modeIs('schematic')) {\n const buildings = Buildings.getBuildingsArray();\n buildings.forEach(building => {\n building.apartments.forEach(apt => {\n const outline = apt.getObjectByName('Outline');\n if (outline) {\n outline.visible = false;\n }\n });\n });\n }\n\n if (building?.apartments?.length > 0) {\n const apartmentWithAmenities = building?.apartments.concat(building.customSelections.filter(selection => selection.userData.crm_data.engineId !== ''));\n apartmentWithAmenities.forEach(item => {\n item.userData.isActive = false;\n item.userData.isInSearch = false;\n item.userData.isClicked = false;\n if (isMobile)\n selectionBoxesSetStatusColor(item, 'hoverOut', undefined, undefined, switchBuilding);\n selectionBoxesSetStatusColor(item, 'unlock', undefined, undefined, switchBuilding);\n });\n }\n}\n\nexport function userPrevent(value = undefined) {\n if (value !== undefined) {\n settingsData.userPrevent = value;\n } else {\n return settingsData.userPrevent;\n }\n}\n\nexport const changeBorderRadius = (element) => {\n // const root = document.querySelector(':root');\n // const borderShape = document.querySelector(':root').style.getPropertyValue('--buttonShape');\n const borderShape = getCSSVarValue('--buttonShape');\n if (borderShape === 'var(--roundedCorners)')\n setCSSVar('--specificRoundedCorners', '30px');\n // root.style.setProperty('--specificRoundedCorners', '30px');\n if (element.classList.contains('nmf-range-selector') && borderShape === 'var(--roundedCorners)')\n setCSSVar('--specificBorder', '3px')\n // root.style.setProperty('--specificBorder', '3px');\n if (element.classList.contains(`${CardTypes.Options}-card__plans-box_disclaimer-opacity`) &&\n borderShape === 'var(--roundedCorners)')\n setCSSVar('--specificBorderForDisclaimer', '4px');\n // root.style.setProperty('--specificBorderForDisclaimer', '4px');\n}\n\n// export const addHeader = (parent, title) => {\n// \tif (isMobile && settingsData.isLandscape)\n// \t\treturn;\n//\n// \tparent.childNodes.forEach(elem => {\n// \t\tif (elem === document.querySelector('.widget__container-title')) return;\n// \t})\n//\n// \tnew BaseElement('h2')\n// \t\t.addClass('widget__container-title', 'language-string')\n// \t\t.addAttribute('data-dictionary', title)\n// \t\t.innerHtml(changeLangToCurrent(title))\n// \t\t.appendTo(parent);\n// }\n\n// export const isElementScrolledTo = (element, direction) => {\n// switch (direction) {\n// case 'top':\n// return element.scrollTop === 0;\n// case 'bottom':\n// return Math.round(element.scrollHeight - element.scrollTop) - Math.round(parseFloat(getComputedStyle(element).height)) === 0;\n// case 'left':\n// return element.scrollLeft === 0;\n// case 'right':\n// return Math.round(element.scrollWidth - element.scrollLeft) - Math.round(parseFloat(getComputedStyle(element).width)) <= 0;\n// default:\n// console.log('isElementScrolledTo default case');\n// }\n// }\n\n// export const addCloseBtn = (parent) => {\n// const isCloseBtnExist = parent.querySelector('.widget__container-close');\n// if (isCloseBtnExist)\n// return;\n//\n// new BaseElement('button')\n// .addClass('widget__container-close', 'icon-right')\n// .appendTo(parent)\n// .event('click', closeButtonHandler);\n// }\n\n// const closeButtonHandler = (parent) => {\n// parent.classList.remove('show-page');\n// if (isMobile) {\n// projectMode.Pagination.paginate({source: 'widget-close-button'});\n// playDownAllMenuButtons();\n// highlightMenuButtonDependsOnMode();\n// }\n//\n// if (parent.classList.contains(\"search__container-main\")) {\n// removeSearchContainer();\n// return;\n// }\n// settingsData.stopRender = false;\n// mobileBurgerStyleToggle();\n// mapElementStyleToggle(parent);\n// }\n\nexport const highlightMenuButtonDependsOnMode = () => {\n const mapElement = document.body.querySelector('.widget__container[data-menu-item=\"map\"]');\n if (mapElement && mapElement.classList.contains('show-page')) {\n setMenuActive('map');\n return;\n }\n switch (settingsData.activeViewMode) {\n case ViewMode.Orbit:\n setMenuActive('3dModel');\n break;\n case ViewMode.Cylinder:\n setMenuActive('search');\n break;\n }\n}\n\nexport const lockScreenOrientation = () => {\n if (isWeb || isDesktop)\n return;\n\n const tableLockContainer = document.querySelector('.tablet-plug');\n const tabletUnlockRule = isTablet && settingsData.isLandscape;\n const tabletLockRule = isTablet && !settingsData.isLandscape;\n\n // const restrictedMobileOrientation = config.features?.mobileRestrictionOrientation?.active ? config.features?.mobileRestrictionOrientation?.type : false;\n // const isAllowedOrientation = restrictedMobileOrientation !== (settingsData.isLandscape ? 'landscape' : 'portrait');\n\n // const isOrbit = settingsData.activeViewMode === ViewMode.Orbit;\n // const isPopUpPage = document.querySelector('.pop-up-page:not(.hidden)');\n // const isContact = document.querySelector('.md-id.--show-dropdown');\n // const isVideoPopUp = document.querySelector('.video-pop-up[state=\"expanded\"]');\n // const isMobileMenu = document.querySelector('.aside__container.mobile-menu__show');\n // const isScreenEmpty = !isPopUpPage && !isContact && !isMapOpened() && !isVideoPopUp && !isMobileMenu;\n\n const mobileUnlockRule = isMobile && !settingsData.isLandscape;\n const mobileLockRule = isMobile && settingsData.isLandscape;\n\n if (tableLockContainer && (tabletUnlockRule || mobileUnlockRule)) {\n tableLockContainer.remove();\n } else if (tabletLockRule || mobileLockRule) {\n lockScreenForTablet();\n }\n}\n\nconst lockScreenForTablet = () => {\n if (document.querySelector('.tablet-plug'))\n return;\n\n const landscape = {\n en: \"landscape\",\n he: \"נוֹף\"\n };\n\n const portrait = {\n en: \"portrait\",\n he: \"דְיוֹקָן\"\n };\n\n const targetOrientation = settingsData.isLandscape ? portrait : landscape;\n // const orientationTranslations = {\n // landscape: {\n // en: \"landscape\",\n // he: \"נוֹף\"\n // },\n // portrait: {\n // en: \"portrait\",\n // he: \"דְיוֹקָן\"\n // }\n // };\n\n const chosenOrientation = {chosenOrientation: targetOrientation};\n\n // const chosenOrientation = orientationTranslations[targetOrientation];\n const titleText = `For maximum experience please rotate your device to {{orientation}}`;\n const subTitleText = 'if screen does not rotate, make sure your screen orientation is unlocked';\n\n const container = new BaseElement()\n .addClass('tablet-plug', 'non-canvas')\n .appendTo(document.body)\n .DOMElement;\n setLordIcon('rotate', container, {\n stroke: '100'\n });\n\n new BaseElement()\n .addClass('tablet-plug__title', 'language-string')\n .addAttribute('data-dictionary', 'tabletPlugTitle')\n .innerHtml(changeLangToCurrent('tabletPlugTitle', [chosenOrientation]))\n .appendTo(container);\n new BaseElement()\n .addClass('tablet-plug__subtitle', 'language-string')\n .addAttribute('data-dictionary', 'tabletPlugSubtitle')\n .innerHtml(changeLangToCurrent('tabletPlugSubtitle', [chosenOrientation]))\n .appendTo(container);\n}\n\nexport function plugTexture() {\n const canvas = document.createElement('canvas');\n canvas.width = 4;\n canvas.height = 4;\n const context = canvas.getContext('2d');\n context.fillStyle = '#000000';\n context.fillRect(0, 0, 4, 4);\n return new Texture(canvas);\n}\n\nexport const findSelectionAndCrmData = (engineId) => {\n const towerName = engineId.split('_')[0];\n const isAmenity = engineId.split('_')[1] === 'amenity';\n\n let activeTower;\n let selectedMesh;\n let crmDataOfFlat;\n activeTower = Buildings.getBuilding(towerName);\n selectedMesh = activeTower[isAmenity ? 'customSelections' : 'apartments'].find(item => item.name === engineId);\n crmDataOfFlat = selectedMesh?.userData.crm_data;\n\n return {activeTower, selectedMesh, crmDataOfFlat};\n}\n\nexport const handleFavoriteLogic = (e, action) => {\n if (e?.target?.classList.contains(`${CardTypes.Similar}-card__favorite-label`) || (e?.target?.tagName === 'LORD-ICON') && e?.target?.parentElement.classList.contains(`${CardTypes.Similar}-card__favorite-label`)) {\n similarFavoriteHandle(e);\n return;\n }\n\n let activeUnitCard = UnitCardClass.findCard(false, 'active')?.html;\n if (!cardsData.multiplyCards)\n activeUnitCard = UnitCardClass.findCard()?.html;\n\n let data;\n if (e.target.closest('.search__result-item')) {\n data = findSelectionAndCrmData(e.target.closest('.search__result-item').getAttribute('data-engineid'));\n } else if (e.target.closest(`.${CardTypes.Unit}-card`)) {\n data = findSelectionAndCrmData(e.target.closest(`.${CardTypes.Unit}-card`).getAttribute('data-engineid'));\n } else if (e.target.closest(`.${CardTypes.Options}-card`)) {\n data = findSelectionAndCrmData(e.target.closest(`.${CardTypes.Options}-card`).getAttribute('data-engineid'));\n } else if (e.target.closest(`.results-viewer__apartment-card`)) {\n data = findSelectionAndCrmData(e.target.closest(`.results-viewer__apartment-card`).getAttribute('data-engineid'));\n }\n\n if (BmbyMode.active) {\n const message = {\n action: 'MatchProperty',\n data: data.crmDataOfFlat.bmbyPropID\n };\n window.parent.postMessage(JSON.stringify(message), \"*\");\n console.log(message);\n return;\n }\n\n let storageData = getObjectFromLocalStorage(data.crmDataOfFlat.engineId);\n switch (action) {\n case ('searchClick'):\n e.target.classList.toggle('icon-favorite_selected');\n e.target.classList.toggle('icon-unselected');\n\n if (!storageData) {\n addObjectToLocalStorage(data.crmDataOfFlat);\n new Favorite(data.selectedMesh, 'add');\n } else {\n removeObjectFromLocalStorage(data.crmDataOfFlat);\n new Favorite(data.selectedMesh, 'remove');\n }\n\n if (activeUnitCard) {\n const currentCard = UnitCardClass.findCard(data.crmDataOfFlat.engineId)?.html;\n if (currentCard) {\n const unitFavoriteLabel = currentCard.querySelector(`.${CardTypes.Unit}-card__favorite-label`);\n\n unitFavoriteLabel.classList.toggle('icon-favorite_selected');\n unitFavoriteLabel.classList.toggle('icon--lord-unselected');\n }\n }\n break\n case ('cardClick'):\n const toggleMobileApartmentCardFavoriteButton = (card) => {\n if (card) {\n const labels = [...card.querySelectorAll(`.${CardTypes.MobileCard}-card__favorite-label`)];\n labels.forEach(label => {\n label.classList.toggle('icon-favorite_selected');\n label.classList.toggle('icon--lord-unselected');\n label.classList.toggle('icon-unselected');\n });\n }\n }\n\n if (isMobile) {\n toggleMobileApartmentCardFavoriteButton(e.target.closest(`.results-viewer__apartment-card`));\n } else {\n const currentCard = UnitCardClass.findCard(data.crmDataOfFlat.engineId)?.html;\n if (currentCard) {\n const label = currentCard.querySelector(`.${CardTypes.Unit}-card__favorite-label`);\n label.classList.toggle('icon-favorite_selected');\n if (label.classList.contains('icon--lord-unselected')) {\n label.classList.toggle('icon--lord-unselected');\n }\n if (label.classList.contains('icon-unselected')) {\n label.classList.toggle('icon-unselected');\n }\n }\n\n const searchItemLabel = document.querySelector(`.search__result-item[data-engineid=${data.crmDataOfFlat.engineId}] span[data-favorite=favorite]`);\n if (searchItemLabel) {\n searchItemLabel.classList.toggle('icon-favorite_selected');\n searchItemLabel.classList.toggle('icon-unselected');\n }\n }\n\n if (!storageData) {\n addObjectToLocalStorage(data.crmDataOfFlat);\n new Favorite(data.selectedMesh, 'add');\n } else {\n removeObjectFromLocalStorage(data.crmDataOfFlat);\n new Favorite(data.selectedMesh, 'remove');\n }\n\n // if (isMobile)\n // components.mobileSearch.update('favorite');\n\n const optionsCard = document.querySelector(`.${CardTypes.Options}-card`);\n if (optionsCard) {\n const currentOptionsCard = document.querySelector(`.${CardTypes.Options}-card[data-engineid=${data.crmDataOfFlat.engineId}]`);\n const optionsCardLabel = currentOptionsCard.querySelector(`.${CardTypes.Options}-card__favorite-label`);\n\n optionsCardLabel.classList.toggle('icon-favorite_selected');\n\n if (optionsCardLabel.classList.contains('icon--lord-unselected')) {\n optionsCardLabel.classList.toggle('icon--lord-unselected');\n }\n if (isMobile) {\n optionsCardLabel.classList.toggle('icon-unselected');\n const engineId = optionsCard.getAttribute('data-engineid');\n const mobileApartmentCard = document.querySelector(\n `.results-viewer__apartment-card[data-engineid=${engineId}]`\n );\n\n toggleMobileApartmentCardFavoriteButton(mobileApartmentCard);\n }\n\n }\n\n break;\n }\n\n const crmDataOfFlat = data.crmDataOfFlat;\n analytics('favorites', {storageData, crmDataOfFlat});\n}\n\nexport const addObjectToLocalStorage = (apartment) => {\n const favorites = localStorage.getItem('favorites');\n if (favorites?.length > 0) {\n localStorage.setItem('favorites', JSON.stringify([...JSON.parse(favorites), apartment]));\n } else {\n localStorage.setItem('favorites', JSON.stringify([apartment]));\n }\n}\n\nexport const removeObjectFromLocalStorage = (apartment) => {\n let storageData = JSON.parse(localStorage.getItem('favorites'));\n if (!storageData)\n return;\n\n const favorites = storageData.filter(elem => elem.engineId !== apartment.engineId).flat();\n localStorage.setItem('favorites', JSON.stringify(favorites));\n}\n\nexport function getObjectFromLocalStorage(engineId) {\n if (settingsData.lastClickedFlat?.userData?.customSelection)\n return;\n\n let storageData = JSON.parse(localStorage.getItem('favorites'));\n return storageData ? storageData.find(elem => elem.engineId === engineId) : null;\n}\n\nexport function hasFavorites() {\n const storageData = JSON.parse(localStorage.getItem('favorites'));\n if (!storageData)\n return false;\n\n return storageData.some(apt => apt.status === 'Available');\n}\n\nexport const moveAroundTheFloors = async (engineId) => {\n if (!settingsData.buildingDestroyed)\n return;\n const {selectedMesh} = findSelectionAndCrmData(engineId);\n const selectedFloor = selectedMesh.userData.floor;\n // let timeOut = 0;\n if (settingsData.currentFloor > selectedFloor) {\n await projectMode.FloorPlan.down(selectedFloor, selectedMesh);\n } else if (settingsData.currentFloor < selectedFloor) {\n await projectMode.FloorPlan.up(selectedFloor, selectedMesh);\n } else {\n rotation_to_flat(selectedMesh);\n }\n}\n\nexport function rgbaToHexA(rgbaArray, addAlphaChanel = true) {\n let r = (+rgbaArray[0]).toString(16),\n g = (+rgbaArray[1]).toString(16),\n b = (+rgbaArray[2]).toString(16),\n a = Math.round(+rgbaArray[3] * 255).toString(16);\n\n if (r.length == 1)\n r = '0' + r;\n if (g.length == 1)\n g = '0' + g;\n if (b.length == 1)\n b = '0' + b;\n if (a.length == 1)\n a = '0' + a;\n\n if (addAlphaChanel) {\n return '#' + r + g + b + a;\n } else {\n return '#' + r + g + b;\n }\n}\n\nexport function isCompareMode() {\n return Boolean(document.querySelector('.compare-block'));\n}\n\nexport const makeStringNumbersStrong = (targetString) => {\n let resultString = '';\n const splitTargetString = targetString.split(' ');\n splitTargetString.forEach(element => {\n if (!isNaN(element)) {\n element = `${element}`\n }\n resultString += ' ' + element;\n });\n return resultString;\n}\n\nexport const setParametersDependsOnCanvasArea = (element) => {\n const switcher = document.getElementById('building-switcher');\n\n if (!settingsData.isLandscape && element === 'building-switcher') {\n if (switcher) {\n switcher.style.removeProperty('left');\n switcher.style.removeProperty('transform');\n }\n\n return;\n }\n\n // const search = document.querySelector('.search__container-main');\n // if (!Boolean(search))\n // return;\n\n setTimeout(() => {\n const additionalMenuContainer = document.querySelector('.additional-menu__container');\n const additionalMenuContainerWidth = additionalMenuContainer?.getBoundingClientRect().width;\n const unitCardWrapper = document.querySelector('.unit-card__wrapper');\n const unitCardWrapperWidth = unitCardWrapper?.getBoundingClientRect().width || 0;\n const searchContainerMain = document.querySelector('.search__container-main');\n const searchContainerMainWidth = searchContainerMain?.getBoundingClientRect().width || 0;\n const bodyWidth = document.body.getBoundingClientRect().width;\n const targetAreaWidth =\n bodyWidth -\n additionalMenuContainerWidth -\n unitCardWrapperWidth -\n searchContainerMainWidth;\n\n if (!Boolean(targetAreaWidth))\n return;\n\n switch (element) {\n case 'building-switcher':\n if (!switcher)\n break;\n switcher.style.left = `${targetAreaWidth / 2}px`;\n switcher.style.transform = 'translateX(-50%)';\n break;\n case 'search-list':\n // const cssRoot = document.querySelector(':root')\n // cssRoot.style.setProperty(\n // '--searchContainerBottomWidth',\n // `${settingsData.isLandscape ? targetAreaWidth + 'px' : '100%'}`);\n setCSSVar(\n '--searchContainerBottomWidth',\n `${settingsData.isLandscape ? targetAreaWidth + 'px' : '100%'}`\n );\n break;\n }\n }, 100);\n}\n\nexport const isOptionsCardOpened = () => {\n return Boolean(document.querySelector('.options-card'));\n}\n\nexport const isStringHasChars = (customString) => {\n const regExp = /[a-z\\u0590-\\u05fe]/gi;\n return regExp.test(customString);\n}\n\n// export function getCookie(name) {\n// let matches = document.cookie.match(new RegExp(\n// \"(?:^|; )\" + name.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + \"=([^;]*)\"\n// ));\n// return matches ? decodeURIComponent(matches[1]) : undefined;\n// }\n\n// export function setCookie(name, value, options = {}) {\n// options = {\n// path: '/',\n// ...options\n// };\n//\n// if (options.expires instanceof Date) {\n// options.expires = options.expires.toUTCString();\n// }\n//\n// let updatedCookie = encodeURIComponent(name) + \"=\" + encodeURIComponent(value);\n//\n// for (let optionKey in options) {\n// updatedCookie += \"; \" + optionKey;\n// let optionValue = options[optionKey];\n// if (optionValue !== true) {\n// updatedCookie += \"=\" + optionValue;\n// }\n// }\n//\n// document.cookie = updatedCookie;\n// }\n\n// export const selectFirstAvailableApartmentOnTheFloor = (currentFloor) => {\n// \tif (UnitCardClass.isAnyCardOpened())\n// \t\treturn;\n//\n// \tconst currentFloorApartments = Buildings.getActiveBuilding().apartments.filter(mesh => {\n// \t\treturn parseInt(mesh.userData.floor) === parseInt(currentFloor);\n// \t});\n// \tconst currentFloorAvailableApartments = currentFloorApartments.filter(apartment => {\n// \t\treturn apartment.userData.crm_data.status === 'Available';\n// \t});\n//\n// \tlet apartmentForSelect =\n// \t\tcurrentFloorAvailableApartments.length === 0\n// \t\t\t? currentFloorApartments[0]\n// \t\t\t: currentFloorAvailableApartments[0]\n//\n// \tintersectionClickHandler(apartmentForSelect);\n// };\n\nexport const isNumeric = (value) => {\n return (\"boolean\" !== typeof value) && (parseFloat(value) == value);\n};\n\n// export const debounce = (func, delay) => {\n// \tlet timer;\n// \treturn function (...args) {\n// \t\tclearTimeout(timer);\n// \t\ttimer = setTimeout(() => {\n// \t\t\tfunc(...args);\n// \t\t}, delay);\n// \t};\n// };\n\nexport const updateProjectAPIData = async () => {\n await getProps().then((response) => {\n const newData = response.data;\n settingsData.allCrmData.forEach(data => {\n data.status = newData.find(el => el.engineId === data.engineId).status;\n });\n if (settingsData.activeViewMode !== ViewMode.Orbit) {\n searchGetResults();\n IntersectionLegenda.build();\n }\n });\n};\n\nexport const kebabToCamelCase = (string) => {\n return string.replace(/-./g, x => x[1].toUpperCase());\n};\n\nexport function capitalizeFirstLetter(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport function removeActiveGalleryItem() {\n const galleryOpenedItem = document.getElementsByClassName('fancybox__main-container show-fancybox-gallery')[0];\n if (!galleryOpenedItem) return;\n\n const fancyboxWrapper = galleryOpenedItem.getElementsByClassName('fancybox__wrapper')[0];\n\n galleryOpenedItem.classList.remove('show-fancybox-gallery');\n document.body.classList.remove('fancybox-active');\n fancyboxWrapper.innerHTML = '';\n}\n\nexport function addWatermark() {\n const currentHostname = window.location.hostname;\n const hasBeta = currentHostname.includes(\"-beta\");\n if (hasBeta || !config.crmProjectSettings.general?.production && !isDev) {\n new BaseElement()\n .addClass('watermark')\n .innerHtml('Under construction')\n .appendTo(document.body);\n }\n}\n\nexport function areAllApartmentsSold(building) {\n\tif (BmbyMode.active) {\n\t\tconst bmbyModeStatuses = [\n\t\t\t'Rent Contract',\n\t\t\t'Contract',\n\t\t\t'PreContract',\n\t\t\t'Registration Contract',\n\t\t\t'Occupied',\n\t\t\t'For Sale',\n\t\t\t'Not For Sale',\n\t\t\t'Reserved'\n\t\t];\n\t\tfor (const apartment of building.apartments) {\n\t\t\tif (bmbyModeStatuses.includes(apartment.userData.crm_data.status))\n\t\t\t\treturn false;\n\t\t}\n\t} else {\n\t\tfor (const apartment of building.apartments) {\n\t\t\tif (apartment.userData.crm_data.status === 'Available')\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n return true;\n}\n\nexport function anyApartmentsInSearch(building) {\n for (const apartment of building.apartments) {\n for (const result in settingsData.searchResult) {\n const currentItem = settingsData.searchResult[result];\n if (currentItem.engineId === apartment.name)\n return false;\n }\n }\n\n return true;\n}\n\nexport function isRoofExists() {\n const currentActiveBuilding = Buildings.getActiveBuilding();\n\n return Boolean(currentActiveBuilding.amenities.Roof);\n}\n\nexport function isFlatHas360Observation(mesh) {\n return mesh.userData.crm_data.facing.length === 4;\n}\n\nexport function roundToNearest(value, step) {\n return Math.ceil(value / step) * step;\n}\n\nexport function execGlobalThrottle(time = 500) {\n if (settingsData.globalThrottle)\n return;\n\n settingsData.globalThrottle = true;\n const timeout = setTimeout(() => {\n settingsData.globalThrottle = false;\n clearTimeout(timeout);\n }, time);\n}\n\nexport function multimaterialNeedsUpdate() {\n this._targets[0].needsUpdate = true;\n}\n\nexport function setSelectionBoxesColors() {\n settingsData.selectionBoxesDefaultColors.forEach(defaultColor => {\n let configColorExists = false;\n config.resources.bundle.selectionBoxes.colorStatus.forEach(configColor => {\n if (defaultColor.status === configColor.status)\n configColorExists = true;\n });\n\n if (!configColorExists)\n config.resources.bundle.selectionBoxes.colorStatus.push(defaultColor);\n });\n}\n\nexport function getTowerName(building) {\n if (Array.isArray(building.info.towerName)) {\n return building.info.towerName.find(el => el.lang === getCurrentLang()).value;\n } else {\n return building.info.towerName;\n }\n}\n\nexport function labelVisibility (data,state) {\n\tif (data.label) {\n\t\tdata.label.visible = !state;\n\t}\n\tif (data.line) {\n\t\tdata.line.visible = !state;\n\t}\n}\n\nexport function calculateDeltaFromVec3(vec3,target = threeJsVariables.orbitControls.target) {\n // const {orbitControlsVector} = getWorldData();\n const directionVector = new Vector3().subVectors(vec3, target).normalize();\n const spherical = new Spherical().setFromVector3(directionVector);\n\n const from = threeJsVariables.orbitControls.getAzimuthalAngle();\n const to = spherical.theta;\n\n const tempD = to - from;\n let delta;\n\n if (tempD < 0 && tempD < -Math.PI) {\n delta = tempD + 2 * Math.PI;\n } else if (tempD > 0 && tempD > Math.PI) {\n delta = tempD - 2 * Math.PI;\n } else {\n delta = tempD;\n }\n\n return delta;\n}\n\nexport function clamp(num, min, max) {\n return Math.min(Math.max(num, min), max);\n}\n\nexport function isImgLink(url) {\n if (typeof url !== 'string') return false;\n return (url.match(/^http[^\\?]*.(jpg|jpeg|gif|png|tiff|bmp)(\\?(.*))?$/gmi) != null);\n}\n\nexport function setCSSVar(variableName, value) {\n document.querySelector(':root').style.setProperty(variableName, value);\n}\n\nexport function getCSSVarValue(variableName) {\n return document.querySelector(':root').style.getPropertyValue(variableName);\n}\n\nexport function isBetaResourcesFolder() {\n return resourcesFolder === 'resources_beta';\n}\n\nexport function isOneMesh() {\n return config.resources.bundle.oneMesh;\n}\n\nexport function getMoneyToken() {\n return new BaseElement('span')\n .addAttribute('data-dictionary', config.localization.currencyLabel)\n .innerHtml(changeLangToCurrent(config.localization.currencyLabel))\n .addClass('search__money-token', 'language-string');\n}\n\nexport function getCurrentDateTime(format, timeStandard) {\n const now = new Date();\n\n // Determine if UTC is requested\n const isUTC = timeStandard === 'UTC';\n\n // Get the current date components based on time standard\n const year = isUTC ? now.getUTCFullYear() : now.getFullYear();\n const month = isUTC ? String(now.getUTCMonth() + 1).padStart(2, '0') : String(now.getMonth() + 1).padStart(2, '0');\n const day = isUTC ? String(now.getUTCDate()).padStart(2, '0') : String(now.getDate()).padStart(2, '0');\n\n // Get the current time components based on time standard\n const hours = isUTC ? String(now.getUTCHours()).padStart(2, '0') : String(now.getHours()).padStart(2, '0');\n const minutes = isUTC ? String(now.getUTCMinutes()).padStart(2, '0') : String(now.getMinutes()).padStart(2, '0');\n\n // Format the date and time based on the requested format\n switch (format) {\n case 'YYYY-MM-DD HH:MM':\n return `${year}-${month}-${day} ${hours}:${minutes}`;\n // You can add more case statements for different formats as needed\n case 'YYYY-MM-DD':\n return `${year}-${month}-${day}`;\n default:\n // Optionally, handle unsupported formats or provide a default format\n return `${year}-${month}-${day} ${hours}:${minutes}`;\n }\n}\n\nexport function getDateAfarFromCurrent(daysAfar) {\n const date = new Date();\n\n date.setDate(date.getDate() + parseInt(daysAfar));\n\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n\n return `${year}-${month}-${day}`;\n}\n\nexport function isCurrentDateWithinRange(startDateTime, endDateTime, currentDateTime) {\n if (!startDateTime || !endDateTime)\n return false;\n\n // Convert the date strings to Date objects\n const startDate = new Date(startDateTime);\n const endDate = new Date(endDateTime);\n const currentDate = new Date(currentDateTime);\n\n // Check if the current date is within the range\n return currentDate >= startDate && currentDate <= endDate;\n}\n\nexport function isMapOpened() {\n const mapSelector = '.widget__container.show-page[data-menu-item=\"map\"]';\n return Boolean(document.querySelector(mapSelector));\n}\n\nexport function isCylinderDisplayModeEqual(mode) {\n return mode === config.features.cylinderDisplayMode?.mode;\n}\n\nexport function getCylinderModeControlsType() {\n return config.features.cylinderDisplayMode?.controls === 'orbit' ? ViewMode.Orbit : ViewMode.Cylinder;\n}\n\nexport function splitArray(arr, chunks) {\n return [...Array(chunks)].map((_, c) => arr.filter((n, i) => i % chunks === c));\n}\n\nexport function getFileExtension(fileName) {\n return fileName.split('.')[1].toLowerCase();\n}\n\nexport function showSoldApartmentsFromCurrentDay(daysAgo) {\n getSales(daysAgo).then((response) => {\n const contractsCount = settingsData.isConferenceHost ? 3 : response?.data?.contractsCount;\n\n if (contractsCount < 1 || !Boolean(contractsCount))\n return;\n\n const number = {number: {}};\n config.crmProjectSettings.languages.forEach(language => {\n number.number[language] = contractsCount;\n });\n\n const data = contractsCount === 1\n ? 'soldApartmentsNotificationOne'\n : 'soldApartmentsNotification';\n const container = new BaseElement()\n .addClass('notification');\n new BaseElement('span')\n .addClass('notification__text', 'language-string', 'sold-apartment-from__text')\n .addAttribute('data-dictionary', data)\n .innerHtml(changeLangToCurrent(data, contractsCount === 1 ? null : [number]))\n .appendTo(container.DOMElement);\n\n\t\tconst color = 'fab446';\n\t\tNotiflix.Notify.merge({\n\t\t\ttimeout: 5000,\n\t\t\tposition: isDesktop ? 'left-top' : undefined,\n\t\t\trtl: (getCurrentLangDirection() !== 'ltr'),\n\t\t\tinfo: {\n\t\t\t\tbackground: `#${color}`\n\t\t\t}\n\t\t});\n\n\t\tif (settingsData.activeViewMode !== ViewMode.Orbit)\n\t\t\treturn;\n\n\t\tsetTimeout(() => {\n\t\t\tNotiflix.Notify.info(`${container.DOMElement.innerHTML} `);\n\t\t}, 2000);\n\t})\n\n}\n\n// export function getLordIconColor() {\n// const {primary,secondary} = config.features.icons.color;\n//\n// const primaryRgba = config.style.colors.find(color => color.key === primary) || { value: '255,255,255,1' };\n// const secondaryRgba = config.style.colors.find(color => color.key === secondary) || { value: '255,255,255,1' };\n// const activeRgba = config.style.colors.find(color => color.key === 'brand2');\n//\n// const primaryColor = rgbaToHexA(primaryRgba.value.split(','),false);\n// const secondaryColor = rgbaToHexA(secondaryRgba.value.split(','),false);\n// const activeColor = rgbaToHexA(activeRgba.value.split(','), false);\n//\n// return {primaryColor, secondaryColor, activeColor};\n// }\n\nexport function isElementHovered(element) {\n return window.getComputedStyle(element, ':hover').pointerEvents !== 'none';\n}\n\nexport function addAmenitiesWithoutEngineId(building) {\n if (!settingsData?.amenities)\n return;\n\n settingsData.amenities.forEach(amenity => {\n if (amenity.engineId === '' && amenity.buildingEngineID === building.name) {\n amenity.isAmenity = true;\n const amenityWithoutSelectionBox = {\n userData: {\n customSelection: true,\n crm_data: amenity\n }\n }\n\n building.customSelections.push(amenityWithoutSelectionBox);\n }\n\n })\n}\n\nexport function truncateString(str, length) {\n if (str.length > length)\n return str.slice(0, length) + \"...\";\n\n return str;\n}\n\nexport function isPageExist (dataSet) {\n\treturn document.querySelector(`.widget__container[data-menu-item=\"${dataSet}\"`);\n}\n\nexport function captureError (err) {\n\n\tfunction getLineAndColumn(error) {\n\t\tconst stackLines = error.stack.split('\\n');\n\t\tconst relevantLine = stackLines[1];\n\t\tconst match = relevantLine.match(/:(\\d+):(\\d+)/);\n\t\tif (match) {\n\t\t\tconst lineno = match[1];\n\t\t\tconst colno = match[2];\n\t\t\treturn { lineno, colno };\n\t\t} else {\n\t\t\treturn {lineno: null, colno: null};\n\t\t}\n\t}\n\n\tconst { lineno,colno } = getLineAndColumn(err);\n\n\twindow.onerror(err.message,window.location.href,lineno,colno,err);\n}\n\nexport async function checkImageExists(url) {\n\ttry {\n\t\tconst response = await fetch(url, { method: 'HEAD' });\n\t\treturn response.ok;\n\t} catch (error) {\n\t\treturn false;\n\t}\n}\n\nexport function disposeObject (obj) {\n\n\tfunction disposeMaterial (material) {\n\t\tObject.values(material).forEach(value => {\n\t\t\tif (value.isTexture) {\n\t\t\t\tvalue.dispose();\n\t\t\t}\n\t\t});\n\t\tmaterial.dispose();\n\t}\n\n\tif (obj.parent) {\n\t\tobj.removeFromParent();\n\t}\n\n\tlet meshes = [];\n\n\tobj.traverse(el => {\n\t\tif (el.mesh) {\n\t\t\tmeshes.push(el);\n\t\t}\n\t});\n\n\tmeshes.forEach(mesh => {\n\t\tif (Array.isArray(mesh.material)) {\n\t\t\tmesh.material.forEach(material => disposeMaterial(material));\n\t\t} else {\n\t\t\tdisposeMaterial(mesh.material);\n\t\t}\n\t\tmesh.geometry.dispose();\n\t});\n\n\tmeshes = null;\n}\n\nexport function filterDisabledLanguages(languages) {\n\tconst disabledLanguages = config.features?.disabledLanguages || [];\n\treturn languages.filter(language => !disabledLanguages.includes(language));\n}\n\nexport function groupNumbersByDynamicRange(arrayOfNumbers) {\n if (arrayOfNumbers.length === 0)\n return [];\n\n arrayOfNumbers.sort((a, b) => a - b);\n\n // Calculate the range size\n const min = Math.floor(arrayOfNumbers[0]);\n const max = Math.ceil(arrayOfNumbers[arrayOfNumbers.length - 1]);\n const rangeSize = Math.ceil((max - min + 1) / 4); // Divide into 4 equal ranges\n\n // Create the ranges\n const ranges = [];\n for (let i = 0; i < 4; i++) {\n const start = formatNumber(min + i * rangeSize);\n const end = formatNumber(i === 3 ? max : min + (i + 1) * rangeSize - 1); // Last range includes the max\n ranges.push(i === 3 ? `${start}+` : `${start} - ${end}`);\n }\n\n // // Assign numbers to ranges\n // arrayOfNumbers.forEach(num => {\n // for (let i = 0; i < ranges.length; i++) {\n // const [start, end] = ranges[i].range.split(\"-\").map(Number);\n // if (num >= start && num <= end) {\n // ranges[i].values.push(num);\n // break;\n // }\n // }\n // });\n\n return ranges;\n}\n\nfunction formatNumber(num) {\n if (num < 1000) return num.toString();\n if (num < 1_000_000) return (num / 1000).toFixed(0) + \"K\";\n return (num / 1_000_000).toFixed(0) + \"M\";\n}\n\nexport function parseFormattedNumber(formatted) {\n if (typeof formatted === \"number\")\n return formatted;\n\n const multiplier = {\n k: 1000,\n m: 1000000\n };\n\n const unit = formatted.trim().slice(-1).toLowerCase();\n const value = parseFloat(formatted.trim().slice(0, -1));\n\n if (!isNaN(formatted))\n return Number(formatted);\n\n if (isNaN(value) || !multiplier[unit])\n return null;\n\n return value * multiplier[unit];\n}\n\n\nexport function createMeshFromMultiMaterial (mesh,materialIndex) {\n\tconst geometry = mesh.geometry;\n\tconst index = geometry.index;\n\tconst groups = geometry.groups;\n\tconst attributeNames = Object.keys( geometry.attributes );\n\tconst group = groups[ materialIndex ];\n\n\tconst start = group.start;\n\tconst end = start + group.count;\n\n\tconst newGeometry = new BufferGeometry();\n\tconst newMaterial = mesh.material[ group.materialIndex ];\n\n\tfor ( let j = 0; j < attributeNames.length; j ++ ) {\n\n\t\tconst name = attributeNames[ j ];\n\t\tconst attribute = geometry.attributes[ name ];\n\t\tconst itemSize = attribute.itemSize;\n\n\t\tconst newLength = group.count * itemSize;\n\t\tconst type = attribute.array.constructor;\n\n\t\tconst newArray = new type( newLength );\n\t\tconst newAttribute = new BufferAttribute( newArray, itemSize );\n\n\t\tfor ( let k = start, n = 0; k < end; k ++, n ++ ) {\n\n\t\t\tconst ind = index.getX( k );\n\n\t\t\tif ( itemSize >= 1 ) newAttribute.setX( n, attribute.getX( ind ) );\n\t\t\tif ( itemSize >= 2 ) newAttribute.setY( n, attribute.getY( ind ) );\n\t\t\tif ( itemSize >= 3 ) newAttribute.setZ( n, attribute.getZ( ind ) );\n\t\t\tif ( itemSize >= 4 ) newAttribute.setW( n, attribute.getW( ind ) );\n\n\t\t}\n\n\t\tnewGeometry.setAttribute( name, newAttribute );\n\t}\n\n\treturn new Mesh( newGeometry, newMaterial );\n}\n\nexport function applyShortBuildingNameRule() {\n Buildings.getBuildingsArray().forEach(building => {\n if (building.info && building.getInfo().crm_data) {\n building.info.towerName.map(item => {\n const {lang, value} = item;\n\n if (value.length <= 3) {\n item.value = `${c.dictionary['building'][lang]} ${value}`;\n }\n\n return item;\n });\n }\n });\n}\n\nexport function isPerpendicularLines (vec1Start,vec1End,vec2Start,vec2End) {\n\tconst direction1 = new Vector2().subVectors(vec1Start,vec1End);\n\tconst direction2 = new Vector2().subVectors(vec2Start,vec2End);\n\n\treturn Math.abs(direction1.dot(direction2)) < 0.0001;\n}\n\nexport function isPerpendicularPoints (v1,v2) {\n\tconst direction = new Vector2().subVectors(v2,v1);\n\tconst h = new Vector2(1,0);\n\tconst v = new Vector2(0,1);\n\tconst dotH = Math.abs(direction.clone().dot(h));\n\tconst dotV = Math.abs(direction.clone().dot(v));\n\n\treturn dotV < 0.0001 || dotH < 0.0001;\n}\n\nexport const getFieldsFromAPI = {\n small: function() {\n const fieldsFromConfig = config.features?.apartments?.aptCardFieldsCntUnit;\n const fieldsFromAPI = config.crmProjectSettings?.fields?.smallCard;\n const parsedAPIFields = fieldsFromAPI && fieldsFromAPI\n .sort((a, b) => a.order - b.order)\n .map(item => translateAPIIntoDreamsName(item.key))\n\n return fieldsFromConfig || parsedAPIFields;\n },\n full: function() {\n const fieldsFromConfig = config.features?.apartments?.aptCardFieldsCntOptions;\n const fieldsFromAPI = config.crmProjectSettings?.fields?.fullCard;\n const parsedAPIFields = fieldsFromAPI && fieldsFromAPI\n .sort((a, b) => a.order - b.order)\n .map(item => translateAPIIntoDreamsName(item.key))\n\n return fieldsFromConfig || parsedAPIFields;\n },\n filter: function () {\n let fieldsFromConfig;\n isMobile\n ? fieldsFromConfig = config.features.search?.searchConfig?.fieldsMobile || config.features.search?.searchConfig?.fields\n : fieldsFromConfig = config.features.search?.searchConfig?.fields || config.features.search?.searchConfig?.fieldsMobile;\n const fieldsFromAPI = config.crmProjectSettings?.fields?.filter;\n const parsedAPIFields = fieldsFromAPI && fieldsFromAPI.map(field => {\n return parseFilterField(field, 'filter');\n });\n\n return fieldsFromConfig || parsedAPIFields;\n },\n table: function () {\n const fieldsFromConfig = config.features.search?.searchSortStateMobile\n ? config.features.search.searchSortStateMobile\n : config.features.search?.searchSortState;\n const fieldsFromAPI = config.crmProjectSettings?.fields?.table;\n const parsedAPIFields = fieldsFromAPI && fieldsFromAPI.map(field => {\n return parseFilterField(field, 'table');\n });\n\n const favorite = {\n order: 0,\n key: 'favorite',\n type: 'favorite',\n icon: 'icon-unselected',\n state: 'minmax',\n isActive: false\n }\n const propNum = {\n order: 1,\n key: 'propNum',\n type: 'propNum',\n icon: '',\n text: '#',\n state: 'maxmin',\n isActive: true\n }\n parsedAPIFields.unshift(favorite, propNum);\n\n const tableFields = fieldsFromConfig || parsedAPIFields;\n if (isMobile)\n tableFields.length = 5;\n\n return tableFields;\n }\n}\n\nexport function translateAPIIntoDreamsName(name) {\n switch(name) {\n case \"floorNum\":\n return \"floor\";\n case \"modelName\":\n return 'apt. type';\n case \"roomNum\":\n return 'bedrooms';\n case \"totalSpace\":\n return 'area';\n case \"balconySize\":\n return 'balcony size';\n case 'facing':\n return 'exposure';\n case 'roofBalconySize':\n return 'roof balcony size';\n case 'coveredBalconySize':\n return 'covered balcony size';\n case 'basementSize':\n return 'basement size';\n case 'bathRooms':\n return 'bathrooms';\n case 'gardenSize':\n return 'garden size';\n case 'storage':\n return 'storages';\n case 'parking':\n return 'parkings';\n default:\n return name;\n }\n}\n\nfunction parseFilterField(field, type) {\n switch (field.key) {\n case \"modelName\":\n field.icon = 'icon-plan-type';\n if (type === 'filter') {\n field.labelKey = field.key;\n } else if (type === 'table') {\n field.type = field.key;\n field.state = 'minmax';\n field.isActive = false;\n }\n\n break;\n case \"roomNum\":\n field.icon = 'icon-bedroom';\n if (type === 'filter') {\n field.labelKey = field.key;\n } else if (type === 'table') {\n field.type = field.key;\n field.state = 'minmax';\n field.isActive = false;\n }\n break;\n case \"totalSpace\":\n field.icon = 'icon-area';\n if (type === 'filter') {\n field.labelKey = field.key;\n field.type = 'range';\n } else if (type === 'table') {\n field.type = field.key;\n field.state = 'minmax';\n field.isActive = false;\n }\n break;\n case \"balconySize\":\n field.icon = 'icon-balcony';\n if (type === 'filter') {\n field.labelKey = field.key;\n field.visibilty = 'check-mark'\n } else if (type === 'table') {\n field.type = field.key;\n field.state = 'minmax';\n field.isActive = false;\n }\n break;\n case 'propType':\n field.icon = 'icon-bedroom';\n if (type === 'filter') {\n field.labelKey = field.key;\n } else if (type === 'table') {\n field.type = field.key;\n field.state = 'minmax';\n field.isActive = false;\n }\n break;\n case 'facing':\n field.icon = 'icon-exposure';\n if (type === 'filter') {\n field.labelKey = field.key;\n } else if (type === 'table') {\n field.type = field.key;\n field.state = 'minmax';\n field.isActive = false;\n }\n break;\n case 'roofBalconySize':\n case 'coveredBalconySize':\n field.icon = 'icon-balcony';\n if (type === 'filter') {\n field.labelKey = field.key;\n field.type = 'range';\n } else if (type === 'table') {\n field.type = field.key;\n field.state = 'minmax';\n field.isActive = false;\n }\n break;\n case 'basementSize':\n field.icon = 'icon-floorplan1';\n if (type === 'filter') {\n field.labelKey = field.key;\n field.type = 'range';\n } else if (type === 'table') {\n field.type = field.key;\n field.state = 'minmax';\n field.isActive = false;\n }\n break;\n case 'bathRooms':\n field.icon = \"icon-bathroom\";\n if (type === 'filter') {\n field.labelKey = field.key;\n } else if (type === 'table') {\n field.type = field.key;\n field.state = 'minmax';\n field.isActive = false;\n }\n break;\n case 'gardenSize':\n field.icon = 'icon-tree-n-grass';\n if (type === 'filter') {\n field.labelKey = field.key;\n field.type = 'range';\n } else if (type === 'table') {\n field.type = field.key;\n field.state = 'minmax';\n field.isActive = false;\n }\n break;\n case 'toilets':\n field.icon = \"icon-toilet\";\n if (type === 'filter') {\n field.labelKey = field.key;\n } else if (type === 'table') {\n field.type = field.key;\n field.state = 'minmax';\n field.isActive = false;\n }\n break;\n case 'accessible':\n field.icon = 'icon-gift';\n if (type === 'filter') {\n field.labelKey = field.key;\n } else if (type === 'table') {\n field.type = field.key;\n field.state = 'minmax';\n field.isActive = false;\n field.visibilty = 'check-mark';\n }\n break;\n case 'treatmentRoom':\n field.icon = 'icon-bed';\n if (type === 'filter') {\n field.labelKey = field.key;\n } else if (type === 'table') {\n field.type = field.key;\n field.state = 'minmax';\n field.isActive = false;\n field.visibilty = 'check-mark';\n }\n break;\n case 'floorNum':\n field.icon = 'icon-floor';\n if (type === 'filter') {\n field.labelKey = field.key;\n } else if (type === 'table') {\n field.type = field.key;\n field.state = 'minmax';\n field.isActive = false;\n }\n break;\n case 'managementFee':\n case 'maintenanceFee':\n if (type === 'filter') {\n field.labelKey = field.key;\n field.icon = 'icon-settings';\n field.type = 'range'\n } else if (type === 'table') {\n field.type = field.key;\n field.state = 'minmax';\n field.isActive = false;\n }\n break;\n case 'salePrice':\n case 'rentPrice':\n case 'price2':\n let labelKey = 'budget';\n if (field.key === 'rentPrice')\n labelKey = 'rentPrice';\n if (field.key === 'price2')\n labelKey = 'price2Title';\n\n if (type === 'filter') {\n field.labelKey = labelKey;\n field.icon = 'icon-budget';\n field.type = 'range'\n } else if (type === 'table') {\n field.type = field.key;\n field.state = 'minmax';\n field.isActive = false;\n field.text = 'price';\n }\n break;\n case 'storage':\n field.icon = 'icon-storage';\n if (type === 'filter') {\n field.labelKey = 'storages';\n } else if (type === 'table') {\n field.type = 'storages';\n field.state = 'minmax';\n field.isActive = false;\n }\n break;\n case 'parking':\n field.icon = 'icon-car';\n if (type === 'filter') {\n field.labelKey = 'storages';\n } else if (type === 'table') {\n field.type = 'storages';\n field.state = 'minmax';\n field.isActive = false;\n }\n break;\n default:\n return null;\n }\n\n return field;\n}\n","import {\n\tLinearMipmapLinearFilter,\n\tMeshBasicMaterial,\n\tNoBlending,\n\tShaderMaterial,\n\tUniformsUtils,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from 'three/examples/jsm/postprocessing/Pass';\nimport { CopyShader } from 'three/examples/jsm/shaders/CopyShader';\nimport { LuminosityShader } from 'three/examples/jsm/shaders/LuminosityShader.js';\nimport { ToneMapShader } from './ToneMapShader';\n\n/**\n * Generate a texture that represents the luminosity of the current scene, adapted over time\n * to simulate the optic nerve responding to the amount of light it is receiving.\n * Based on a GDC2007 presentation by Wolfgang Engel titled \"Post-Processing Pipeline\"\n *\n * Full-screen tone-mapping shader based on http://www.graphics.cornell.edu/~jaf/publications/sig02_paper.pdf\n */\n\nclass AdaptiveToneMappingPass extends Pass {\n\n\tconstructor( adaptive, resolution ) {\n\n\t\tsuper();\n\n\t\tthis.resolution = ( resolution !== undefined ) ? resolution : 256;\n\t\tthis.needsInit = true;\n\t\tthis.adaptive = adaptive !== undefined ? !! adaptive : true;\n\n\t\tthis.luminanceRT = null;\n\t\tthis.previousLuminanceRT = null;\n\t\tthis.currentLuminanceRT = null;\n\n\t\tif ( CopyShader === undefined ) console.error( 'THREE.AdaptiveToneMappingPass relies on CopyShader' );\n\n\t\tconst copyShader = CopyShader;\n\n\t\tthis.copyUniforms = UniformsUtils.clone( copyShader.uniforms );\n\n\t\tthis.materialCopy = new ShaderMaterial( {\n\n\t\t\tuniforms: this.copyUniforms,\n\t\t\tvertexShader: copyShader.vertexShader,\n\t\t\tfragmentShader: copyShader.fragmentShader,\n\t\t\tblending: NoBlending,\n\t\t\tdepthTest: false\n\n\t\t} );\n\n\t\tif ( LuminosityShader === undefined )\n\t\t\tconsole.error( 'THREE.AdaptiveToneMappingPass relies on LuminosityShader' );\n\n\t\tthis.materialLuminance = new ShaderMaterial( {\n\n\t\t\tuniforms: UniformsUtils.clone( LuminosityShader.uniforms ),\n\t\t\tvertexShader: LuminosityShader.vertexShader,\n\t\t\tfragmentShader: LuminosityShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t} );\n\n\t\tthis.adaptLuminanceShader = {\n\t\t\tdefines: {\n\t\t\t\t'MIP_LEVEL_1X1': ( Math.log( this.resolution ) / Math.log( 2.0 ) ).toFixed( 1 )\n\t\t\t},\n\t\t\tuniforms: {\n\t\t\t\t'lastLum': { value: null },\n\t\t\t\t'currentLum': { value: null },\n\t\t\t\t'minLuminance': { value: 0.01 },\n\t\t\t\t'delta': { value: 0.016 },\n\t\t\t\t'tau': { value: 1.0 }\n\t\t\t},\n\t\t\tvertexShader:\n\t\t\t\t`varying vec2 vUv;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t\t\t}`,\n\n\t\t\tfragmentShader:\n\t\t\t\t`varying vec2 vUv;\n\n\t\t\t\tuniform sampler2D lastLum;\n\t\t\t\tuniform sampler2D currentLum;\n\t\t\t\tuniform float minLuminance;\n\t\t\t\tuniform float delta;\n\t\t\t\tuniform float tau;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec4 lastLum = texture2D( lastLum, vUv, MIP_LEVEL_1X1 );\n\t\t\t\t\tvec4 currentLum = texture2D( currentLum, vUv, MIP_LEVEL_1X1 );\n\n\t\t\t\t\tfloat fLastLum = max( minLuminance, lastLum.r );\n\t\t\t\t\tfloat fCurrentLum = max( minLuminance, currentLum.r );\n\n\t\t\t\t\t//The adaption seems to work better in extreme lighting differences\n\t\t\t\t\t//if the input luminance is squared.\n\t\t\t\t\tfCurrentLum *= fCurrentLum;\n\n\t\t\t\t\t// Adapt the luminance using Pattanaik's technique\n\t\t\t\t\tfloat fAdaptedLum = fLastLum + (fCurrentLum - fLastLum) * (1.0 - exp(-delta * tau));\n\t\t\t\t\t// \"fAdaptedLum = sqrt(fAdaptedLum);\n\t\t\t\t\tgl_FragColor.r = fAdaptedLum;\n\t\t\t\t}`\n\n\t\t};\n\n\t\tthis.materialAdaptiveLum = new ShaderMaterial( {\n\n\t\t\tuniforms: UniformsUtils.clone( this.adaptLuminanceShader.uniforms ),\n\t\t\tvertexShader: this.adaptLuminanceShader.vertexShader,\n\t\t\tfragmentShader: this.adaptLuminanceShader.fragmentShader,\n\t\t\tdefines: Object.assign( {}, this.adaptLuminanceShader.defines ),\n\t\t\tblending: NoBlending\n\t\t} );\n\n\t\tif ( ToneMapShader === undefined )\n\t\t\tconsole.error( 'THREE.AdaptiveToneMappingPass relies on ToneMapShader' );\n\n\t\tthis.materialToneMap = new ShaderMaterial( {\n\n\t\t\tuniforms: UniformsUtils.clone( ToneMapShader.uniforms ),\n\t\t\tvertexShader: ToneMapShader.vertexShader,\n\t\t\tfragmentShader: ToneMapShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer, deltaTime/*, maskActive*/ ) {\n\n\t\tif ( this.needsInit ) {\n\n\t\t\tthis.reset( renderer );\n\n\t\t\tthis.luminanceRT.texture.type = readBuffer.texture.type;\n\t\t\tthis.previousLuminanceRT.texture.type = readBuffer.texture.type;\n\t\t\tthis.currentLuminanceRT.texture.type = readBuffer.texture.type;\n\t\t\tthis.needsInit = false;\n\n\t\t}\n\n\t\tif ( this.adaptive ) {\n\n\t\t\t//Render the luminance of the current scene into a render target with mipmapping enabled\n\t\t\tthis.fsQuad.material = this.materialLuminance;\n\t\t\tthis.materialLuminance.uniforms.tDiffuse.value = readBuffer.texture;\n\t\t\trenderer.setRenderTarget( this.currentLuminanceRT );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\t//Use the new luminance values, the previous luminance and the frame delta to\n\t\t\t//adapt the luminance over time.\n\t\t\tthis.fsQuad.material = this.materialAdaptiveLum;\n\t\t\tthis.materialAdaptiveLum.uniforms.delta.value = deltaTime;\n\t\t\tthis.materialAdaptiveLum.uniforms.lastLum.value = this.previousLuminanceRT.texture;\n\t\t\tthis.materialAdaptiveLum.uniforms.currentLum.value = this.currentLuminanceRT.texture;\n\t\t\trenderer.setRenderTarget( this.luminanceRT );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\t//Copy the new adapted luminance value so that it can be used by the next frame.\n\t\t\tthis.fsQuad.material = this.materialCopy;\n\t\t\tthis.copyUniforms.tDiffuse.value = this.luminanceRT.texture;\n\t\t\trenderer.setRenderTarget( this.previousLuminanceRT );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t\tthis.fsQuad.material = this.materialToneMap;\n\t\tthis.materialToneMap.uniforms.tDiffuse.value = readBuffer.texture;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\n\t\t\tif ( this.clear ) renderer.clear();\n\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\treset() {\n\n\t\t// render targets\n\t\tif ( this.luminanceRT ) {\n\n\t\t\tthis.luminanceRT.dispose();\n\n\t\t}\n\n\t\tif ( this.currentLuminanceRT ) {\n\n\t\t\tthis.currentLuminanceRT.dispose();\n\n\t\t}\n\n\t\tif ( this.previousLuminanceRT ) {\n\n\t\t\tthis.previousLuminanceRT.dispose();\n\n\t\t}\n\n\n\t\tthis.luminanceRT = new WebGLRenderTarget( this.resolution, this.resolution );\n\t\tthis.luminanceRT.texture.name = 'AdaptiveToneMappingPass.l';\n\t\tthis.luminanceRT.texture.generateMipmaps = false;\n\n\t\tthis.previousLuminanceRT = new WebGLRenderTarget( this.resolution, this.resolution );\n\t\tthis.previousLuminanceRT.texture.name = 'AdaptiveToneMappingPass.pl';\n\t\tthis.previousLuminanceRT.texture.generateMipmaps = false;\n\n\t\t// We only need mipmapping for the current luminosity because we want a down-sampled version to sample in our adaptive shader\n\n\t\tconst pars = { minFilter: LinearMipmapLinearFilter, generateMipmaps: true };\n\n\t\tthis.currentLuminanceRT = new WebGLRenderTarget( this.resolution, this.resolution, pars );\n\t\tthis.currentLuminanceRT.texture.name = 'AdaptiveToneMappingPass.cl';\n\n\t\tif ( this.adaptive ) {\n\n\t\t\tthis.materialToneMap.defines[ 'ADAPTED_LUMINANCE' ] = '';\n\t\t\tthis.materialToneMap.uniforms.luminanceMap.value = this.luminanceRT.texture;\n\n\t\t}\n\n\t\t//Put something in the adaptive luminance texture so that the scene can render initially\n\t\tthis.fsQuad.material = new MeshBasicMaterial( { color: 0x777777 } );\n\t\tthis.materialLuminance.needsUpdate = true;\n\t\tthis.materialAdaptiveLum.needsUpdate = true;\n\t\tthis.materialToneMap.needsUpdate = true;\n\t\t// renderer.render( this.scene, this.camera, this.luminanceRT );\n\t\t// renderer.render( this.scene, this.camera, this.previousLuminanceRT );\n\t\t// renderer.render( this.scene, this.camera, this.currentLuminanceRT );\n\n\t}\n\n\tsetAdaptive( adaptive ) {\n\n\t\tif ( adaptive ) {\n\n\t\t\tthis.adaptive = true;\n\t\t\tthis.materialToneMap.defines[ 'ADAPTED_LUMINANCE' ] = '';\n\t\t\tthis.materialToneMap.uniforms.luminanceMap.value = this.luminanceRT.texture;\n\n\t\t} else {\n\n\t\t\tthis.adaptive = false;\n\t\t\tdelete this.materialToneMap.defines[ 'ADAPTED_LUMINANCE' ];\n\t\t\tthis.materialToneMap.uniforms.luminanceMap.value = null;\n\n\t\t}\n\n\t\tthis.materialToneMap.needsUpdate = true;\n\n\t}\n\n\tsetAdaptionRate( rate ) {\n\n\t\tif ( rate ) {\n\n\t\t\tthis.materialAdaptiveLum.uniforms.tau.value = Math.abs( rate );\n\n\t\t}\n\n\t}\n\n\tsetMinLuminance( minLum ) {\n\n\t\tif ( minLum ) {\n\n\t\t\tthis.materialToneMap.uniforms.minLuminance.value = minLum;\n\t\t\tthis.materialAdaptiveLum.uniforms.minLuminance.value = minLum;\n\n\t\t}\n\n\t}\n\n\tsetMaxLuminance( maxLum ) {\n\n\t\tif ( maxLum ) {\n\n\t\t\tthis.materialToneMap.uniforms.maxLuminance.value = maxLum;\n\n\t\t}\n\n\t}\n\n\tsetAverageLuminance( avgLum ) {\n\n\t\tif ( avgLum ) {\n\n\t\t\tthis.materialToneMap.uniforms.averageLuminance.value = avgLum;\n\n\t\t}\n\n\t}\n\n\tsetMiddleGrey( middleGrey ) {\n\n\t\tif ( middleGrey ) {\n\n\t\t\tthis.materialToneMap.uniforms.middleGrey.value = middleGrey;\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.luminanceRT ) {\n\n\t\t\tthis.luminanceRT.dispose();\n\n\t\t}\n\n\t\tif ( this.previousLuminanceRT ) {\n\n\t\t\tthis.previousLuminanceRT.dispose();\n\n\t\t}\n\n\t\tif ( this.currentLuminanceRT ) {\n\n\t\t\tthis.currentLuminanceRT.dispose();\n\n\t\t}\n\n\t\tif ( this.materialLuminance ) {\n\n\t\t\tthis.materialLuminance.dispose();\n\n\t\t}\n\n\t\tif ( this.materialAdaptiveLum ) {\n\n\t\t\tthis.materialAdaptiveLum.dispose();\n\n\t\t}\n\n\t\tif ( this.materialCopy ) {\n\n\t\t\tthis.materialCopy.dispose();\n\n\t\t}\n\n\t\tif ( this.materialToneMap ) {\n\n\t\t\tthis.materialToneMap.dispose();\n\n\t\t}\n\n\t}\n\n}\n\nexport { AdaptiveToneMappingPass };\n","import {\n\tMatrix4,\n\tObject3D,\n\tVector2,\n\tVector3\n} from 'three';\n\nclass CSS2DObject extends Object3D {\n\t\n\tconstructor( element = document.createElement( 'div' )) {\n\t\tsuper();\n\t\t\n\t\tthis.isCSS2DObject = true;\n\t\t\n\t\tthis.element = element;\n\t\tthis.element.style.position = 'absolute';\n\t\tthis.element.style.userSelect = 'none';\n\t\tthis.element.style.willChange = 'transform';\n\t\tthis.element.setAttribute( 'draggable', false );\n\n\t\tthis.center = new Vector2(0.5, 0.5);\n\t\t\n\t\tthis.addEventListener( 'removed', function () {\n\t\t\tthis.traverse( function ( object ) {\n\t\t\t\tif ( object.element instanceof Element && object.element.parentNode !== null )\n\t\t\t\t\tobject.element.parentNode.removeChild( object.element );\n\t\t\t});\n\t\t});\n\t}\n\t\n\tcopy( source, recursive ) {\n\t\tsuper.copy( source, recursive );\n\t\tthis.element = source.element.cloneNode( true );\n\t\tthis.center = source.center;\n\t\t\n\t\treturn this;\n\t}\n}\n\n//\n\nconst _vector = new Vector3();\nconst _viewMatrix = new Matrix4();\nconst _viewProjectionMatrix = new Matrix4();\nconst _a = new Vector3();\nconst _b = new Vector3();\n\nclass CSS2DRenderer {\n\t\n\tconstructor( parameters = {} ) {\n\t\t\n\t\tconst _this = this;\n\t\t\n\t\tlet _width, _height;\n\t\tlet _widthHalf, _heightHalf;\n\t\t\n\t\tconst cache = {\n\t\t\tobjects: new WeakMap()\n\t\t};\n\t\t\n\t\tconst domElement = parameters.element !== undefined ? parameters.element : document.createElement( 'div' );\n\t\t\n\t\tdomElement.style.overflow = 'hidden';\n\t\t\n\t\tthis.domElement = domElement;\n\t\t\n\t\tthis.getSize = function () {\n\t\t\t\n\t\t\treturn {\n\t\t\t\twidth: _width,\n\t\t\t\theight: _height\n\t\t\t};\n\t\t\t\n\t\t};\n\t\t\n\t\tthis.render = function ( scene, camera ) {\n\t\t\t\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\t\t\t\n\t\t\t_viewMatrix.copy( camera.matrixWorldInverse );\n\t\t\t_viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );\n\t\t\t\n\t\t\trenderObject( scene, scene, camera );\n\t\t\tzOrder( scene );\n\t\t\t\n\t\t};\n\t\t\n\t\tthis.setSize = function ( width, height ) {\n\t\t\t\n\t\t\t_width = width;\n\t\t\t_height = height;\n\t\t\t\n\t\t\t_widthHalf = _width / 2;\n\t\t\t_heightHalf = _height / 2;\n\t\t\t\n\t\t\tdomElement.style.width = width + 'px';\n\t\t\tdomElement.style.height = height + 'px';\n\t\t\t\n\t\t};\n\t\t\n\t\tfunction renderObject( object, scene, camera ) {\n\t\t\t\n\t\t\tif ( object.isCSS2DObject ) {\n\t\t\t\t\n\t\t\t\t_vector.setFromMatrixPosition( object.matrixWorld );\n\t\t\t\t_vector.applyMatrix4( _viewProjectionMatrix );\n\t\t\t\t\n\t\t\t\tconst visible = ( object.visible === true ) && ( _vector.z >= - 1 && _vector.z <= 1 ) && ( object.layers.test( camera.layers ) === true );\n\t\t\t\tobject.element.style.display = ( visible === true ) ? '' : 'none';\n\t\t\t\t\n\t\t\t\tif ( visible === true ) {\n\t\t\t\t\t\n\t\t\t\t\tobject.onBeforeRender( _this, scene, camera );\n\t\t\t\t\t\n\t\t\t\t\tconst element = object.element;\n\t\t\t\t\tconst zoom = object.userData.zoom || 1;\n\t\t\t\t\t\n\t\t\t\t\telement.style.transform = 'translate(' + ( - 100 * object.center.x ) + '%,' + ( - 100 * object.center.y ) + '%)' + 'translate(' + ( _vector.x * _widthHalf + _widthHalf ) + 'px,' + ( - _vector.y * _heightHalf + _heightHalf ) + 'px)' + 'scale(' + zoom + ', ' + zoom + ')';\n\t\t\t\t\t\n\t\t\t\t\tif ( element.parentNode !== domElement ) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tdomElement.appendChild( element );\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tobject.onAfterRender( _this, scene, camera );\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst objectData = {\n\t\t\t\t\tdistanceToCameraSquared: getDistanceToSquared( camera, object )\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tcache.objects.set( object, objectData );\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\t\t\t\t\n\t\t\t\trenderObject( object.children[ i ], scene, camera );\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\tfunction getDistanceToSquared( object1, object2 ) {\n\t\t\t\n\t\t\t_a.setFromMatrixPosition( object1.matrixWorld );\n\t\t\t_b.setFromMatrixPosition( object2.matrixWorld );\n\t\t\t\n\t\t\treturn _a.distanceToSquared( _b );\n\t\t\t\n\t\t}\n\t\t\n\t\tfunction filterAndFlatten( scene ) {\n\t\t\t\n\t\t\tconst result = [];\n\t\t\t\n\t\t\tscene.traverse( function ( object ) {\n\t\t\t\t\n\t\t\t\tif ( object.isCSS2DObject ) result.push( object );\n\t\t\t\t\n\t\t\t} );\n\t\t\t\n\t\t\treturn result;\n\t\t\t\n\t\t}\n\t\t\n\t\tfunction zOrder( scene ) {\n\t\t\t\n\t\t\tconst sorted = filterAndFlatten( scene ).sort( function ( a, b ) {\n\t\t\t\t\n\t\t\t\tif ( a.renderOrder !== b.renderOrder ) {\n\t\t\t\t\t\n\t\t\t\t\treturn b.renderOrder - a.renderOrder;\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst distanceA = cache.objects.get( a ).distanceToCameraSquared;\n\t\t\t\tconst distanceB = cache.objects.get( b ).distanceToCameraSquared;\n\t\t\t\t\n\t\t\t\treturn distanceA - distanceB;\n\t\t\t\t\n\t\t\t} );\n\t\t\t\n\t\t\tconst zMax = sorted.length;\n\t\t\t\n\t\t\tfor ( let i = 0, l = sorted.length; i < l; i ++ ) {\n\t\t\t\t\n\t\t\t\tsorted[ i ].element.style.zIndex = zMax - i;\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t}\n\t\n}\n\nexport { CSS2DObject, CSS2DRenderer };\n","'use strict';\n\nimport {\n CubeCamera,\n DoubleSide,\n Mesh,\n OrthographicCamera,\n PlaneGeometry,\n RawShaderMaterial, WebGLCubeRenderTarget,\n WebGLRenderTarget,\n} from 'three';\n\nconst vertexShader = `\nattribute vec3 position;\nattribute vec2 uv;\n\nuniform mat4 projectionMatrix;\nuniform mat4 modelViewMatrix;\n\nvarying vec2 vUv;\n\nvoid main() {\n\n\tvUv = vec2( 1.- uv.x, uv.y );\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n}\n`;\n\nconst fragmentShader = `\nprecision mediump float;\n\nuniform samplerCube map;\n\nvarying vec2 vUv;\n\n#define M_PI 3.1415926535897932384626433832795\n\nvoid main() {\n\n\tvec2 uv = vUv;\n\n\tfloat longitude = uv.x * 2. * M_PI - M_PI + M_PI / 2.;\n\tfloat latitude = uv.y * M_PI;\n\n\tvec3 dir = vec3(\n\t\t- sin( longitude ) * sin( latitude ),\n\t\tcos( latitude ),\n\t\t- cos( longitude ) * sin( latitude )\n\t);\n\tnormalize( dir );\n\n\tgl_FragColor = textureCube( map, dir );\n\n}\n`;\n\n\nexport class CubemapToEquirectangular {\n\n constructor (renderer,size,provideCubeCamera,flip = false) {\n this.width = 1;\n this.height = 1;\n this.flip = flip;\n this.renderer = renderer;\n\n this.material = new RawShaderMaterial( {\n uniforms: {\n map: { type: 't', value: null }\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n side: DoubleSide,\n transparent: true\n } );\n\n this.quad = new Mesh(\n new PlaneGeometry( 1, 1 ),\n this.material\n );\n this.camera = new OrthographicCamera( 1 / - 2, 1 / 2, 1 / 2, 1 / - 2, -10000, 10000 );\n\n this.canvas = document.createElement( 'canvas' );\n this.ctx = this.canvas.getContext( '2d' );\n this.cubeCamera = null;\n\n this.setSize( size, size / 2 );\n\n const gl = this.renderer.getContext();\n this.cubeMapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE );\n\n provideCubeCamera && this.getCubeCamera(size);\n }\n\n update(camera,scene) {\n const autoClear = this.renderer.autoClear;\n this.renderer.autoClear = true;\n this.cubeCamera.position.copy( camera.position );\n this.cubeCamera.update( this.renderer, scene );\n this.renderer.autoClear = autoClear;\n\n this.convert( this.cubeCamera );\n }\n\n getCubeCamera(size) {\n const cubeMapSize = Math.min( this.cubeMapSize, size );\n this.cubeCamera = new CubeCamera( .1, 10000, new WebGLCubeRenderTarget( cubeMapSize, cubeMapSize ));\n return this.cubeCamera;\n }\n\n setSize(width, height) {\n this.width = width;\n this.height = height;\n\n this.quad.scale.set( this.flip ? -this.width : this.width, this.height, 1 );\n\n this.camera.left = this.width / - 2;\n this.camera.right = this.width / 2;\n this.camera.top = this.height / 2;\n this.camera.bottom = this.height / - 2;\n\n this.camera.updateProjectionMatrix();\n this.canvas.width = this.width;\n this.canvas.height = this.height;\n }\n\n convert(cubeCamera,download = true) {\n this.material.uniforms.map.value = cubeCamera.renderTarget.texture;\n const rt = new WebGLRenderTarget(this.width,this.height);\n this.renderer.setRenderTarget(rt);\n this.renderer.render( this.quad, this.camera);\n this.renderer.setRenderTarget(null);\n\n const pixels = new Uint8Array( 4 * this.width * this.height );\n this.renderer.readRenderTargetPixels( rt, 0, 0, this.width, this.height,pixels);\n const imageData = new ImageData( new Uint8ClampedArray( pixels ), this.width, this.height );\n\n download && this.download( imageData );\n\n return imageData;\n }\n\n download(imageData) {\n this.ctx.putImageData( imageData, 0, 0 );\n\n this.canvas.toBlob( function( blob ) {\n\n const url = URL.createObjectURL(blob);\n const fileName = 'pano-' + document.title + '-' + Date.now() + '.png';\n const anchor = document.createElement( 'a' );\n anchor.href = url;\n anchor.setAttribute(\"download\", fileName);\n anchor.innerHTML = \"downloading...\";\n anchor.style.display = \"none\";\n document.body.appendChild(anchor);\n setTimeout(function() {\n anchor.click();\n document.body.removeChild(anchor);\n }, 1 );\n\n }, 'image/png' );\n }\n\n}\n","import {\n EventDispatcher,\n MOUSE,\n Quaternion,\n Spherical,\n TOUCH,\n Vector2,\n Vector3\n} from 'three';\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//\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\nvar OrbitControls = function (object, domElement) {\n\n if (domElement === undefined) console.warn('THREE.OrbitControls: The second parameter \"domElement\" is now mandatory.');\n if (domElement === document) console.error('THREE.OrbitControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.');\n\n this.object = object;\n this.domElement = domElement;\n\n // Set to false to disable this control\n this.enabled = true;\n\n // set angle when dolly changed\n this.enableSetAngle = true;\n\n // \"target\" sets the location of focus, where the object orbits around\n this.target = new Vector3();\n\n // How far you can dolly in and out ( PerspectiveCamera only )\n this.minDistance = 0;\n this.maxDistance = Infinity;\n\n // How far you can zoom in and out ( OrthographicCamera only )\n this.minZoom = 0;\n this.maxZoom = Infinity;\n\n // How far you can orbit vertically, upper and lower limits.\n // Range is 0 to Math.PI radians.\n this.minPolarAngle = 0; // radians\n this.maxPolarAngle = Math.PI; // radians\n\n // Camera correction target\n this.polarCameraCorrection = 0;\n\n // Pan limits vector\n this.minPan = undefined;\n this.maxPan = undefined;\n this.maxSphere = undefined;\n\n // Activate rotation and pan with one button\n this.rotationAndPan = false;\n\n //Reverse controls\n this.reverseControls = false;\n\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 this.minAzimuthAngle = -Infinity; // radians\n this.maxAzimuthAngle = Infinity; // radians\n\n // Set to true to enable damping (inertia)\n // If damping is enabled, you must call controls.update() in your animation loop\n this.enableDamping = false;\n this.dampingFactor = 0.05;\n\n // This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n // Set to false to disable zooming\n this.enableZoom = true;\n this.zoomSpeed = 1.0;\n\n // Set to false to disable rotating\n this.enableRotate = true;\n this.rotateSpeed = 1.0;\n\n // Set to false to disable panning\n this.enablePan = true;\n this.panSpeed = 1.0;\n this.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up\n this.keyPanSpeed = 7.0;\t// pixels moved per arrow key push\n\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 this.autoRotate = false;\n this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\n\n // Set to false to disable use of the keys\n this.enableKeys = true;\n\n // The four arrow keys\n this.keys = {LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40};\n\n // Mouse buttons\n this.mouseButtons = {LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN};\n\n // Touch fingers\n this.touches = {ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN};\n\n // for reset\n this.target0 = this.target.clone();\n this.position0 = this.object.position.clone();\n this.zoom0 = this.object.zoom;\n\n // the target DOM element for key events\n this._domElementKeyEvents = null;\n\n //\n // public methods\n //\n\n this.getPolarAngle = function () {\n\n return spherical.phi;\n\n };\n\n this.setPolarAngle = function (angle) {\n manualSetAngel = true;\n spherical.phi = angle;\n scope.update();\n };\n\n this.setAzimuthAngle = function (angle) {\n manualSetAngel = true;\n spherical.theta = angle;\n scope.update();\n };\n\n this.setAzimuthDeltaAngle = function (angle) {\n manualSetAngel = true;\n sphericalDelta.theta = angle;\n scope.update();\n };\n\n this.getAzimuthalAngle = function () {\n\n return spherical.theta;\n\n };\n\n this.listenToKeyEvents = function (domElement) {\n\n domElement.addEventListener('keydown', onKeyDown);\n this._domElementKeyEvents = domElement;\n\n };\n\n this.dollyInCamera = function () {\n dollyIn(getZoomScale());\n scope.update();\n\n };\n\n this.dollyOutCamera = function () {\n dollyOut(getZoomScale());\n scope.update();\n };\n\n this.panCameraDelta = function (deltaX, deltaY) {\n pan(deltaX, deltaY);\n scope.update();\n };\n\n this.callbackFunctions = {\n onDolly: undefined,\n };\n\n this.saveState = function () {\n\n scope.target0.copy(scope.target);\n scope.position0.copy(scope.object.position);\n scope.zoom0 = scope.object.zoom;\n\n };\n\n this.reset = function () {\n\n scope.target.copy(scope.target0);\n scope.object.position.copy(scope.position0);\n scope.object.zoom = scope.zoom0;\n\n scope.object.updateProjectionMatrix();\n scope.dispatchEvent(changeEvent);\n\n scope.update();\n\n state = STATE.NONE;\n\n };\n\n // this method is exposed, but perhaps it would be better if we can make it private...\n this.update = function () {\n\n var offset = new Vector3();\n\n // so camera.up is the orbit axis\n var quat = new Quaternion().setFromUnitVectors(object.up, new Vector3(0, 1, 0));\n var quatInverse = quat.clone().invert();\n\n var lastPosition = new Vector3();\n var lastQuaternion = new Quaternion();\n\n var twoPI = 2 * Math.PI;\n\n return function update() {\n\n var position = scope.object.position;\n\n offset.copy(position).sub(scope.target);\n\n // rotate offset to \"y-axis-is-up\" space\n offset.applyQuaternion(quat);\n\n // angle from z-axis around y-axis\n if (!manualSetAngel) {\n spherical.setFromVector3(offset);\n }\n\n if (scope.autoRotate && state === STATE.NONE) {\n\n rotateLeft(getAutoRotationAngle());\n\n }\n\n if (scope.enableDamping) {\n\n spherical.theta += sphericalDelta.theta * scope.dampingFactor;\n spherical.phi += sphericalDelta.phi * scope.dampingFactor;\n\n } else {\n\n spherical.theta += sphericalDelta.theta;\n spherical.phi += sphericalDelta.phi;\n\n }\n\n // restrict theta to be between desired limits\n\n var min = scope.minAzimuthAngle;\n var max = scope.maxAzimuthAngle;\n\n if (isFinite(min) && isFinite(max)) {\n\n if (min < -Math.PI) min += twoPI; else if (min > Math.PI) min -= twoPI;\n\n if (max < -Math.PI) max += twoPI; else if (max > Math.PI) max -= twoPI;\n\n if (min <= max) {\n\n spherical.theta = Math.max(min, Math.min(max, spherical.theta));\n\n } else {\n\n spherical.theta = (spherical.theta > (min + max) / 2) ?\n Math.max(min, spherical.theta) :\n Math.min(max, spherical.theta);\n\n }\n\n }\n\n // restrict phi to be between desired limits\n spherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi));\n\n spherical.makeSafe();\n\n\n spherical.radius *= scale;\n\n // restrict radius to be between desired limits\n spherical.radius = Math.max(scope.minDistance, Math.min(scope.maxDistance, spherical.radius));\n\n // move target to panned location\n\n if (scope.enableDamping === true) {\n\n scope.target.addScaledVector(panOffset, scope.dampingFactor);\n\n } else {\n\n scope.target.add(panOffset);\n\n }\n\n if (scope.maxSphere) {\n scope.maxSphere.clampPoint(scope.target, scope.target);\n } else if (scope.minPan && scope.maxPan) {\n scope.target.clamp(scope.minPan, scope.maxPan);\n }\n\n offset.setFromSpherical(spherical);\n\n // rotate offset back to \"camera-up-vector-is-up\" space\n offset.applyQuaternion(quatInverse);\n\n position.copy(scope.target).add(offset);\n\n scope.object.lookAt(scope.target.x, scope.target.y + scope.polarCameraCorrection, scope.target.z);\n\n if (scope.enableDamping === true) {\n\n sphericalDelta.theta *= (1 - scope.dampingFactor);\n sphericalDelta.phi *= (1 - scope.dampingFactor);\n\n panOffset.multiplyScalar(1 - scope.dampingFactor);\n\n } else {\n\n sphericalDelta.set(0, 0, 0);\n\n panOffset.set(0, 0, 0);\n\n }\n\n scale = 1;\n manualSetAngel = false;\n\n // 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 ||\n lastPosition.distanceToSquared(scope.object.position) > EPS ||\n 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) {\n\n scope.dispatchEvent(changeEvent);\n\n lastPosition.copy(scope.object.position);\n lastQuaternion.copy(scope.object.quaternion);\n zoomChanged = false;\n\n return true;\n\n }\n\n return false;\n\n };\n\n }();\n\n this.dispose = function () {\n scope.domElement.removeEventListener('contextmenu', onContextMenu, false);\n scope.domElement.removeEventListener('pointerdown', onPointerDown, false);\n scope.domElement.removeEventListener('wheel', onMouseWheel, false);\n scope.domElement.removeEventListener('touchstart', onTouchStart, false);\n scope.domElement.removeEventListener('touchend', onTouchEnd, false);\n scope.domElement.removeEventListener('touchmove', onTouchMove, false);\n scope.domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, false);\n scope.domElement.ownerDocument.removeEventListener('pointerup', onPointerUp, false);\n if (scope._domElementKeyEvents !== null) {\n scope._domElementKeyEvents.removeEventListener('keydown', onKeyDown);\n }\n //scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?\n };\n\n //\n // internals\n //\n\n var scope = this;\n var changeEvent = {type: 'change'};\n var startEvent = {type: 'start'};\n var endEvent = {type: 'end'};\n var 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\n var state = STATE.NONE;\n var EPS = 0.000001;\n\n // current position in spherical coordinates\n var spherical = new Spherical();\n var sphericalDelta = new Spherical();\n\n var scale = 1;\n var panOffset = new Vector3();\n var zoomChanged = false;\n\n var rotateStart = new Vector2();\n var rotateEnd = new Vector2();\n var rotateDelta = new Vector2();\n\n var panStart = new Vector2();\n var panEnd = new Vector2();\n var panDelta = new Vector2();\n\n var dollyStart = new Vector2();\n var dollyEnd = new Vector2();\n var dollyDelta = new Vector2();\n var manualSetAngel = false;\n\n function getAutoRotationAngle() {\n\n return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\n }\n\n function getZoomScale() {\n\n return Math.pow(0.95, scope.zoomSpeed);\n\n }\n\n function rotateLeft(angle) {\n\n sphericalDelta.theta -= angle;\n\n }\n\n function rotateUp(angle) {\n\n sphericalDelta.phi -= angle;\n\n }\n\n var panLeft = function () {\n\n var v = new Vector3();\n\n return function panLeft(distance, objectMatrix) {\n\n v.setFromMatrixColumn(objectMatrix, 0); // get X column of objectMatrix\n v.multiplyScalar(-distance);\n\n panOffset.add(v);\n\n };\n\n }();\n\n var panUp = function () {\n\n var v = new Vector3();\n\n return function panUp(distance, objectMatrix) {\n\n if (scope.screenSpacePanning === true) {\n\n v.setFromMatrixColumn(objectMatrix, 1);\n\n } else {\n\n v.setFromMatrixColumn(objectMatrix, 0);\n v.crossVectors(scope.object.up, v);\n\n }\n\n v.multiplyScalar(distance);\n\n panOffset.add(v);\n\n };\n\n }();\n\n // deltaX and deltaY are in pixels; right and down are positive\n var pan = function () {\n\n var offset = new Vector3();\n\n return function pan(deltaX, deltaY) {\n\n var element = scope.domElement;\n\n if (scope.object.isPerspectiveCamera) {\n\n // perspective\n var position = scope.object.position;\n offset.copy(position).sub(scope.target);\n var targetDistance = offset.length();\n\n // half of the fov is center to top of screen\n targetDistance *= Math.tan((scope.object.fov / 2) * Math.PI / 180.0);\n\n // we use only clientHeight here so aspect ratio does not distort speed\n panLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix);\n panUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix);\n\n } else if (scope.object.isOrthographicCamera) {\n\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\n } else {\n\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\n }();\n\n function dollyOut(dollyScale) {\n\n if (scope.object.isPerspectiveCamera) {\n\n scale /= dollyScale;\n\n scope.enableSetAngle && scope.setPolarAngle(scope.getPolarAngle() * dollyScale);\n\n if (scope.callbackFunctions.onDolly !== undefined) {\n scope.callbackFunctions.onDolly();\n }\n\n } else if (scope.object.isOrthographicCamera) {\n\n scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom * dollyScale));\n scope.object.updateProjectionMatrix();\n zoomChanged = true;\n\n } else {\n\n console.warn('WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.');\n scope.enableZoom = false;\n\n }\n\n }\n\n function dollyIn(dollyScale) {\n\n if (scope.object.isPerspectiveCamera) {\n\n scale *= dollyScale;\n scope.enableSetAngle && scope.setPolarAngle(scope.getPolarAngle() / dollyScale);\n\n if (scope.callbackFunctions.onDolly !== undefined) {\n scope.callbackFunctions.onDolly();\n }\n\n } else if (scope.object.isOrthographicCamera) {\n\n scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / dollyScale));\n scope.object.updateProjectionMatrix();\n zoomChanged = true;\n\n } else {\n\n console.warn('WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.');\n scope.enableZoom = false;\n\n }\n\n }\n\n //\n // event callbacks - update the object state\n //\n\n function handleMouseDownRotate(event) {\n\n rotateStart.set(event.clientX, event.clientY);\n\n }\n\n function handleMouseDownDolly(event) {\n\n dollyStart.set(event.clientX, event.clientY);\n\n }\n\n function handleMouseDownPan(event) {\n\n panStart.set(event.clientX, event.clientY);\n\n }\n\n function handleMouseMoveRotate(event) {\n\n rotateEnd.set(event.clientX, event.clientY);\n\n rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed);\n\n var element = scope.domElement;\n var reversed = scope.reverseControls ? -1 : 1;\n\n rotateLeft(reversed * 2 * Math.PI * rotateDelta.x / element.clientHeight); // yes, height\n\n rotateUp(reversed * 2 * Math.PI * rotateDelta.y / element.clientHeight);\n\n rotateStart.copy(rotateEnd);\n\n scope.update();\n\n }\n\n function handleMouseMoveDolly(event) {\n\n dollyEnd.set(event.clientX, event.clientY);\n\n dollyDelta.subVectors(dollyEnd, dollyStart);\n\n if (dollyDelta.y > 0) {\n\n dollyOut(getZoomScale());\n\n } else if (dollyDelta.y < 0) {\n\n dollyIn(getZoomScale());\n\n }\n\n dollyStart.copy(dollyEnd);\n\n scope.update();\n\n }\n\n function handleMouseMovePan(event) {\n\n panEnd.set(event.clientX, event.clientY);\n\n panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed);\n\n pan(panDelta.x, panDelta.y);\n\n panStart.copy(panEnd);\n\n scope.update();\n\n }\n\n function handleMouseUp( /*event*/) {\n\n // no-op\n\n }\n\n function handleMouseWheel(event) {\n\n if (event.deltaY < 0) {\n\n dollyIn(getZoomScale());\n\n } else if (event.deltaY > 0) {\n\n dollyOut(getZoomScale());\n\n }\n\n scope.update();\n\n }\n\n function handleKeyDown(event) {\n\n var needsUpdate = false;\n\n switch (event.keyCode) {\n\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\n if (needsUpdate) {\n // prevent the browser from scrolling on cursor keys\n event.preventDefault();\n\n scope.update();\n\n }\n }\n\n function handleTouchStartRotate(event) {\n const touchesLength = event.touches.length;\n if (touchesLength === 1) {\n rotateStart.set(event.touches[0].pageX, event.touches[0].pageY);\n } else if (touchesLength > 1) {\n let x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX);\n let y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY);\n rotateStart.set(x, y);\n }\n }\n\n function handleTouchStartPan(event) {\n const touchesLength = event.touches.length;\n if (touchesLength === 1) {\n panStart.set(event.touches[0].pageX, event.touches[0].pageY);\n } else if (touchesLength > 1) {\n let x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX);\n let y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY);\n panStart.set(x, y);\n }\n }\n\n function handleTouchStartDolly(event) {\n if (event.touches.length > 1) {\n let dx = event.touches[0].pageX - event.touches[1].pageX;\n let dy = event.touches[0].pageY - event.touches[1].pageY;\n let distance = Math.sqrt(dx * dx + dy * dy);\n dollyStart.set(0, distance);\n }\n }\n\n function handleTouchStartDollyPan(event) {\n if (scope.enableZoom) handleTouchStartDolly(event);\n if (scope.enablePan) handleTouchStartPan(event);\n }\n\n function handleTouchStartDollyRotate(event) {\n if (scope.enableZoom) handleTouchStartDolly(event);\n if (scope.enableRotate) handleTouchStartRotate(event);\n }\n\n function handleTouchMoveRotate(event) {\n if (event.touches.length === 1) {\n rotateEnd.set(event.touches[0].pageX, event.touches[0].pageY);\n } else if (event.touches.length > 1) {\n let x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX);\n let y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY);\n\n rotateEnd.set(x, y);\n }\n\n rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed);\n\n let element = scope.domElement;\n let reversed = scope.reverseControls ? -1 : 1;\n\n rotateLeft(reversed * 2 * Math.PI * rotateDelta.x / element.clientHeight); // yes, height\n rotateUp(reversed * 2 * Math.PI * rotateDelta.y / element.clientHeight);\n\n rotateStart.copy(rotateEnd);\n }\n\n function handleTouchMovePan(event) {\n if (event.touches.length === 1) {\n panEnd.set(event.touches[0].pageX, event.touches[0].pageY);\n } else if (event.touches.length > 1) {\n let x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX);\n let y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY);\n\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 if (event.touches.length > 1) {\n let dx = event.touches[0].pageX - event.touches[1].pageX;\n let dy = event.touches[0].pageY - event.touches[1].pageY;\n let distance = Math.sqrt(dx * dx + dy * dy);\n\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\n function handleTouchMoveDollyPan(event) {\n if (scope.enableZoom) handleTouchMoveDolly(event);\n if (scope.enablePan && !scope.rotationAndPan) handleTouchMovePan(event);\n }\n\n function handleTouchMoveDollyRotate(event) {\n if (scope.enableZoom) handleTouchMoveDolly(event);\n if (scope.enableRotate) handleTouchMoveRotate(event);\n }\n\n // function handleTouchEnd( /*event*/) {\n //\n // // no-op\n //\n // }\n\n //\n // event handlers - FSM: listen for events and reset state\n //\n\n function onPointerDown(event) {\n if (scope.enabled === false) return;\n\n switch (event.pointerType) {\n case 'mouse':\n case 'pen':\n onMouseDown(event);\n break;\n\n // TODO touch\n\n }\n }\n\n function onPointerMove(event) {\n if (scope.enabled === false) return;\n\n switch (event.pointerType) {\n case 'mouse':\n case 'pen':\n onMouseMove(event);\n break;\n\n // TODO touch\n }\n }\n\n function onPointerUp(event) {\n switch (event.pointerType) {\n case 'mouse':\n case 'pen':\n onMouseUp(event);\n break;\n\n // TODO touch\n }\n }\n\n function onMouseDown(event) {\n\n // Prevent the browser from scrolling.\n event.preventDefault();\n\n // Manually set the focus since calling preventDefault above\n // prevents the browser from setting it automatically.\n\n scope.domElement.focus ? scope.domElement.focus() : window.focus();\n\n var mouseAction;\n\n switch (event.button) {\n case 0:\n mouseAction = scope.mouseButtons.LEFT;\n break;\n case 1:\n mouseAction = scope.mouseButtons.MIDDLE;\n break;\n case 2:\n mouseAction = scope.mouseButtons.RIGHT;\n break;\n default:\n mouseAction = -1;\n }\n\n switch (mouseAction) {\n case MOUSE.DOLLY:\n if (scope.enableZoom === false) return;\n\n handleMouseDownDolly(event);\n\n state = STATE.DOLLY;\n\n break;\n case MOUSE.ROTATE:\n if (event.ctrlKey || event.metaKey || event.shiftKey) {\n if (scope.enablePan === false) return;\n\n handleMouseDownPan(event);\n\n state = STATE.PAN;\n } else {\n if (scope.enableRotate === false) return;\n\n handleMouseDownRotate(event);\n scope.rotationAndPan && handleMouseDownPan(event);\n\n state = STATE.ROTATE;\n }\n\n break;\n case MOUSE.PAN:\n if (event.ctrlKey || event.metaKey || event.shiftKey) {\n if (scope.enableRotate === false) return;\n\n handleMouseDownRotate(event);\n\n state = STATE.ROTATE;\n } else {\n if (scope.enablePan === false) return;\n\n handleMouseDownPan(event);\n\n state = STATE.PAN;\n }\n break;\n default:\n state = STATE.NONE;\n }\n\n if (state !== STATE.NONE) {\n scope.domElement.ownerDocument.addEventListener('pointermove', onPointerMove, false);\n scope.domElement.ownerDocument.addEventListener('pointerup', onPointerUp, false);\n\n scope.dispatchEvent(startEvent);\n }\n\n }\n\n function onMouseMove(event) {\n if (scope.enabled === false) return;\n\n event.preventDefault();\n\n if (scope.rotationAndPan) {\n if (event.clientX !== panStart.x) {\n state = STATE.ROTATE;\n }\n if (event.clientY > panStart.y + 20 || event.clientY < panStart.y - 20) {\n state = STATE.PAN;\n }\n }\n\n switch (state) {\n\n case STATE.ROTATE:\n\n if (scope.enableRotate === false) return;\n\n handleMouseMoveRotate(event);\n\n break;\n\n case STATE.DOLLY:\n\n if (scope.enableZoom === false) return;\n\n handleMouseMoveDolly(event);\n\n break;\n\n case STATE.PAN:\n\n if (scope.enablePan === false) return;\n\n handleMouseMovePan(event);\n\n break;\n\n }\n\n }\n\n function onMouseUp(event) {\n\n scope.domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, false);\n scope.domElement.ownerDocument.removeEventListener('pointerup', onPointerUp, false);\n\n if (scope.enabled === false) return;\n\n handleMouseUp(event);\n\n scope.dispatchEvent(endEvent);\n\n state = STATE.NONE;\n\n }\n\n function onMouseWheel(event) {\n\n if (scope.enabled === false || scope.enableZoom === false || (state !== STATE.NONE && state !== STATE.ROTATE)) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n scope.dispatchEvent(startEvent);\n\n handleMouseWheel(event);\n\n scope.dispatchEvent(endEvent);\n\n }\n\n function onKeyDown(event) {\n\n if (scope.enabled === false || scope.enableKeys === false || scope.enablePan === false) return;\n\n handleKeyDown(event);\n\n }\n\n function onTouchStart(event) {\n\n if (scope.enabled === false) return;\n\n event.preventDefault(); // prevent scrolling\n\n switch (event.touches.length) {\n\n case 1:\n\n switch (scope.touches.ONE) {\n\n case TOUCH.ROTATE:\n\n if (scope.enableRotate === false) return;\n\n handleTouchStartRotate(event);\n scope.rotationAndPan && handleTouchStartPan(event);\n\n state = STATE.TOUCH_ROTATE;\n\n break;\n\n case TOUCH.PAN:\n\n if (scope.enablePan === false) return;\n\n handleTouchStartPan(event);\n\n state = STATE.TOUCH_PAN;\n\n break;\n\n default:\n\n state = STATE.NONE;\n\n }\n\n break;\n\n case 2:\n\n switch (scope.touches.TWO) {\n\n case TOUCH.DOLLY_PAN:\n\n if (scope.enableZoom === false && scope.enablePan === false) return;\n\n handleTouchStartDollyPan(event);\n\n state = STATE.TOUCH_DOLLY_PAN;\n\n break;\n\n case TOUCH.DOLLY_ROTATE:\n\n if (scope.enableZoom === false && scope.enableRotate === false) return;\n\n handleTouchStartDollyRotate(event);\n\n state = STATE.TOUCH_DOLLY_ROTATE;\n\n break;\n\n default:\n\n state = STATE.NONE;\n\n }\n\n break;\n\n default:\n\n state = STATE.NONE;\n\n }\n\n if (state !== STATE.NONE) {\n\n scope.dispatchEvent(startEvent);\n\n }\n\n }\n\n function onTouchMove(event) {\n if (scope.enabled === false) return;\n\n event.preventDefault(); // prevent scrolling\n event.stopPropagation();\n\n if (scope.rotationAndPan && event.touches.length === 1) {\n if (event.touches[0].pageX !== panStart.x) {\n state = STATE.TOUCH_ROTATE;\n }\n if (event.touches[0].pageY > panStart.y + 20 || event.touches[0].pageY < panStart.y - 20) {\n state = STATE.TOUCH_PAN;\n }\n }\n\n switch (state) {\n\n case STATE.TOUCH_ROTATE:\n\n if (scope.enableRotate === false) return;\n\n handleTouchMoveRotate(event);\n\n scope.update();\n\n break;\n\n case STATE.TOUCH_PAN:\n\n if (scope.enablePan === false) return;\n\n handleTouchMovePan(event);\n\n scope.update();\n\n break;\n\n case STATE.TOUCH_DOLLY_PAN:\n\n if (scope.enableZoom === false && scope.enablePan === false) return;\n\n handleTouchMoveDollyPan(event);\n\n scope.update();\n\n break;\n\n case STATE.TOUCH_DOLLY_ROTATE:\n\n if (scope.enableZoom === false && scope.enableRotate === false) return;\n\n handleTouchMoveDollyRotate(event);\n\n scope.update();\n\n break;\n\n default:\n\n state = STATE.NONE;\n\n }\n\n }\n\n function onTouchEnd(event) {\n if (scope.enabled === false) return;\n\n // handleTouchEnd(event);\n scope.dispatchEvent(endEvent);\n state = STATE.NONE;\n }\n\n function onContextMenu(event) {\n\n if (scope.enabled === false) return;\n\n event.preventDefault();\n\n }\n\n //\n\n scope.domElement.addEventListener('contextmenu', onContextMenu, false);\n\n scope.domElement.addEventListener('pointerdown', onPointerDown, false);\n scope.domElement.addEventListener('wheel', onMouseWheel, false);\n\n scope.domElement.addEventListener('touchstart', onTouchStart, false);\n scope.domElement.addEventListener('touchend', onTouchEnd, false);\n scope.domElement.addEventListener('touchmove', onTouchMove, false);\n\n scope.domElement.addEventListener('keydown', onKeyDown, false);\n\n // force an update at start\n\n this.update();\n\n};\n\nOrbitControls.prototype = Object.create(EventDispatcher.prototype);\nOrbitControls.prototype.constructor = OrbitControls;\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\nvar MapControls = function (object, domElement) {\n\n OrbitControls.call(this, object, domElement);\n\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\n this.touches.ONE = TOUCH.PAN;\n this.touches.TWO = TOUCH.DOLLY_ROTATE;\n\n};\n\nMapControls.prototype = Object.create(EventDispatcher.prototype);\nMapControls.prototype.constructor = MapControls;\n\nexport {OrbitControls, MapControls};\n","'use strict';\n\n\nimport { Float32BufferAttribute, Vector2, Vector3 } from 'three';\n\nexport class PlanarUV {\n\n constructor (geometry) {\n this.geometry = geometry;\n\n this.geometry.computeBoundingBox();\n\n const max = this.geometry.boundingBox.max;\n const min = this.geometry.boundingBox.min;\n\n const offset = new Vector2(0 - min.x, 0 - min.y);\n const range = new Vector2(max.x - min.x, max.y - min.y);\n\n const uv = [];\n\n const positionAttribute = this.geometry.getAttribute('position');\n\n const vertex = new Vector3();\n\n for (let i = 0; i < positionAttribute.count; i ++) {\n vertex.fromBufferAttribute(positionAttribute,i);\n const u = (vertex.x + offset.x) / range.x;\n const v = (vertex.y + + offset.y) / range.y;\n uv.push(u,v);\n }\n\n\n return new Float32BufferAttribute(uv,2);\n }\n\n}","import { TinyQueue } from './TinyQueue';\n\nexport function polyLabel(polygon, precision = 1.0, debug = false) {\n\t// find the bounding box of the outer ring\n\tlet minX = Infinity;\n\tlet minY = Infinity;\n\tlet maxX = -Infinity;\n\tlet maxY = -Infinity;\n\t\n\tfor (const [x, y] of polygon[0]) {\n\t\tif (x < minX) minX = x;\n\t\tif (y < minY) minY = y;\n\t\tif (x > maxX) maxX = x;\n\t\tif (y > maxY) maxY = y;\n\t}\n\t\n\tconst width = maxX - minX;\n\tconst height = maxY - minY;\n\tconst cellSize = Math.max(precision, Math.min(width, height));\n\t\n\tif (cellSize === precision) {\n\t\tconst result = [minX, minY];\n\t\tresult.distance = 0;\n\t\treturn result;\n\t}\n\t\n\t// a priority queue of cells in order of their \"potential\" (max distance to polygon)\n\tconst cellQueue = new TinyQueue([], (a, b) => b.max - a.max);\n\t\n\t// take centroid as the first best guess\n\tlet bestCell = getCentroidCell(polygon);\n\t\n\t// second guess: bounding box centroid\n\tconst bboxCell = new Cell(minX + width / 2, minY + height / 2, 0, polygon);\n\tif (bboxCell.d > bestCell.d) bestCell = bboxCell;\n\t\n\tlet numProbes = 2;\n\t\n\tfunction potentiallyQueue(x, y, h) {\n\t\tconst cell = new Cell(x, y, h, polygon);\n\t\tnumProbes++;\n\t\tif (cell.max > bestCell.d + precision) cellQueue.push(cell);\n\t\t\n\t\t// update the best cell if we found a better one\n\t\tif (cell.d > bestCell.d) {\n\t\t\tbestCell = cell;\n\t\t\tif (debug) console.log(`found best ${Math.round(1e4 * cell.d) / 1e4} after ${numProbes} probes`);\n\t\t}\n\t}\n\t\n\t// cover polygon with initial cells\n\tlet h = cellSize / 2;\n\tfor (let x = minX; x < maxX; x += cellSize) {\n\t\tfor (let y = minY; y < maxY; y += cellSize) {\n\t\t\tpotentiallyQueue(x + h, y + h, h);\n\t\t}\n\t}\n\t\n\twhile (cellQueue.length) {\n\t\t// pick the most promising cell from the queue\n\t\tconst {max, x, y, h: ch} = cellQueue.pop();\n\t\t\n\t\t// do not drill down further if there's no chance of a better solution\n\t\tif (max - bestCell.d <= precision) break;\n\t\t\n\t\t// split the cell into four cells\n\t\th = ch / 2;\n\t\tpotentiallyQueue(x - h, y - h, h);\n\t\tpotentiallyQueue(x + h, y - h, h);\n\t\tpotentiallyQueue(x - h, y + h, h);\n\t\tpotentiallyQueue(x + h, y + h, h);\n\t}\n\t\n\tif (debug) {\n\t\tconsole.log(`num probes: ${numProbes}\\nbest distance: ${bestCell.d}`);\n\t}\n\t\n\tconst result = [bestCell.x, bestCell.y];\n\tresult.distance = bestCell.d;\n\treturn result;\n}\n\nfunction Cell(x, y, h, polygon) {\n\tthis.x = x; // cell center x\n\tthis.y = y; // cell center y\n\tthis.h = h; // half the cell size\n\tthis.d = pointToPolygonDist(x, y, polygon); // distance from cell center to polygon\n\tthis.max = this.d + this.h * Math.SQRT2; // max distance to polygon within a cell\n}\n\n// signed distance from point to polygon outline (negative if point is outside)\nfunction pointToPolygonDist(x, y, polygon) {\n\tlet inside = false;\n\tlet minDistSq = Infinity;\n\t\n\tfor (const ring of polygon) {\n\t\tfor (let i = 0, len = ring.length, j = len - 1; i < len; j = i++) {\n\t\t\tconst a = ring[i];\n\t\t\tconst b = ring[j];\n\t\t\t\n\t\t\tif ((a[1] > y !== b[1] > y) &&\n\t\t\t\t(x < (b[0] - a[0]) * (y - a[1]) / (b[1] - a[1]) + a[0])) inside = !inside;\n\t\t\t\n\t\t\tminDistSq = Math.min(minDistSq, getSegDistSq(x, y, a, b));\n\t\t}\n\t}\n\t\n\treturn minDistSq === 0 ? 0 : (inside ? 1 : -1) * Math.sqrt(minDistSq);\n}\n\n// get polygon centroid\nfunction getCentroidCell(polygon) {\n\tlet area = 0;\n\tlet x = 0;\n\tlet y = 0;\n\tconst points = polygon[0];\n\t\n\tfor (let i = 0, len = points.length, j = len - 1; i < len; j = i++) {\n\t\tconst a = points[i];\n\t\tconst b = points[j];\n\t\tconst f = a[0] * b[1] - b[0] * a[1];\n\t\tx += (a[0] + b[0]) * f;\n\t\ty += (a[1] + b[1]) * f;\n\t\tarea += f * 3;\n\t}\n\tconst centroid = new Cell(x / area, y / area, 0, polygon);\n\tif (area === 0 || centroid.d < 0) return new Cell(points[0][0], points[0][1], 0, polygon);\n\treturn centroid;\n}\n\n// get squared distance from a point to a segment\nfunction getSegDistSq(px, py, a, b) {\n\tlet x = a[0];\n\tlet y = a[1];\n\tlet dx = b[0] - x;\n\tlet dy = b[1] - y;\n\t\n\tif (dx !== 0 || dy !== 0) {\n\t\tconst t = ((px - x) * dx + (py - y) * dy) / (dx * dx + dy * dy);\n\t\t\n\t\tif (t > 1) {\n\t\t\tx = b[0];\n\t\t\ty = b[1];\n\t\t\t\n\t\t} else if (t > 0) {\n\t\t\tx += dx * t;\n\t\t\ty += dy * t;\n\t\t}\n\t}\n\t\n\tdx = px - x;\n\tdy = py - y;\n\t\n\treturn dx * dx + dy * dy;\n}\n","'use strict';\n\nimport {\n\tPath,\n\tVector2,\n\tLineCurve,\n} from 'three';\n\nimport { isPerpendicularLines } from '../functions';\n\nexport class Polygon extends Path{\n\tconstructor (points) {\n\t\tsuper(points);\n\t\t\n\t\tthis.center = new Vector2();\n\t\tthis.autoClose = true;\n\t\t\n\t\tif (points) {\n\t\t\tthis.closePath();\n\t\t\tthis.currentPoint.set(points[0].x,points[0].y);\n\t\t\tthis.getCenter();\n\t\t}\n\t}\n\t\n\tlineTo( x, y ) {\n\t\t\n\t\tconst v1 = this.currentPoint.clone();\n\t\tconst v2 = new Vector2( x, y );\n\t\t\n\t\tfunction outwardNormal(vec1, vec2) {\n\t\t\tconst dx = vec2.x - vec1.x;\n\t\t\tconst dy = vec2.y - vec1.y;\n\t\t\tconst edgeLength = Math.sqrt(dx * dx + dy * dy);\n\t\t\t\n\t\t\treturn new Vector2(-dy / edgeLength,dx / edgeLength);\n\t\t}\n\t\t\n\t\tfunction inwardNormal (vec1,vec2) {\n\t\t\tconst n = outwardNormal(vec1, vec2);\n\t\t\treturn n.negate();\n\t\t}\n\t\t\n\t\t\n\t\tconst curve = new LineCurve(v1,v2);\n\t\tcurve.outwardNormal = outwardNormal(v1,v2);\n\t\tcurve.inwardNormal = inwardNormal(v1,v2);\n\t\tthis.curves.push( curve );\n\t\t\n\t\tthis.currentPoint.set( x, y );\n\t\t\n\t\treturn this;\n\t}\n\t\n\tgetCenter() {\n\t\tthis.center.set(0,0);\n\t\tlet signedArea = 0;\n\t\tlet x0 = 0;\n\t\tlet y0 = 0;\n\t\tlet x1 = 0;\n\t\tlet y1 = 0;\n\t\tlet a = 0;\n\t\t\n\t\tconst points = this.getPoints();\n\t\t\n\t\tfor (let i = 0; i < points.length; i++) {\n\t\t\tx0 = points[i].x;\n\t\t\ty0 = points[i].y;\n\t\t\tx1 = points[(i + 1) % points.length].x;\n\t\t\ty1 = points[(i + 1) % points.length].y;\n\t\t\ta = x0 * y1 - x1 * y0;\n\t\t\tsignedArea += a;\n\t\t\tthis.center.x += (x0 + x1) * a;\n\t\t\tthis.center.y += (y0 + y1) * a;\n\t\t}\n\t\t\n\t\tsignedArea *= 0.5;\n\t\tthis.center.x /= (6 * signedArea);\n\t\tthis.center.y /= (6 * signedArea);\n\t\t\n\t\treturn this.center;\n\t}\n\t\n\toffset(value,arcSegments = 0, checkCrossLines = false) {\n\t\tconst originPoints = this.getPoints();\n\t\tlet offset = value;\n\t\t\n\t\tif (value > 0) {\n\t\t\tthis.margin(value,arcSegments);\n\t\t} else {\n\t\t\tthis.padding(-value,arcSegments);\n\t\t\t\n\t\t\tif (checkCrossLines) {\n\t\t\t\t\n\t\t\t\twhile (Polygon.isCrossLines(this)) {\n\t\t\t\t\toffset += 1;\n\t\t\t\t\tthis.curves = [];\n\t\t\t\t\tdelete this.cacheLengths;\n\t\t\t\t\tthis.setFromPoints(originPoints);\n\t\t\t\t\tthis.padding( -offset );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn offset;\n\t}\n\t\n\tsetLength(length) {\n\t\tconst scale = length / this.getLength();\n\t\tconst points = [];\n\t\t\n\t\tfor (let i = 0; i < this.curves.length; i++) {\n\t\t\tconst curve = this.curves[i];\n\t\t\tpoints.push(new Vector2().copy(curve.v1).multiplyScalar(scale));\n\t\t}\n\t\t\n\t\tconst start = points[0];\n\t\tconst end = points[points.length - 1];\n\t\t\n\t\tif (!start.equals(end)) {\n\t\t\tpoints.push(start);\n\t\t}\n\t\t\n\t\tthis.curves = [];\n\t\tdelete this.cacheLengths;\n\t\tthis.setFromPoints(points);\n\t\tthis.getCenter();\n\t\tthis.getLength();\n\t}\n\t\n\tmoveToCenter(center) {\n\t\tthis.getCenter();\n\t\t\n\t\tconst direction = new Vector2().subVectors(center,this.center);\n\t\tconst points = this.getPoints();\n\t\t\n\t\tpoints.forEach(point => {\n\t\t\tpoint.add(direction);\n\t\t});\n\t\t\n\t\tthis.curves = [];\n\t\tdelete this.cacheLengths;\n\t\tthis.setFromPoints(points);\n\t\tthis.getCenter();\n\t}\n\t\n\tgetCurvesFromCurrentPoint(vec2 = this.currentPoint) {\n\t\tconst curves = [];\n\t\t\n\t\tfor (let i = 0; i < this.curves.length; i++) {\n\t\t\tconst curve = this.curves[i];\n\t\t\tif (this.calcIsInsideThickLineSegment(curve.v1,curve.v2,vec2)) {\n\t\t\t\tcurves.push(curve);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn curves;\n\t}\n\t\n\tisCorner(vec2) {\n\t\tconst curves = this.getCurvesFromCurrentPoint(vec2);\n\t\treturn curves.length === 2;\n\t}\n\t\n\tgetFullDistance(vec2) {\n\t\tconst lengths = this.getCurveLengths();\n\t\tconst curve = this.findCurveFromVec(vec2);\n\t\tif (curve) {\n\t\t\tconst index = this.curves.indexOf(curve);\n\t\t\tlet pointDistance = curve.v1.distanceTo(vec2);\n\t\t\t\n\t\t\tif (index > 0) {\n\t\t\t\tpointDistance += lengths[index - 1];\n\t\t\t}\n\t\t\t\n\t\t\treturn pointDistance;\n\t\t}\n\t}\n\t\n\tgetDistance(vec2) {\n\t\tlet distance = Infinity;\n\t\tconst isCorner = this.isCorner(vec2);\n\t\tif (isCorner) {\n\t\t\tconst curves = this.getCurvesFromCurrentPoint(vec2);\n\t\t\t\n\t\t\tfor (let i = 0; i < curves.length; i++) {\n\t\t\t\tconst curve = curves[i];\n\t\t\t\tconst d1 = curve.v1.distanceTo(vec2);\n\t\t\t\tconst d2 = curve.v2.distanceTo(vec2);\n\t\t\t\tconst dis = Math.min(d1,d2);\n\t\t\t\tif (dis < distance) {\n\t\t\t\t\tdistance = dis;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst curve = this.pointOnSegment(vec2);\n\t\t\tconst d1 = curve.v1.distanceTo(vec2);\n\t\t\tconst d2 = curve.v2.distanceTo(vec2);\n\t\t\tdistance = Math.min(d1,d2);\n\t\t}\n\t\t\n\t\treturn distance;\n\t}\n\t\n\tmultiplyScalar(value,customCenter) {\n\t\tconst center = customCenter || this.getCenter();\n\t\tconst points = this.getPoints();\n\t\tconst scaledPoints = [];\n\t\t\n\t\tfor (let i = 0; i < points.length; i++) {\n\t\t\tconst point = points[i];\n\t\t\tconst direction = new Vector2().subVectors(point,center);\n\t\t\tscaledPoints.push(new Vector2().addVectors(center,direction.multiplyScalar(value)));\n\t\t}\n\t\tthis.curves = [];\n\t\tdelete this.cacheLengths;\n\t\tthis.setFromPoints(scaledPoints);\n\t}\n\t\n\tdotProduct(v1,v2,v3) {\n\t\treturn (v2.x - v1.x) * (v3.x - v2.x) + (v2.y - v1.y) * (v3.y - v2.y);\n\t}\n\t\n\tcrossProduct(v1,v2,v3) {\n\t\treturn (v2.x - v1.x) * (v3.y - v2.y) - (v2.y - v1.y) * (v3.x - v2.x);\n\t}\n\t\n\tpointOnSegment(vec2) {\n\t\tlet segment = null;\n\t\t\n\t\tfor (let i = 0; i < this.curves.length; i++) {\n\t\t\t\n\t\t\tconst curve = this.curves[i];\n\t\t\tif (this.calcIsInsideThickLineSegment(curve.v1,curve.v2,vec2)) {\n\t\t\t\tsegment = curve;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn segment;\n\t}\n\t\n\tgetPointT(vec2) {\n\t\tconst lengths = this.getCurveLengths();\n\t\tconst curve = this.findCurveFromVec(vec2);\n\t\tif (curve) {\n\t\t\tconst index = this.curves.indexOf(curve);\n\t\t\tlet pointDistance = curve.v1.distanceTo(vec2);\n\t\t\t\n\t\t\tif (index > 0) {\n\t\t\t\tpointDistance += lengths[index - 1];\n\t\t\t}\n\t\t\t\n\t\t\treturn pointDistance / lengths[lengths.length - 1];\n\t\t}\n\t}\n\t\n\tfindCurveFromVec(vec) {\n\t\tlet curve = null;\n\t\t\n\t\tfor (let i = 0; i < this.curves.length; i++) {\n\t\t\tconst currentCurve = this.curves[i];\n\t\t\tconst onSegment = this.calcIsInsideThickLineSegment(currentCurve.v1,currentCurve.v2,vec,0.01);\n\t\t\tif (onSegment) {\n\t\t\t\tcurve = currentCurve;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn curve;\n\t}\n\t\n\tgetPointsFromRange(v1,v2,cp) {\n\t\tlet points = [];\n\t\tconst pathCwi = [];\n\t\tconst pathCcwi = [];\n\t\t\n\t\tconst curve1 = this.findCurveFromVec(v1);\n\t\tconst curve2 = this.findCurveFromVec(v2);\n\t\tconst startIndex = this.curves.indexOf(curve1);\n\t\tconst endIndex = this.curves.indexOf(curve2);\n\t\t\n\t\tlet cwi = startIndex;\n\t\tlet ccwi = startIndex;\n\t\t\n\t\tfunction _getPoints () {\n\t\t\tconst pathClockwise = new Path(pathCwi);\n\t\t\tconst pathCounterclockwise = new Path(pathCcwi);\n\t\t\t\n\t\t\tconst centerClockwise = pathClockwise.getPoint(0.5);\n\t\t\tconst centerCounterclockwise = pathCounterclockwise.getPoint(0.5);\n\t\t\tconst distClockwise = centerClockwise.distanceTo(cp);\n\t\t\tconst distCounterclockwise = centerCounterclockwise.distanceTo(cp);\n\t\t\t\n\t\t\tif (distClockwise < distCounterclockwise) {\n\t\t\t\tpoints = pathCwi;\n\t\t\t} else {\n\t\t\t\tpoints = pathCcwi;\n\t\t\t}\n\t\t\t\n\t\t\treturn points;\n\t\t}\n\t\t\n\t\tif (startIndex === endIndex) {\n\t\t\tconst cpCurve = this.findCurveFromVec(cp);\n\t\t\t\n\t\t\tif (cpCurve) {\n\t\t\t\tpathCcwi.push(v1,v2);\n\t\t\t\twhile (true) {\n\t\t\t\t\tconst current = this.curves[cwi];\n\t\t\t\t\tconst next = this.curves[(cwi + 1) % this.curves.length];\n\t\t\t\t\tcwi = this.curves.indexOf(next);\n\t\t\t\t\t\n\t\t\t\t\tif (this.calcIsInsideThickLineSegment(current.v1,current.v2,v1)) {\n\t\t\t\t\t\tpathCwi.push(v1, current.v2);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpathCwi.push(current.v1,current.v2);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (cwi === endIndex) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst t1 = this.getPointT(v1);\n\t\t\t\tconst t2 = this.getPointT(v2);\n\t\t\t\t\n\t\t\t\tif (t1 > t2) {\n\t\t\t\t\tpathCcwi.push(v1,v2);\n\t\t\t\t\twhile (true) {\n\t\t\t\t\t\tconst current = this.curves[cwi];\n\t\t\t\t\t\tconst next = this.curves[(cwi + 1) % this.curves.length];\n\t\t\t\t\t\tcwi = this.curves.indexOf(next);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (this.calcIsInsideThickLineSegment(current.v1,current.v2,v1)) {\n\t\t\t\t\t\t\tpathCwi.push(v1, current.v2);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpathCwi.push(current.v1,current.v2);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (cwi === endIndex) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\tpathCwi.push(v1,v2);\n\t\t\t\t\twhile (true) {\n\t\t\t\t\t\tconst current = this.curves[ccwi];\n\t\t\t\t\t\tconst prev = this.curves[(ccwi + this.curves.length - 1) % this.curves.length];\n\t\t\t\t\t\tccwi = this.curves.indexOf(prev);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (this.calcIsInsideThickLineSegment(current.v1,current.v2,v1)) {\n\t\t\t\t\t\t\tpathCcwi.push(v1, current.v1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpathCcwi.push(current.v2,current.v1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (ccwi === endIndex) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn _getPoints();\n\t\t}\n\t\t\n\t\twhile (cwi !== endIndex) {\n\t\t\tconst current = this.curves[cwi];\n\t\t\tconst next = this.curves[(cwi + 1) % this.curves.length];\n\t\t\tcwi = this.curves.indexOf(next);\n\t\t\t\n\t\t\tif (this.calcIsInsideThickLineSegment(current.v1,current.v2,v1)) {\n\t\t\t\tpathCwi.push(v1, current.v2);\n\t\t\t} else {\n\t\t\t\tpathCwi.push(current.v1,current.v2);\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (!pathCwi[pathCwi.length - 1].equals(v2)) {\n\t\t\tpathCwi.push(v2);\n\t\t}\n\t\t\n\t\twhile (ccwi !== endIndex) {\n\t\t\tconst current = this.curves[ccwi];\n\t\t\tconst prev = this.curves[(ccwi + this.curves.length - 1) % this.curves.length];\n\t\t\tccwi = this.curves.indexOf(prev);\n\t\t\t\n\t\t\tif (this.calcIsInsideThickLineSegment(current.v1,current.v2,v1)) {\n\t\t\t\tpathCcwi.push(v1, current.v1);\n\t\t\t} else {\n\t\t\t\tpathCcwi.push(current.v2,current.v1);\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (!pathCcwi[pathCcwi.length - 1].equals(v2)) {\n\t\t\tpathCcwi.push(v2);\n\t\t}\n\t\t\n\t\treturn _getPoints();\n\t}\n\t\n\tcalcIsInsideThickLineSegment(v1, v2, pnt, lineThickness = 0.01) {\n\t\tconst L2 = (((v2.x - v1.x) * (v2.x - v1.x)) + ((v2.y - v1.y) * (v2.y - v1.y)));\n\t\tif (L2 === 0) return false;\n\t\tconst r = (((pnt.x - v1.x) * (v2.x - v1.x)) + ((pnt.y - v1.y) * (v2.y - v1.y))) / L2;\n\t\t\n\t\tif (r < 0) {\n\t\t\t//Outside line1\n\t\t\treturn (Math.sqrt(((v1.x - pnt.x) * (v1.x - pnt.x)) + ((v1.y - pnt.y) * (v1.y - pnt.y))) <= lineThickness);\n\t\t} else if ((0 <= r) && (r <= 1)) {\n\t\t\t//On the line segment\n\t\t\tconst s = (((v1.y - pnt.y) * (v2.x - v1.x)) - ((v1.x - pnt.x) * (v2.y - v1.y))) / L2;\n\t\t\treturn (Math.abs(s) * Math.sqrt(L2) <= lineThickness);\n\t\t} else {\n\t\t\t//Outside line2\n\t\t\treturn (Math.sqrt(((v2.x - pnt.x) * (v2.x - pnt.x)) + ((v2.y - pnt.y) * (v2.y - pnt.y))) <= lineThickness);\n\t\t}\n\t}\n\t\n\t\n\tmargin(offset,arcSegments = 0) {\n\t\tconst offsetCurves = [];\n\t\t\n\t\tfor (let i = 0; i < this.curves.length; i++) {\n\t\t\tconst curve = this.curves[i];\n\t\t\tconst dx = curve.outwardNormal.x * offset;\n\t\t\tconst dy = curve.outwardNormal.y * offset;\n\t\t\toffsetCurves.push(new LineCurve(\n\t\t\t\tnew Vector2(curve.v1.x + dx,curve.v1.y + dy),\n\t\t\t\tnew Vector2(curve.v2.x + dx,curve.v2.y + dy)\n\t\t\t));\n\t\t}\n\t\t\n\t\tconst points = [];\n\t\t\n\t\tfor (let i = 0; i < offsetCurves.length; i++) {\n\t\t\tconst currentCurve = offsetCurves[i];\n\t\t\tconst prevCurve = offsetCurves[(i + offsetCurves.length - 1) % offsetCurves.length];\n\t\t\tconst intersect = Polygon.curvesIntersection(prevCurve,currentCurve);\n\t\t\t\n\t\t\tif (intersect && (!intersect.isIntersectionOutside || arcSegments < 1)) {\n\t\t\t\tpoints.push(intersect.vec);\n\t\t\t} else {\n\t\t\t\tconst arcCenter = currentCurve.v1;\n\t\t\t\tPolygon.appendArc(\n\t\t\t\t\tarcSegments,\n\t\t\t\t\tpoints,\n\t\t\t\t\tarcCenter,\n\t\t\t\t\toffset,\n\t\t\t\t\tprevCurve.v2,\n\t\t\t\t\tcurrentCurve.v1,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\t\n\t\tconst start = points[0];\n\t\tconst end = points[points.length - 1];\n\t\t\n\t\tif (!start.equals(end)) {\n\t\t\tpoints.push(start);\n\t\t}\n\t\t\n\t\tthis.curves = [];\n\t\tdelete this.cacheLengths;\n\t\tthis.setFromPoints(points);\n\t\tthis.getLength();\n\t\tthis.getCenter();\n\t}\n\t\n\tpadding(offset,arcSegments = 0) {\n\t\tconst offsetCurves = [];\n\t\t\n\t\tfor (let i = 0; i < this.curves.length; i++) {\n\t\t\tconst curve = this.curves[i];\n\t\t\tconst dx = curve.inwardNormal.x * offset;\n\t\t\tconst dy = curve.inwardNormal.y * offset;\n\t\t\toffsetCurves.push(new LineCurve(\n\t\t\t\tnew Vector2(curve.v1.x + dx,curve.v1.y + dy),\n\t\t\t\tnew Vector2(curve.v2.x + dx,curve.v2.y + dy)\n\t\t\t));\n\t\t}\n\t\t\n\t\tlet points = [];\n\t\t\n\t\tfor (let i = 0; i < offsetCurves.length; i++) {\n\t\t\tconst currentCurve = offsetCurves[i];\n\t\t\tconst prevCurve = offsetCurves[(i + offsetCurves.length - 1) % offsetCurves.length];\n\t\t\tconst intersect = Polygon.curvesIntersection(prevCurve,currentCurve);\n\t\t\t\n\t\t\tif (intersect && (!intersect.isIntersectionOutside || arcSegments < 1)) {\n\t\t\t\tpoints.push(intersect.vec);\n\t\t\t} else {\n\t\t\t\tconst arcCenter = currentCurve.v1;\n\t\t\t\tPolygon.appendArc(\n\t\t\t\t\tarcSegments,\n\t\t\t\t\tpoints,\n\t\t\t\t\tarcCenter,\n\t\t\t\t\toffset,\n\t\t\t\t\tprevCurve.v2,\n\t\t\t\t\tcurrentCurve.v1,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\t\n\t\tconst start = points[0];\n\t\tconst end = points[points.length - 1];\n\t\t\n\t\tif (!start.equals(end)) {\n\t\t\tpoints.push(start);\n\t\t}\n\t\t\n\t\t// Polygon.cropCrossLines(points);\n\t\t\n\t\tthis.curves = [];\n\t\tdelete this.cacheLengths;\n\t\tthis.setFromPoints(points);\n\t\tthis.getLength();\n\t\tthis.getCenter();\n\t}\n\t\n\tintersects(vec2) {\n\t\t\n\t\tfunction closestPointOnSegment(point, vertex1, vertex2) {\n\t\t\tconst segmentVector = vertex2.clone().sub(vertex1);\n\t\t\tconst pointVector = point.clone().sub(vertex1);\n\t\t\tconst segmentLengthSquared = segmentVector.lengthSq();\n\t\t\tconst t = Math.max(0, Math.min(1, pointVector.dot(segmentVector) / segmentLengthSquared));\n\t\t\treturn vertex1.clone().add(segmentVector.multiplyScalar(t));\n\t\t}\n\t\t\n\t\tlet intersectedPoint = null;\n\t\tlet minDistanceSquared = Infinity;\n\t\tconst points = this.getPoints();\n\t\t\n\t\tfor (let i = 0; i < points.length; i++) {\n\t\t\tlet j = (i + 1) % points.length;\n\t\t\tconst vertex1 = points[i];\n\t\t\tconst vertex2 = points[j];\n\t\t\tconst projection = closestPointOnSegment(vec2, vertex1, vertex2);\n\t\t\tconst distanceSquared = projection.distanceToSquared(vec2);\n\t\t\t\n\t\t\tif (distanceSquared < minDistanceSquared) {\n\t\t\t\tminDistanceSquared = distanceSquared;\n\t\t\t\tintersectedPoint = projection;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn intersectedPoint;\n\t}\n\t\n\tcontainsPoint(vec2) {\n\t\tlet intersects = 0;\n\t\tconst points = this.getPoints();\n\t\t\n\t\tfor (let i = 0; i < points.length; i++) {\n\t\t\tconst j = (i + 1) % points.length;\n\t\t\tconst vertex1 = points[i];\n\t\t\tconst vertex2 = points[j];\n\t\t\tif (((vertex1.y > vec2.y) !== (vertex2.y > vec2.y)) &&\n\t\t\t\t(vec2.x < (vertex2.x - vertex1.x) * (vec2.y - vertex1.y) / (vertex2.y - vertex1.y) + vertex1.x)) {\n\t\t\t\tintersects++;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn intersects % 2 !== 0;\n\t}\n\t\n\tgetPointFromDistance(distance) {\n\t\tlet t;\n\t\tconst l = this.getLength();\n\t\t\n\t\tif (distance > l) {\n\t\t\tt = (distance - l) / l;\n\t\t\t\n\t\t\tif (t > 1) {\n\t\t\t\tt = Math.abs(Math.trunc(t) - t);\n\t\t\t}\n\t\t} else if (distance < 0) {\n\t\t\tt = (l + distance) / l;\n\t\t} else {\n\t\t\tt = distance / l;\n\t\t}\n\t\treturn this.getPoint(t);\n\t}\n\t\n\tstatic appendArc(arcSegments,points,center,radius,startPoint,endPoint,isPadding) {\n\t\tlet startAngle = Math.atan2(\n\t\t\tstartPoint.y - center.y,\n\t\t\tstartPoint.x - center.x\n\t\t);\n\t\tlet endAngle = Math.atan2(endPoint.y - center.y, endPoint.x - center.x);\n\t\t\n\t\tif (startAngle < 0) {\n\t\t\tstartAngle += Math.PI * 2;\n\t\t}\n\t\t\n\t\tif (endAngle < 0) {\n\t\t\tendAngle += Math.PI * 2;\n\t\t}\n\t\t\n\t\tconst angle =\n\t\t\tstartAngle > endAngle\n\t\t\t\t? startAngle - endAngle\n\t\t\t\t: startAngle + Math.PI * 2 - endAngle;\n\t\tconst angleStep = (isPadding ? -angle : Math.PI * 2 - angle) / arcSegments;\n\t\t\n\t\tpoints.push(startPoint);\n\t\t\n\t\tfor (let i = 1; i < arcSegments; ++i) {\n\t\t\tconst angle = startAngle + angleStep * i;\n\t\t\t\n\t\t\tpoints.push(new Vector2(\n\t\t\t\tcenter.x + Math.cos(angle) * radius,\n\t\t\t\tcenter.y + Math.sin(angle) * radius\n\t\t\t));\n\t\t}\n\t\t\n\t\tpoints.push(endPoint);\n\t}\n\t\n\tstatic isCrossLines(poly) {\n\t\tconst points = poly.getPoints();\n\t\tconst lines = [];\n\t\tlet isCross = false;\n\t\tlet intersection = null;\n\t\t\n\t\tfor (let i = 0; i < points.length; i++) {\n\t\t\tconst current = points[i];\n\t\t\tconst next = points[(i + 1) % points.length];\n\t\t\tlines.push(new LineCurve(current,next));\n\t\t}\n\t\t\n\t\tfunction findCrossLines () {\n\t\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\t\tconst current = lines[i];\n\t\t\t\tconst lineIntersection = Polygon.curvesIntersection(intersection,current);\n\t\t\t\tif (lineIntersection && lineIntersection.onLine1 && lineIntersection.onLine2) {\n\t\t\t\t\tisCross = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tfor (let i = 0; i < lines.length; i ++) {\n\t\t\tintersection = lines[i];\n\t\t\tfindCrossLines(intersection);\n\t\t\tif (isCross) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn isCross;\n\t}\n\t\n\tstatic cropCrossLines(points) {\n\t\tconst data = [];\n\t\tconst lines = [];\n\t\tconst skip = [];\n\t\t\n\t\tconst poly = new Polygon(points);\n\t\tlet intersection = null;\n\t\t\n\t\tfor (let i = 0; i < points.length; i++) {\n\t\t\tconst current = points[i];\n\t\t\tconst next = points[(i + 1) % points.length];\n\t\t\tlines.push(new LineCurve(current,next));\n\t\t}\n\t\t\n\t\tfunction findCrossLines () {\n\t\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\t\tconst current = lines[i];\n\t\t\t\tconst lineIntersection = Polygon.curvesIntersection(intersection,current);\n\t\t\t\tif (lineIntersection && lineIntersection.onLine1 && lineIntersection.onLine2) {\n\t\t\t\t\tconst d1 = intersection.v1.distanceTo(poly.center);\n\t\t\t\t\tconst d2 = intersection.v2.distanceTo(poly.center);\n\t\t\t\t\tconst intersectionIndex = lines.indexOf(intersection);\n\t\t\t\t\tskip.push((intersectionIndex + i) / 2);\n\t\t\t\t\t\n\t\t\t\t\tdata.push({\n\t\t\t\t\t\tv: d1 < d2 ? 'v2' : 'v1',\n\t\t\t\t\t\ti: intersectionIndex,\n\t\t\t\t\t\tintersection: lineIntersection.vec\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tfor (let i = 0; i < lines.length; i ++) {\n\t\t\tintersection = lines[i];\n\t\t\tfindCrossLines(intersection);\n\t\t}\n\t\t\n\t\tif (data.length) {\n\t\t\tconst points = [];\n\t\t\t\n\t\t\tfor (let i = 0; i < lines.length; i ++) {\n\t\t\t\tif (skip.includes(i)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst curve = lines[i];\n\t\t\t\tconst intersectedData = data.find(el => el.i === i);\n\t\t\t\tif (intersectedData) {\n\t\t\t\t\tconst point1 = curve.v1;\n\t\t\t\t\tconst point2 = curve.v2;\n\t\t\t\t\t\n\t\t\t\t\tif (intersectedData.v === 'v1') {\n\t\t\t\t\t\tpoints.push(intersectedData.intersection,point2);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpoints.push(point1,intersectedData.intersection);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\tpoints.push(curve.v1,curve.v2);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn points;\n\t\t\t\n\t\t} else {\n\t\t\treturn points;\n\t\t}\n\t\t\n\t}\n\t\n\tstatic simplifyPoints(points,tolerance) {\n\t\tfunction simplify(points, tolerance) {\n\t\t\tif (points.length <= 2) return points;\n\t\t\t\n\t\t\tconst firstPoint = points[0];\n\t\t\tconst lastPoint = points[points.length - 1];\n\t\t\tlet maxDistance = 0;\n\t\t\tlet index = 0;\n\t\t\t\n\t\t\tfor (let i = 1; i < points.length - 1; i++) {\n\t\t\t\tconst distance = perpendicularDistance(points[i], firstPoint, lastPoint);\n\t\t\t\tif (distance > maxDistance) {\n\t\t\t\t\tmaxDistance = distance;\n\t\t\t\t\tindex = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (maxDistance > tolerance) {\n\t\t\t\tconst left = simplify(points.slice(0, index + 1), tolerance);\n\t\t\t\tconst right = simplify(points.slice(index), tolerance);\n\t\t\t\treturn left.slice(0, left.length - 1).concat(right);\n\t\t\t} else {\n\t\t\t\treturn [firstPoint, lastPoint];\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction perpendicularDistance(point, lineStart, lineEnd) {\n\t\t\tconst dx = lineEnd.x - lineStart.x;\n\t\t\tconst dy = lineEnd.y - lineStart.y;\n\t\t\tconst mag = Math.sqrt(dx * dx + dy * dy);\n\t\t\tconst u = ((point.x - lineStart.x) * dx + (point.y - lineStart.y) * dy) / (mag * mag);\n\t\t\tconst x = lineStart.x + u * dx;\n\t\t\tconst y = lineStart.y + u * dy;\n\t\t\tconst dx1 = point.x - x;\n\t\t\tconst dy1 = point.y - y;\n\t\t\treturn Math.sqrt(dx1 * dx1 + dy1 * dy1);\n\t\t}\n\t\t\n\t\treturn simplify(points, tolerance);\n\t}\n\t\n\tstatic triangulate(points) {\n\t\tconst uniquePoints = Array.from(new Set(points.map(p => `${p.x},${p.y}`)))\n\t\t\t.map(str => {\n\t\t\t\tconst [x, y] = str.split(',').map(Number);\n\t\t\t\treturn new Vector2(x, y);\n\t\t\t});\n\t\t\n\t\tconst center = uniquePoints.reduce((acc, point) => acc.add(point), new Vector2()).divideScalar(uniquePoints.length);\n\t\tconst angleFromCenter = (point) => Math.atan2(point.y - center.y, point.x - center.x);\n\t\tuniquePoints.sort((a, b) => angleFromCenter(a) - angleFromCenter(b));\n\t\t\n\t\treturn uniquePoints;\n\t}\n\t\n\tstatic curvesIntersection(curveA, curveB) {\n\t\tconst onLines = {\n\t\t\tonLine1: false,\n\t\t\tonLine2: false\n\t\t};\n\t\tconst den =\n\t\t\t(curveB.v2.y - curveB.v1.y) * (curveA.v2.x - curveA.v1.x) -\n\t\t\t(curveB.v2.x - curveB.v1.x) * (curveA.v2.y - curveA.v1.y);\n\t\t\n\t\tif (den === 0) {\n\t\t\treturn null;\n\t\t}\n\t\t\n\t\tconst ua =\n\t\t\t((curveB.v2.x - curveB.v1.x) * (curveA.v1.y - curveB.v1.y) -\n\t\t\t\t(curveB.v2.y - curveB.v1.y) *\n\t\t\t\t(curveA.v1.x - curveB.v1.x)) /\n\t\t\tden;\n\t\t\n\t\tconst ub =\n\t\t\t((curveA.v2.x - curveA.v1.x) * (curveA.v1.y - curveB.v1.y) -\n\t\t\t\t(curveA.v2.y - curveA.v1.y) *\n\t\t\t\t(curveA.v1.x - curveB.v1.x)) /\n\t\t\tden;\n\t\t\n\t\tlet a = curveA.v1.y - curveB.v1.y;\n\t\tlet b = curveA.v1.x - curveB.v1.x;\n\t\tlet numerator1 = ((curveB.v2.x - curveB.v1.x) * a) - ((curveB.v2.y - curveB.v1.y) * b);\n\t\tlet numerator2 = ((curveA.v2.x - curveA.v1.x) * a) - ((curveA.v2.y - curveA.v1.y) * b);\n\t\ta = numerator1 / den;\n\t\tb = numerator2 / den;\n\t\t\n\t\tif (a > 0 && a < 1) {\n\t\t\tonLines.onLine1 = true;\n\t\t}\n\t\t\n\t\tif (b > 0 && b < 1) {\n\t\t\tonLines.onLine2 = true;\n\t\t}\n\t\t\n\t\tconst isIntersectionOutside = ua < 0 || ub < 0 || ua > 1 || ub > 1;\n\t\tconst intersection = new Vector2(\n\t\t\tcurveA.v1.x + ua * (curveA.v2.x - curveA.v1.x),\n\t\t\tcurveA.v1.y + ua * (curveA.v2.y - curveA.v1.y)\n\t\t);\n\t\t\n\t\treturn {\n\t\t\tvec: intersection,\n\t\t\tisIntersectionOutside,\n\t\t\t...onLines\n\t\t};\n\t}\n\t\n\tstatic findPath(v1,v2,poly1,poly2,outPoly) {\n\t\tconst curve = poly1.findCurveFromVec(v1);\n\t\tconst curve2 = poly2.findCurveFromVec(v2);\n\t\tconst isPerpendicular = isPerpendicularLines(curve.v1,curve.v2,v1,v2);\n\t\tconst isPerpendicular2 = isPerpendicularLines(curve2.v1,curve2.v2,v1,v2);\n\t\t\n\t\tconst direction = new Vector2().subVectors(v2,v1);\n\t\t\n\t\tif (isPerpendicular && isPerpendicular2) {\n\t\t\treturn [v1,v2];\n\t\t} else {\n\t\t\tconst distance = v1.distanceTo(v2);\n\t\t\tconst center = new Vector2().copy(v1).add(direction.clone().normalize().multiplyScalar(distance / 2));\n\t\t\t\n\t\t\tlet v3 = new Vector2(v1.x,center.y);\n\t\t\tlet v4 = new Vector2(v2.x, center.y);\n\t\t\t\n\t\t\tif (!outPoly.containsPoint(v3) || !outPoly.containsPoint(v4) || outPoly.pointOnSegment(v3) || outPoly.pointOnSegment(v4)) {\n\t\t\t\tv3 = new Vector2(center.x,v1.y);\n\t\t\t\tv4 = new Vector2(center.x, v2.y);\n\t\t\t}\n\t\t\t\n\t\t\treturn [v1,v3,v4,v2];\n\t\t}\n\t}\n\t\n}\n","export class TinyQueue {\n\tconstructor(data = [], compare = (a, b) => (a < b ? -1 : a > b ? 1 : 0)) {\n\t\tthis.data = data;\n\t\tthis.length = this.data.length;\n\t\tthis.compare = compare;\n\t\t\n\t\tif (this.length > 0) {\n\t\t\tfor (let i = (this.length >> 1) - 1; i >= 0; i--) this._down(i);\n\t\t}\n\t}\n\t\n\tpush(item) {\n\t\tthis.data.push(item);\n\t\tthis._up(this.length++);\n\t}\n\t\n\tpop() {\n\t\tif (this.length === 0) return undefined;\n\t\t\n\t\tconst top = this.data[0];\n\t\tconst bottom = this.data.pop();\n\t\t\n\t\tif (--this.length > 0) {\n\t\t\tthis.data[0] = bottom;\n\t\t\tthis._down(0);\n\t\t}\n\t\t\n\t\treturn top;\n\t}\n\t\n\tpeek() {\n\t\treturn this.data[0];\n\t}\n\t\n\t_up(pos) {\n\t\tconst {data, compare} = this;\n\t\tconst item = data[pos];\n\t\t\n\t\twhile (pos > 0) {\n\t\t\tconst parent = (pos - 1) >> 1;\n\t\t\tconst current = data[parent];\n\t\t\tif (compare(item, current) >= 0) break;\n\t\t\tdata[pos] = current;\n\t\t\tpos = parent;\n\t\t}\n\t\t\n\t\tdata[pos] = item;\n\t}\n\t\n\t_down(pos) {\n\t\tconst {data, compare} = this;\n\t\tconst halfLength = this.length >> 1;\n\t\tconst item = data[pos];\n\t\t\n\t\twhile (pos < halfLength) {\n\t\t\tlet bestChild = (pos << 1) + 1; // initially it is the left child\n\t\t\tconst right = bestChild + 1;\n\t\t\t\n\t\t\tif (right < this.length && compare(data[right], data[bestChild]) < 0) {\n\t\t\t\tbestChild = right;\n\t\t\t}\n\t\t\tif (compare(data[bestChild], item) >= 0) break;\n\t\t\t\n\t\t\tdata[pos] = data[bestChild];\n\t\t\tpos = bestChild;\n\t\t}\n\t\t\n\t\tdata[pos] = item;\n\t}\n}\n","/**\n * Full-screen tone-mapping shader based on http://www.cis.rit.edu/people/faculty/ferwerda/publications/sig02_paper.pdf\n */\n\nconst ToneMapShader = {\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'averageLuminance': { value: 1.0 },\n\t\t'luminanceMap': { value: null },\n\t\t'maxLuminance': { value: 16.0 },\n\t\t'minLuminance': { value: 0.01 },\n\t\t'middleGrey': { value: 0.6 }\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#include \n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tuniform float middleGrey;\n\t\tuniform float minLuminance;\n\t\tuniform float maxLuminance;\n\t\t#ifdef ADAPTED_LUMINANCE\n\t\t\tuniform sampler2D luminanceMap;\n\t\t#else\n\t\t\tuniform float averageLuminance;\n\t\t#endif\n\n\t\tvec3 ToneMap( vec3 vColor ) {\n\t\t\t#ifdef ADAPTED_LUMINANCE\n\t\t\t\t// Get the calculated average luminance\n\t\t\t\tfloat fLumAvg = texture2D(luminanceMap, vec2(0.5, 0.5)).r;\n\t\t\t#else\n\t\t\t\tfloat fLumAvg = averageLuminance;\n\t\t\t#endif\n\n\t\t\t// Calculate the luminance of the current pixel\n\t\t\tfloat fLumPixel = luminance( vColor );\n\n\t\t\t// Apply the modified operator (Eq. 4)\n\t\t\tfloat fLumScaled = (fLumPixel * middleGrey) / max( minLuminance, fLumAvg );\n\n\t\t\tfloat fLumCompressed = (fLumScaled * (1.0 + (fLumScaled / (maxLuminance * maxLuminance)))) / (1.0 + fLumScaled);\n\t\t\treturn fLumCompressed * vColor;\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\n\t\t\tgl_FragColor = vec4( ToneMap( texel.xyz ), texel.w );\n\n\t\t}`\n\n};\n\nexport { ToneMapShader };\n","import {\n\tEventDispatcher,\n\tMOUSE,\n\tQuaternion,\n\tVector2,\n\tVector3\n} from 'three';\n\nvar TrackballControls = function ( object, domElement ) {\n\n\tif ( domElement === undefined ) console.warn( 'THREE.TrackballControls: The second parameter \"domElement\" is now mandatory.' );\n\tif ( domElement === document ) console.error( 'THREE.TrackballControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.' );\n\n\tvar scope = this;\n\tvar STATE = { NONE: - 1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PAN: 4 };\n\n\tthis.object = object;\n\tthis.domElement = domElement;\n\n\t// API\n\n\tthis.enabled = true;\n\n\tthis.screen = { left: 0, top: 0, width: 0, height: 0 };\n\n\tthis.rotateSpeed = 1.0;\n\tthis.zoomSpeed = 1.2;\n\tthis.panSpeed = 0.3;\n\n\tthis.noRotate = false;\n\tthis.noZoom = false;\n\tthis.noPan = false;\n\n\tthis.staticMoving = false;\n\tthis.dynamicDampingFactor = 0.2;\n\n\tthis.minDistance = 0;\n\tthis.maxDistance = Infinity;\n\n\tthis.keys = [ 65 /*A*/, 83 /*S*/, 68 /*D*/ ];\n\n\tthis.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.ZOOM, RIGHT: MOUSE.PAN };\n\n\t// internals\n\n\tthis.target = new Vector3();\n\n\tvar EPS = 0.000001;\n\n\tvar lastPosition = new Vector3();\n\tvar lastZoom = 1;\n\n\tvar _state = STATE.NONE,\n\t\t_keyState = STATE.NONE,\n\n\t\t_eye = new Vector3(),\n\n\t\t_movePrev = new Vector2(),\n\t\t_moveCurr = new Vector2(),\n\n\t\t_lastAxis = new Vector3(),\n\t\t_lastAngle = 0,\n\n\t\t_zoomStart = new Vector2(),\n\t\t_zoomEnd = new Vector2(),\n\n\t\t_touchZoomDistanceStart = 0,\n\t\t_touchZoomDistanceEnd = 0,\n\n\t\t_panStart = new Vector2(),\n\t\t_panEnd = new Vector2();\n\n\t// for reset\n\n\tthis.target0 = this.target.clone();\n\tthis.position0 = this.object.position.clone();\n\tthis.up0 = this.object.up.clone();\n\tthis.zoom0 = this.object.zoom;\n\n\t// events\n\n\tvar changeEvent = { type: 'change' };\n\tvar startEvent = { type: 'start' };\n\tvar endEvent = { type: 'end' };\n\n\n\t// methods\n\n\tthis.handleResize = function () {\n\n\t\tvar box = scope.domElement.getBoundingClientRect();\n\t\t// adjustments come from similar code in the jquery offset() function\n\t\tvar d = scope.domElement.ownerDocument.documentElement;\n\t\tscope.screen.left = box.left + window.pageXOffset - d.clientLeft;\n\t\tscope.screen.top = box.top + window.pageYOffset - d.clientTop;\n\t\tscope.screen.width = box.width;\n\t\tscope.screen.height = box.height;\n\n\t};\n\n\tvar getMouseOnScreen = ( function () {\n\n\t\tvar vector = new Vector2();\n\n\t\treturn function getMouseOnScreen( pageX, pageY ) {\n\n\t\t\tvector.set(\n\t\t\t\t( pageX - scope.screen.left ) / scope.screen.width,\n\t\t\t\t( pageY - scope.screen.top ) / scope.screen.height\n\t\t\t);\n\n\t\t\treturn vector;\n\n\t\t};\n\n\t}() );\n\n\tvar getMouseOnCircle = ( function () {\n\n\t\tvar vector = new Vector2();\n\n\t\treturn function getMouseOnCircle( pageX, pageY ) {\n\n\t\t\tvector.set(\n\t\t\t\t( ( pageX - scope.screen.width * 0.5 - scope.screen.left ) / ( scope.screen.width * 0.5 ) ),\n\t\t\t\t( ( scope.screen.height + 2 * ( scope.screen.top - pageY ) ) / scope.screen.width ) // screen.width intentional\n\t\t\t);\n\n\t\t\treturn vector;\n\n\t\t};\n\n\t}() );\n\n\tthis.rotateCamera = ( function () {\n\n\t\tvar axis = new Vector3(),\n\t\t\tquaternion = new Quaternion(),\n\t\t\teyeDirection = new Vector3(),\n\t\t\tobjectUpDirection = new Vector3(),\n\t\t\tobjectSidewaysDirection = new Vector3(),\n\t\t\tmoveDirection = new Vector3(),\n\t\t\tangle;\n\n\t\treturn function rotateCamera() {\n\n\t\t\tmoveDirection.set( _moveCurr.x - _movePrev.x, _moveCurr.y - _movePrev.y, 0 );\n\t\t\tangle = moveDirection.length();\n\n\t\t\tif ( angle ) {\n\n\t\t\t\t_eye.copy( scope.object.position ).sub( scope.target );\n\n\t\t\t\teyeDirection.copy( _eye ).normalize();\n\t\t\t\tobjectUpDirection.copy( scope.object.up ).normalize();\n\t\t\t\tobjectSidewaysDirection.crossVectors( objectUpDirection, eyeDirection ).normalize();\n\n\t\t\t\tobjectUpDirection.setLength( _moveCurr.y - _movePrev.y );\n\t\t\t\tobjectSidewaysDirection.setLength( _moveCurr.x - _movePrev.x );\n\n\t\t\t\tmoveDirection.copy( objectUpDirection.add( objectSidewaysDirection ) );\n\n\t\t\t\taxis.crossVectors( moveDirection, _eye ).normalize();\n\n\t\t\t\tangle *= scope.rotateSpeed;\n\t\t\t\tquaternion.setFromAxisAngle( axis, angle );\n\n\t\t\t\t_eye.applyQuaternion( quaternion );\n\t\t\t\tscope.object.up.applyQuaternion( quaternion );\n\n\t\t\t\t_lastAxis.copy( axis );\n\t\t\t\t_lastAngle = angle;\n\n\t\t\t} else if ( ! scope.staticMoving && _lastAngle ) {\n\n\t\t\t\t_lastAngle *= Math.sqrt( 1.0 - scope.dynamicDampingFactor );\n\t\t\t\t_eye.copy( scope.object.position ).sub( scope.target );\n\t\t\t\tquaternion.setFromAxisAngle( _lastAxis, _lastAngle );\n\t\t\t\t_eye.applyQuaternion( quaternion );\n\t\t\t\tscope.object.up.applyQuaternion( quaternion );\n\n\t\t\t}\n\n\t\t\t_movePrev.copy( _moveCurr );\n\n\t\t};\n\n\t}() );\n\n\n\tthis.zoomCamera = function (value) {\n\n\t\tif (value){\n\t\t\t_zoomStart.y = value;\n\t\t}\n\n\t\tvar factor;\n\n\t\tif ( _state === STATE.TOUCH_ZOOM_PAN ) {\n\n\t\t\tfactor = _touchZoomDistanceStart / _touchZoomDistanceEnd;\n\t\t\t_touchZoomDistanceStart = _touchZoomDistanceEnd;\n\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t_eye.multiplyScalar( factor );\n\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\tscope.object.zoom *= factor;\n\t\t\t\tscope.object.updateProjectionMatrix();\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type' );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfactor = 1.0 + ( _zoomEnd.y - _zoomStart.y ) * scope.zoomSpeed;\n\n\t\t\tif ( factor !== 1.0 && factor > 0.0 ) {\n\n\t\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t\t_eye.multiplyScalar( factor );\n\n\t\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\tscope.object.zoom /= factor;\n\t\t\t\t\tscope.object.updateProjectionMatrix();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( scope.staticMoving ) {\n\n\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t} else {\n\n\t\t\t\t_zoomStart.y += ( _zoomEnd.y - _zoomStart.y ) * this.dynamicDampingFactor;\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.panCamera = ( function () {\n\n\t\tvar mouseChange = new Vector2(),\n\t\t\tobjectUp = new Vector3(),\n\t\t\tpan = new Vector3();\n\n\t\treturn function panCamera() {\n\n\t\t\tmouseChange.copy( _panEnd ).sub( _panStart );\n\n\t\t\tif ( mouseChange.lengthSq() ) {\n\n\t\t\t\tif ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\tvar scale_x = ( scope.object.right - scope.object.left ) / scope.object.zoom / scope.domElement.clientWidth;\n\t\t\t\t\tvar scale_y = ( scope.object.top - scope.object.bottom ) / scope.object.zoom / scope.domElement.clientWidth;\n\n\t\t\t\t\tmouseChange.x *= scale_x;\n\t\t\t\t\tmouseChange.y *= scale_y;\n\n\t\t\t\t}\n\n\t\t\t\tmouseChange.multiplyScalar( _eye.length() * scope.panSpeed );\n\n\t\t\t\tpan.copy( _eye ).cross( scope.object.up ).setLength( mouseChange.x );\n\t\t\t\tpan.add( objectUp.copy( scope.object.up ).setLength( mouseChange.y ) );\n\n\t\t\t\tscope.object.position.add( pan );\n\t\t\t\tscope.target.add( pan );\n\n\t\t\t\tif ( scope.staticMoving ) {\n\n\t\t\t\t\t_panStart.copy( _panEnd );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_panStart.add( mouseChange.subVectors( _panEnd, _panStart ).multiplyScalar( scope.dynamicDampingFactor ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}() );\n\n\tthis.checkDistances = function () {\n\n\t\tif ( ! scope.noZoom || ! scope.noPan ) {\n\n\t\t\tif ( _eye.lengthSq() > scope.maxDistance * scope.maxDistance ) {\n\n\t\t\t\tscope.object.position.addVectors( scope.target, _eye.setLength( scope.maxDistance ) );\n\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t}\n\n\t\t\tif ( _eye.lengthSq() < scope.minDistance * scope.minDistance ) {\n\n\t\t\t\tscope.object.position.addVectors( scope.target, _eye.setLength( scope.minDistance ) );\n\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.update = function () {\n\n\t\t_eye.subVectors( scope.object.position, scope.target );\n\n\t\tif ( ! scope.noRotate ) {\n\n\t\t\tscope.rotateCamera();\n\n\t\t}\n\n\t\tif ( ! scope.noZoom ) {\n\n\t\t\tscope.zoomCamera();\n\n\t\t}\n\n\t\tif ( ! scope.noPan ) {\n\n\t\t\tscope.panCamera();\n\n\t\t}\n\n\t\tscope.object.position.addVectors( scope.target, _eye );\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscope.checkDistances();\n\n\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\tif ( lastPosition.distanceToSquared( scope.object.position ) > EPS ) {\n\n\t\t\t\tscope.dispatchEvent( changeEvent );\n\n\t\t\t\tlastPosition.copy( scope.object.position );\n\n\t\t\t}\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\tif ( lastPosition.distanceToSquared( scope.object.position ) > EPS || lastZoom !== scope.object.zoom ) {\n\n\t\t\t\tscope.dispatchEvent( changeEvent );\n\n\t\t\t\tlastPosition.copy( scope.object.position );\n\t\t\t\tlastZoom = scope.object.zoom;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type' );\n\n\t\t}\n\n\t};\n\n\tthis.reset = function () {\n\n\t\t_state = STATE.NONE;\n\t\t_keyState = STATE.NONE;\n\n\t\tscope.target.copy( scope.target0 );\n\t\tscope.object.position.copy( scope.position0 );\n\t\tscope.object.up.copy( scope.up0 );\n\t\tscope.object.zoom = scope.zoom0;\n\n\t\tscope.object.updateProjectionMatrix();\n\n\t\t_eye.subVectors( scope.object.position, scope.target );\n\n\t\tscope.object.lookAt( scope.target );\n\n\t\tscope.dispatchEvent( changeEvent );\n\n\t\tlastPosition.copy( scope.object.position );\n\t\tlastZoom = scope.object.zoom;\n\n\t};\n\n\t// listeners\n\n\tfunction onPointerDown( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseDown( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onPointerMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseMove( event );\n\n\t\t\t\t// const flatTooltip = document.querySelector('.flat-tooltip');\n\t\t\t\t// if (flatTooltip && getComputedStyle(flatTooltip).display !== 'none')\n\t\t\t\t// showTooltip();\n\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onPointerUp( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseUp( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction keydown( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\twindow.removeEventListener( 'keydown', keydown );\n\n\t\tif ( _keyState !== STATE.NONE ) {\n\n\t\t\treturn;\n\n\t\t} else if ( event.keyCode === scope.keys[ STATE.ROTATE ] && ! scope.noRotate ) {\n\n\t\t\t_keyState = STATE.ROTATE;\n\n\t\t} else if ( event.keyCode === scope.keys[ STATE.ZOOM ] && ! scope.noZoom ) {\n\n\t\t\t_keyState = STATE.ZOOM;\n\n\t\t} else if ( event.keyCode === scope.keys[ STATE.PAN ] && ! scope.noPan ) {\n\n\t\t\t_keyState = STATE.PAN;\n\n\t\t}\n\n\t}\n\n\tfunction keyup() {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\t_keyState = STATE.NONE;\n\n\t\twindow.addEventListener( 'keydown', keydown, false );\n\n\t}\n\n\tfunction onMouseDown( event ) {\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tif ( _state === STATE.NONE ) {\n\n\t\t\tswitch ( event.button ) {\n\n\t\t\t\tcase scope.mouseButtons.LEFT:\n\t\t\t\t\t_state = STATE.ROTATE;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase scope.mouseButtons.MIDDLE:\n\t\t\t\t\t_state = STATE.ZOOM;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase scope.mouseButtons.RIGHT:\n\t\t\t\t\t_state = STATE.PAN;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\t_state = STATE.NONE;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar state = ( _keyState !== STATE.NONE ) ? _keyState : _state;\n\n\t\tif ( state === STATE.ROTATE && ! scope.noRotate ) {\n\n\t\t\t_moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );\n\t\t\t_movePrev.copy( _moveCurr );\n\n\t\t} else if ( state === STATE.ZOOM && ! scope.noZoom ) {\n\n\t\t\t_zoomStart.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\t\t\t_zoomEnd.copy( _zoomStart );\n\n\t\t} else if ( state === STATE.PAN && ! scope.noPan ) {\n\n\t\t\t_panStart.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\t\t\t_panEnd.copy( _panStart );\n\n\t\t}\n\n\t\tscope.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove, false );\n\t\tscope.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp, false );\n\n\t\tscope.dispatchEvent( startEvent );\n\n\t}\n\n\tfunction onMouseMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tvar state = ( _keyState !== STATE.NONE ) ? _keyState : _state;\n\n\t\tif ( state === STATE.ROTATE && ! scope.noRotate ) {\n\n\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t_moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );\n\n\t\t} else if ( state === STATE.ZOOM && ! scope.noZoom ) {\n\n\t\t\t_zoomEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\n\t\t} else if ( state === STATE.PAN && ! scope.noPan ) {\n\n\t\t\t_panEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\n\t\t}\n\n\t}\n\n\tfunction onMouseUp( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\t_state = STATE.NONE;\n\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove );\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction mousewheel( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tif ( scope.noZoom === true ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tswitch ( event.deltaMode ) {\n\n\t\t\tcase 2:\n\t\t\t\t// Zoom in pages\n\t\t\t\t_zoomStart.y -= event.deltaY * 0.025;\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\t// Zoom in lines\n\t\t\t\t_zoomStart.y -= event.deltaY * 0.01;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\t// undefined, 0, assume pixels\n\t\t\t\t_zoomStart.y -= event.deltaY * 0.00025;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tscope.dispatchEvent( startEvent );\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction touchstart( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1:\n\t\t\t\t_state = STATE.TOUCH_ROTATE;\n\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) );\n\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\tbreak;\n\n\t\t\tdefault: // 2 or more\n\t\t\t\t_state = STATE.TOUCH_ZOOM_PAN;\n\t\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\t\t\t\t_touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\t\tvar x = ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ) / 2;\n\t\t\t\tvar y = ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ) / 2;\n\t\t\t\t_panStart.copy( getMouseOnScreen( x, y ) );\n\t\t\t\t_panEnd.copy( _panStart );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tscope.dispatchEvent( startEvent );\n\n\t}\n\n\tfunction touchmove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1:\n\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) );\n\t\t\t\tbreak;\n\n\t\t\tdefault: // 2 or more\n\t\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\t\t\t\t_touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\t\tvar x = ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ) / 2;\n\t\t\t\tvar y = ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ) / 2;\n\t\t\t\t_panEnd.copy( getMouseOnScreen( x, y ) );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction touchend( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 0:\n\t\t\t\t_state = STATE.NONE;\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\t_state = STATE.TOUCH_ROTATE;\n\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) );\n\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction contextmenu( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t}\n\n\tthis.dispose = function () {\n\n\t\tscope.domElement.removeEventListener( 'contextmenu', contextmenu, false );\n\n\t\tscope.domElement.removeEventListener( 'pointerdown', onPointerDown, false );\n\t\tscope.domElement.removeEventListener( 'wheel', mousewheel, false );\n\n\t\tscope.domElement.removeEventListener( 'touchstart', touchstart, false );\n\t\tscope.domElement.removeEventListener( 'touchend', touchend, false );\n\t\tscope.domElement.removeEventListener( 'touchmove', touchmove, false );\n\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove, false );\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp, false );\n\n\t\twindow.removeEventListener( 'keydown', keydown, false );\n\t\twindow.removeEventListener( 'keyup', keyup, false );\n\n\t};\n\n\tthis.domElement.addEventListener( 'contextmenu', contextmenu, false );\n\n\tthis.domElement.addEventListener( 'pointerdown', onPointerDown, false );\n\tthis.domElement.addEventListener( 'wheel', mousewheel, false );\n\n\tthis.domElement.addEventListener( 'touchstart', touchstart, false );\n\tthis.domElement.addEventListener( 'touchend', touchend, false );\n\tthis.domElement.addEventListener( 'touchmove', touchmove, false );\n\n\tthis.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove, false );\n\tthis.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp, false );\n\n\twindow.addEventListener( 'keydown', keydown, false );\n\twindow.addEventListener( 'keyup', keyup, false );\n\n\tthis.handleResize();\n\n\t// force an update at start\n\tthis.update();\n\n};\n\nTrackballControls.prototype = Object.create( EventDispatcher.prototype );\nTrackballControls.prototype.constructor = TrackballControls;\n\nexport { TrackballControls };\n","(()=>{\"use strict\";class e{constructor({appName:s,appIconUrl:t,assetUrl:n,showErrorMessageForUnsupportedBrowsers:i,allowUserToCloseModal:r,maxModalDisplayCount:o}){this.appName=s,this._assertArg(\"appName\",\"string\"==typeof this.appName&&this.appName.length>0),this.appIconUrl=t,this._assertArg(\"appIconUrl\",\"string\"==typeof this.appIconUrl&&this.appIconUrl.length>0),this.assetUrl=n,this._assertArg(\"assetUrl\",\"string\"==typeof this.assetUrl&&this.assetUrl.length>0),this.showErrorMessageForUnsupportedBrowsers=void 0===i?e.SHOW_ERRMSG_UNSUPPORTED.ALL:i,this._assertArg(\"showErrorMessageForUnsupportedBrowsers\",Object.values(e.SHOW_ERRMSG_UNSUPPORTED).includes(this.showErrorMessageForUnsupportedBrowsers)),this.allowUserToCloseModal=void 0!==r&&r,this._assertArg(\"allowUserToCloseModal\",\"boolean\"==typeof this.allowUserToCloseModal),this.maxModalDisplayCount=void 0===o?-1:o,this._assertArg(\"maxModalDisplayCount\",Number.isInteger(this.maxModalDisplayCount)),this.closeEventListener=null}isStandAlone(){return window.navigator.standalone||window.matchMedia(\"(display-mode: standalone)\").matches}isDeviceAndroid(){return navigator.userAgent.match(/Android/)}isDeviceIOS(){return navigator.userAgent.match(/iPhone|iPad|iPod/)}isBrowserIOSSafari(){return this.isDeviceIOS()&&window.navigator.userAgent.match(/Safari/)&&!this.isBrowserIOSChrome()&&!this.isBrowserIOSFirefox()&&!this.isBrowserIOSInAppFacebook()&&!this.isBrowserIOSInAppLinkedin()&&!this.isBrowserIOSInAppInstagram()&&!this.isBrowserIOSInAppThreads()&&!this.isBrowserIOSInAppTwitter()}isBrowserIOSChrome(){return this.isDeviceIOS()&&navigator.userAgent.match(/CriOS/)}isBrowserIOSFirefox(){return this.isDeviceIOS()&&window.navigator.userAgent.match(/FxiOS/)}isBrowserIOSInAppFacebook(){return!!this.isDeviceIOS()&&window.navigator.userAgent.match(/FBAN|FBAV/)}isBrowserIOSInAppLinkedin(){return!!this.isDeviceIOS()&&window.navigator.userAgent.match(/LinkedInApp/)}isBrowserIOSInAppInstagram(){return!(!this.isDeviceIOS()||!window.document.referrer.match(\"//l.instagram.com/\")&&!(window.navigator.userAgent.match(/iPhone/)&&window.screen.height&&window.outerHeight&&window.outerHeight{n.classList.add(\"visible\")}),50))}return s}close(){const e=document.querySelector(\".adhs-container\");e&&(e.classList.remove(\"visible\"),setTimeout((()=>{e.remove(),this.closeEventListener&&(window.removeEventListener(\"touchstart\",this.closeEventListener),window.removeEventListener(\"click\",this.closeEventListener),this.closeEventListener=null)}),300))}_assertArg(e,s){if(!s)throw new Error(\"AddToHomeScreen: variable '\"+e+\"' has an invalid value.\")}_genLogo(){return'\\n
\\n \"logo\"\\n
\\n '}_genErrorMessage(e,s,t){var n=this._genLogo()+this._genModalStart()+'
'+s+'
'+t+'
'+this._genModalEnd();e.innerHTML=n}_genTitleWithMessage(e){return'\\n
'+e+\"
\\n \"}_genTitle(){return this._genTitleWithMessage(\"Install the \"+this.appName+\" app to continue\")}_genModalStart(){return'
'}_genModalEnd(){return\"
\"}_genListStart(){return'
'}_genListEnd(){return\"
\"}_genListItem(e,s){return'\\n
\\n
\\n
\\n
'+e+'
\\n
\\n
\\n
'+s+\"
\\n
\"}_genAssetUrl(e){return this.assetUrl+e}_genIOSSafari(e){var s=this._genLogo()+this._genModalStart()+this._genTitle()+this._genListStart()+this._genListItem(\"1\",'Tap the button below.')+this._genListItem(\"2\",'Select from the menu that pops up. You may need to scroll down to find this menu item.')+this._genListItem(\"3\",'Open the app.')+this._genListEnd()+this._genModalEnd()+'
\\n \"arrow\"\\n
';e.innerHTML=s,e.classList.add(\"adhs-ios\"),e.classList.add(\"adhs-safari\")}_genIOSChrome(e){var s=this._genLogo()+this._genModalStart()+this._genTitle()+this._genListStart()+this._genListItem(\"1\",'Tap the button in the upper right corner.')+this._genListItem(\"2\",'Select from the menu that pops up. You may need to scroll down to find this menu item.')+this._genListItem(\"3\",'Open the app.')+this._genListEnd()+this._genModalEnd()+'
\\n \"arrow\"\\n
';e.innerHTML=s,e.classList.add(\"adhs-ios\"),e.classList.add(\"adhs-chrome\")}_genIOSInAppBrowserOpenInSystemBrowser(e){var s=this._genLogo()+this._genModalStart()+this._genTitle()+this._genListStart()+this._genListItem(\"1\",'Tap the button above.')+this._genListItem(\"2\",'Tap Open in browser .')+this._genListEnd()+this._genModalEnd()+'
\\n \"arrow\"\\n
';e.innerHTML=s,e.classList.add(\"adhs-ios\"),e.classList.add(\"adhs-inappbrowser-openinsystembrowser\")}_genIOSInAppBrowserOpenInSafariBrowser(e){var s=this._genLogo()+this._genModalStart()+this._genTitle()+this._genListStart()+this._genListItem(\"1\",'Tap the button below to open your system browser.')+this._genListEnd()+this._genModalEnd()+'
\\n \"arrow\"\\n
';e.innerHTML=s,e.classList.add(\"adhs-ios\"),e.classList.add(\"adhs-inappbrowser-openinsafari\")}_genAndroidChrome(e){var s=this._genLogo()+this._genModalStart()+this._genTitle()+this._genListStart()+this._genListItem(\"1\",'Tap the button in the browser bar.')+this._genListItem(\"2\",'Tap the or button.')+this._genListItem(\"3\",'Open the app.')+this._genListEnd()+this._genModalEnd()+'
\\n \"arrow\"\\n
';e.innerHTML=s,e.classList.add(\"adhs-android\"),e.classList.add(\"adhs-chrome\")}_registerCloseListener(){if(this.allowUserToCloseModal){var e=this;this.closeEventListener=function(s){document.getElementsByClassName(\"adhs-container\")[0].getElementsByClassName(\"adhs-modal\")[0].contains(s.target)||e.close()},window.addEventListener(\"touchstart\",this.closeEventListener),window.addEventListener(\"click\",this.closeEventListener)}}clearModalDisplayCount(){this._isEnabledModalDisplayCount()&&window.localStorage.removeItem(\"adhs-modal-display-count\")}_isEnabledModalDisplayCount(){return\"number\"==typeof this.maxModalDisplayCount&&this.maxModalDisplayCount>=0&&window.localStorage}_hasReachedMaxModalDisplayCount(){return!!this._isEnabledModalDisplayCount()&&this._getModalDisplayCount()>=this.maxModalDisplayCount}_incrModalDisplayCount(){if(!this._isEnabledModalDisplayCount())return!1;var e=this._getModalDisplayCount();return e++,window.localStorage.setItem(\"adhs-modal-display-count\",e),!0}_getModalDisplayCount(){var e=window.localStorage.getItem(\"adhs-modal-display-count\");return null===e?(e=0,window.localStorage.setItem(\"adhs-modal-display-count\",e)):e=parseInt(e),e}static copyToClipboard(){const e=window.location.href;try{window.navigator.clipboard.writeText(e),document.getElementsByClassName(\"adhs-error-copy-link-button\")[0].innerHTML=\"Link Copied to Clipboard!\"}catch(e){document.getElementsByClassName(\"adhs-error-copy-link-button\")[0].innerHTML='Failed to Copy to Clipboard! (Try Again from \"https://\" Link)'}}}e.PHONE_TYPE={ANDROID:\"ANDROID\",IOS:\"IOS\"},e.SHOW_ERRMSG_UNSUPPORTED={NONE:0,MOBILE:1,DESKTOP:16,ALL:17},e.ReturnObj=class{constructor({isStandAlone:e,canBeStandAlone:s,device:t}){this.isStandAlone=e,this.canBeStandAlone=s,this.device=t}};const s=e;window.AddToHomeScreen=s,window.AddToHomescreen={}.default})();","\"use strict\";\n\nimport {CardTypes} from \"../common\";\n\nexport function zoom(classNames = {}, settings = {}) {\n\n const C_scaleDefault = settings[\"scaleDefault\"] || 2;\n const C_scaleDifference = settings[\"scaleDifference\"] || 0.5;\n const C_scaleMax = settings[\"scaleMax\"] || 10;\n const C_scaleMin = settings[\"scaleMin\"] || 1;\n const _active = classNames[\"active\"] || \"active\";\n const _dataScale = \"data-scale\";\n const _dataTranslateX = \"data-translate-x\";\n const _dataTranslateY = \"data-translate-y\";\n const _visible = classNames[\"visible\"] || \"visible\";\n let $container;\n let $element;\n const $zoom = document.getElementsByClassName(classNames[\"zoom\"] || \"zoom\");\n let capture = false;\n let doubleClickMonitor = [null];\n let containerHeight;\n let containerWidth;\n let containerOffsetX;\n let containerOffsetY;\n let initialScale;\n let elementHeight;\n let elementWidth;\n let heightDifference;\n let initialOffsetX;\n let initialOffsetY;\n let initialPinchDistance;\n let initialPointerOffsetX;\n let initialPointerOffsetX2;\n let initialPointerOffsetY;\n let initialPointerOffsetY2;\n let limitOffsetX;\n let limitOffsetY;\n let mousemoveCount = 0;\n let offset;\n let pinchOffsetX;\n let pinchOffsetY;\n let pointerOffsetX;\n let pointerOffsetX2;\n let pointerOffsetY;\n let pointerOffsetY2;\n let scaleDirection;\n let scaleDifference;\n let targetOffsetX;\n let targetOffsetY;\n let targetPinchDistance;\n let targetScale;\n let touchable = false;\n let touchCount;\n let touchmoveCount = 0;\n let doubleTapMonitor = [null];\n let widthDifference;\n\n for (let i = 0; i < $zoom.length; i++) {\n $container = $zoom[i];\n $element = $container.children[0];\n $element.setAttribute(_dataScale, 1);\n $element.setAttribute(_dataTranslateX, 0);\n $element.setAttribute(_dataTranslateY, 0);\n }\n // window.addEventListener(\"load\", function () {\n // for (let i = 0; i < $zoom.length; i++) {\n // $container = $zoom[i];\n // $element = $container.children[0];\n // addClass($element, _visible);\n // }\n // window.addEventListener(\"resize\", function (e) {\n // for (let i = 0; i < $zoom.length; i++) {\n // $container = $zoom[i];\n // $element = $container.children[0];\n // if (hasClass($container, _active) === false) {\n // continue;\n // }\n // containerHeight = $container.clientHeight;\n // containerWidth = $container.clientWidth;\n // elementHeight = $element.clientHeight;\n // elementWidth = $element.clientWidth;\n // initialOffsetX = parseFloat($element.getAttribute(_dataTranslateX));\n // initialOffsetY = parseFloat($element.getAttribute(_dataTranslateY));\n // targetScale = C_scaleDefault;\n // limitOffsetX = ((elementWidth * targetScale) - containerWidth) / 2;\n // limitOffsetY = ((elementHeight * targetScale) - containerHeight) / 2;\n // targetOffsetX = (elementWidth * targetScale) > containerWidth ? minMax(initialOffsetX, limitOffsetX * (-1), limitOffsetX) : 0;\n // targetOffsetY = (elementHeight * targetScale) > containerHeight ? minMax(initialOffsetY, limitOffsetY * (-1), limitOffsetY) : 0;\n // if (targetScale === 1) {\n // removeClass($container, _active);\n // }\n // $element.setAttribute(_dataScale, targetScale);\n // $element.setAttribute(_dataTranslateX, targetOffsetX);\n // $element.setAttribute(_dataTranslateY, targetOffsetY);\n // moveScaleElement($element, targetOffsetX + \"px\", targetOffsetY + \"px\", targetScale, e);\n // }\n // }, false);\n // });\n massAddEventListener($zoom, \"mousedown\", mouseDown);\n massAddEventListener($zoom, \"mouseenter\", mouseEnter);\n massAddEventListener($zoom, \"mouseleave\", mouseLeave);\n document.addEventListener(\"mousemove\", mouseMove, { passive: false });\n document.addEventListener(\"mouseup\", mouseUp, { passive: false });\n document.addEventListener(\"touchstart\", function () {\n touchable = true;\n }, { passive: false });\n massAddEventListener($zoom, \"touchstart\", touchStart);\n massAddEventListener($zoom, \"touchmove\", touchMove);\n massAddEventListener($zoom, \"touchend\", touchEnd);\n // document.addEventListener(\"touchmove\", touchMove, { passive: false });\n // document.addEventListener(\"touchend\", touchEnd, { passive: false });\n massAddEventListener($zoom, \"wheel\", wheel);\n\n function mouseEnter() {\n // disableScroll();\n }\n\n function mouseLeave() {\n enableScroll();\n }\n\n function mouseDown(e) {\n e.preventDefault();\n if (touchable === true || e.which !== 1) {\n return false;\n }\n $container = this;\n if ($container.classList.contains('disabled-drag')) {\n return false;\n }\n $element = this.children[0];\n initialPointerOffsetX = e.clientX;\n initialPointerOffsetY = e.clientY;\n if (doubleClickMonitor[0] === null) {\n doubleClickMonitor[0] = e.target;\n doubleClickMonitor[1] = initialPointerOffsetX;\n doubleClickMonitor[2] = initialPointerOffsetY;\n setTimeout(function () {\n doubleClickMonitor = [null];\n }, 400);\n } else if (doubleClickMonitor[0] === e.target && mousemoveCount <= 5 && isWithinRange(initialPointerOffsetX, doubleClickMonitor[1] - 10, doubleClickMonitor[1] + 10) === true && isWithinRange(initialPointerOffsetY, doubleClickMonitor[2] - 10, doubleClickMonitor[2] + 10) === true) {\n if (hasClass($container, _active) === true) {\n $element.setAttribute(_dataScale, 1);\n $element.setAttribute(_dataTranslateX, 0);\n $element.setAttribute(_dataTranslateY, 0);\n removeClass($container, _active);\n moveScaleElement($element, 0, 0, 1, e);\n } else {\n $element.setAttribute(_dataScale, C_scaleDefault);\n $element.setAttribute(_dataTranslateX, 0);\n $element.setAttribute(_dataTranslateY, 0);\n addClass($container, _active);\n moveScaleElement($element, 0, 0, C_scaleDefault, e);\n }\n doubleClickMonitor = [null];\n return false;\n }\n containerOffsetX = $container.offsetLeft;\n containerOffsetY = $container.offsetTop;\n containerHeight = $container.clientHeight;\n containerWidth = $container.clientWidth\n elementHeight = $element.clientHeight;\n elementWidth = $element.clientWidth;\n initialOffsetX = parseFloat($element.getAttribute(_dataTranslateX));\n initialOffsetY = parseFloat($element.getAttribute(_dataTranslateY));\n initialScale = minMax(parseFloat($element.getAttribute(_dataScale)), C_scaleMin, C_scaleMax);\n mousemoveCount = 0;\n capture = true;\n }\n function mouseMove(e) {\n if (touchable === true || capture === false) {\n return false;\n }\n pointerOffsetX = e.clientX;\n pointerOffsetY = e.clientY;\n targetScale = initialScale;\n limitOffsetX = ((elementWidth * targetScale) - containerWidth) / 2;\n limitOffsetY = ((elementHeight * targetScale) - containerHeight) / 2;\n targetOffsetX = (elementWidth * targetScale) <= containerWidth ? 0 : minMax(pointerOffsetX - (initialPointerOffsetX - initialOffsetX), limitOffsetX * (-1), limitOffsetX);\n targetOffsetY = (elementHeight * targetScale) <= containerHeight ? 0 : minMax(pointerOffsetY - (initialPointerOffsetY - initialOffsetY), limitOffsetY * (-1), limitOffsetY);\n mousemoveCount++;\n if (Math.abs(targetOffsetX) === Math.abs(limitOffsetX)) {\n initialOffsetX = targetOffsetX;\n initialPointerOffsetX = pointerOffsetX;\n }\n if (Math.abs(targetOffsetY) === Math.abs(limitOffsetY)) {\n initialOffsetY = targetOffsetY;\n initialPointerOffsetY = pointerOffsetY;\n }\n $element.setAttribute(_dataScale, targetScale);\n $element.setAttribute(_dataTranslateX, targetOffsetX);\n $element.setAttribute(_dataTranslateY, targetOffsetY);\n moveScaleElement($element, targetOffsetX + \"px\", targetOffsetY + \"px\", targetScale, e);\n }\n\n function mouseUp() {\n if (touchable === true || capture === false) {\n return false;\n }\n capture = false;\n }\n\n function touchStart(e) {\n // e.preventDefault();\n if (e.touches.length > 2) {\n return false;\n }\n $container = this;\n $element = this.children[0];\n containerOffsetX = $container.offsetLeft;\n containerOffsetY = $container.offsetTop;\n containerHeight = $container.clientHeight;\n containerWidth = $container.clientWidth;\n elementHeight = $element.clientHeight;\n elementWidth = $element.clientWidth;\n initialPointerOffsetX = e.touches[0].clientX;\n initialPointerOffsetY = e.touches[0].clientY;\n initialScale = minMax(parseFloat($element.getAttribute(_dataScale)), C_scaleMin, C_scaleMax);\n touchCount = e.touches.length;\n if (touchCount === 1) {\n if ($container.classList.contains('disabled-drag')) {\n return false;\n }\n if (doubleTapMonitor[0] === null) {\n doubleTapMonitor[0] = e.target;\n doubleTapMonitor[1] = initialPointerOffsetX;\n doubleTapMonitor[2] = initialPointerOffsetY;\n setTimeout(function () {\n doubleTapMonitor = [null];\n }, 400);\n } else if (doubleTapMonitor[0] === e.target && touchmoveCount <= 5 && isWithinRange(initialPointerOffsetX, doubleTapMonitor[1] - 30, doubleTapMonitor[1] + 30) === true && isWithinRange(initialPointerOffsetY, doubleTapMonitor[2] - 30, doubleTapMonitor[2] + 25) === true) {\n if (hasClass($container, _active) === true) {\n $element.setAttribute(_dataScale, 1);\n $element.setAttribute(_dataTranslateX, 0);\n $element.setAttribute(_dataTranslateY, 0);\n removeClass($container, _active);\n moveScaleElement($element, 0, 0, 1, e);\n } else {\n $element.setAttribute(_dataScale, C_scaleDefault);\n $element.setAttribute(_dataTranslateX, 0);\n $element.setAttribute(_dataTranslateY, 0);\n addClass($container, _active);\n moveScaleElement($element, 0, 0, C_scaleDefault, e);\n }\n doubleTapMonitor = [null];\n return false;\n }\n initialOffsetX = parseFloat($element.getAttribute(_dataTranslateX));\n initialOffsetY = parseFloat($element.getAttribute(_dataTranslateY));\n } else if (touchCount === 2) {\n if ($container.classList.contains('disabled-zoom')) {\n return false;\n }\n initialOffsetX = parseFloat($element.getAttribute(_dataTranslateX));\n initialOffsetY = parseFloat($element.getAttribute(_dataTranslateY));\n initialPointerOffsetX2 = e.touches[1].clientX;\n initialPointerOffsetY2 = e.touches[1].clientY;\n pinchOffsetX = (initialPointerOffsetX + initialPointerOffsetX2) / 2;\n pinchOffsetY = (initialPointerOffsetY + initialPointerOffsetY2) / 2;\n initialPinchDistance = Math.sqrt(((initialPointerOffsetX - initialPointerOffsetX2) * (initialPointerOffsetX - initialPointerOffsetX2)) + ((initialPointerOffsetY - initialPointerOffsetY2) * (initialPointerOffsetY - initialPointerOffsetY2)));\n }\n touchmoveCount = 0;\n capture = true;\n }\n\n function touchMove(e) {\n e.preventDefault();\n if (capture === false) {\n return false;\n }\n pointerOffsetX = e.touches[0].clientX;\n pointerOffsetY = e.touches[0].clientY;\n touchCount = e.touches.length;\n touchmoveCount++;\n if (touchCount > 1) {\n if (this.classList.contains('disabled-zoom')) {\n return false;\n }\n\n pointerOffsetX2 = e.touches[1].clientX;\n pointerOffsetY2 = e.touches[1].clientY;\n targetPinchDistance = Math.sqrt(((pointerOffsetX - pointerOffsetX2) * (pointerOffsetX - pointerOffsetX2)) + ((pointerOffsetY - pointerOffsetY2) * (pointerOffsetY - pointerOffsetY2)));\n if (initialPinchDistance === null) {\n initialPinchDistance = targetPinchDistance;\n }\n if (Math.abs(initialPinchDistance - targetPinchDistance) >= 1) {\n targetScale = minMax(targetPinchDistance / initialPinchDistance * initialScale, C_scaleMin, C_scaleMax);\n limitOffsetX = ((elementWidth * targetScale) - containerWidth) / 2;\n limitOffsetY = ((elementHeight * targetScale) - containerHeight) / 2;\n scaleDifference = targetScale - initialScale;\n targetOffsetX = (elementWidth * targetScale) <= containerWidth ? 0 : minMax(initialOffsetX - ((((((pinchOffsetX - containerOffsetX) - (containerWidth / 2)) - initialOffsetX) / (targetScale - scaleDifference))) * scaleDifference), limitOffsetX * (-1), limitOffsetX);\n targetOffsetY = (elementHeight * targetScale) <= containerHeight ? 0 : minMax(initialOffsetY - ((((((pinchOffsetY - containerOffsetY) - (containerHeight / 2)) - initialOffsetY) / (targetScale - scaleDifference))) * scaleDifference), limitOffsetY * (-1), limitOffsetY);\n if (targetScale > 1) {\n addClass($container, _active);\n } else {\n removeClass($container, _active);\n }\n moveScaleElement($element, targetOffsetX + \"px\", targetOffsetY + \"px\", targetScale, e);\n initialPinchDistance = targetPinchDistance;\n initialScale = targetScale;\n initialOffsetX = targetOffsetX;\n initialOffsetY = targetOffsetY;\n }\n } else {\n\n if (this.classList.contains('disabled-drag')) {\n return false;\n }\n\n targetScale = initialScale;\n limitOffsetX = ((elementWidth * targetScale) - containerWidth) / 2;\n limitOffsetY = ((elementHeight * targetScale) - containerHeight) / 2;\n targetOffsetX = (elementWidth * targetScale) <= containerWidth ? 0 : minMax(pointerOffsetX - (initialPointerOffsetX - initialOffsetX), limitOffsetX * (-1), limitOffsetX);\n targetOffsetY = (elementHeight * targetScale) <= containerHeight ? 0 : minMax(pointerOffsetY - (initialPointerOffsetY - initialOffsetY), limitOffsetY * (-1), limitOffsetY);\n if (Math.abs(targetOffsetX) === Math.abs(limitOffsetX)) {\n initialOffsetX = targetOffsetX;\n initialPointerOffsetX = pointerOffsetX;\n }\n if (Math.abs(targetOffsetY) === Math.abs(limitOffsetY)) {\n initialOffsetY = targetOffsetY;\n initialPointerOffsetY = pointerOffsetY;\n }\n $element.setAttribute(_dataScale, initialScale);\n $element.setAttribute(_dataTranslateX, targetOffsetX);\n $element.setAttribute(_dataTranslateY, targetOffsetY);\n moveScaleElement($element, targetOffsetX + \"px\", targetOffsetY + \"px\", targetScale, e);\n }\n }\n\n function touchEnd(e) {\n touchCount = e.touches.length;\n if (capture === false) {\n return false;\n }\n if (touchCount === 0) {\n $element.setAttribute(_dataScale, initialScale);\n $element.setAttribute(_dataTranslateX, targetOffsetX);\n $element.setAttribute(_dataTranslateY, targetOffsetY);\n initialPinchDistance = null;\n capture = false;\n } else if (touchCount === 1) {\n initialPointerOffsetX = e.touches[0].clientX;\n initialPointerOffsetY = e.touches[0].clientY;\n } else if (touchCount > 1) {\n initialPinchDistance = null;\n }\n }\n\n function wheel(e) {\n $container = this;\n if ($container.classList.contains('disabled-zoom')) {\n return false;\n }\n $element = this.children[0];\n offset = $container.getBoundingClientRect();\n containerHeight = $container.clientHeight;\n containerWidth = $container.clientWidth;\n elementHeight = $element.clientHeight;\n elementWidth = $element.clientWidth;\n containerOffsetX = offset.left;\n containerOffsetY = offset.top;\n initialScale = minMax(parseFloat($element.getAttribute(_dataScale), C_scaleMin, C_scaleMax));\n initialOffsetX = parseFloat($element.getAttribute(_dataTranslateX));\n initialOffsetY = parseFloat($element.getAttribute(_dataTranslateY));\n pointerOffsetX = e.clientX;\n pointerOffsetY = e.clientY;\n scaleDirection = e.deltaY < 0 ? 1 : -1;\n scaleDifference = C_scaleDifference * scaleDirection;\n targetScale = initialScale + scaleDifference;\n if (targetScale < C_scaleMin || targetScale > C_scaleMax) {\n return false;\n }\n limitOffsetX = ((elementWidth * targetScale) - containerWidth) / 2;\n limitOffsetY = ((elementHeight * targetScale) - containerHeight) / 2;\n if (targetScale <= 1) {\n targetOffsetX = 0;\n targetOffsetY = 0;\n } else {\n targetOffsetX = (elementWidth * targetScale) <= containerWidth ? 0 : minMax(initialOffsetX - ((((((pointerOffsetX - containerOffsetX) - (containerWidth / 2)) - initialOffsetX) / (targetScale - scaleDifference))) * scaleDifference), limitOffsetX * (-1), limitOffsetX);\n targetOffsetY = (elementHeight * targetScale) <= containerHeight ? 0 : minMax(initialOffsetY - ((((((pointerOffsetY - containerOffsetY) - (containerHeight / 2)) - initialOffsetY) / (targetScale - scaleDifference))) * scaleDifference), limitOffsetY * (-1), limitOffsetY);\n }\n if (targetScale > 1) {\n addClass($container, _active);\n } else {\n removeClass($container, _active);\n }\n $element.setAttribute(_dataScale, targetScale);\n $element.setAttribute(_dataTranslateX, targetOffsetX);\n $element.setAttribute(_dataTranslateY, targetOffsetY);\n moveScaleElement($element, targetOffsetX + \"px\", targetOffsetY + \"px\", targetScale, e);\n }\n}\n\nfunction addClass($element, targetClass) {\n if (hasClass($element, targetClass) === false) {\n $element.className += \" \" + targetClass;\n }\n}\n\nfunction enableScroll() {\n if (window.removeEventListener) {\n window.removeEventListener('DOMMouseScroll', preventDefault);\n }\n window.onmousewheel = document.onmousewheel = null;\n window.onwheel = null;\n window.ontouchmove = null;\n document.onkeydown = null;\n}\n\nfunction isWithinRange(value, min, max) {\n return value >= min && value <= max;\n}\n\nfunction hasClass($element, targetClass) {\n const rgx = new RegExp(\"(?:^|\\\\s)\" + targetClass + \"(?!\\\\S)\", \"g\");\n return !!$element.className.match(rgx);\n}\n\nfunction massAddEventListener($elements, event, customFunction) {\n\n // const useCapture = useCapture || false;\n for (let i = 0; i < $elements.length; i++) {\n $elements[i].addEventListener(event, customFunction, { passive: false });\n }\n}\n\nfunction minMax(value, min, max) {\n if (value < min) {\n value = min;\n } else if (value > max) {\n value = max;\n }\n return value;\n}\n\nfunction moveScaleElement($element, targetOffsetX, targetOffsetY, targetScale, e) {\n // const element = document.querySelector(`.${CardTypes.Options}-card__plans-box_preview-content.plan-2D`);\n\n // if (document.querySelector(`.compare-block__2dPlan`)) {\n // const elementCompare = e.target.closest('.compare-card').querySelector(`.compare-block__2dPlan`);\n //\n // if (elementCompare) {\n // elementCompare.setAttribute('style', `transform: translate3d(${targetOffsetX}, ${targetOffsetY}, 0) scale3d(${targetScale}, ${targetScale}, 1)`)\n // return;\n // }\n // return;\n // }\n\n $element?.setAttribute('style', `transform: translate3d(${targetOffsetX}, ${targetOffsetY}, 0) scale3d(${targetScale}, ${targetScale}, 1)`)\n // $element.style.cssText = \"-moz-transform : translate(\" + targetOffsetX + \", \" + targetOffsetY + \") scale(\" + targetScale + \"); -ms-transform : translate(\" + targetOffsetX + \", \" + targetOffsetY + \") scale(\" + targetScale + \"); -o-transform : translate(\" + targetOffsetX + \", \" + targetOffsetY + \") scale(\" + targetScale + \"); -webkit-transform : translate(\" + targetOffsetX + \", \" + targetOffsetY + \") scale(\" + targetScale + \"); transform : translate3d(\" + targetOffsetX + \", \" + targetOffsetY + \", 0) scale3d(\" + targetScale + \", \" + targetScale + \", 1);\";\n}\n\nfunction preventDefault(e) {\n e = e || window.event;\n if (e.preventDefault) {\n e.preventDefault();\n }\n e.returnValue = false;\n}\n\nfunction removeClass($element, targetClass) {\n const rgx = new RegExp(\"(?:^|\\\\s)\" + targetClass + \"(?!\\\\S)\", \"g\");\n $element.className = $element.className.replace(rgx, \"\");\n}\n","import {\n BufferGeometry,\n Color,\n LineSegments,\n MathUtils,\n ShaderMaterial,\n Triangle,\n Vector3,\n} from 'three';\nimport { Float32BufferAttribute } from 'three/src/core/BufferAttribute';\n\n\nconst vertexShader = `\n\tattribute vec3 control0;\n\tattribute vec3 control1;\n\tattribute vec3 direction;\n attribute float collapse;\n varying float zFOG;\n\n\tvoid main() {\n\t\n\t\t// Transform the line segment ends and control points into camera clip space\n\t\tvec4 c0 = projectionMatrix * modelViewMatrix * vec4( control0, 1.0 );\n\t\tvec4 c1 = projectionMatrix * modelViewMatrix * vec4( control1, 1.0 );\n\t\tvec4 p0 = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\tvec4 p1 = projectionMatrix * modelViewMatrix * vec4( position + direction, 1.0 );\n\n\t\tc0.xy /= c0.w;\n\t\tc1.xy /= c1.w;\n\t\tp0.xy /= p0.w;\n\t\tp1.xy /= p1.w;\n\n\t\t// Get the direction of the segment and an orthogonal vector\n\t\tvec2 dir = p1.xy - p0.xy;\n\t\tvec2 norm = vec2( -dir.y, dir.x );\n\n\t\t// Get control point directions from the line\n\t\tvec2 c0dir = c0.xy - p1.xy;\n\t\tvec2 c1dir = c1.xy - p1.xy;\n\n\t\t// If the vectors to the controls points are pointed in different directions away\n\t\t// from the line segment then the line should not be drawn.\n\t\tfloat d0 = dot( normalize( norm ), normalize( c0dir ) );\n\t\tfloat d1 = dot( normalize( norm ), normalize( c1dir ) );\n\t\tfloat discardFlag = float( sign( d0 ) != sign( d1 ) );\n \n vec3 p = position + ((discardFlag > 0.5) ? direction * collapse : vec3(0.));\n vec4 mvPosition = modelViewMatrix * vec4( p, 1.0 );\n\t\tgl_Position = projectionMatrix * mvPosition;\n\t\tzFOG = -gl_Position.z;\n\t}\n`;\n\nconst fragmentShader = `\n uniform vec3 diffuse;\n\tuniform float opacity;\n\tvarying float zFOG;\n\tuniform bool useFog;\n\tuniform float fogDensity;\n\n\tvoid main() {\n\t\n\t\tvec3 outgoingLight = vec3( 0.0 );\n\t\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t\t\n\t\toutgoingLight = diffuseColor.rgb; // simple shader\n\t\n\t\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t\tif (useFog) {\n\t\t gl_FragColor.a = 0.5 * exp( -fogDensity * fogDensity * zFOG * zFOG );\n\t\t}\n\t}\n`;\n\n\nclass OutlineEdges extends BufferGeometry{\n constructor ( mesh, params = {}) {\n super();\n\n const _v0 = new Vector3();\n const _v1 = new Vector3();\n const _normal = new Vector3();\n const _triangle = new Triangle();\n\n const geometry = mesh.geometry;\n\n this.type = 'EdgesGeometry';\n this.parameters = {\n thresholdAngle: params.hasOwnProperty('thresholdAngle') ? params.thresholdAngle : 1,\n transparent: params.hasOwnProperty('transparent') ? params.transparent : false,\n opacity: params.hasOwnProperty('opacity') ? params.opacity : 1.0,\n color: params.hasOwnProperty('color') ? params.color : '0xffffff',\n useFog: params.hasOwnProperty('useFog') ? params.useFog : false,\n fogDensity: params.hasOwnProperty('fogDensity') ? params.fogDensity : 0\n };\n\n const precisionPoints = 4;\n const precision = Math.pow( 10, precisionPoints );\n const thresholdDot = Math.cos( MathUtils.DEG2RAD * this.parameters.thresholdAngle );\n\n const indexAttr = geometry.getIndex();\n const positionAttr = geometry.getAttribute( 'position' );\n const indexCount = indexAttr ? indexAttr.count : positionAttr.count;\n\n const indexArr = [ 0, 0, 0 ];\n const vertKeys = [ 'a', 'b', 'c' ];\n const hashes = new Array( 3 );\n\n const edgeData = {};\n const vertices = [];\n const control0 = [];\n const control1 = [];\n const direction = [];\n const collapse = [];\n\n // generate vertices\n const v3 = new Vector3();\n const n = new Vector3();\n const n1 = new Vector3();\n const n2 = new Vector3();\n const d = new Vector3();\n\n for ( let i = 0; i < indexCount; i += 3 ) {\n if ( indexAttr ) {\n indexArr[ 0 ] = indexAttr.getX( i );\n indexArr[ 1 ] = indexAttr.getX( i + 1 );\n indexArr[ 2 ] = indexAttr.getX( i + 2 );\n } else {\n indexArr[ 0 ] = i;\n indexArr[ 1 ] = i + 1;\n indexArr[ 2 ] = i + 2;\n }\n\n const { a, b, c } = _triangle;\n a.fromBufferAttribute( positionAttr, indexArr[ 0 ] );\n b.fromBufferAttribute( positionAttr, indexArr[ 1 ] );\n c.fromBufferAttribute( positionAttr, indexArr[ 2 ] );\n _triangle.getNormal( _normal );\n\n // create hashes for the edge from the vertices\n hashes[ 0 ] = `${ Math.round( a.x * precision ) },${ Math.round( a.y * precision ) },${ Math.round( a.z * precision ) }`;\n hashes[ 1 ] = `${ Math.round( b.x * precision ) },${ Math.round( b.y * precision ) },${ Math.round( b.z * precision ) }`;\n hashes[ 2 ] = `${ Math.round( c.x * precision ) },${ Math.round( c.y * precision ) },${ Math.round( c.z * precision ) }`;\n\n // skip degenerate triangles\n if ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) {\n continue;\n }\n\n // iterate over every edge\n for ( let j = 0; j < 3; j ++ ) {\n // get the first and next vertex making up the edge\n const jNext = ( j + 1 ) % 3;\n const vecHash0 = hashes[ j ];\n const vecHash1 = hashes[ jNext ];\n const v0 = _triangle[ vertKeys[ j ] ];\n const v1 = _triangle[ vertKeys[ jNext ] ];\n\n const hash = `${ vecHash0 }_${ vecHash1 }`;\n const reverseHash = `${ vecHash1 }_${ vecHash0 }`;\n\n if ( reverseHash in edgeData && edgeData[ reverseHash ] ) {\n // if we found a sibling edge add it into the vertex array if\n // it meets the angle threshold and delete the edge from the map.\n if ( _normal.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) {\n vertices.push( v0.x, v0.y, v0.z );\n vertices.push( v1.x, v1.y, v1.z );\n\n d.subVectors(v1, v0);\n collapse.push(0, 1);\n n.copy(d).normalize();\n direction.push(d.x, d.y, d.z);\n n1.copy(_normal);\n n1.crossVectors(n, n1);\n d.subVectors(v0, v1);\n n.copy(d).normalize();\n n2.copy(edgeData[ reverseHash ].normal);\n n2.crossVectors(n, n2);\n direction.push(d.x, d.y, d.z);\n\n v3.copy(v0).add(n1); // control0\n control0.push(v3.x, v3.y, v3.z);\n v3.copy(v0).add(n2); // control1\n control1.push(v3.x, v3.y, v3.z);\n\n v3.copy(v1).add(n1); // control0\n control0.push(v3.x, v3.y, v3.z);\n v3.copy(v1).add(n2); // control1\n control1.push(v3.x, v3.y, v3.z);\n\n }\n edgeData[ reverseHash ] = null;\n } else if ( ! ( hash in edgeData ) ) {\n // if we've already got an edge here then skip adding a new one\n edgeData[ hash ] = {\n index0: indexArr[ j ],\n index1: indexArr[ jNext ],\n normal: _normal.clone(),\n };\n }\n }\n }\n\n // iterate over all remaining, unmatched edges and add them to the vertex array\n for ( const key in edgeData ) {\n if ( edgeData[ key ] ) {\n const { index0, index1 } = edgeData[ key ];\n\n _v0.fromBufferAttribute( positionAttr, index0 );\n _v1.fromBufferAttribute( positionAttr, index1 );\n\n vertices.push( _v0.x, _v0.y, _v0.z );\n vertices.push( _v1.x, _v1.y, _v1.z );\n\n collapse.push(0, 1);\n direction.push(0, 0, 0);\n direction.push(0, 0, 0);\n control0.push(0, 0, 0);\n control1.push(0, 0, 0);\n control0.push(0, 0, 0);\n control1.push(0, 0, 0);\n }\n }\n\n this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n this.setAttribute('control0', new Float32BufferAttribute(control0, 3));\n this.setAttribute('control1', new Float32BufferAttribute(control1, 3));\n this.setAttribute('direction', new Float32BufferAttribute(direction, 3));\n this.setAttribute('collapse', new Float32BufferAttribute(collapse, 1));\n\n const shaderMaterial = new ShaderMaterial({\n vertexShader,\n fragmentShader,\n uniforms: {\n diffuse: {\n value: new Color(this.parameters.color),\n },\n opacity: {\n value: this.parameters.opacity,\n },\n useFog: {\n value: this.parameters.useFog\n },\n fogDensity: {\n value: this.parameters.fogDensity\n }\n },\n transparent: this.parameters.transparent,\n });\n\n const outline = new LineSegments(this,shaderMaterial);\n outline.name = 'Outline';\n outline.visible = false;\n\n mesh.add(outline);\n return outline;\n }\n}\n\nexport { OutlineEdges };\n","/*!\n * PhotoSwipe 5.4.2 - https://photoswipe.com\n * (c) 2023 Dmytro Semenov\n */\n/** @typedef {import('../photoswipe.js').Point} Point */\n\n/**\n * @template {keyof HTMLElementTagNameMap} T\n * @param {string} className\n * @param {T} tagName\n * @param {Node} [appendToEl]\n * @returns {HTMLElementTagNameMap[T]}\n */\nfunction createElement(className, tagName, appendToEl) {\n const el = document.createElement(tagName);\n\n if (className) {\n el.className = className;\n }\n\n if (appendToEl) {\n appendToEl.appendChild(el);\n }\n\n return el;\n}\n/**\n * @param {Point} p1\n * @param {Point} p2\n * @returns {Point}\n */\n\nfunction equalizePoints(p1, p2) {\n p1.x = p2.x;\n p1.y = p2.y;\n\n if (p2.id !== undefined) {\n p1.id = p2.id;\n }\n\n return p1;\n}\n/**\n * @param {Point} p\n */\n\nfunction roundPoint(p) {\n p.x = Math.round(p.x);\n p.y = Math.round(p.y);\n}\n/**\n * Returns distance between two points.\n *\n * @param {Point} p1\n * @param {Point} p2\n * @returns {number}\n */\n\nfunction getDistanceBetween(p1, p2) {\n const x = Math.abs(p1.x - p2.x);\n const y = Math.abs(p1.y - p2.y);\n return Math.sqrt(x * x + y * y);\n}\n/**\n * Whether X and Y positions of points are equal\n *\n * @param {Point} p1\n * @param {Point} p2\n * @returns {boolean}\n */\n\nfunction pointsEqual(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n/**\n * The float result between the min and max values.\n *\n * @param {number} val\n * @param {number} min\n * @param {number} max\n * @returns {number}\n */\n\nfunction clamp(val, min, max) {\n return Math.min(Math.max(val, min), max);\n}\n/**\n * Get transform string\n *\n * @param {number} x\n * @param {number} [y]\n * @param {number} [scale]\n * @returns {string}\n */\n\nfunction toTransformString(x, y, scale) {\n let propValue = `translate3d(${x}px,${y || 0}px,0)`;\n\n if (scale !== undefined) {\n propValue += ` scale3d(${scale},${scale},1)`;\n }\n\n return propValue;\n}\n/**\n * Apply transform:translate(x, y) scale(scale) to element\n *\n * @param {HTMLElement} el\n * @param {number} x\n * @param {number} [y]\n * @param {number} [scale]\n */\n\nfunction setTransform(el, x, y, scale) {\n el.style.transform = toTransformString(x, y, scale);\n}\nconst defaultCSSEasing = 'cubic-bezier(.4,0,.22,1)';\n/**\n * Apply CSS transition to element\n *\n * @param {HTMLElement} el\n * @param {string} [prop] CSS property to animate\n * @param {number} [duration] in ms\n * @param {string} [ease] CSS easing function\n */\n\nfunction setTransitionStyle(el, prop, duration, ease) {\n // inOut: 'cubic-bezier(.4, 0, .22, 1)', // for \"toggle state\" transitions\n // out: 'cubic-bezier(0, 0, .22, 1)', // for \"show\" transitions\n // in: 'cubic-bezier(.4, 0, 1, 1)'// for \"hide\" transitions\n el.style.transition = prop ? `${prop} ${duration}ms ${ease || defaultCSSEasing}` : 'none';\n}\n/**\n * Apply width and height CSS properties to element\n *\n * @param {HTMLElement} el\n * @param {string | number} w\n * @param {string | number} h\n */\n\nfunction setWidthHeight(el, w, h) {\n el.style.width = typeof w === 'number' ? `${w}px` : w;\n el.style.height = typeof h === 'number' ? `${h}px` : h;\n}\n/**\n * @param {HTMLElement} el\n */\n\nfunction removeTransitionStyle(el) {\n setTransitionStyle(el);\n}\n/**\n * @param {HTMLImageElement} img\n * @returns {Promise}\n */\n\nfunction decodeImage(img) {\n if ('decode' in img) {\n return img.decode().catch(() => {});\n }\n\n if (img.complete) {\n return Promise.resolve(img);\n }\n\n return new Promise((resolve, reject) => {\n img.onload = () => resolve(img);\n\n img.onerror = reject;\n });\n}\n/** @typedef {LOAD_STATE[keyof LOAD_STATE]} LoadState */\n\n/** @type {{ IDLE: 'idle'; LOADING: 'loading'; LOADED: 'loaded'; ERROR: 'error' }} */\n\nconst LOAD_STATE = {\n IDLE: 'idle',\n LOADING: 'loading',\n LOADED: 'loaded',\n ERROR: 'error'\n};\n/**\n * Check if click or keydown event was dispatched\n * with a special key or via mouse wheel.\n *\n * @param {MouseEvent | KeyboardEvent} e\n * @returns {boolean}\n */\n\nfunction specialKeyUsed(e) {\n return 'button' in e && e.button === 1 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey;\n}\n/**\n * Parse `gallery` or `children` options.\n *\n * @param {import('../photoswipe.js').ElementProvider} [option]\n * @param {string} [legacySelector]\n * @param {HTMLElement | Document} [parent]\n * @returns HTMLElement[]\n */\n\nfunction getElementsFromOption(option, legacySelector, parent = document) {\n /** @type {HTMLElement[]} */\n let elements = [];\n\n if (option instanceof Element) {\n elements = [option];\n } else if (option instanceof NodeList || Array.isArray(option)) {\n elements = Array.from(option);\n } else {\n const selector = typeof option === 'string' ? option : legacySelector;\n\n if (selector) {\n elements = Array.from(parent.querySelectorAll(selector));\n }\n }\n\n return elements;\n}\n/**\n * Check if browser is Safari\n *\n * @returns {boolean}\n */\n\nfunction isSafari() {\n return !!(navigator.vendor && navigator.vendor.match(/apple/i));\n}\n\n// Detect passive event listener support\nlet supportsPassive = false;\n/* eslint-disable */\n\ntry {\n /* @ts-ignore */\n window.addEventListener('test', null, Object.defineProperty({}, 'passive', {\n get: () => {\n supportsPassive = true;\n }\n }));\n} catch (e) {}\n/* eslint-enable */\n\n/**\n * @typedef {Object} PoolItem\n * @prop {HTMLElement | Window | Document | undefined | null} target\n * @prop {string} type\n * @prop {EventListenerOrEventListenerObject} listener\n * @prop {boolean} [passive]\n */\n\n\nclass DOMEvents {\n constructor() {\n /**\n * @type {PoolItem[]}\n * @private\n */\n this._pool = [];\n }\n /**\n * Adds event listeners\n *\n * @param {PoolItem['target']} target\n * @param {PoolItem['type']} type Can be multiple, separated by space.\n * @param {PoolItem['listener']} listener\n * @param {PoolItem['passive']} [passive]\n */\n\n\n add(target, type, listener, passive) {\n this._toggleListener(target, type, listener, passive);\n }\n /**\n * Removes event listeners\n *\n * @param {PoolItem['target']} target\n * @param {PoolItem['type']} type\n * @param {PoolItem['listener']} listener\n * @param {PoolItem['passive']} [passive]\n */\n\n\n remove(target, type, listener, passive) {\n this._toggleListener(target, type, listener, passive, true);\n }\n /**\n * Removes all bound events\n */\n\n\n removeAll() {\n this._pool.forEach(poolItem => {\n this._toggleListener(poolItem.target, poolItem.type, poolItem.listener, poolItem.passive, true, true);\n });\n\n this._pool = [];\n }\n /**\n * Adds or removes event\n *\n * @private\n * @param {PoolItem['target']} target\n * @param {PoolItem['type']} type\n * @param {PoolItem['listener']} listener\n * @param {PoolItem['passive']} [passive]\n * @param {boolean} [unbind] Whether the event should be added or removed\n * @param {boolean} [skipPool] Whether events pool should be skipped\n */\n\n\n _toggleListener(target, type, listener, passive, unbind, skipPool) {\n if (!target) {\n return;\n }\n\n const methodName = unbind ? 'removeEventListener' : 'addEventListener';\n const types = type.split(' ');\n types.forEach(eType => {\n if (eType) {\n // Events pool is used to easily unbind all events when PhotoSwipe is closed,\n // so developer doesn't need to do this manually\n if (!skipPool) {\n if (unbind) {\n // Remove from the events pool\n this._pool = this._pool.filter(poolItem => {\n return poolItem.type !== eType || poolItem.listener !== listener || poolItem.target !== target;\n });\n } else {\n // Add to the events pool\n this._pool.push({\n target,\n type: eType,\n listener,\n passive\n });\n }\n } // most PhotoSwipe events call preventDefault,\n // and we do not need browser to scroll the page\n\n\n const eventOptions = supportsPassive ? {\n passive: passive || false\n } : false;\n target[methodName](eType, listener, eventOptions);\n }\n });\n }\n\n}\n\n/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\n\n/** @typedef {import('../core/base.js').default} PhotoSwipeBase */\n\n/** @typedef {import('../photoswipe.js').Point} Point */\n\n/** @typedef {import('../slide/slide.js').SlideData} SlideData */\n\n/**\n * @param {PhotoSwipeOptions} options\n * @param {PhotoSwipeBase} pswp\n * @returns {Point}\n */\nfunction getViewportSize(options, pswp) {\n if (options.getViewportSizeFn) {\n const newViewportSize = options.getViewportSizeFn(options, pswp);\n\n if (newViewportSize) {\n return newViewportSize;\n }\n }\n\n return {\n x: document.documentElement.clientWidth,\n // TODO: height on mobile is very incosistent due to toolbar\n // find a way to improve this\n //\n // document.documentElement.clientHeight - doesn't seem to work well\n y: window.innerHeight\n };\n}\n/**\n * Parses padding option.\n * Supported formats:\n *\n * // Object\n * padding: {\n * top: 0,\n * bottom: 0,\n * left: 0,\n * right: 0\n * }\n *\n * // A function that returns the object\n * paddingFn: (viewportSize, itemData, index) => {\n * return {\n * top: 0,\n * bottom: 0,\n * left: 0,\n * right: 0\n * };\n * }\n *\n * // Legacy variant\n * paddingLeft: 0,\n * paddingRight: 0,\n * paddingTop: 0,\n * paddingBottom: 0,\n *\n * @param {'left' | 'top' | 'bottom' | 'right'} prop\n * @param {PhotoSwipeOptions} options PhotoSwipe options\n * @param {Point} viewportSize PhotoSwipe viewport size, for example: { x:800, y:600 }\n * @param {SlideData} itemData Data about the slide\n * @param {number} index Slide index\n * @returns {number}\n */\n\nfunction parsePaddingOption(prop, options, viewportSize, itemData, index) {\n let paddingValue = 0;\n\n if (options.paddingFn) {\n paddingValue = options.paddingFn(viewportSize, itemData, index)[prop];\n } else if (options.padding) {\n paddingValue = options.padding[prop];\n } else {\n const legacyPropName = 'padding' + prop[0].toUpperCase() + prop.slice(1); // @ts-expect-error\n\n if (options[legacyPropName]) {\n // @ts-expect-error\n paddingValue = options[legacyPropName];\n }\n }\n\n return Number(paddingValue) || 0;\n}\n/**\n * @param {PhotoSwipeOptions} options\n * @param {Point} viewportSize\n * @param {SlideData} itemData\n * @param {number} index\n * @returns {Point}\n */\n\nfunction getPanAreaSize(options, viewportSize, itemData, index) {\n return {\n x: viewportSize.x - parsePaddingOption('left', options, viewportSize, itemData, index) - parsePaddingOption('right', options, viewportSize, itemData, index),\n y: viewportSize.y - parsePaddingOption('top', options, viewportSize, itemData, index) - parsePaddingOption('bottom', options, viewportSize, itemData, index)\n };\n}\n\n/** @typedef {import('./slide.js').default} Slide */\n\n/** @typedef {Record} Point */\n\n/** @typedef {'x' | 'y'} Axis */\n\n/**\n * Calculates minimum, maximum and initial (center) bounds of a slide\n */\n\nclass PanBounds {\n /**\n * @param {Slide} slide\n */\n constructor(slide) {\n this.slide = slide;\n this.currZoomLevel = 1;\n this.center =\n /** @type {Point} */\n {\n x: 0,\n y: 0\n };\n this.max =\n /** @type {Point} */\n {\n x: 0,\n y: 0\n };\n this.min =\n /** @type {Point} */\n {\n x: 0,\n y: 0\n };\n }\n /**\n * _getItemBounds\n *\n * @param {number} currZoomLevel\n */\n\n\n update(currZoomLevel) {\n this.currZoomLevel = currZoomLevel;\n\n if (!this.slide.width) {\n this.reset();\n } else {\n this._updateAxis('x');\n\n this._updateAxis('y');\n\n this.slide.pswp.dispatch('calcBounds', {\n slide: this.slide\n });\n }\n }\n /**\n * _calculateItemBoundsForAxis\n *\n * @param {Axis} axis\n */\n\n\n _updateAxis(axis) {\n const {\n pswp\n } = this.slide;\n const elSize = this.slide[axis === 'x' ? 'width' : 'height'] * this.currZoomLevel;\n const paddingProp = axis === 'x' ? 'left' : 'top';\n const padding = parsePaddingOption(paddingProp, pswp.options, pswp.viewportSize, this.slide.data, this.slide.index);\n const panAreaSize = this.slide.panAreaSize[axis]; // Default position of element.\n // By default, it is center of viewport:\n\n this.center[axis] = Math.round((panAreaSize - elSize) / 2) + padding; // maximum pan position\n\n this.max[axis] = elSize > panAreaSize ? Math.round(panAreaSize - elSize) + padding : this.center[axis]; // minimum pan position\n\n this.min[axis] = elSize > panAreaSize ? padding : this.center[axis];\n } // _getZeroBounds\n\n\n reset() {\n this.center.x = 0;\n this.center.y = 0;\n this.max.x = 0;\n this.max.y = 0;\n this.min.x = 0;\n this.min.y = 0;\n }\n /**\n * Correct pan position if it's beyond the bounds\n *\n * @param {Axis} axis x or y\n * @param {number} panOffset\n * @returns {number}\n */\n\n\n correctPan(axis, panOffset) {\n // checkPanBounds\n return clamp(panOffset, this.max[axis], this.min[axis]);\n }\n\n}\n\nconst MAX_IMAGE_WIDTH = 4000;\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\n\n/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\n\n/** @typedef {import('../photoswipe.js').Point} Point */\n\n/** @typedef {import('../slide/slide.js').SlideData} SlideData */\n\n/** @typedef {'fit' | 'fill' | number | ((zoomLevelObject: ZoomLevel) => number)} ZoomLevelOption */\n\n/**\n * Calculates zoom levels for specific slide.\n * Depends on viewport size and image size.\n */\n\nclass ZoomLevel {\n /**\n * @param {PhotoSwipeOptions} options PhotoSwipe options\n * @param {SlideData} itemData Slide data\n * @param {number} index Slide index\n * @param {PhotoSwipe} [pswp] PhotoSwipe instance, can be undefined if not initialized yet\n */\n constructor(options, itemData, index, pswp) {\n this.pswp = pswp;\n this.options = options;\n this.itemData = itemData;\n this.index = index;\n /** @type { Point | null } */\n\n this.panAreaSize = null;\n /** @type { Point | null } */\n\n this.elementSize = null;\n this.fit = 1;\n this.fill = 1;\n this.vFill = 1;\n this.initial = 1;\n this.secondary = 1;\n this.max = 1;\n this.min = 1;\n }\n /**\n * Calculate initial, secondary and maximum zoom level for the specified slide.\n *\n * It should be called when either image or viewport size changes.\n *\n * @param {number} maxWidth\n * @param {number} maxHeight\n * @param {Point} panAreaSize\n */\n\n\n update(maxWidth, maxHeight, panAreaSize) {\n /** @type {Point} */\n const elementSize = {\n x: maxWidth,\n y: maxHeight\n };\n this.elementSize = elementSize;\n this.panAreaSize = panAreaSize;\n const hRatio = panAreaSize.x / elementSize.x;\n const vRatio = panAreaSize.y / elementSize.y;\n this.fit = Math.min(1, hRatio < vRatio ? hRatio : vRatio);\n this.fill = Math.min(1, hRatio > vRatio ? hRatio : vRatio); // zoom.vFill defines zoom level of the image\n // when it has 100% of viewport vertical space (height)\n\n this.vFill = Math.min(1, vRatio);\n this.initial = this._getInitial();\n this.secondary = this._getSecondary();\n this.max = Math.max(this.initial, this.secondary, this._getMax());\n this.min = Math.min(this.fit, this.initial, this.secondary);\n\n if (this.pswp) {\n this.pswp.dispatch('zoomLevelsUpdate', {\n zoomLevels: this,\n slideData: this.itemData\n });\n }\n }\n /**\n * Parses user-defined zoom option.\n *\n * @private\n * @param {'initial' | 'secondary' | 'max'} optionPrefix Zoom level option prefix (initial, secondary, max)\n * @returns { number | undefined }\n */\n\n\n _parseZoomLevelOption(optionPrefix) {\n const optionName =\n /** @type {'initialZoomLevel' | 'secondaryZoomLevel' | 'maxZoomLevel'} */\n optionPrefix + 'ZoomLevel';\n const optionValue = this.options[optionName];\n\n if (!optionValue) {\n return;\n }\n\n if (typeof optionValue === 'function') {\n return optionValue(this);\n }\n\n if (optionValue === 'fill') {\n return this.fill;\n }\n\n if (optionValue === 'fit') {\n return this.fit;\n }\n\n return Number(optionValue);\n }\n /**\n * Get zoom level to which image will be zoomed after double-tap gesture,\n * or when user clicks on zoom icon,\n * or mouse-click on image itself.\n * If you return 1 image will be zoomed to its original size.\n *\n * @private\n * @return {number}\n */\n\n\n _getSecondary() {\n let currZoomLevel = this._parseZoomLevelOption('secondary');\n\n if (currZoomLevel) {\n return currZoomLevel;\n } // 3x of \"fit\" state, but not larger than original\n\n\n currZoomLevel = Math.min(1, this.fit * 3);\n\n if (this.elementSize && currZoomLevel * this.elementSize.x > MAX_IMAGE_WIDTH) {\n currZoomLevel = MAX_IMAGE_WIDTH / this.elementSize.x;\n }\n\n return currZoomLevel;\n }\n /**\n * Get initial image zoom level.\n *\n * @private\n * @return {number}\n */\n\n\n _getInitial() {\n return this._parseZoomLevelOption('initial') || this.fit;\n }\n /**\n * Maximum zoom level when user zooms\n * via zoom/pinch gesture,\n * via cmd/ctrl-wheel or via trackpad.\n *\n * @private\n * @return {number}\n */\n\n\n _getMax() {\n // max zoom level is x4 from \"fit state\",\n // used for zoom gesture and ctrl/trackpad zoom\n return this._parseZoomLevelOption('max') || Math.max(1, this.fit * 4);\n }\n\n}\n\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\n/**\n * Renders and allows to control a single slide\n */\n\nclass Slide {\n /**\n * @param {SlideData} data\n * @param {number} index\n * @param {PhotoSwipe} pswp\n */\n constructor(data, index, pswp) {\n this.data = data;\n this.index = index;\n this.pswp = pswp;\n this.isActive = index === pswp.currIndex;\n this.currentResolution = 0;\n /** @type {Point} */\n\n this.panAreaSize = {\n x: 0,\n y: 0\n };\n /** @type {Point} */\n\n this.pan = {\n x: 0,\n y: 0\n };\n this.isFirstSlide = this.isActive && !pswp.opener.isOpen;\n this.zoomLevels = new ZoomLevel(pswp.options, data, index, pswp);\n this.pswp.dispatch('gettingData', {\n slide: this,\n data: this.data,\n index\n });\n this.content = this.pswp.contentLoader.getContentBySlide(this);\n this.container = createElement('pswp__zoom-wrap', 'div');\n /** @type {HTMLElement | null} */\n\n this.holderElement = null;\n this.currZoomLevel = 1;\n /** @type {number} */\n\n this.width = this.content.width;\n /** @type {number} */\n\n this.height = this.content.height;\n this.heavyAppended = false;\n this.bounds = new PanBounds(this);\n this.prevDisplayedWidth = -1;\n this.prevDisplayedHeight = -1;\n this.pswp.dispatch('slideInit', {\n slide: this\n });\n }\n /**\n * If this slide is active/current/visible\n *\n * @param {boolean} isActive\n */\n\n\n setIsActive(isActive) {\n if (isActive && !this.isActive) {\n // slide just became active\n this.activate();\n } else if (!isActive && this.isActive) {\n // slide just became non-active\n this.deactivate();\n }\n }\n /**\n * Appends slide content to DOM\n *\n * @param {HTMLElement} holderElement\n */\n\n\n append(holderElement) {\n this.holderElement = holderElement;\n this.container.style.transformOrigin = '0 0'; // Slide appended to DOM\n\n if (!this.data) {\n return;\n }\n\n this.calculateSize();\n this.load();\n this.updateContentSize();\n this.appendHeavy();\n this.holderElement.appendChild(this.container);\n this.zoomAndPanToInitial();\n this.pswp.dispatch('firstZoomPan', {\n slide: this\n });\n this.applyCurrentZoomPan();\n this.pswp.dispatch('afterSetContent', {\n slide: this\n });\n\n if (this.isActive) {\n this.activate();\n }\n }\n\n load() {\n this.content.load(false);\n this.pswp.dispatch('slideLoad', {\n slide: this\n });\n }\n /**\n * Append \"heavy\" DOM elements\n *\n * This may depend on a type of slide,\n * but generally these are large images.\n */\n\n\n appendHeavy() {\n const {\n pswp\n } = this;\n const appendHeavyNearby = true; // todo\n // Avoid appending heavy elements during animations\n\n if (this.heavyAppended || !pswp.opener.isOpen || pswp.mainScroll.isShifted() || !this.isActive && !appendHeavyNearby) {\n return;\n }\n\n if (this.pswp.dispatch('appendHeavy', {\n slide: this\n }).defaultPrevented) {\n return;\n }\n\n this.heavyAppended = true;\n this.content.append();\n this.pswp.dispatch('appendHeavyContent', {\n slide: this\n });\n }\n /**\n * Triggered when this slide is active (selected).\n *\n * If it's part of opening/closing transition -\n * activate() will trigger after the transition is ended.\n */\n\n\n activate() {\n this.isActive = true;\n this.appendHeavy();\n this.content.activate();\n this.pswp.dispatch('slideActivate', {\n slide: this\n });\n }\n /**\n * Triggered when this slide becomes inactive.\n *\n * Slide can become inactive only after it was active.\n */\n\n\n deactivate() {\n this.isActive = false;\n this.content.deactivate();\n\n if (this.currZoomLevel !== this.zoomLevels.initial) {\n // allow filtering\n this.calculateSize();\n } // reset zoom level\n\n\n this.currentResolution = 0;\n this.zoomAndPanToInitial();\n this.applyCurrentZoomPan();\n this.updateContentSize();\n this.pswp.dispatch('slideDeactivate', {\n slide: this\n });\n }\n /**\n * The slide should destroy itself, it will never be used again.\n * (unbind all events and destroy internal components)\n */\n\n\n destroy() {\n this.content.hasSlide = false;\n this.content.remove();\n this.container.remove();\n this.pswp.dispatch('slideDestroy', {\n slide: this\n });\n }\n\n resize() {\n if (this.currZoomLevel === this.zoomLevels.initial || !this.isActive) {\n // Keep initial zoom level if it was before the resize,\n // as well as when this slide is not active\n // Reset position and scale to original state\n this.calculateSize();\n this.currentResolution = 0;\n this.zoomAndPanToInitial();\n this.applyCurrentZoomPan();\n this.updateContentSize();\n } else {\n // readjust pan position if it's beyond the bounds\n this.calculateSize();\n this.bounds.update(this.currZoomLevel);\n this.panTo(this.pan.x, this.pan.y);\n }\n }\n /**\n * Apply size to current slide content,\n * based on the current resolution and scale.\n *\n * @param {boolean} [force] if size should be updated even if dimensions weren't changed\n */\n\n\n updateContentSize(force) {\n // Use initial zoom level\n // if resolution is not defined (user didn't zoom yet)\n const scaleMultiplier = this.currentResolution || this.zoomLevels.initial;\n\n if (!scaleMultiplier) {\n return;\n }\n\n const width = Math.round(this.width * scaleMultiplier) || this.pswp.viewportSize.x;\n const height = Math.round(this.height * scaleMultiplier) || this.pswp.viewportSize.y;\n\n if (!this.sizeChanged(width, height) && !force) {\n return;\n }\n\n this.content.setDisplayedSize(width, height);\n }\n /**\n * @param {number} width\n * @param {number} height\n */\n\n\n sizeChanged(width, height) {\n if (width !== this.prevDisplayedWidth || height !== this.prevDisplayedHeight) {\n this.prevDisplayedWidth = width;\n this.prevDisplayedHeight = height;\n return true;\n }\n\n return false;\n }\n /** @returns {HTMLImageElement | HTMLDivElement | null | undefined} */\n\n\n getPlaceholderElement() {\n var _this$content$placeho;\n\n return (_this$content$placeho = this.content.placeholder) === null || _this$content$placeho === void 0 ? void 0 : _this$content$placeho.element;\n }\n /**\n * Zoom current slide image to...\n *\n * @param {number} destZoomLevel Destination zoom level.\n * @param {Point} [centerPoint]\n * Transform origin center point, or false if viewport center should be used.\n * @param {number | false} [transitionDuration] Transition duration, may be set to 0.\n * @param {boolean} [ignoreBounds] Minimum and maximum zoom levels will be ignored.\n */\n\n\n zoomTo(destZoomLevel, centerPoint, transitionDuration, ignoreBounds) {\n const {\n pswp\n } = this;\n\n if (!this.isZoomable() || pswp.mainScroll.isShifted()) {\n return;\n }\n\n pswp.dispatch('beforeZoomTo', {\n destZoomLevel,\n centerPoint,\n transitionDuration\n }); // stop all pan and zoom transitions\n\n pswp.animations.stopAllPan(); // if (!centerPoint) {\n // centerPoint = pswp.getViewportCenterPoint();\n // }\n\n const prevZoomLevel = this.currZoomLevel;\n\n if (!ignoreBounds) {\n destZoomLevel = clamp(destZoomLevel, this.zoomLevels.min, this.zoomLevels.max);\n } // if (transitionDuration === undefined) {\n // transitionDuration = this.pswp.options.zoomAnimationDuration;\n // }\n\n\n this.setZoomLevel(destZoomLevel);\n this.pan.x = this.calculateZoomToPanOffset('x', centerPoint, prevZoomLevel);\n this.pan.y = this.calculateZoomToPanOffset('y', centerPoint, prevZoomLevel);\n roundPoint(this.pan);\n\n const finishTransition = () => {\n this._setResolution(destZoomLevel);\n\n this.applyCurrentZoomPan();\n };\n\n if (!transitionDuration) {\n finishTransition();\n } else {\n pswp.animations.startTransition({\n isPan: true,\n name: 'zoomTo',\n target: this.container,\n transform: this.getCurrentTransform(),\n onComplete: finishTransition,\n duration: transitionDuration,\n easing: pswp.options.easing\n });\n }\n }\n /**\n * @param {Point} [centerPoint]\n */\n\n\n toggleZoom(centerPoint) {\n this.zoomTo(this.currZoomLevel === this.zoomLevels.initial ? this.zoomLevels.secondary : this.zoomLevels.initial, centerPoint, this.pswp.options.zoomAnimationDuration);\n }\n /**\n * Updates zoom level property and recalculates new pan bounds,\n * unlike zoomTo it does not apply transform (use applyCurrentZoomPan)\n *\n * @param {number} currZoomLevel\n */\n\n\n setZoomLevel(currZoomLevel) {\n this.currZoomLevel = currZoomLevel;\n this.bounds.update(this.currZoomLevel);\n }\n /**\n * Get pan position after zoom at a given `point`.\n *\n * Always call setZoomLevel(newZoomLevel) beforehand to recalculate\n * pan bounds according to the new zoom level.\n *\n * @param {'x' | 'y'} axis\n * @param {Point} [point]\n * point based on which zoom is performed, usually refers to the current mouse position,\n * if false - viewport center will be used.\n * @param {number} [prevZoomLevel] Zoom level before new zoom was applied.\n * @returns {number}\n */\n\n\n calculateZoomToPanOffset(axis, point, prevZoomLevel) {\n const totalPanDistance = this.bounds.max[axis] - this.bounds.min[axis];\n\n if (totalPanDistance === 0) {\n return this.bounds.center[axis];\n }\n\n if (!point) {\n point = this.pswp.getViewportCenterPoint();\n }\n\n if (!prevZoomLevel) {\n prevZoomLevel = this.zoomLevels.initial;\n }\n\n const zoomFactor = this.currZoomLevel / prevZoomLevel;\n return this.bounds.correctPan(axis, (this.pan[axis] - point[axis]) * zoomFactor + point[axis]);\n }\n /**\n * Apply pan and keep it within bounds.\n *\n * @param {number} panX\n * @param {number} panY\n */\n\n\n panTo(panX, panY) {\n this.pan.x = this.bounds.correctPan('x', panX);\n this.pan.y = this.bounds.correctPan('y', panY);\n this.applyCurrentZoomPan();\n }\n /**\n * If the slide in the current state can be panned by the user\n * @returns {boolean}\n */\n\n\n isPannable() {\n return Boolean(this.width) && this.currZoomLevel > this.zoomLevels.fit;\n }\n /**\n * If the slide can be zoomed\n * @returns {boolean}\n */\n\n\n isZoomable() {\n return Boolean(this.width) && this.content.isZoomable();\n }\n /**\n * Apply transform and scale based on\n * the current pan position (this.pan) and zoom level (this.currZoomLevel)\n */\n\n\n applyCurrentZoomPan() {\n this._applyZoomTransform(this.pan.x, this.pan.y, this.currZoomLevel);\n\n if (this === this.pswp.currSlide) {\n this.pswp.dispatch('zoomPanUpdate', {\n slide: this\n });\n }\n }\n\n zoomAndPanToInitial() {\n this.currZoomLevel = this.zoomLevels.initial; // pan according to the zoom level\n\n this.bounds.update(this.currZoomLevel);\n equalizePoints(this.pan, this.bounds.center);\n this.pswp.dispatch('initialZoomPan', {\n slide: this\n });\n }\n /**\n * Set translate and scale based on current resolution\n *\n * @param {number} x\n * @param {number} y\n * @param {number} zoom\n * @private\n */\n\n\n _applyZoomTransform(x, y, zoom) {\n zoom /= this.currentResolution || this.zoomLevels.initial;\n setTransform(this.container, x, y, zoom);\n }\n\n calculateSize() {\n const {\n pswp\n } = this;\n equalizePoints(this.panAreaSize, getPanAreaSize(pswp.options, pswp.viewportSize, this.data, this.index));\n this.zoomLevels.update(this.width, this.height, this.panAreaSize);\n pswp.dispatch('calcSlideSize', {\n slide: this\n });\n }\n /** @returns {string} */\n\n\n getCurrentTransform() {\n const scale = this.currZoomLevel / (this.currentResolution || this.zoomLevels.initial);\n return toTransformString(this.pan.x, this.pan.y, scale);\n }\n /**\n * Set resolution and re-render the image.\n *\n * For example, if the real image size is 2000x1500,\n * and resolution is 0.5 - it will be rendered as 1000x750.\n *\n * Image with zoom level 2 and resolution 0.5 is\n * the same as image with zoom level 1 and resolution 1.\n *\n * Used to optimize animations and make\n * sure that browser renders image in the highest quality.\n * Also used by responsive images to load the correct one.\n *\n * @param {number} newResolution\n */\n\n\n _setResolution(newResolution) {\n if (newResolution === this.currentResolution) {\n return;\n }\n\n this.currentResolution = newResolution;\n this.updateContentSize();\n this.pswp.dispatch('resolutionChanged');\n }\n\n}\n\n/** @typedef {import('../photoswipe.js').Point} Point */\n\n/** @typedef {import('./gestures.js').default} Gestures */\n\nconst PAN_END_FRICTION = 0.35;\nconst VERTICAL_DRAG_FRICTION = 0.6; // 1 corresponds to the third of viewport height\n\nconst MIN_RATIO_TO_CLOSE = 0.4; // Minimum speed required to navigate\n// to next or previous slide\n\nconst MIN_NEXT_SLIDE_SPEED = 0.5;\n/**\n * @param {number} initialVelocity\n * @param {number} decelerationRate\n * @returns {number}\n */\n\nfunction project(initialVelocity, decelerationRate) {\n return initialVelocity * decelerationRate / (1 - decelerationRate);\n}\n/**\n * Handles single pointer dragging\n */\n\n\nclass DragHandler {\n /**\n * @param {Gestures} gestures\n */\n constructor(gestures) {\n this.gestures = gestures;\n this.pswp = gestures.pswp;\n /** @type {Point} */\n\n this.startPan = {\n x: 0,\n y: 0\n };\n }\n\n start() {\n if (this.pswp.currSlide) {\n equalizePoints(this.startPan, this.pswp.currSlide.pan);\n }\n\n this.pswp.animations.stopAll();\n }\n\n change() {\n const {\n p1,\n prevP1,\n dragAxis\n } = this.gestures;\n const {\n currSlide\n } = this.pswp;\n\n if (dragAxis === 'y' && this.pswp.options.closeOnVerticalDrag && currSlide && currSlide.currZoomLevel <= currSlide.zoomLevels.fit && !this.gestures.isMultitouch) {\n // Handle vertical drag to close\n const panY = currSlide.pan.y + (p1.y - prevP1.y);\n\n if (!this.pswp.dispatch('verticalDrag', {\n panY\n }).defaultPrevented) {\n this._setPanWithFriction('y', panY, VERTICAL_DRAG_FRICTION);\n\n const bgOpacity = 1 - Math.abs(this._getVerticalDragRatio(currSlide.pan.y));\n this.pswp.applyBgOpacity(bgOpacity);\n currSlide.applyCurrentZoomPan();\n }\n } else {\n const mainScrollChanged = this._panOrMoveMainScroll('x');\n\n if (!mainScrollChanged) {\n this._panOrMoveMainScroll('y');\n\n if (currSlide) {\n roundPoint(currSlide.pan);\n currSlide.applyCurrentZoomPan();\n }\n }\n }\n }\n\n end() {\n const {\n velocity\n } = this.gestures;\n const {\n mainScroll,\n currSlide\n } = this.pswp;\n let indexDiff = 0;\n this.pswp.animations.stopAll(); // Handle main scroll if it's shifted\n\n if (mainScroll.isShifted()) {\n // Position of the main scroll relative to the viewport\n const mainScrollShiftDiff = mainScroll.x - mainScroll.getCurrSlideX(); // Ratio between 0 and 1:\n // 0 - slide is not visible at all,\n // 0.5 - half of the slide is visible\n // 1 - slide is fully visible\n\n const currentSlideVisibilityRatio = mainScrollShiftDiff / this.pswp.viewportSize.x; // Go next slide.\n //\n // - if velocity and its direction is matched,\n // and we see at least tiny part of the next slide\n //\n // - or if we see less than 50% of the current slide\n // and velocity is close to 0\n //\n\n if (velocity.x < -MIN_NEXT_SLIDE_SPEED && currentSlideVisibilityRatio < 0 || velocity.x < 0.1 && currentSlideVisibilityRatio < -0.5) {\n // Go to next slide\n indexDiff = 1;\n velocity.x = Math.min(velocity.x, 0);\n } else if (velocity.x > MIN_NEXT_SLIDE_SPEED && currentSlideVisibilityRatio > 0 || velocity.x > -0.1 && currentSlideVisibilityRatio > 0.5) {\n // Go to prev slide\n indexDiff = -1;\n velocity.x = Math.max(velocity.x, 0);\n }\n\n mainScroll.moveIndexBy(indexDiff, true, velocity.x);\n } // Restore zoom level\n\n\n if (currSlide && currSlide.currZoomLevel > currSlide.zoomLevels.max || this.gestures.isMultitouch) {\n this.gestures.zoomLevels.correctZoomPan(true);\n } else {\n // we run two animations instead of one,\n // as each axis has own pan boundaries and thus different spring function\n // (correctZoomPan does not have this functionality,\n // it animates all properties with single timing function)\n this._finishPanGestureForAxis('x');\n\n this._finishPanGestureForAxis('y');\n }\n }\n /**\n * @private\n * @param {'x' | 'y'} axis\n */\n\n\n _finishPanGestureForAxis(axis) {\n const {\n velocity\n } = this.gestures;\n const {\n currSlide\n } = this.pswp;\n\n if (!currSlide) {\n return;\n }\n\n const {\n pan,\n bounds\n } = currSlide;\n const panPos = pan[axis];\n const restoreBgOpacity = this.pswp.bgOpacity < 1 && axis === 'y'; // 0.995 means - scroll view loses 0.5% of its velocity per millisecond\n // Increasing this number will reduce travel distance\n\n const decelerationRate = 0.995; // 0.99\n // Pan position if there is no bounds\n\n const projectedPosition = panPos + project(velocity[axis], decelerationRate);\n\n if (restoreBgOpacity) {\n const vDragRatio = this._getVerticalDragRatio(panPos);\n\n const projectedVDragRatio = this._getVerticalDragRatio(projectedPosition); // If we are above and moving upwards,\n // or if we are below and moving downwards\n\n\n if (vDragRatio < 0 && projectedVDragRatio < -MIN_RATIO_TO_CLOSE || vDragRatio > 0 && projectedVDragRatio > MIN_RATIO_TO_CLOSE) {\n this.pswp.close();\n return;\n }\n } // Pan position with corrected bounds\n\n\n const correctedPanPosition = bounds.correctPan(axis, projectedPosition); // Exit if pan position should not be changed\n // or if speed it too low\n\n if (panPos === correctedPanPosition) {\n return;\n } // Overshoot if the final position is out of pan bounds\n\n\n const dampingRatio = correctedPanPosition === projectedPosition ? 1 : 0.82;\n const initialBgOpacity = this.pswp.bgOpacity;\n const totalPanDist = correctedPanPosition - panPos;\n this.pswp.animations.startSpring({\n name: 'panGesture' + axis,\n isPan: true,\n start: panPos,\n end: correctedPanPosition,\n velocity: velocity[axis],\n dampingRatio,\n onUpdate: pos => {\n // Animate opacity of background relative to Y pan position of an image\n if (restoreBgOpacity && this.pswp.bgOpacity < 1) {\n // 0 - start of animation, 1 - end of animation\n const animationProgressRatio = 1 - (correctedPanPosition - pos) / totalPanDist; // We clamp opacity to keep it between 0 and 1.\n // As progress ratio can be larger than 1 due to overshoot,\n // and we do not want to bounce opacity.\n\n this.pswp.applyBgOpacity(clamp(initialBgOpacity + (1 - initialBgOpacity) * animationProgressRatio, 0, 1));\n }\n\n pan[axis] = Math.floor(pos);\n currSlide.applyCurrentZoomPan();\n }\n });\n }\n /**\n * Update position of the main scroll,\n * or/and update pan position of the current slide.\n *\n * Should return true if it changes (or can change) main scroll.\n *\n * @private\n * @param {'x' | 'y'} axis\n * @returns {boolean}\n */\n\n\n _panOrMoveMainScroll(axis) {\n const {\n p1,\n dragAxis,\n prevP1,\n isMultitouch\n } = this.gestures;\n const {\n currSlide,\n mainScroll\n } = this.pswp;\n const delta = p1[axis] - prevP1[axis];\n const newMainScrollX = mainScroll.x + delta;\n\n if (!delta || !currSlide) {\n return false;\n } // Always move main scroll if image can not be panned\n\n\n if (axis === 'x' && !currSlide.isPannable() && !isMultitouch) {\n mainScroll.moveTo(newMainScrollX, true);\n return true; // changed main scroll\n }\n\n const {\n bounds\n } = currSlide;\n const newPan = currSlide.pan[axis] + delta;\n\n if (this.pswp.options.allowPanToNext && dragAxis === 'x' && axis === 'x' && !isMultitouch) {\n const currSlideMainScrollX = mainScroll.getCurrSlideX(); // Position of the main scroll relative to the viewport\n\n const mainScrollShiftDiff = mainScroll.x - currSlideMainScrollX;\n const isLeftToRight = delta > 0;\n const isRightToLeft = !isLeftToRight;\n\n if (newPan > bounds.min[axis] && isLeftToRight) {\n // Panning from left to right, beyond the left edge\n // Wether the image was at minimum pan position (or less)\n // when this drag gesture started.\n // Minimum pan position refers to the left edge of the image.\n const wasAtMinPanPosition = bounds.min[axis] <= this.startPan[axis];\n\n if (wasAtMinPanPosition) {\n mainScroll.moveTo(newMainScrollX, true);\n return true;\n } else {\n this._setPanWithFriction(axis, newPan); //currSlide.pan[axis] = newPan;\n\n }\n } else if (newPan < bounds.max[axis] && isRightToLeft) {\n // Paning from right to left, beyond the right edge\n // Maximum pan position refers to the right edge of the image.\n const wasAtMaxPanPosition = this.startPan[axis] <= bounds.max[axis];\n\n if (wasAtMaxPanPosition) {\n mainScroll.moveTo(newMainScrollX, true);\n return true;\n } else {\n this._setPanWithFriction(axis, newPan); //currSlide.pan[axis] = newPan;\n\n }\n } else {\n // If main scroll is shifted\n if (mainScrollShiftDiff !== 0) {\n // If main scroll is shifted right\n if (mainScrollShiftDiff > 0\n /*&& isRightToLeft*/\n ) {\n mainScroll.moveTo(Math.max(newMainScrollX, currSlideMainScrollX), true);\n return true;\n } else if (mainScrollShiftDiff < 0\n /*&& isLeftToRight*/\n ) {\n // Main scroll is shifted left (Position is less than 0 comparing to the viewport 0)\n mainScroll.moveTo(Math.min(newMainScrollX, currSlideMainScrollX), true);\n return true;\n }\n } else {\n // We are within pan bounds, so just pan\n this._setPanWithFriction(axis, newPan);\n }\n }\n } else {\n if (axis === 'y') {\n // Do not pan vertically if main scroll is shifted o\n if (!mainScroll.isShifted() && bounds.min.y !== bounds.max.y) {\n this._setPanWithFriction(axis, newPan);\n }\n } else {\n this._setPanWithFriction(axis, newPan);\n }\n }\n\n return false;\n } // If we move above - the ratio is negative\n // If we move below the ratio is positive\n\n /**\n * Relation between pan Y position and third of viewport height.\n *\n * When we are at initial position (center bounds) - the ratio is 0,\n * if position is shifted upwards - the ratio is negative,\n * if position is shifted downwards - the ratio is positive.\n *\n * @private\n * @param {number} panY The current pan Y position.\n * @returns {number}\n */\n\n\n _getVerticalDragRatio(panY) {\n var _this$pswp$currSlide$, _this$pswp$currSlide;\n\n return (panY - ((_this$pswp$currSlide$ = (_this$pswp$currSlide = this.pswp.currSlide) === null || _this$pswp$currSlide === void 0 ? void 0 : _this$pswp$currSlide.bounds.center.y) !== null && _this$pswp$currSlide$ !== void 0 ? _this$pswp$currSlide$ : 0)) / (this.pswp.viewportSize.y / 3);\n }\n /**\n * Set pan position of the current slide.\n * Apply friction if the position is beyond the pan bounds,\n * or if custom friction is defined.\n *\n * @private\n * @param {'x' | 'y'} axis\n * @param {number} potentialPan\n * @param {number} [customFriction] (0.1 - 1)\n */\n\n\n _setPanWithFriction(axis, potentialPan, customFriction) {\n const {\n currSlide\n } = this.pswp;\n\n if (!currSlide) {\n return;\n }\n\n const {\n pan,\n bounds\n } = currSlide;\n const correctedPan = bounds.correctPan(axis, potentialPan); // If we are out of pan bounds\n\n if (correctedPan !== potentialPan || customFriction) {\n const delta = Math.round(potentialPan - pan[axis]);\n pan[axis] += delta * (customFriction || PAN_END_FRICTION);\n } else {\n pan[axis] = potentialPan;\n }\n }\n\n}\n\n/** @typedef {import('../photoswipe.js').Point} Point */\n\n/** @typedef {import('./gestures.js').default} Gestures */\n\nconst UPPER_ZOOM_FRICTION = 0.05;\nconst LOWER_ZOOM_FRICTION = 0.15;\n/**\n * Get center point between two points\n *\n * @param {Point} p\n * @param {Point} p1\n * @param {Point} p2\n * @returns {Point}\n */\n\nfunction getZoomPointsCenter(p, p1, p2) {\n p.x = (p1.x + p2.x) / 2;\n p.y = (p1.y + p2.y) / 2;\n return p;\n}\n\nclass ZoomHandler {\n /**\n * @param {Gestures} gestures\n */\n constructor(gestures) {\n this.gestures = gestures;\n /**\n * @private\n * @type {Point}\n */\n\n this._startPan = {\n x: 0,\n y: 0\n };\n /**\n * @private\n * @type {Point}\n */\n\n this._startZoomPoint = {\n x: 0,\n y: 0\n };\n /**\n * @private\n * @type {Point}\n */\n\n this._zoomPoint = {\n x: 0,\n y: 0\n };\n /** @private */\n\n this._wasOverFitZoomLevel = false;\n /** @private */\n\n this._startZoomLevel = 1;\n }\n\n start() {\n const {\n currSlide\n } = this.gestures.pswp;\n\n if (currSlide) {\n this._startZoomLevel = currSlide.currZoomLevel;\n equalizePoints(this._startPan, currSlide.pan);\n }\n\n this.gestures.pswp.animations.stopAllPan();\n this._wasOverFitZoomLevel = false;\n }\n\n change() {\n const {\n p1,\n startP1,\n p2,\n startP2,\n pswp\n } = this.gestures;\n const {\n currSlide\n } = pswp;\n\n if (!currSlide) {\n return;\n }\n\n const minZoomLevel = currSlide.zoomLevels.min;\n const maxZoomLevel = currSlide.zoomLevels.max;\n\n if (!currSlide.isZoomable() || pswp.mainScroll.isShifted()) {\n return;\n }\n\n getZoomPointsCenter(this._startZoomPoint, startP1, startP2);\n getZoomPointsCenter(this._zoomPoint, p1, p2);\n\n let currZoomLevel = 1 / getDistanceBetween(startP1, startP2) * getDistanceBetween(p1, p2) * this._startZoomLevel; // slightly over the zoom.fit\n\n\n if (currZoomLevel > currSlide.zoomLevels.initial + currSlide.zoomLevels.initial / 15) {\n this._wasOverFitZoomLevel = true;\n }\n\n if (currZoomLevel < minZoomLevel) {\n if (pswp.options.pinchToClose && !this._wasOverFitZoomLevel && this._startZoomLevel <= currSlide.zoomLevels.initial) {\n // fade out background if zooming out\n const bgOpacity = 1 - (minZoomLevel - currZoomLevel) / (minZoomLevel / 1.2);\n\n if (!pswp.dispatch('pinchClose', {\n bgOpacity\n }).defaultPrevented) {\n pswp.applyBgOpacity(bgOpacity);\n }\n } else {\n // Apply the friction if zoom level is below the min\n currZoomLevel = minZoomLevel - (minZoomLevel - currZoomLevel) * LOWER_ZOOM_FRICTION;\n }\n } else if (currZoomLevel > maxZoomLevel) {\n // Apply the friction if zoom level is above the max\n currZoomLevel = maxZoomLevel + (currZoomLevel - maxZoomLevel) * UPPER_ZOOM_FRICTION;\n }\n\n currSlide.pan.x = this._calculatePanForZoomLevel('x', currZoomLevel);\n currSlide.pan.y = this._calculatePanForZoomLevel('y', currZoomLevel);\n currSlide.setZoomLevel(currZoomLevel);\n currSlide.applyCurrentZoomPan();\n }\n\n end() {\n const {\n pswp\n } = this.gestures;\n const {\n currSlide\n } = pswp;\n\n if ((!currSlide || currSlide.currZoomLevel < currSlide.zoomLevels.initial) && !this._wasOverFitZoomLevel && pswp.options.pinchToClose) {\n pswp.close();\n } else {\n this.correctZoomPan();\n }\n }\n /**\n * @private\n * @param {'x' | 'y'} axis\n * @param {number} currZoomLevel\n * @returns {number}\n */\n\n\n _calculatePanForZoomLevel(axis, currZoomLevel) {\n const zoomFactor = currZoomLevel / this._startZoomLevel;\n return this._zoomPoint[axis] - (this._startZoomPoint[axis] - this._startPan[axis]) * zoomFactor;\n }\n /**\n * Correct currZoomLevel and pan if they are\n * beyond minimum or maximum values.\n * With animation.\n *\n * @param {boolean} [ignoreGesture]\n * Wether gesture coordinates should be ignored when calculating destination pan position.\n */\n\n\n correctZoomPan(ignoreGesture) {\n const {\n pswp\n } = this.gestures;\n const {\n currSlide\n } = pswp;\n\n if (!(currSlide !== null && currSlide !== void 0 && currSlide.isZoomable())) {\n return;\n }\n\n if (this._zoomPoint.x === 0) {\n ignoreGesture = true;\n }\n\n const prevZoomLevel = currSlide.currZoomLevel;\n /** @type {number} */\n\n let destinationZoomLevel;\n let currZoomLevelNeedsChange = true;\n\n if (prevZoomLevel < currSlide.zoomLevels.initial) {\n destinationZoomLevel = currSlide.zoomLevels.initial; // zoom to min\n } else if (prevZoomLevel > currSlide.zoomLevels.max) {\n destinationZoomLevel = currSlide.zoomLevels.max; // zoom to max\n } else {\n currZoomLevelNeedsChange = false;\n destinationZoomLevel = prevZoomLevel;\n }\n\n const initialBgOpacity = pswp.bgOpacity;\n const restoreBgOpacity = pswp.bgOpacity < 1;\n const initialPan = equalizePoints({\n x: 0,\n y: 0\n }, currSlide.pan);\n let destinationPan = equalizePoints({\n x: 0,\n y: 0\n }, initialPan);\n\n if (ignoreGesture) {\n this._zoomPoint.x = 0;\n this._zoomPoint.y = 0;\n this._startZoomPoint.x = 0;\n this._startZoomPoint.y = 0;\n this._startZoomLevel = prevZoomLevel;\n equalizePoints(this._startPan, initialPan);\n }\n\n if (currZoomLevelNeedsChange) {\n destinationPan = {\n x: this._calculatePanForZoomLevel('x', destinationZoomLevel),\n y: this._calculatePanForZoomLevel('y', destinationZoomLevel)\n };\n } // set zoom level, so pan bounds are updated according to it\n\n\n currSlide.setZoomLevel(destinationZoomLevel);\n destinationPan = {\n x: currSlide.bounds.correctPan('x', destinationPan.x),\n y: currSlide.bounds.correctPan('y', destinationPan.y)\n }; // return zoom level and its bounds to initial\n\n currSlide.setZoomLevel(prevZoomLevel);\n const panNeedsChange = !pointsEqual(destinationPan, initialPan);\n\n if (!panNeedsChange && !currZoomLevelNeedsChange && !restoreBgOpacity) {\n // update resolution after gesture\n currSlide._setResolution(destinationZoomLevel);\n\n currSlide.applyCurrentZoomPan(); // nothing to animate\n\n return;\n }\n\n pswp.animations.stopAllPan();\n pswp.animations.startSpring({\n isPan: true,\n start: 0,\n end: 1000,\n velocity: 0,\n dampingRatio: 1,\n naturalFrequency: 40,\n onUpdate: now => {\n now /= 1000; // 0 - start, 1 - end\n\n if (panNeedsChange || currZoomLevelNeedsChange) {\n if (panNeedsChange) {\n currSlide.pan.x = initialPan.x + (destinationPan.x - initialPan.x) * now;\n currSlide.pan.y = initialPan.y + (destinationPan.y - initialPan.y) * now;\n }\n\n if (currZoomLevelNeedsChange) {\n const newZoomLevel = prevZoomLevel + (destinationZoomLevel - prevZoomLevel) * now;\n currSlide.setZoomLevel(newZoomLevel);\n }\n\n currSlide.applyCurrentZoomPan();\n } // Restore background opacity\n\n\n if (restoreBgOpacity && pswp.bgOpacity < 1) {\n // We clamp opacity to keep it between 0 and 1.\n // As progress ratio can be larger than 1 due to overshoot,\n // and we do not want to bounce opacity.\n pswp.applyBgOpacity(clamp(initialBgOpacity + (1 - initialBgOpacity) * now, 0, 1));\n }\n },\n onComplete: () => {\n // update resolution after transition ends\n currSlide._setResolution(destinationZoomLevel);\n\n currSlide.applyCurrentZoomPan();\n }\n });\n }\n\n}\n\n/**\n * @template {string} T\n * @template {string} P\n * @typedef {import('../types.js').AddPostfix} AddPostfix\n */\n\n/** @typedef {import('./gestures.js').default} Gestures */\n\n/** @typedef {import('../photoswipe.js').Point} Point */\n\n/** @typedef {'imageClick' | 'bgClick' | 'tap' | 'doubleTap'} Actions */\n\n/**\n * Whether the tap was performed on the main slide\n * (rather than controls or caption).\n *\n * @param {PointerEvent} event\n * @returns {boolean}\n */\nfunction didTapOnMainContent(event) {\n return !!\n /** @type {HTMLElement} */\n event.target.closest('.pswp__container');\n}\n/**\n * Tap, double-tap handler.\n */\n\n\nclass TapHandler {\n /**\n * @param {Gestures} gestures\n */\n constructor(gestures) {\n this.gestures = gestures;\n }\n /**\n * @param {Point} point\n * @param {PointerEvent} originalEvent\n */\n\n\n click(point, originalEvent) {\n const targetClassList =\n /** @type {HTMLElement} */\n originalEvent.target.classList;\n const isImageClick = targetClassList.contains('pswp__img');\n const isBackgroundClick = targetClassList.contains('pswp__item') || targetClassList.contains('pswp__zoom-wrap');\n\n if (isImageClick) {\n this._doClickOrTapAction('imageClick', point, originalEvent);\n } else if (isBackgroundClick) {\n this._doClickOrTapAction('bgClick', point, originalEvent);\n }\n }\n /**\n * @param {Point} point\n * @param {PointerEvent} originalEvent\n */\n\n\n tap(point, originalEvent) {\n if (didTapOnMainContent(originalEvent)) {\n this._doClickOrTapAction('tap', point, originalEvent);\n }\n }\n /**\n * @param {Point} point\n * @param {PointerEvent} originalEvent\n */\n\n\n doubleTap(point, originalEvent) {\n if (didTapOnMainContent(originalEvent)) {\n this._doClickOrTapAction('doubleTap', point, originalEvent);\n }\n }\n /**\n * @private\n * @param {Actions} actionName\n * @param {Point} point\n * @param {PointerEvent} originalEvent\n */\n\n\n _doClickOrTapAction(actionName, point, originalEvent) {\n var _this$gestures$pswp$e;\n\n const {\n pswp\n } = this.gestures;\n const {\n currSlide\n } = pswp;\n const actionFullName =\n /** @type {AddPostfix} */\n actionName + 'Action';\n const optionValue = pswp.options[actionFullName];\n\n if (pswp.dispatch(actionFullName, {\n point,\n originalEvent\n }).defaultPrevented) {\n return;\n }\n\n if (typeof optionValue === 'function') {\n optionValue.call(pswp, point, originalEvent);\n return;\n }\n\n switch (optionValue) {\n case 'close':\n case 'next':\n pswp[optionValue]();\n break;\n\n case 'zoom':\n currSlide === null || currSlide === void 0 || currSlide.toggleZoom(point);\n break;\n\n case 'zoom-or-close':\n // by default click zooms current image,\n // if it can not be zoomed - gallery will be closed\n if (currSlide !== null && currSlide !== void 0 && currSlide.isZoomable() && currSlide.zoomLevels.secondary !== currSlide.zoomLevels.initial) {\n currSlide.toggleZoom(point);\n } else if (pswp.options.clickToCloseNonZoomable) {\n pswp.close();\n }\n\n break;\n\n case 'toggle-controls':\n (_this$gestures$pswp$e = this.gestures.pswp.element) === null || _this$gestures$pswp$e === void 0 || _this$gestures$pswp$e.classList.toggle('pswp--ui-visible'); // if (_controlsVisible) {\n // _ui.hideControls();\n // } else {\n // _ui.showControls();\n // }\n\n break;\n }\n }\n\n}\n\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\n\n/** @typedef {import('../photoswipe.js').Point} Point */\n// How far should user should drag\n// until we can determine that the gesture is swipe and its direction\n\nconst AXIS_SWIPE_HYSTERISIS = 10; //const PAN_END_FRICTION = 0.35;\n\nconst DOUBLE_TAP_DELAY = 300; // ms\n\nconst MIN_TAP_DISTANCE = 25; // px\n\n/**\n * Gestures class bind touch, pointer or mouse events\n * and emits drag to drag-handler and zoom events zoom-handler.\n *\n * Drag and zoom events are emited in requestAnimationFrame,\n * and only when one of pointers was actually changed.\n */\n\nclass Gestures {\n /**\n * @param {PhotoSwipe} pswp\n */\n constructor(pswp) {\n this.pswp = pswp;\n /** @type {'x' | 'y' | null} */\n\n this.dragAxis = null; // point objects are defined once and reused\n // PhotoSwipe keeps track only of two pointers, others are ignored\n\n /** @type {Point} */\n\n this.p1 = {\n x: 0,\n y: 0\n }; // the first pressed pointer\n\n /** @type {Point} */\n\n this.p2 = {\n x: 0,\n y: 0\n }; // the second pressed pointer\n\n /** @type {Point} */\n\n this.prevP1 = {\n x: 0,\n y: 0\n };\n /** @type {Point} */\n\n this.prevP2 = {\n x: 0,\n y: 0\n };\n /** @type {Point} */\n\n this.startP1 = {\n x: 0,\n y: 0\n };\n /** @type {Point} */\n\n this.startP2 = {\n x: 0,\n y: 0\n };\n /** @type {Point} */\n\n this.velocity = {\n x: 0,\n y: 0\n };\n /** @type {Point}\n * @private\n */\n\n this._lastStartP1 = {\n x: 0,\n y: 0\n };\n /** @type {Point}\n * @private\n */\n\n this._intervalP1 = {\n x: 0,\n y: 0\n };\n /** @private */\n\n this._numActivePoints = 0;\n /** @type {Point[]}\n * @private\n */\n\n this._ongoingPointers = [];\n /** @private */\n\n this._touchEventEnabled = 'ontouchstart' in window;\n /** @private */\n\n this._pointerEventEnabled = !!window.PointerEvent;\n this.supportsTouch = this._touchEventEnabled || this._pointerEventEnabled && navigator.maxTouchPoints > 1;\n /** @private */\n\n this._numActivePoints = 0;\n /** @private */\n\n this._intervalTime = 0;\n /** @private */\n\n this._velocityCalculated = false;\n this.isMultitouch = false;\n this.isDragging = false;\n this.isZooming = false;\n /** @type {number | null} */\n\n this.raf = null;\n /** @type {NodeJS.Timeout | null}\n * @private\n */\n\n this._tapTimer = null;\n\n if (!this.supportsTouch) {\n // disable pan to next slide for non-touch devices\n pswp.options.allowPanToNext = false;\n }\n\n this.drag = new DragHandler(this);\n this.zoomLevels = new ZoomHandler(this);\n this.tapHandler = new TapHandler(this);\n pswp.on('bindEvents', () => {\n pswp.events.add(pswp.scrollWrap, 'click',\n /** @type EventListener */\n this._onClick.bind(this));\n\n if (this._pointerEventEnabled) {\n this._bindEvents('pointer', 'down', 'up', 'cancel');\n } else if (this._touchEventEnabled) {\n this._bindEvents('touch', 'start', 'end', 'cancel'); // In previous versions we also bound mouse event here,\n // in case device supports both touch and mouse events,\n // but newer versions of browsers now support PointerEvent.\n // on iOS10 if you bind touchmove/end after touchstart,\n // and you don't preventDefault touchstart (which PhotoSwipe does),\n // preventDefault will have no effect on touchmove and touchend.\n // Unless you bind it previously.\n\n\n if (pswp.scrollWrap) {\n pswp.scrollWrap.ontouchmove = () => {};\n\n pswp.scrollWrap.ontouchend = () => {};\n }\n } else {\n this._bindEvents('mouse', 'down', 'up');\n }\n });\n }\n /**\n * @private\n * @param {'mouse' | 'touch' | 'pointer'} pref\n * @param {'down' | 'start'} down\n * @param {'up' | 'end'} up\n * @param {'cancel'} [cancel]\n */\n\n\n _bindEvents(pref, down, up, cancel) {\n const {\n pswp\n } = this;\n const {\n events\n } = pswp;\n const cancelEvent = cancel ? pref + cancel : '';\n events.add(pswp.scrollWrap, pref + down,\n /** @type EventListener */\n this.onPointerDown.bind(this));\n events.add(window, pref + 'move',\n /** @type EventListener */\n this.onPointerMove.bind(this));\n events.add(window, pref + up,\n /** @type EventListener */\n this.onPointerUp.bind(this));\n\n if (cancelEvent) {\n events.add(pswp.scrollWrap, cancelEvent,\n /** @type EventListener */\n this.onPointerUp.bind(this));\n }\n }\n /**\n * @param {PointerEvent} e\n */\n\n\n onPointerDown(e) {\n // We do not call preventDefault for touch events\n // to allow browser to show native dialog on longpress\n // (the one that allows to save image or open it in new tab).\n //\n // Desktop Safari allows to drag images when preventDefault isn't called on mousedown,\n // even though preventDefault IS called on mousemove. That's why we preventDefault mousedown.\n const isMousePointer = e.type === 'mousedown' || e.pointerType === 'mouse'; // Allow dragging only via left mouse button.\n // http://www.quirksmode.org/js/events_properties.html\n // https://developer.mozilla.org/en-US/docs/Web/API/event.button\n\n if (isMousePointer && e.button > 0) {\n return;\n }\n\n const {\n pswp\n } = this; // if PhotoSwipe is opening or closing\n\n if (!pswp.opener.isOpen) {\n e.preventDefault();\n return;\n }\n\n if (pswp.dispatch('pointerDown', {\n originalEvent: e\n }).defaultPrevented) {\n return;\n }\n\n if (isMousePointer) {\n pswp.mouseDetected(); // preventDefault mouse event to prevent\n // browser image drag feature\n\n this._preventPointerEventBehaviour(e, 'down');\n }\n\n pswp.animations.stopAll();\n\n this._updatePoints(e, 'down');\n\n if (this._numActivePoints === 1) {\n this.dragAxis = null; // we need to store initial point to determine the main axis,\n // drag is activated only after the axis is determined\n\n equalizePoints(this.startP1, this.p1);\n }\n\n if (this._numActivePoints > 1) {\n // Tap or double tap should not trigger if more than one pointer\n this._clearTapTimer();\n\n this.isMultitouch = true;\n } else {\n this.isMultitouch = false;\n }\n }\n /**\n * @param {PointerEvent} e\n */\n\n\n onPointerMove(e) {\n this._preventPointerEventBehaviour(e, 'move');\n\n if (!this._numActivePoints) {\n return;\n }\n\n this._updatePoints(e, 'move');\n\n if (this.pswp.dispatch('pointerMove', {\n originalEvent: e\n }).defaultPrevented) {\n return;\n }\n\n if (this._numActivePoints === 1 && !this.isDragging) {\n if (!this.dragAxis) {\n this._calculateDragDirection();\n } // Drag axis was detected, emit drag.start\n\n\n if (this.dragAxis && !this.isDragging) {\n if (this.isZooming) {\n this.isZooming = false;\n this.zoomLevels.end();\n }\n\n this.isDragging = true;\n\n this._clearTapTimer(); // Tap can not trigger after drag\n // Adjust starting point\n\n\n this._updateStartPoints();\n\n this._intervalTime = Date.now(); //this._startTime = this._intervalTime;\n\n this._velocityCalculated = false;\n equalizePoints(this._intervalP1, this.p1);\n this.velocity.x = 0;\n this.velocity.y = 0;\n this.drag.start();\n\n this._rafStopLoop();\n\n this._rafRenderLoop();\n }\n } else if (this._numActivePoints > 1 && !this.isZooming) {\n this._finishDrag();\n\n this.isZooming = true; // Adjust starting points\n\n this._updateStartPoints();\n\n this.zoomLevels.start();\n\n this._rafStopLoop();\n\n this._rafRenderLoop();\n }\n }\n /**\n * @private\n */\n\n\n _finishDrag() {\n if (this.isDragging) {\n this.isDragging = false; // Try to calculate velocity,\n // if it wasn't calculated yet in drag.change\n\n if (!this._velocityCalculated) {\n this._updateVelocity(true);\n }\n\n this.drag.end();\n this.dragAxis = null;\n }\n }\n /**\n * @param {PointerEvent} e\n */\n\n\n onPointerUp(e) {\n if (!this._numActivePoints) {\n return;\n }\n\n this._updatePoints(e, 'up');\n\n if (this.pswp.dispatch('pointerUp', {\n originalEvent: e\n }).defaultPrevented) {\n return;\n }\n\n if (this._numActivePoints === 0) {\n this._rafStopLoop();\n\n if (this.isDragging) {\n this._finishDrag();\n } else if (!this.isZooming && !this.isMultitouch) {\n //this.zoomLevels.correctZoomPan();\n this._finishTap(e);\n }\n }\n\n if (this._numActivePoints < 2 && this.isZooming) {\n this.isZooming = false;\n this.zoomLevels.end();\n\n if (this._numActivePoints === 1) {\n // Since we have 1 point left, we need to reinitiate drag\n this.dragAxis = null;\n\n this._updateStartPoints();\n }\n }\n }\n /**\n * @private\n */\n\n\n _rafRenderLoop() {\n if (this.isDragging || this.isZooming) {\n this._updateVelocity();\n\n if (this.isDragging) {\n // make sure that pointer moved since the last update\n if (!pointsEqual(this.p1, this.prevP1)) {\n this.drag.change();\n }\n } else\n /* if (this.isZooming) */\n {\n if (!pointsEqual(this.p1, this.prevP1) || !pointsEqual(this.p2, this.prevP2)) {\n this.zoomLevels.change();\n }\n }\n\n this._updatePrevPoints();\n\n this.raf = requestAnimationFrame(this._rafRenderLoop.bind(this));\n }\n }\n /**\n * Update velocity at 50ms interval\n *\n * @private\n * @param {boolean} [force]\n */\n\n\n _updateVelocity(force) {\n const time = Date.now();\n const duration = time - this._intervalTime;\n\n if (duration < 50 && !force) {\n return;\n }\n\n this.velocity.x = this._getVelocity('x', duration);\n this.velocity.y = this._getVelocity('y', duration);\n this._intervalTime = time;\n equalizePoints(this._intervalP1, this.p1);\n this._velocityCalculated = true;\n }\n /**\n * @private\n * @param {PointerEvent} e\n */\n\n\n _finishTap(e) {\n const {\n mainScroll\n } = this.pswp; // Do not trigger tap events if main scroll is shifted\n\n if (mainScroll.isShifted()) {\n // restore main scroll position\n // (usually happens if stopped in the middle of animation)\n mainScroll.moveIndexBy(0, true);\n return;\n } // Do not trigger tap for touchcancel or pointercancel\n\n\n if (e.type.indexOf('cancel') > 0) {\n return;\n } // Trigger click instead of tap for mouse events\n\n\n if (e.type === 'mouseup' || e.pointerType === 'mouse') {\n this.tapHandler.click(this.startP1, e);\n return;\n } // Disable delay if there is no doubleTapAction\n\n\n const tapDelay = this.pswp.options.doubleTapAction ? DOUBLE_TAP_DELAY : 0; // If tapTimer is defined - we tapped recently,\n // check if the current tap is close to the previous one,\n // if yes - trigger double tap\n\n if (this._tapTimer) {\n this._clearTapTimer(); // Check if two taps were more or less on the same place\n\n\n if (getDistanceBetween(this._lastStartP1, this.startP1) < MIN_TAP_DISTANCE) {\n this.tapHandler.doubleTap(this.startP1, e);\n }\n } else {\n equalizePoints(this._lastStartP1, this.startP1);\n this._tapTimer = setTimeout(() => {\n this.tapHandler.tap(this.startP1, e);\n\n this._clearTapTimer();\n }, tapDelay);\n }\n }\n /**\n * @private\n */\n\n\n _clearTapTimer() {\n if (this._tapTimer) {\n clearTimeout(this._tapTimer);\n this._tapTimer = null;\n }\n }\n /**\n * Get velocity for axis\n *\n * @private\n * @param {'x' | 'y'} axis\n * @param {number} duration\n * @returns {number}\n */\n\n\n _getVelocity(axis, duration) {\n // displacement is like distance, but can be negative.\n const displacement = this.p1[axis] - this._intervalP1[axis];\n\n if (Math.abs(displacement) > 1 && duration > 5) {\n return displacement / duration;\n }\n\n return 0;\n }\n /**\n * @private\n */\n\n\n _rafStopLoop() {\n if (this.raf) {\n cancelAnimationFrame(this.raf);\n this.raf = null;\n }\n }\n /**\n * @private\n * @param {PointerEvent} e\n * @param {'up' | 'down' | 'move'} pointerType Normalized pointer type\n */\n\n\n _preventPointerEventBehaviour(e, pointerType) {\n const preventPointerEvent = this.pswp.applyFilters('preventPointerEvent', true, e, pointerType);\n\n if (preventPointerEvent) {\n e.preventDefault();\n }\n }\n /**\n * Parses and normalizes points from the touch, mouse or pointer event.\n * Updates p1 and p2.\n *\n * @private\n * @param {PointerEvent | TouchEvent} e\n * @param {'up' | 'down' | 'move'} pointerType Normalized pointer type\n */\n\n\n _updatePoints(e, pointerType) {\n if (this._pointerEventEnabled) {\n const pointerEvent =\n /** @type {PointerEvent} */\n e; // Try to find the current pointer in ongoing pointers by its ID\n\n const pointerIndex = this._ongoingPointers.findIndex(ongoingPointer => {\n return ongoingPointer.id === pointerEvent.pointerId;\n });\n\n if (pointerType === 'up' && pointerIndex > -1) {\n // release the pointer - remove it from ongoing\n this._ongoingPointers.splice(pointerIndex, 1);\n } else if (pointerType === 'down' && pointerIndex === -1) {\n // add new pointer\n this._ongoingPointers.push(this._convertEventPosToPoint(pointerEvent, {\n x: 0,\n y: 0\n }));\n } else if (pointerIndex > -1) {\n // update existing pointer\n this._convertEventPosToPoint(pointerEvent, this._ongoingPointers[pointerIndex]);\n }\n\n this._numActivePoints = this._ongoingPointers.length; // update points that PhotoSwipe uses\n // to calculate position and scale\n\n if (this._numActivePoints > 0) {\n equalizePoints(this.p1, this._ongoingPointers[0]);\n }\n\n if (this._numActivePoints > 1) {\n equalizePoints(this.p2, this._ongoingPointers[1]);\n }\n } else {\n const touchEvent =\n /** @type {TouchEvent} */\n e;\n this._numActivePoints = 0;\n\n if (touchEvent.type.indexOf('touch') > -1) {\n // Touch Event\n // https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent\n if (touchEvent.touches && touchEvent.touches.length > 0) {\n this._convertEventPosToPoint(touchEvent.touches[0], this.p1);\n\n this._numActivePoints++;\n\n if (touchEvent.touches.length > 1) {\n this._convertEventPosToPoint(touchEvent.touches[1], this.p2);\n\n this._numActivePoints++;\n }\n }\n } else {\n // Mouse Event\n this._convertEventPosToPoint(\n /** @type {PointerEvent} */\n e, this.p1);\n\n if (pointerType === 'up') {\n // clear all points on mouseup\n this._numActivePoints = 0;\n } else {\n this._numActivePoints++;\n }\n }\n }\n }\n /** update points that were used during previous rAF tick\n * @private\n */\n\n\n _updatePrevPoints() {\n equalizePoints(this.prevP1, this.p1);\n equalizePoints(this.prevP2, this.p2);\n }\n /** update points at the start of gesture\n * @private\n */\n\n\n _updateStartPoints() {\n equalizePoints(this.startP1, this.p1);\n equalizePoints(this.startP2, this.p2);\n\n this._updatePrevPoints();\n }\n /** @private */\n\n\n _calculateDragDirection() {\n if (this.pswp.mainScroll.isShifted()) {\n // if main scroll position is shifted – direction is always horizontal\n this.dragAxis = 'x';\n } else {\n // calculate delta of the last touchmove tick\n const diff = Math.abs(this.p1.x - this.startP1.x) - Math.abs(this.p1.y - this.startP1.y);\n\n if (diff !== 0) {\n // check if pointer was shifted horizontally or vertically\n const axisToCheck = diff > 0 ? 'x' : 'y';\n\n if (Math.abs(this.p1[axisToCheck] - this.startP1[axisToCheck]) >= AXIS_SWIPE_HYSTERISIS) {\n this.dragAxis = axisToCheck;\n }\n }\n }\n }\n /**\n * Converts touch, pointer or mouse event\n * to PhotoSwipe point.\n *\n * @private\n * @param {Touch | PointerEvent} e\n * @param {Point} p\n * @returns {Point}\n */\n\n\n _convertEventPosToPoint(e, p) {\n p.x = e.pageX - this.pswp.offset.x;\n p.y = e.pageY - this.pswp.offset.y;\n\n if ('pointerId' in e) {\n p.id = e.pointerId;\n } else if (e.identifier !== undefined) {\n p.id = e.identifier;\n }\n\n return p;\n }\n /**\n * @private\n * @param {PointerEvent} e\n */\n\n\n _onClick(e) {\n // Do not allow click event to pass through after drag\n if (this.pswp.mainScroll.isShifted()) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n}\n\n/** @typedef {import('./photoswipe.js').default} PhotoSwipe */\n\n/** @typedef {import('./slide/slide.js').default} Slide */\n\n/** @typedef {{ el: HTMLDivElement; slide?: Slide }} ItemHolder */\n\nconst MAIN_SCROLL_END_FRICTION = 0.35; // const MIN_SWIPE_TRANSITION_DURATION = 250;\n// const MAX_SWIPE_TRABSITION_DURATION = 500;\n// const DEFAULT_SWIPE_TRANSITION_DURATION = 333;\n\n/**\n * Handles movement of the main scrolling container\n * (for example, it repositions when user swipes left or right).\n *\n * Also stores its state.\n */\n\nclass MainScroll {\n /**\n * @param {PhotoSwipe} pswp\n */\n constructor(pswp) {\n this.pswp = pswp;\n this.x = 0;\n this.slideWidth = 0;\n /** @private */\n\n this._currPositionIndex = 0;\n /** @private */\n\n this._prevPositionIndex = 0;\n /** @private */\n\n this._containerShiftIndex = -1;\n /** @type {ItemHolder[]} */\n\n this.itemHolders = [];\n }\n /**\n * Position the scroller and slide containers\n * according to viewport size.\n *\n * @param {boolean} [resizeSlides] Whether slides content should resized\n */\n\n\n resize(resizeSlides) {\n const {\n pswp\n } = this;\n const newSlideWidth = Math.round(pswp.viewportSize.x + pswp.viewportSize.x * pswp.options.spacing); // Mobile browsers might trigger a resize event during a gesture.\n // (due to toolbar appearing or hiding).\n // Avoid re-adjusting main scroll position if width wasn't changed\n\n const slideWidthChanged = newSlideWidth !== this.slideWidth;\n\n if (slideWidthChanged) {\n this.slideWidth = newSlideWidth;\n this.moveTo(this.getCurrSlideX());\n }\n\n this.itemHolders.forEach((itemHolder, index) => {\n if (slideWidthChanged) {\n setTransform(itemHolder.el, (index + this._containerShiftIndex) * this.slideWidth);\n }\n\n if (resizeSlides && itemHolder.slide) {\n itemHolder.slide.resize();\n }\n });\n }\n /**\n * Reset X position of the main scroller to zero\n */\n\n\n resetPosition() {\n // Position on the main scroller (offset)\n // it is independent from slide index\n this._currPositionIndex = 0;\n this._prevPositionIndex = 0; // This will force recalculation of size on next resize()\n\n this.slideWidth = 0; // _containerShiftIndex*viewportSize will give you amount of transform of the current slide\n\n this._containerShiftIndex = -1;\n }\n /**\n * Create and append array of three items\n * that hold data about slides in DOM\n */\n\n\n appendHolders() {\n this.itemHolders = []; // append our three slide holders -\n // previous, current, and next\n\n for (let i = 0; i < 3; i++) {\n const el = createElement('pswp__item', 'div', this.pswp.container);\n el.setAttribute('role', 'group');\n el.setAttribute('aria-roledescription', 'slide');\n el.setAttribute('aria-hidden', 'true'); // hide nearby item holders until initial zoom animation finishes (to avoid extra Paints)\n\n el.style.display = i === 1 ? 'block' : 'none';\n this.itemHolders.push({\n el //index: -1\n\n });\n }\n }\n /**\n * Whether the main scroll can be horizontally swiped to the next or previous slide.\n * @returns {boolean}\n */\n\n\n canBeSwiped() {\n return this.pswp.getNumItems() > 1;\n }\n /**\n * Move main scroll by X amount of slides.\n * For example:\n * `-1` will move to the previous slide,\n * `0` will reset the scroll position of the current slide,\n * `3` will move three slides forward\n *\n * If loop option is enabled - index will be automatically looped too,\n * (for example `-1` will move to the last slide of the gallery).\n *\n * @param {number} diff\n * @param {boolean} [animate]\n * @param {number} [velocityX]\n * @returns {boolean} whether index was changed or not\n */\n\n\n moveIndexBy(diff, animate, velocityX) {\n const {\n pswp\n } = this;\n let newIndex = pswp.potentialIndex + diff;\n const numSlides = pswp.getNumItems();\n\n if (pswp.canLoop()) {\n newIndex = pswp.getLoopedIndex(newIndex);\n const distance = (diff + numSlides) % numSlides;\n\n if (distance <= numSlides / 2) {\n // go forward\n diff = distance;\n } else {\n // go backwards\n diff = distance - numSlides;\n }\n } else {\n if (newIndex < 0) {\n newIndex = 0;\n } else if (newIndex >= numSlides) {\n newIndex = numSlides - 1;\n }\n\n diff = newIndex - pswp.potentialIndex;\n }\n\n pswp.potentialIndex = newIndex;\n this._currPositionIndex -= diff;\n pswp.animations.stopMainScroll();\n const destinationX = this.getCurrSlideX();\n\n if (!animate) {\n this.moveTo(destinationX);\n this.updateCurrItem();\n } else {\n pswp.animations.startSpring({\n isMainScroll: true,\n start: this.x,\n end: destinationX,\n velocity: velocityX || 0,\n naturalFrequency: 30,\n dampingRatio: 1,\n //0.7,\n onUpdate: x => {\n this.moveTo(x);\n },\n onComplete: () => {\n this.updateCurrItem();\n pswp.appendHeavy();\n }\n });\n let currDiff = pswp.potentialIndex - pswp.currIndex;\n\n if (pswp.canLoop()) {\n const currDistance = (currDiff + numSlides) % numSlides;\n\n if (currDistance <= numSlides / 2) {\n // go forward\n currDiff = currDistance;\n } else {\n // go backwards\n currDiff = currDistance - numSlides;\n }\n } // Force-append new slides during transition\n // if difference between slides is more than 1\n\n\n if (Math.abs(currDiff) > 1) {\n this.updateCurrItem();\n }\n }\n\n return Boolean(diff);\n }\n /**\n * X position of the main scroll for the current slide\n * (ignores position during dragging)\n * @returns {number}\n */\n\n\n getCurrSlideX() {\n return this.slideWidth * this._currPositionIndex;\n }\n /**\n * Whether scroll position is shifted.\n * For example, it will return true if the scroll is being dragged or animated.\n * @returns {boolean}\n */\n\n\n isShifted() {\n return this.x !== this.getCurrSlideX();\n }\n /**\n * Update slides X positions and set their content\n */\n\n\n updateCurrItem() {\n var _this$itemHolders$;\n\n const {\n pswp\n } = this;\n const positionDifference = this._prevPositionIndex - this._currPositionIndex;\n\n if (!positionDifference) {\n return;\n }\n\n this._prevPositionIndex = this._currPositionIndex;\n pswp.currIndex = pswp.potentialIndex;\n let diffAbs = Math.abs(positionDifference);\n /** @type {ItemHolder | undefined} */\n\n let tempHolder;\n\n if (diffAbs >= 3) {\n this._containerShiftIndex += positionDifference + (positionDifference > 0 ? -3 : 3);\n diffAbs = 3;\n }\n\n for (let i = 0; i < diffAbs; i++) {\n if (positionDifference > 0) {\n tempHolder = this.itemHolders.shift();\n\n if (tempHolder) {\n this.itemHolders[2] = tempHolder; // move first to last\n\n this._containerShiftIndex++;\n setTransform(tempHolder.el, (this._containerShiftIndex + 2) * this.slideWidth);\n pswp.setContent(tempHolder, pswp.currIndex - diffAbs + i + 2);\n }\n } else {\n tempHolder = this.itemHolders.pop();\n\n if (tempHolder) {\n this.itemHolders.unshift(tempHolder); // move last to first\n\n this._containerShiftIndex--;\n setTransform(tempHolder.el, this._containerShiftIndex * this.slideWidth);\n pswp.setContent(tempHolder, pswp.currIndex + diffAbs - i - 2);\n }\n }\n } // Reset transfrom every 50ish navigations in one direction.\n //\n // Otherwise transform will keep growing indefinitely,\n // which might cause issues as browsers have a maximum transform limit.\n // I wasn't able to reach it, but just to be safe.\n // This should not cause noticable lag.\n\n\n if (Math.abs(this._containerShiftIndex) > 50 && !this.isShifted()) {\n this.resetPosition();\n this.resize();\n } // Pan transition might be running (and consntantly updating pan position)\n\n\n pswp.animations.stopAllPan();\n this.itemHolders.forEach((itemHolder, i) => {\n if (itemHolder.slide) {\n // Slide in the 2nd holder is always active\n itemHolder.slide.setIsActive(i === 1);\n }\n });\n pswp.currSlide = (_this$itemHolders$ = this.itemHolders[1]) === null || _this$itemHolders$ === void 0 ? void 0 : _this$itemHolders$.slide;\n pswp.contentLoader.updateLazy(positionDifference);\n\n if (pswp.currSlide) {\n pswp.currSlide.applyCurrentZoomPan();\n }\n\n pswp.dispatch('change');\n }\n /**\n * Move the X position of the main scroll container\n *\n * @param {number} x\n * @param {boolean} [dragging]\n */\n\n\n moveTo(x, dragging) {\n if (!this.pswp.canLoop() && dragging) {\n // Apply friction\n let newSlideIndexOffset = (this.slideWidth * this._currPositionIndex - x) / this.slideWidth;\n newSlideIndexOffset += this.pswp.currIndex;\n const delta = Math.round(x - this.x);\n\n if (newSlideIndexOffset < 0 && delta > 0 || newSlideIndexOffset >= this.pswp.getNumItems() - 1 && delta < 0) {\n x = this.x + delta * MAIN_SCROLL_END_FRICTION;\n }\n }\n\n this.x = x;\n\n if (this.pswp.container) {\n setTransform(this.pswp.container, x);\n }\n\n this.pswp.dispatch('moveMainScroll', {\n x,\n dragging: dragging !== null && dragging !== void 0 ? dragging : false\n });\n }\n\n}\n\n/** @typedef {import('./photoswipe.js').default} PhotoSwipe */\n\n/**\n * @template T\n * @typedef {import('./types.js').Methods} Methods\n */\n\nconst KeyboardKeyCodesMap = {\n Escape: 27,\n z: 90,\n ArrowLeft: 37,\n ArrowUp: 38,\n ArrowRight: 39,\n ArrowDown: 40,\n Tab: 9\n};\n/**\n * @template {keyof KeyboardKeyCodesMap} T\n * @param {T} key\n * @param {boolean} isKeySupported\n * @returns {T | number | undefined}\n */\n\nconst getKeyboardEventKey = (key, isKeySupported) => {\n return isKeySupported ? key : KeyboardKeyCodesMap[key];\n};\n/**\n * - Manages keyboard shortcuts.\n * - Helps trap focus within photoswipe.\n */\n\n\nclass Keyboard {\n /**\n * @param {PhotoSwipe} pswp\n */\n constructor(pswp) {\n this.pswp = pswp;\n /** @private */\n\n this._wasFocused = false;\n pswp.on('bindEvents', () => {\n if (pswp.options.trapFocus) {\n // Dialog was likely opened by keyboard if initial point is not defined\n if (!pswp.options.initialPointerPos) {\n // focus causes layout,\n // which causes lag during the animation,\n // that's why we delay it until the opener transition ends\n this._focusRoot();\n }\n\n pswp.events.add(document, 'focusin',\n /** @type EventListener */\n this._onFocusIn.bind(this));\n }\n\n pswp.events.add(document, 'keydown',\n /** @type EventListener */\n this._onKeyDown.bind(this));\n });\n const lastActiveElement =\n /** @type {HTMLElement} */\n document.activeElement;\n pswp.on('destroy', () => {\n if (pswp.options.returnFocus && lastActiveElement && this._wasFocused) {\n lastActiveElement.focus();\n }\n });\n }\n /** @private */\n\n\n _focusRoot() {\n if (!this._wasFocused && this.pswp.element) {\n this.pswp.element.focus();\n this._wasFocused = true;\n }\n }\n /**\n * @private\n * @param {KeyboardEvent} e\n */\n\n\n _onKeyDown(e) {\n const {\n pswp\n } = this;\n\n if (pswp.dispatch('keydown', {\n originalEvent: e\n }).defaultPrevented) {\n return;\n }\n\n if (specialKeyUsed(e)) {\n // don't do anything if special key pressed\n // to prevent from overriding default browser actions\n // for example, in Chrome on Mac cmd+arrow-left returns to previous page\n return;\n }\n /** @type {Methods | undefined} */\n\n\n let keydownAction;\n /** @type {'x' | 'y' | undefined} */\n\n let axis;\n let isForward = false;\n const isKeySupported = ('key' in e);\n\n switch (isKeySupported ? e.key : e.keyCode) {\n case getKeyboardEventKey('Escape', isKeySupported):\n if (pswp.options.escKey) {\n keydownAction = 'close';\n }\n\n break;\n\n case getKeyboardEventKey('z', isKeySupported):\n keydownAction = 'toggleZoom';\n break;\n\n case getKeyboardEventKey('ArrowLeft', isKeySupported):\n axis = 'x';\n break;\n\n case getKeyboardEventKey('ArrowUp', isKeySupported):\n axis = 'y';\n break;\n\n case getKeyboardEventKey('ArrowRight', isKeySupported):\n axis = 'x';\n isForward = true;\n break;\n\n case getKeyboardEventKey('ArrowDown', isKeySupported):\n isForward = true;\n axis = 'y';\n break;\n\n case getKeyboardEventKey('Tab', isKeySupported):\n this._focusRoot();\n\n break;\n } // if left/right/top/bottom key\n\n\n if (axis) {\n // prevent page scroll\n e.preventDefault();\n const {\n currSlide\n } = pswp;\n\n if (pswp.options.arrowKeys && axis === 'x' && pswp.getNumItems() > 1) {\n keydownAction = isForward ? 'next' : 'prev';\n } else if (currSlide && currSlide.currZoomLevel > currSlide.zoomLevels.fit) {\n // up/down arrow keys pan the image vertically\n // left/right arrow keys pan horizontally.\n // Unless there is only one image,\n // or arrowKeys option is disabled\n currSlide.pan[axis] += isForward ? -80 : 80;\n currSlide.panTo(currSlide.pan.x, currSlide.pan.y);\n }\n }\n\n if (keydownAction) {\n e.preventDefault(); // @ts-ignore\n\n pswp[keydownAction]();\n }\n }\n /**\n * Trap focus inside photoswipe\n *\n * @private\n * @param {FocusEvent} e\n */\n\n\n _onFocusIn(e) {\n const {\n template\n } = this.pswp;\n\n if (template && document !== e.target && template !== e.target && !template.contains(\n /** @type {Node} */\n e.target)) {\n // focus root element\n template.focus();\n }\n }\n\n}\n\nconst DEFAULT_EASING = 'cubic-bezier(.4,0,.22,1)';\n/** @typedef {import('./animations.js').SharedAnimationProps} SharedAnimationProps */\n\n/** @typedef {Object} DefaultCssAnimationProps\n *\n * @prop {HTMLElement} target\n * @prop {number} [duration]\n * @prop {string} [easing]\n * @prop {string} [transform]\n * @prop {string} [opacity]\n * */\n\n/** @typedef {SharedAnimationProps & DefaultCssAnimationProps} CssAnimationProps */\n\n/**\n * Runs CSS transition.\n */\n\nclass CSSAnimation {\n /**\n * onComplete can be unpredictable, be careful about current state\n *\n * @param {CssAnimationProps} props\n */\n constructor(props) {\n var _props$prop;\n\n this.props = props;\n const {\n target,\n onComplete,\n transform,\n onFinish = () => {},\n duration = 333,\n easing = DEFAULT_EASING\n } = props;\n this.onFinish = onFinish; // support only transform and opacity\n\n const prop = transform ? 'transform' : 'opacity';\n const propValue = (_props$prop = props[prop]) !== null && _props$prop !== void 0 ? _props$prop : '';\n /** @private */\n\n this._target = target;\n /** @private */\n\n this._onComplete = onComplete;\n /** @private */\n\n this._finished = false;\n /** @private */\n\n this._onTransitionEnd = this._onTransitionEnd.bind(this); // Using timeout hack to make sure that animation\n // starts even if the animated property was changed recently,\n // otherwise transitionend might not fire or transition won't start.\n // https://drafts.csswg.org/css-transitions/#starting\n //\n // ¯\\_(ツ)_/¯\n\n /** @private */\n\n this._helperTimeout = setTimeout(() => {\n setTransitionStyle(target, prop, duration, easing);\n this._helperTimeout = setTimeout(() => {\n target.addEventListener('transitionend', this._onTransitionEnd, false);\n target.addEventListener('transitioncancel', this._onTransitionEnd, false); // Safari occasionally does not emit transitionend event\n // if element property was modified during the transition,\n // which may be caused by resize or third party component,\n // using timeout as a safety fallback\n\n this._helperTimeout = setTimeout(() => {\n this._finalizeAnimation();\n }, duration + 500);\n target.style[prop] = propValue;\n }, 30); // Do not reduce this number\n }, 0);\n }\n /**\n * @private\n * @param {TransitionEvent} e\n */\n\n\n _onTransitionEnd(e) {\n if (e.target === this._target) {\n this._finalizeAnimation();\n }\n }\n /**\n * @private\n */\n\n\n _finalizeAnimation() {\n if (!this._finished) {\n this._finished = true;\n this.onFinish();\n\n if (this._onComplete) {\n this._onComplete();\n }\n }\n } // Destroy is called automatically onFinish\n\n\n destroy() {\n if (this._helperTimeout) {\n clearTimeout(this._helperTimeout);\n }\n\n removeTransitionStyle(this._target);\n\n this._target.removeEventListener('transitionend', this._onTransitionEnd, false);\n\n this._target.removeEventListener('transitioncancel', this._onTransitionEnd, false);\n\n if (!this._finished) {\n this._finalizeAnimation();\n }\n }\n\n}\n\nconst DEFAULT_NATURAL_FREQUENCY = 12;\nconst DEFAULT_DAMPING_RATIO = 0.75;\n/**\n * Spring easing helper\n */\n\nclass SpringEaser {\n /**\n * @param {number} initialVelocity Initial velocity, px per ms.\n *\n * @param {number} [dampingRatio]\n * Determines how bouncy animation will be.\n * From 0 to 1, 0 - always overshoot, 1 - do not overshoot.\n * \"overshoot\" refers to part of animation that\n * goes beyond the final value.\n *\n * @param {number} [naturalFrequency]\n * Determines how fast animation will slow down.\n * The higher value - the stiffer the transition will be,\n * and the faster it will slow down.\n * Recommended value from 10 to 50\n */\n constructor(initialVelocity, dampingRatio, naturalFrequency) {\n this.velocity = initialVelocity * 1000; // convert to \"pixels per second\"\n // https://en.wikipedia.org/wiki/Damping_ratio\n\n this._dampingRatio = dampingRatio || DEFAULT_DAMPING_RATIO; // https://en.wikipedia.org/wiki/Natural_frequency\n\n this._naturalFrequency = naturalFrequency || DEFAULT_NATURAL_FREQUENCY;\n this._dampedFrequency = this._naturalFrequency;\n\n if (this._dampingRatio < 1) {\n this._dampedFrequency *= Math.sqrt(1 - this._dampingRatio * this._dampingRatio);\n }\n }\n /**\n * @param {number} deltaPosition Difference between current and end position of the animation\n * @param {number} deltaTime Frame duration in milliseconds\n *\n * @returns {number} Displacement, relative to the end position.\n */\n\n\n easeFrame(deltaPosition, deltaTime) {\n // Inspired by Apple Webkit and Android spring function implementation\n // https://en.wikipedia.org/wiki/Oscillation\n // https://en.wikipedia.org/wiki/Damping_ratio\n // we ignore mass (assume that it's 1kg)\n let displacement = 0;\n let coeff;\n deltaTime /= 1000;\n const naturalDumpingPow = Math.E ** (-this._dampingRatio * this._naturalFrequency * deltaTime);\n\n if (this._dampingRatio === 1) {\n coeff = this.velocity + this._naturalFrequency * deltaPosition;\n displacement = (deltaPosition + coeff * deltaTime) * naturalDumpingPow;\n this.velocity = displacement * -this._naturalFrequency + coeff * naturalDumpingPow;\n } else if (this._dampingRatio < 1) {\n coeff = 1 / this._dampedFrequency * (this._dampingRatio * this._naturalFrequency * deltaPosition + this.velocity);\n const dumpedFCos = Math.cos(this._dampedFrequency * deltaTime);\n const dumpedFSin = Math.sin(this._dampedFrequency * deltaTime);\n displacement = naturalDumpingPow * (deltaPosition * dumpedFCos + coeff * dumpedFSin);\n this.velocity = displacement * -this._naturalFrequency * this._dampingRatio + naturalDumpingPow * (-this._dampedFrequency * deltaPosition * dumpedFSin + this._dampedFrequency * coeff * dumpedFCos);\n } // Overdamped (>1) damping ratio is not supported\n\n\n return displacement;\n }\n\n}\n\n/** @typedef {import('./animations.js').SharedAnimationProps} SharedAnimationProps */\n\n/**\n * @typedef {Object} DefaultSpringAnimationProps\n *\n * @prop {number} start\n * @prop {number} end\n * @prop {number} velocity\n * @prop {number} [dampingRatio]\n * @prop {number} [naturalFrequency]\n * @prop {(end: number) => void} onUpdate\n */\n\n/** @typedef {SharedAnimationProps & DefaultSpringAnimationProps} SpringAnimationProps */\n\nclass SpringAnimation {\n /**\n * @param {SpringAnimationProps} props\n */\n constructor(props) {\n this.props = props;\n this._raf = 0;\n const {\n start,\n end,\n velocity,\n onUpdate,\n onComplete,\n onFinish = () => {},\n dampingRatio,\n naturalFrequency\n } = props;\n this.onFinish = onFinish;\n const easer = new SpringEaser(velocity, dampingRatio, naturalFrequency);\n let prevTime = Date.now();\n let deltaPosition = start - end;\n\n const animationLoop = () => {\n if (this._raf) {\n deltaPosition = easer.easeFrame(deltaPosition, Date.now() - prevTime); // Stop the animation if velocity is low and position is close to end\n\n if (Math.abs(deltaPosition) < 1 && Math.abs(easer.velocity) < 50) {\n // Finalize the animation\n onUpdate(end);\n\n if (onComplete) {\n onComplete();\n }\n\n this.onFinish();\n } else {\n prevTime = Date.now();\n onUpdate(deltaPosition + end);\n this._raf = requestAnimationFrame(animationLoop);\n }\n }\n };\n\n this._raf = requestAnimationFrame(animationLoop);\n } // Destroy is called automatically onFinish\n\n\n destroy() {\n if (this._raf >= 0) {\n cancelAnimationFrame(this._raf);\n }\n\n this._raf = 0;\n }\n\n}\n\n/** @typedef {import('./css-animation.js').CssAnimationProps} CssAnimationProps */\n\n/** @typedef {import('./spring-animation.js').SpringAnimationProps} SpringAnimationProps */\n\n/** @typedef {Object} SharedAnimationProps\n * @prop {string} [name]\n * @prop {boolean} [isPan]\n * @prop {boolean} [isMainScroll]\n * @prop {VoidFunction} [onComplete]\n * @prop {VoidFunction} [onFinish]\n */\n\n/** @typedef {SpringAnimation | CSSAnimation} Animation */\n\n/** @typedef {SpringAnimationProps | CssAnimationProps} AnimationProps */\n\n/**\n * Manages animations\n */\n\nclass Animations {\n constructor() {\n /** @type {Animation[]} */\n this.activeAnimations = [];\n }\n /**\n * @param {SpringAnimationProps} props\n */\n\n\n startSpring(props) {\n this._start(props, true);\n }\n /**\n * @param {CssAnimationProps} props\n */\n\n\n startTransition(props) {\n this._start(props);\n }\n /**\n * @private\n * @param {AnimationProps} props\n * @param {boolean} [isSpring]\n * @returns {Animation}\n */\n\n\n _start(props, isSpring) {\n const animation = isSpring ? new SpringAnimation(\n /** @type SpringAnimationProps */\n props) : new CSSAnimation(\n /** @type CssAnimationProps */\n props);\n this.activeAnimations.push(animation);\n\n animation.onFinish = () => this.stop(animation);\n\n return animation;\n }\n /**\n * @param {Animation} animation\n */\n\n\n stop(animation) {\n animation.destroy();\n const index = this.activeAnimations.indexOf(animation);\n\n if (index > -1) {\n this.activeAnimations.splice(index, 1);\n }\n }\n\n stopAll() {\n // _stopAllAnimations\n this.activeAnimations.forEach(animation => {\n animation.destroy();\n });\n this.activeAnimations = [];\n }\n /**\n * Stop all pan or zoom transitions\n */\n\n\n stopAllPan() {\n this.activeAnimations = this.activeAnimations.filter(animation => {\n if (animation.props.isPan) {\n animation.destroy();\n return false;\n }\n\n return true;\n });\n }\n\n stopMainScroll() {\n this.activeAnimations = this.activeAnimations.filter(animation => {\n if (animation.props.isMainScroll) {\n animation.destroy();\n return false;\n }\n\n return true;\n });\n }\n /**\n * Returns true if main scroll transition is running\n */\n // isMainScrollRunning() {\n // return this.activeAnimations.some((animation) => {\n // return animation.props.isMainScroll;\n // });\n // }\n\n /**\n * Returns true if any pan or zoom transition is running\n */\n\n\n isPanRunning() {\n return this.activeAnimations.some(animation => {\n return animation.props.isPan;\n });\n }\n\n}\n\n/** @typedef {import('./photoswipe.js').default} PhotoSwipe */\n\n/**\n * Handles scroll wheel.\n * Can pan and zoom current slide image.\n */\nclass ScrollWheel {\n /**\n * @param {PhotoSwipe} pswp\n */\n constructor(pswp) {\n this.pswp = pswp;\n pswp.events.add(pswp.element, 'wheel',\n /** @type EventListener */\n this._onWheel.bind(this));\n }\n /**\n * @private\n * @param {WheelEvent} e\n */\n\n\n _onWheel(e) {\n e.preventDefault();\n const {\n currSlide\n } = this.pswp;\n let {\n deltaX,\n deltaY\n } = e;\n\n if (!currSlide) {\n return;\n }\n\n if (this.pswp.dispatch('wheel', {\n originalEvent: e\n }).defaultPrevented) {\n return;\n }\n\n if (e.ctrlKey || this.pswp.options.wheelToZoom) {\n // zoom\n if (currSlide.isZoomable()) {\n let zoomFactor = -deltaY;\n\n if (e.deltaMode === 1\n /* DOM_DELTA_LINE */\n ) {\n zoomFactor *= 0.05;\n } else {\n zoomFactor *= e.deltaMode ? 1 : 0.002;\n }\n\n zoomFactor = 2 ** zoomFactor;\n const destZoomLevel = currSlide.currZoomLevel * zoomFactor;\n currSlide.zoomTo(destZoomLevel, {\n x: e.clientX,\n y: e.clientY\n });\n }\n } else {\n // pan\n if (currSlide.isPannable()) {\n if (e.deltaMode === 1\n /* DOM_DELTA_LINE */\n ) {\n // 18 - average line height\n deltaX *= 18;\n deltaY *= 18;\n }\n\n currSlide.panTo(currSlide.pan.x - deltaX, currSlide.pan.y - deltaY);\n }\n }\n }\n\n}\n\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\n\n/**\n * @template T\n * @typedef {import('../types.js').Methods} Methods\n */\n\n/**\n * @typedef {Object} UIElementMarkupProps\n * @prop {boolean} [isCustomSVG]\n * @prop {string} inner\n * @prop {string} [outlineID]\n * @prop {number | string} [size]\n */\n\n/**\n * @typedef {Object} UIElementData\n * @prop {DefaultUIElements | string} [name]\n * @prop {string} [className]\n * @prop {UIElementMarkup} [html]\n * @prop {boolean} [isButton]\n * @prop {keyof HTMLElementTagNameMap} [tagName]\n * @prop {string} [title]\n * @prop {string} [ariaLabel]\n * @prop {(element: HTMLElement, pswp: PhotoSwipe) => void} [onInit]\n * @prop {Methods | ((e: MouseEvent, element: HTMLElement, pswp: PhotoSwipe) => void)} [onClick]\n * @prop {'bar' | 'wrapper' | 'root'} [appendTo]\n * @prop {number} [order]\n */\n\n/** @typedef {'arrowPrev' | 'arrowNext' | 'close' | 'zoom' | 'counter'} DefaultUIElements */\n\n/** @typedef {string | UIElementMarkupProps} UIElementMarkup */\n\n/**\n * @param {UIElementMarkup} [htmlData]\n * @returns {string}\n */\n\nfunction addElementHTML(htmlData) {\n if (typeof htmlData === 'string') {\n // Allow developers to provide full svg,\n // For example:\n // \n // \n // \n // \n // Can also be any HTML string.\n return htmlData;\n }\n\n if (!htmlData || !htmlData.isCustomSVG) {\n return '';\n }\n\n const svgData = htmlData;\n let out = ''; // replace all %d with size\n\n out = out.split('%d').join(\n /** @type {string} */\n svgData.size || 32); // Icons may contain outline/shadow,\n // to make it we \"clone\" base icon shape and add border to it.\n // Icon itself and border are styled via CSS.\n //\n // Property shadowID defines ID of element that should be cloned.\n\n if (svgData.outlineID) {\n out += '';\n }\n\n out += svgData.inner;\n out += '';\n return out;\n}\n\nclass UIElement {\n /**\n * @param {PhotoSwipe} pswp\n * @param {UIElementData} data\n */\n constructor(pswp, data) {\n var _container;\n\n const name = data.name || data.className;\n let elementHTML = data.html; // @ts-expect-error lookup only by `data.name` maybe?\n\n if (pswp.options[name] === false) {\n // exit if element is disabled from options\n return;\n } // Allow to override SVG icons from options\n // @ts-expect-error lookup only by `data.name` maybe?\n\n\n if (typeof pswp.options[name + 'SVG'] === 'string') {\n // arrowPrevSVG\n // arrowNextSVG\n // closeSVG\n // zoomSVG\n // @ts-expect-error lookup only by `data.name` maybe?\n elementHTML = pswp.options[name + 'SVG'];\n }\n\n pswp.dispatch('uiElementCreate', {\n data\n });\n let className = '';\n\n if (data.isButton) {\n className += 'pswp__button ';\n className += data.className || `pswp__button--${data.name}`;\n } else {\n className += data.className || `pswp__${data.name}`;\n }\n\n let tagName = data.isButton ? data.tagName || 'button' : data.tagName || 'div';\n tagName =\n /** @type {keyof HTMLElementTagNameMap} */\n tagName.toLowerCase();\n /** @type {HTMLElement} */\n\n const element = createElement(className, tagName);\n\n if (data.isButton) {\n if (tagName === 'button') {\n /** @type {HTMLButtonElement} */\n element.type = 'button';\n }\n\n let {\n title\n } = data;\n const {\n ariaLabel\n } = data; // @ts-expect-error lookup only by `data.name` maybe?\n\n if (typeof pswp.options[name + 'Title'] === 'string') {\n // @ts-expect-error lookup only by `data.name` maybe?\n title = pswp.options[name + 'Title'];\n }\n\n if (title) {\n element.title = title;\n }\n\n const ariaText = ariaLabel || title;\n\n if (ariaText) {\n element.setAttribute('aria-label', ariaText);\n }\n }\n\n element.innerHTML = addElementHTML(elementHTML);\n\n if (data.onInit) {\n data.onInit(element, pswp);\n }\n\n if (data.onClick) {\n element.onclick = e => {\n if (typeof data.onClick === 'string') {\n // @ts-ignore\n pswp[data.onClick]();\n } else if (typeof data.onClick === 'function') {\n data.onClick(e, element, pswp);\n }\n };\n } // Top bar is default position\n\n\n const appendTo = data.appendTo || 'bar';\n /** @type {HTMLElement | undefined} root element by default */\n\n let container = pswp.element;\n\n if (appendTo === 'bar') {\n if (!pswp.topBar) {\n pswp.topBar = createElement('pswp__top-bar pswp__hide-on-close', 'div', pswp.scrollWrap);\n }\n\n container = pswp.topBar;\n } else {\n // element outside of top bar gets a secondary class\n // that makes element fade out on close\n element.classList.add('pswp__hide-on-close');\n\n if (appendTo === 'wrapper') {\n container = pswp.scrollWrap;\n }\n }\n\n (_container = container) === null || _container === void 0 || _container.appendChild(pswp.applyFilters('uiElement', element, data));\n }\n\n}\n\n/*\n Backward and forward arrow buttons\n */\n\n/** @typedef {import('./ui-element.js').UIElementData} UIElementData */\n\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\n\n/**\n *\n * @param {HTMLElement} element\n * @param {PhotoSwipe} pswp\n * @param {boolean} [isNextButton]\n */\nfunction initArrowButton(element, pswp, isNextButton) {\n element.classList.add('pswp__button--arrow'); // TODO: this should point to a unique id for this instance\n\n element.setAttribute('aria-controls', 'pswp__items');\n pswp.on('change', () => {\n if (!pswp.options.loop) {\n if (isNextButton) {\n /** @type {HTMLButtonElement} */\n element.disabled = !(pswp.currIndex < pswp.getNumItems() - 1);\n } else {\n /** @type {HTMLButtonElement} */\n element.disabled = !(pswp.currIndex > 0);\n }\n }\n });\n}\n/** @type {UIElementData} */\n\n\nconst arrowPrev = {\n name: 'arrowPrev',\n className: 'pswp__button--arrow--prev',\n title: 'Previous',\n order: 10,\n isButton: true,\n appendTo: 'wrapper',\n html: {\n isCustomSVG: true,\n size: 60,\n inner: '',\n outlineID: 'pswp__icn-arrow'\n },\n onClick: 'prev',\n onInit: initArrowButton\n};\n/** @type {UIElementData} */\n\nconst arrowNext = {\n name: 'arrowNext',\n className: 'pswp__button--arrow--next',\n title: 'Next',\n order: 11,\n isButton: true,\n appendTo: 'wrapper',\n html: {\n isCustomSVG: true,\n size: 60,\n inner: '',\n outlineID: 'pswp__icn-arrow'\n },\n onClick: 'next',\n onInit: (el, pswp) => {\n initArrowButton(el, pswp, true);\n }\n};\n\n/** @type {import('./ui-element.js').UIElementData} UIElementData */\nconst closeButton = {\n name: 'close',\n title: 'Close',\n order: 20,\n isButton: true,\n html: {\n isCustomSVG: true,\n inner: '',\n outlineID: 'pswp__icn-close'\n },\n onClick: 'close'\n};\n\n/** @type {import('./ui-element.js').UIElementData} UIElementData */\nconst zoomButton = {\n name: 'zoom',\n title: 'Zoom',\n order: 10,\n isButton: true,\n html: {\n isCustomSVG: true,\n // eslint-disable-next-line max-len\n inner: '' + '' + '',\n outlineID: 'pswp__icn-zoom'\n },\n onClick: 'toggleZoom'\n};\n\n/** @type {import('./ui-element.js').UIElementData} UIElementData */\nconst loadingIndicator = {\n name: 'preloader',\n appendTo: 'bar',\n order: 7,\n html: {\n isCustomSVG: true,\n // eslint-disable-next-line max-len\n inner: '',\n outlineID: 'pswp__icn-loading'\n },\n onInit: (indicatorElement, pswp) => {\n /** @type {boolean | undefined} */\n let isVisible;\n /** @type {NodeJS.Timeout | null} */\n\n let delayTimeout = null;\n /**\n * @param {string} className\n * @param {boolean} add\n */\n\n const toggleIndicatorClass = (className, add) => {\n indicatorElement.classList.toggle('pswp__preloader--' + className, add);\n };\n /**\n * @param {boolean} visible\n */\n\n\n const setIndicatorVisibility = visible => {\n if (isVisible !== visible) {\n isVisible = visible;\n toggleIndicatorClass('active', visible);\n }\n };\n\n const updatePreloaderVisibility = () => {\n var _pswp$currSlide;\n\n if (!((_pswp$currSlide = pswp.currSlide) !== null && _pswp$currSlide !== void 0 && _pswp$currSlide.content.isLoading())) {\n setIndicatorVisibility(false);\n\n if (delayTimeout) {\n clearTimeout(delayTimeout);\n delayTimeout = null;\n }\n\n return;\n }\n\n if (!delayTimeout) {\n // display loading indicator with delay\n delayTimeout = setTimeout(() => {\n var _pswp$currSlide2;\n\n setIndicatorVisibility(Boolean((_pswp$currSlide2 = pswp.currSlide) === null || _pswp$currSlide2 === void 0 ? void 0 : _pswp$currSlide2.content.isLoading()));\n delayTimeout = null;\n }, pswp.options.preloaderDelay);\n }\n };\n\n pswp.on('change', updatePreloaderVisibility);\n pswp.on('loadComplete', e => {\n if (pswp.currSlide === e.slide) {\n updatePreloaderVisibility();\n }\n }); // expose the method\n\n if (pswp.ui) {\n pswp.ui.updatePreloaderVisibility = updatePreloaderVisibility;\n }\n }\n};\n\n/** @type {import('./ui-element.js').UIElementData} UIElementData */\nconst counterIndicator = {\n name: 'counter',\n order: 5,\n onInit: (counterElement, pswp) => {\n pswp.on('change', () => {\n counterElement.innerText = pswp.currIndex + 1 + pswp.options.indexIndicatorSep + pswp.getNumItems();\n });\n }\n};\n\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\n\n/** @typedef {import('./ui-element.js').UIElementData} UIElementData */\n\n/**\n * Set special class on element when image is zoomed.\n *\n * By default, it is used to adjust\n * zoom icon and zoom cursor via CSS.\n *\n * @param {HTMLElement} el\n * @param {boolean} isZoomedIn\n */\n\nfunction setZoomedIn(el, isZoomedIn) {\n el.classList.toggle('pswp--zoomed-in', isZoomedIn);\n}\n\nclass UI {\n /**\n * @param {PhotoSwipe} pswp\n */\n constructor(pswp) {\n this.pswp = pswp;\n this.isRegistered = false;\n /** @type {UIElementData[]} */\n\n this.uiElementsData = [];\n /** @type {(UIElement | UIElementData)[]} */\n\n this.items = [];\n /** @type {() => void} */\n\n this.updatePreloaderVisibility = () => {};\n /**\n * @private\n * @type {number | undefined}\n */\n\n\n this._lastUpdatedZoomLevel = undefined;\n }\n\n init() {\n const {\n pswp\n } = this;\n this.isRegistered = false;\n this.uiElementsData = [closeButton, arrowPrev, arrowNext, zoomButton, loadingIndicator, counterIndicator];\n pswp.dispatch('uiRegister'); // sort by order\n\n this.uiElementsData.sort((a, b) => {\n // default order is 0\n return (a.order || 0) - (b.order || 0);\n });\n this.items = [];\n this.isRegistered = true;\n this.uiElementsData.forEach(uiElementData => {\n this.registerElement(uiElementData);\n });\n pswp.on('change', () => {\n var _pswp$element;\n\n (_pswp$element = pswp.element) === null || _pswp$element === void 0 || _pswp$element.classList.toggle('pswp--one-slide', pswp.getNumItems() === 1);\n });\n pswp.on('zoomPanUpdate', () => this._onZoomPanUpdate());\n }\n /**\n * @param {UIElementData} elementData\n */\n\n\n registerElement(elementData) {\n if (this.isRegistered) {\n this.items.push(new UIElement(this.pswp, elementData));\n } else {\n this.uiElementsData.push(elementData);\n }\n }\n /**\n * Fired each time zoom or pan position is changed.\n * Update classes that control visibility of zoom button and cursor icon.\n *\n * @private\n */\n\n\n _onZoomPanUpdate() {\n const {\n template,\n currSlide,\n options\n } = this.pswp;\n\n if (this.pswp.opener.isClosing || !template || !currSlide) {\n return;\n }\n\n let {\n currZoomLevel\n } = currSlide; // if not open yet - check against initial zoom level\n\n if (!this.pswp.opener.isOpen) {\n currZoomLevel = currSlide.zoomLevels.initial;\n }\n\n if (currZoomLevel === this._lastUpdatedZoomLevel) {\n return;\n }\n\n this._lastUpdatedZoomLevel = currZoomLevel;\n const currZoomLevelDiff = currSlide.zoomLevels.initial - currSlide.zoomLevels.secondary; // Initial and secondary zoom levels are almost equal\n\n if (Math.abs(currZoomLevelDiff) < 0.01 || !currSlide.isZoomable()) {\n // disable zoom\n setZoomedIn(template, false);\n template.classList.remove('pswp--zoom-allowed');\n return;\n }\n\n template.classList.add('pswp--zoom-allowed');\n const potentialZoomLevel = currZoomLevel === currSlide.zoomLevels.initial ? currSlide.zoomLevels.secondary : currSlide.zoomLevels.initial;\n setZoomedIn(template, potentialZoomLevel <= currZoomLevel);\n\n if (options.imageClickAction === 'zoom' || options.imageClickAction === 'zoom-or-close') {\n template.classList.add('pswp--click-to-zoom');\n }\n }\n\n}\n\n/** @typedef {import('./slide.js').SlideData} SlideData */\n\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\n\n/** @typedef {{ x: number; y: number; w: number; innerRect?: { w: number; h: number; x: number; y: number } }} Bounds */\n\n/**\n * @param {HTMLElement} el\n * @returns Bounds\n */\nfunction getBoundsByElement(el) {\n const thumbAreaRect = el.getBoundingClientRect();\n return {\n x: thumbAreaRect.left,\n y: thumbAreaRect.top,\n w: thumbAreaRect.width\n };\n}\n/**\n * @param {HTMLElement} el\n * @param {number} imageWidth\n * @param {number} imageHeight\n * @returns Bounds\n */\n\n\nfunction getCroppedBoundsByElement(el, imageWidth, imageHeight) {\n const thumbAreaRect = el.getBoundingClientRect(); // fill image into the area\n // (do they same as object-fit:cover does to retrieve coordinates)\n\n const hRatio = thumbAreaRect.width / imageWidth;\n const vRatio = thumbAreaRect.height / imageHeight;\n const fillZoomLevel = hRatio > vRatio ? hRatio : vRatio;\n const offsetX = (thumbAreaRect.width - imageWidth * fillZoomLevel) / 2;\n const offsetY = (thumbAreaRect.height - imageHeight * fillZoomLevel) / 2;\n /**\n * Coordinates of the image,\n * as if it was not cropped,\n * height is calculated automatically\n *\n * @type {Bounds}\n */\n\n const bounds = {\n x: thumbAreaRect.left + offsetX,\n y: thumbAreaRect.top + offsetY,\n w: imageWidth * fillZoomLevel\n }; // Coordinates of inner crop area\n // relative to the image\n\n bounds.innerRect = {\n w: thumbAreaRect.width,\n h: thumbAreaRect.height,\n x: offsetX,\n y: offsetY\n };\n return bounds;\n}\n/**\n * Get dimensions of thumbnail image\n * (click on which opens photoswipe or closes photoswipe to)\n *\n * @param {number} index\n * @param {SlideData} itemData\n * @param {PhotoSwipe} instance PhotoSwipe instance\n * @returns {Bounds | undefined}\n */\n\n\nfunction getThumbBounds(index, itemData, instance) {\n // legacy event, before filters were introduced\n const event = instance.dispatch('thumbBounds', {\n index,\n itemData,\n instance\n }); // @ts-expect-error\n\n if (event.thumbBounds) {\n // @ts-expect-error\n return event.thumbBounds;\n }\n\n const {\n element\n } = itemData;\n /** @type {Bounds | undefined} */\n\n let thumbBounds;\n /** @type {HTMLElement | null | undefined} */\n\n let thumbnail;\n\n if (element && instance.options.thumbSelector !== false) {\n const thumbSelector = instance.options.thumbSelector || 'img';\n thumbnail = element.matches(thumbSelector) ? element :\n /** @type {HTMLElement | null} */\n element.querySelector(thumbSelector);\n }\n\n thumbnail = instance.applyFilters('thumbEl', thumbnail, itemData, index);\n\n if (thumbnail) {\n if (!itemData.thumbCropped) {\n thumbBounds = getBoundsByElement(thumbnail);\n } else {\n thumbBounds = getCroppedBoundsByElement(thumbnail, itemData.width || itemData.w || 0, itemData.height || itemData.h || 0);\n }\n }\n\n return instance.applyFilters('thumbBounds', thumbBounds, itemData, index);\n}\n\n/** @typedef {import('../lightbox/lightbox.js').default} PhotoSwipeLightbox */\n\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\n\n/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\n\n/** @typedef {import('../photoswipe.js').DataSource} DataSource */\n\n/** @typedef {import('../ui/ui-element.js').UIElementData} UIElementData */\n\n/** @typedef {import('../slide/content.js').default} ContentDefault */\n\n/** @typedef {import('../slide/slide.js').default} Slide */\n\n/** @typedef {import('../slide/slide.js').SlideData} SlideData */\n\n/** @typedef {import('../slide/zoom-level.js').default} ZoomLevel */\n\n/** @typedef {import('../slide/get-thumb-bounds.js').Bounds} Bounds */\n\n/**\n * Allow adding an arbitrary props to the Content\n * https://photoswipe.com/custom-content/#using-webp-image-format\n * @typedef {ContentDefault & Record} Content\n */\n\n/** @typedef {{ x?: number; y?: number }} Point */\n\n/**\n * @typedef {Object} PhotoSwipeEventsMap https://photoswipe.com/events/\n *\n *\n * https://photoswipe.com/adding-ui-elements/\n *\n * @prop {undefined} uiRegister\n * @prop {{ data: UIElementData }} uiElementCreate\n *\n *\n * https://photoswipe.com/events/#initialization-events\n *\n * @prop {undefined} beforeOpen\n * @prop {undefined} firstUpdate\n * @prop {undefined} initialLayout\n * @prop {undefined} change\n * @prop {undefined} afterInit\n * @prop {undefined} bindEvents\n *\n *\n * https://photoswipe.com/events/#opening-or-closing-transition-events\n *\n * @prop {undefined} openingAnimationStart\n * @prop {undefined} openingAnimationEnd\n * @prop {undefined} closingAnimationStart\n * @prop {undefined} closingAnimationEnd\n *\n *\n * https://photoswipe.com/events/#closing-events\n *\n * @prop {undefined} close\n * @prop {undefined} destroy\n *\n *\n * https://photoswipe.com/events/#pointer-and-gesture-events\n *\n * @prop {{ originalEvent: PointerEvent }} pointerDown\n * @prop {{ originalEvent: PointerEvent }} pointerMove\n * @prop {{ originalEvent: PointerEvent }} pointerUp\n * @prop {{ bgOpacity: number }} pinchClose can be default prevented\n * @prop {{ panY: number }} verticalDrag can be default prevented\n *\n *\n * https://photoswipe.com/events/#slide-content-events\n *\n * @prop {{ content: Content }} contentInit\n * @prop {{ content: Content; isLazy: boolean }} contentLoad can be default prevented\n * @prop {{ content: Content; isLazy: boolean }} contentLoadImage can be default prevented\n * @prop {{ content: Content; slide: Slide; isError?: boolean }} loadComplete\n * @prop {{ content: Content; slide: Slide }} loadError\n * @prop {{ content: Content; width: number; height: number }} contentResize can be default prevented\n * @prop {{ content: Content; width: number; height: number; slide: Slide }} imageSizeChange\n * @prop {{ content: Content }} contentLazyLoad can be default prevented\n * @prop {{ content: Content }} contentAppend can be default prevented\n * @prop {{ content: Content }} contentActivate can be default prevented\n * @prop {{ content: Content }} contentDeactivate can be default prevented\n * @prop {{ content: Content }} contentRemove can be default prevented\n * @prop {{ content: Content }} contentDestroy can be default prevented\n *\n *\n * undocumented\n *\n * @prop {{ point: Point; originalEvent: PointerEvent }} imageClickAction can be default prevented\n * @prop {{ point: Point; originalEvent: PointerEvent }} bgClickAction can be default prevented\n * @prop {{ point: Point; originalEvent: PointerEvent }} tapAction can be default prevented\n * @prop {{ point: Point; originalEvent: PointerEvent }} doubleTapAction can be default prevented\n *\n * @prop {{ originalEvent: KeyboardEvent }} keydown can be default prevented\n * @prop {{ x: number; dragging: boolean }} moveMainScroll\n * @prop {{ slide: Slide }} firstZoomPan\n * @prop {{ slide: Slide | undefined, data: SlideData, index: number }} gettingData\n * @prop {undefined} beforeResize\n * @prop {undefined} resize\n * @prop {undefined} viewportSize\n * @prop {undefined} updateScrollOffset\n * @prop {{ slide: Slide }} slideInit\n * @prop {{ slide: Slide }} afterSetContent\n * @prop {{ slide: Slide }} slideLoad\n * @prop {{ slide: Slide }} appendHeavy can be default prevented\n * @prop {{ slide: Slide }} appendHeavyContent\n * @prop {{ slide: Slide }} slideActivate\n * @prop {{ slide: Slide }} slideDeactivate\n * @prop {{ slide: Slide }} slideDestroy\n * @prop {{ destZoomLevel: number, centerPoint: Point | undefined, transitionDuration: number | false | undefined }} beforeZoomTo\n * @prop {{ slide: Slide }} zoomPanUpdate\n * @prop {{ slide: Slide }} initialZoomPan\n * @prop {{ slide: Slide }} calcSlideSize\n * @prop {undefined} resolutionChanged\n * @prop {{ originalEvent: WheelEvent }} wheel can be default prevented\n * @prop {{ content: Content }} contentAppendImage can be default prevented\n * @prop {{ index: number; itemData: SlideData }} lazyLoadSlide can be default prevented\n * @prop {undefined} lazyLoad\n * @prop {{ slide: Slide }} calcBounds\n * @prop {{ zoomLevels: ZoomLevel, slideData: SlideData }} zoomLevelsUpdate\n *\n *\n * legacy\n *\n * @prop {undefined} init\n * @prop {undefined} initialZoomIn\n * @prop {undefined} initialZoomOut\n * @prop {undefined} initialZoomInEnd\n * @prop {undefined} initialZoomOutEnd\n * @prop {{ dataSource: DataSource | undefined, numItems: number }} numItems\n * @prop {{ itemData: SlideData; index: number }} itemData\n * @prop {{ index: number, itemData: SlideData, instance: PhotoSwipe }} thumbBounds\n */\n\n/**\n * @typedef {Object} PhotoSwipeFiltersMap https://photoswipe.com/filters/\n *\n * @prop {(numItems: number, dataSource: DataSource | undefined) => number} numItems\n * Modify the total amount of slides. Example on Data sources page.\n * https://photoswipe.com/filters/#numitems\n *\n * @prop {(itemData: SlideData, index: number) => SlideData} itemData\n * Modify slide item data. Example on Data sources page.\n * https://photoswipe.com/filters/#itemdata\n *\n * @prop {(itemData: SlideData, element: HTMLElement, linkEl: HTMLAnchorElement) => SlideData} domItemData\n * Modify item data when it's parsed from DOM element. Example on Data sources page.\n * https://photoswipe.com/filters/#domitemdata\n *\n * @prop {(clickedIndex: number, e: MouseEvent, instance: PhotoSwipeLightbox) => number} clickedIndex\n * Modify clicked gallery item index.\n * https://photoswipe.com/filters/#clickedindex\n *\n * @prop {(placeholderSrc: string | false, content: Content) => string | false} placeholderSrc\n * Modify placeholder image source.\n * https://photoswipe.com/filters/#placeholdersrc\n *\n * @prop {(isContentLoading: boolean, content: Content) => boolean} isContentLoading\n * Modify if the content is currently loading.\n * https://photoswipe.com/filters/#iscontentloading\n *\n * @prop {(isContentZoomable: boolean, content: Content) => boolean} isContentZoomable\n * Modify if the content can be zoomed.\n * https://photoswipe.com/filters/#iscontentzoomable\n *\n * @prop {(useContentPlaceholder: boolean, content: Content) => boolean} useContentPlaceholder\n * Modify if the placeholder should be used for the content.\n * https://photoswipe.com/filters/#usecontentplaceholder\n *\n * @prop {(isKeepingPlaceholder: boolean, content: Content) => boolean} isKeepingPlaceholder\n * Modify if the placeholder should be kept after the content is loaded.\n * https://photoswipe.com/filters/#iskeepingplaceholder\n *\n *\n * @prop {(contentErrorElement: HTMLElement, content: Content) => HTMLElement} contentErrorElement\n * Modify an element when the content has error state (for example, if image cannot be loaded).\n * https://photoswipe.com/filters/#contenterrorelement\n *\n * @prop {(element: HTMLElement, data: UIElementData) => HTMLElement} uiElement\n * Modify a UI element that's being created.\n * https://photoswipe.com/filters/#uielement\n *\n * @prop {(thumbnail: HTMLElement | null | undefined, itemData: SlideData, index: number) => HTMLElement} thumbEl\n * Modify the thumbnail element from which opening zoom animation starts or ends.\n * https://photoswipe.com/filters/#thumbel\n *\n * @prop {(thumbBounds: Bounds | undefined, itemData: SlideData, index: number) => Bounds} thumbBounds\n * Modify the thumbnail bounds from which opening zoom animation starts or ends.\n * https://photoswipe.com/filters/#thumbbounds\n *\n * @prop {(srcsetSizesWidth: number, content: Content) => number} srcsetSizesWidth\n *\n * @prop {(preventPointerEvent: boolean, event: PointerEvent, pointerType: string) => boolean} preventPointerEvent\n *\n */\n\n/**\n * @template {keyof PhotoSwipeFiltersMap} T\n * @typedef {{ fn: PhotoSwipeFiltersMap[T], priority: number }} Filter\n */\n\n/**\n * @template {keyof PhotoSwipeEventsMap} T\n * @typedef {PhotoSwipeEventsMap[T] extends undefined ? PhotoSwipeEvent : PhotoSwipeEvent & PhotoSwipeEventsMap[T]} AugmentedEvent\n */\n\n/**\n * @template {keyof PhotoSwipeEventsMap} T\n * @typedef {(event: AugmentedEvent) => void} EventCallback\n */\n\n/**\n * Base PhotoSwipe event object\n *\n * @template {keyof PhotoSwipeEventsMap} T\n */\nclass PhotoSwipeEvent {\n /**\n * @param {T} type\n * @param {PhotoSwipeEventsMap[T]} [details]\n */\n constructor(type, details) {\n this.type = type;\n this.defaultPrevented = false;\n\n if (details) {\n Object.assign(this, details);\n }\n }\n\n preventDefault() {\n this.defaultPrevented = true;\n }\n\n}\n/**\n * PhotoSwipe base class that can listen and dispatch for events.\n * Shared by PhotoSwipe Core and PhotoSwipe Lightbox, extended by base.js\n */\n\n\nclass Eventable {\n constructor() {\n /**\n * @type {{ [T in keyof PhotoSwipeEventsMap]?: ((event: AugmentedEvent) => void)[] }}\n */\n this._listeners = {};\n /**\n * @type {{ [T in keyof PhotoSwipeFiltersMap]?: Filter[] }}\n */\n\n this._filters = {};\n /** @type {PhotoSwipe | undefined} */\n\n this.pswp = undefined;\n /** @type {PhotoSwipeOptions | undefined} */\n\n this.options = undefined;\n }\n /**\n * @template {keyof PhotoSwipeFiltersMap} T\n * @param {T} name\n * @param {PhotoSwipeFiltersMap[T]} fn\n * @param {number} priority\n */\n\n\n addFilter(name, fn, priority = 100) {\n var _this$_filters$name, _this$_filters$name2, _this$pswp;\n\n if (!this._filters[name]) {\n this._filters[name] = [];\n }\n\n (_this$_filters$name = this._filters[name]) === null || _this$_filters$name === void 0 || _this$_filters$name.push({\n fn,\n priority\n });\n (_this$_filters$name2 = this._filters[name]) === null || _this$_filters$name2 === void 0 || _this$_filters$name2.sort((f1, f2) => f1.priority - f2.priority);\n (_this$pswp = this.pswp) === null || _this$pswp === void 0 || _this$pswp.addFilter(name, fn, priority);\n }\n /**\n * @template {keyof PhotoSwipeFiltersMap} T\n * @param {T} name\n * @param {PhotoSwipeFiltersMap[T]} fn\n */\n\n\n removeFilter(name, fn) {\n if (this._filters[name]) {\n // @ts-expect-error\n this._filters[name] = this._filters[name].filter(filter => filter.fn !== fn);\n }\n\n if (this.pswp) {\n this.pswp.removeFilter(name, fn);\n }\n }\n /**\n * @template {keyof PhotoSwipeFiltersMap} T\n * @param {T} name\n * @param {Parameters} args\n * @returns {Parameters[0]}\n */\n\n\n applyFilters(name, ...args) {\n var _this$_filters$name3;\n\n (_this$_filters$name3 = this._filters[name]) === null || _this$_filters$name3 === void 0 || _this$_filters$name3.forEach(filter => {\n // @ts-expect-error\n args[0] = filter.fn.apply(this, args);\n });\n return args[0];\n }\n /**\n * @template {keyof PhotoSwipeEventsMap} T\n * @param {T} name\n * @param {EventCallback} fn\n */\n\n\n on(name, fn) {\n var _this$_listeners$name, _this$pswp2;\n\n if (!this._listeners[name]) {\n this._listeners[name] = [];\n }\n\n (_this$_listeners$name = this._listeners[name]) === null || _this$_listeners$name === void 0 || _this$_listeners$name.push(fn); // When binding events to lightbox,\n // also bind events to PhotoSwipe Core,\n // if it's open.\n\n (_this$pswp2 = this.pswp) === null || _this$pswp2 === void 0 || _this$pswp2.on(name, fn);\n }\n /**\n * @template {keyof PhotoSwipeEventsMap} T\n * @param {T} name\n * @param {EventCallback} fn\n */\n\n\n off(name, fn) {\n var _this$pswp3;\n\n if (this._listeners[name]) {\n // @ts-expect-error\n this._listeners[name] = this._listeners[name].filter(listener => fn !== listener);\n }\n\n (_this$pswp3 = this.pswp) === null || _this$pswp3 === void 0 || _this$pswp3.off(name, fn);\n }\n /**\n * @template {keyof PhotoSwipeEventsMap} T\n * @param {T} name\n * @param {PhotoSwipeEventsMap[T]} [details]\n * @returns {AugmentedEvent}\n */\n\n\n dispatch(name, details) {\n var _this$_listeners$name2;\n\n if (this.pswp) {\n return this.pswp.dispatch(name, details);\n }\n\n const event =\n /** @type {AugmentedEvent} */\n new PhotoSwipeEvent(name, details);\n (_this$_listeners$name2 = this._listeners[name]) === null || _this$_listeners$name2 === void 0 || _this$_listeners$name2.forEach(listener => {\n listener.call(this, event);\n });\n return event;\n }\n\n}\n\nclass Placeholder {\n /**\n * @param {string | false} imageSrc\n * @param {HTMLElement} container\n */\n constructor(imageSrc, container) {\n // Create placeholder\n // (stretched thumbnail or simple div behind the main image)\n\n /** @type {HTMLImageElement | HTMLDivElement | null} */\n this.element = createElement('pswp__img pswp__img--placeholder', imageSrc ? 'img' : 'div', container);\n\n if (imageSrc) {\n const imgEl =\n /** @type {HTMLImageElement} */\n this.element;\n imgEl.decoding = 'async';\n imgEl.alt = '';\n imgEl.src = imageSrc;\n imgEl.setAttribute('role', 'presentation');\n }\n\n this.element.setAttribute('aria-hidden', 'true');\n }\n /**\n * @param {number} width\n * @param {number} height\n */\n\n\n setDisplayedSize(width, height) {\n if (!this.element) {\n return;\n }\n\n if (this.element.tagName === 'IMG') {\n // Use transform scale() to modify img placeholder size\n // (instead of changing width/height directly).\n // This helps with performance, specifically in iOS15 Safari.\n setWidthHeight(this.element, 250, 'auto');\n this.element.style.transformOrigin = '0 0';\n this.element.style.transform = toTransformString(0, 0, width / 250);\n } else {\n setWidthHeight(this.element, width, height);\n }\n }\n\n destroy() {\n var _this$element;\n\n if ((_this$element = this.element) !== null && _this$element !== void 0 && _this$element.parentNode) {\n this.element.remove();\n }\n\n this.element = null;\n }\n\n}\n\n/** @typedef {import('./slide.js').default} Slide */\n\n/** @typedef {import('./slide.js').SlideData} SlideData */\n\n/** @typedef {import('../core/base.js').default} PhotoSwipeBase */\n\n/** @typedef {import('../util/util.js').LoadState} LoadState */\n\nclass Content {\n /**\n * @param {SlideData} itemData Slide data\n * @param {PhotoSwipeBase} instance PhotoSwipe or PhotoSwipeLightbox instance\n * @param {number} index\n */\n constructor(itemData, instance, index) {\n this.instance = instance;\n this.data = itemData;\n this.index = index;\n /** @type {HTMLImageElement | HTMLDivElement | undefined} */\n\n this.element = undefined;\n /** @type {Placeholder | undefined} */\n\n this.placeholder = undefined;\n /** @type {Slide | undefined} */\n\n this.slide = undefined;\n this.displayedImageWidth = 0;\n this.displayedImageHeight = 0;\n this.width = Number(this.data.w) || Number(this.data.width) || 0;\n this.height = Number(this.data.h) || Number(this.data.height) || 0;\n this.isAttached = false;\n this.hasSlide = false;\n this.isDecoding = false;\n /** @type {LoadState} */\n\n this.state = LOAD_STATE.IDLE;\n\n if (this.data.type) {\n this.type = this.data.type;\n } else if (this.data.src) {\n this.type = 'image';\n } else {\n this.type = 'html';\n }\n\n this.instance.dispatch('contentInit', {\n content: this\n });\n }\n\n removePlaceholder() {\n if (this.placeholder && !this.keepPlaceholder()) {\n // With delay, as image might be loaded, but not rendered\n setTimeout(() => {\n if (this.placeholder) {\n this.placeholder.destroy();\n this.placeholder = undefined;\n }\n }, 1000);\n }\n }\n /**\n * Preload content\n *\n * @param {boolean} isLazy\n * @param {boolean} [reload]\n */\n\n\n load(isLazy, reload) {\n if (this.slide && this.usePlaceholder()) {\n if (!this.placeholder) {\n const placeholderSrc = this.instance.applyFilters('placeholderSrc', // use image-based placeholder only for the first slide,\n // as rendering (even small stretched thumbnail) is an expensive operation\n this.data.msrc && this.slide.isFirstSlide ? this.data.msrc : false, this);\n this.placeholder = new Placeholder(placeholderSrc, this.slide.container);\n } else {\n const placeholderEl = this.placeholder.element; // Add placeholder to DOM if it was already created\n\n if (placeholderEl && !placeholderEl.parentElement) {\n this.slide.container.prepend(placeholderEl);\n }\n }\n }\n\n if (this.element && !reload) {\n return;\n }\n\n if (this.instance.dispatch('contentLoad', {\n content: this,\n isLazy\n }).defaultPrevented) {\n return;\n }\n\n if (this.isImageContent()) {\n this.element = createElement('pswp__img', 'img'); // Start loading only after width is defined, as sizes might depend on it.\n // Due to Safari feature, we must define sizes before srcset.\n\n if (this.displayedImageWidth) {\n this.loadImage(isLazy);\n }\n } else {\n this.element = createElement('pswp__content', 'div');\n this.element.innerHTML = this.data.html || '';\n }\n\n if (reload && this.slide) {\n this.slide.updateContentSize(true);\n }\n }\n /**\n * Preload image\n *\n * @param {boolean} isLazy\n */\n\n\n loadImage(isLazy) {\n var _this$data$src, _this$data$alt;\n\n if (!this.isImageContent() || !this.element || this.instance.dispatch('contentLoadImage', {\n content: this,\n isLazy\n }).defaultPrevented) {\n return;\n }\n\n const imageElement =\n /** @type HTMLImageElement */\n this.element;\n this.updateSrcsetSizes();\n\n if (this.data.srcset) {\n imageElement.srcset = this.data.srcset;\n }\n\n imageElement.src = (_this$data$src = this.data.src) !== null && _this$data$src !== void 0 ? _this$data$src : '';\n imageElement.alt = (_this$data$alt = this.data.alt) !== null && _this$data$alt !== void 0 ? _this$data$alt : '';\n this.state = LOAD_STATE.LOADING;\n\n if (imageElement.complete) {\n this.width = imageElement.naturalWidth;\n this.height = imageElement.naturalHeight;\n this.slide.width = this.width;\n this.slide.height = this.height;\n this.slide.resize();\n this.onLoaded();\n } else {\n imageElement.onload = () => {\n this.width = imageElement.naturalWidth;\n this.height = imageElement.naturalHeight;\n this.slide.width = this.width;\n this.slide.height = this.height;\n this.slide.resize();\n this.onLoaded();\n };\n\n imageElement.onerror = () => {\n this.onError();\n };\n }\n }\n /**\n * Assign slide to content\n *\n * @param {Slide} slide\n */\n\n\n setSlide(slide) {\n this.slide = slide;\n this.hasSlide = true;\n this.instance = slide.pswp; // todo: do we need to unset slide?\n }\n /**\n * Content load success handler\n */\n\n\n onLoaded() {\n this.state = LOAD_STATE.LOADED;\n\n if (this.slide && this.element) {\n this.instance.dispatch('loadComplete', {\n slide: this.slide,\n content: this\n }); // if content is reloaded\n\n if (this.slide.isActive && this.slide.heavyAppended && !this.element.parentNode) {\n this.append();\n this.slide.updateContentSize(true);\n }\n\n if (this.state === LOAD_STATE.LOADED || this.state === LOAD_STATE.ERROR) {\n this.removePlaceholder();\n }\n }\n }\n /**\n * Content load error handler\n */\n\n\n onError() {\n this.state = LOAD_STATE.ERROR;\n\n if (this.slide) {\n this.displayError();\n this.instance.dispatch('loadComplete', {\n slide: this.slide,\n isError: true,\n content: this\n });\n this.instance.dispatch('loadError', {\n slide: this.slide,\n content: this\n });\n }\n }\n /**\n * @returns {Boolean} If the content is currently loading\n */\n\n\n isLoading() {\n return this.instance.applyFilters('isContentLoading', this.state === LOAD_STATE.LOADING, this);\n }\n /**\n * @returns {Boolean} If the content is in error state\n */\n\n\n isError() {\n return this.state === LOAD_STATE.ERROR;\n }\n /**\n * @returns {boolean} If the content is image\n */\n\n\n isImageContent() {\n return this.type === 'image';\n }\n /**\n * Update content size\n *\n * @param {Number} width\n * @param {Number} height\n */\n\n\n setDisplayedSize(width, height) {\n if (!this.element) {\n return;\n }\n\n if (this.placeholder) {\n this.placeholder.setDisplayedSize(width, height);\n }\n\n if (this.instance.dispatch('contentResize', {\n content: this,\n width,\n height\n }).defaultPrevented) {\n return;\n }\n\n setWidthHeight(this.element, width, height);\n\n if (this.isImageContent() && !this.isError()) {\n const isInitialSizeUpdate = !this.displayedImageWidth && width;\n this.displayedImageWidth = width;\n this.displayedImageHeight = height;\n\n if (isInitialSizeUpdate) {\n this.loadImage(false);\n } else {\n this.updateSrcsetSizes();\n }\n\n if (this.slide) {\n this.instance.dispatch('imageSizeChange', {\n slide: this.slide,\n width,\n height,\n content: this\n });\n }\n }\n }\n /**\n * @returns {boolean} If the content can be zoomed\n */\n\n\n isZoomable() {\n return this.instance.applyFilters('isContentZoomable', this.isImageContent() && this.state !== LOAD_STATE.ERROR, this);\n }\n /**\n * Update image srcset sizes attribute based on width and height\n */\n\n\n updateSrcsetSizes() {\n // Handle srcset sizes attribute.\n //\n // Never lower quality, if it was increased previously.\n // Chrome does this automatically, Firefox and Safari do not,\n // so we store largest used size in dataset.\n if (!this.isImageContent() || !this.element || !this.data.srcset) {\n return;\n }\n\n const image =\n /** @type HTMLImageElement */\n this.element;\n const sizesWidth = this.instance.applyFilters('srcsetSizesWidth', this.displayedImageWidth, this);\n\n if (!image.dataset.largestUsedSize || sizesWidth > parseInt(image.dataset.largestUsedSize, 10)) {\n image.sizes = sizesWidth + 'px';\n image.dataset.largestUsedSize = String(sizesWidth);\n }\n }\n /**\n * @returns {boolean} If content should use a placeholder (from msrc by default)\n */\n\n\n usePlaceholder() {\n return this.instance.applyFilters('useContentPlaceholder', this.isImageContent(), this);\n }\n /**\n * Preload content with lazy-loading param\n */\n\n\n lazyLoad() {\n if (this.instance.dispatch('contentLazyLoad', {\n content: this\n }).defaultPrevented) {\n return;\n }\n\n this.load(true);\n }\n /**\n * @returns {boolean} If placeholder should be kept after content is loaded\n */\n\n\n keepPlaceholder() {\n return this.instance.applyFilters('isKeepingPlaceholder', this.isLoading(), this);\n }\n /**\n * Destroy the content\n */\n\n\n destroy() {\n this.hasSlide = false;\n this.slide = undefined;\n\n if (this.instance.dispatch('contentDestroy', {\n content: this\n }).defaultPrevented) {\n return;\n }\n\n this.remove();\n\n if (this.placeholder) {\n this.placeholder.destroy();\n this.placeholder = undefined;\n }\n\n if (this.isImageContent() && this.element) {\n this.element.onload = null;\n this.element.onerror = null;\n this.element = undefined;\n }\n }\n /**\n * Display error message\n */\n\n\n displayError() {\n if (this.slide) {\n var _this$instance$option, _this$instance$option2;\n\n let errorMsgEl = createElement('pswp__error-msg', 'div');\n errorMsgEl.innerText = (_this$instance$option = (_this$instance$option2 = this.instance.options) === null || _this$instance$option2 === void 0 ? void 0 : _this$instance$option2.errorMsg) !== null && _this$instance$option !== void 0 ? _this$instance$option : '';\n errorMsgEl =\n /** @type {HTMLDivElement} */\n this.instance.applyFilters('contentErrorElement', errorMsgEl, this);\n this.element = createElement('pswp__content pswp__error-msg-container', 'div');\n this.element.appendChild(errorMsgEl);\n this.slide.container.innerText = '';\n this.slide.container.appendChild(this.element);\n this.slide.updateContentSize(true);\n this.removePlaceholder();\n }\n }\n /**\n * Append the content\n */\n\n\n append() {\n if (this.isAttached || !this.element) {\n return;\n }\n\n this.isAttached = true;\n\n if (this.state === LOAD_STATE.ERROR) {\n this.displayError();\n return;\n }\n\n if (this.instance.dispatch('contentAppend', {\n content: this\n }).defaultPrevented) {\n return;\n }\n\n const supportsDecode = ('decode' in this.element);\n\n if (this.isImageContent()) {\n // Use decode() on nearby slides\n //\n // Nearby slide images are in DOM and not hidden via display:none.\n // However, they are placed offscreen (to the left and right side).\n //\n // Some browsers do not composite the image until it's actually visible,\n // using decode() helps.\n //\n // You might ask \"why dont you just decode() and then append all images\",\n // that's because I want to show image before it's fully loaded,\n // as browser can render parts of image while it is loading.\n // We do not do this in Safari due to partial loading bug.\n if (supportsDecode && this.slide && (!this.slide.isActive || isSafari())) {\n this.isDecoding = true; // purposefully using finally instead of then,\n // as if srcset sizes changes dynamically - it may cause decode error\n\n /** @type {HTMLImageElement} */\n\n this.element.decode().catch(() => {}).finally(() => {\n this.isDecoding = false;\n this.appendImage();\n });\n } else {\n this.appendImage();\n }\n } else if (this.slide && !this.element.parentNode) {\n this.slide.container.appendChild(this.element);\n }\n }\n /**\n * Activate the slide,\n * active slide is generally the current one,\n * meaning the user can see it.\n */\n\n\n activate() {\n if (this.instance.dispatch('contentActivate', {\n content: this\n }).defaultPrevented || !this.slide) {\n return;\n }\n\n if (this.isImageContent() && this.isDecoding && !isSafari()) {\n // add image to slide when it becomes active,\n // even if it's not finished decoding\n this.appendImage();\n } else if (this.isError()) {\n this.load(false, true); // try to reload\n }\n\n if (this.slide.holderElement) {\n this.slide.holderElement.setAttribute('aria-hidden', 'false');\n }\n }\n /**\n * Deactivate the content\n */\n\n\n deactivate() {\n this.instance.dispatch('contentDeactivate', {\n content: this\n });\n\n if (this.slide && this.slide.holderElement) {\n this.slide.holderElement.setAttribute('aria-hidden', 'true');\n }\n }\n /**\n * Remove the content from DOM\n */\n\n\n remove() {\n this.isAttached = false;\n\n if (this.instance.dispatch('contentRemove', {\n content: this\n }).defaultPrevented) {\n return;\n }\n\n if (this.element && this.element.parentNode) {\n this.element.remove();\n }\n\n if (this.placeholder && this.placeholder.element) {\n this.placeholder.element.remove();\n }\n }\n /**\n * Append the image content to slide container\n */\n\n\n appendImage() {\n if (!this.isAttached) {\n return;\n }\n\n if (this.instance.dispatch('contentAppendImage', {\n content: this\n }).defaultPrevented) {\n return;\n } // ensure that element exists and is not already appended\n\n\n if (this.slide && this.element && !this.element.parentNode) {\n this.slide.container.appendChild(this.element);\n }\n\n if (this.state === LOAD_STATE.LOADED || this.state === LOAD_STATE.ERROR) {\n this.removePlaceholder();\n }\n }\n\n}\n\n/** @typedef {import('./content.js').default} Content */\n\n/** @typedef {import('./slide.js').default} Slide */\n\n/** @typedef {import('./slide.js').SlideData} SlideData */\n\n/** @typedef {import('../core/base.js').default} PhotoSwipeBase */\n\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\n\nconst MIN_SLIDES_TO_CACHE = 5;\n/**\n * Lazy-load an image\n * This function is used both by Lightbox and PhotoSwipe core,\n * thus it can be called before dialog is opened.\n *\n * @param {SlideData} itemData Data about the slide\n * @param {PhotoSwipeBase} instance PhotoSwipe or PhotoSwipeLightbox instance\n * @param {number} index\n * @returns {Content} Image that is being decoded or false.\n */\n\nfunction lazyLoadData(itemData, instance, index) {\n const content = instance.createContentFromData(itemData, index);\n /** @type {ZoomLevel | undefined} */\n\n let zoomLevel;\n const {\n options\n } = instance; // We need to know dimensions of the image to preload it,\n // as it might use srcset, and we need to define sizes\n\n if (options) {\n zoomLevel = new ZoomLevel(options, itemData, -1);\n let viewportSize;\n\n if (instance.pswp) {\n viewportSize = instance.pswp.viewportSize;\n } else {\n viewportSize = getViewportSize(options, instance);\n }\n\n const panAreaSize = getPanAreaSize(options, viewportSize, itemData, index);\n zoomLevel.update(content.width, content.height, panAreaSize);\n }\n\n content.lazyLoad();\n\n if (zoomLevel) {\n content.setDisplayedSize(Math.ceil(content.width * zoomLevel.initial), Math.ceil(content.height * zoomLevel.initial));\n }\n\n return content;\n}\n/**\n * Lazy-loads specific slide.\n * This function is used both by Lightbox and PhotoSwipe core,\n * thus it can be called before dialog is opened.\n *\n * By default, it loads image based on viewport size and initial zoom level.\n *\n * @param {number} index Slide index\n * @param {PhotoSwipeBase} instance PhotoSwipe or PhotoSwipeLightbox eventable instance\n * @returns {Content | undefined}\n */\n\nfunction lazyLoadSlide(index, instance) {\n const itemData = instance.getItemData(index);\n\n if (instance.dispatch('lazyLoadSlide', {\n index,\n itemData\n }).defaultPrevented) {\n return;\n }\n\n return lazyLoadData(itemData, instance, index);\n}\n\nclass ContentLoader {\n /**\n * @param {PhotoSwipe} pswp\n */\n constructor(pswp) {\n this.pswp = pswp; // Total amount of cached images\n\n this.limit = Math.max(pswp.options.preload[0] + pswp.options.preload[1] + 1, MIN_SLIDES_TO_CACHE);\n /** @type {Content[]} */\n\n this._cachedItems = [];\n }\n /**\n * Lazy load nearby slides based on `preload` option.\n *\n * @param {number} [diff] Difference between slide indexes that was changed recently, or 0.\n */\n\n\n updateLazy(diff) {\n const {\n pswp\n } = this;\n\n if (pswp.dispatch('lazyLoad').defaultPrevented) {\n return;\n }\n\n const {\n preload\n } = pswp.options;\n const isForward = diff === undefined ? true : diff >= 0;\n let i; // preload[1] - num items to preload in forward direction\n\n for (i = 0; i <= preload[1]; i++) {\n this.loadSlideByIndex(pswp.currIndex + (isForward ? i : -i));\n } // preload[0] - num items to preload in backward direction\n\n\n for (i = 1; i <= preload[0]; i++) {\n this.loadSlideByIndex(pswp.currIndex + (isForward ? -i : i));\n }\n }\n /**\n * @param {number} initialIndex\n */\n\n\n loadSlideByIndex(initialIndex) {\n const index = this.pswp.getLoopedIndex(initialIndex); // try to get cached content\n\n let content = this.getContentByIndex(index);\n\n if (!content) {\n // no cached content, so try to load from scratch:\n content = lazyLoadSlide(index, this.pswp); // if content can be loaded, add it to cache:\n\n if (content) {\n this.addToCache(content);\n }\n }\n }\n /**\n * @param {Slide} slide\n * @returns {Content}\n */\n\n\n getContentBySlide(slide) {\n let content = this.getContentByIndex(slide.index);\n\n if (!content) {\n // create content if not found in cache\n content = this.pswp.createContentFromData(slide.data, slide.index);\n this.addToCache(content);\n } // assign slide to content\n\n\n content.setSlide(slide);\n return content;\n }\n /**\n * @param {Content} content\n */\n\n\n addToCache(content) {\n // move to the end of array\n this.removeByIndex(content.index);\n\n this._cachedItems.push(content);\n\n if (this._cachedItems.length > this.limit) {\n // Destroy the first content that's not attached\n const indexToRemove = this._cachedItems.findIndex(item => {\n return !item.isAttached && !item.hasSlide;\n });\n\n if (indexToRemove !== -1) {\n const removedItem = this._cachedItems.splice(indexToRemove, 1)[0];\n\n removedItem.destroy();\n }\n }\n }\n /**\n * Removes an image from cache, does not destroy() it, just removes.\n *\n * @param {number} index\n */\n\n\n removeByIndex(index) {\n const indexToRemove = this._cachedItems.findIndex(item => item.index === index);\n\n if (indexToRemove !== -1) {\n this._cachedItems.splice(indexToRemove, 1);\n }\n }\n /**\n * @param {number} index\n * @returns {Content | undefined}\n */\n\n\n getContentByIndex(index) {\n return this._cachedItems.find(content => content.index === index);\n }\n\n destroy() {\n this._cachedItems.forEach(content => content.destroy());\n\n this._cachedItems = [];\n }\n\n}\n\n/** @typedef {import(\"../photoswipe.js\").default} PhotoSwipe */\n\n/** @typedef {import(\"../slide/slide.js\").SlideData} SlideData */\n\n/**\n * PhotoSwipe base class that can retrieve data about every slide.\n * Shared by PhotoSwipe Core and PhotoSwipe Lightbox\n */\n\nclass PhotoSwipeBase extends Eventable {\n /**\n * Get total number of slides\n *\n * @returns {number}\n */\n getNumItems() {\n var _this$options;\n\n let numItems = 0;\n const dataSource = (_this$options = this.options) === null || _this$options === void 0 ? void 0 : _this$options.dataSource;\n\n if (dataSource && 'length' in dataSource) {\n // may be an array or just object with length property\n numItems = dataSource.length;\n } else if (dataSource && 'gallery' in dataSource) {\n // query DOM elements\n if (!dataSource.items) {\n dataSource.items = this._getGalleryDOMElements(dataSource.gallery);\n }\n\n if (dataSource.items) {\n numItems = dataSource.items.length;\n }\n } // legacy event, before filters were introduced\n\n\n const event = this.dispatch('numItems', {\n dataSource,\n numItems\n });\n return this.applyFilters('numItems', event.numItems, dataSource);\n }\n /**\n * @param {SlideData} slideData\n * @param {number} index\n * @returns {Content}\n */\n\n\n createContentFromData(slideData, index) {\n return new Content(slideData, this, index);\n }\n /**\n * Get item data by index.\n *\n * \"item data\" should contain normalized information that PhotoSwipe needs to generate a slide.\n * For example, it may contain properties like\n * `src`, `srcset`, `w`, `h`, which will be used to generate a slide with image.\n *\n * @param {number} index\n * @returns {SlideData}\n */\n\n\n getItemData(index) {\n var _this$options2;\n\n const dataSource = (_this$options2 = this.options) === null || _this$options2 === void 0 ? void 0 : _this$options2.dataSource;\n /** @type {SlideData | HTMLElement} */\n\n let dataSourceItem = {};\n\n if (Array.isArray(dataSource)) {\n // Datasource is an array of elements\n dataSourceItem = dataSource[index];\n } else if (dataSource && 'gallery' in dataSource) {\n // dataSource has gallery property,\n // thus it was created by Lightbox, based on\n // gallery and children options\n // query DOM elements\n if (!dataSource.items) {\n dataSource.items = this._getGalleryDOMElements(dataSource.gallery);\n }\n\n dataSourceItem = dataSource.items[index];\n }\n\n let itemData = dataSourceItem;\n\n if (itemData instanceof Element) {\n itemData = this._domElementToItemData(itemData);\n } // Dispatching the itemData event,\n // it's a legacy verion before filters were introduced\n\n\n const event = this.dispatch('itemData', {\n itemData: itemData || {},\n index\n });\n return this.applyFilters('itemData', event.itemData, index);\n }\n /**\n * Get array of gallery DOM elements,\n * based on childSelector and gallery element.\n *\n * @param {HTMLElement} galleryElement\n * @returns {HTMLElement[]}\n */\n\n\n _getGalleryDOMElements(galleryElement) {\n var _this$options3, _this$options4;\n\n if ((_this$options3 = this.options) !== null && _this$options3 !== void 0 && _this$options3.children || (_this$options4 = this.options) !== null && _this$options4 !== void 0 && _this$options4.childSelector) {\n return getElementsFromOption(this.options.children, this.options.childSelector, galleryElement) || [];\n }\n\n return [galleryElement];\n }\n /**\n * Converts DOM element to item data object.\n *\n * @param {HTMLElement} element DOM element\n * @returns {SlideData}\n */\n\n\n _domElementToItemData(element) {\n /** @type {SlideData} */\n const itemData = {\n element\n };\n const linkEl =\n /** @type {HTMLAnchorElement} */\n element.tagName === 'A' ? element : element.querySelector('a');\n\n if (linkEl) {\n // src comes from data-pswp-src attribute,\n // if it's empty link href is used\n itemData.src = linkEl.dataset.pswpSrc || linkEl.href;\n\n if (linkEl.dataset.pswpSrcset) {\n itemData.srcset = linkEl.dataset.pswpSrcset;\n }\n\n itemData.width = linkEl.dataset.pswpWidth ? parseInt(linkEl.dataset.pswpWidth, 10) : 0;\n itemData.height = linkEl.dataset.pswpHeight ? parseInt(linkEl.dataset.pswpHeight, 10) : 0; // support legacy w & h properties\n\n itemData.w = itemData.width;\n itemData.h = itemData.height;\n\n if (linkEl.dataset.pswpType) {\n itemData.type = linkEl.dataset.pswpType;\n }\n\n const thumbnailEl = element.querySelector('img');\n\n if (thumbnailEl) {\n var _thumbnailEl$getAttri;\n\n // msrc is URL to placeholder image that's displayed before large image is loaded\n // by default it's displayed only for the first slide\n itemData.msrc = thumbnailEl.currentSrc || thumbnailEl.src;\n itemData.alt = (_thumbnailEl$getAttri = thumbnailEl.getAttribute('alt')) !== null && _thumbnailEl$getAttri !== void 0 ? _thumbnailEl$getAttri : '';\n }\n\n if (linkEl.dataset.pswpCropped || linkEl.dataset.cropped) {\n itemData.thumbCropped = true;\n }\n }\n\n return this.applyFilters('domItemData', itemData, element, linkEl);\n }\n /**\n * Lazy-load by slide data\n *\n * @param {SlideData} itemData Data about the slide\n * @param {number} index\n * @returns {Content} Image that is being decoded or false.\n */\n\n\n lazyLoadData(itemData, index) {\n return lazyLoadData(itemData, this, index);\n }\n\n}\n\n/** @typedef {import('./photoswipe.js').default} PhotoSwipe */\n\n/** @typedef {import('./slide/get-thumb-bounds.js').Bounds} Bounds */\n\n/** @typedef {import('./util/animations.js').AnimationProps} AnimationProps */\n// some browsers do not paint\n// elements which opacity is set to 0,\n// since we need to pre-render elements for the animation -\n// we set it to the minimum amount\n\nconst MIN_OPACITY = 0.003;\n/**\n * Manages opening and closing transitions of the PhotoSwipe.\n *\n * It can perform zoom, fade or no transition.\n */\n\nclass Opener {\n /**\n * @param {PhotoSwipe} pswp\n */\n constructor(pswp) {\n this.pswp = pswp;\n this.isClosed = true;\n this.isOpen = false;\n this.isClosing = false;\n this.isOpening = false;\n /**\n * @private\n * @type {number | false | undefined}\n */\n\n this._duration = undefined;\n /** @private */\n\n this._useAnimation = false;\n /** @private */\n\n this._croppedZoom = false;\n /** @private */\n\n this._animateRootOpacity = false;\n /** @private */\n\n this._animateBgOpacity = false;\n /**\n * @private\n * @type { HTMLDivElement | HTMLImageElement | null | undefined }\n */\n\n this._placeholder = undefined;\n /**\n * @private\n * @type { HTMLDivElement | undefined }\n */\n\n this._opacityElement = undefined;\n /**\n * @private\n * @type { HTMLDivElement | undefined }\n */\n\n this._cropContainer1 = undefined;\n /**\n * @private\n * @type { HTMLElement | null | undefined }\n */\n\n this._cropContainer2 = undefined;\n /**\n * @private\n * @type {Bounds | undefined}\n */\n\n this._thumbBounds = undefined;\n this._prepareOpen = this._prepareOpen.bind(this); // Override initial zoom and pan position\n\n pswp.on('firstZoomPan', this._prepareOpen);\n }\n\n open() {\n this._prepareOpen();\n\n this._start();\n }\n\n close() {\n if (this.isClosed || this.isClosing || this.isOpening) {\n // if we close during opening animation\n // for now do nothing,\n // browsers aren't good at changing the direction of the CSS transition\n return;\n }\n\n const slide = this.pswp.currSlide;\n this.isOpen = false;\n this.isOpening = false;\n this.isClosing = true;\n this._duration = this.pswp.options.hideAnimationDuration;\n\n if (slide && slide.currZoomLevel * slide.width >= this.pswp.options.maxWidthToAnimate) {\n this._duration = 0;\n }\n\n this._applyStartProps();\n\n setTimeout(() => {\n this._start();\n }, this._croppedZoom ? 30 : 0);\n }\n /** @private */\n\n\n _prepareOpen() {\n this.pswp.off('firstZoomPan', this._prepareOpen);\n\n if (!this.isOpening) {\n const slide = this.pswp.currSlide;\n this.isOpening = true;\n this.isClosing = false;\n this._duration = this.pswp.options.showAnimationDuration;\n\n if (slide && slide.zoomLevels.initial * slide.width >= this.pswp.options.maxWidthToAnimate) {\n this._duration = 0;\n }\n\n this._applyStartProps();\n }\n }\n /** @private */\n\n\n _applyStartProps() {\n const {\n pswp\n } = this;\n const slide = this.pswp.currSlide;\n const {\n options\n } = pswp;\n\n if (options.showHideAnimationType === 'fade') {\n options.showHideOpacity = true;\n this._thumbBounds = undefined;\n } else if (options.showHideAnimationType === 'none') {\n options.showHideOpacity = false;\n this._duration = 0;\n this._thumbBounds = undefined;\n } else if (this.isOpening && pswp._initialThumbBounds) {\n // Use initial bounds if defined\n this._thumbBounds = pswp._initialThumbBounds;\n } else {\n this._thumbBounds = this.pswp.getThumbBounds();\n }\n\n this._placeholder = slide === null || slide === void 0 ? void 0 : slide.getPlaceholderElement();\n pswp.animations.stopAll(); // Discard animations when duration is less than 50ms\n\n this._useAnimation = Boolean(this._duration && this._duration > 50);\n this._animateZoom = Boolean(this._thumbBounds) && (slide === null || slide === void 0 ? void 0 : slide.content.usePlaceholder()) && (!this.isClosing || !pswp.mainScroll.isShifted());\n\n if (!this._animateZoom) {\n this._animateRootOpacity = true;\n\n if (this.isOpening && slide) {\n slide.zoomAndPanToInitial();\n slide.applyCurrentZoomPan();\n }\n } else {\n var _options$showHideOpac;\n\n this._animateRootOpacity = (_options$showHideOpac = options.showHideOpacity) !== null && _options$showHideOpac !== void 0 ? _options$showHideOpac : false;\n }\n\n this._animateBgOpacity = !this._animateRootOpacity && this.pswp.options.bgOpacity > MIN_OPACITY;\n this._opacityElement = this._animateRootOpacity ? pswp.element : pswp.bg;\n\n if (!this._useAnimation) {\n this._duration = 0;\n this._animateZoom = false;\n this._animateBgOpacity = false;\n this._animateRootOpacity = true;\n\n if (this.isOpening) {\n if (pswp.element) {\n pswp.element.style.opacity = String(MIN_OPACITY);\n }\n\n pswp.applyBgOpacity(1);\n }\n\n return;\n }\n\n if (this._animateZoom && this._thumbBounds && this._thumbBounds.innerRect) {\n var _this$pswp$currSlide;\n\n // Properties are used when animation from cropped thumbnail\n this._croppedZoom = true;\n this._cropContainer1 = this.pswp.container;\n this._cropContainer2 = (_this$pswp$currSlide = this.pswp.currSlide) === null || _this$pswp$currSlide === void 0 ? void 0 : _this$pswp$currSlide.holderElement;\n\n if (pswp.container) {\n pswp.container.style.overflow = 'hidden';\n pswp.container.style.width = pswp.viewportSize.x + 'px';\n }\n } else {\n this._croppedZoom = false;\n }\n\n if (this.isOpening) {\n // Apply styles before opening transition\n if (this._animateRootOpacity) {\n if (pswp.element) {\n pswp.element.style.opacity = String(MIN_OPACITY);\n }\n\n pswp.applyBgOpacity(1);\n } else {\n if (this._animateBgOpacity && pswp.bg) {\n pswp.bg.style.opacity = String(MIN_OPACITY);\n }\n\n if (pswp.element) {\n pswp.element.style.opacity = '1';\n }\n }\n\n if (this._animateZoom) {\n this._setClosedStateZoomPan();\n\n if (this._placeholder) {\n // tell browser that we plan to animate the placeholder\n this._placeholder.style.willChange = 'transform'; // hide placeholder to allow hiding of\n // elements that overlap it (such as icons over the thumbnail)\n\n this._placeholder.style.opacity = String(MIN_OPACITY);\n }\n }\n } else if (this.isClosing) {\n // hide nearby slides to make sure that\n // they are not painted during the transition\n if (pswp.mainScroll.itemHolders[0]) {\n pswp.mainScroll.itemHolders[0].el.style.display = 'none';\n }\n\n if (pswp.mainScroll.itemHolders[2]) {\n pswp.mainScroll.itemHolders[2].el.style.display = 'none';\n }\n\n if (this._croppedZoom) {\n if (pswp.mainScroll.x !== 0) {\n // shift the main scroller to zero position\n pswp.mainScroll.resetPosition();\n pswp.mainScroll.resize();\n }\n }\n }\n }\n /** @private */\n\n\n _start() {\n if (this.isOpening && this._useAnimation && this._placeholder && this._placeholder.tagName === 'IMG') {\n // To ensure smooth animation\n // we wait till the current slide image placeholder is decoded,\n // but no longer than 250ms,\n // and no shorter than 50ms\n // (just using requestanimationframe is not enough in Firefox,\n // for some reason)\n new Promise(resolve => {\n let decoded = false;\n let isDelaying = true;\n decodeImage(\n /** @type {HTMLImageElement} */\n this._placeholder).finally(() => {\n decoded = true;\n\n if (!isDelaying) {\n resolve(true);\n }\n });\n setTimeout(() => {\n isDelaying = false;\n\n if (decoded) {\n resolve(true);\n }\n }, 50);\n setTimeout(resolve, 250);\n }).finally(() => this._initiate());\n } else {\n this._initiate();\n }\n }\n /** @private */\n\n\n _initiate() {\n var _this$pswp$element, _this$pswp$element2;\n\n (_this$pswp$element = this.pswp.element) === null || _this$pswp$element === void 0 || _this$pswp$element.style.setProperty('--pswp-transition-duration', this._duration + 'ms');\n this.pswp.dispatch(this.isOpening ? 'openingAnimationStart' : 'closingAnimationStart'); // legacy event\n\n this.pswp.dispatch(\n /** @type {'initialZoomIn' | 'initialZoomOut'} */\n 'initialZoom' + (this.isOpening ? 'In' : 'Out'));\n (_this$pswp$element2 = this.pswp.element) === null || _this$pswp$element2 === void 0 || _this$pswp$element2.classList.toggle('pswp--ui-visible', this.isOpening);\n\n if (this.isOpening) {\n if (this._placeholder) {\n // unhide the placeholder\n this._placeholder.style.opacity = '1';\n }\n\n this._animateToOpenState();\n } else if (this.isClosing) {\n this._animateToClosedState();\n }\n\n if (!this._useAnimation) {\n this._onAnimationComplete();\n }\n }\n /** @private */\n\n\n _onAnimationComplete() {\n const {\n pswp\n } = this;\n this.isOpen = this.isOpening;\n this.isClosed = this.isClosing;\n this.isOpening = false;\n this.isClosing = false;\n pswp.dispatch(this.isOpen ? 'openingAnimationEnd' : 'closingAnimationEnd'); // legacy event\n\n pswp.dispatch(\n /** @type {'initialZoomInEnd' | 'initialZoomOutEnd'} */\n 'initialZoom' + (this.isOpen ? 'InEnd' : 'OutEnd'));\n\n if (this.isClosed) {\n pswp.destroy();\n } else if (this.isOpen) {\n var _pswp$currSlide;\n\n if (this._animateZoom && pswp.container) {\n pswp.container.style.overflow = 'visible';\n pswp.container.style.width = '100%';\n }\n\n (_pswp$currSlide = pswp.currSlide) === null || _pswp$currSlide === void 0 || _pswp$currSlide.applyCurrentZoomPan();\n }\n }\n /** @private */\n\n\n _animateToOpenState() {\n const {\n pswp\n } = this;\n\n if (this._animateZoom) {\n if (this._croppedZoom && this._cropContainer1 && this._cropContainer2) {\n this._animateTo(this._cropContainer1, 'transform', 'translate3d(0,0,0)');\n\n this._animateTo(this._cropContainer2, 'transform', 'none');\n }\n\n if (pswp.currSlide) {\n pswp.currSlide.zoomAndPanToInitial();\n\n this._animateTo(pswp.currSlide.container, 'transform', pswp.currSlide.getCurrentTransform());\n }\n }\n\n if (this._animateBgOpacity && pswp.bg) {\n this._animateTo(pswp.bg, 'opacity', String(pswp.options.bgOpacity));\n }\n\n if (this._animateRootOpacity && pswp.element) {\n this._animateTo(pswp.element, 'opacity', '1');\n }\n }\n /** @private */\n\n\n _animateToClosedState() {\n const {\n pswp\n } = this;\n\n if (this._animateZoom) {\n this._setClosedStateZoomPan(true);\n } // do not animate opacity if it's already at 0\n\n\n if (this._animateBgOpacity && pswp.bgOpacity > 0.01 && pswp.bg) {\n this._animateTo(pswp.bg, 'opacity', '0');\n }\n\n if (this._animateRootOpacity && pswp.element) {\n this._animateTo(pswp.element, 'opacity', '0');\n }\n }\n /**\n * @private\n * @param {boolean} [animate]\n */\n\n\n _setClosedStateZoomPan(animate) {\n if (!this._thumbBounds) return;\n const {\n pswp\n } = this;\n const {\n innerRect\n } = this._thumbBounds;\n const {\n currSlide,\n viewportSize\n } = pswp;\n\n if (this._croppedZoom && innerRect && this._cropContainer1 && this._cropContainer2) {\n const containerOnePanX = -viewportSize.x + (this._thumbBounds.x - innerRect.x) + innerRect.w;\n const containerOnePanY = -viewportSize.y + (this._thumbBounds.y - innerRect.y) + innerRect.h;\n const containerTwoPanX = viewportSize.x - innerRect.w;\n const containerTwoPanY = viewportSize.y - innerRect.h;\n\n if (animate) {\n this._animateTo(this._cropContainer1, 'transform', toTransformString(containerOnePanX, containerOnePanY));\n\n this._animateTo(this._cropContainer2, 'transform', toTransformString(containerTwoPanX, containerTwoPanY));\n } else {\n setTransform(this._cropContainer1, containerOnePanX, containerOnePanY);\n setTransform(this._cropContainer2, containerTwoPanX, containerTwoPanY);\n }\n }\n\n if (currSlide) {\n equalizePoints(currSlide.pan, innerRect || this._thumbBounds);\n currSlide.currZoomLevel = this._thumbBounds.w / currSlide.width;\n\n if (animate) {\n this._animateTo(currSlide.container, 'transform', currSlide.getCurrentTransform());\n } else {\n currSlide.applyCurrentZoomPan();\n }\n }\n }\n /**\n * @private\n * @param {HTMLElement} target\n * @param {'transform' | 'opacity'} prop\n * @param {string} propValue\n */\n\n\n _animateTo(target, prop, propValue) {\n if (!this._duration) {\n target.style[prop] = propValue;\n return;\n }\n\n const {\n animations\n } = this.pswp;\n /** @type {AnimationProps} */\n\n const animProps = {\n duration: this._duration,\n easing: this.pswp.options.easing,\n onComplete: () => {\n if (!animations.activeAnimations.length) {\n this._onAnimationComplete();\n }\n },\n target\n };\n animProps[prop] = propValue;\n animations.startTransition(animProps);\n }\n\n}\n\n/**\n * @template T\n * @typedef {import('./types.js').Type} Type\n */\n\n/** @typedef {import('./slide/slide.js').SlideData} SlideData */\n\n/** @typedef {import('./slide/zoom-level.js').ZoomLevelOption} ZoomLevelOption */\n\n/** @typedef {import('./ui/ui-element.js').UIElementData} UIElementData */\n\n/** @typedef {import('./main-scroll.js').ItemHolder} ItemHolder */\n\n/** @typedef {import('./core/eventable.js').PhotoSwipeEventsMap} PhotoSwipeEventsMap */\n\n/** @typedef {import('./core/eventable.js').PhotoSwipeFiltersMap} PhotoSwipeFiltersMap */\n\n/** @typedef {import('./slide/get-thumb-bounds').Bounds} Bounds */\n\n/**\n * @template {keyof PhotoSwipeEventsMap} T\n * @typedef {import('./core/eventable.js').EventCallback} EventCallback\n */\n\n/**\n * @template {keyof PhotoSwipeEventsMap} T\n * @typedef {import('./core/eventable.js').AugmentedEvent} AugmentedEvent\n */\n\n/** @typedef {{ x: number; y: number; id?: string | number }} Point */\n\n/** @typedef {{ top: number; bottom: number; left: number; right: number }} Padding */\n\n/** @typedef {SlideData[]} DataSourceArray */\n\n/** @typedef {{ gallery: HTMLElement; items?: HTMLElement[] }} DataSourceObject */\n\n/** @typedef {DataSourceArray | DataSourceObject} DataSource */\n\n/** @typedef {(point: Point, originalEvent: PointerEvent) => void} ActionFn */\n\n/** @typedef {'close' | 'next' | 'zoom' | 'zoom-or-close' | 'toggle-controls'} ActionType */\n\n/** @typedef {Type | { default: Type }} PhotoSwipeModule */\n\n/** @typedef {PhotoSwipeModule | Promise | (() => Promise)} PhotoSwipeModuleOption */\n\n/**\n * @typedef {string | NodeListOf | HTMLElement[] | HTMLElement} ElementProvider\n */\n\n/** @typedef {Partial} PhotoSwipeOptions https://photoswipe.com/options/ */\n\n/**\n * @typedef {Object} PreparedPhotoSwipeOptions\n *\n * @prop {DataSource} [dataSource]\n * Pass an array of any items via dataSource option. Its length will determine amount of slides\n * (which may be modified further from numItems event).\n *\n * Each item should contain data that you need to generate slide\n * (for image slide it would be src (image URL), width (image width), height, srcset, alt).\n *\n * If these properties are not present in your initial array, you may \"pre-parse\" each item from itemData filter.\n *\n * @prop {number} bgOpacity\n * Background backdrop opacity, always define it via this option and not via CSS rgba color.\n *\n * @prop {number} spacing\n * Spacing between slides. Defined as ratio relative to the viewport width (0.1 = 10% of viewport).\n *\n * @prop {boolean} allowPanToNext\n * Allow swipe navigation to the next slide when the current slide is zoomed. Does not apply to mouse events.\n *\n * @prop {boolean} loop\n * If set to true you'll be able to swipe from the last to the first image.\n * Option is always false when there are less than 3 slides.\n *\n * @prop {boolean} [wheelToZoom]\n * By default PhotoSwipe zooms image with ctrl-wheel, if you enable this option - image will zoom just via wheel.\n *\n * @prop {boolean} pinchToClose\n * Pinch touch gesture to close the gallery.\n *\n * @prop {boolean} closeOnVerticalDrag\n * Vertical drag gesture to close the PhotoSwipe.\n *\n * @prop {Padding} [padding]\n * Slide area padding (in pixels).\n *\n * @prop {(viewportSize: Point, itemData: SlideData, index: number) => Padding} [paddingFn]\n * The option is checked frequently, so make sure it's performant. Overrides padding option if defined. For example:\n *\n * @prop {number | false} hideAnimationDuration\n * Transition duration in milliseconds, can be 0.\n *\n * @prop {number | false} showAnimationDuration\n * Transition duration in milliseconds, can be 0.\n *\n * @prop {number | false} zoomAnimationDuration\n * Transition duration in milliseconds, can be 0.\n *\n * @prop {string} easing\n * String, 'cubic-bezier(.4,0,.22,1)'. CSS easing function for open/close/zoom transitions.\n *\n * @prop {boolean} escKey\n * Esc key to close.\n *\n * @prop {boolean} arrowKeys\n * Left/right arrow keys for navigation.\n *\n * @prop {boolean} trapFocus\n * Trap focus within PhotoSwipe element while it's open.\n *\n * @prop {boolean} returnFocus\n * Restore focus the last active element after PhotoSwipe is closed.\n *\n * @prop {boolean} clickToCloseNonZoomable\n * If image is not zoomable (for example, smaller than viewport) it can be closed by clicking on it.\n *\n * @prop {ActionType | ActionFn | false} imageClickAction\n * Refer to click and tap actions page.\n *\n * @prop {ActionType | ActionFn | false} bgClickAction\n * Refer to click and tap actions page.\n *\n * @prop {ActionType | ActionFn | false} tapAction\n * Refer to click and tap actions page.\n *\n * @prop {ActionType | ActionFn | false} doubleTapAction\n * Refer to click and tap actions page.\n *\n * @prop {number} preloaderDelay\n * Delay before the loading indicator will be displayed,\n * if image is loaded during it - the indicator will not be displayed at all. Can be zero.\n *\n * @prop {string} indexIndicatorSep\n * Used for slide count indicator (\"1 of 10 \").\n *\n * @prop {(options: PhotoSwipeOptions, pswp: PhotoSwipeBase) => Point} [getViewportSizeFn]\n * A function that should return slide viewport width and height, in format {x: 100, y: 100}.\n *\n * @prop {string} errorMsg\n * Message to display when the image wasn't able to load. If you need to display HTML - use contentErrorElement filter.\n *\n * @prop {[number, number]} preload\n * Lazy loading of nearby slides based on direction of movement. Should be an array with two integers,\n * first one - number of items to preload before the current image, second one - after the current image.\n * Two nearby images are always loaded.\n *\n * @prop {string} [mainClass]\n * Class that will be added to the root element of PhotoSwipe, may contain multiple separated by space.\n * Example on Styling page.\n *\n * @prop {HTMLElement} [appendToEl]\n * Element to which PhotoSwipe dialog will be appended when it opens.\n *\n * @prop {number} maxWidthToAnimate\n * Maximum width of image to animate, if initial rendered image width\n * is larger than this value - the opening/closing transition will be automatically disabled.\n *\n * @prop {string} [closeTitle]\n * Translating\n *\n * @prop {string} [zoomTitle]\n * Translating\n *\n * @prop {string} [arrowPrevTitle]\n * Translating\n *\n * @prop {string} [arrowNextTitle]\n * Translating\n *\n * @prop {'zoom' | 'fade' | 'none'} [showHideAnimationType]\n * To adjust opening or closing transition type use lightbox option `showHideAnimationType` (`String`).\n * It supports three values - `zoom` (default), `fade` (default if there is no thumbnail) and `none`.\n *\n * Animations are automatically disabled if user `(prefers-reduced-motion: reduce)`.\n *\n * @prop {number} index\n * Defines start slide index.\n *\n * @prop {(e: MouseEvent) => number} [getClickedIndexFn]\n *\n * @prop {boolean} [arrowPrev]\n * @prop {boolean} [arrowNext]\n * @prop {boolean} [zoom]\n * @prop {boolean} [close]\n * @prop {boolean} [counter]\n *\n * @prop {string} [arrowPrevSVG]\n * @prop {string} [arrowNextSVG]\n * @prop {string} [zoomSVG]\n * @prop {string} [closeSVG]\n * @prop {string} [counterSVG]\n *\n * @prop {string} [arrowPrevTitle]\n * @prop {string} [arrowNextTitle]\n * @prop {string} [zoomTitle]\n * @prop {string} [closeTitle]\n * @prop {string} [counterTitle]\n *\n * @prop {ZoomLevelOption} [initialZoomLevel]\n * @prop {ZoomLevelOption} [secondaryZoomLevel]\n * @prop {ZoomLevelOption} [maxZoomLevel]\n *\n * @prop {boolean} [mouseMovePan]\n * @prop {Point | null} [initialPointerPos]\n * @prop {boolean} [showHideOpacity]\n *\n * @prop {PhotoSwipeModuleOption} [pswpModule]\n * @prop {() => Promise} [openPromise]\n * @prop {boolean} [preloadFirstSlide]\n * @prop {ElementProvider} [gallery]\n * @prop {string} [gallerySelector]\n * @prop {ElementProvider} [children]\n * @prop {string} [childSelector]\n * @prop {string | false} [thumbSelector]\n */\n\n/** @type {PreparedPhotoSwipeOptions} */\n\nconst defaultOptions = {\n allowPanToNext: true,\n spacing: 0.1,\n loop: true,\n pinchToClose: true,\n closeOnVerticalDrag: true,\n hideAnimationDuration: 333,\n showAnimationDuration: 333,\n zoomAnimationDuration: 333,\n escKey: true,\n arrowKeys: true,\n trapFocus: true,\n returnFocus: true,\n maxWidthToAnimate: 4000,\n clickToCloseNonZoomable: true,\n imageClickAction: 'zoom-or-close',\n bgClickAction: 'close',\n tapAction: 'toggle-controls',\n doubleTapAction: 'zoom',\n indexIndicatorSep: ' / ',\n preloaderDelay: 2000,\n bgOpacity: 0.8,\n index: 0,\n errorMsg: 'The image cannot be loaded',\n preload: [1, 2],\n easing: 'cubic-bezier(.4,0,.22,1)'\n};\n/**\n * PhotoSwipe Core\n */\n\nclass PhotoSwipe extends PhotoSwipeBase {\n /**\n * @param {PhotoSwipeOptions} [options]\n */\n constructor(options) {\n super();\n this.options = this._prepareOptions(options || {});\n /**\n * offset of viewport relative to document\n *\n * @type {Point}\n */\n\n this.offset = {\n x: 0,\n y: 0\n };\n /**\n * @type {Point}\n * @private\n */\n\n this._prevViewportSize = {\n x: 0,\n y: 0\n };\n /**\n * Size of scrollable PhotoSwipe viewport\n *\n * @type {Point}\n */\n\n this.viewportSize = {\n x: 0,\n y: 0\n };\n /**\n * background (backdrop) opacity\n */\n\n this.bgOpacity = 1;\n this.currIndex = 0;\n this.potentialIndex = 0;\n this.isOpen = false;\n this.isDestroying = false;\n this.hasMouse = false;\n /**\n * @private\n * @type {SlideData}\n */\n\n this._initialItemData = {};\n /** @type {Bounds | undefined} */\n\n this._initialThumbBounds = undefined;\n /** @type {HTMLDivElement | undefined} */\n\n this.topBar = undefined;\n /** @type {HTMLDivElement | undefined} */\n\n this.element = undefined;\n /** @type {HTMLDivElement | undefined} */\n\n this.template = undefined;\n /** @type {HTMLDivElement | undefined} */\n\n this.container = undefined;\n /** @type {HTMLElement | undefined} */\n\n this.scrollWrap = undefined;\n /** @type {Slide | undefined} */\n\n this.currSlide = undefined;\n this.events = new DOMEvents();\n this.animations = new Animations();\n this.mainScroll = new MainScroll(this);\n this.gestures = new Gestures(this);\n this.opener = new Opener(this);\n this.keyboard = new Keyboard(this);\n this.contentLoader = new ContentLoader(this);\n }\n /** @returns {boolean} */\n\n\n init() {\n if (this.isOpen || this.isDestroying) {\n return false;\n }\n\n this.isOpen = true;\n this.dispatch('init'); // legacy\n\n this.dispatch('beforeOpen');\n\n this._createMainStructure(); // add classes to the root element of PhotoSwipe\n\n\n let rootClasses = 'pswp--open';\n\n if (this.gestures.supportsTouch) {\n rootClasses += ' pswp--touch';\n }\n\n if (this.options.mainClass) {\n rootClasses += ' ' + this.options.mainClass;\n }\n\n if (this.element) {\n this.element.className += ' ' + rootClasses;\n }\n\n this.currIndex = this.options.index || 0;\n this.potentialIndex = this.currIndex;\n this.dispatch('firstUpdate'); // starting index can be modified here\n // initialize scroll wheel handler to block the scroll\n\n this.scrollWheel = new ScrollWheel(this); // sanitize index\n\n if (Number.isNaN(this.currIndex) || this.currIndex < 0 || this.currIndex >= this.getNumItems()) {\n this.currIndex = 0;\n }\n\n if (!this.gestures.supportsTouch) {\n // enable mouse features if no touch support detected\n this.mouseDetected();\n } // causes forced synchronous layout\n\n\n this.updateSize();\n this.offset.y = window.pageYOffset;\n this._initialItemData = this.getItemData(this.currIndex);\n this.dispatch('gettingData', {\n index: this.currIndex,\n data: this._initialItemData,\n slide: undefined\n }); // *Layout* - calculate size and position of elements here\n\n this._initialThumbBounds = this.getThumbBounds();\n this.dispatch('initialLayout');\n this.on('openingAnimationEnd', () => {\n const {\n itemHolders\n } = this.mainScroll; // Add content to the previous and next slide\n\n if (itemHolders[0]) {\n itemHolders[0].el.style.display = 'block';\n this.setContent(itemHolders[0], this.currIndex - 1);\n }\n\n if (itemHolders[2]) {\n itemHolders[2].el.style.display = 'block';\n this.setContent(itemHolders[2], this.currIndex + 1);\n }\n\n this.appendHeavy();\n this.contentLoader.updateLazy();\n this.events.add(window, 'resize', this._handlePageResize.bind(this));\n this.events.add(window, 'scroll', this._updatePageScrollOffset.bind(this));\n this.dispatch('bindEvents');\n }); // set content for center slide (first time)\n\n if (this.mainScroll.itemHolders[1]) {\n this.setContent(this.mainScroll.itemHolders[1], this.currIndex);\n }\n\n this.dispatch('change');\n this.opener.open();\n this.dispatch('afterInit');\n return true;\n }\n /**\n * Get looped slide index\n * (for example, -1 will return the last slide)\n *\n * @param {number} index\n * @returns {number}\n */\n\n\n getLoopedIndex(index) {\n const numSlides = this.getNumItems();\n\n if (this.options.loop) {\n if (index > numSlides - 1) {\n index -= numSlides;\n }\n\n if (index < 0) {\n index += numSlides;\n }\n }\n\n return clamp(index, 0, numSlides - 1);\n }\n\n appendHeavy() {\n this.mainScroll.itemHolders.forEach(itemHolder => {\n var _itemHolder$slide;\n\n (_itemHolder$slide = itemHolder.slide) === null || _itemHolder$slide === void 0 || _itemHolder$slide.appendHeavy();\n });\n }\n /**\n * Change the slide\n * @param {number} index New index\n */\n\n\n goTo(index) {\n this.mainScroll.moveIndexBy(this.getLoopedIndex(index) - this.potentialIndex);\n }\n /**\n * Go to the next slide.\n */\n\n\n next() {\n this.goTo(this.potentialIndex + 1);\n }\n /**\n * Go to the previous slide.\n */\n\n\n prev() {\n this.goTo(this.potentialIndex - 1);\n }\n /**\n * @see slide/slide.js zoomTo\n *\n * @param {Parameters} args\n */\n\n\n zoomTo(...args) {\n var _this$currSlide;\n\n (_this$currSlide = this.currSlide) === null || _this$currSlide === void 0 || _this$currSlide.zoomTo(...args);\n }\n /**\n * @see slide/slide.js toggleZoom\n */\n\n\n toggleZoom() {\n var _this$currSlide2;\n\n (_this$currSlide2 = this.currSlide) === null || _this$currSlide2 === void 0 || _this$currSlide2.toggleZoom();\n }\n /**\n * Close the gallery.\n * After closing transition ends - destroy it\n */\n\n\n close() {\n if (!this.opener.isOpen || this.isDestroying) {\n return;\n }\n\n this.isDestroying = true;\n this.dispatch('close');\n this.events.removeAll();\n this.opener.close();\n }\n /**\n * Destroys the gallery:\n * - instantly closes the gallery\n * - unbinds events,\n * - cleans intervals and timeouts\n * - removes elements from DOM\n */\n\n\n destroy() {\n var _this$element;\n\n if (!this.isDestroying) {\n this.options.showHideAnimationType = 'none';\n this.close();\n return;\n }\n\n this.dispatch('destroy');\n this._listeners = {};\n\n if (this.scrollWrap) {\n this.scrollWrap.ontouchmove = null;\n this.scrollWrap.ontouchend = null;\n }\n\n (_this$element = this.element) === null || _this$element === void 0 || _this$element.remove();\n this.mainScroll.itemHolders.forEach(itemHolder => {\n var _itemHolder$slide2;\n\n (_itemHolder$slide2 = itemHolder.slide) === null || _itemHolder$slide2 === void 0 || _itemHolder$slide2.destroy();\n });\n this.contentLoader.destroy();\n this.events.removeAll();\n }\n /**\n * Refresh/reload content of a slide by its index\n *\n * @param {number} slideIndex\n */\n\n\n refreshSlideContent(slideIndex) {\n this.contentLoader.removeByIndex(slideIndex);\n this.mainScroll.itemHolders.forEach((itemHolder, i) => {\n var _this$currSlide$index, _this$currSlide3;\n\n let potentialHolderIndex = ((_this$currSlide$index = (_this$currSlide3 = this.currSlide) === null || _this$currSlide3 === void 0 ? void 0 : _this$currSlide3.index) !== null && _this$currSlide$index !== void 0 ? _this$currSlide$index : 0) - 1 + i;\n\n if (this.canLoop()) {\n potentialHolderIndex = this.getLoopedIndex(potentialHolderIndex);\n }\n\n if (potentialHolderIndex === slideIndex) {\n // set the new slide content\n this.setContent(itemHolder, slideIndex, true); // activate the new slide if it's current\n\n if (i === 1) {\n var _itemHolder$slide3;\n\n this.currSlide = itemHolder.slide;\n (_itemHolder$slide3 = itemHolder.slide) === null || _itemHolder$slide3 === void 0 || _itemHolder$slide3.setIsActive(true);\n }\n }\n });\n this.dispatch('change');\n }\n /**\n * Set slide content\n *\n * @param {ItemHolder} holder mainScroll.itemHolders array item\n * @param {number} index Slide index\n * @param {boolean} [force] If content should be set even if index wasn't changed\n */\n\n\n setContent(holder, index, force) {\n if (this.canLoop()) {\n index = this.getLoopedIndex(index);\n }\n\n if (holder.slide) {\n if (holder.slide.index === index && !force) {\n // exit if holder already contains this slide\n // this could be common when just three slides are used\n return;\n } // destroy previous slide\n\n\n holder.slide.destroy();\n holder.slide = undefined;\n } // exit if no loop and index is out of bounds\n\n\n if (!this.canLoop() && (index < 0 || index >= this.getNumItems())) {\n return;\n }\n\n const itemData = this.getItemData(index);\n holder.slide = new Slide(itemData, index, this); // set current slide\n\n if (index === this.currIndex) {\n this.currSlide = holder.slide;\n }\n\n holder.slide.append(holder.el);\n }\n /** @returns {Point} */\n\n\n getViewportCenterPoint() {\n return {\n x: this.viewportSize.x / 2,\n y: this.viewportSize.y / 2\n };\n }\n /**\n * Update size of all elements.\n * Executed on init and on page resize.\n *\n * @param {boolean} [force] Update size even if size of viewport was not changed.\n */\n\n\n updateSize(force) {\n // let item;\n // let itemIndex;\n if (this.isDestroying) {\n // exit if PhotoSwipe is closed or closing\n // (to avoid errors, as resize event might be delayed)\n return;\n } //const newWidth = this.scrollWrap.clientWidth;\n //const newHeight = this.scrollWrap.clientHeight;\n\n\n const newViewportSize = getViewportSize(this.options, this);\n\n if (!force && pointsEqual(newViewportSize, this._prevViewportSize)) {\n // Exit if dimensions were not changed\n return;\n } //this._prevViewportSize.x = newWidth;\n //this._prevViewportSize.y = newHeight;\n\n\n equalizePoints(this._prevViewportSize, newViewportSize);\n this.dispatch('beforeResize');\n equalizePoints(this.viewportSize, this._prevViewportSize);\n\n this._updatePageScrollOffset();\n\n this.dispatch('viewportSize'); // Resize slides only after opener animation is finished\n // and don't re-calculate size on inital size update\n\n this.mainScroll.resize(this.opener.isOpen);\n\n if (!this.hasMouse && window.matchMedia('(any-hover: hover)').matches) {\n this.mouseDetected();\n }\n\n this.dispatch('resize');\n }\n /**\n * @param {number} opacity\n */\n\n\n applyBgOpacity(opacity) {\n this.bgOpacity = Math.max(opacity, 0);\n\n if (this.bg) {\n this.bg.style.opacity = String(this.bgOpacity * this.options.bgOpacity);\n }\n }\n /**\n * Whether mouse is detected\n */\n\n\n mouseDetected() {\n if (!this.hasMouse) {\n var _this$element2;\n\n this.hasMouse = true;\n (_this$element2 = this.element) === null || _this$element2 === void 0 || _this$element2.classList.add('pswp--has_mouse');\n }\n }\n /**\n * Page resize event handler\n *\n * @private\n */\n\n\n _handlePageResize() {\n this.updateSize(); // In iOS webview, if element size depends on document size,\n // it'll be measured incorrectly in resize event\n //\n // https://bugs.webkit.org/show_bug.cgi?id=170595\n // https://hackernoon.com/onresize-event-broken-in-mobile-safari-d8469027bf4d\n\n if (/iPhone|iPad|iPod/i.test(window.navigator.userAgent)) {\n setTimeout(() => {\n this.updateSize();\n }, 500);\n }\n }\n /**\n * Page scroll offset is used\n * to get correct coordinates\n * relative to PhotoSwipe viewport.\n *\n * @private\n */\n\n\n _updatePageScrollOffset() {\n this.setScrollOffset(0, window.pageYOffset);\n }\n /**\n * @param {number} x\n * @param {number} y\n */\n\n\n setScrollOffset(x, y) {\n this.offset.x = x;\n this.offset.y = y;\n this.dispatch('updateScrollOffset');\n }\n /**\n * Create main HTML structure of PhotoSwipe,\n * and add it to DOM\n *\n * @private\n */\n\n\n _createMainStructure() {\n // root DOM element of PhotoSwipe (.pswp)\n this.element = createElement('pswp', 'div');\n this.element.setAttribute('tabindex', '-1');\n this.element.setAttribute('role', 'dialog'); // template is legacy prop\n\n this.template = this.element; // Background is added as a separate element,\n // as animating opacity is faster than animating rgba()\n\n this.bg = createElement('pswp__bg', 'div', this.element);\n this.scrollWrap = createElement('pswp__scroll-wrap', 'section', this.element);\n this.container = createElement('pswp__container', 'div', this.scrollWrap); // aria pattern: carousel\n\n this.scrollWrap.setAttribute('aria-roledescription', 'carousel');\n this.container.setAttribute('aria-live', 'off');\n this.container.setAttribute('id', 'pswp__items');\n this.mainScroll.appendHolders();\n this.ui = new UI(this);\n this.ui.init(); // append to DOM\n\n (this.options.appendToEl || document.body).appendChild(this.element);\n }\n /**\n * Get position and dimensions of small thumbnail\n * {x:,y:,w:}\n *\n * Height is optional (calculated based on the large image)\n *\n * @returns {Bounds | undefined}\n */\n\n\n getThumbBounds() {\n return getThumbBounds(this.currIndex, this.currSlide ? this.currSlide.data : this._initialItemData, this);\n }\n /**\n * If the PhotoSwipe can have continuous loop\n * @returns Boolean\n */\n\n\n canLoop() {\n return this.options.loop && this.getNumItems() > 2;\n }\n /**\n * @private\n * @param {PhotoSwipeOptions} options\n * @returns {PreparedPhotoSwipeOptions}\n */\n\n\n _prepareOptions(options) {\n if (window.matchMedia('(prefers-reduced-motion), (update: slow)').matches) {\n options.showHideAnimationType = 'none';\n options.zoomAnimationDuration = 0;\n }\n /** @type {PreparedPhotoSwipeOptions} */\n\n\n return { ...defaultOptions,\n ...options\n };\n }\n\n}\n\nexport { PhotoSwipe as default };\n//# sourceMappingURL=photoswipe.esm.js.map\n","/**\n * JS-Share - vanilla javascript social networks and messengers sharing\n * https://github.com/delfimov/JS-Share\n *\n * Copyright (c) 2017-2018 by Dmitry Elfimov\n * Released under the MIT License.\n * http://www.opensource.org/licenses/mit-license.php\n */\n\n/**\n * Minimum setup example:\n *\n
Share:\n \n \n \n \n \n \n \n \n \n \n \n \n
\n\n var shareItems = document.querySelectorAll('.social_share');\n for (var i = 0; i < shareItems.length; i += 1) {\n shareItems[i].addEventListener('click', function share(e) {\n return JSShare.go(this);\n });\n }\n\n *\n * Inline example:\n *\n I like it\n\n */\n\n\n;(function (factory) {\n var registeredInModuleLoader;\n if (typeof define === 'function' && define.amd) {\n define(factory);\n registeredInModuleLoader = true;\n }\n if (typeof exports === 'object') {\n module.exports = factory();\n registeredInModuleLoader = true;\n }\n if (!registeredInModuleLoader) {\n return window.JSShare = factory();\n }\n}(function () {\n\n /**\n * indexOf for old browsers\n */\n if (!('indexOf' in Array.prototype)) {\n Array.prototype.indexOf = function(find, i /*opt*/) {\n if (i === undefined) i = 0;\n if (i < 0) i += this.length;\n if (i < 0) i = 0;\n for (var n = this.length; i < n; i++)\n if (i in this && this[i] === find)\n return i;\n return -1;\n };\n }\n\n /**\n * Object Extending Functionality\n */\n function _extend(out) {\n out = out || {};\n for (var i = 1; i < arguments.length; i++) {\n if (!arguments[i]) {\n continue;\n }\n for (var key in arguments[i]) {\n if (arguments[i].hasOwnProperty(key)) {\n out[key] = arguments[i][key];\n }\n }\n }\n return out;\n }\n\n /**\n * Get data-attributes\n */\n function _getData(el, defaultOptions) {\n var data = {};\n for (var key in defaultOptions) {\n if (defaultOptions.hasOwnProperty(key)) {\n var value = el.getAttribute('data-' + key);\n if (value !== null && typeof value != 'undefined') {\n data[key] = value;\n }\n }\n }\n return data;\n }\n\n /**\n * Open a popup window with sharing info\n * @param url\n * @param _options\n * @returns {Window}\n * @private\n */\n function _popup (url, _options) {\n return window.open(url, '', 'toolbar=0,status=0,scrollbars=1,width=' + _options.popup_width + ',height=' + _options.popup_height);\n }\n\n /**\n * Get URL for sharing based on options\n * @param options\n * @returns {string | *}\n * @private\n */\n function _getURL(options) {\n if (options.url === '') {\n options.url = location.href;\n }\n var url = options.url;\n var utm = '';\n if (options.utm_source !== '') {\n utm += '&utm_source=' + options.utm_source;\n }\n if (options.utm_medium !== '') {\n utm += '&utm_medium=' + options.utm_medium;\n }\n if (options.utm_campaign !== '') {\n utm += '&utm_campaign=' + options.utm_campaign;\n }\n if (utm !== '') {\n url = url + '?' + utm;\n }\n return url;\n }\n\n var social = {\n // default handler\n unknown: function (options) {\n return encodeURIComponent(_getURL(options));\n },\n\n // vk.com - ВКонтакте\n vk: function (options) {\n return 'http://vk.com/share.php'\n + '?url=' + encodeURIComponent(_getURL(options))\n + '&title=' + encodeURIComponent(options.title)\n + '&description=' + encodeURIComponent(options.text)\n + '&image=' + encodeURIComponent(options.image)\n + '&noparse=true';\n },\n\n // ok.ru - Одноклассники\n ok: function (options) {\n return 'https://connect.ok.ru/offer'\n + '?url=' + encodeURIComponent(_getURL(options))\n + '&title=' + encodeURIComponent(options.title)\n + '&description=' + encodeURIComponent(options.text)\n + '&imageUrl=' + encodeURIComponent(options.image);\n },\n\n // Facebook\n fb: function (options) {\n return 'https://www.facebook.com/sharer.php'\n + '?u=' + encodeURIComponent(_getURL(options));\n },\n\n facebook: function (options) {\n return 'https://www.facebook.com/sharer.php'\n + '?u=' + encodeURIComponent(_getURL(options));\n },\n\n // Google bookmarks\n googlebookmarks: function (options) {\n return 'https://www.google.com/bookmarks/mark'\n + '?op=edit'\n + '&bkmk=' + encodeURIComponent(_getURL(options))\n + '&title=' + encodeURIComponent(options.title)\n + '&annotation=' + encodeURIComponent(options.text)\n + '&labels=';\n },\n\n // Livejournal\n livejournal: function (options) {\n return 'http://livejournal.com/update.bml'\n + '?subject=' + encodeURIComponent(options.title)\n + '&event=' + encodeURIComponent(options.text + '
' + options.title + '')\n + '&transform=1';\n },\n\n // Tumblr\n tumblr: function (options) {\n return 'https://www.tumblr.com/widgets/share/tool'\n + '?canonicalUrl=' + encodeURIComponent(_getURL(options))\n + '&title=' + encodeURIComponent(options.title)\n + '&caption=' + encodeURIComponent(options.text)\n + '&tags=';\n },\n\n // Pinterest\n pinterest: function (options) {\n return 'http://pinterest.com/pin/create/link/'\n + '?url=' + encodeURIComponent(_getURL(options));\n },\n\n // linkedin\n linkedin: function (options) {\n return 'https://www.linkedin.com/shareArticle'\n + '?mini=true'\n + '&url=' + encodeURIComponent(_getURL(options))\n + '&title=' + encodeURIComponent(options.title)\n + '&summary=' + encodeURIComponent(options.text);\n },\n\n // Reddit\n reddit: function (options) {\n return 'https://reddit.com/submit'\n + '?url=' + encodeURIComponent(_getURL(options))\n + '&title=' + encodeURIComponent(options.title);\n },\n\n // Twitter\n twitter: function (options) {\n var url = _getURL(options);\n return 'http://twitter.com/share'\n + '?text=' + encodeURIComponent(options.title)\n + '&url=' + encodeURIComponent(url)\n + '&counturl=' + encodeURIComponent(url);\n },\n\n // Mail.ru\n mailru: function (options) {\n return 'http://connect.mail.ru/share'\n + '?url=' + encodeURIComponent(_getURL(options))\n + '&title=' + encodeURIComponent(options.title)\n + '&description=' + encodeURIComponent(options.text)\n + '&imageurl=' + encodeURIComponent(options.image);\n },\n\n // Google+\n googleplus: function (options) {\n return 'https://plus.google.com/share'\n + '?url=' + encodeURIComponent(_getURL(options));\n },\n\n // Weibo\n weibo: function (options) {\n return 'http://service.weibo.com/share/share.php'\n + '?url=' + encodeURIComponent(_getURL(options))\n + '&title=' + encodeURIComponent(options.title)\n + '&pic=' + encodeURIComponent(options.image);\n },\n\n // Telegram\n telegram: function (options) {\n return options.link_telegram\n + '?url=' + encodeURIComponent(_getURL(options) + \"\\n\" + options.title);\n },\n\n // WhatsApp\n whatsapp: function (options) {\n return options.link_whatsapp\n + '?text=' + encodeURIComponent(_getURL(options) + \"\\n\" + options.title);\n },\n\n // Viber\n viber: function (options) {\n return 'viber://forward'\n + '?text=' + encodeURIComponent(_getURL(options) + \"\\n\" + options.title);\n },\n\n // Skype\n skype: function (options) {\n return 'https://web.skype.com/share'\n + '?url=' + encodeURIComponent(_getURL(options))\n + '&text=' + encodeURIComponent(options.title);\n },\n\n // Line.me\n line: function (options) {\n return 'https://lineit.line.me/share/ui'\n + '?url=' + encodeURIComponent(_getURL(options))\n + '&text=' + encodeURIComponent(options.title);\n },\n\n // E-mail\n email: function (options) {\n return 'mailto:'\n + '?subject=' + encodeURIComponent(options.title)\n + '&body=' + encodeURIComponent(_getURL(options))\n + encodeURIComponent(\"\\n\" + options.text);\n }\n };\n\n function init() {\n var defaultOptions = {\n type: 'email', // default share type\n url: '', // url to share\n title: document.title, // title to share\n image: '', // image to share\n text: '', // text to share\n utm_source: '',\n utm_medium: '',\n utm_campaign: '',\n popup_width: 626,\n popup_height: 436,\n link_telegram: 'https://telegram.me/share/url',\n link_whatsapp: 'https://wa.me/'\n };\n\n function api() {}\n\n function go(element, options) {\n var withoutPopup = [\n // 'unknown',\n // 'viber',\n // 'telegram',\n // 'whatsapp',\n // 'email',\n // 'skype',\n // 'line'\n ];\n var tryLocation = true; // should we try to redirect user following share link\n var link;\n\n options = _extend(\n defaultOptions, // default options - low priority\n _getData(element, defaultOptions), // options from data-* attributes\n options // options from method call - highest proprity\n );\n\n if (typeof social[options.type] == 'undefined') {\n options.type = 'unknown'\n }\n\n link = social[options.type](options);\n\n if (withoutPopup.indexOf(options.type) === -1) { // if we must try to open a popup window we will try\n tryLocation = _popup(link, options) === null;\n }\n\n if (tryLocation) { // and if we succeed, we will not redirect user to share link location, otherwise\n if (element.tagName === 'A'\n && element.tagName === 'a') { // if element is tag\n element.setAttribute('href', link); // set attribute href\n return true; // and return true, so this tag will behave as a usual link\n } else {\n location.href = link; // if it's not tag, change location to redirect\n return false;\n }\n } else {\n return false;\n }\n }\n\n api.go = go;\n api.options = defaultOptions;\n return api;\n }\n\n return init();\n}));\n","/*! For license information please see three-geo.esm.js.LICENSE.txt */\nvar ThreeGeo;(()=>{var t={5550:t=>{\"use strict\";function e(t,e){this.x=t,this.y=e}t.exports=e,e.prototype={clone:function(){return new e(this.x,this.y)},add:function(t){return this.clone()._add(t)},sub:function(t){return this.clone()._sub(t)},multByPoint:function(t){return this.clone()._multByPoint(t)},divByPoint:function(t){return this.clone()._divByPoint(t)},mult:function(t){return this.clone()._mult(t)},div:function(t){return this.clone()._div(t)},rotate:function(t){return this.clone()._rotate(t)},rotateAround:function(t,e){return this.clone()._rotateAround(t,e)},matMult:function(t){return this.clone()._matMult(t)},unit:function(){return this.clone()._unit()},perp:function(){return this.clone()._perp()},round:function(){return this.clone()._round()},mag:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals:function(t){return this.x===t.x&&this.y===t.y},dist:function(t){return Math.sqrt(this.distSqr(t))},distSqr:function(t){var e=t.x-this.x,r=t.y-this.y;return e*e+r*r},angle:function(){return Math.atan2(this.y,this.x)},angleTo:function(t){return Math.atan2(this.y-t.y,this.x-t.x)},angleWith:function(t){return this.angleWithSep(t.x,t.y)},angleWithSep:function(t,e){return Math.atan2(this.x*e-this.y*t,this.x*t+this.y*e)},_matMult:function(t){var e=t[0]*this.x+t[1]*this.y,r=t[2]*this.x+t[3]*this.y;return this.x=e,this.y=r,this},_add:function(t){return this.x+=t.x,this.y+=t.y,this},_sub:function(t){return this.x-=t.x,this.y-=t.y,this},_mult:function(t){return this.x*=t,this.y*=t,this},_div:function(t){return this.x/=t,this.y/=t,this},_multByPoint:function(t){return this.x*=t.x,this.y*=t.y,this},_divByPoint:function(t){return this.x/=t.x,this.y/=t.y,this},_unit:function(){return this._div(this.mag()),this},_perp:function(){var t=this.y;return this.y=this.x,this.x=-t,this},_rotate:function(t){var e=Math.cos(t),r=Math.sin(t),n=e*this.x-r*this.y,i=r*this.x+e*this.y;return this.x=n,this.y=i,this},_rotateAround:function(t,e){var r=Math.cos(t),n=Math.sin(t),i=e.x+r*(this.x-e.x)-n*(this.y-e.y),o=e.y+n*(this.x-e.x)+r*(this.y-e.y);return this.x=i,this.y=o,this},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}},e.convert=function(t){return t instanceof e?t:Array.isArray(t)?new e(t[0],t[1]):t}},3673:(t,e)=>{var r=function(){var t={},e=Math.PI/180,r=180/Math.PI,n=6378137,i=20037508.342789244;function o(t){return Number(t)===t&&t%1!=0}function a(e){if(e=e||{},this.size=e.size||256,this.expansion=!0===e.antimeridian?2:1,!t[this.size]){var r=this.size,n=t[this.size]={};n.Bc=[],n.Cc=[],n.zc=[],n.Ac=[];for(var i=0;i<30;i++)n.Bc.push(r/360),n.Cc.push(r/(2*Math.PI)),n.zc.push(r/2),n.Ac.push(r),r*=2}this.Bc=t[this.size].Bc,this.Cc=t[this.size].Cc,this.zc=t[this.size].zc,this.Ac=t[this.size].Ac}return a.prototype.px=function(t,r){if(o(r)){var n=this.size*Math.pow(2,r),i=n/2,a=n/360,s=n/(2*Math.PI),u=n,f=Math.min(Math.max(Math.sin(e*t[1]),-.9999),.9999),l=i+t[0]*a,h=i+.5*Math.log((1+f)/(1-f))*-s;return l>u*this.expansion&&(l=u*this.expansion),h>u&&(h=u),[l,h]}i=this.zc[r],f=Math.min(Math.max(Math.sin(e*t[1]),-.9999),.9999),l=Math.round(i+t[0]*this.Bc[r]),h=Math.round(i+.5*Math.log((1+f)/(1-f))*-this.Cc[r]);return l>this.Ac[r]*this.expansion&&(l=this.Ac[r]*this.expansion),h>this.Ac[r]&&(h=this.Ac[r]),[l,h]},a.prototype.ll=function(t,e){if(o(e)){var n=this.size*Math.pow(2,e),i=n/360,a=n/(2*Math.PI),s=n/2,u=(t[1]-s)/-a;return[(t[0]-s)/i,r*(2*Math.atan(Math.exp(u))-.5*Math.PI)]}u=(t[1]-this.zc[e])/-this.Cc[e];return[(t[0]-this.zc[e])/this.Bc[e],r*(2*Math.atan(Math.exp(u))-.5*Math.PI)]},a.prototype.bbox=function(t,e,r,n,i){n&&(e=Math.pow(2,r)-1-e);var o=[t*this.size,(+e+1)*this.size],a=[(+t+1)*this.size,e*this.size],s=this.ll(o,r).concat(this.ll(a,r));return\"900913\"===i?this.convert(s,\"900913\"):s},a.prototype.xyz=function(t,e,r,n){\"900913\"===n&&(t=this.convert(t,\"WGS84\"));var i=[t[0],t[1]],o=[t[2],t[3]],a=this.px(i,e),s=this.px(o,e),u=[Math.floor(a[0]/this.size),Math.floor((s[0]-1)/this.size)],f=[Math.floor(s[1]/this.size),Math.floor((a[1]-1)/this.size)],l={minX:Math.min.apply(Math,u)<0?0:Math.min.apply(Math,u),minY:Math.min.apply(Math,f)<0?0:Math.min.apply(Math,f),maxX:Math.max.apply(Math,u),maxY:Math.max.apply(Math,f)};if(r){var h={minY:Math.pow(2,e)-1-l.maxY,maxY:Math.pow(2,e)-1-l.minY};l.minY=h.minY,l.maxY=h.maxY}return l},a.prototype.convert=function(t,e){return\"900913\"===e?this.forward(t.slice(0,2)).concat(this.forward(t.slice(2,4))):this.inverse(t.slice(0,2)).concat(this.inverse(t.slice(2,4)))},a.prototype.forward=function(t){var r=[n*t[0]*e,n*Math.log(Math.tan(.25*Math.PI+.5*t[1]*e))];return r[0]>i&&(r[0]=i),r[0]<-i&&(r[0]=-i),r[1]>i&&(r[1]=i),r[1]<-i&&(r[1]=-i),r},a.prototype.inverse=function(t){return[t[0]*r/n,(.5*Math.PI-2*Math.atan(Math.exp(-t[1]/n)))*r]},a}();t.exports=r},7701:(t,e,r)=>{\"use strict\";var n=r(2768);function i(t){return{type:\"Feature\",geometry:n.tileToGeoJSON(t),properties:{}}}function o(t,e){var r,i,o=t.coordinates,s=e.max_zoom,h={},c=[];if(\"Point\"===t.type)return[n.pointToTile(o[0],o[1],s)];if(\"MultiPoint\"===t.type)for(r=0;rr.min_zoom;i--){for(var o={},a=[],s=0;sa[c][1]||d>a[p][1])&&(d0?1:-1,g=d>0?1:-1,v=Math.floor(h),b=Math.floor(c),m=0===p?1/0:Math.abs(((p>0?1:0)+v-h)/p),w=0===d?1/0:Math.abs(((d>0?1:0)+b-c)/d),x=Math.abs(y/p),_=Math.abs(g/d);for(v===o&&b===a||(t[l(v,b,r)]=!0,i&&b!==a&&i.push([v,b]),o=v,a=b);m<1||w<1;)m{\"use strict\";var e=Math.PI/180,r=180/Math.PI;function n(t){var e=i(t[0]+1,t[2]);return[i(t[0],t[2]),o(t[1]+1,t[2]),e,o(t[1],t[2])]}function i(t,e){return t/Math.pow(2,e)*360-180}function o(t,e){var n=Math.PI-2*Math.PI*t/Math.pow(2,e);return r*Math.atan(.5*(Math.exp(n)-Math.exp(-n)))}function a(t,e,r){var n=c(t,e,r);return n[0]=Math.floor(n[0]),n[1]=Math.floor(n[1]),n}function s(t){return[[2*t[0],2*t[1],t[2]+1],[2*t[0]+1,2*t[1],t[2]+1],[2*t[0]+1,2*t[1]+1,t[2]+1],[2*t[0],2*t[1]+1,t[2]+1]]}function u(t){return[t[0]>>1,t[1]>>1,t[2]-1]}function f(t){return s(u(t))}function l(t,e){for(var r=0;r0;r--){var n=0,i=1<0;i--){var o=1<>>32-i,n[1]>>>32-i,i]},pointToTileFraction:c}},8929:(t,e,r)=>{t.exports.VectorTile=r(2779),r(6024),r(9701)},2779:(t,e,r)=>{\"use strict\";var n=r(9701);function i(t,e,r){if(3===t){var i=new n(r,r.readVarint()+r.pos);i.length&&(e[i.name]=i)}}t.exports=function(t,e){this.layers=t.readFields(i,{},e)}},6024:(t,e,r)=>{\"use strict\";var n=r(5550);function i(t,e,r,n,i){this.properties={},this.extent=r,this.type=0,this._pbf=t,this._geometry=-1,this._keys=n,this._values=i,t.readFields(o,this,e)}function o(t,e,r){1==t?e.id=r.readVarint():2==t?function(t,e){var r=t.readVarint()+t.pos;for(;t.pos>3}if(o--,1===i||2===i)a+=t.readSVarint(),s+=t.readSVarint(),1===i&&(e&&u.push(e),e=[]),e.push(new n(a,s));else{if(7!==i)throw new Error(\"unknown command \"+i);e&&e.push(e[0].clone())}}return e&&u.push(e),u},i.prototype.bbox=function(){var t=this._pbf;t.pos=this._geometry;for(var e=t.readVarint()+t.pos,r=1,n=0,i=0,o=0,a=1/0,s=-1/0,u=1/0,f=-1/0;t.pos>3}if(n--,1===r||2===r)(i+=t.readSVarint())s&&(s=i),(o+=t.readSVarint())f&&(f=o);else if(7!==r)throw new Error(\"unknown command \"+r)}return[a,u,s,f]},i.prototype.toGeoJSON=function(t,e,r){var n,o,s=this.extent*Math.pow(2,r),u=this.extent*t,f=this.extent*e,l=this.loadGeometry(),h=i.types[this.type];function c(t){for(var e=0;e{\"use strict\";var n=r(6024);function i(t,e){this.version=1,this.name=null,this.extent=4096,this.length=0,this._pbf=t,this._keys=[],this._values=[],this._features=[],t.readFields(o,this,e),this.length=this._features.length}function o(t,e,r){15===t?e.version=r.readVarint():1===t?e.name=r.readString():5===t?e.extent=r.readVarint():2===t?e._features.push(r.pos):3===t?e._keys.push(r.readString()):4===t&&e._values.push(function(t){var e=null,r=t.readVarint()+t.pos;for(;t.pos>3;e=1===n?t.readString():2===n?t.readFloat():3===n?t.readDouble():4===n?t.readVarint64():5===n?t.readVarint():6===n?t.readSVarint():7===n?t.readBoolean():null}return e}(r))}t.exports=i,i.prototype.feature=function(t){if(t<0||t>=this._features.length)throw new Error(\"feature index out of bounds\");this._pbf.pos=this._features[t];var e=this._pbf.readVarint()+this._pbf.pos;return new n(this._pbf,e,this.extent,this._keys,this._values)}},6239:(t,e,r)=>{\"use strict\";var n=r(5081);function i(){this.argTypes=[],this.shimArgs=[],this.arrayArgs=[],this.arrayBlockIndices=[],this.scalarArgs=[],this.offsetArgs=[],this.offsetArgIndex=[],this.indexArgs=[],this.shapeArgs=[],this.funcName=\"\",this.pre=null,this.body=null,this.post=null,this.debug=!1}t.exports=function(t){var e=new i;e.pre=t.pre,e.body=t.body,e.post=t.post;var r=t.args.slice(0);e.argTypes=r;for(var o=0;o0)throw new Error(\"cwise: pre() block may not reference array args\");if(o0)throw new Error(\"cwise: post() block may not reference array args\")}else if(\"scalar\"===a)e.scalarArgs.push(o),e.shimArgs.push(\"scalar\"+o);else if(\"index\"===a){if(e.indexArgs.push(o),o0)throw new Error(\"cwise: pre() block may not reference array index\");if(o0)throw new Error(\"cwise: post() block may not reference array index\")}else if(\"shape\"===a){if(e.shapeArgs.push(o),or.length)throw new Error(\"cwise: Too many arguments in pre() block\");if(e.body.args.length>r.length)throw new Error(\"cwise: Too many arguments in body() block\");if(e.post.args.length>r.length)throw new Error(\"cwise: Too many arguments in post() block\");return e.debug=!!t.printCode||!!t.debug,e.funcName=t.funcName||\"cwise\",e.blockSize=t.blockSize||64,n(e)}},1984:(t,e,r)=>{\"use strict\";var n=r(8706);function i(t,e,r){var n,i,o=t.length,a=e.arrayArgs.length,s=e.indexArgs.length>0,u=[],f=[],l=0,h=0;for(n=0;n0&&u.push(\"var \"+f.join(\",\")),n=o-1;n>=0;--n)l=t[n],u.push([\"for(i\",n,\"=0;i\",n,\"0&&u.push([\"index[\",h,\"]-=s\",h].join(\"\")),u.push([\"++index[\",l,\"]\"].join(\"\"))),u.push(\"}\")}return u.join(\"\\n\")}function o(t,e,r){for(var n=t.body,i=[],o=[],a=0;a0&&(r=r&&e[n]===e[n-1])}return r?e[0]:e.join(\"\")}t.exports=function(t,e){for(var r=e[1].length-Math.abs(t.arrayBlockIndices[0])|0,s=new Array(t.arrayArgs.length),u=new Array(t.arrayArgs.length),f=0;f0&&m.push(\"shape=SS.slice(0)\"),t.indexArgs.length>0){var w=new Array(r);for(f=0;f0&&b.push(\"var \"+m.join(\",\")),f=0;f3&&b.push(o(t.pre,t,u));var S=o(t.body,t,u),k=function(t){for(var e=0,r=t[0].length;e0,f=[],l=0;l0;){\"].join(\"\")),f.push([\"if(j\",l,\"<\",s,\"){\"].join(\"\")),f.push([\"s\",e[l],\"=j\",l].join(\"\")),f.push([\"j\",l,\"=0\"].join(\"\")),f.push([\"}else{s\",e[l],\"=\",s].join(\"\")),f.push([\"j\",l,\"-=\",s,\"}\"].join(\"\")),u&&f.push([\"index[\",e[l],\"]=j\",l].join(\"\"));for(l=0;l3&&b.push(o(t.post,t,u)),t.debug&&b.join(\"\\n\");var M=[t.funcName||\"unnamed\",\"_cwise_loop_\",s[0].join(\"s\"),\"m\",k,a(u)].join(\"\");return new Function([\"function \",M,\"(\",v.join(\",\"),\"){\",b.join(\"\\n\"),\"} return \",M].join(\"\"))()}},5081:(t,e,r)=>{\"use strict\";var n=r(1984);t.exports=function(t){var e=[\"'use strict'\",\"var CACHED={}\"],r=[],i=t.funcName+\"_cwise_thunk\";e.push([\"return function \",i,\"(\",t.shimArgs.join(\",\"),\"){\"].join(\"\"));for(var o=[],a=[],s=[[\"array\",t.arrayArgs[0],\".shape.slice(\",Math.max(0,t.arrayBlockIndices[0]),t.arrayBlockIndices[0]<0?\",\"+t.arrayBlockIndices[0]+\")\":\")\"].join(\"\")],u=[],f=[],l=0;l0&&(u.push(\"array\"+t.arrayArgs[0]+\".shape.length===array\"+h+\".shape.length+\"+(Math.abs(t.arrayBlockIndices[0])-Math.abs(t.arrayBlockIndices[l]))),f.push(\"array\"+t.arrayArgs[0]+\".shape[shapeIndex+\"+Math.max(0,t.arrayBlockIndices[0])+\"]===array\"+h+\".shape[shapeIndex+\"+Math.max(0,t.arrayBlockIndices[l])+\"]\"))}for(t.arrayArgs.length>1&&(e.push(\"if (!(\"+u.join(\" && \")+\")) throw new Error('cwise: Arrays do not all have the same dimensionality!')\"),e.push(\"for(var shapeIndex=array\"+t.arrayArgs[0]+\".shape.length-\"+Math.abs(t.arrayBlockIndices[0])+\"; shapeIndex--\\x3e0;) {\"),e.push(\"if (!(\"+f.join(\" && \")+\")) throw new Error('cwise: Arrays do not all have the same shape!')\"),e.push(\"}\")),l=0;l{var n=r(1664).Buffer;t.exports=function(t){if(!/^data\\:/i.test(t))throw new TypeError('`uri` does not appear to be a Data URI (must begin with \"data:\")');var e=(t=t.replace(/\\r?\\n/g,\"\")).indexOf(\",\");if(-1===e||e<=4)throw new TypeError(\"malformed data: URI\");for(var r=t.substring(5,e).split(\";\"),i=!1,o=\"US-ASCII\",a=0;a{\"use strict\";e.byteLength=function(t){var e=u(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){var e,r,o=u(t),a=o[0],s=o[1],f=new i(function(t,e,r){return 3*(e+r)/4-r}(0,a,s)),l=0,h=s>0?a-4:a;for(r=0;r>16&255,f[l++]=e>>8&255,f[l++]=255&e;2===s&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,f[l++]=255&e);1===s&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,f[l++]=e>>8&255,f[l++]=255&e);return f},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,o=[],a=16383,s=0,u=n-i;su?u:s+a));1===i?(e=t[n-1],o.push(r[e>>2]+r[e<<4&63]+\"==\")):2===i&&(e=(t[n-2]<<8)+t[n-1],o.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+\"=\"));return o.join(\"\")};for(var r=[],n=[],i=\"undefined\"!=typeof Uint8Array?Uint8Array:Array,o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",a=0,s=o.length;a0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var r=t.indexOf(\"=\");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function f(t,e,n){for(var i,o,a=[],s=e;s>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return a.join(\"\")}n[\"-\".charCodeAt(0)]=62,n[\"_\".charCodeAt(0)]=63},1664:(t,e,r)=>{\"use strict\";const n=r(8197),i=r(645),o=\"function\"==typeof Symbol&&\"function\"==typeof Symbol.for?Symbol.for(\"nodejs.util.inspect.custom\"):null;e.Buffer=u,e.SlowBuffer=function(t){+t!=t&&(t=0);return u.alloc(+t)},e.INSPECT_MAX_BYTES=50;const a=2147483647;function s(t){if(t>a)throw new RangeError('The value \"'+t+'\" is invalid for option \"size\"');const e=new Uint8Array(t);return Object.setPrototypeOf(e,u.prototype),e}function u(t,e,r){if(\"number\"==typeof t){if(\"string\"==typeof e)throw new TypeError('The \"string\" argument must be of type string. Received type number');return h(t)}return f(t,e,r)}function f(t,e,r){if(\"string\"==typeof t)return function(t,e){\"string\"==typeof e&&\"\"!==e||(e=\"utf8\");if(!u.isEncoding(e))throw new TypeError(\"Unknown encoding: \"+e);const r=0|y(t,e);let n=s(r);const i=n.write(t,e);i!==r&&(n=n.slice(0,i));return n}(t,e);if(ArrayBuffer.isView(t))return function(t){if(X(t,Uint8Array)){const e=new Uint8Array(t);return p(e.buffer,e.byteOffset,e.byteLength)}return c(t)}(t);if(null==t)throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof t);if(X(t,ArrayBuffer)||t&&X(t.buffer,ArrayBuffer))return p(t,e,r);if(\"undefined\"!=typeof SharedArrayBuffer&&(X(t,SharedArrayBuffer)||t&&X(t.buffer,SharedArrayBuffer)))return p(t,e,r);if(\"number\"==typeof t)throw new TypeError('The \"value\" argument must not be of type number. Received type number');const n=t.valueOf&&t.valueOf();if(null!=n&&n!==t)return u.from(n,e,r);const i=function(t){if(u.isBuffer(t)){const e=0|d(t.length),r=s(e);return 0===r.length||t.copy(r,0,0,e),r}if(void 0!==t.length)return\"number\"!=typeof t.length||J(t.length)?s(0):c(t);if(\"Buffer\"===t.type&&Array.isArray(t.data))return c(t.data)}(t);if(i)return i;if(\"undefined\"!=typeof Symbol&&null!=Symbol.toPrimitive&&\"function\"==typeof t[Symbol.toPrimitive])return u.from(t[Symbol.toPrimitive](\"string\"),e,r);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof t)}function l(t){if(\"number\"!=typeof t)throw new TypeError('\"size\" argument must be of type number');if(t<0)throw new RangeError('The value \"'+t+'\" is invalid for option \"size\"')}function h(t){return l(t),s(t<0?0:0|d(t))}function c(t){const e=t.length<0?0:0|d(t.length),r=s(e);for(let n=0;n=a)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+a.toString(16)+\" bytes\");return 0|t}function y(t,e){if(u.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||X(t,ArrayBuffer))return t.byteLength;if(\"string\"!=typeof t)throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);const r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let i=!1;for(;;)switch(e){case\"ascii\":case\"latin1\":case\"binary\":return r;case\"utf8\":case\"utf-8\":return H(t).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*r;case\"hex\":return r>>>1;case\"base64\":return Y(t).length;default:if(i)return n?-1:H(t).length;e=(\"\"+e).toLowerCase(),i=!0}}function g(t,e,r){let n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return\"\";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return\"\";if((r>>>=0)<=(e>>>=0))return\"\";for(t||(t=\"utf8\");;)switch(t){case\"hex\":return T(this,e,r);case\"utf8\":case\"utf-8\":return M(this,e,r);case\"ascii\":return A(this,e,r);case\"latin1\":case\"binary\":return j(this,e,r);case\"base64\":return k(this,e,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return P(this,e,r);default:if(n)throw new TypeError(\"Unknown encoding: \"+t);t=(t+\"\").toLowerCase(),n=!0}}function v(t,e,r){const n=t[e];t[e]=t[r],t[r]=n}function b(t,e,r,n,i){if(0===t.length)return-1;if(\"string\"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),J(r=+r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if(\"string\"==typeof e&&(e=u.from(e,n)),u.isBuffer(e))return 0===e.length?-1:m(t,e,r,n,i);if(\"number\"==typeof e)return e&=255,\"function\"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):m(t,[e],r,n,i);throw new TypeError(\"val must be string, number or Buffer\")}function m(t,e,r,n,i){let o,a=1,s=t.length,u=e.length;if(void 0!==n&&(\"ucs2\"===(n=String(n).toLowerCase())||\"ucs-2\"===n||\"utf16le\"===n||\"utf-16le\"===n)){if(t.length<2||e.length<2)return-1;a=2,s/=2,u/=2,r/=2}function f(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}if(i){let n=-1;for(o=r;os&&(r=s-u),o=r;o>=0;o--){let r=!0;for(let n=0;ni&&(n=i):n=i;const o=e.length;let a;for(n>o/2&&(n=o/2),a=0;a>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function k(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function M(t,e,r){r=Math.min(t.length,r);const n=[];let i=e;for(;i239?4:e>223?3:e>191?2:1;if(i+a<=r){let r,n,s,u;switch(a){case 1:e<128&&(o=e);break;case 2:r=t[i+1],128==(192&r)&&(u=(31&e)<<6|63&r,u>127&&(o=u));break;case 3:r=t[i+1],n=t[i+2],128==(192&r)&&128==(192&n)&&(u=(15&e)<<12|(63&r)<<6|63&n,u>2047&&(u<55296||u>57343)&&(o=u));break;case 4:r=t[i+1],n=t[i+2],s=t[i+3],128==(192&r)&&128==(192&n)&&128==(192&s)&&(u=(15&e)<<18|(63&r)<<12|(63&n)<<6|63&s,u>65535&&u<1114112&&(o=u))}}null===o?(o=65533,a=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),i+=a}return function(t){const e=t.length;if(e<=R)return String.fromCharCode.apply(String,t);let r=\"\",n=0;for(;nn.length?(u.isBuffer(e)||(e=u.from(e)),e.copy(n,i)):Uint8Array.prototype.set.call(n,e,i);else{if(!u.isBuffer(e))throw new TypeError('\"list\" argument must be an Array of Buffers');e.copy(n,i)}i+=e.length}return n},u.byteLength=y,u.prototype._isBuffer=!0,u.prototype.swap16=function(){const t=this.length;if(t%2!=0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(let e=0;er&&(t+=\" ... \"),\"\"},o&&(u.prototype[o]=u.prototype.inspect),u.prototype.compare=function(t,e,r,n,i){if(X(t,Uint8Array)&&(t=u.from(t,t.offset,t.byteLength)),!u.isBuffer(t))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError(\"out of range index\");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;let o=(i>>>=0)-(n>>>=0),a=(r>>>=0)-(e>>>=0);const s=Math.min(o,a),f=this.slice(n,i),l=t.slice(e,r);for(let t=0;t>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n=\"utf8\")):(n=r,r=void 0)}const i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");n||(n=\"utf8\");let o=!1;for(;;)switch(n){case\"hex\":return w(this,t,e,r);case\"utf8\":case\"utf-8\":return x(this,t,e,r);case\"ascii\":case\"latin1\":case\"binary\":return _(this,t,e,r);case\"base64\":return E(this,t,e,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return S(this,t,e,r);default:if(o)throw new TypeError(\"Unknown encoding: \"+n);n=(\"\"+n).toLowerCase(),o=!0}},u.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};const R=4096;function A(t,e,r){let n=\"\";r=Math.min(t.length,r);for(let i=e;in)&&(r=n);let i=\"\";for(let n=e;nr)throw new RangeError(\"Trying to access beyond buffer length\")}function B(t,e,r,n,i,o){if(!u.isBuffer(t))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError(\"Index out of range\")}function L(t,e,r,n,i){q(e,n,i,t,r,7);let o=Number(e&BigInt(4294967295));t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o;let a=Number(e>>BigInt(32)&BigInt(4294967295));return t[r++]=a,a>>=8,t[r++]=a,a>>=8,t[r++]=a,a>>=8,t[r++]=a,r}function O(t,e,r,n,i){q(e,n,i,t,r,7);let o=Number(e&BigInt(4294967295));t[r+7]=o,o>>=8,t[r+6]=o,o>>=8,t[r+5]=o,o>>=8,t[r+4]=o;let a=Number(e>>BigInt(32)&BigInt(4294967295));return t[r+3]=a,a>>=8,t[r+2]=a,a>>=8,t[r+1]=a,a>>=8,t[r]=a,r+8}function C(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError(\"Index out of range\");if(r<0)throw new RangeError(\"Index out of range\")}function N(t,e,r,n,o){return e=+e,r>>>=0,o||C(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function F(t,e,r,n,o){return e=+e,r>>>=0,o||C(t,0,r,8),i.write(t,e,r,n,52,8),r+8}u.prototype.slice=function(t,e){const r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e>>=0,e>>>=0,r||I(t,e,this.length);let n=this[t],i=1,o=0;for(;++o>>=0,e>>>=0,r||I(t,e,this.length);let n=this[t+--e],i=1;for(;e>0&&(i*=256);)n+=this[t+--e]*i;return n},u.prototype.readUint8=u.prototype.readUInt8=function(t,e){return t>>>=0,e||I(t,1,this.length),this[t]},u.prototype.readUint16LE=u.prototype.readUInt16LE=function(t,e){return t>>>=0,e||I(t,2,this.length),this[t]|this[t+1]<<8},u.prototype.readUint16BE=u.prototype.readUInt16BE=function(t,e){return t>>>=0,e||I(t,2,this.length),this[t]<<8|this[t+1]},u.prototype.readUint32LE=u.prototype.readUInt32LE=function(t,e){return t>>>=0,e||I(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},u.prototype.readUint32BE=u.prototype.readUInt32BE=function(t,e){return t>>>=0,e||I(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},u.prototype.readBigUInt64LE=K((function(t){z(t>>>=0,\"offset\");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||G(t,this.length-8);const n=e+256*this[++t]+65536*this[++t]+this[++t]*2**24,i=this[++t]+256*this[++t]+65536*this[++t]+r*2**24;return BigInt(n)+(BigInt(i)<>>=0,\"offset\");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||G(t,this.length-8);const n=e*2**24+65536*this[++t]+256*this[++t]+this[++t],i=this[++t]*2**24+65536*this[++t]+256*this[++t]+r;return(BigInt(n)<>>=0,e>>>=0,r||I(t,e,this.length);let n=this[t],i=1,o=0;for(;++o=i&&(n-=Math.pow(2,8*e)),n},u.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||I(t,e,this.length);let n=e,i=1,o=this[t+--n];for(;n>0&&(i*=256);)o+=this[t+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},u.prototype.readInt8=function(t,e){return t>>>=0,e||I(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},u.prototype.readInt16LE=function(t,e){t>>>=0,e||I(t,2,this.length);const r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},u.prototype.readInt16BE=function(t,e){t>>>=0,e||I(t,2,this.length);const r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},u.prototype.readInt32LE=function(t,e){return t>>>=0,e||I(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},u.prototype.readInt32BE=function(t,e){return t>>>=0,e||I(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},u.prototype.readBigInt64LE=K((function(t){z(t>>>=0,\"offset\");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||G(t,this.length-8);const n=this[t+4]+256*this[t+5]+65536*this[t+6]+(r<<24);return(BigInt(n)<>>=0,\"offset\");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||G(t,this.length-8);const n=(e<<24)+65536*this[++t]+256*this[++t]+this[++t];return(BigInt(n)<>>=0,e||I(t,4,this.length),i.read(this,t,!0,23,4)},u.prototype.readFloatBE=function(t,e){return t>>>=0,e||I(t,4,this.length),i.read(this,t,!1,23,4)},u.prototype.readDoubleLE=function(t,e){return t>>>=0,e||I(t,8,this.length),i.read(this,t,!0,52,8)},u.prototype.readDoubleBE=function(t,e){return t>>>=0,e||I(t,8,this.length),i.read(this,t,!1,52,8)},u.prototype.writeUintLE=u.prototype.writeUIntLE=function(t,e,r,n){if(t=+t,e>>>=0,r>>>=0,!n){B(this,t,e,r,Math.pow(2,8*r)-1,0)}let i=1,o=0;for(this[e]=255&t;++o>>=0,r>>>=0,!n){B(this,t,e,r,Math.pow(2,8*r)-1,0)}let i=r-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+r},u.prototype.writeUint8=u.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,1,255,0),this[e]=255&t,e+1},u.prototype.writeUint16LE=u.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},u.prototype.writeUint16BE=u.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},u.prototype.writeUint32LE=u.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},u.prototype.writeUint32BE=u.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},u.prototype.writeBigUInt64LE=K((function(t,e=0){return L(this,t,e,BigInt(0),BigInt(\"0xffffffffffffffff\"))})),u.prototype.writeBigUInt64BE=K((function(t,e=0){return O(this,t,e,BigInt(0),BigInt(\"0xffffffffffffffff\"))})),u.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){const n=Math.pow(2,8*r-1);B(this,t,e,r,n-1,-n)}let i=0,o=1,a=0;for(this[e]=255&t;++i>0)-a&255;return e+r},u.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){const n=Math.pow(2,8*r-1);B(this,t,e,r,n-1,-n)}let i=r-1,o=1,a=0;for(this[e+i]=255&t;--i>=0&&(o*=256);)t<0&&0===a&&0!==this[e+i+1]&&(a=1),this[e+i]=(t/o>>0)-a&255;return e+r},u.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},u.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},u.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},u.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},u.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},u.prototype.writeBigInt64LE=K((function(t,e=0){return L(this,t,e,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))})),u.prototype.writeBigInt64BE=K((function(t,e=0){return O(this,t,e,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))})),u.prototype.writeFloatLE=function(t,e,r){return N(this,t,e,!0,r)},u.prototype.writeFloatBE=function(t,e,r){return N(this,t,e,!1,r)},u.prototype.writeDoubleLE=function(t,e,r){return F(this,t,e,!0,r)},u.prototype.writeDoubleBE=function(t,e,r){return F(this,t,e,!1,r)},u.prototype.copy=function(t,e,r,n){if(!u.isBuffer(t))throw new TypeError(\"argument should be a Buffer\");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError(\"Index out of range\");if(n<0)throw new RangeError(\"sourceEnd out of bounds\");n>this.length&&(n=this.length),t.length-e>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),\"number\"==typeof t)for(i=e;i=n+4;r-=3)e=`_${t.slice(r-3,r)}${e}`;return`${t.slice(0,r)}${e}`}function q(t,e,r,n,i,o){if(t>r||t3?0===e||e===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(o+1)}${n}`:`>= -(2${n} ** ${8*(o+1)-1}${n}) and < 2 ** ${8*(o+1)-1}${n}`:`>= ${e}${n} and <= ${r}${n}`,new U.ERR_OUT_OF_RANGE(\"value\",i,t)}!function(t,e,r){z(e,\"offset\"),void 0!==t[e]&&void 0!==t[e+r]||G(e,t.length-(r+1))}(n,i,o)}function z(t,e){if(\"number\"!=typeof t)throw new U.ERR_INVALID_ARG_TYPE(e,\"number\",t)}function G(t,e,r){if(Math.floor(t)!==t)throw z(t,r),new U.ERR_OUT_OF_RANGE(r||\"offset\",\"an integer\",t);if(e<0)throw new U.ERR_BUFFER_OUT_OF_BOUNDS;throw new U.ERR_OUT_OF_RANGE(r||\"offset\",`>= ${r?1:0} and <= ${e}`,t)}D(\"ERR_BUFFER_OUT_OF_BOUNDS\",(function(t){return t?`${t} is outside of buffer bounds`:\"Attempt to access memory outside buffer bounds\"}),RangeError),D(\"ERR_INVALID_ARG_TYPE\",(function(t,e){return`The \"${t}\" argument must be of type number. Received type ${typeof e}`}),TypeError),D(\"ERR_OUT_OF_RANGE\",(function(t,e,r){let n=`The value of \"${t}\" is out of range.`,i=r;return Number.isInteger(r)&&Math.abs(r)>2**32?i=V(String(r)):\"bigint\"==typeof r&&(i=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(i=V(i)),i+=\"n\"),n+=` It must be ${e}. Received ${i}`,n}),RangeError);const W=/[^+/0-9A-Za-z-_]/g;function H(t,e){let r;e=e||1/0;const n=t.length;let i=null;const o=[];for(let a=0;a55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error(\"Invalid code point\");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function Y(t){return n.toByteArray(function(t){if((t=(t=t.split(\"=\")[0]).trim().replace(W,\"\")).length<2)return\"\";for(;t.length%4!=0;)t+=\"=\";return t}(t))}function $(t,e,r,n){let i;for(i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function X(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function J(t){return t!=t}const Z=function(){const t=\"0123456789abcdef\",e=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let i=0;i<16;++i)e[n+i]=t[r]+t[i]}return e}();function K(t){return\"undefined\"==typeof BigInt?Q:t}function Q(){throw new Error(\"BigInt not supported\")}},7988:t=>{\"use strict\";var e,r=\"object\"==typeof Reflect?Reflect:null,n=r&&\"function\"==typeof r.apply?r.apply:function(t,e,r){return Function.prototype.apply.call(t,e,r)};e=r&&\"function\"==typeof r.ownKeys?r.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};var i=Number.isNaN||function(t){return t!=t};function o(){o.init.call(this)}t.exports=o,t.exports.once=function(t,e){return new Promise((function(r,n){function i(r){t.removeListener(e,o),n(r)}function o(){\"function\"==typeof t.removeListener&&t.removeListener(\"error\",i),r([].slice.call(arguments))}y(t,e,o,{once:!0}),\"error\"!==e&&function(t,e,r){\"function\"==typeof t.on&&y(t,\"error\",e,r)}(t,i,{once:!0})}))},o.EventEmitter=o,o.prototype._events=void 0,o.prototype._eventsCount=0,o.prototype._maxListeners=void 0;var a=10;function s(t){if(\"function\"!=typeof t)throw new TypeError('The \"listener\" argument must be of type Function. Received type '+typeof t)}function u(t){return void 0===t._maxListeners?o.defaultMaxListeners:t._maxListeners}function f(t,e,r,n){var i,o,a,f;if(s(r),void 0===(o=t._events)?(o=t._events=Object.create(null),t._eventsCount=0):(void 0!==o.newListener&&(t.emit(\"newListener\",e,r.listener?r.listener:r),o=t._events),a=o[e]),void 0===a)a=o[e]=r,++t._eventsCount;else if(\"function\"==typeof a?a=o[e]=n?[r,a]:[a,r]:n?a.unshift(r):a.push(r),(i=u(t))>0&&a.length>i&&!a.warned){a.warned=!0;var l=new Error(\"Possible EventEmitter memory leak detected. \"+a.length+\" \"+String(e)+\" listeners added. Use emitter.setMaxListeners() to increase limit\");l.name=\"MaxListenersExceededWarning\",l.emitter=t,l.type=e,l.count=a.length,f=l,console&&console.warn&&console.warn(f)}return t}function l(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function h(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},i=l.bind(n);return i.listener=r,n.wrapFn=i,i}function c(t,e,r){var n=t._events;if(void 0===n)return[];var i=n[e];return void 0===i?[]:\"function\"==typeof i?r?[i.listener||i]:[i]:r?function(t){for(var e=new Array(t.length),r=0;r0&&(a=e[0]),a instanceof Error)throw a;var s=new Error(\"Unhandled error.\"+(a?\" (\"+a.message+\")\":\"\"));throw s.context=a,s}var u=o[t];if(void 0===u)return!1;if(\"function\"==typeof u)n(u,this,e);else{var f=u.length,l=d(u,f);for(r=0;r=0;o--)if(r[o]===e||r[o].listener===e){a=r[o].listener,i=o;break}if(i<0)return this;0===i?r.shift():function(t,e){for(;e+1=0;n--)this.removeListener(t,e[n]);return this},o.prototype.listeners=function(t){return c(this,t,!0)},o.prototype.rawListeners=function(t){return c(this,t,!1)},o.listenerCount=function(t,e){return\"function\"==typeof t.listenerCount?t.listenerCount(e):p.call(t,e)},o.prototype.listenerCount=p,o.prototype.eventNames=function(){return this._eventsCount>0?e(this._events):[]}},9530:t=>{\"use strict\";function e(t){if(\"string\"!=typeof t)throw new TypeError(\"Path must be a string. Received \"+JSON.stringify(t))}function r(t,e){for(var r,n=\"\",i=0,o=-1,a=0,s=0;s<=t.length;++s){if(s2){var u=n.lastIndexOf(\"/\");if(u!==n.length-1){-1===u?(n=\"\",i=0):i=(n=n.slice(0,u)).length-1-n.lastIndexOf(\"/\"),o=s,a=0;continue}}else if(2===n.length||1===n.length){n=\"\",i=0,o=s,a=0;continue}e&&(n.length>0?n+=\"/..\":n=\"..\",i=2)}else n.length>0?n+=\"/\"+t.slice(o+1,s):n=t.slice(o+1,s),i=s-o-1;o=s,a=0}else 46===r&&-1!==a?++a:a=-1}return n}var n={resolve:function(){for(var t,n=\"\",i=!1,o=arguments.length-1;o>=-1&&!i;o--){var a;o>=0?a=arguments[o]:(void 0===t&&(t=process.cwd()),a=t),e(a),0!==a.length&&(n=a+\"/\"+n,i=47===a.charCodeAt(0))}return n=r(n,!i),i?n.length>0?\"/\"+n:\"/\":n.length>0?n:\".\"},normalize:function(t){if(e(t),0===t.length)return\".\";var n=47===t.charCodeAt(0),i=47===t.charCodeAt(t.length-1);return 0!==(t=r(t,!n)).length||n||(t=\".\"),t.length>0&&i&&(t+=\"/\"),n?\"/\"+t:t},isAbsolute:function(t){return e(t),t.length>0&&47===t.charCodeAt(0)},join:function(){if(0===arguments.length)return\".\";for(var t,r=0;r0&&(void 0===t?t=i:t+=\"/\"+i)}return void 0===t?\".\":n.normalize(t)},relative:function(t,r){if(e(t),e(r),t===r)return\"\";if((t=n.resolve(t))===(r=n.resolve(r)))return\"\";for(var i=1;if){if(47===r.charCodeAt(s+h))return r.slice(s+h+1);if(0===h)return r.slice(s+h)}else a>f&&(47===t.charCodeAt(i+h)?l=h:0===h&&(l=0));break}var c=t.charCodeAt(i+h);if(c!==r.charCodeAt(s+h))break;47===c&&(l=h)}var p=\"\";for(h=i+l+1;h<=o;++h)h!==o&&47!==t.charCodeAt(h)||(0===p.length?p+=\"..\":p+=\"/..\");return p.length>0?p+r.slice(s+l):(s+=l,47===r.charCodeAt(s)&&++s,r.slice(s))},_makeLong:function(t){return t},dirname:function(t){if(e(t),0===t.length)return\".\";for(var r=t.charCodeAt(0),n=47===r,i=-1,o=!0,a=t.length-1;a>=1;--a)if(47===(r=t.charCodeAt(a))){if(!o){i=a;break}}else o=!1;return-1===i?n?\"/\":\".\":n&&1===i?\"//\":t.slice(0,i)},basename:function(t,r){if(void 0!==r&&\"string\"!=typeof r)throw new TypeError('\"ext\" argument must be a string');e(t);var n,i=0,o=-1,a=!0;if(void 0!==r&&r.length>0&&r.length<=t.length){if(r.length===t.length&&r===t)return\"\";var s=r.length-1,u=-1;for(n=t.length-1;n>=0;--n){var f=t.charCodeAt(n);if(47===f){if(!a){i=n+1;break}}else-1===u&&(a=!1,u=n+1),s>=0&&(f===r.charCodeAt(s)?-1==--s&&(o=n):(s=-1,o=u))}return i===o?o=u:-1===o&&(o=t.length),t.slice(i,o)}for(n=t.length-1;n>=0;--n)if(47===t.charCodeAt(n)){if(!a){i=n+1;break}}else-1===o&&(a=!1,o=n+1);return-1===o?\"\":t.slice(i,o)},extname:function(t){e(t);for(var r=-1,n=0,i=-1,o=!0,a=0,s=t.length-1;s>=0;--s){var u=t.charCodeAt(s);if(47!==u)-1===i&&(o=!1,i=s+1),46===u?-1===r?r=s:1!==a&&(a=1):-1!==r&&(a=-1);else if(!o){n=s+1;break}}return-1===r||-1===i||0===a||1===a&&r===i-1&&r===n+1?\"\":t.slice(r,i)},format:function(t){if(null===t||\"object\"!=typeof t)throw new TypeError('The \"pathObject\" argument must be of type Object. Received type '+typeof t);return function(t,e){var r=e.dir||e.root,n=e.base||(e.name||\"\")+(e.ext||\"\");return r?r===e.root?r+n:r+t+n:n}(\"/\",t)},parse:function(t){e(t);var r={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(0===t.length)return r;var n,i=t.charCodeAt(0),o=47===i;o?(r.root=\"/\",n=1):n=0;for(var a=-1,s=0,u=-1,f=!0,l=t.length-1,h=0;l>=n;--l)if(47!==(i=t.charCodeAt(l)))-1===u&&(f=!1,u=l+1),46===i?-1===a?a=l:1!==h&&(h=1):-1!==a&&(h=-1);else if(!f){s=l+1;break}return-1===a||-1===u||0===h||1===h&&a===u-1&&a===s+1?-1!==u&&(r.base=r.name=0===s&&o?t.slice(1,u):t.slice(s,u)):(0===s&&o?(r.name=t.slice(1,a),r.base=t.slice(1,u)):(r.name=t.slice(s,a),r.base=t.slice(s,u)),r.ext=t.slice(a,u)),s>0?r.dir=t.slice(0,s-1):o&&(r.dir=\"/\"),r},sep:\"/\",delimiter:\":\",win32:null,posix:null};n.posix=n,t.exports=n},8870:t=>{\"use strict\";var e={};function r(t,r,n){n||(n=Error);var i=function(t){var e,n;function i(e,n,i){return t.call(this,function(t,e,n){return\"string\"==typeof r?r:r(t,e,n)}(e,n,i))||this}return n=t,(e=i).prototype=Object.create(n.prototype),e.prototype.constructor=e,e.__proto__=n,i}(n);i.prototype.name=n.name,i.prototype.code=t,e[t]=i}function n(t,e){if(Array.isArray(t)){var r=t.length;return t=t.map((function(t){return String(t)})),r>2?\"one of \".concat(e,\" \").concat(t.slice(0,r-1).join(\", \"),\", or \")+t[r-1]:2===r?\"one of \".concat(e,\" \").concat(t[0],\" or \").concat(t[1]):\"of \".concat(e,\" \").concat(t[0])}return\"of \".concat(e,\" \").concat(String(t))}r(\"ERR_INVALID_OPT_VALUE\",(function(t,e){return'The value \"'+e+'\" is invalid for option \"'+t+'\"'}),TypeError),r(\"ERR_INVALID_ARG_TYPE\",(function(t,e,r){var i,o,a,s;if(\"string\"==typeof e&&(o=\"not \",e.substr(!a||a<0?0:+a,o.length)===o)?(i=\"must not be\",e=e.replace(/^not /,\"\")):i=\"must be\",function(t,e,r){return(void 0===r||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e}(t,\" argument\"))s=\"The \".concat(t,\" \").concat(i,\" \").concat(n(e,\"type\"));else{var u=function(t,e,r){return\"number\"!=typeof r&&(r=0),!(r+e.length>t.length)&&-1!==t.indexOf(e,r)}(t,\".\")?\"property\":\"argument\";s='The \"'.concat(t,'\" ').concat(u,\" \").concat(i,\" \").concat(n(e,\"type\"))}return s+=\". Received type \".concat(typeof r)}),TypeError),r(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\"),r(\"ERR_METHOD_NOT_IMPLEMENTED\",(function(t){return\"The \"+t+\" method is not implemented\"})),r(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\"),r(\"ERR_STREAM_DESTROYED\",(function(t){return\"Cannot call \"+t+\" after a stream was destroyed\"})),r(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\"),r(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\"),r(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\"),r(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError),r(\"ERR_UNKNOWN_ENCODING\",(function(t){return\"Unknown encoding: \"+t}),TypeError),r(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\"),t.exports.q=e},3536:(t,e,r)=>{\"use strict\";var n=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};t.exports=f;var i=r(4459),o=r(4987);r(5717)(f,i);for(var a=n(o.prototype),s=0;s{\"use strict\";t.exports=i;var n=r(6695);function i(t){if(!(this instanceof i))return new i(t);n.call(this,t)}r(5717)(i,n),i.prototype._transform=function(t,e,r){r(null,t)}},4459:(t,e,r)=>{\"use strict\";var n;t.exports=S,S.ReadableState=E;r(7988).EventEmitter;var i=function(t,e){return t.listeners(e).length},o=r(4150),a=r(1664).Buffer,s=r.g.Uint8Array||function(){};var u,f=r(6023);u=f&&f.debuglog?f.debuglog(\"stream\"):function(){};var l,h,c,p=r(1396),d=r(8522),y=r(1379).getHighWaterMark,g=r(8870).q,v=g.ERR_INVALID_ARG_TYPE,b=g.ERR_STREAM_PUSH_AFTER_EOF,m=g.ERR_METHOD_NOT_IMPLEMENTED,w=g.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;r(5717)(S,o);var x=d.errorOrDestroy,_=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function E(t,e,i){n=n||r(3536),t=t||{},\"boolean\"!=typeof i&&(i=e instanceof n),this.objectMode=!!t.objectMode,i&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=y(this,t,\"readableHighWaterMark\",i),this.buffer=new p,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=!1!==t.emitClose,this.autoDestroy=!!t.autoDestroy,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(l||(l=r(140).s),this.decoder=new l(t.encoding),this.encoding=t.encoding)}function S(t){if(n=n||r(3536),!(this instanceof S))return new S(t);var e=this instanceof n;this._readableState=new E(t,this,e),this.readable=!0,t&&(\"function\"==typeof t.read&&(this._read=t.read),\"function\"==typeof t.destroy&&(this._destroy=t.destroy)),o.call(this)}function k(t,e,r,n,i){u(\"readableAddChunk\",e);var o,f=t._readableState;if(null===e)f.reading=!1,function(t,e){if(u(\"onEofChunk\"),e.ended)return;if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,e.sync?j(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,T(t)))}(t,f);else if(i||(o=function(t,e){var r;n=e,a.isBuffer(n)||n instanceof s||\"string\"==typeof e||void 0===e||t.objectMode||(r=new v(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],e));var n;return r}(f,e)),o)x(t,o);else if(f.objectMode||e&&e.length>0)if(\"string\"==typeof e||f.objectMode||Object.getPrototypeOf(e)===a.prototype||(e=function(t){return a.from(t)}(e)),n)f.endEmitted?x(t,new w):M(t,f,e,!0);else if(f.ended)x(t,new b);else{if(f.destroyed)return!1;f.reading=!1,f.decoder&&!r?(e=f.decoder.write(e),f.objectMode||0!==e.length?M(t,f,e,!1):P(t,f)):M(t,f,e,!1)}else n||(f.reading=!1,P(t,f));return!f.ended&&(f.lengthe.highWaterMark&&(e.highWaterMark=function(t){return t>=R?t=R:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}function j(t){var e=t._readableState;u(\"emitReadable\",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(u(\"emitReadable\",e.flowing),e.emittedReadable=!0,process.nextTick(T,t))}function T(t){var e=t._readableState;u(\"emitReadable_\",e.destroyed,e.length,e.ended),e.destroyed||!e.length&&!e.ended||(t.emit(\"readable\"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,C(t)}function P(t,e){e.readingMore||(e.readingMore=!0,process.nextTick(I,t,e))}function I(t,e){for(;!e.reading&&!e.ended&&(e.length0,e.resumeScheduled&&!e.paused?e.flowing=!0:t.listenerCount(\"data\")>0&&t.resume()}function L(t){u(\"readable nexttick read 0\"),t.read(0)}function O(t,e){u(\"resume\",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit(\"resume\"),C(t),e.flowing&&!e.reading&&t.read(0)}function C(t){var e=t._readableState;for(u(\"flow\",e.flowing);e.flowing&&null!==t.read(););}function N(t,e){return 0===e.length?null:(e.objectMode?r=e.buffer.shift():!t||t>=e.length?(r=e.decoder?e.buffer.join(\"\"):1===e.buffer.length?e.buffer.first():e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r);var r}function F(t){var e=t._readableState;u(\"endReadable\",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(U,e,t))}function U(t,e){if(u(\"endReadableNT\",t.endEmitted,t.length),!t.endEmitted&&0===t.length&&(t.endEmitted=!0,e.readable=!1,e.emit(\"end\"),t.autoDestroy)){var r=e._writableState;(!r||r.autoDestroy&&r.finished)&&e.destroy()}}function D(t,e){for(var r=0,n=t.length;r=e.highWaterMark:e.length>0)||e.ended))return u(\"read: emitReadable\",e.length,e.ended),0===e.length&&e.ended?F(this):j(this),null;if(0===(t=A(t,e))&&e.ended)return 0===e.length&&F(this),null;var n,i=e.needReadable;return u(\"need readable\",i),(0===e.length||e.length-t0?N(t,e):null)?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.awaitDrain=0),0===e.length&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&F(this)),null!==n&&this.emit(\"data\",n),n},S.prototype._read=function(t){x(this,new m(\"_read()\"))},S.prototype.pipe=function(t,e){var r=this,n=this._readableState;switch(n.pipesCount){case 0:n.pipes=t;break;case 1:n.pipes=[n.pipes,t];break;default:n.pipes.push(t)}n.pipesCount+=1,u(\"pipe count=%d opts=%j\",n.pipesCount,e);var o=(!e||!1!==e.end)&&t!==process.stdout&&t!==process.stderr?s:y;function a(e,i){u(\"onunpipe\"),e===r&&i&&!1===i.hasUnpiped&&(i.hasUnpiped=!0,u(\"cleanup\"),t.removeListener(\"close\",p),t.removeListener(\"finish\",d),t.removeListener(\"drain\",f),t.removeListener(\"error\",c),t.removeListener(\"unpipe\",a),r.removeListener(\"end\",s),r.removeListener(\"end\",y),r.removeListener(\"data\",h),l=!0,!n.awaitDrain||t._writableState&&!t._writableState.needDrain||f())}function s(){u(\"onend\"),t.end()}n.endEmitted?process.nextTick(o):r.once(\"end\",o),t.on(\"unpipe\",a);var f=function(t){return function(){var e=t._readableState;u(\"pipeOnDrain\",e.awaitDrain),e.awaitDrain&&e.awaitDrain--,0===e.awaitDrain&&i(t,\"data\")&&(e.flowing=!0,C(t))}}(r);t.on(\"drain\",f);var l=!1;function h(e){u(\"ondata\");var i=t.write(e);u(\"dest.write\",i),!1===i&&((1===n.pipesCount&&n.pipes===t||n.pipesCount>1&&-1!==D(n.pipes,t))&&!l&&(u(\"false write response, pause\",n.awaitDrain),n.awaitDrain++),r.pause())}function c(e){u(\"onerror\",e),y(),t.removeListener(\"error\",c),0===i(t,\"error\")&&x(t,e)}function p(){t.removeListener(\"finish\",d),y()}function d(){u(\"onfinish\"),t.removeListener(\"close\",p),y()}function y(){u(\"unpipe\"),r.unpipe(t)}return r.on(\"data\",h),function(t,e,r){if(\"function\"==typeof t.prependListener)return t.prependListener(e,r);t._events&&t._events[e]?Array.isArray(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]:t.on(e,r)}(t,\"error\",c),t.once(\"close\",p),t.once(\"finish\",d),t.emit(\"pipe\",r),n.flowing||(u(\"pipe resume\"),r.resume()),t},S.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes||(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit(\"unpipe\",this,r)),this;if(!t){var n=e.pipes,i=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var o=0;o0,!1!==n.flowing&&this.resume()):\"readable\"===t&&(n.endEmitted||n.readableListening||(n.readableListening=n.needReadable=!0,n.flowing=!1,n.emittedReadable=!1,u(\"on readable\",n.length,n.reading),n.length?j(this):n.reading||process.nextTick(L,this))),r},S.prototype.addListener=S.prototype.on,S.prototype.removeListener=function(t,e){var r=o.prototype.removeListener.call(this,t,e);return\"readable\"===t&&process.nextTick(B,this),r},S.prototype.removeAllListeners=function(t){var e=o.prototype.removeAllListeners.apply(this,arguments);return\"readable\"!==t&&void 0!==t||process.nextTick(B,this),e},S.prototype.resume=function(){var t=this._readableState;return t.flowing||(u(\"resume\"),t.flowing=!t.readableListening,function(t,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(O,t,e))}(this,t)),t.paused=!1,this},S.prototype.pause=function(){return u(\"call pause flowing=%j\",this._readableState.flowing),!1!==this._readableState.flowing&&(u(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this._readableState.paused=!0,this},S.prototype.wrap=function(t){var e=this,r=this._readableState,n=!1;for(var i in t.on(\"end\",(function(){if(u(\"wrapped end\"),r.decoder&&!r.ended){var t=r.decoder.end();t&&t.length&&e.push(t)}e.push(null)})),t.on(\"data\",(function(i){(u(\"wrapped data\"),r.decoder&&(i=r.decoder.write(i)),r.objectMode&&null==i)||(r.objectMode||i&&i.length)&&(e.push(i)||(n=!0,t.pause()))})),t)void 0===this[i]&&\"function\"==typeof t[i]&&(this[i]=function(e){return function(){return t[e].apply(t,arguments)}}(i));for(var o=0;o<_.length;o++)t.on(_[o],this.emit.bind(this,_[o]));return this._read=function(e){u(\"wrapped _read\",e),n&&(n=!1,t.resume())},this},\"function\"==typeof Symbol&&(S.prototype[Symbol.asyncIterator]=function(){return void 0===h&&(h=r(6492)),h(this)}),Object.defineProperty(S.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),Object.defineProperty(S.prototype,\"readableBuffer\",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}}),Object.defineProperty(S.prototype,\"readableFlowing\",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(t){this._readableState&&(this._readableState.flowing=t)}}),S._fromList=N,Object.defineProperty(S.prototype,\"readableLength\",{enumerable:!1,get:function(){return this._readableState.length}}),\"function\"==typeof Symbol&&(S.from=function(t,e){return void 0===c&&(c=r(8881)),c(S,t,e)})},6695:(t,e,r)=>{\"use strict\";t.exports=l;var n=r(8870).q,i=n.ERR_METHOD_NOT_IMPLEMENTED,o=n.ERR_MULTIPLE_CALLBACK,a=n.ERR_TRANSFORM_ALREADY_TRANSFORMING,s=n.ERR_TRANSFORM_WITH_LENGTH_0,u=r(3536);function f(t,e){var r=this._transformState;r.transforming=!1;var n=r.writecb;if(null===n)return this.emit(\"error\",new o);r.writechunk=null,r.writecb=null,null!=e&&this.push(e),n(t);var i=this._readableState;i.reading=!1,(i.needReadable||i.length{\"use strict\";function n(t){var e=this;this.next=null,this.entry=null,this.finish=function(){!function(t,e,r){var n=t.entry;t.entry=null;for(;n;){var i=n.callback;e.pendingcb--,i(r),n=n.next}e.corkedRequestsFree.next=t}(e,t)}}var i;t.exports=S,S.WritableState=E;var o={deprecate:r(8526)},a=r(4150),s=r(1664).Buffer,u=r.g.Uint8Array||function(){};var f,l=r(8522),h=r(1379).getHighWaterMark,c=r(8870).q,p=c.ERR_INVALID_ARG_TYPE,d=c.ERR_METHOD_NOT_IMPLEMENTED,y=c.ERR_MULTIPLE_CALLBACK,g=c.ERR_STREAM_CANNOT_PIPE,v=c.ERR_STREAM_DESTROYED,b=c.ERR_STREAM_NULL_VALUES,m=c.ERR_STREAM_WRITE_AFTER_END,w=c.ERR_UNKNOWN_ENCODING,x=l.errorOrDestroy;function _(){}function E(t,e,o){i=i||r(3536),t=t||{},\"boolean\"!=typeof o&&(o=e instanceof i),this.objectMode=!!t.objectMode,o&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=h(this,t,\"writableHighWaterMark\",o),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var a=!1===t.decodeStrings;this.decodeStrings=!a,this.defaultEncoding=t.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(t){!function(t,e){var r=t._writableState,n=r.sync,i=r.writecb;if(\"function\"!=typeof i)throw new y;if(function(t){t.writing=!1,t.writecb=null,t.length-=t.writelen,t.writelen=0}(r),e)!function(t,e,r,n,i){--e.pendingcb,r?(process.nextTick(i,n),process.nextTick(T,t,e),t._writableState.errorEmitted=!0,x(t,n)):(i(n),t._writableState.errorEmitted=!0,x(t,n),T(t,e))}(t,r,n,e,i);else{var o=A(r)||t.destroyed;o||r.corked||r.bufferProcessing||!r.bufferedRequest||R(t,r),n?process.nextTick(M,t,r,o,i):M(t,r,o,i)}}(e,t)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!1!==t.emitClose,this.autoDestroy=!!t.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new n(this)}function S(t){var e=this instanceof(i=i||r(3536));if(!e&&!f.call(S,this))return new S(t);this._writableState=new E(t,this,e),this.writable=!0,t&&(\"function\"==typeof t.write&&(this._write=t.write),\"function\"==typeof t.writev&&(this._writev=t.writev),\"function\"==typeof t.destroy&&(this._destroy=t.destroy),\"function\"==typeof t.final&&(this._final=t.final)),a.call(this)}function k(t,e,r,n,i,o,a){e.writelen=n,e.writecb=a,e.writing=!0,e.sync=!0,e.destroyed?e.onwrite(new v(\"write\")):r?t._writev(i,e.onwrite):t._write(i,o,e.onwrite),e.sync=!1}function M(t,e,r,n){r||function(t,e){0===e.length&&e.needDrain&&(e.needDrain=!1,t.emit(\"drain\"))}(t,e),e.pendingcb--,n(),T(t,e)}function R(t,e){e.bufferProcessing=!0;var r=e.bufferedRequest;if(t._writev&&r&&r.next){var i=e.bufferedRequestCount,o=new Array(i),a=e.corkedRequestsFree;a.entry=r;for(var s=0,u=!0;r;)o[s]=r,r.isBuf||(u=!1),r=r.next,s+=1;o.allBuffers=u,k(t,e,!0,e.length,o,\"\",a.finish),e.pendingcb++,e.lastBufferedRequest=null,a.next?(e.corkedRequestsFree=a.next,a.next=null):e.corkedRequestsFree=new n(e),e.bufferedRequestCount=0}else{for(;r;){var f=r.chunk,l=r.encoding,h=r.callback;if(k(t,e,!1,e.objectMode?1:f.length,f,l,h),r=r.next,e.bufferedRequestCount--,e.writing)break}null===r&&(e.lastBufferedRequest=null)}e.bufferedRequest=r,e.bufferProcessing=!1}function A(t){return t.ending&&0===t.length&&null===t.bufferedRequest&&!t.finished&&!t.writing}function j(t,e){t._final((function(r){e.pendingcb--,r&&x(t,r),e.prefinished=!0,t.emit(\"prefinish\"),T(t,e)}))}function T(t,e){var r=A(e);if(r&&(function(t,e){e.prefinished||e.finalCalled||(\"function\"!=typeof t._final||e.destroyed?(e.prefinished=!0,t.emit(\"prefinish\")):(e.pendingcb++,e.finalCalled=!0,process.nextTick(j,t,e)))}(t,e),0===e.pendingcb&&(e.finished=!0,t.emit(\"finish\"),e.autoDestroy))){var n=t._readableState;(!n||n.autoDestroy&&n.endEmitted)&&t.destroy()}return r}r(5717)(S,a),E.prototype.getBuffer=function(){for(var t=this.bufferedRequest,e=[];t;)e.push(t),t=t.next;return e},function(){try{Object.defineProperty(E.prototype,\"buffer\",{get:o.deprecate((function(){return this.getBuffer()}),\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch(t){}}(),\"function\"==typeof Symbol&&Symbol.hasInstance&&\"function\"==typeof Function.prototype[Symbol.hasInstance]?(f=Function.prototype[Symbol.hasInstance],Object.defineProperty(S,Symbol.hasInstance,{value:function(t){return!!f.call(this,t)||this===S&&(t&&t._writableState instanceof E)}})):f=function(t){return t instanceof this},S.prototype.pipe=function(){x(this,new g)},S.prototype.write=function(t,e,r){var n,i=this._writableState,o=!1,a=!i.objectMode&&(n=t,s.isBuffer(n)||n instanceof u);return a&&!s.isBuffer(t)&&(t=function(t){return s.from(t)}(t)),\"function\"==typeof e&&(r=e,e=null),a?e=\"buffer\":e||(e=i.defaultEncoding),\"function\"!=typeof r&&(r=_),i.ending?function(t,e){var r=new m;x(t,r),process.nextTick(e,r)}(this,r):(a||function(t,e,r,n){var i;return null===r?i=new b:\"string\"==typeof r||e.objectMode||(i=new p(\"chunk\",[\"string\",\"Buffer\"],r)),!i||(x(t,i),process.nextTick(n,i),!1)}(this,i,t,r))&&(i.pendingcb++,o=function(t,e,r,n,i,o){if(!r){var a=function(t,e,r){t.objectMode||!1===t.decodeStrings||\"string\"!=typeof e||(e=s.from(e,r));return e}(e,n,i);n!==a&&(r=!0,i=\"buffer\",n=a)}var u=e.objectMode?1:n.length;e.length+=u;var f=e.length-1))throw new w(t);return this._writableState.defaultEncoding=t,this},Object.defineProperty(S.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(S.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),S.prototype._write=function(t,e,r){r(new d(\"_write()\"))},S.prototype._writev=null,S.prototype.end=function(t,e,r){var n=this._writableState;return\"function\"==typeof t?(r=t,t=null,e=null):\"function\"==typeof e&&(r=e,e=null),null!=t&&this.write(t,e),n.corked&&(n.corked=1,this.uncork()),n.ending||function(t,e,r){e.ending=!0,T(t,e),r&&(e.finished?process.nextTick(r):t.once(\"finish\",r));e.ended=!0,t.writable=!1}(this,n,r),this},Object.defineProperty(S.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(S.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(t){this._writableState&&(this._writableState.destroyed=t)}}),S.prototype.destroy=l.destroy,S.prototype._undestroy=l.undestroy,S.prototype._destroy=function(t,e){e(t)}},6492:(t,e,r)=>{\"use strict\";var n;function i(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var o=r(3790),a=Symbol(\"lastResolve\"),s=Symbol(\"lastReject\"),u=Symbol(\"error\"),f=Symbol(\"ended\"),l=Symbol(\"lastPromise\"),h=Symbol(\"handlePromise\"),c=Symbol(\"stream\");function p(t,e){return{value:t,done:e}}function d(t){var e=t[a];if(null!==e){var r=t[c].read();null!==r&&(t[l]=null,t[a]=null,t[s]=null,e(p(r,!1)))}}function y(t){process.nextTick(d,t)}var g=Object.getPrototypeOf((function(){})),v=Object.setPrototypeOf((i(n={get stream(){return this[c]},next:function(){var t=this,e=this[u];if(null!==e)return Promise.reject(e);if(this[f])return Promise.resolve(p(void 0,!0));if(this[c].destroyed)return new Promise((function(e,r){process.nextTick((function(){t[u]?r(t[u]):e(p(void 0,!0))}))}));var r,n=this[l];if(n)r=new Promise(function(t,e){return function(r,n){t.then((function(){e[f]?r(p(void 0,!0)):e[h](r,n)}),n)}}(n,this));else{var i=this[c].read();if(null!==i)return Promise.resolve(p(i,!1));r=new Promise(this[h])}return this[l]=r,r}},Symbol.asyncIterator,(function(){return this})),i(n,\"return\",(function(){var t=this;return new Promise((function(e,r){t[c].destroy(null,(function(t){t?r(t):e(p(void 0,!0))}))}))})),n),g);t.exports=function(t){var e,r=Object.create(v,(i(e={},c,{value:t,writable:!0}),i(e,a,{value:null,writable:!0}),i(e,s,{value:null,writable:!0}),i(e,u,{value:null,writable:!0}),i(e,f,{value:t._readableState.endEmitted,writable:!0}),i(e,h,{value:function(t,e){var n=r[c].read();n?(r[l]=null,r[a]=null,r[s]=null,t(p(n,!1))):(r[a]=t,r[s]=e)},writable:!0}),e));return r[l]=null,o(t,(function(t){if(t&&\"ERR_STREAM_PREMATURE_CLOSE\"!==t.code){var e=r[s];return null!==e&&(r[l]=null,r[a]=null,r[s]=null,e(t)),void(r[u]=t)}var n=r[a];null!==n&&(r[l]=null,r[a]=null,r[s]=null,n(p(void 0,!0))),r[f]=!0})),t.on(\"readable\",y.bind(null,r)),r}},1396:(t,e,r)=>{\"use strict\";function n(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function i(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function o(t,e){for(var r=0;r0?this.tail.next=e:this.head=e,this.tail=e,++this.length}},{key:\"unshift\",value:function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length}},{key:\"shift\",value:function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t}}},{key:\"clear\",value:function(){this.head=this.tail=null,this.length=0}},{key:\"join\",value:function(t){if(0===this.length)return\"\";for(var e=this.head,r=\"\"+e.data;e=e.next;)r+=t+e.data;return r}},{key:\"concat\",value:function(t){if(0===this.length)return a.alloc(0);for(var e,r,n,i=a.allocUnsafe(t>>>0),o=this.head,s=0;o;)e=o.data,r=i,n=s,a.prototype.copy.call(e,r,n),s+=o.data.length,o=o.next;return i}},{key:\"consume\",value:function(t,e){var r;return ti.length?i.length:t;if(o===i.length?n+=i:n+=i.slice(0,t),0==(t-=o)){o===i.length?(++r,e.next?this.head=e.next:this.head=this.tail=null):(this.head=e,e.data=i.slice(o));break}++r}return this.length-=r,n}},{key:\"_getBuffer\",value:function(t){var e=a.allocUnsafe(t),r=this.head,n=1;for(r.data.copy(e),t-=r.data.length;r=r.next;){var i=r.data,o=t>i.length?i.length:t;if(i.copy(e,e.length-t,0,o),0==(t-=o)){o===i.length?(++n,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=i.slice(o));break}++n}return this.length-=n,e}},{key:u,value:function(t,e){return s(this,function(t){for(var e=1;e{\"use strict\";function e(t,e){n(t,e),r(t)}function r(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit(\"close\")}function n(t,e){t.emit(\"error\",e)}t.exports={destroy:function(t,i){var o=this,a=this._readableState&&this._readableState.destroyed,s=this._writableState&&this._writableState.destroyed;return a||s?(i?i(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(n,this,t)):process.nextTick(n,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,(function(t){!i&&t?o._writableState?o._writableState.errorEmitted?process.nextTick(r,o):(o._writableState.errorEmitted=!0,process.nextTick(e,o,t)):process.nextTick(e,o,t):i?(process.nextTick(r,o),i(t)):process.nextTick(r,o)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)},errorOrDestroy:function(t,e){var r=t._readableState,n=t._writableState;r&&r.autoDestroy||n&&n.autoDestroy?t.destroy(e):t.emit(\"error\",e)}}},3790:(t,e,r)=>{\"use strict\";var n=r(8870).q.ERR_STREAM_PREMATURE_CLOSE;function i(){}t.exports=function t(e,r,o){if(\"function\"==typeof r)return t(e,null,r);r||(r={}),o=function(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,n=new Array(r),i=0;i{t.exports=function(){throw new Error(\"Readable.from is not available in the browser\")}},8155:(t,e,r)=>{\"use strict\";var n;var i=r(8870).q,o=i.ERR_MISSING_ARGS,a=i.ERR_STREAM_DESTROYED;function s(t){if(t)throw t}function u(t,e,i,o){o=function(t){var e=!1;return function(){e||(e=!0,t.apply(void 0,arguments))}}(o);var s=!1;t.on(\"close\",(function(){s=!0})),void 0===n&&(n=r(3790)),n(t,{readable:e,writable:i},(function(t){if(t)return o(t);s=!0,o()}));var u=!1;return function(e){if(!s&&!u)return u=!0,function(t){return t.setHeader&&\"function\"==typeof t.abort}(t)?t.abort():\"function\"==typeof t.destroy?t.destroy():void o(e||new a(\"pipe\"))}}function f(t){t()}function l(t,e){return t.pipe(e)}function h(t){return t.length?\"function\"!=typeof t[t.length-1]?s:t.pop():s}t.exports=function(){for(var t=arguments.length,e=new Array(t),r=0;r0,(function(t){n||(n=t),t&&a.forEach(f),o||(a.forEach(f),i(n))}))}));return e.reduce(l)}},1379:(t,e,r)=>{\"use strict\";var n=r(8870).q.ERR_INVALID_OPT_VALUE;t.exports={getHighWaterMark:function(t,e,r,i){var o=function(t,e,r){return null!=t.highWaterMark?t.highWaterMark:e?t[r]:null}(e,i,r);if(null!=o){if(!isFinite(o)||Math.floor(o)!==o||o<0)throw new n(i?r:\"highWaterMark\",o);return Math.floor(o)}return t.objectMode?16:16384}}},4150:(t,e,r)=>{t.exports=r(7988).EventEmitter},8043:(t,e,r)=>{t.exports=i;var n=r(7988).EventEmitter;function i(){n.call(this)}r(5717)(i,n),i.Readable=r(4459),i.Writable=r(4987),i.Duplex=r(3536),i.Transform=r(6695),i.PassThrough=r(8373),i.finished=r(3790),i.pipeline=r(8155),i.Stream=i,i.prototype.pipe=function(t,e){var r=this;function i(e){t.writable&&!1===t.write(e)&&r.pause&&r.pause()}function o(){r.readable&&r.resume&&r.resume()}r.on(\"data\",i),t.on(\"drain\",o),t._isStdio||e&&!1===e.end||(r.on(\"end\",s),r.on(\"close\",u));var a=!1;function s(){a||(a=!0,t.end())}function u(){a||(a=!0,\"function\"==typeof t.destroy&&t.destroy())}function f(t){if(l(),0===n.listenerCount(this,\"error\"))throw t}function l(){r.removeListener(\"data\",i),t.removeListener(\"drain\",o),r.removeListener(\"end\",s),r.removeListener(\"close\",u),r.removeListener(\"error\",f),t.removeListener(\"error\",f),r.removeListener(\"end\",l),r.removeListener(\"close\",l),t.removeListener(\"close\",l)}return r.on(\"error\",f),t.on(\"error\",f),r.on(\"end\",l),r.on(\"close\",l),t.on(\"close\",l),t.emit(\"pipe\",r),t}},140:(t,e,r)=>{\"use strict\";var n=r(9509).Buffer,i=n.isEncoding||function(t){switch((t=\"\"+t)&&t.toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":case\"raw\":return!0;default:return!1}};function o(t){var e;switch(this.encoding=function(t){var e=function(t){if(!t)return\"utf8\";for(var e;;)switch(t){case\"utf8\":case\"utf-8\":return\"utf8\";case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return\"utf16le\";case\"latin1\":case\"binary\":return\"latin1\";case\"base64\":case\"ascii\":case\"hex\":return t;default:if(e)return;t=(\"\"+t).toLowerCase(),e=!0}}(t);if(\"string\"!=typeof e&&(n.isEncoding===i||!i(t)))throw new Error(\"Unknown encoding: \"+t);return e||t}(t),this.encoding){case\"utf16le\":this.text=u,this.end=f,e=4;break;case\"utf8\":this.fillLast=s,e=4;break;case\"base64\":this.text=l,this.end=h,e=3;break;default:return this.write=c,void(this.end=p)}this.lastNeed=0,this.lastTotal=0,this.lastChar=n.allocUnsafe(e)}function a(t){return t<=127?0:t>>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function s(t){var e=this.lastTotal-this.lastNeed,r=function(t,e,r){if(128!=(192&e[0]))return t.lastNeed=0,\"�\";if(t.lastNeed>1&&e.length>1){if(128!=(192&e[1]))return t.lastNeed=1,\"�\";if(t.lastNeed>2&&e.length>2&&128!=(192&e[2]))return t.lastNeed=2,\"�\"}}(this,t);return void 0!==r?r:this.lastNeed<=t.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),void(this.lastNeed-=t.length))}function u(t,e){if((t.length-e)%2==0){var r=t.toString(\"utf16le\",e);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString(\"utf16le\",e,t.length-1)}function f(t){var e=t&&t.length?this.write(t):\"\";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString(\"utf16le\",0,r)}return e}function l(t,e){var r=(t.length-e)%3;return 0===r?t.toString(\"base64\",e):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString(\"base64\",e,t.length-r))}function h(t){var e=t&&t.length?this.write(t):\"\";return this.lastNeed?e+this.lastChar.toString(\"base64\",0,3-this.lastNeed):e}function c(t){return t.toString(this.encoding)}function p(t){return t&&t.length?this.write(t):\"\"}e.s=o,o.prototype.write=function(t){if(0===t.length)return\"\";var e,r;if(this.lastNeed){if(void 0===(e=this.fillLast(t)))return\"\";r=this.lastNeed,this.lastNeed=0}else r=0;return r=0)return i>0&&(t.lastNeed=i-1),i;if(--n=0)return i>0&&(t.lastNeed=i-2),i;if(--n=0)return i>0&&(2===i?i=0:t.lastNeed=i-3),i;return 0}(this,t,e);if(!this.lastNeed)return t.toString(\"utf8\",e);this.lastTotal=r;var n=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,n),t.toString(\"utf8\",e,n)},o.prototype.fillLast=function(t){if(this.lastNeed<=t.length)return t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,t.length),this.lastNeed-=t.length}},8526:(t,e,r)=>{function n(t){try{if(!r.g.localStorage)return!1}catch(t){return!1}var e=r.g.localStorage[t];return null!=e&&\"true\"===String(e).toLowerCase()}t.exports=function(t,e){if(n(\"noDeprecation\"))return t;var r=!1;return function(){if(!r){if(n(\"throwDeprecation\"))throw new Error(e);n(\"traceDeprecation\")?console.trace(e):console.warn(e),r=!0}return t.apply(this,arguments)}}},747:(t,e,r)=>{\"use strict\";var n=r(1664).Buffer,i=r(9530),o=r(2861),a=r(1494).N,s=(r(1943),r(6547),r(858));function u(t,e){var r;try{r=new a(t)}catch(t){return void e(t)}if(r.numFrames()>0){var n=[r.numFrames(),r.height,r.width,4],i=new Uint8Array(n[0]*n[1]*n[2]*n[3]),s=o(i,n);try{for(var u=0;u{var n;n=\"undefined\"!=typeof window?window:void 0!==r.g?r.g:\"undefined\"!=typeof self?self:{},t.exports=n},645:(t,e)=>{e.read=function(t,e,r,n,i){var o,a,s=8*i-n-1,u=(1<>1,l=-7,h=r?i-1:0,c=r?-1:1,p=t[e+h];for(h+=c,o=p&(1<<-l)-1,p>>=-l,l+=s;l>0;o=256*o+t[e+h],h+=c,l-=8);for(a=o&(1<<-l)-1,o>>=-l,l+=n;l>0;a=256*a+t[e+h],h+=c,l-=8);if(0===o)o=1-f;else{if(o===u)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,n),o-=f}return(p?-1:1)*a*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var a,s,u,f=8*o-i-1,l=(1<>1,c=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,d=n?1:-1,y=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=l):(a=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-a))<1&&(a--,u*=2),(e+=a+h>=1?c/u:c*Math.pow(2,1-h))*u>=2&&(a++,u/=2),a+h>=l?(s=0,a=l):a+h>=1?(s=(e*u-1)*Math.pow(2,i),a+=h):(s=e*Math.pow(2,h-1)*Math.pow(2,i),a=0));i>=8;t[r+p]=255&s,p+=d,s/=256,i-=8);for(a=a<0;t[r+p]=255&a,p+=d,a/=256,f-=8);t[r+p-d]|=128*y}},5717:t=>{\"function\"==typeof Object.create?t.exports=function(t,e){e&&(t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:t.exports=function(t,e){if(e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}}},6907:t=>{\"use strict\";t.exports=function(t){for(var e=new Array(t),r=0;r{function e(t){return!!t.constructor&&\"function\"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}t.exports=function(t){return null!=t&&(e(t)||function(t){return\"function\"==typeof t.readFloatLE&&\"function\"==typeof t.slice&&e(t.slice(0,0))}(t)||!!t._isBuffer)}},7376:t=>{t.exports=function(t){if(!t)return!1;var r=e.call(t);return\"[object Function]\"===r||\"function\"==typeof t&&\"[object RegExp]\"!==r||\"undefined\"!=typeof window&&(t===window.setTimeout||t===window.alert||t===window.confirm||t===window.prompt)};var e=Object.prototype.toString},1943:(t,e,r)=>{\"use strict\";var n=r(2861),i=r(1895);t.exports=function(t,e){for(var r=[],o=t,a=1;Array.isArray(o);)r.push(o.length),a*=o.length,o=o[0];return 0===r.length?n():(e||(e=n(new Float64Array(a),r)),i(e,t),e)}},1895:(t,e,r)=>{t.exports=r(6239)({args:[\"array\",\"scalar\",\"index\"],pre:{body:\"{}\",args:[],thisVars:[],localVars:[]},body:{body:\"{\\nvar _inline_1_v=_inline_1_arg1_,_inline_1_i\\nfor(_inline_1_i=0;_inline_1_i<_inline_1_arg2_.length-1;++_inline_1_i) {\\n_inline_1_v=_inline_1_v[_inline_1_arg2_[_inline_1_i]]\\n}\\n_inline_1_arg0_=_inline_1_v[_inline_1_arg2_[_inline_1_arg2_.length-1]]\\n}\",args:[{name:\"_inline_1_arg0_\",lvalue:!0,rvalue:!1,count:1},{name:\"_inline_1_arg1_\",lvalue:!1,rvalue:!0,count:1},{name:\"_inline_1_arg2_\",lvalue:!1,rvalue:!0,count:4}],thisVars:[],localVars:[\"_inline_1_i\",\"_inline_1_v\"]},post:{body:\"{}\",args:[],thisVars:[],localVars:[]},funcName:\"convert\",blockSize:64})},2861:(t,e,r)=>{var n=r(6907),i=r(8738),o=\"undefined\"!=typeof Float64Array;function a(t,e){return t[0]-e[0]}function s(){var t,e=this.stride,r=new Array(e.length);for(t=0;tMath.abs(this.stride[1]))?[1,0]:[0,1]}})\"):3===e&&o.push(\"var s0=Math.abs(this.stride[0]),s1=Math.abs(this.stride[1]),s2=Math.abs(this.stride[2]);if(s0>s1){if(s1>s2){return [2,1,0];}else if(s0>s2){return [1,2,0];}else{return [1,0,2];}}else if(s0>s2){return [2,0,1];}else if(s2>s1){return [0,1,2];}else{return [0,2,1];}}})\")):o.push(\"ORDER})\")),o.push(\"proto.set=function \"+r+\"_set(\"+u.join(\",\")+\",v){\"),i?o.push(\"return this.data.set(\"+l+\",v)}\"):o.push(\"return this.data[\"+l+\"]=v}\"),o.push(\"proto.get=function \"+r+\"_get(\"+u.join(\",\")+\"){\"),i?o.push(\"return this.data.get(\"+l+\")}\"):o.push(\"return this.data[\"+l+\"]}\"),o.push(\"proto.index=function \"+r+\"_index(\",u.join(),\"){return \"+l+\"}\"),o.push(\"proto.hi=function \"+r+\"_hi(\"+u.join(\",\")+\"){return new \"+r+\"(this.data,\"+a.map((function(t){return[\"(typeof i\",t,\"!=='number'||i\",t,\"<0)?this.shape[\",t,\"]:i\",t,\"|0\"].join(\"\")})).join(\",\")+\",\"+a.map((function(t){return\"this.stride[\"+t+\"]\"})).join(\",\")+\",this.offset)}\");var p=a.map((function(t){return\"a\"+t+\"=this.shape[\"+t+\"]\"})),d=a.map((function(t){return\"c\"+t+\"=this.stride[\"+t+\"]\"}));o.push(\"proto.lo=function \"+r+\"_lo(\"+u.join(\",\")+\"){var b=this.offset,d=0,\"+p.join(\",\")+\",\"+d.join(\",\"));for(var y=0;y=0){d=i\"+y+\"|0;b+=c\"+y+\"*d;a\"+y+\"-=d}\");o.push(\"return new \"+r+\"(this.data,\"+a.map((function(t){return\"a\"+t})).join(\",\")+\",\"+a.map((function(t){return\"c\"+t})).join(\",\")+\",b)}\"),o.push(\"proto.step=function \"+r+\"_step(\"+u.join(\",\")+\"){var \"+a.map((function(t){return\"a\"+t+\"=this.shape[\"+t+\"]\"})).join(\",\")+\",\"+a.map((function(t){return\"b\"+t+\"=this.stride[\"+t+\"]\"})).join(\",\")+\",c=this.offset,d=0,ceil=Math.ceil\");for(y=0;y=0){c=(c+this.stride[\"+y+\"]*i\"+y+\")|0}else{a.push(this.shape[\"+y+\"]);b.push(this.stride[\"+y+\"])}\");return o.push(\"var ctor=CTOR_LIST[a.length+1];return ctor(this.data,a,b,c)}\"),o.push(\"return function construct_\"+r+\"(data,shape,stride,offset){return new \"+r+\"(data,\"+a.map((function(t){return\"shape[\"+t+\"]\"})).join(\",\")+\",\"+a.map((function(t){return\"stride[\"+t+\"]\"})).join(\",\")+\",offset)}\"),new Function(\"CTOR_LIST\",\"ORDER\",o.join(\"\\n\"))(f[t],s)}var f={float32:[],float64:[],int8:[],int16:[],int32:[],uint8:[],uint16:[],uint32:[],array:[],uint8_clamped:[],bigint64:[],biguint64:[],buffer:[],generic:[]};t.exports=function(t,e,r,n){if(void 0===t)return(0,f.array[0])([]);\"number\"==typeof t&&(t=[t]),void 0===e&&(e=[t.length]);var a=e.length;if(void 0===r){r=new Array(a);for(var s=a-1,l=1;s>=0;--s)r[s]=l,l*=e[s]}if(void 0===n){n=0;for(s=0;s{\"use strict\";function r(t,e,r,n){for(var i=t[e++],o=1<>=u,l-=u,g!==o){if(g===a)break;for(var v=go;)m=d[m]>>8,++b;var w=m;if(c+b+(v!==g?1:0)>n)return;r[c++]=w;var x=c+=b;for(v!==g&&(r[c++]=w),m=v;b--;)m=d[m],r[--x]=255&m,m>>=8;null!==y&&s<4096&&(d[s++]=y<<8|w,s>=f+1&&u<12&&(++u,f=f<<1|1)),y=g}else s=a+1,f=(1<<(u=i+1))-1,y=null}return r}try{(function(t,e,r,n){var i=0,o=void 0===(n=void 0===n?{}:n).loop?null:n.loop,a=void 0===n.palette?null:n.palette;if(e<=0||r<=0||e>65535||r>65535)throw new Error(\"Width/Height invalid.\");function s(t){var e=t.length;if(e<2||e>256||e&e-1)throw new Error(\"Invalid code/color length, must be power of 2 and 2 .. 256.\");return e}t[i++]=71,t[i++]=73,t[i++]=70,t[i++]=56,t[i++]=57,t[i++]=97;var u=0,f=0;if(null!==a){for(var l=s(a);l>>=1;)++u;if(l=1<=l)throw new Error(\"Background index out of range.\");if(0===f)throw new Error(\"Background index explicitly passed as 0.\")}}if(t[i++]=255&e,t[i++]=e>>8&255,t[i++]=255&r,t[i++]=r>>8&255,t[i++]=(null!==a?128:0)|u,t[i++]=f,t[i++]=0,null!==a)for(var h=0,c=a.length;h>16&255,t[i++]=p>>8&255,t[i++]=255&p}if(null!==o){if(o<0||o>65535)throw new Error(\"Loop count invalid.\");t[i++]=33,t[i++]=255,t[i++]=11,t[i++]=78,t[i++]=69,t[i++]=84,t[i++]=83,t[i++]=67,t[i++]=65,t[i++]=80,t[i++]=69,t[i++]=50,t[i++]=46,t[i++]=48,t[i++]=3,t[i++]=1,t[i++]=255&o,t[i++]=o>>8&255,t[i++]=0}var d=!1;this.addFrame=function(e,r,n,o,u,f){if(!0===d&&(--i,d=!1),f=void 0===f?{}:f,e<0||r<0||e>65535||r>65535)throw new Error(\"x/y invalid.\");if(n<=0||o<=0||n>65535||o>65535)throw new Error(\"Width/Height invalid.\");if(u.length>=1;)++p;c=1<3)throw new Error(\"Disposal out of range.\");var v=!1,b=0;if(void 0!==f.transparent&&null!==f.transparent&&(v=!0,(b=f.transparent)<0||b>=c))throw new Error(\"Transparent color index.\");if((0!==g||v||0!==y)&&(t[i++]=33,t[i++]=249,t[i++]=4,t[i++]=g<<2|(!0===v?1:0),t[i++]=255&y,t[i++]=y>>8&255,t[i++]=b,t[i++]=0),t[i++]=44,t[i++]=255&e,t[i++]=e>>8&255,t[i++]=255&r,t[i++]=r>>8&255,t[i++]=255&n,t[i++]=n>>8&255,t[i++]=255&o,t[i++]=o>>8&255,t[i++]=!0===l?128|p-1:0,!0===l)for(var m=0,w=h.length;m>16&255,t[i++]=x>>8&255,t[i++]=255&x}return i=function(t,e,r,n){t[e++]=r;var i=e++,o=1<=r;)t[e++]=255&h,h>>=8,l-=8,e===i+256&&(t[i]=255,i=e++)}function p(t){h|=t<=8;)t[e++]=255&h,h>>=8,l-=8,e===i+256&&(t[i]=255,i=e++);4096===u?(p(o),u=s+1,f=r+1,y={}):(u>=1<>7,s=1<<1+(7&o);t[e++],t[e++];var u=null,f=null;a&&(u=e,f=s,e+=3*s);var l=!0,h=[],c=0,p=null,d=0,y=null;for(this.width=n,this.height=i;l&&e=0))throw Error(\"Invalid block size\");if(0===A)break;e+=A}break;case 249:if(4!==t[e++]||0!==t[e+4])throw new Error(\"Invalid graphics extension block.\");var g=t[e++];c=t[e++]|t[e++]<<8,p=t[e++],0==(1&g)&&(p=null),d=g>>2&7,e++;break;case 254:for(;;){if(!((A=t[e++])>=0))throw Error(\"Invalid block size\");if(0===A)break;e+=A}break;default:throw new Error(\"Unknown graphic control label: 0x\"+t[e-1].toString(16))}break;case 44:var v=t[e++]|t[e++]<<8,b=t[e++]|t[e++]<<8,m=t[e++]|t[e++]<<8,w=t[e++]|t[e++]<<8,x=t[e++],_=x>>6&1,E=1<<1+(7&x),S=u,k=f,M=!1;x>>7&&(M=!0,S=e,k=E,e+=3*E);var R=e;for(e++;;){var A;if(!((A=t[e++])>=0))throw Error(\"Invalid block size\");if(0===A)break;e+=A}h.push({x:v,y:b,width:m,height:w,has_local_palette:M,palette_offset:S,palette_size:k,data_offset:R,data_length:e-R,transparent_index:p,interlaced:!!_,delay:c,disposal:d});break;case 59:l=!1;break;default:throw new Error(\"Unknown gif block: 0x\"+t[e-1].toString(16))}this.numFrames=function(){return h.length},this.loopCount=function(){return y},this.frameInfo=function(t){if(t<0||t>=h.length)throw new Error(\"Frame index out of range.\");return h[t]},this.decodeAndBlitFrameBGRA=function(e,i){var o=this.frameInfo(e),a=o.width*o.height,s=new Uint8Array(a);r(t,o.data_offset,s,a);var u=o.palette_offset,f=o.transparent_index;null===f&&(f=256);var l=o.width,h=n-l,c=l,p=4*(o.y*n+o.x),d=4*((o.y+o.height)*n+o.x),y=p,g=4*h;!0===o.interlaced&&(g+=4*n*7);for(var v=8,b=0,m=s.length;b=d&&(g=4*h+4*n*(v-1),y=p+(l+h)*(v<<1),v>>=1)),w===f)y+=4;else{var x=t[u+3*w],_=t[u+3*w+1],E=t[u+3*w+2];i[y++]=E,i[y++]=_,i[y++]=x,i[y++]=255}--c}},this.decodeAndBlitFrameRGBA=function(e,i){var o=this.frameInfo(e),a=o.width*o.height,s=new Uint8Array(a);r(t,o.data_offset,s,a);var u=o.palette_offset,f=o.transparent_index;null===f&&(f=256);var l=o.width,h=n-l,c=l,p=4*(o.y*n+o.x),d=4*((o.y+o.height)*n+o.x),y=p,g=4*h;!0===o.interlaced&&(g+=4*n*7);for(var v=8,b=0,m=s.length;b=d&&(g=4*h+4*n*(v-1),y=p+(l+h)*(v<<1),v>>=1)),w===f)y+=4;else{var x=t[u+3*w],_=t[u+3*w+1],E=t[u+3*w+2];i[y++]=x,i[y++]=_,i[y++]=E,i[y++]=255}--c}}}}catch(t){}},4947:t=>{var e=function(t){return t.replace(/^\\s+|\\s+$/g,\"\")};t.exports=function(t){if(!t)return{};for(var r,n={},i=e(t).split(\"\\n\"),o=0;o{\"use strict\";t.exports=i;var n=r(645);function i(t){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.pos=0,this.type=0,this.length=this.buf.length}i.Varint=0,i.Fixed64=1,i.Bytes=2,i.Fixed32=5;var o=4294967296,a=1/o,s=\"undefined\"==typeof TextDecoder?null:new TextDecoder(\"utf8\");function u(t){return t.type===i.Bytes?t.readVarint()+t.pos:t.pos+1}function f(t,e,r){return r?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}function l(t,e,r){var n=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(7*Math.LN2));r.realloc(n);for(var i=r.pos-1;i>=t;i--)r.buf[i+n]=r.buf[i]}function h(t,e){for(var r=0;r>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function _(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+(t[e+3]<<24)}i.prototype={destroy:function(){this.buf=null},readFields:function(t,e,r){for(r=r||this.length;this.pos>3,o=this.pos;this.type=7&n,t(i,e,this),this.pos===o&&this.skip(n)}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=w(this.buf,this.pos);return this.pos+=4,t},readSFixed32:function(){var t=_(this.buf,this.pos);return this.pos+=4,t},readFixed64:function(){var t=w(this.buf,this.pos)+w(this.buf,this.pos+4)*o;return this.pos+=8,t},readSFixed64:function(){var t=w(this.buf,this.pos)+_(this.buf,this.pos+4)*o;return this.pos+=8,t},readFloat:function(){var t=n.read(this.buf,this.pos,!0,23,4);return this.pos+=4,t},readDouble:function(){var t=n.read(this.buf,this.pos,!0,52,8);return this.pos+=8,t},readVarint:function(t){var e,r,n=this.buf;return e=127&(r=n[this.pos++]),r<128?e:(e|=(127&(r=n[this.pos++]))<<7,r<128?e:(e|=(127&(r=n[this.pos++]))<<14,r<128?e:(e|=(127&(r=n[this.pos++]))<<21,r<128?e:function(t,e,r){var n,i,o=r.buf;if(i=o[r.pos++],n=(112&i)>>4,i<128)return f(t,n,e);if(i=o[r.pos++],n|=(127&i)<<3,i<128)return f(t,n,e);if(i=o[r.pos++],n|=(127&i)<<10,i<128)return f(t,n,e);if(i=o[r.pos++],n|=(127&i)<<17,i<128)return f(t,n,e);if(i=o[r.pos++],n|=(127&i)<<24,i<128)return f(t,n,e);if(i=o[r.pos++],n|=(1&i)<<31,i<128)return f(t,n,e);throw new Error(\"Expected varint not more than 10 bytes\")}(e|=(15&(r=n[this.pos]))<<28,t,this))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=this.pos;return this.pos=t,t-e>=12&&s?function(t,e,r){return s.decode(t.subarray(e,r))}(this.buf,e,t):function(t,e,r){var n=\"\",i=e;for(;i239?4:u>223?3:u>191?2:1;if(i+l>r)break;1===l?u<128&&(f=u):2===l?128==(192&(o=t[i+1]))&&(f=(31&u)<<6|63&o)<=127&&(f=null):3===l?(o=t[i+1],a=t[i+2],128==(192&o)&&128==(192&a)&&((f=(15&u)<<12|(63&o)<<6|63&a)<=2047||f>=55296&&f<=57343)&&(f=null)):4===l&&(o=t[i+1],a=t[i+2],s=t[i+3],128==(192&o)&&128==(192&a)&&128==(192&s)&&((f=(15&u)<<18|(63&o)<<12|(63&a)<<6|63&s)<=65535||f>=1114112)&&(f=null)),null===f?(f=65533,l=1):f>65535&&(f-=65536,n+=String.fromCharCode(f>>>10&1023|55296),f=56320|1023&f),n+=String.fromCharCode(f),i+=l}return n}(this.buf,e,t)},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e},readPackedVarint:function(t,e){if(this.type!==i.Bytes)return t.push(this.readVarint(e));var r=u(this);for(t=t||[];this.pos127;);else if(e===i.Bytes)this.pos=this.readVarint()+this.pos;else if(e===i.Fixed32)this.pos+=4;else{if(e!==i.Fixed64)throw new Error(\"Unimplemented type: \"+e);this.pos+=8}},writeTag:function(t,e){this.writeVarint(t<<3|e)},realloc:function(t){for(var e=this.length||16;e268435455||t<0?function(t,e){var r,n;t>=0?(r=t%4294967296|0,n=t/4294967296|0):(n=~(-t/4294967296),4294967295^(r=~(-t%4294967296))?r=r+1|0:(r=0,n=n+1|0));if(t>=0x10000000000000000||t<-0x10000000000000000)throw new Error(\"Given varint doesn't fit into 10 bytes\");e.realloc(10),function(t,e,r){r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos]=127&t}(r,0,e),function(t,e){var r=(7&t)<<4;if(e.buf[e.pos++]|=r|((t>>>=3)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;e.buf[e.pos++]=127&t}(n,e)}(t,this):(this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127))))},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t)},writeBoolean:function(t){this.writeVarint(Boolean(t))},writeString:function(t){t=String(t),this.realloc(4*t.length),this.pos++;var e=this.pos;this.pos=function(t,e,r){for(var n,i,o=0;o55295&&n<57344){if(!i){n>56319||o+1===e.length?(t[r++]=239,t[r++]=191,t[r++]=189):i=n;continue}if(n<56320){t[r++]=239,t[r++]=191,t[r++]=189,i=n;continue}n=i-55296<<10|n-56320|65536,i=null}else i&&(t[r++]=239,t[r++]=191,t[r++]=189,i=null);n<128?t[r++]=n:(n<2048?t[r++]=n>>6|192:(n<65536?t[r++]=n>>12|224:(t[r++]=n>>18|240,t[r++]=n>>12&63|128),t[r++]=n>>6&63|128),t[r++]=63&n|128)}return r}(this.buf,t,this.pos);var r=this.pos-e;r>=128&&l(e,r,this),this.pos=e-1,this.writeVarint(r),this.pos+=r},writeFloat:function(t){this.realloc(4),n.write(this.buf,t,this.pos,!0,23,4),this.pos+=4},writeDouble:function(t){this.realloc(8),n.write(this.buf,t,this.pos,!0,52,8),this.pos+=8},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var r=0;r=128&&l(r,n,this),this.pos=r-1,this.writeVarint(n),this.pos+=n},writeMessage:function(t,e,r){this.writeTag(t,i.Bytes),this.writeRawMessage(e,r)},writePackedVarint:function(t,e){e.length&&this.writeMessage(t,h,e)},writePackedSVarint:function(t,e){e.length&&this.writeMessage(t,c,e)},writePackedBoolean:function(t,e){e.length&&this.writeMessage(t,y,e)},writePackedFloat:function(t,e){e.length&&this.writeMessage(t,p,e)},writePackedDouble:function(t,e){e.length&&this.writeMessage(t,d,e)},writePackedFixed32:function(t,e){e.length&&this.writeMessage(t,g,e)},writePackedSFixed32:function(t,e){e.length&&this.writeMessage(t,v,e)},writePackedFixed64:function(t,e){e.length&&this.writeMessage(t,b,e)},writePackedSFixed64:function(t,e){e.length&&this.writeMessage(t,m,e)},writeBytesField:function(t,e){this.writeTag(t,i.Bytes),this.writeBytes(e)},writeFixed32Field:function(t,e){this.writeTag(t,i.Fixed32),this.writeFixed32(e)},writeSFixed32Field:function(t,e){this.writeTag(t,i.Fixed32),this.writeSFixed32(e)},writeFixed64Field:function(t,e){this.writeTag(t,i.Fixed64),this.writeFixed64(e)},writeSFixed64Field:function(t,e){this.writeTag(t,i.Fixed64),this.writeSFixed64(e)},writeVarintField:function(t,e){this.writeTag(t,i.Varint),this.writeVarint(e)},writeSVarintField:function(t,e){this.writeTag(t,i.Varint),this.writeSVarint(e)},writeStringField:function(t,e){this.writeTag(t,i.Bytes),this.writeString(e)},writeFloatField:function(t,e){this.writeTag(t,i.Fixed32),this.writeFloat(e)},writeDoubleField:function(t,e){this.writeTag(t,i.Fixed64),this.writeDouble(e)},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e))}}},2676:function(t){t.exports=function(){\"use strict\";function t(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function e(t,e){for(var r=0;re?1:t0))break;if(null===e.right)break;if(r(t,e.right.key)>0&&(u=e.right,e.right=u.left,u.left=e,null===(e=u).right))break;o.right=e,o=e,e=e.right}}return o.right=e.left,a.left=e.right,e.left=i.right,e.right=i.left,e}function a(t,e,r,i){var a=new n(t,e);if(null===r)return a.left=a.right=null,a;var s=i(t,(r=o(t,r,i)).key);return s<0?(a.left=r.left,a.right=r,r.left=null):s>=0&&(a.right=r.right,a.left=r,r.right=null),a}function s(t,e,r){var n=null,i=null;if(e){var a=r((e=o(t,e,r)).key,t);0===a?(n=e.left,i=e.right):a<0?(i=e.right,e.right=null,n=e):(n=e.left,e.left=null,i=e)}return{left:n,right:i}}function u(t,e,r){return null===e?t:(null===t||((e=o(t.key,e,r)).left=t),e)}function f(t,e,r,n,i){if(t){n(e+(r?\"└── \":\"├── \")+i(t)+\"\\n\");var o=e+(r?\" \":\"│ \");t.left&&f(t.left,o,!1,n,i),t.right&&f(t.right,o,!0,n,i)}}var l=function(){function t(t){void 0===t&&(t=i),this._root=null,this._size=0,this._comparator=t}return t.prototype.insert=function(t,e){return this._size++,this._root=a(t,e,this._root,this._comparator)},t.prototype.add=function(t,e){var r=new n(t,e);null===this._root&&(r.left=r.right=null,this._size++,this._root=r);var i=this._comparator,a=o(t,this._root,i),s=i(t,a.key);return 0===s?this._root=a:(s<0?(r.left=a.left,r.right=a,a.left=null):s>0&&(r.right=a.right,r.left=a,a.right=null),this._size++,this._root=r),this._root},t.prototype.remove=function(t){this._root=this._remove(t,this._root,this._comparator)},t.prototype._remove=function(t,e,r){var n;return null===e?null:0===r(t,(e=o(t,e,r)).key)?(null===e.left?n=e.right:(n=o(t,e.left,r)).right=e.right,this._size--,n):e},t.prototype.pop=function(){var t=this._root;if(t){for(;t.left;)t=t.left;return this._root=o(t.key,this._root,this._comparator),this._root=this._remove(t.key,this._root,this._comparator),{key:t.key,data:t.data}}return null},t.prototype.findStatic=function(t){for(var e=this._root,r=this._comparator;e;){var n=r(t,e.key);if(0===n)return e;e=n<0?e.left:e.right}return null},t.prototype.find=function(t){return this._root&&(this._root=o(t,this._root,this._comparator),0!==this._comparator(t,this._root.key))?null:this._root},t.prototype.contains=function(t){for(var e=this._root,r=this._comparator;e;){var n=r(t,e.key);if(0===n)return!0;e=n<0?e.left:e.right}return!1},t.prototype.forEach=function(t,e){for(var r=this._root,n=[],i=!1;!i;)null!==r?(n.push(r),r=r.left):0!==n.length?(r=n.pop(),t.call(e,r),r=r.right):i=!0;return this},t.prototype.range=function(t,e,r,n){for(var i=[],o=this._comparator,a=this._root;0!==i.length||a;)if(a)i.push(a),a=a.left;else{if(o((a=i.pop()).key,e)>0)break;if(o(a.key,t)>=0&&r.call(n,a))return this;a=a.right}return this},t.prototype.keys=function(){var t=[];return this.forEach((function(e){var r=e.key;return t.push(r)})),t},t.prototype.values=function(){var t=[];return this.forEach((function(e){var r=e.data;return t.push(r)})),t},t.prototype.min=function(){return this._root?this.minNode(this._root).key:null},t.prototype.max=function(){return this._root?this.maxNode(this._root).key:null},t.prototype.minNode=function(t){if(void 0===t&&(t=this._root),t)for(;t.left;)t=t.left;return t},t.prototype.maxNode=function(t){if(void 0===t&&(t=this._root),t)for(;t.right;)t=t.right;return t},t.prototype.at=function(t){for(var e=this._root,r=!1,n=0,i=[];!r;)if(e)i.push(e),e=e.left;else if(i.length>0){if(e=i.pop(),n===t)return e;n++,e=e.right}else r=!0;return null},t.prototype.next=function(t){var e=this._root,r=null;if(t.right){for(r=t.right;r.left;)r=r.left;return r}for(var n=this._comparator;e;){var i=n(t.key,e.key);if(0===i)break;i<0?(r=e,e=e.left):e=e.right}return r},t.prototype.prev=function(t){var e=this._root,r=null;if(null!==t.left){for(r=t.left;r.right;)r=r.right;return r}for(var n=this._comparator;e;){var i=n(t.key,e.key);if(0===i)break;i<0?e=e.left:(r=e,e=e.right)}return r},t.prototype.clear=function(){return this._root=null,this._size=0,this},t.prototype.toList=function(){return p(this._root)},t.prototype.load=function(t,e,r){void 0===e&&(e=[]),void 0===r&&(r=!1);var n=t.length,i=this._comparator;if(r&&g(t,e,0,n-1,i),null===this._root)this._root=h(t,e,0,n),this._size=n;else{var o=y(this.toList(),c(t,e),i);n=this._size+n,this._root=d({head:o},0,n)}return this},t.prototype.isEmpty=function(){return null===this._root},Object.defineProperty(t.prototype,\"size\",{get:function(){return this._size},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"root\",{get:function(){return this._root},enumerable:!0,configurable:!0}),t.prototype.toString=function(t){void 0===t&&(t=function(t){return String(t.key)});var e=[];return f(this._root,\"\",!0,(function(t){return e.push(t)}),t),e.join(\"\")},t.prototype.update=function(t,e,r){var n=this._comparator,i=s(t,this._root,n),o=i.left,f=i.right;n(t,e)<0?f=a(e,r,f,n):o=a(e,r,o,n),this._root=u(o,f,n)},t.prototype.split=function(t){return s(t,this._root,this._comparator)},t}();function h(t,e,r,i){var o=i-r;if(o>0){var a=r+Math.floor(o/2),s=t[a],u=e[a],f=new n(s,u);return f.left=h(t,e,r,a),f.right=h(t,e,a+1,i),f}return null}function c(t,e){for(var r=new n(null,null),i=r,o=0;o0?e=(e=a=a.next=r.pop()).right:i=!0;return a.next=null,o.next}function d(t,e,r){var n=r-e;if(n>0){var i=e+Math.floor(n/2),o=d(t,e,i),a=t.head;return a.left=o,t.head=t.head.next,a.right=d(t,i+1,r),a}return null}function y(t,e,r){for(var i=new n(null,null),o=i,a=t,s=e;null!==a&&null!==s;)r(a.key,s.key)<0?(o.next=a,a=a.next):(o.next=s,s=s.next),o=o.next;return null!==a?o.next=a:null!==s&&(o.next=s),i.next}function g(t,e,r,n,i){if(!(r>=n)){for(var o=t[r+n>>1],a=r-1,s=n+1;;){do{a++}while(i(t[a],o)<0);do{s--}while(i(t[s],o)>0);if(a>=s)break;var u=t[a];t[a]=t[s],t[s]=u,u=e[a],e[a]=e[s],e[s]=u}g(t,e,r,s,i),g(t,e,s+1,n,i)}}var v=function(t,e){return t.ll.x<=e.x&&e.x<=t.ur.x&&t.ll.y<=e.y&&e.y<=t.ur.y},b=function(t,e){if(e.ur.xe.x?1:t.ye.y?1:0}}]),r(e,[{key:\"link\",value:function(t){if(t.point===this.point)throw new Error(\"Tried to link already linked events\");for(var e=t.point.events,r=0,n=e.length;r=0&&u>=0?af?-1:0:o<0&&u<0?af?1:0:uo?1:0}}}]),e}(),O=0,C=function(){function e(r,n,i,o){t(this,e),this.id=++O,this.leftSE=r,r.segment=this,r.otherSE=n,this.rightSE=n,n.segment=this,n.otherSE=r,this.rings=i,this.windings=o}return r(e,null,[{key:\"compare\",value:function(t,e){var r=t.leftSE.point.x,n=e.leftSE.point.x,i=t.rightSE.point.x,o=e.rightSE.point.x;if(oa&&s>u)return-1;var l=t.comparePoint(e.leftSE.point);if(l<0)return 1;if(l>0)return-1;var h=e.comparePoint(t.rightSE.point);return 0!==h?h:-1}if(r>n){if(as&&a>f)return 1;var c=e.comparePoint(t.leftSE.point);if(0!==c)return c;var p=t.comparePoint(e.rightSE.point);return p<0?1:p>0?-1:1}if(as)return 1;if(io){var y=t.comparePoint(e.rightSE.point);if(y<0)return 1;if(y>0)return-1}if(i!==o){var g=u-a,v=i-r,b=f-s,m=o-n;if(g>v&&bm)return-1}return i>o?1:if?1:t.ide.id?1:0}}]),r(e,[{key:\"replaceRightSE\",value:function(t){this.rightSE=t,this.rightSE.segment=this,this.rightSE.otherSE=this.leftSE,this.leftSE.otherSE=this.rightSE}},{key:\"bbox\",value:function(){var t=this.leftSE.point.y,e=this.rightSE.point.y;return{ll:{x:this.leftSE.point.x,y:te?t:e}}}},{key:\"vector\",value:function(){return{x:this.rightSE.point.x-this.leftSE.point.x,y:this.rightSE.point.y-this.leftSE.point.y}}},{key:\"isAnEndpoint\",value:function(t){return t.x===this.leftSE.point.x&&t.y===this.leftSE.point.y||t.x===this.rightSE.point.x&&t.y===this.rightSE.point.y}},{key:\"comparePoint\",value:function(t){if(this.isAnEndpoint(t))return 0;var e=this.leftSE.point,r=this.rightSE.point,n=this.vector();if(e.x===r.x)return t.x===e.x?0:t.x0&&s.swapEvents(),L.comparePoints(this.leftSE.point,this.rightSE.point)>0&&this.swapEvents(),n&&(i.checkForConsuming(),o.checkForConsuming()),r}},{key:\"swapEvents\",value:function(){var t=this.rightSE;this.rightSE=this.leftSE,this.leftSE=t,this.leftSE.isLeft=!0,this.rightSE.isLeft=!1;for(var e=0,r=this.windings.length;e0){var o=r;r=n,n=o}if(r.prev===n){var a=r;r=n,n=a}for(var s=0,u=n.rings.length;s0))throw new Error(\"Tried to create degenerate segment at [\".concat(t.x,\", \").concat(t.y,\"]\"));i=r,o=t,a=-1}return new e(new L(i,!0),new L(o,!1),[n],[a])}}]),e}(),N=function(){function e(r,n,i){if(t(this,e),!Array.isArray(r)||0===r.length)throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\");if(this.poly=n,this.isExterior=i,this.segments=[],\"number\"!=typeof r[0][0]||\"number\"!=typeof r[0][1])throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\");var o=S.round(r[0][0],r[0][1]);this.bbox={ll:{x:o.x,y:o.y},ur:{x:o.x,y:o.y}};for(var a=o,s=1,u=r.length;sthis.bbox.ur.x&&(this.bbox.ur.x=f.x),f.y>this.bbox.ur.y&&(this.bbox.ur.y=f.y),a=f)}o.x===a.x&&o.y===a.y||this.segments.push(C.fromRing(a,o,this))}return r(e,[{key:\"getSweepEvents\",value:function(){for(var t=[],e=0,r=this.segments.length;ethis.bbox.ur.x&&(this.bbox.ur.x=a.bbox.ur.x),a.bbox.ur.y>this.bbox.ur.y&&(this.bbox.ur.y=a.bbox.ur.y),this.interiorRings.push(a)}this.multiPoly=n}return r(e,[{key:\"getSweepEvents\",value:function(){for(var t=this.exteriorRing.getSweepEvents(),e=0,r=this.interiorRings.length;ethis.bbox.ur.x&&(this.bbox.ur.x=a.bbox.ur.x),a.bbox.ur.y>this.bbox.ur.y&&(this.bbox.ur.y=a.bbox.ur.y),this.polys.push(a)}this.isSubject=n}return r(e,[{key:\"getSweepEvents\",value:function(){for(var t=[],e=0,r=this.polys.length;e0&&(t=n)}for(var i=t.segment.prevInResult(),o=i?i.prevInResult():null;;){if(!i)return null;if(!o)return i.ringOut;if(o.ringOut!==i.ringOut)return o.ringOut.enclosingRing()!==i.ringOut?i.ringOut:i.ringOut.enclosingRing();i=o.prevInResult(),o=i?i.prevInResult():null}}}]),e}(),V=function(){function e(r){t(this,e),this.exteriorRing=r,r.poly=this,this.interiorRings=[]}return r(e,[{key:\"addInterior\",value:function(t){this.interiorRings.push(t),t.poly=this}},{key:\"getGeom\",value:function(){var t=[this.exteriorRing.getGeom()];if(null===t[0])return null;for(var e=0,r=this.interiorRings.length;e1&&void 0!==arguments[1]?arguments[1]:C.compare;t(this,e),this.queue=r,this.tree=new l(n),this.segments=[]}return r(e,[{key:\"process\",value:function(t){var e=t.segment,r=[];if(t.consumedBy)return t.isLeft?this.queue.remove(t.otherSE):this.tree.remove(e),r;var n=t.isLeft?this.tree.insert(e):this.tree.find(e);if(!n)throw new Error(\"Unable to find segment #\".concat(e.id,\" \")+\"[\".concat(e.leftSE.point.x,\", \").concat(e.leftSE.point.y,\"] -> \")+\"[\".concat(e.rightSE.point.x,\", \").concat(e.rightSE.point.y,\"] \")+\"in SweepLine tree. Please submit a bug report.\");for(var i=n,o=n,a=void 0,s=void 0;void 0===a;)null===(i=this.tree.prev(i))?a=null:void 0===i.key.consumedBy&&(a=i.key);for(;void 0===s;)null===(o=this.tree.next(o))?s=null:void 0===o.key.consumedBy&&(s=o.key);if(t.isLeft){var u=null;if(a){var f=a.getIntersection(e);if(null!==f&&(e.isAnEndpoint(f)||(u=f),!a.isAnEndpoint(f)))for(var l=this._splitSafely(a,f),h=0,c=l.length;h0?(this.tree.remove(e),r.push(t)):(this.segments.push(e),e.prev=a)}else{if(a&&s){var _=a.getIntersection(s);if(null!==_){if(!a.isAnEndpoint(_))for(var E=this._splitSafely(a,_),S=0,k=E.length;SG)throw new Error(\"Infinite loop when putting segment endpoints in a priority queue (queue size too big). Please file a bug report.\");for(var x=new z(d),_=d.size,E=d.pop();E;){var k=E.key;if(d.size===_){var M=k.segment;throw new Error(\"Unable to pop() \".concat(k.isLeft?\"left\":\"right\",\" SweepEvent \")+\"[\".concat(k.point.x,\", \").concat(k.point.y,\"] from segment #\").concat(M.id,\" \")+\"[\".concat(M.leftSE.point.x,\", \").concat(M.leftSE.point.y,\"] -> \")+\"[\".concat(M.rightSE.point.x,\", \").concat(M.rightSE.point.y,\"] from queue. \")+\"Please file a bug report.\")}if(d.size>G)throw new Error(\"Infinite loop when passing sweep line over endpoints (queue size too big). Please file a bug report.\");if(x.segments.length>W)throw new Error(\"Infinite loop when passing sweep line over endpoints (too many sweep line segments). Please file a bug report.\");for(var R=x.process(k),A=0,j=R.length;A1?e-1:0),n=1;n1?e-1:0),n=1;n1?e-1:0),n=1;n1?e-1:0),n=1;n{var e=function(t){\"use strict\";var e,r=Object.prototype,n=r.hasOwnProperty,i=\"function\"==typeof Symbol?Symbol:{},o=i.iterator||\"@@iterator\",a=i.asyncIterator||\"@@asyncIterator\",s=i.toStringTag||\"@@toStringTag\";function u(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{u({},\"\")}catch(t){u=function(t,e,r){return t[e]=r}}function f(t,e,r,n){var i=e&&e.prototype instanceof g?e:g,o=Object.create(i.prototype),a=new A(n||[]);return o._invoke=function(t,e,r){var n=h;return function(i,o){if(n===p)throw new Error(\"Generator is already running\");if(n===d){if(\"throw\"===i)throw o;return T()}for(r.method=i,r.arg=o;;){var a=r.delegate;if(a){var s=k(a,r);if(s){if(s===y)continue;return s}}if(\"next\"===r.method)r.sent=r._sent=r.arg;else if(\"throw\"===r.method){if(n===h)throw n=d,r.arg;r.dispatchException(r.arg)}else\"return\"===r.method&&r.abrupt(\"return\",r.arg);n=p;var u=l(t,e,r);if(\"normal\"===u.type){if(n=r.done?d:c,u.arg===y)continue;return{value:u.arg,done:r.done}}\"throw\"===u.type&&(n=d,r.method=\"throw\",r.arg=u.arg)}}}(t,r,a),o}function l(t,e,r){try{return{type:\"normal\",arg:t.call(e,r)}}catch(t){return{type:\"throw\",arg:t}}}t.wrap=f;var h=\"suspendedStart\",c=\"suspendedYield\",p=\"executing\",d=\"completed\",y={};function g(){}function v(){}function b(){}var m={};u(m,o,(function(){return this}));var w=Object.getPrototypeOf,x=w&&w(w(j([])));x&&x!==r&&n.call(x,o)&&(m=x);var _=b.prototype=g.prototype=Object.create(m);function E(t){[\"next\",\"throw\",\"return\"].forEach((function(e){u(t,e,(function(t){return this._invoke(e,t)}))}))}function S(t,e){function r(i,o,a,s){var u=l(t[i],t,o);if(\"throw\"!==u.type){var f=u.arg,h=f.value;return h&&\"object\"==typeof h&&n.call(h,\"__await\")?e.resolve(h.__await).then((function(t){r(\"next\",t,a,s)}),(function(t){r(\"throw\",t,a,s)})):e.resolve(h).then((function(t){f.value=t,a(f)}),(function(t){return r(\"throw\",t,a,s)}))}s(u.arg)}var i;this._invoke=function(t,n){function o(){return new e((function(e,i){r(t,n,e,i)}))}return i=i?i.then(o,o):o()}}function k(t,r){var n=t.iterator[r.method];if(n===e){if(r.delegate=null,\"throw\"===r.method){if(t.iterator.return&&(r.method=\"return\",r.arg=e,k(t,r),\"throw\"===r.method))return y;r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return y}var i=l(n,t.iterator,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,y;var o=i.arg;return o?o.done?(r[t.resultName]=o.value,r.next=t.nextLoc,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,y):o:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,y)}function M(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function R(t){var e=t.completion||{};e.type=\"normal\",delete e.arg,t.completion=e}function A(t){this.tryEntries=[{tryLoc:\"root\"}],t.forEach(M,this),this.reset(!0)}function j(t){if(t){var r=t[o];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var i=-1,a=function r(){for(;++i=0;--o){var a=this.tryEntries[o],s=a.completion;if(\"root\"===a.tryLoc)return i(\"end\");if(a.tryLoc<=this.prev){var u=n.call(a,\"catchLoc\"),f=n.call(a,\"finallyLoc\");if(u&&f){if(this.prev=0;--r){var i=this.tryEntries[r];if(i.tryLoc<=this.prev&&n.call(i,\"finallyLoc\")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),R(r),y}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if(\"throw\"===n.type){var i=n.arg;R(r)}return i}}throw new Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={iterator:j(t),resultName:r,nextLoc:n},\"next\"===this.method&&(this.arg=e),y}},t}(t.exports);try{regeneratorRuntime=e}catch(t){\"object\"==typeof globalThis?globalThis.regeneratorRuntime=e:Function(\"r\",\"regeneratorRuntime = r\")(e)}},9509:(t,e,r)=>{var n=r(1664),i=n.Buffer;function o(t,e){for(var r in t)e[r]=t[r]}function a(t,e,r){return i(t,e,r)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=n:(o(n,e),e.Buffer=a),a.prototype=Object.create(i.prototype),o(i,a),a.from=function(t,e,r){if(\"number\"==typeof t)throw new TypeError(\"Argument must not be a number\");return i(t,e,r)},a.alloc=function(t,e,r){if(\"number\"!=typeof t)throw new TypeError(\"Argument must be a number\");var n=i(t);return void 0!==e?\"string\"==typeof r?n.fill(e,r):n.fill(e):n.fill(0),n},a.allocUnsafe=function(t){if(\"number\"!=typeof t)throw new TypeError(\"Argument must be a number\");return i(t)},a.allocUnsafeSlow=function(t){if(\"number\"!=typeof t)throw new TypeError(\"Argument must be a number\");return n.SlowBuffer(t)}},6547:(t,e,r)=>{var n=r(8043);function i(t,e,r){t=t||function(t){this.queue(t)},e=e||function(){this.queue(null)};var i=!1,o=!1,a=[],s=!1,u=new n;function f(){for(;a.length&&!u.paused;){var t=a.shift();if(null===t)return u.emit(\"end\");u.emit(\"data\",t)}}function l(){u.writable=!1,e.call(u),!u.readable&&u.autoDestroy&&u.destroy()}return u.readable=u.writable=!0,u.paused=!1,u.autoDestroy=!(r&&!1===r.autoDestroy),u.write=function(e){return t.call(this,e),!u.paused},u.queue=u.push=function(t){return s||(null===t&&(s=!0),a.push(t),f()),u},u.on(\"end\",(function(){u.readable=!1,!u.writable&&u.autoDestroy&&process.nextTick((function(){u.destroy()}))})),u.end=function(t){if(!i)return i=!0,arguments.length&&u.write(t),l(),u},u.destroy=function(){if(!o)return o=!0,i=!0,a.length=0,u.writable=u.readable=!1,u.emit(\"close\"),u},u.pause=function(){if(!u.paused)return u.paused=!0,u},u.resume=function(){return u.paused&&(u.paused=!1,u.emit(\"resume\")),f(),u.paused||u.emit(\"drain\"),u},u}t.exports=i,i.through=i},8706:t=>{\"use strict\";t.exports=function(t,e,r){return 0===t.length?t:e?(r||t.sort(e),function(t,e){for(var r=1,n=t.length,i=t[0],o=t[0],a=1;a{\"use strict\";var n=r(8908),i=r(7376),o=r(4947),a=r(7529);function s(t,e,r){var n=t;return i(e)?(r=e,\"string\"==typeof t&&(n={uri:t})):n=a(e,{uri:t}),n.callback=r,n}function u(t,e,r){return f(e=s(t,e,r))}function f(t){if(void 0===t.callback)throw new Error(\"callback argument missing\");var e=!1,r=function(r,n,i){e||(e=!0,t.callback(r,n,i))};function n(){var t=void 0;if(t=l.response?l.response:l.responseText||function(t){try{if(\"document\"===t.responseType)return t.responseXML;var e=t.responseXML&&\"parsererror\"===t.responseXML.documentElement.nodeName;if(\"\"===t.responseType&&!e)return t.responseXML}catch(t){}return null}(l),v)try{t=JSON.parse(t)}catch(t){}return t}function i(t){return clearTimeout(h),t instanceof Error||(t=new Error(\"\"+(t||\"Unknown XMLHttpRequest Error\"))),t.statusCode=0,r(t,b)}function a(){if(!f){var e;clearTimeout(h),e=t.useXDR&&void 0===l.status?200:1223===l.status?204:l.status;var i=b,a=null;return 0!==e?(i={body:n(),statusCode:e,method:p,headers:{},url:c,rawRequest:l},l.getAllResponseHeaders&&(i.headers=o(l.getAllResponseHeaders()))):a=new Error(\"Internal XMLHttpRequest Error\"),r(a,i,i.body)}}var s,f,l=t.xhr||null;l||(l=t.cors||t.useXDR?new u.XDomainRequest:new u.XMLHttpRequest);var h,c=l.url=t.uri||t.url,p=l.method=t.method||\"GET\",d=t.body||t.data,y=l.headers=t.headers||{},g=!!t.sync,v=!1,b={body:void 0,headers:{},statusCode:0,method:p,url:c,rawRequest:l};if(\"json\"in t&&!1!==t.json&&(v=!0,y.accept||y.Accept||(y.Accept=\"application/json\"),\"GET\"!==p&&\"HEAD\"!==p&&(y[\"content-type\"]||y[\"Content-Type\"]||(y[\"Content-Type\"]=\"application/json\"),d=JSON.stringify(!0===t.json?d:t.json))),l.onreadystatechange=function(){4===l.readyState&&setTimeout(a,0)},l.onload=a,l.onerror=i,l.onprogress=function(){},l.onabort=function(){f=!0},l.ontimeout=i,l.open(p,c,!g,t.username,t.password),g||(l.withCredentials=!!t.withCredentials),!g&&t.timeout>0&&(h=setTimeout((function(){if(!f){f=!0,l.abort(\"timeout\");var t=new Error(\"XMLHttpRequest timeout\");t.code=\"ETIMEDOUT\",i(t)}}),t.timeout)),l.setRequestHeader)for(s in y)y.hasOwnProperty(s)&&l.setRequestHeader(s,y[s]);else if(t.headers&&!function(t){for(var e in t)if(t.hasOwnProperty(e))return!1;return!0}(t.headers))throw new Error(\"Headers cannot be set on an XDomainRequest object\");return\"responseType\"in t&&(l.responseType=t.responseType),\"beforeSend\"in t&&\"function\"==typeof t.beforeSend&&t.beforeSend(l),l.send(d||null),l}t.exports=u,t.exports.default=u,u.XMLHttpRequest=n.XMLHttpRequest||function(){},u.XDomainRequest=\"withCredentials\"in new u.XMLHttpRequest?u.XMLHttpRequest:n.XDomainRequest,function(t,e){for(var r=0;r{t.exports=function(){for(var t={},r=0;r{},6023:()=>{}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var o=e[n]={exports:{}};return t[n].call(o.exports,o,o.exports,r),o.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var n={};(()=>{\"use strict\";r.d(n,{default:()=>$t});r(5666);const t=THREE_GEO;var e=r(7701),i=r(1875),o=r.n(i),a=r(3614),s=r.n(a),u=r(8929),f=r(747),l=r.n(f);class h{static async nodeRequire(t,e){const r=\"function\"==typeof t.require?t.require:null,n=\"function\"==typeof t.import?t.import:null;if(!r&&!n)throw new Error(\"Neither NodeJS `require` or `import` is available. (If in test environment, maybe, you should add `global.require = require;`.\");return r?r(e):(await n(e)).default}}h.Delta=class{constructor(){this.perf=null,this.start=0}static async new(t={nodejs:!1}){return await(new this).init(t)}async init(t={nodejs:!1}){if(t.nodejs){const{performance:t}=await h.nodeRequire(r.g,\"perf_hooks\");this.perf=t}else this.perf=window.performance;return this.start=this.perf.now(),this}_checkInit(){if(!this.perf)throw new Error(\"Do call `async .init()` first.\")}get(){return this._checkInit(),(this.perf.now()-this.start)/1e3}print(t=\"delta:\"){this._checkInit(),this.get().toFixed(3)}};const c=h;var p=r(2768),d=r.n(p);const y=\"1.2.3\";class g extends t.Line{constructor(e,r=16711680){const n=new t.BufferGeometry;n.setAttribute(\"position\",new t.BufferAttribute(new Float32Array(3*e),3)),super(n,new t.LineBasicMaterial({color:r})),this._maxPoints=e,this._numPoints=0}setColor(t){this.material.color.setHex(t)}getColor(){return this.material.color}getPoints(){let e=this.geometry.attributes.position.array,r=[];for(let n=0;n[t.x,t.y,t.z])).reduce(((t,e)=>t.concat(e)))}updatePoints(t,e=!1){e||(t=v.flattenPoints(t));let r=this.geometry.attributes.position,n=r.count,i=t.length/3;i>n&&(i=n);for(let e=0;e0?n[0]:null}raycast(t,e,r,n=null,i=!1){return this._raycaster.set(t,e),this._raycast(r,i,n)}raycastFromCamera(e,r,n,i,o,a,s=!1){let u=new t.Vector2(e/n*2-1,-r/i*2+1);return this._raycaster.setFromCamera(u,o),this._raycast(a,s,null)}getMeshesHit(){return this._meshes}point(t,e=null){this.updatePoints([this._src.x,this._src.y,this._src.z,t.x,t.y,t.z],!0),this._meshes.length=0,e&&this.material.color.setHex(e)}pointWithRaytrace(t,e=[],r=null,n=16){if(this.point(t,r),n<1)return;let i=this.getSource(),o=v.direct(i,t),a=this.raycast(i,o,e);if(!a)return;let s=this.computeReflections(t,o,a,e,n);this.updatePoints([i.x,i.y,i.z,t.x,t.y,t.z,...s],!0)}_computeReflectionsRecursive(e,r,n,i,o){const a=[],s=this;return function e(r,n,u){let f=(new t.Matrix3).getNormalMatrix(u.object.matrixWorld),l=u.face.normal.clone().applyMatrix3(f).normalize(),h=v.reflect(n,l),c=s.raycast(r,h,i,u.face);if(c){let t=c.point;a.push(t.x,t.y,t.z),a.length/3=0))throw new Error(\"length must be a positive number\");return function(t,e){void 0===e&&(e=\"kilometers\");var r=w[e];if(!r)throw new Error(e+\" units is invalid\");return t*r}(M(t,e),r)}function T(t){return!isNaN(t)&&null!==t&&!Array.isArray(t)}function P(t){return!!t&&t.constructor===Object}function I(t){if(!t)throw new Error(\"coord is required\");if(!Array.isArray(t)){if(\"Feature\"===t.type&&null!==t.geometry&&\"Point\"===t.geometry.type)return t.geometry.coordinates;if(\"Point\"===t.type)return t.coordinates}if(Array.isArray(t)&&t.length>=2&&!Array.isArray(t[0])&&!Array.isArray(t[1]))return t;throw new Error(\"coord must be GeoJSON Point or an Array of numbers\")}function B(t){if(Array.isArray(t))return t;if(\"Feature\"===t.type){if(null!==t.geometry)return t.geometry.coordinates}else if(t.coordinates)return t.coordinates;throw new Error(\"coords must be GeoJSON Feature, Geometry Object or an Array\")}function L(t){return\"Feature\"===t.type?t.geometry:t}function O(t,e,r,n){void 0===n&&(n={});var i=I(t),o=A(i[0]),a=A(i[1]),s=A(r),u=M(e,n.units),f=Math.asin(Math.sin(a)*Math.cos(u)+Math.cos(a)*Math.sin(u)*Math.cos(s));return _([R(o+Math.atan2(Math.sin(s)*Math.sin(u)*Math.cos(a),Math.cos(u)-Math.sin(a)*Math.sin(f))),R(f)],n.properties)}function C(t,e,r){if(null!==t)for(var n,i,o,a,s,u,f,l,h=0,c=0,p=t.type,d=\"FeatureCollection\"===p,y=\"Feature\"===p,g=d?t.features.length:1,v=0;v=0))throw new Error(\"distance must be greater than 0\");var a=j(e,i,\"meters\"),s=I(t),u=function(t,e,r,n){n=void 0===n?m:Number(n);var i=e/n,o=t[0]*Math.PI/180,a=A(t[1]),s=A(r),u=i*Math.cos(s),f=a+u;Math.abs(f)>Math.PI/2&&(f=f>0?Math.PI-f:-Math.PI-f);var l=Math.log(Math.tan(f/2+Math.PI/4)/Math.tan(a/2+Math.PI/4)),h=Math.abs(l)>1e-11?u/l:Math.cos(a),c=i*Math.sin(s)/h;return[(180*(o+c)/Math.PI+540)%360-180,180*f/Math.PI]}(s,a,r);return u[0]+=u[0]-s[0]>180?-360:s[0]-u[0]>180?360:0,_(u,o)};const G=function(t,e,r,n){if(!P(n=n||{}))throw new Error(\"options is invalid\");var i=n.units,o=n.zTranslation,a=n.mutate;if(!t)throw new Error(\"geojson is required\");if(null==e||isNaN(e))throw new Error(\"distance is required\");if(o&&\"number\"!=typeof o&&isNaN(o))throw new Error(\"zTranslation is not a number\");if(o=void 0!==o?o:0,0===e&&0===o)return t;if(null==r||isNaN(r))throw new Error(\"direction is required\");return e<0&&(e=-e,r=-r),!1!==a&&void 0!==a||(t=q(t)),C(t,(function(t){var n=B(z(t,e,r,{units:i}));t[0]=n[0],t[1]=n[1],o&&3===t.length&&(t[2]+=o)})),t};const W=function(t,e){var r=0,n=0,i=0;return C(t,(function(t){r+=t[0],n+=t[1],i++}),!0),_([r/i,n/i],e)};function H(t,e){var r=A(t[1]),n=A(e[1]),i=A(e[0]-t[0]);i>Math.PI&&(i-=2*Math.PI),i<-Math.PI&&(i+=2*Math.PI);var o=Math.log(Math.tan(n/2+Math.PI/4)/Math.tan(r/2+Math.PI/4));return(R(Math.atan2(i,o))+360)%360}const Y=function(t,e,r){if(!P(r=r||{}))throw new Error(\"options is invalid\");var n,i=r.final;if(!t)throw new Error(\"start point is required\");if(!e)throw new Error(\"end point is required\");return(n=i?H(I(e),I(t)):H(I(t),I(e)))>180?-(360-n):n};const $=function(t,e,r){if(!P(r=r||{}))throw new Error(\"options is invalid\");var n=r.units;if(!t)throw new Error(\"from point is required\");if(!e)throw new Error(\"to point is required\");var i=I(t),o=I(e);o[0]+=o[0]-i[0]>180?-360:i[0]-o[0]>180?360:0;var a=function(t,e,r){var n=r=void 0===r?m:Number(r),i=t[1]*Math.PI/180,o=e[1]*Math.PI/180,a=o-i,s=Math.abs(e[0]-t[0])*Math.PI/180;s>Math.PI&&(s-=2*Math.PI);var u=Math.log(Math.tan(o/2+Math.PI/4)/Math.tan(i/2+Math.PI/4)),f=Math.abs(u)>1e-11?a/u:Math.cos(i);return Math.sqrt(a*a+f*f*s*s)*n}(i,o);return j(a,\"meters\",n)};const X=function(t,e,r){if(!P(r=r||{}))throw new Error(\"options is invalid\");var n=r.pivot,i=r.mutate;if(!t)throw new Error(\"geojson is required\");if(null==e||isNaN(e))throw new Error(\"angle is required\");return 0===e||(n||(n=W(t)),!1!==i&&void 0!==i||(t=q(t)),C(t,(function(t){var r=Y(n,t)+e,i=$(n,t),o=B(z(n,i,r));t[0]=o[0],t[1]=o[1]}))),t};function J(t){return function(t){if(Array.isArray(t))return rt(t)}(t)||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(t)||et(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function Z(t,e,r){return Z=K()?Reflect.construct:function(t,e,r){var n=[null];n.push.apply(n,e);var i=new(Function.bind.apply(t,n));return r&&Q(i,r.prototype),i},Z.apply(null,arguments)}function K(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}function Q(t,e){return Q=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},Q(t,e)}function tt(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:\"undefined\"!=typeof Symbol&&t[Symbol.iterator]||t[\"@@iterator\"];if(null==r)return;var n,i,o=[],a=!0,s=!1;try{for(r=r.call(t);!(a=(n=r.next()).done)&&(o.push(n.value),!e||o.length!==e);a=!0);}catch(t){s=!0,i=t}finally{try{a||null==r.return||r.return()}finally{if(s)throw i}}return o}(t,e)||et(t,e)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function et(t,e){if(t){if(\"string\"==typeof t)return rt(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===r&&t.constructor&&(r=t.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(t):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?rt(t,e):void 0}}function rt(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r1&&void 0!==arguments[1]?arguments[1]:{color:16711680,maxPoints:256},r=new b(e);return r.updatePoints(t),r}},{key:\"bboxToWireframe\",value:function(e,r){var n,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o={offsetZ:0,color:52428,height:.001},a=Object.assign({},o,i),s=tt(e,4),u=s[0],f=s[1],l=s[2],h=s[3],c=r([(f+h)/2,(u+l)/2]),p=r([h,u]),d=tt(p,2),y=d[0],g=d[1],v=r([f,l]),b=tt(v,2),m=b[0],w=b[1],x=[m-y,g-w],_=a.height,E=new t.LineSegments(new t.EdgesGeometry(Z(t.BoxBufferGeometry,x.concat([_]))),new t.LineBasicMaterial({color:a.color}));return(n=E.position).set.apply(n,J(c).concat([-_/2+a.offsetZ])),E.name=\"bbox-\".concat(window.performance.now()),{obj:E,offset:[].concat(J(c),[a.offsetZ]),size:[].concat(x,[a.height])}}},{key:\"tileToBbox\",value:function(t){return d().tileToBBOX(t)}},{key:\"_resolveTri\",value:function(e,r,n,i,o){var a=(new b).raycast(new t.Vector3(e,r,12e3),new t.Vector3(0,0,-1),n);if(!a)return null;var s=a.faceIndex,u=a.object.geometry.index.array,f=a.object.geometry.attributes.position,l=[0,1,2].map((function(e){return(new t.Vector3).fromBufferAttribute(f,u[3*s+e]).multiplyScalar(i).add(new t.Vector3(0,0,o||-a.point.z))}));return{faceIndex:a.faceIndex,isectPoint:a.point.clone(),tri:l,normal:a.face.normal.clone()}}},{key:\"createTurfPoint\",value:function(t){return _([t[1],t[0]])}},{key:\"originRadiusToBbox\",value:function(t,e){var r=tt(O(this.createTurfPoint(t),e,-45,{units:\"kilometers\"}).geometry.coordinates,2),n=r[0],i=r[1],o=tt(O(this.createTurfPoint(t),e,135,{units:\"kilometers\"}).geometry.coordinates,2),a=o[0];return[n,o[1],a,i]}},{key:\"translateTurfObject\",value:function(e,r,n,i,o){var a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],s=new t.Vector2(r,n).divideScalar(o),u=90-180*s.angle()/Math.PI;return G(e,s.length(),u,{units:\"meters\",zTranslation:i/o,mutate:a})}},{key:\"rotateTurfObject\",value:function(t,e,r){var n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];return X(t,e,{pivot:[r[1],r[0]],mutate:n})}}],(n=null)&&nt(r.prototype,n),i&&nt(r,i),Object.defineProperty(r,\"prototype\",{writable:!1}),e}();it.Meta=c;const ot=it;function at(t,e,r,n,i,o,a){try{var s=t[o](a),u=s.value}catch(t){return void r(t)}s.done?e(u):Promise.resolve(u).then(n,i)}function st(t){return function(){var e=this,r=arguments;return new Promise((function(n,i){var o=t.apply(e,r);function a(t){at(o,n,i,a,s,\"next\",t)}function s(t){at(o,n,i,a,s,\"throw\",t)}a(void 0)}))}}function ut(t,e){for(var r=0;r=200&&t<300||304===t}},{key:\"getZoomposEle\",value:function(t){var e={};return t.forEach((function(t){var r=[t[0]-2,Math.floor(t[1]/4),Math.floor(t[2]/4)];e[r]?e[r].push(t):e[r]=[t]})),Object.keys(e).map((function(t){return t.split(\",\").map((function(t){return parseFloat(t)}))}))}},{key:\"fetchTile\",value:function(t,e,r,n){var i=this,o=\"fetchTile()\",a=e.startsWith(\"mapbox-\")?this.getUriMapbox(r,e,t):this.getUriCustom(e,t);\"\".concat(o,\": uri: \").concat(a);var s=function(t){var r=null;return e.includes(\"mapbox-terrain-vector\")||e.includes(\"custom-terrain-vector\")?r=i.getVectorTile(a,n,t):(e.includes(\"mapbox-terrain-rgb\")||e.includes(\"mapbox-satellite\")||e.includes(\"custom-terrain-rgb\")||e.includes(\"custom-satellite\"))&&(r=i.getRgbTile(a,n,t)),r};return new Promise(function(){var t=st(regeneratorRuntime.mark((function t(r,n){var i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(t.prev=0,null===(i=s(r))){t.next=7;break}return t.next=5,i;case 5:t.next=8;break;case 7:throw new Error(\"\".concat(o,\": unsupported api: \").concat(e));case 8:t.next=14;break;case 10:t.prev=10,t.t0=t.catch(0),console.warn(\"\".concat(o,\": err: \").concat(t.t0)),r(null);case 14:case\"end\":return t.stop()}}),t,null,[[0,10]])})));return function(e,r){return t.apply(this,arguments)}}())}}],n&&ut(e.prototype,n),i&&ut(e,i),Object.defineProperty(e,\"prototype\",{writable:!1}),t}();var lt=r(3673);function ht(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:\"undefined\"!=typeof Symbol&&t[Symbol.iterator]||t[\"@@iterator\"];if(null==r)return;var n,i,o=[],a=!0,s=!1;try{for(r=r.call(t);!(a=(n=r.next()).done)&&(o.push(n.value),!e||o.length!==e);a=!0);}catch(t){s=!0,i=t}finally{try{a||null==r.return||r.return()}finally{if(s)throw i}}return o}(t,e)||pt(t,e)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function ct(t){return function(t){if(Array.isArray(t))return dt(t)}(t)||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(t)||pt(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function pt(t,e){if(t){if(\"string\"==typeof t)return dt(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===r&&t.constructor&&(r=t.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(t):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?dt(t,e):void 0}}function dt(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);re[0].join(\"/\")?1:-1}));var s={};e.forEach((function(t,e){s[t[0].join(\"/\")]=e}));var u=[];return e.forEach((function(f){var l=ht(f,3),h=l[0],c=l[1],p=l[2];if(49152===c.length){var d=a.resolveSeams(c,a.getNeighborsInfo(e,s,h)),y=new t.PlaneGeometry(1,1,d[0],d[1]);y.attributes.position.array=new Float32Array(c);var g=new t.Mesh(y,new t.MeshBasicMaterial({wireframe:!0,color:13421772}));g.name=\"dem-rgb-\".concat(h.join(\"/\"));var v=function(t){return[t[1],t[2],t[0]]};g.userData.threeGeo={tile:v(h),srcDem:{tile:v(p),uri:ft.getUriMapbox(n,\"mapbox-terrain-rgb\",p)}},u.push(g),a.resolveTex(h,r,n,i,(function(e){e&&(g.material=new t.MeshBasicMaterial({side:t.FrontSide,map:e})),o&&o(g,u)}))}})),u}},{key:\"resolveTex\",value:(o=gt(regeneratorRuntime.mark((function e(r,n,i,o,a){var s,u;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,ft.fetchTile(r,n,i,o);case 2:s=e.sent,u=null,null!==s?(u=new t.DataTexture(this.createDataFlipY(s.data,s.shape),s.shape[0],s.shape[1],t.RGBAFormat)).needsUpdate=!0:\"fetchTile() failed for tex of zp: \".concat(r),a&&a(u);case 6:case\"end\":return e.stop()}}),e,this)}))),function(t,e,r,n,i){return o.apply(this,arguments)})}],n&&vt(r.prototype,n),i&&vt(r,i),Object.defineProperty(r,\"prototype\",{writable:!1}),e}();var Et=6378137;function St(t){return function(t,e,r){var n=r;return N(t,(function(t,i,o,a,s){n=0===i&&void 0===r?t:e(n,t,i,o,a,s)})),n}(t,(function(t,e){return t+function(t){var e,r=0;switch(t.type){case\"Polygon\":return kt(t.coordinates);case\"MultiPolygon\":for(e=0;e0){e+=Math.abs(Mt(t[0]));for(var r=1;r2){for(a=0;at.length)&&(e=t.length);for(var r=0,n=new Array(e);r>16,(65280&t)>>8,255&t]})(n[0]),s=o(n[1]-n[0]),function(t){return(a[0]+Math.floor(t*s[0]/i)<<16)+(a[1]+Math.floor(t*s[1]/i)<<8)+(a[2]+Math.floor(t*s[2]/i))}),l=[],h=function(n,i){var o=Bt(u._buildSlice(n,i,f(i),t,e,r),2),a=o[0],s=o[1];a.forEach((function(t){l.push(t)})),l.push(s)},c=0;ct.length)&&(e=t.length);for(var r=0,n=new Array(e);r0&&void 0!==arguments[0]?arguments[0]:{};zt(this,r),this.version=Wt,console.info(\"ThreeGeo \".concat(Wt,\" with THREE r\").concat(t.REVISION));var n={unitsSide:1,tokenMapbox:\"\",isNode:!1,isDebug:!1,apiVector:\"mapbox-terrain-vector\",apiRgb:\"mapbox-terrain-rgb\",apiSatellite:\"mapbox-satellite\"},i=Object.assign({},n,e);this.constUnitsSide=i.unitsSide,this.tokenMapbox=i.tokenMapbox,this.isNode=i.useNodePixels||i.isNode,this.isDebug=i.isDebug,this.apiVector=i.apiVector,this.apiRgb=i.apiRgb,this.apiSatellite=i.apiSatellite,this.isDebug&&console.warn(\"`isDebug` is true; terrains support `.userData.debug()`.\")}var n,i,o,a,s;return n=r,i=[{key:\"getProjection\",value:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.constUnitsSide,i=ot.originRadiusToBbox(t,e),o=r._getUnitsPerMeter(n,e);return{proj:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;return r._proj(t,e,i,n)},projInv:function(e,n){return r._projInv(e,n,t,o)},bbox:i,unitsPerMeter:o}}},{key:\"getTerrain\",value:function(t,e,n){var i=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return new Promise((function(a,s){try{var u=r._createWatcher(o,a);if(!u)return;var f=i.constUnitsSide,l=r._getUnitsPerMeter(f,e),h=function(t,e,n){return r._projectCoord(f,t,e,n)},c=i.tokenMapbox,p=i.isNode,d=i.isDebug,y=i.apiRgb,g=i.apiSatellite,v=i.apiVector,b=o.onRgbDem,m=o.onSatelliteMat,w=o.onVectorDem,x=r.getBbox(t,e),_=r.getZoomposCovered(x.feature,n);b&&new _t({unitsPerMeter:l,projectCoord:h,token:c,isNode:p,isDebug:d,apiRgb:y,apiSatellite:g,onRgbDem:b,onSatelliteMat:m,watcher:u}).fetch(_,x),w&&new Nt({unitsPerMeter:l,projectCoord:h,token:c,isNode:p,isDebug:d,apiVector:v,onVectorDem:w,watcher:u}).fetch(_,x,e)}catch(t){console.error(\"err:\",t),s(t)}}))}},{key:\"getTerrainRgb\",value:(s=qt(regeneratorRuntime.mark((function t(e,n,i){var o,a,s,u,f=arguments;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return o=f.length>3&&void 0!==f[3]?f[3]:void 0,t.next=3,this.getTerrain(e,n,i,{onRgbDem:function(){},onSatelliteMat:function(){}});case 3:return a=t.sent,s=a.rgbDem,u=a.debug,t.abrupt(\"return\",o?o(s):r._createDemGroup(\"dem-rgb\",s,u));case 7:case\"end\":return t.stop()}}),t,this)}))),function(t,e,r){return s.apply(this,arguments)})},{key:\"getTerrainVector\",value:(a=qt(regeneratorRuntime.mark((function t(e,n,i){var o,a,s,u,f=arguments;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return o=f.length>3&&void 0!==f[3]?f[3]:void 0,t.next=3,this.getTerrain(e,n,i,{onVectorDem:function(){}});case 3:return a=t.sent,s=a.vectorDem,u=a.debug,t.abrupt(\"return\",o?o(s):r._createDemGroup(\"dem-vec\",s,u));case 7:case\"end\":return t.stop()}}),t,this)}))),function(t,e,r){return a.apply(this,arguments)})},{key:\"setApiVector\",value:function(t){this.apiVector=t}},{key:\"setApiRgb\",value:function(t){this.apiRgb=t}},{key:\"setApiSatellite\",value:function(t){this.apiSatellite=t}}],o=[{key:\"_getUnitsPerMeter\",value:function(t,e){return t/(e*Math.pow(2,.5)*1e3)}},{key:\"_projectCoord\",value:function(t,e,r,n){return[t*((e[0]-r[0])/(n[0]-r[0])-.5),t*(-.5-(e[1]-n[1])/(n[1]-r[1]))]}},{key:\"_proj\",value:function(t,e,r,n){var i=Ft(t,2),o=i[0],a=i[1],s=Ft(r,4),u=s[0],f=s[1],l=s[2],h=s[3],c=Ft(this._projectCoord(n,[a,o],[u,h],[l,f]),2),p=c[0],d=c[1],y=e?Ht(p,d,o,a,e):void 0;return void 0!==y?[p,d,y]:[p,d]}},{key:\"_projInv\",value:function(t,e,r,n){var i=ot.translateTurfObject(ot.createTurfPoint(r),t,e,0,n).geometry.coordinates;return[i[1],i[0]]}},{key:\"getZoomposCovered\",value:function(t,r){var n={min_zoom:r,max_zoom:r};return e.tiles(t.geometry,n).map((function(t){var e=Ft(t,3),r=e[0],n=e[1];return[e[2],r,n]}))}},{key:\"getBbox\",value:function(t,e){var r={type:\"Feature\",properties:{},geometry:{type:\"Polygon\",coordinates:[[]]}},n=Ft(ot.originRadiusToBbox(t,e),4),i=n[0],o=n[1],a=n[2],s=[i,n[3]],u=[a,o];return r.geometry.coordinates[0]=[s,[u[0],s[1]],u,[s[0],u[1]],s],{feature:r,northWest:s,southEast:u}}},{key:\"_createWatcher\",value:function(t,e){var r=!!t.onVectorDem,n=!!t.onRgbDem,i={vectorDem:[],rgbDem:[],debug:null},o=function(){return!r&&!n};return o()?(e(i),null):function(t){var a=t.what,s=t.data,u=t.debug;i.debug=u,\"dem-vec\"===a&&(r=!1,i.vectorDem=s),\"dem-rgb\"===a&&(n=!1,i.rgbDem=s),o()&&e(i)}}},{key:\"_createDemGroup\",value:function(e,r,n){var i=new t.Group;i.name=e,i.userData.debug=function(){return n||console.warn(\"Use the `isDebug` option to enable `.userData.debug()`.\"),n};var o,a=function(t,e){var r=\"undefined\"!=typeof Symbol&&t[Symbol.iterator]||t[\"@@iterator\"];if(!r){if(Array.isArray(t)||(r=Ut(t))||e&&t&&\"number\"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var o,a=!0,s=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==r.return||r.return()}finally{if(s)throw o}}}}(r);try{for(a.s();!(o=a.n()).done;){var s=o.value;i.add(s)}}catch(t){a.e(t)}finally{a.f()}return i}}],i&&Gt(n.prototype,i),o&&Gt(n,o),Object.defineProperty(n,\"prototype\",{writable:!1}),r}();Yt.Utils=ot,Yt.Laser=b;const $t=Yt})(),ThreeGeo=n.default})();export default ThreeGeo;\n","!function(t,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):t.TWEEN=n()}(this,function(){\"use strict\";var t=function(){this._tweens={},this._tweensAddedDuringUpdate={}};t.prototype={getAll:function(){return Object.keys(this._tweens).map(function(t){return this._tweens[t]}.bind(this))},removeAll:function(){this._tweens={}},add:function(t){this._tweens[t.getId()]=t,this._tweensAddedDuringUpdate[t.getId()]=t},remove:function(t){delete this._tweens[t.getId()],delete this._tweensAddedDuringUpdate[t.getId()]},update:function(t,n){var i=Object.keys(this._tweens);if(0===i.length)return!1;for(t=void 0!==t?t:e.now();i.length>0;){this._tweensAddedDuringUpdate={};for(var s=0;s1?1:e,i=this._easingFunction(e),this._valuesEnd)if(void 0!==this._valuesStart[n]){var s=this._valuesStart[n]||0,r=this._valuesEnd[n];r instanceof Array?this._object[n]=this._interpolationFunction(r,i):(\"string\"==typeof r&&(r=\"+\"===r.charAt(0)||\"-\"===r.charAt(0)?s+parseFloat(r):parseFloat(r)),\"number\"==typeof r&&(this._object[n]=s+(r-s)*i))}if(null!==this._onUpdateCallback&&this._onUpdateCallback(this._object,e),1===e){if(this._repeat>0){for(n in isFinite(this._repeat)&&this._repeat--,this._valuesStartRepeat){if(\"string\"==typeof this._valuesEnd[n]&&(this._valuesStartRepeat[n]=this._valuesStartRepeat[n]+parseFloat(this._valuesEnd[n])),this._yoyo){var a=this._valuesStartRepeat[n];this._valuesStartRepeat[n]=this._valuesEnd[n],this._valuesEnd[n]=a}this._valuesStart[n]=this._valuesStartRepeat[n]}return this._yoyo&&(this._reversed=!this._reversed),void 0!==this._repeatDelayTime?this._startTime=t+this._repeatDelayTime:this._startTime=t+this._delayTime,null!==this._onRepeatCallback&&this._onRepeatCallback(this._object),!0}null!==this._onCompleteCallback&&this._onCompleteCallback(this._object);for(var o=0,u=this._chainedTweens.length;o1?a(t[i],t[i-1],i-s):a(t[r],t[r+1>i?i:r+1],s-r)},Bezier:function(t,n){for(var i=0,s=t.length-1,r=Math.pow,a=e.Interpolation.Utils.Bernstein,o=0;o<=s;o++)i+=r(1-n,s-o)*r(n,o)*t[o]*a(s,o);return i},CatmullRom:function(t,n){var i=t.length-1,s=i*n,r=Math.floor(s),a=e.Interpolation.Utils.CatmullRom;return t[0]===t[i]?(n<0&&(r=Math.floor(s=i*(1+n))),a(t[(r-1+i)%i],t[r],t[(r+1)%i],t[(r+2)%i],s-r)):n<0?t[0]-(a(t[0],t[0],t[1],t[1],-s)-t[0]):n>1?t[i]-(a(t[i],t[i],t[i-1],t[i-1],s-i)-t[i]):a(t[r?r-1:0],t[r],t[i1;i--)e*=i;return n[t]=e,e}),CatmullRom:function(t,n,e,i,s){var r=.5*(e-t),a=.5*(i-n),o=s*s;return(2*n-2*e+r+a)*(s*o)+(-3*n+3*e-2*r-a)*o+r*s+n}}},e.version=\"18.4.2\",e});","// import {defineLordIconElement} from 'lord-icon-element';\nimport lottie from 'lottie-web';\nimport { rgbaToHexA } from './functions';\nimport {isDesktop} from \"./settings\";\nimport { defineElement } from \"@lordicon/element\";\nimport {BaseElement} from \"./modules/interfaces/BaseElement\";\n\n// defineLordIconElement(lottie.loadAnimation);\ndefineElement(lottie.loadAnimation);\n\nconst lordIcons = {\n '2D': '731-real-estate-building-project-outline-edited.json',\n 'keyPlan': '731-real-estate-building-project-outline-edited.json',\n '360View': '1434-360-view-outline-edited.json',\n '360': '1434-360-view-outline-edited.json',\n '3dModel': '63-home-outline-edited.json',\n about: '425-exclamation-mark-bubble-outline-edited.json',\n backArrow: '217-arrow-6-edited.json',\n celsius: '823-celsius-temperature-outline-edited.json',\n checked: '37-approve-checked-simple-outline-edited.json',\n clouds: '801-two-clouds-outline-edited.json',\n contactUs: '140-earphone-telephone-outline-edited.json',\n compare: '1409-compare-outline-edited.json',\n document: '245-edit-document-outline-edited.json',\n drizzle: '807-mild-rain-outline-edited.json',\n favorite: '1453-card-heart-outline-edited.json',\n gallery: '54-photo-picturellandscape-gallery-outline-edited.json',\n getApp: '1335-qr-code-outline-edited.json',\n lang: '27-globe-outline-edited.json',\n map: '18-location-pin-outline-edited.json',\n More: '319-menu-6-morph-outline-edited.json',\n onBoardingSwipe: '1444-swipe-left-right-outline-edited.json',\n play: '830-plane-2-outline-edited.json',\n print: '732-printer-outline-edited.json',\n rain: '808-heavy-rain-outline-edited.json',\n rotate: '250-smartphone-rotate-morph-outline-edited.json',\n search: '19-magnifier-zoom-search-outline-edited.json',\n scanIcon: '1686-scan-qr-code-outline-edited.json',\n snow: '815-snow-flake-outline-edited.json',\n soundOn: '191-speaker-outline-edited.json',\n soundOff: '192-speaker-off-on-morph-outline-edited.json',\n thunderstorm: '808-heavy-rain-outline-edited.json',\n vantage: '741-binoculars-telescope-outline-edited.json',\n clear: '804-sun-outline-edited.json',\n bicycle: '488-bicycle-outline-edited.json',\n railway: '834-train-outline-edited.json',\n highway: '922-highway-outline-edited.json',\n bus: '968-bus-front-outline-edited.json',\n parks: '1935-park-bench-outline-edited.json',\n education: '486-school-outline-edited.json',\n leisure: '1574-spa-flower-outline-edited.json',\n fun: '1549-culinary-and-heritage-expeditions-edited.json',\n deals: '1339-sale-outline-edited.json',\n documents: 'wired-outline-56-document.json',\n playBouncy: 'wired-outline-29-play-bouncy.json',\n edit: 'wired-outline-35-edit.json',\n edit2: 'wired-outline-245-edit-document.json',\n engagement: 'wired-outline-2803-engagement-alt-hover-pinch.json'\n};\n\nconst lordIconsGlobalSettings = {\n trigger: 'loop',\n delay: '2000',\n stroke: '100'\n};\n\n// let primaryColor = null;\n// let secondaryColor = null;\n// let activeColor = null;\n\nexport const lordIconColors = {\n primary: null,\n secondary: null,\n active: null,\n customColors: {}\n};\n\nexport function getLordIconColors () {\n // const {primary,secondary} = config.features.icons.color;\n lordIconColors.primary = config.features.icons.color.primary;\n lordIconColors.secondary = config.features.icons.color.secondary;\n\n const primaryRgba = {\n value:\n document.body.classList.contains('light-theme')\n ? '1,1,1,1'\n : config.style.colors.find(color => color.key === lordIconColors.primary)?.value\n };\n const secondaryRgba = {\n value:\n document.body.classList.contains('light-theme')\n ? '1,1,1,1'\n : config.style.colors.find(color => color.key === lordIconColors.secondary)?.value\n };\n\n const brand2ColorCode = document.querySelector(':root').style.getPropertyValue('--brand2').match(/\\((.*)\\)/)[1];\n const lightThemeActiveColor = {value: brand2ColorCode};\n const activeRgba = document.body.classList.contains('light-theme') ? lightThemeActiveColor : config.style.colors.find(color => color.key === 'brand2');\n\n lordIconColors.primary = rgbaToHexA(primaryRgba.value.split(','),false);\n lordIconColors.secondary = rgbaToHexA(secondaryRgba.value.split(','),false);\n lordIconColors.active = rgbaToHexA(activeRgba.value.split(','), false);\n}\n\nexport function setLordIcon (name,parentContainer,parameters = {},position, isActive = false) {\n const iconsPath = './img/lordIcons/';\n const lordIcon = lordIcons[name];\n\n if (!parentContainer || !lordIcon)\n return;\n\n let icon;\n\n icon = new BaseElement('lord-icon')\n .addClass('lord__icon')\n .setAttributes({\n 'src': iconsPath + lordIcon,\n 'data-menu-item': name,\n 'target': parentContainer.tagName,\n 'activeIcon': false,\n })\n .event('ready',() => {\n if (icon && icon.DOMElement.playerInstance?._container.children.length > 3)\n icon.DOMElement.iconChanged();\n });\n\n if (parameters?.id) {\n lordIconColors.customColors[parameters.id] = {};\n lordIconColors.customColors[parameters.id].primaryColor = parameters.primaryColor;\n lordIconColors.customColors[parameters.id].secondaryColor = parameters.secondaryColor;\n icon.addAttribute('custom-color-id', parameters.id);\n }\n\n parentContainer.setAttribute('lord-icon-name',name);\n\n Object.entries(lordIconsGlobalSettings).forEach(([key,value]) =>{\n icon.addAttribute(key,value);\n });\n\n icon.addAttribute(\n 'colors',\n `primary:${parameters?.id ? parameters.primaryColor : lordIconColors.primary},secondary:${parameters?.id ? parameters.secondaryColor : lordIconColors.secondary}`);\n\n if (isActive) {\n // icon.setAttribute('activeIcon', true);\n // icon.setAttribute('colors',`primary:${activeColor},secondary:${activeColor}`);\n icon.setAttributes({\n 'activeIcon': true,\n 'colors': `primary:${lordIconColors.active},secondary:${lordIconColors.active}`\n })\n }\n\n if (Object.keys(parameters).length) {\n Object.entries(parameters).forEach(([key,value]) =>{\n icon.addAttribute(key,value);\n });\n }\n\n if (position){\n parentContainer.insertAdjacentElement(position, icon.DOMElement);\n } else {\n parentContainer.appendChild(icon.DOMElement);\n }\n\n return icon.DOMElement;\n}\n\nexport function unsetLordIcon(name, parentContainer) {\n const iconElementToRemove = parentContainer.querySelector(`lord-icon[data-menu-item=\"${name}\"]`);\n if (iconElementToRemove) {\n iconElementToRemove.remove();\n }\n}\n\nexport function setActiveLordIcon (name,parentContainer) {\n const activeIcon = getLordIcon(undefined,parentContainer);\n activeIcon && toggleIconParams(activeIcon);\n\n if (name === 'search' && isDesktop)\n return;\n\n\n const icon = getLordIcon(name,parentContainer);\n icon && toggleIconParams(icon);\n}\n\nfunction getLordIcon (name,parentContainer) {\n if (name){\n return parentContainer.querySelector(`lord-icon[data-menu-item=\"${name}\"]`);\n } else {\n return parentContainer.querySelector('lord-icon[activeIcon=\"true\"]');\n }\n}\n\nexport function toggleIconParams (icon) {\n let primaryColor = lordIconColors.primary;\n let secondaryColor = lordIconColors.secondary;\n const customColorId = icon.getAttribute('custom-color-id');\n if (customColorId) {\n primaryColor = lordIconColors.customColors[customColorId].primaryColor;\n secondaryColor = lordIconColors.customColors[customColorId].secondaryColor;\n }\n switch (icon.getAttribute('activeIcon')) {\n case 'true':\n icon.setAttribute('colors',`primary:${primaryColor},secondary:${secondaryColor}`);\n icon.setAttribute('activeIcon',false);\n break;\n\n case 'false':\n icon.setAttribute('colors',`primary:${lordIconColors.active},secondary:${lordIconColors.active}`);\n icon.setAttribute('activeIcon',true);\n break;\n }\n}\n\n","'use strict';\n\nexport class Cookie {\n\t\n\tstatic getCookie(name) {\n\t\tlet matches = document.cookie.match(new RegExp(\n\t\t\t\"(?:^|; )\" + name.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + \"=([^;]*)\"\n\t\t));\n\t\t\n\t\treturn matches ? decodeURIComponent(matches[1]) : null;\n\t}\n\t\n\tstatic setCookie(name, value, options = {}) {\n\t\t// localStorage.setItem(name,value);\n\t\t\n\t\toptions = {\n\t\t\tpath: '/',\n\t\t\t...options\n\t\t};\n\t\t\n\t\tif (options.expires instanceof Date) {\n\t\t\toptions.expires = options.expires.toUTCString();\n\t\t}\n\t\t\n\t\tlet updatedCookie = encodeURIComponent(name) + \"=\" + encodeURIComponent(value);\n\t\t\n\t\tfor (let optionKey in options) {\n\t\t\tupdatedCookie += \"; \" + optionKey;\n\t\t\tlet optionValue = options[optionKey];\n\t\t\tif (optionValue !== true) {\n\t\t\t\tupdatedCookie += \"=\" + optionValue;\n\t\t\t}\n\t\t}\n\t\t\n\t\tdocument.cookie = updatedCookie;\n\t}\n\t\n\tstatic userData() {\n\t\tconst data = Cookie.getCookie('userData');\n\t\treturn data ? JSON.parse(data) : null;\n\t}\n\t\n\tstatic addToUserData(key,value,update = false) {\n\t\tlet data = Cookie.userData();\n\t\tif (!data) {\n\t\t\tdata = {};\n\t\t}\n\t\t\n\t\tif (typeof key === 'object') {\n\t\t\tObject.entries(key).forEach(([dataKey,dataValue]) => {\n\t\t\t\tif (update) {\n\t\t\t\t\tif (dataValue) {\n\t\t\t\t\t\tdata[dataKey] = dataValue;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdata[dataKey] = dataValue;\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tif (update) {\n\t\t\t\tif (value) {\n\t\t\t\t\tdata[key] = value;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdata[key] = value;\n\t\t\t}\n\t\t}\n\t\t\n\t\tCookie.setCookie('userData',JSON.stringify(data));\n\t}\n\t\n\tstatic getFromUserData(key) {\n\t\tconst data = Cookie.userData();\n\t\treturn data ? data[key] : null;\n\t}\n\t\n\tstatic removeFromUserData(key) {\n\t\tconst data = Cookie.userData();\n\t\tif (data && data[key]) {\n\t\t\tdelete data[key];\n\t\t\tCookie.setCookie('userData',JSON.stringify(data));\n\t\t}\n\t}\n\t\n\tstatic parse() {\n\t\treturn document.cookie\n\t\t\t.split(';')\n\t\t\t.map(v => v.split('='))\n\t\t\t.reduce((acc,v) => {\n\t\t\t\tacc[decodeURIComponent(v[0].trim())] = decodeURIComponent(v[1].trim());\n\t\t\t\treturn acc;\n\t\t\t},{})\n\t}\n}\n","'use strict';\n\n\nimport { Google3DMap } from './google/Google3DMap';\nimport { getCurrentLang } from '../components/langSwitcher/langSwitcher';\nimport { MiniMapScene } from './scene/MiniMapScene';\nimport { BaseElement } from '../interfaces/BaseElement';\nimport { assignDeep, Buildings, isMobile, projectMode, settingsData, threeJsVariables, TRoot } from '../../settings';\nimport { MiniMapBuilding } from './scene/MiniMapBuilding';\nimport { Box3, Matrix3, Mesh, MeshBasicMaterial, Vector2, Vector3 } from 'three';\nimport { ViewMode } from '../../common';\nimport { createMeshFromMultiMaterial } from '../../functions';\n\nconst _point = new Vector2();\n\nconst DEFAULT_PARAMS = {\n\tactive: false,\n\tmap: {\n\t\tzoom: {\n\t\t\tminZoom: 2,\n\t\t\tmaxZoom: 22,\n\t\t\tdefault: 18,\n\t\t}\n\t},\n\tscene: {\n\t\tposition: [0,0,0],\n\t\trotation: [0,0,0,'XYZ']\n\t},\n\tbuildings: {\n\t\tuseSelections: false,\n\t\ttransform: {}\n\t},\n\tobjects: []\n};\n\n\nexport class GoogleMiniMap {\n\tconstructor () {\n\t\tthis.params = assignDeep({},DEFAULT_PARAMS,config.features.miniMap || {});\n\t\tthis.container = null;\n\t\tthis.scene = null;\n\t\tthis.map = null;\n\t\tthis.buildings = {};\n\t}\n\t\n\tset config(cfg) {\n\t\tthis.params = cfg;\n\t}\n\t\n\tinit() {\n\t\tif (!this.params.active || isMobile)\n\t\t\treturn;\n\t\t\n\t\tthis.container = new BaseElement()\n\t\t\t.addClass('google-mini-map')\n\t\t\t.event('transitionend',this.#resize.bind(this))\n\t\t\t.appendTo(TRoot)\n\t\t\t.DOMElement;\n\t\t\n\t\tconst lat = Number(config.localization.latitude);\n\t\tconst lng = Number(config.localization.longitude);\n\t\t\n\t\tnew Google3DMap(this.params.map,this.container,lat,lng,getCurrentLang())\n\t\t\t.then((map) => {\n\t\t\t\tthis.map = map;\n\t\t\t\tthis.scene = new MiniMapScene(map,this.params.scene);\n\t\t\t\t\n\t\t\t\t// google.maps.event.addListener(map, 'center_changed', this.#centerChangeHandler.bind(this));\n\t\t\t\t// google.maps.event.addListener(map, 'idle', this.#idleChangeHandler.bind(this));\n\t\t\t\tgoogle.maps.event.addListener(map,'click', this.#clickHandler.bind(this));\n\t\t\t\t\n\t\t\t\tthis.#addBuildings();\n\t\t\t\tthis.#addObjects();\n\t\t\t\t\n\t\t\t\tthis.scene.overlay.requestRedraw();\n\t\t\t});\n\t}\n\t\n\t#resize() {\n\t\tthis.scene.overlay.needsUpdate = true;\n\t\tif (this.scene.overlay.animationMode !== 'always') {\n\t\t\tthis.scene.overlay.requestRedraw();\n\t\t}\n\t}\n\t\n\tasync activateBuilding() {\n\t\tif (!this.params.active)\n\t\t\treturn;\n\t\t\n\t\tif (!this.scene || Object.keys(this.buildings).length === 0) {\n\t\t\tawait new Promise(resolve => {\n\t\t\t\tconst awaitMapInit = setInterval(() => {\n\t\t\t\t\tif (this.scene && Object.keys(this.buildings).length) {\n\t\t\t\t\t\tclearInterval(awaitMapInit);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t}\n\t\t\t\t},100);\n\t\t\t});\n\t\t}\n\t\t\n\t\tconst activeBuilding = Buildings.getActiveBuilding();\n\t\tObject.entries(this.buildings).forEach(([name,scope]) => {\n\t\t\tif (activeBuilding && activeBuilding.name === name) {\n\t\t\t\tscope.select();\n\t\t\t\tthis.scene.moveToObject(scope.group);\n\t\t\t} else {\n\t\t\t\tscope.unselect();\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.scene.overlay.requestRedraw();\n\t}\n\t\n\t#raycast(e) {\n\t\tconst div = this.map.getDiv();\n\t\t_point.set(\n\t\t\t(e.pixel.x / div.clientWidth ) * 2 - 1,\n\t\t\t-( e.pixel.y / div.clientHeight ) * 2 + 1\n\t\t);\n\t\t\n\t\treturn this.scene.overlay.raycast(_point);\n\t}\n\t\n\t#clickHandler(e) {\n\t\tif (settingsData.activeViewMode === ViewMode.Cylinder) {\n\t\t\tconst intersections = this.#raycast(e);\n\t\t\tif (intersections.length) {\n\t\t\t\tconst object = intersections[0].object;\n\t\t\t\t\n\t\t\t\tif (object.userData.type === 'Building') {\n\t\t\t\t\tprojectMode.Cylinder.switchBuilding(object.name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t// #centerChangeHandler() {\n\t// \tconsole.log('centerChangeHandler');\n\t// }\n\t//\n\t// #idleChangeHandler() {\n\t// \tconsole.log('idleChangeHandler');\n\t// }\n\t\n\t#addBuildings() {\n\t\tconst buildings = Buildings.getBuildingsArray();\n\t\t\n\t\tbuildings.forEach(building => {\n\t\t\tif (building.selectionsGroup) {\n\t\t\t\tthis.buildings[building.name] = new MiniMapBuilding(building,this.scene);\n\t\t\t\tif (this.params.buildings.transform[building.name]) {\n\t\t\t\t\tthis.buildings[building.name].config = this.params.buildings.transform[building.name];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.buildings[building.name].create(this.params.buildings.useSelections);\n\t\t\t\tthis.scene.add(this.buildings[building.name].group,'Project Buildings');\n\t\t\t}\n\t\t});\n\t}\n\t\n\t#addObjects() {\n\t\tthis.params.objects.forEach(data => {\n\t\t\tconst object = threeJsVariables.scene.getObjectByName(data.name);\n\t\t\tif (object) {\n\t\t\t\tconst material = object.material;\n\t\t\t\tconst newMaterial = new MeshBasicMaterial({color: data.color});\n\t\t\t\tlet model = null;\n\t\t\t\t\n\t\t\t\tif (Array.isArray(material)) {\n\t\t\t\t\tmodel = createMeshFromMultiMaterial(object,data.materialIndex);\n\t\t\t\t} else {\n\t\t\t\t\tmodel = new Mesh(object.geometry.clone());\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tsetZeroHeight(model);\n\t\t\t\tmodel.name = object.name;\n\t\t\t\tmodel.applyMatrix4(object.matrixWorld);\n\t\t\t\tmodel.material = newMaterial;\n\t\t\t\tmodel.position.y = 0;\n\t\t\t\t\n\t\t\t\tthis.scene.add(model,'Scene objects');\n\t\t\t}\n\t\t});\n\t}\n\t\n}\n\n\nfunction getHeightAxis(object) {\n\tif (!object.geometry.boundingBox) {\n\t\tobject.geometry.computeBoundingBox();\n\t}\n\t\n\tconst box3 = new Box3(object.geometry.boundingBox.min,object.geometry.boundingBox.max);\n\tconst size = box3.getSize(new Vector3());\n\treturn size.y <= size.x && size.y <= size.z ? 'Y' : size.z <= size.x && size.z <= size.y ? 'Z' : 'X';\n}\n\nfunction setZeroHeight (mesh) {\n\tconst axis = getHeightAxis(mesh);\n\tconst geometry = mesh.geometry;\n\tconst position = geometry.getAttribute('position');\n\tlet scaleFn = null;\n\t\n\tswitch (axis) {\n\t\tcase 'X':\n\t\t\tscaleFn = (i,v) => position.setX(i,v);\n\t\t\tbreak;\n\t\tcase 'Y':\n\t\t\tscaleFn = (i,v) => position.setY(i,v);\n\t\t\tbreak;\n\t\tcase 'Z':\n\t\t\tscaleFn = (i,v) => position.setZ(i,v);\n\t\t\tbreak;\n\t}\n\t\n\tfor (let i = 0; i < position.count; i++) {\n\t\tscaleFn(i,0);\n\t}\n\tposition.needsUpdate = true;\n}\n","'use strict';\n\nimport {\n\tBox3,\n\tMathUtils,\n\tOrthographicCamera,\n\tVector2,\n\tVector3,\n\tMOUSE,\n\tTOUCH,\n\tWebGLRenderTarget,\n\tSphere,\n\tColor\n} from 'three';\nimport { BaseElement } from '../interfaces/BaseElement';\nimport { OrbitControls } from '../../libs/OrbitControls';\nimport { assignDeep, GSAPAnimationMixer, isMobile, settingsData, threeJsVariables } from '../../settings';\nimport { getCurrentCameraDistance, getWorldData } from '../controls/orbitControls';\nimport gsap from 'gsap';\nimport { calculateDeltaFromVec3 } from '../../functions';\nimport { updateShadowMap } from '../threejs/lights';\nimport { ViewMode } from '../../common';\nimport { Lerp } from '../projectTime/Lerp';\nimport { getCurrentLangDirection } from '../components/langSwitcher/langSwitcher';\n\nconst fullMapBox = new Box3();\nconst regionBox = new Box3();\nconst size = new Vector3();\nconst center = new Vector3();\nconst pointerDown = new Vector3();\nconst pointerUp = new Vector3();\nwindow.cc = new Color();\n\n\nconst DEFAULT_PARAMS = {\n\tactive: false,\n\tshowInCylinder: false,\n\thideInOrbit: false,\n\tui: {\n\t\twidth: 120,\n\t\theight: 120,\n\t\tposition: {\n\t\t\tbottom: 20,\n\t\t\tleft: 20\n\t\t},\n\t\tscale: 5\n\t},\n\tmap: {\n\t\tsize: 500,\n\t\tmaxZoom: 5,\n\t\tzoomSpeed: 4,\n\t\tinitialZoom: 1,\n\t\tinitialCenter: [0,0],\n\t\tcolor: ''\n\t},\n\tcamera: {\n\t\tchangeTarget: false,\n\t\tautoTarget: false\n\t},\n\tblackList: []\n};\n\nexport class MiniMap {\n\t\n\tconstructor (scene,renderer) {\n\t\tthis.options = assignDeep({},DEFAULT_PARAMS,config.features.miniMap);\n\t\t\n\t\tif (isMobile) {\n\t\t\tthis.options.active = false;\n\t\t}\n\t\t\n\t\tthis.originOptions = JSON.parse(JSON.stringify(this.options));\n\t\t\n\t\tthis.scene = scene;\n\t\tthis.renderer = renderer;\n\t\tthis.markers = [];\n\t\tthis.opened = false;\n\t\t\n\t\tthis.camera = new OrthographicCamera( -2, 2, 2, -2,-1000,1000);\n\t\tthis.camera.position.set(this.options.map.initialCenter[0],0,this.options.map.initialCenter[1]);\n\t\tthis.camera.lookAt(0,-1,0);\n\t\tthis.camera.zoom = this.options.map.initialZoom;\n\t\t\n\t\tthis.rt = new WebGLRenderTarget();\n\t\tthis.canvas = document.createElement( 'canvas' );\n\t\tthis.ctx = this.canvas.getContext( '2d' );\n\t\tthis.color = null;\n\t\tthis.sceneOriginColor = threeJsVariables.scene.background;\n\t\t\n\t\tif (this.options.map.color) {\n\t\t\tthis.color = new Color(this.options.map.color);\n\t\t}\n\t\t\n\t\tthis.camera.updateMatrixWorld();\n\t\tthis.camera.updateProjectionMatrix();\n\t}\n\t\n\tappendTo(parent) {\n\t\tif (!this.active) return;\n\t\t\n\t\tthis.container = new BaseElement()\n\t\t\t.addClass('scene-mini-map')\n\t\t\t.event('pointerdown',this.pointerDown.bind(this))\n\t\t\t.event('pointerup',this.pointerUp.bind(this))\n\t\t\t.event('mouseover',this.hover.bind(this))\n\t\t\t.event('mouseleave',this.hover.bind(this))\n\t\t\t// .addStyle('width',`${this.options.ui.width}px`)\n\t\t\t// .addStyle('height',`${this.options.ui.height}px`)\n\t\t\t.appendTo(parent);\n\t\t\n\t\t// Object.entries(this.options.ui.position).forEach(([key,value]) => {\n\t\t// \tthis.container.addStyle(key,`${value}px`);\n\t\t// });\n\t\t\n\t\tthis.container = this.container.DOMElement;\n\t\tthis.setContainerSize(this.options.ui.width,this.options.ui.height);\n\t\tthis.container.appendChild(this.canvas);\n\t\t\n\t\tthis.controls = new OrbitControls(this.camera,this.container);\n\t\tthis.controls.target.set(this.options.map.initialCenter[0],-1,this.options.map.initialCenter[1]);\n\t\tthis.controls.screenSpacePanning = false;\n\t\tthis.controls.enableRotate = false;\n\t\tthis.controls.minAzimuthAngle = config.threejs.compass.correction;\n\t\tthis.controls.maxAzimuthAngle = config.threejs.compass.correction;\n\t\t// this.controls.reverseControls = true;\n\t\tthis.controls.zoomSpeed = this.options.map.zoomSpeed;\n\t\tthis.controls.minZoom = 1;\n\t\tthis.controls.maxZoom = this.options.map.maxZoom;\n\t\tthis.controls.mouseButtons = {\n\t\t\tLEFT: MOUSE.PAN,\n\t\t\tMIDDLE: MOUSE.DOLLY\n\t\t};\n\n\t\tthis.controls.touches = {\n\t\t\tONE: TOUCH.PAN,\n\t\t\tTWO: TOUCH.DOLLY_PAN\n\t\t};\n\n\t\tthis.controls.enableDamping = false;\n\t\tthis.controls.addEventListener('change',this.controlsHandler.bind(this));\n\t}\n\t\n\thover(e) {\n\t\tconst zoomScope = this.findMarker('zoom');\n\t\tif (e.type === 'mouseover') {\n\t\t\tthis.setContainerSize(this.originOptions.ui.width * this.options.ui.scale, this.originOptions.ui.height * this.options.ui.scale);\n\t\t\tzoomScope.enabled = true;\n\t\t\tzoomScope.show();\n\t\t\tthis.updateMarkers();\n\t\t} else {\n\t\t\tthis.setContainerSize(this.originOptions.ui.width,this.originOptions.ui.height);\n\t\t\tzoomScope.hide();\n\t\t\tzoomScope.enabled = false;\n\t\t\t// this.hide();\n\t\t}\n\t}\n\t\n\tpointerDown(e) {\n\t\tconst x = e.layerX / this.options.ui.width * 2 - 1;\n\t\tconst y = - (e.layerY / this.options.ui.height) * 2 + 1;\n\t\tpointerDown.set(x,y,0);\n\t}\n\t\n\tpointerUp(e) {\n\t\tconst x = e.layerX / this.options.ui.width * 2 - 1;\n\t\tconst y = - (e.layerY / this.options.ui.height) * 2 + 1;\n\t\tpointerUp.set(x,y,0);\n\t\t\n\t\tthis.clickHandler(e);\n\t}\n\t\n\tclickHandler(e) {\n\t\tif (!pointerDown.equals(pointerUp)) return;\n\t\t\n\t\tswitch (e.target.tagName) {\n\t\t\tcase 'CANVAS':\n\t\t\t\tconst scope = this.findMarker('zoom');\n\t\t\t\tlet world = pointerUp.unproject(this.camera);\n\t\t\t\tconst {cameraVector,orbitControlsVector} = getWorldData();\n\t\t\t\tworld.y = orbitControlsVector.y;\n\n\t\t\t\tconst mixer = GSAPAnimationMixer.registerNewMixer('mini-map-click');\n\t\t\t\tlet direction,positionVector;\n\n\n\t\t\t\tif (this.options.camera.changeTarget) {\n\t\t\t\t\tdirection = new Vector3().copy(world).normalize().add(world);\n\t\t\t\t\tconst length = direction.length();\n\t\t\t\t\tpositionVector = new Vector3().copy(direction).setLength(length * 0.8);\n\n\t\t\t\t\tconst target = gsap.to(threeJsVariables.orbitControls.target,{\n\t\t\t\t\t\tx: direction.x,\n\t\t\t\t\t\ty: direction.y,\n\t\t\t\t\t\tz: direction.z,\n\t\t\t\t\t\tduration: GSAPAnimationMixer.duration,\n\t\t\t\t\t\tease: GSAPAnimationMixer.ease\n\t\t\t\t\t});\n\n\t\t\t\t\tmixer.addAnimation(target);\n\n\t\t\t\t\tconst position = gsap.to(threeJsVariables.perspectiveCamera.position,{\n\t\t\t\t\t\tx: positionVector.x,\n\t\t\t\t\t\ty: positionVector.y,\n\t\t\t\t\t\tz: positionVector.z,\n\t\t\t\t\t\tduration: GSAPAnimationMixer.duration,\n\t\t\t\t\t\tease: GSAPAnimationMixer.ease\n\t\t\t\t\t});\n\n\t\t\t\t\tmixer.addAnimation(position);\n\n\n\t\t\t\t} else {\n\t\t\t\t\tconst clamped = scope.clampPoint(world);\n\t\t\t\t\t\n\t\t\t\t\tif (!clamped.equals(world)) {\n\t\t\t\t\t\tclamped.setLength(clamped.length() * 0.95);\n\t\t\t\t\t\tworld.copy(clamped);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tconst delta = calculateDeltaFromVec3(world);\n\t\t\t\t\tconst currentDelta = threeJsVariables.orbitControls.getAzimuthalAngle();\n\t\t\t\t\tconst thetaLerp = new Lerp(currentDelta,currentDelta + delta);\n\t\t\t\t\tconst distanceLerp = new Lerp(getCurrentCameraDistance(),world.distanceTo(threeJsVariables.orbitControls.target));\n\t\t\t\t\tconst cameraProgress = {\n\t\t\t\t\t\tvalue: 0\n\t\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\t\tdirection = new Vector3();\n\t\t\t\t\t\n\t\t\t\t\tconst positionAnimation = gsap.to(cameraProgress,{\n\t\t\t\t\t\tvalue: 1,\n\t\t\t\t\t\tduration: GSAPAnimationMixer.duration,\n\t\t\t\t\t\tease: GSAPAnimationMixer.ease,\n\t\t\t\t\t\tonUpdate: () => {\n\t\t\t\t\t\t\tthreeJsVariables.orbitControls.setAzimuthAngle(thetaLerp.lerp(cameraProgress.value));\n\t\t\t\t\t\t\tdirection.subVectors(threeJsVariables.perspectiveCamera.position,threeJsVariables.orbitControls.target);\n\t\t\t\t\t\t\tdirection.normalize().setLength(distanceLerp.lerp(cameraProgress.value)).add(threeJsVariables.orbitControls.target);\n\t\t\t\t\t\t\tthreeJsVariables.perspectiveCamera.position.copy(direction);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tmixer.addAnimation(positionAnimation);\n\t\t\t\t\t\n\t\t\t\t}\n\n\t\t\t\t// mixer.addAnimation(p);\n\n\t\t\t\tmixer.play();\n\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t}\n\t\n\tcontrolsHandler() {\n\t\tthis.zoom();\n\t\tthis.setPan();\n\t\tthis.render();\n\t\tthis.updateMarkers();\n\t\t// this.helper.update();\n\t}\n\t\n\tcomputeBoundingBox() {\n\t\tif (!this.active) return;\n\t\t\n\t\tif (this.options.map.size === 'auto') {\n\t\t\tconst sphere = this.scene.getObjectByName('Background');\n\t\t\tif (sphere) {\n\t\t\t\tfullMapBox.setFromObject(sphere);\n\t\t\t} else {\n\t\t\t\t\n\t\t\t\tif (this.options.camera.autoTarget) {\n\t\t\t\t\tfullMapBox.setFromCenterAndSize(\n\t\t\t\t\t\tnew Vector3(threeJsVariables.orbitControls.target.x,0,threeJsVariables.orbitControls.target.z),\n\t\t\t\t\t\tnew Vector3( 500,500, 500)\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tfullMapBox.setFromCenterAndSize(\n\t\t\t\t\t\tnew Vector3(this.options.map.initialCenter[0],0,this.options.map.initialCenter[1]),\n\t\t\t\t\t\tnew Vector3( 500,500, 500)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t} else {\n\t\t\tconst size = this.options.map.size;\n\t\t\t\n\t\t\tif (this.options.camera.autoTarget) {\n\t\t\t\tfullMapBox.setFromCenterAndSize(\n\t\t\t\t\tnew Vector3(threeJsVariables.orbitControls.target.x,0,threeJsVariables.orbitControls.target.z),\n\t\t\t\t\tnew Vector3( size,size, size)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tfullMapBox.setFromCenterAndSize(\n\t\t\t\t\tnew Vector3(this.options.map.initialCenter[0],0,this.options.map.initialCenter[1]),\n\t\t\t\t\tnew Vector3( size,size, size)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tfullMapBox.getSize(size);\n\t\tfullMapBox.getCenter(center);\n\t\t\n\t\tsize.ceil();\n\t\tregionBox.copy(fullMapBox);\n\t\tthis.setSize();\n\t}\n\t\n\tsetContainerSize(width,height) {\n\t\tthis.options.ui.width = width;\n\t\tthis.options.ui.height = height;\n\t\t\n\t\tthis.container.style.width = `${this.options.ui.width}px`;\n\t\tthis.container.style.height = `${this.options.ui.height}px`;\n\t\tthis.updateMarkers();\n\t}\n\t\n\tsetSize() {\n\t\tthis.camera.left = size.x / -2;\n\t\tthis.camera.right = size.x / 2;\n\t\tthis.camera.top = size.z / 2;\n\t\tthis.camera.bottom = size.z / -2;\n\t\t// this.camera.position.copy(center);\n\t\tthis.camera.updateMatrixWorld();\n\t\tthis.camera.updateProjectionMatrix();\n\t\tthis.rt.setSize(size.x,size.z);\n\t\t\n\t\t// if (!this.helper) {\n\t\t// \tthis.helper = new CameraHelper( this.camera );\n\t\t// \tthis.scene.add(this.helper);\n\t\t// } else {\n\t\t// \tthis.helper.update();\n\t\t// }\n\t\t\n\t\tthis.controlsHandler();\n\t\tthis.controls.update();\n\t\t\n\t\tfor (let i = 0; i < this.markers.length; i++) {\n\t\t\tthis.markers[i].setSize(size);\n\t\t}\n\t}\n\t\n\tsetPan() {\n\t\tconst min = new Vector3().copy(fullMapBox.min);\n\t\tmin.y = 0;\n\t\tmin.x = min.x + this.camera.right / this.camera.zoom;\n\t\tmin.z = min.z + this.camera.top / this.camera.zoom;\n\t\tconst max = new Vector3().copy(fullMapBox.max);\n\t\tmax.x = max.x - this.camera.right / this.camera.zoom;\n\t\tmax.z = max.z - this.camera.top / this.camera.zoom;\n\t\tmax.y = 0;\n\t\t\n\t\tthis.controls.maxPan = max;\n\t\tthis.controls.minPan = min;\n\t}\n\t\n\tzoom() {\n\t\tconst min = new Vector3().copy(fullMapBox.min);\n\t\tconst max = new Vector3().copy(fullMapBox.max);\n\t\tmin.x = min.x / this.camera.zoom;\n\t\tmin.z = min.z / this.camera.zoom;\n\t\tmax.x = max.x / this.camera.zoom;\n\t\tmax.z = max.z / this.camera.zoom;\n\t\tregionBox.set(min,max);\n\t\t\n\t\tconst zoomSize = new Vector3();\n\t\tregionBox.getSize(zoomSize);\n\t\tregionBox.setFromCenterAndSize(this.camera.position,zoomSize);\n\t}\n\t\n\trender() {\n\t\tif (settingsData.activeViewMode === ViewMode.Orbit) {\n\t\t\tif (!this.options.blackList.includes('async env')) {\n\t\t\t\tthreeJsVariables.tilesRenderer?.setCamera(this.camera);\n\t\t\t\tthreeJsVariables.tilesRenderer?.setResolutionFromRenderer(this.camera, this.renderer);\n\t\t\t\tthreeJsVariables.tilesRenderer?.update();\n\t\t\t}\n\t\t\tthis.objectsVisibility('hide');\n\t\t\tupdateShadowMap();\n\t\t\tif (this.color) {\n\t\t\t\tthreeJsVariables.scene.background = this.color;\n\t\t\t}\n\t\t\tthis.renderer.setRenderTarget(this.rt);\n\t\t\tthis.renderer.render(this.scene, this.camera);\n\t\t\tthis.renderer.setRenderTarget(null);\n\t\t\tthis.objectsVisibility('show');\n\t\t\tupdateShadowMap();\n\t\t\tthreeJsVariables.scene.background = this.sceneOriginColor;\n\t\t\tthreeJsVariables.tilesRenderer?.deleteCamera(this.camera);\n\t\t\t\n\t\t} else {\n\t\t\tif (threeJsVariables.slicer.active) {\n\t\t\t\tthreeJsVariables.slicer.restoreXZ('immediately');\n\t\t\t}\n\t\t\t\n\t\t\tif (threeJsVariables.sceneObjectsSlicer.active) {\n\t\t\t\tthreeJsVariables.sceneObjectsSlicer.restoreXZ('immediately');\n\t\t\t}\n\t\t\t\n\t\t\tthis.objectsCylinderVisibility('show');\n\t\t\tupdateShadowMap();\n\t\t\tthis.renderer.setRenderTarget(this.rt);\n\t\t\tthis.renderer.render(this.scene, this.camera);\n\t\t\tthis.renderer.setRenderTarget(null);\n\t\t\t\n\t\t\tif (threeJsVariables.slicer.active) {\n\t\t\t\tthreeJsVariables.slicer.cropXZ('immediately');\n\t\t\t}\n\t\t\t\n\t\t\tif (threeJsVariables.sceneObjectsSlicer.active) {\n\t\t\t\tthreeJsVariables.sceneObjectsSlicer.cropXZ('immediately');\n\t\t\t}\n\t\t\tthis.objectsCylinderVisibility('hide');\n\t\t\tupdateShadowMap();\n\t\t}\n\t\t\n\t\tthis.canvas.width = size.x;\n\t\tthis.canvas.height = size.z;\n\t\t\n\t\tconst pixels = new Uint8Array( 4 * size.x * size.z );\n\t\t\n\t\tthis.renderer.readRenderTargetPixels( this.rt, 0, 0, size.x, size.z,pixels);\n\t\tconst imageData = new ImageData( new Uint8ClampedArray(pixels), size.x, size.z);\n\t\tthis.ctx.putImageData( imageData, 0, 0 );\n\t}\n\t\n\tobjectsVisibility(state) {\n\t\tconst list = this.options.blackList.slice();\n\t\tlist.push('Background');\n\t\tlist.push('Environment');\n\t\t\n\t\tif (threeJsVariables.bundleConfig && threeJsVariables.bundleConfig.priority) {\n\t\t\tObject.entries(threeJsVariables.bundleConfig.priority).forEach(([name,position]) => {\n\t\t\t\tif (position === 2) {\n\t\t\t\t\tlist.push(name);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\tfor (let i = 0; i < list.length; i++) {\n\t\t\tconst object = threeJsVariables.scene.getObjectByName(list[i]);\n\t\t\tif (object) {\n\t\t\t\tobject.visible = state === 'show';\n\t\t\t}\n\t\t}\n\t}\n\t\n\tobjectsCylinderVisibility(state) {\n\t\tconst list = this.options.blackList.slice();\n\t\t\n\t\tif (threeJsVariables.bundleConfig && threeJsVariables.bundleConfig.priority) {\n\t\t\tObject.entries(threeJsVariables.bundleConfig.priority).forEach(([name,position]) => {\n\t\t\t\tif (position === 1 && !name.startsWith(config.resources.bundle.building.name)) {\n\t\t\t\t\tlist.push(name);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\tfor (let i = 0; i < list.length; i++) {\n\t\t\tconst object = threeJsVariables.scene.getObjectByName(list[i]);\n\t\t\tif (object) {\n\t\t\t\tobject.traverse(el => {\n\t\t\t\t\tif (el.isMesh) {\n\t\t\t\t\t\tel.visible = state === 'show';\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\tupdateMarkers() {\n\t\tif (this.active && this.openedMap) {\n\t\t\tfor (let i = 0; i < this.markers.length; i++) {\n\t\t\t\tthis.markers[i].update(regionBox,this.camera,this.controls,this.options.ui.width,this.options.ui.height);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tshow() {\n\t\tif (!this.active) return;\n\t\t\n\t\tif (this.options.hideInOrbit && settingsData.activeViewMode === ViewMode.Orbit) {\n\t\t\tthis.hide();\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.openedMap = true;\n\t\tthis.updateMarkers();\n\t}\n\t\n\thide() {\n\t\tif (!this.active) return;\n\t\t\n\t\tif (this.options.showInCylinder && settingsData.activeViewMode === ViewMode.Cylinder) {\n\t\t\tthis.show();\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.openedMap = false;\n\t\tfor (let i = 0; i < this.markers.length; i++) {\n\t\t\tthis.markers[i].hide();\n\t\t}\n\t}\n\t\n\taddMarker(scope) {\n\t\tif (!this.active) return;\n\t\tthis.markers.push(scope);\n\t\tthis.container.appendChild(scope.marker);\n\t}\n\t\n\tfindMarker(id) {\n\t\treturn this.markers.find(marker => marker.id === id);\n\t}\n\t\n\tget active() {\n\t\treturn this.options.active;\n\t}\n\t\n\tset openedMap(value) {\n\t\tthis.opened = value;\n\t\tthis.container.style.display = value ? '' : 'none';\n\t}\n\t\n\tget openedMap() {\n\t\treturn this.opened;\n\t}\n}\n\n\nclass Marker {\n\tconstructor (id) {\n\t\tthis.id = id;\n\t\tthis.marker = new BaseElement()\n\t\t\t.addClass('scene-mini-map__marker')\n\t\t\t.addStyle('display','none')\n\t\t\t.addAttribute('id',this.id)\n\t\t\t.DOMElement;\n\t\tthis.position = new Vector3();\n\t\tthis.mapPosition = null;\n\t\tthis.active = false;\n\t\tthis.size = new Vector3();\n\t}\n\t\n\tsetSize(value) {\n\t\tthis.size.copy(value);\n\t}\n\t\n\tsetContent(content) {\n\t\tthis.marker.innerHTML = '';\n\t\tthis.marker.appendChild(content);\n\t}\n\t\n\tsetWorldPosition(vec3) {\n\t\tthis.position.copy(vec3).setY(center.y);\n\t}\n\t\n\tupdate(bbox,camera,controls,mapWidth,mapHeight) {\n\t\tif (this.enabled) {\n\t\t\tif (bbox.containsPoint(this.position)) {\n\t\t\t\tthis.show();\n\t\t\t\tthis.mapPosition = this.position.project(camera);\n\t\t\t\tthis.marker.style.left = (this.mapPosition.x * (mapWidth / 2) + mapWidth / 2 ) + 'px';\n\t\t\t\tthis.marker.style.top = mapHeight - (this.mapPosition.y * (mapHeight / 2) + mapHeight / 2 ) + 'px';\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t}\n\t}\n\t\n\thide() {\n\t\tthis.marker.style.display = 'none';\n\t}\n\t\n\tshow() {\n\t\tthis.marker.style.display = '';\n\t}\n\t\n\tget enabled() {\n\t\treturn this.active;\n\t}\n\t\n\tset enabled(value) {\n\t\tthis.active = value;\n\t}\n}\n\nexport class CameraMarker extends Marker{\n\tconstructor (id,originCamera,originOrbitControls) {\n\t\tsuper(id);\n\t\t\n\t\tthis.originCamera = originCamera;\n\t\tthis.originControls = originOrbitControls;\n\t\tthis.target = new Vector3();\n\t\tthis.initialFov = this.originCamera.fov;\n\t\t\n\t\tthis.radar = new BaseElement()\n\t\t\t.addClass('mini-map__origin-camera')\n\t\t\t.addStyle('border-width', `0 ${this.originCamera.fov / 2}px ${this.originCamera.fov / 2}px ${this.originCamera.fov / 2}px`)\n\t\t\t.DOMElement;\n\t\t\n\t\tthis.setContent(this.radar);\n\t\t\n\t}\n\t\n\tsetWorldPosition() {\n\t\tthis.position.copy(this.originCamera.position);\n\t}\n\t\n\tupdate(bbox,camera,controls,mapWidth,mapHeight) {\n\t\tif (this.enabled) {\n\t\t\tthis.setWorldPosition();\n\t\t\tif (bbox.containsPoint(this.position)) {\n\t\t\t\tthis.show();\n\t\t\t\tthis.mapPosition = this.position.project(camera);\n\t\t\t\tthis.marker.style.left = (this.mapPosition.x * (mapWidth / 2) + mapWidth / 2 ) + 'px';\n\t\t\t\tthis.marker.style.top = mapHeight - (this.mapPosition.y * (mapHeight / 2) + mapHeight / 2 ) + 'px';\n\t\t\t\tthis.marker.style.transform = `translate(-50%,100%) rotate(${MathUtils.radToDeg(Math.PI - (this.originControls.getAzimuthalAngle() - controls.maxAzimuthAngle))}deg)`;\n\t\t\t\tif (this.initialFov !== this.originCamera.fov) {\n\t\t\t\t\tthis.radar.style.borderWidth = `0 ${this.originCamera.fov / 2}px ${this.originCamera.fov / 2}px ${this.originCamera.fov / 2}px`;\n\t\t\t\t\tthis.initialFov = this.originCamera.fov;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t}\n\t}\n\t\n}\n\nexport class ZoomArea extends Marker{\n\tconstructor (id) {\n\t\tsuper(id);\n\t\t\n\t\tthis.orbitControls = threeJsVariables.orbitControls;\n\t\tthis.trackballControls = threeJsVariables.trackballControls;\n\t\t\n\t\tthis.content = new BaseElement()\n\t\t\t.addClass('limit-area-content')\n\t\t\t.DOMElement;\n\t\t\n\t\tconst maxZoom = (this.trackballControls.maxDistance * 1.2) / 2;\n\t\tthis.sphere = new Sphere(this.orbitControls.target,maxZoom * 2 / 1.2);\n\t\t\n\t\tnew BaseElement()\n\t\t\t.addClass('limit-area-zoom','limit-max-zoom')\n\t\t\t.addStyle('width',`${maxZoom}px`)\n\t\t\t.addStyle('height',`${maxZoom}px`)\n\t\t\t.appendTo(this.content);\n\t\t\n\t\t// new BaseElement()\n\t\t// \t.addClass('limit-area-zoom','limit-min-zoom')\n\t\t// \t.addStyle('width',`${this.trackballControls.minDistance / 2}px`)\n\t\t// \t.addStyle('height',`${this.trackballControls.minDistance / 2}px`)\n\t\t// \t.appendTo(this.content);\n\t\t\n\t\tthis.setContent(this.content);\n\t\t\n\t}\n\t\n\tsetWorldPosition() {\n\t\tthis.position.copy(this.orbitControls.target);\n\t}\n\t\n\tupdate(bbox,camera,controls,mapWidth,mapHeight) {\n\t\tif (this.enabled) {\n\t\t\tthis.setWorldPosition();\n\t\t\tthis.show();\n\t\t\tthis.mapPosition = this.position.project(camera);\n\t\t\tthis.marker.style.left = (this.mapPosition.x * (mapWidth / 2) + mapWidth / 2 ) + 'px';\n\t\t\tthis.marker.style.top = mapHeight - (this.mapPosition.y * (mapHeight / 2) + mapHeight / 2 ) + 'px';\n\t\t\tthis.content.style.transform = `translate(-50%,-50%) scale(${camera.zoom * 2 * (mapWidth / this.size.x) * (Math.PI / 2)})`;\n\t\t\t// this.max.style.width = `${this.maxZoom * (1000 / this.size.x)}px`;\n\t\t\t// this.max.style.height = `${this.maxZoom * (1000 / this.size.y)}px`;\n\t\t\t// this.sphere.center.copy(this.orbitControls.target).setY(0);\n\t\t}\n\t}\n\t\n\tclampPoint(vec) {\n\t\tconst clamped = new Vector3();\n\t\tthis.sphere.clampPoint(vec,clamped);\n\t\treturn clamped;\n\t}\n\t\n}\n\nexport class PanArea extends Marker{\n\tconstructor (id) {\n\t\tsuper(id);\n\t\t\n\t\tthis.orbitControls = threeJsVariables.orbitControls;\n\t\t\n\t\tif (this.orbitControls.maxPan && this.orbitControls.minPan) {\n\t\t\t\n\t\t\tconst width = (Math.abs(this.orbitControls.minPan.x) + this.orbitControls.maxPan.x) / 2 * 1.2;\n\t\t\tconst height = (Math.abs(this.orbitControls.minPan.z) + this.orbitControls.maxPan.z) / 2 * 1.2;\n\t\t\t\n\t\t\tthis.area = new BaseElement()\n\t\t\t\t.addClass('limit-area-pan')\n\t\t\t\t.addStyle('width',`${width}px`)\n\t\t\t\t.addStyle('height',`${height}px`)\n\t\t\t\t.DOMElement;\n\t\t\t\n\t\t\tthis.setContent(this.area);\n\t\t}\n\t}\n\t\n\tupdate(bbox,camera,controls,mapWidth,mapHeight) {\n\t\tif (this.enabled) {\n\t\t\tthis.show();\n\t\t\tthis.mapPosition = this.position.project(camera);\n\t\t\tthis.marker.style.left = (this.mapPosition.x * (mapWidth / 2) + mapWidth / 2 ) + 'px';\n\t\t\tthis.marker.style.top = mapHeight - (this.mapPosition.y * (mapHeight / 2) + mapHeight / 2 ) + 'px';\n\t\t\tthis.area.style.transform = `translate(-50%,-50%) scale(${camera.zoom}) rotate(${MathUtils.radToDeg(Math.PI - config.threejs.compass.correction)}deg)`;\n\t\t}\n\t}\n}\n","'use strict';\n\n\nimport { getUrlParam } from '../../../functions';\nimport { getCurrentLang } from '../../components/langSwitcher/langSwitcher';\nimport { MathUtils, Spherical, Vector3 } from 'three';\nimport { Buildings, threeJsVariables } from '../../../settings';\n\nconst API_OPTIONS = {\n\tapiKey: config.googleAPI.split('&')[0],\n\tversion: \"beta\",\n\tlanguage: null,\n\tlibraries: getUrlParam('dev') ? [\"geometry\",\"places\",\"drawing\"] : [\"geometry\",\"places\"]\n};\n\nconst MAP_OPTIONS = {\n\t\"tilt\": 30,\n\t\"heading\": 0,\n\t\"zoom\": 18,\n\t\"center\": { lat: 0, lng: 0 },\n\t\"mapId\": 'cea0f4a47d2b89ab',\n\t\"disableDefaultUI\": true,\n\t\"zoomControl\": false,\n\t\"mapTypeControl\": false,\n\t\"scaleControl\": false,\n\t\"streetViewControl\": false,\n\t\"rotateControl\": true,\n\t\"fullscreenControl\": false,\n\t\"clickableIcons\": false,\n\t\"minZoom\": 2,\n\t\"maxZoom\": 22,\n\t// \"mapTypeControlOptions\": {\n\t// \"mapTypeIds\": [\"satellite\", \"roadmap\"]\n\t// },\n\t\n\t// \"draggable\": true\n};\n\n\nexport class Google3DMap {\n\tconstructor (cfg,parent,lat,lng,lang) {\n\t\tthis.parent = parent;\n\t\tthis.lang = lang || getCurrentLang();\n\t\tAPI_OPTIONS.language = this.lang;\n\t\t\n\t\tMAP_OPTIONS.center.lat = lat;\n\t\tMAP_OPTIONS.center.lng = lng;\n\t\tMAP_OPTIONS.minZoom = cfg.zoom.minZoom;\n\t\tMAP_OPTIONS.maxZoom = cfg.zoom.maxZoom;\n\t\tMAP_OPTIONS.zoom = cfg.zoom.default;\n\t\t\n\t\tif (cfg.hasOwnProperty('restricted') && cfg.restricted !== null) {\n\t\t\tMAP_OPTIONS.restriction = {\n\t\t\t\tlatLngBounds: cfg.restricted,\n\t\t\t\tstrictBounds: false,\n\t\t\t};\n\t\t}\n\t\t\n\t\t// this.#setInitialPosition();\n\t\t\n\t\treturn this.loadGoogleMapScripts();\n\t}\n\t\n\t#setInitialPosition() {\n\t\tconst target = new Vector3(\n\t\t\tthreeJsVariables.bundleConfig.orbitControls.target.x,\n\t\t\tthreeJsVariables.bundleConfig.orbitControls.target.y,\n\t\t\tthreeJsVariables.bundleConfig.orbitControls.target.z\n\t\t);\n\t\tconst camera = new Vector3(\n\t\t\tthreeJsVariables.bundleConfig.camera.position.x,\n\t\t\tthreeJsVariables.bundleConfig.camera.position.y,\n\t\t\tthreeJsVariables.bundleConfig.camera.position.z\n\t\t);\n\t\t\n\t\tconst direction = new Vector3().subVectors(camera,target).normalize();\n\t\tconst spherical = new Spherical().setFromVector3(direction);\n\t\tconst angle = MathUtils.radToDeg(spherical.theta);\n\t\tMAP_OPTIONS.heading = 360 - angle;\n\t}\n\t\n\tloadGoogleMapScripts() {\n\t\treturn new Promise(async (resolve) => {\n\t\t\tconst awaitInterval = setInterval(() => {\n\t\t\t\tconst buildings = Buildings.getBuildingsArray();\n\t\t\t\tif (window.google && window.google.maps && buildings.length) {\n\t\t\t\t\tclearInterval(awaitInterval);\n\t\t\t\t\tconst map = new google.maps.Map(this.parent, MAP_OPTIONS);\n\t\t\t\t\t\n\t\t\t\t\tfunction tilesLoaded () {\n\t\t\t\t\t\tgoogle.maps.event.removeListener(listenerHandle);\n\t\t\t\t\t\tresolve(map);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tconst listenerHandle = google.maps.event.addListener(map, 'tilesloaded', tilesLoaded);\n\t\t\t\t}\n\t\t\t},300)\n\t\t});\n\t}\n\t\n}\n\n","'use strict';\n\n\nimport { ThreeJSOverlayView } from '@googlemaps/three';\nimport { PCFSoftShadowMap, REVISION, WebGLRenderer } from 'three';\n\nexport class ThreeJsOverlay extends ThreeJSOverlayView{\n\tconstructor (options) {\n\t\tsuper(options);\n\t\tthis.needsUpdate = false;\n\t}\n\t\n\tonContextRestored ({gl}) {\n\t\tthis.renderer = new WebGLRenderer({\n\t\t\tcanvas: gl.canvas,\n\t\t\tantialias: true,\n\t\t\tcontext: gl,\n\t\t\t...gl.getContextAttributes(),\n\t\t});\n\t\tthis.renderer.autoClear = false;\n\t\tthis.renderer.autoClearDepth = false;\n\t\tthis.renderer.shadowMap.enabled = true;\n\t\tthis.renderer.shadowMap.type = PCFSoftShadowMap;\n\t\t// Since r152, default outputColorSpace is SRGB\n\t\t// Deprecated outputEncoding kept for backwards compatibility\n\t\tif (Number(REVISION) < 152) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tthis.renderer.outputEncoding = 3001;\n\t\t}\n\t\t\n\t\tconst { width, height } = gl.canvas;\n\t\tconst pixelRatio = Math.min(window.devicePixelRatio, 2);\n\t\tthis.renderer.setSize(width, height, false);\n\t\tthis.renderer.setPixelRatio(pixelRatio);\n\t}\n\t\n\tresize(gl) {\n\t\tif (this.needsUpdate) {\n\t\t\tthis.needsUpdate = false;\n\t\t\tconst { width, height } = gl.canvas;\n\t\t\t\n\t\t\tthis.renderer.setSize(width,height,false);\n\t\t}\n\t}\n\t\n\tonDraw ({gl, transformer}) {\n\t\tthis.camera.projectionMatrix.fromArray(\n\t\t\ttransformer.fromLatLngAltitude(this.anchor, this.rotationArray)\n\t\t);\n\t\t\n\t\tgl.disable(gl.SCISSOR_TEST);\n\t\t\n\t\tthis.onBeforeDraw();\n\t\tthis.resize(gl);\n\t\tthis.renderer.render(this.scene, this.camera);\n\t\tthis.renderer.resetState();\n\t\t\n\t\tif (this.animationMode === \"always\") this.requestRedraw();\n\t}\n}\n","'use strict';\n\n\nimport {\n\tBox3,\n\tBoxGeometry, Euler,\n\tGroup,\n\tMatrix4,\n\tMesh,\n\tMeshStandardMaterial,\n\tQuaternion,\n\tVector3,\n} from 'three';\nimport { settingsData } from '../../../settings';\nimport { mergeGeometries } from 'three/examples/jsm/utils/BufferGeometryUtils';\n\nconst selectedMaterial = new MeshStandardMaterial({color: '#f2ea00'});\nconst unselectedMaterial = new MeshStandardMaterial({color: '#beddfe'});\n\n\nexport class MiniMapBuilding {\n\tconstructor (buildingScope,sceneScope) {\n\t\tthis.building = buildingScope;\n\t\tthis.group = new Group();\n\t\tthis.scene = sceneScope;\n\t\tthis.group.name = this.building.name;\n\t\tthis.mesh = null;\n\t\tthis.transform = null;\n\t}\n\t\n\tselect() {\n\t\tthis.mesh.material = selectedMaterial;\n\t}\n\t\n\tunselect() {\n\t\tthis.mesh.material = unselectedMaterial;\n\t}\n\t\n\tcreate(useSelections) {\n\t\tif (useSelections) {\n\t\t\tconst group = this.building.selectionsGroup;\n\t\t\tconst position = new Vector3();\n\t\t\tthis.building.selectionsGroup.getWorldPosition(position);\n\t\t\tconst geometries = [];\n\t\t\tconst floors = group.children.filter(floor => floor.name.startsWith('F'));\n\t\t\tconst floorNumbers = floors.map(floor => Number(floor.name.split('_')[1]));\n\t\t\tfloorNumbers.sort((a,b) => a - b);\n\t\t\t\n\t\t\tfloorNumbers.forEach((floorNumber,index) => {\n\t\t\t\tconst floorGroup = group.getObjectByName(`F_${floorNumber}`);\n\t\t\t\t\n\t\t\t\tfloorGroup.children.forEach(apt => {\n\t\t\t\t\tif (!apt.name.startsWith('zero')) {\n\t\t\t\t\t\tconst geometry = apt.geometry.clone();\n\t\t\t\t\t\tgeometry.deleteAttribute( 'normal' );\n\t\t\t\t\t\tgeometry.deleteAttribute( 'uv' );\n\t\t\t\t\t\tif (index !== floorNumbers.length - 1 ){\n\t\t\t\t\t\t\tgeometry.scale(1,1.2,1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgeometry.applyMatrix4(apt.matrixWorld);\n\t\t\t\t\t\tgeometries.push(geometry);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t\t\n\t\t\tconst geometry = mergeGeometries(geometries);\n\t\t\tgeometry.computeVertexNormals();\n\t\t\tgeometry.center();\n\t\t\tconst size = new Vector3();\n\t\t\tgeometry.boundingBox.getSize(size);\n\t\t\tgeometry.translate(0,size.y / 2,0);\n\t\t\t\n\t\t\tthis.mesh = new Mesh(geometry,unselectedMaterial);\n\t\t\tthis.mesh.name = this.building.name;\n\t\t\t\n\t\t\tthis.group.position.copy(position);\n\t\t\tthis.group.position.y = 0;\n\t\t\t\n\t\t\tthis.group.add(this.mesh);\n\t\t\t\n\t\t} else {\n\t\t\tconst props = settingsData.allCrmData.filter(apt => apt.buildingEngineId === this.building.name);\n\t\t\tconst bbox = new Box3();\n\t\t\tconst size = new Vector3();\n\t\t\tconst position = new Vector3();\n\t\t\tconst quaternion = new Quaternion();\n\t\t\tthis.building.selectionsGroup.getWorldPosition(position);\n\t\t\tthis.group.position.copy(position);\n\t\t\tthis.group.position.y = 0;\n\t\t\t\n\t\t\tconst firstElement = this.building.selectionsGroup.getObjectByName(props[0].engineId);\n\t\t\tfirstElement.getWorldQuaternion(quaternion);\n\t\t\tconst euler = new Euler().setFromQuaternion(quaternion,'YXZ');\n\t\t\tthis.group.rotation.y = euler.y;\n\t\t\t\n\t\t\tconst selectionsClone = this.building.selectionsGroup.clone(true);\n\t\t\tselectionsClone.traverse(el => {\n\t\t\t\tel.rotation.set(el.rotation.x,0,el.rotation.z);\n\t\t\t});\n\t\t\t\n\t\t\tbbox.setFromObject(selectionsClone);\n\t\t\tbbox.getSize(size);\n\t\t\t\n\t\t\tconst dimensions = new Vector3().subVectors( bbox.max, bbox.min );\n\t\t\tconst boxGeo = new BoxGeometry(dimensions.x, dimensions.y, dimensions.z);\n\t\t\tconst matrix = new Matrix4().setPosition(dimensions.addVectors(bbox.min, bbox.max).multiplyScalar( 0.5 ));\n\t\t\tboxGeo.applyMatrix4(matrix);\n\t\t\tboxGeo.center();\n\t\t\tboxGeo.translate(0,size.y / 2,0);\n\t\t\t\n\t\t\tthis.mesh = new Mesh(boxGeo,unselectedMaterial);\n\t\t\tthis.mesh.name = this.building.name;\n\t\t\tthis.group.add(this.mesh);\n\t\t\t\n\t\t\tselectionsClone.traverse(el => {\n\t\t\t\tif (el.isMesh) {\n\t\t\t\t\tel.geometry.dispose();\n\t\t\t\t\tel.material.dispose();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\tif (this.transform) {\n\t\t\tif (!this.transform.position.equals(this.group.position)) {\n\t\t\t\tthis.group.position.copy(this.transform.position);\n\t\t\t}\n\t\t\t\n\t\t\tif (!this.transform.rotation.equals(this.group.rotation)) {\n\t\t\t\tthis.group.rotation.copy(this.transform.rotation);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.mesh.userData.type = 'Building';\n\t}\n\t\n\tset config(cfg) {\n\t\tthis.transform = {\n\t\t\tposition: new Vector3().fromArray(cfg.position),\n\t\t\trotation: new Euler().fromArray(cfg.rotation)\n\t\t}\n\t}\n\t\n}\n","'use strict';\n\nimport { latLngToXY, xyToLatLng } from '@googlemaps/three';\nimport {\n\tDirectionalLight,\n\tGroup,\n\tHemisphereLight,\n\tScene,\n\tVector3,MathUtils,\n} from 'three';\nimport { ThreeJsOverlay } from '../overlay/ThreeJsOverlay';\n\nexport class MiniMapScene {\n\t\n\tconstructor (map,params) {\n\t\tthis.map = map;\n\t\tthis.params = params;\n\t\tthis.scene = new Scene();\n\t\tthis.buildingsGroup = new Group();\n\t\tthis.buildingsGroup.name = 'Project Buildings';\n\t\tthis.scene.add(this.buildingsGroup);\n\t\tthis.objects = new Group();\n\t\tthis.objects.name = 'Scene objects';\n\t\tthis.scene.add(this.objects);\n\t\t\n\t\tthis.scene.position.fromArray(this.params.position);\n\t\tthis.scene.rotation.fromArray(this.params.rotation);\n\t\t\n\t\tconst dirLight = new DirectionalLight(0xffffff,1.3);\n\t\tdirLight.position.set(0, 500, 0);\n\t\tthis.scene.add(dirLight);\n\t\t\n\t\tconst hemis = new HemisphereLight('#E9EAEF','#C1C2D1',2);\n\t\themis.position.set(0,0,0);\n\t\tthis.scene.add(hemis);\n\t\t\n\t\tconst center = this.map.getCenter();\n\t\t\n\t\tthis.overlay = new ThreeJsOverlay({\n\t\t\tanchor: {lat: center.lat(), lng: center.lng(), altitude: 0},\n\t\t\tupAxis: 'Y',\n\t\t\taddDefaultLighting: false,\n\t\t\tanimationMode: 'ondemand',\n\t\t\tscene: this.scene\n\t\t});\n\t\t\n\t\tthis.overlay.setMap(this.map);\n\t}\n\t\n\tadd(object,target) {\n\t\tif (target) {\n\t\t\tconst obj = this.scene.getObjectByName(target);\n\t\t\tif (obj) {\n\t\t\t\tobj.add(object);\n\t\t\t} else {\n\t\t\t\tthis.scene.add(object);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.scene.add(object);\n\t\t}\n\t}\n\t\n\tmoveToObject(obj) {\n\t\tconst position = new Vector3();\n\t\tobj.getWorldPosition(position);\n\t\tconst {lat, lng} = this.vec3ToLatLngAlt(position);\n\t\tthis.map.moveCamera({\n\t\t\tcenter: {\n\t\t\t\tlat,\n\t\t\t\tlng\n\t\t\t}\n\t\t});\n\t}\n\t\n\tvec3ToLatLngAlt(vec3) {\n\t\tconst position = new Vector3().copy(vec3);\n\t\tposition.applyQuaternion(this.overlay.rotationInverse.clone().invert());\n\t\tconst z = position.z;\n\t\tconst anchor = this.overlay.anchor;\n\t\tconst [anchorX, anchorY] = latLngToXY(anchor);\n\t\tposition.multiplyScalar(1 / Math.cos(MathUtils.degToRad(anchor.lat)));\n\t\tconst {lat,lng} = xyToLatLng([position.x + anchorX, position.y + anchorY]);\n\t\t\n\t\treturn {\n\t\t\tlat,\n\t\t\tlng,\n\t\t\taltitude: anchor.altitude + z\n\t\t}\n\t}\n\t\n}\n","'use strict'\n\nimport { isBetaResourcesFolder } from '../../functions';\nimport { BmbyMode } from '../mode/BmbyMode';\n\nexport const analytics = (type, data) => {\n if (!config.features.googleAnalytics?.active ||\n isBetaResourcesFolder() || BmbyMode.active ||\n window.location.href.match('localhost:3100')) return;\n\n switch (type) {\n case 'option card': handleOptionCard(data); break;\n case 'unit card': handleUnitCard(data); break;\n case 'favorites': handleFavorites(data); break;\n case 'page_entrance': handlePageEntrance(data); break;\n case 'prepayment': handlePrepayment(data); break;\n case 'orientation': handleOrientation(data); break;\n case 'plan_paint': handlePaint2D(data); break;\n case 'floor_plan_paint': handleFloorPaint2D(data); break;\n }\n}\n\nfunction handlePaint2D (data) {\n gtag('event', 'plan_paint', {\n 'bmbyPropID': data.bmbyPropID,\n 'buildingEngineId': data.buildingEngineId,\n 'buildingName': data.buildingName,\n 'propNum': data.propNum,\n 'floor': data.floorNum,\n 'roomsCnt': data.roomNum,\n 'cardViewDomain': window.location.hostname,\n 'price': data.salePrice,\n 'apartmentType': data.modelName,\n 'domain': window.location.hostname\n });\n}\n\nfunction handleFloorPaint2D (data) {\n gtag('event', 'floor_plan_paint', {\n 'buildingEngineId': data.buildingEngineId,\n 'buildingName': data.buildingName,\n 'floor': data.floorNum,\n 'cardViewDomain': window.location.hostname,\n 'domain': window.location.hostname\n });\n}\n\nfunction handleUnitCard (data) {\n gtag('event', 'card_preview', {\n 'bmbyPropID': data.bmbyPropID,\n 'buildingEngineId': data.buildingEngineId,\n 'buildingName': data.buildingName,\n 'propNum': data.propNum,\n 'floor': data.floor,\n 'roomsCnt': data.infoPoints ? data.infoPoints.roomNum : data.roomNum,\n 'price': data.price,\n 'apartmentType': data.infoPoints ? data.infoPoints.modelName : data.modelName,\n 'cardViewDomain': window.location.hostname,\n 'domain': window.location.hostname\n });\n}\n\nfunction handleOptionCard(data) {\n gtag('event', 'card_view', {\n 'bmbyPropID': data.bmbyPropID,\n 'buildingEngineId': data.buildingEngineId,\n 'buildingName': data.buildingName,\n 'propNum': data.propNum,\n 'floor': data.floorNum,\n 'roomsCnt': data.roomNum,\n 'cardViewDomain': window.location.hostname,\n 'price': data.salePrice,\n 'apartmentType': data.modelName,\n 'domain': window.location.hostname\n });\n}\n\nfunction handleFavorites(data) {\n if (!data.storageData) {\n gtag('event', 'favorite_added', {\n 'addFavoritesBmbyPropID': data.crmDataOfFlat.bmbyPropID,\n 'bmbyPropID': data.crmDataOfFlat.bmbyPropID,\n 'buildingEngineId': data.crmDataOfFlat.buildingEngineId,\n 'buildingName': data.crmDataOfFlat.buildingName,\n 'addFavoritesPropNum': data.crmDataOfFlat.propNum,\n 'addFavoritesCount': 1,\n 'propNum': data.crmDataOfFlat.propNum,\n 'floor': data.crmDataOfFlat.floorNum,\n 'roomsCnt': data.crmDataOfFlat.roomNum,\n 'price': data.crmDataOfFlat.salePrice,\n 'apartmentType': data.crmDataOfFlat.modelName,\n 'addFavoritesDomain': window.location.hostname,\n 'domain': window.location.hostname\n });\n\n return;\n }\n\n gtag('event', 'favorite_removed', {\n 'removeFavoritesBmbyPropID': data.crmDataOfFlat.bmbyPropID,\n 'bmbyPropID': data.crmDataOfFlat.bmbyPropID,\n 'buildingEngineId': data.crmDataOfFlat.buildingEngineId,\n 'buildingName': data.crmDataOfFlat.buildingName,\n 'removeFavoritesPropNum': data.crmDataOfFlat.propNum,\n 'removeFavoritesCount': 1,\n 'propNum': data.crmDataOfFlat.propNum,\n 'floor': data.crmDataOfFlat.floorNum,\n 'roomsCnt': data.crmDataOfFlat.roomNum,\n 'price': data.crmDataOfFlat.salePrice,\n 'apartmentType': data.crmDataOfFlat.modelName,\n 'removeFavoritesDomain': window.location.hostname,\n 'domain': window.location.hostname\n });\n}\n\nfunction handlePageEntrance (data) {\n gtag('event', 'page_entrance', {\n 'page': data,\n 'domain': window.location.hostname\n });\n}\n\nfunction handlePrepayment (data) {\n gtag('event', 'prepayment', {\n 'bmbyPropID': data.bmbyPropID,\n 'buildingEngineId': data?.buildingEngineId,\n 'buildingName': data?.buildingName,\n 'domain': window.location.hostname\n });\n}\n\nfunction handleOrientation(data) {\n gtag('event', 'orientation', {\n 'orientation': data\n });\n}\n","'use strict';\n\nimport {cardsData, isDesktop, isMobile, settingsData} from \"../../settings\";\nimport {createPopUp} from \"./statistic\";\nimport Notiflix from 'notiflix';\nimport { getCurrentLangDirection} from '../components/langSwitcher/langSwitcher';\nimport { Cookie } from '../Cookie/Cookie';\n\nexport const conferenceStatistic = (args) => {\n const { cardBox, object } = args;\n\n if (isMobile || cardsData.cardMode.isAmenities || cardsData.cardMode.isUnavailable)\n return;\n\n if (!cardBox)\n return;\n\n let statisticCnt;\n\n if (typeof window.localStorage !== 'undefined' ) {\n statisticCnt = JSON.parse(localStorage.getItem('statisticCnt'))?.[object.engineId];\n } else {\n statisticCnt = Cookie.getCookie('statisticCnt')?.[object.engineId];\n }\n\n let statisticData;\n\n if (!statisticCnt) {\n statisticData = setStatisticToStorage();\n } else {\n statisticData = getStatisticFromStorage();\n }\n\n const {statisticInterestedBlock, statisticFavoritesBlock, statisticBlock} = createPopUp();\n statisticInterestedBlock.insertAdjacentHTML('afterbegin', `${statisticData.interestCntValue}`);\n statisticFavoritesBlock.insertAdjacentHTML('afterbegin', `${statisticData.favoritesCntValue}`);\n const copyInterested = statisticBlock.cloneNode(true);\n const copyFavorite = statisticBlock.cloneNode(true);\n const dir = getCurrentLangDirection();\n\n copyInterested.appendChild(statisticInterestedBlock);\n copyFavorite.appendChild(statisticFavoritesBlock);\n\n Notiflix.Notify.merge({\n position: isDesktop ? 'left-top' : (dir === 'ltr') ? 'right-top' : 'left-top',\n rtl: (dir !== 'ltr')\n })\n\n Notiflix.Notify.info(`${copyInterested.innerHTML}`);\n setTimeout(()=> Notiflix.Notify.info(`${copyFavorite.innerHTML}`),1000);\n}\n\nconst setStatisticToStorage = (timeFlag) => {\n const now = new Date();\n const apt = settingsData.lastClickedFlat.userData.crm_data.engineId;\n const newObject = {\n 'interestCntValue': Math.floor(Math.random() * 50) + 1,\n 'favoritesCntValue': Math.floor(Math.random() * 30) + 1,\n 'expiry': now.getTime(),\n }\n let object;\n let storageData;\n\n if (typeof window.localStorage !== 'undefined' ) {\n storageData = JSON.parse(localStorage.getItem('statisticCnt'));\n } else {\n storageData = JSON.parse(Cookie.getCookie('statisticCnt'));\n \n }\n\n if (!storageData) {\n if (typeof window.localStorage !== 'undefined' ) {\n localStorage.setItem('statisticCnt', JSON.stringify({\n [apt]: newObject,\n }))\n } else {\n Cookie.setCookie('statisticCnt',JSON.stringify({\n [apt]: newObject,\n }));\n }\n object = newObject;\n return object;\n } else if (!storageData[apt] || timeFlag) {\n if (typeof window.localStorage !== 'undefined' ) {\n localStorage.setItem('statisticCnt', JSON.stringify({\n ...storageData, [apt]: newObject,\n }))\n } else {\n Cookie.setCookie('statisticCnt',JSON.stringify({\n ...storageData, [apt]: newObject,\n }));\n }\n object = newObject;\n return object;\n } else {\n object = storageData[apt];\n return object;\n }\n}\n\nconst getStatisticFromStorage = () => {\n let statisticCnt;\n if (typeof window.localStorage !== 'undefined' ) {\n statisticCnt = JSON.parse(localStorage.getItem('statisticCnt'));\n } else {\n statisticCnt = Cookie.getCookie('statisticCnt');\n }\n\n const apt = settingsData.lastClickedFlat.userData.crm_data.engineId;\n\n if (!statisticCnt)\n return null;\n\n const now = new Date();\n const oneDay = 24 * 60 * 60 * 1000;\n\n if (now.getTime() - statisticCnt[apt].expiry > oneDay) {\n return setStatisticToStorage('timeOver');\n } else {\n return statisticCnt[apt];\n }\n}\n\n","'use strict';\n\nimport axios from \"axios\";\nimport {cardsData, isDesktop, isMobile, settingsData} from \"../../settings\";\nimport {CardTypes} from \"../../common\";\nimport {\n changeLangToCurrent,\n getCurrentLangDirection,\n} from '../components/langSwitcher/langSwitcher';\nimport Notiflix from 'notiflix';\nimport {BaseElement} from \"../interfaces/BaseElement\";\n\nNotiflix.Notify.init({\n width:'100%',\n timeout:10000,\n messageMaxLength:1000,\n zindex:100,\n opacity:1,\n position:'right-top',\n clickToClose: true,\n pauseOnHover: true,\n cssAnimation: true,\n cssAnimationDuration: 500,\n cssAnimationStyle: 'from-top',\n plainText: false,\n ID: 'notiflix',\n info:{\n background: '#519af8',\n notiflixIconColor: 'rgba(255,255,255,1)'\n }\n});\n\nexport function changeNotiflixNotifyPosition () {\n const dir = getCurrentLangDirection();\n const notiflix = document.querySelector('#NotiflixNotifyWrap');\n\n if (!notiflix)\n return;\n\n Notiflix.Notify.merge({\n position: isDesktop ? 'left-top' : (dir === 'ltr') ? 'right-top' : 'left-top',\n rtl: (dir !== 'ltr'),\n info:{\n background: '#519af8'\n }\n });\n\n for (let info of notiflix.children){\n if (dir === 'rtl'){\n info.classList.add('nx-rtl-on')\n } else {\n info.classList.remove('nx-rtl-on')\n }\n }\n notiflix.style.inset = dir === 'rtl' ? '10px auto auto 10px' : '10px 10px auto auto';\n}\n\nexport function updateNotiflixNotifyDirection () {\n const dir = getCurrentLangDirection();\n const notiflix = document.querySelector('#NotiflixNotifyWrap');\n\n if (!notiflix)\n return;\n\n Notiflix.Notify.merge({\n rtl: (dir !== 'ltr'),\n });\n\n for (let info of notiflix.children){\n if (dir === 'rtl'){\n info.classList.add('nx-rtl-on')\n } else {\n info.classList.remove('nx-rtl-on')\n }\n }\n}\n\nexport function closeNotifications () {\n const notiflix = document.querySelector('#NotiflixNotifyWrap');\n if (!notiflix)\n return;\n\n notiflix.remove();\n}\n\nconst optionsStatistic = {\n propertyId: config.features.googleAnalytics?.propertyId,\n types: ['card-view', 'favorites']\n}\n\nexport const getGoogleAnalyticsData = async () => {\n if (!config.features.googleAnalytics?.active || config.features.googleAnalytics?.notification?.length === 0)\n return;\n console.warn('GET DATA FROM GA');\n\n const {protocol, host} = location;\n const daysAgo = config.features.googleAnalytics.daysAgo || 2;\n for (let type of optionsStatistic.types){\n let requestURL = `${protocol}//${host}/?analytics=${type}&id=${optionsStatistic.propertyId}`;\n if(type == 'card-view'){\n requestURL += `&days_ago=${daysAgo}`;\n }\n const response = await axios.get(requestURL);\n settingsData.statisticData[type] = response.data;\n }\n}\n\nexport const createPopUp = () => {\n const statisticBlock = new BaseElement()\n .addClass(`${CardTypes.Options}-card__statistic-container`)\n .DOMElement;\n const statisticInterestedBlock = new BaseElement()\n .addClass(`${CardTypes.Options}-card__statistic-container-stat-box`)\n .DOMElement;\n const statisticFavoritesBlock = new BaseElement()\n .addClass(`${CardTypes.Options}-card__statistic-container-stat-box`)\n .DOMElement;\n new BaseElement('span')\n .addClass(`${CardTypes.Options}-card__statistic-container_interest`, 'language-string')\n .addAttribute('data-dictionary', 'statInterestedText')\n .innerHtml(changeLangToCurrent('statInterestedText'))\n .appendTo(statisticInterestedBlock);\n new BaseElement('span')\n .addClass(`${CardTypes.Options}-card__statistic-container_favorites`, 'language-string')\n .addAttribute('data-dictionary', 'statFavoritesText')\n .innerHtml(changeLangToCurrent('statFavoritesText'))\n .appendTo(statisticFavoritesBlock);\n\n return {\n statisticBlock,\n statisticInterestedBlock,\n statisticFavoritesBlock\n }\n}\n\nexport const showStatisticPopUp = (args) => {\n const { cardBox, object } = args;\n\n if (isMobile || cardsData.cardMode.isAmenities || cardsData.cardMode.isUnavailable)\n return;\n if (!cardBox)\n return;\n\n const {statisticData} = settingsData;\n const popUpArray = [];\n\n if (!Object.keys(statisticData).length)\n return;\n\n const notifications = config.features.googleAnalytics.notification;\n const dir = getCurrentLangDirection();\n Notiflix.Notify.merge({\n position: isDesktop ? 'left-top' : (dir === 'ltr') ? 'right-top' : 'left-top',\n rtl: (dir !== 'ltr')\n });\n const cardView = Array.isArray(statisticData['card-view']) && notifications?.find(notification => notification.type === 'card-view' && notification.active) ? statisticData['card-view'].find(data => Number(data.bmbyPropId) === object.bmbyPropID) : undefined;\n const favorites = Array.isArray(statisticData['favorites']) && notifications?.find(notification => notification.type === 'favorites' && notification.active) ? statisticData['favorites'].find(data => Number(data.bmbyPropId) === object.bmbyPropID) : undefined;\n const {statisticInterestedBlock, statisticFavoritesBlock, statisticBlock} = createPopUp();\n\n if (cardView) {\n statisticInterestedBlock.insertAdjacentHTML('afterbegin', `${cardView.count}`);\n const copyInterested = statisticBlock.cloneNode(true);\n copyInterested.appendChild(statisticInterestedBlock);\n popUpArray.push(copyInterested);\n }\n\n if (favorites) {\n statisticFavoritesBlock.insertAdjacentHTML('afterbegin', `${favorites.count}`);\n const copyFavorite = statisticBlock.cloneNode(true);\n copyFavorite.appendChild(statisticFavoritesBlock);\n popUpArray.push(copyFavorite);\n }\n\n popUpArray.forEach((popup,index) =>{\n setTimeout(()=> {\n if (cardBox) Notiflix.Notify.info(`${popup.innerHTML}`);\n },index * 1000);\n });\n}\n","'use strict';\n\nimport { isMobile, isTablet } from '../../settings';\n\nexport class Cloudflare {\n static active = config.resources.cloudflare?.active || false;\n static settings = config.resources.cloudflare?.settings || {};\n static version = config.resources.cloudflare?.version || null;\n\n static resize(path, manualParams, addVersion = true,checkIsImage = true) {\n if (!Cloudflare.active)\n return path;\n\n let params;\n\n if (manualParams) {\n params = manualParams;\n } else {\n params = (isMobile || isTablet) ? Cloudflare.settings.mobile : Cloudflare.settings.web;\n }\n \n if (typeof path === 'string' && (!path.startsWith(config.cdnRepository) || (!Cloudflare.isImage(path) && checkIsImage)))\n return path;\n \n if (path instanceof URL && !Cloudflare.isImage(path.pathname) && checkIsImage) {\n return;\n }\n \n const url = new URL(path);\n let paramsString = '';\n const maxIndex = Object.keys(params).length - 1;\n\n Object.entries(params).forEach(([key,value],index) => {\n paramsString += `${key}=${value}`;\n\n if ( maxIndex !== index)\n paramsString += ',';\n });\n\n let modifiedUrl = `${url.origin}/resize/image/${paramsString}${url.pathname}`;\n\n if (Cloudflare.version && addVersion) {\n modifiedUrl += `?v=${Cloudflare.version}`;\n }\n\n\n return modifiedUrl;\n }\n\n static isImage(path) {\n const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'];\n const fileExtension = path.slice((path.lastIndexOf(\".\") - 1 >>> 0) + 2).toLowerCase();\n return imageExtensions.includes(fileExtension);\n }\n}\n","'use strict';\n\n\nimport { showMsg } from '../widgets/poi/poiv3';\nimport { BaseElement } from '../interfaces/BaseElement';\nimport { getCurrentLang } from '../components/langSwitcher/langSwitcher';\n\nexport class GoogleMaps {\n static sendRequest = false;\n\n constructor () {\n if (window.google && window.google.maps) {\n return new Promise(resolve => resolve());\n } else if (GoogleMaps.sendRequest) {\n return new Promise(resolve => {\n window.addEventListener('googleMapsAPILoaded', () => {\n resolve();\n },{once: true});\n });\n } else {\n return GoogleMaps.loadGoogleMapScripts();\n }\n }\n\n static loadGoogleMapScripts() {\n GoogleMaps.sendRequest = true;\n const link = `https://maps.googleapis.com/maps/api/js?key=${config.googleAPI}&language=${getCurrentLang()}&callback=googleMapsAPILoaded`;\n new BaseElement('script')\n .addAttribute('src',link)\n .appendTo(document.querySelector('head'));\n\n return new Promise(resolve => {\n window.addEventListener('googleMapsAPILoaded', () => {\n resolve();\n },{once: true});\n });\n }\n\n static removeGoogleMapScripts() {\n document.querySelectorAll('script[src^=\"https://maps.googleapis.com\"]').forEach(script => {\n script.remove();\n });\n if(window.google) delete window.google.maps;\n document.querySelector('script[id=\"snazzy\"]')?.remove();\n delete window.SnazzyInfoWindow;\n delete require.cache[require.resolve('snazzy-info-window')]\n }\n\n static getRoute(from,to,travelMode = 'DRIVING') {\n const request = {\n origin: new google.maps.LatLng(from.lat,from.lng),\n destination: new google.maps.LatLng(to.lat,to.lng),\n travelMode\n };\n const service = new google.maps.DirectionsService();\n\n return new Promise((resolve) => {\n service.route(request, (result,status) =>{\n if (status === 'OK'){\n resolve(result);\n } else {\n showMsg('Can not get the route');\n resolve([]);\n }\n });\n });\n }\n}\n\n\nwindow.googleMapsAPILoaded = () => {\n let event = new CustomEvent('googleMapsAPILoaded');\n window.dispatchEvent(event);\n window.SnazzyInfoWindow = require('snazzy-info-window');\n GoogleMaps.sendRequest = false;\n};\n","'use strict';\n\nimport { getUrlParam } from '../../functions';\nimport {isDesktop, isMobile} from '../../settings';\nimport { sendUserID } from '../crm/crm-requests';\nimport { Cookie } from '../Cookie/Cookie';\n\nexport class UserAPI {\n constructor () {\n this.id = Cookie.getCookie('userId');\n if (!this.id) {\n this.id = this.uniqueID;\n Cookie.setCookie('userId',this.id);\n }\n\n this.clientId = getUrlParam('clientId');\n this.deviceType = isDesktop ? 'desktop' : isMobile ? 'mobile' : 'web';\n }\n\n send() {\n const sendData = {\n uniqueId: this.id,\n deviceType: this.deviceType\n };\n\n if (this.clientId) {\n sendData.clientId = this.clientId;\n }\n\n sendUserID(sendData);\n }\n\n get uniqueID() {\n const s4 = () => Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n const uuid = `${s4() + s4()}-${s4()}-${s4()}-${s4()}-${s4() + s4() + s4()}`;\n return uuid.toUpperCase();\n }\n\n}\n","'use strict';\n\n\nimport {\n Box3, Box3Helper, BoxGeometry,\n DynamicDrawUsage,\n Euler,\n Group,\n InstancedMesh,\n LinearSRGBColorSpace,\n Matrix4, Mesh, MeshBasicMaterial,\n Quaternion,\n Vector3,\n} from 'three';\nimport { SelectedObjectType, ViewMode } from '../../common';\nimport { Buildings, projectMode, settingsData, threeJsVariables } from '../../settings';\nimport { createBuildingInfo } from '../threejs/autoSelectionBoxes';\nimport { ColorCorrection } from '../threejs/colorCorrection';\nimport { hideSceneObjects, sceneObjectsGroup, showSceneObjects } from '../points/points';\nimport { Objects } from '../threejs/Objects/Objects';\n\nconst _matrix = new Matrix4();\nconst _position = new Vector3();\nconst _quaternion = new Quaternion();\nconst _scale = new Vector3();\nconst _box = new Box3();\n\nexport class Building {\n constructor (model) {\n this.model = model;\n this.modelGroup = new Group();\n this.selectionsGroup = null;\n this.name = this.model.name;\n this.apartments = [];\n this.floors = [];\n this.amenities = {};\n this.instances = [];\n this.selections = [];\n this.floorsPlug = [];\n this.customSelections = [];\n this.cylinderLabels = [];\n this.info = {};\n this.isActive = false;\n this.isHide = false;\n this.mouseHover = false;\n this.floorSliderNumbers = [];\n this.colors = new ColorCorrection().getColors('buildings');\n this.params = {\n bboxObjects: []\n }\n }\n\n create() {\n /* Create main Group */\n this.modelGroup.name = this.model.name;\n\n if (!threeJsVariables.slicer.active) {\n /* Sort floors by Y */\n this.model.children = this.model.children.sort((prev, next) => prev.position.y - next.position.y);\n\n this.modelGroup.position.set(this.model.position.x, this.model.position.y, this.model.position.z);\n this.modelGroup.scale.set(this.model.scale.x, this.model.scale.y, this.model.scale.z);\n this.modelGroup.rotation.set(this.model.rotation.x, this.model.rotation.y, this.model.rotation.z);\n\n let instanceMesh;\n\n /* Create floor instance Mesh */\n this.model.children.forEach(floor => {\n if (floor.userData.groups) {\n floor.geometry.groups.push(...floor.userData.groups);\n }\n if (floor.name.match(/floor/g)) {\n instanceMesh = makeInstanceMesh(this,floor, undefined, 'floor');\n instanceMesh.geometry.computeBoundsTree();\n this.instances.push(instanceMesh);\n this.modelGroup.add(instanceMesh);\n } else {\n instanceMesh = makeInstanceMesh(this,floor, 1, 'amenity');\n instanceMesh.geometry.computeBoundsTree();\n this.instances.push(instanceMesh);\n this.modelGroup.add(instanceMesh);\n }\n });\n } else {\n this.modelGroup.position.set(this.model.parent.position.x, this.model.parent.position.y, this.model.parent.position.z);\n this.modelGroup.scale.set(this.model.parent.scale.x, this.model.parent.scale.y, this.model.parent.scale.z);\n this.modelGroup.rotation.set(this.model.parent.rotation.x, this.model.parent.rotation.y, this.model.parent.rotation.z);\n\n\n if (this.model.userData.groups) {\n this.model.geometry.groups.push(...this.model.userData.groups);\n }\n this.model.userData.type = SelectedObjectType.Building;\n this.model.geometry.computeBoundsTree();\n // this.model.layers.set(1);\n // this.model.userData.main_building_item = true;\n // this.model.userData.buildingFloors = true;\n this.instances.push(this.model);\n this.modelGroup.add(this.model);\n this.amenities.Roof = true;\n }\n\n\n if (projectMode.LiteMode.isActive() && (!projectMode.LiteMode.modeIs('regular') && !projectMode.LiteMode.modeIs('schematic') && !projectMode.LiteMode.modeIs('rotate') ))\n this.modelGroup = null;\n\n if (!projectMode.LiteMode.isActive() || projectMode.LiteMode.isActive() && (projectMode.LiteMode.modeIs('regular') || projectMode.LiteMode.modeIs('rotate'))) {\n this.floorSliderNumbers = this.floors.map(el => el.floor).sort((a,b) => b - a);\n }\n\n\n /* Add model to intersection */\n if (!projectMode.LiteMode.isActive())\n settingsData.objects_to_intersection.push(...this.instances);\n \n this.cylinderLabels = Objects.cylinderCSSLabels.filter(label => label.data.buildingEngineId === this.name);\n settingsData.instanced_floors_switch[this.name] = this.instances;\n /* Add building to District */\n if (Buildings.isUsedBuilding(this.name)) {\n Buildings.addBuilding(this.name,this);\n }\n\n return this.modelGroup;\n }\n\n addFloor(value){\n this.floors.push(value);\n }\n\n applyColorCorrection() {\n if (threeJsVariables.bundleConfig?.version) return;\n\n this.instances.forEach(instance => {\n if (Array.isArray(instance.material)) {\n instance.material.forEach(singleMaterial => {\n singleMaterial.color.setStyle(this.colors.color,LinearSRGBColorSpace);\n singleMaterial.emissive.setStyle(this.colors.emissive,LinearSRGBColorSpace);\n });\n } else {\n instance.material.color.setStyle(this.colors.color,LinearSRGBColorSpace);\n instance.material.emissive.setStyle(this.colors.emissive,LinearSRGBColorSpace);\n }\n });\n }\n\n addAmenities(key,value) {\n if (projectMode.LiteMode.isActive() && !projectMode.LiteMode.modeIs('regular') && !projectMode.LiteMode.modeIs('rotate')) return;\n this.amenities[key] = value;\n }\n\n addSelection(data){\n this.selections.push(data);\n }\n\n addInfo(value){\n this.info = value;\n }\n\n getInfo(){\n if (Object.keys(this.info).length){\n return this.info;\n } else {\n return false;\n }\n }\n\n getFloorPlugMeshes(){\n return this.floorsPlug.map(plug => plug.data);\n }\n\n getFloorsMoreThan(number) {\n if (projectMode.LiteMode.isActive() && !projectMode.LiteMode.modeIs('regular') && !projectMode.LiteMode.modeIs('rotate'))\n return [];\n return this.floors.filter(obj => obj.floor > number).map(el => el.data);\n }\n\n getFloorSelections(number, withPlug = true){\n if (withPlug){\n return this.selections.find(selection => selection.floor === number).data;\n } else {\n return this.selections.find(selection => selection.floor === number).data\n .filter(apt => !apt.name.startsWith(config.resources.bundle.selectionBoxes.floorPlugName));\n }\n }\n\n getFloorsSelectionsGroupMoreThan(number) {\n return this.selections.filter(selection => selection.floor > number).reduce((acc,value) => {\n acc.push(value.data[0].parent);\n return acc;\n },[]);\n }\n\n getFloors(start,end) {\n let floors = [];\n let floorSelectionGroup = [];\n\n if (end === undefined) {\n floors = this.getFloorsMoreThan(start);\n floorSelectionGroup = this.getFloorsSelectionsGroupMoreThan(start);\n } else {\n floors = this.floors.filter(obj => obj.floor > start && obj.floor <= end).map(el => el.data);\n floorSelectionGroup = this.selections.filter(selection => selection.floor > start && selection.floor <= end).reduce((acc,value) => {\n acc.push(value.data[0].parent);\n return acc;\n },[]);\n }\n\n return {\n floors,\n floorSelectionGroup\n }\n }\n\n getFloorNumbersForFloorSlider() {\n const floorsWithoutCRMData = [];\n this.floorSliderNumbers.forEach(floor => {\n let isFloorEmpty = true;\n this.getFloorSelections(floor, false).forEach(selection => {\n if (selection.userData?.crm_data)\n isFloorEmpty = false;\n });\n if (isFloorEmpty)\n floorsWithoutCRMData.push(floor);\n });\n\n return this.floorSliderNumbers.filter(item => !floorsWithoutCRMData.includes(item));\n }\n\n activate(){\n this.setLayer(1);\n this.isActive = true;\n }\n\n deactivate(){\n this.setLayer(0);\n this.isActive = false;\n }\n\n setLayer(value) {\n this.modelGroup.traverse(el => {\n if (el.isMesh) {\n el.layers.set(value);\n }\n });\n }\n\n hideSceneObjectsOfCurrentBuilding() {\n if (!threeJsVariables.slicer.active) return;\n\n const objects = this.params.bboxObjects;\n\n if (objects.length) {\n const names = [...new Set(objects.map(el => el.name))];\n names.forEach(objectName => {\n const points = objects.filter(el => el.name === objectName);\n const onScene = threeJsVariables.scene.getObjectByName(objectName);\n\n points.forEach(point => {\n onScene.getMatrixAt(point.count,_matrix);\n _matrix.decompose(_position,_quaternion,_scale);\n _matrix.setPosition(_position.x,-1000,_position.z);\n onScene.setMatrixAt(point.count,_matrix);\n });\n onScene.instanceMatrix && (onScene.instanceMatrix.needsUpdate = true);\n onScene.instanceMatrix && onScene.computeBoundingSphere();\n });\n\n } else {\n const models = config.resources.sceneObjects.models || [];\n const manualAttached = models.filter(el => el.attach === this.name).map(el => el.name);\n _box.makeEmpty();\n _box.setFromObject(this.modelGroup);\n _box.expandByScalar(1.05);\n\n sceneObjectsGroup.traverse(el => {\n if (el.isInstancedMesh && !el.isInstanceLOD) {\n for (let i = 0; i < el.count; i++) {\n el.getMatrixAt(i,_matrix);\n _matrix.decompose(_position,_quaternion,_scale);\n if (_box.containsPoint(_position)) {\n this.params.bboxObjects.push({\n name: el.name,\n count: i,\n matrix: new Matrix4().copy(_matrix)\n });\n _matrix.setPosition(_position.x,-1000,_position.z);\n el.setMatrixAt(i,_matrix);\n }\n }\n\n el.instanceMatrix.needsUpdate = true;\n el.computeBoundingSphere();\n } else if (el.isInstanceLODObject) {\n for (let i = 0; i < el.count; i++) {\n _matrix.copy(el.getMatrixAt(i));\n _matrix.decompose(_position,_quaternion,_scale);\n if (_box.containsPoint(_position)) {\n this.params.bboxObjects.push({\n name: el.name,\n count: i,\n matrix: new Matrix4().copy(_matrix)\n });\n _matrix.setPosition(_position.x,-1000,_position.z);\n el.setMatrixAt(i,_matrix);\n }\n }\n } else if (el.isMesh && !el.isInstancedMesh && !el.isInstanceLOD) {\n if (!manualAttached.includes(el.name)) {\n el.getWorldPosition(_position);\n if (_box.containsPoint(_position)) {\n this.params.bboxObjects.push({\n name: el.name,\n position: el.position.clone()\n });\n el.position.setY(-1000);\n }\n }\n }\n });\n\n if (objects.length && threeJsVariables.sceneObjectsSlicer.active) {\n const names = [...new Set(objects.map(el => el.name))];\n if (!Array.isArray(config.resources.sceneObjects.models)) {\n config.resources.sceneObjects.models = [];\n }\n\n names.forEach(name => {\n const onScene = threeJsVariables.scene.getObjectByName(name);\n if (onScene.isInstanceLODObject) {\n const subNames = onScene.children.map(subMesh => subMesh.name);\n subNames.forEach(subName => {\n config.resources.sceneObjects.models.push({\n name: subName,\n attach: this.name\n });\n });\n } else {\n config.resources.sceneObjects.models.push({\n name,\n attach: this.name\n });\n }\n });\n }\n }\n }\n\n updateAttachedModelsList() {\n if (!threeJsVariables.sceneObjectsSlicer.active) return;\n\n const models = config.resources.sceneObjects.models || [];\n const manualAttached = models.filter(el => el.attach === this.name).map(el => el.name);\n _box.makeEmpty();\n _box.setFromObject(this.modelGroup);\n _box.expandByScalar(1.05);\n const names = [];\n\n sceneObjectsGroup.traverse(el => {\n if (el.isInstancedMesh && !el.isInstanceLOD) {\n for (let i = 0; i < el.count; i++) {\n el.getMatrixAt(i,_matrix);\n _matrix.decompose(_position,_quaternion,_scale);\n if (_box.containsPoint(_position)) {\n names.push(el.name);\n }\n }\n } else if (el.isInstanceLODObject) {\n for (let i = 0; i < el.count; i++) {\n _matrix.copy(el.getMatrixAt(i));\n _matrix.decompose(_position,_quaternion,_scale);\n if (_box.containsPoint(_position)) {\n names.push(el.name);\n }\n }\n } else if (el.isMesh && !el.isInstancedMesh && !el.isInstanceLOD) {\n if (!manualAttached.includes(el.name)) {\n el.getWorldPosition(_position);\n if (_box.containsPoint(_position)) {\n names.push(el.name);\n }\n }\n }\n });\n\n if (names.length) {\n const uniqueNames = [...new Set(names)];\n\n uniqueNames.forEach(name => {\n const onScene = threeJsVariables.scene.getObjectByName(name);\n if (onScene.isInstanceLODObject) {\n const subNames = onScene.children.map(subMesh => subMesh.name);\n subNames.forEach(subName => {\n config.resources.sceneObjects.models.push({\n name: subName,\n attach: this.name\n });\n });\n } else {\n config.resources.sceneObjects.models.push({\n name,\n attach: this.name\n });\n }\n });\n\n if (settingsData.activeViewMode !== ViewMode.Orbit && this.isActive) {\n hideSceneObjects(this);\n showSceneObjects(this);\n }\n }\n }\n\n showSceneObjectsOfCurrentBuilding() {\n const objects = this.params.bboxObjects;\n\n if (objects.length) {\n const names = [...new Set(objects.map(el => el.name))];\n names.forEach(objectName => {\n const points = objects.filter(el => el.name === objectName);\n const onScene = threeJsVariables.scene.getObjectByName(objectName);\n\n if (onScene.isInstancedMesh && !onScene.isInstanceLOD) {\n points.forEach(point => {\n onScene.setMatrixAt(point.count, point.matrix);\n });\n onScene.instanceMatrix.needsUpdate = true;\n onScene.computeBoundingSphere();\n\n } else if (onScene.isInstanceLODObject) {\n points.forEach(point => {\n onScene.setMatrixAt(point.count, point.matrix);\n });\n } else if (onScene.isMesh && !onScene.isInstancedMesh && !onScene.isInstanceLOD) {\n points.forEach(point => {\n onScene.position.copy(point.position);\n });\n }\n });\n }\n }\n\n bboxVisibility(state,customScalar) {\n _box.makeEmpty();\n _box.setFromObject(this.modelGroup);\n if (customScalar) {\n _box.expandByScalar(customScalar);\n }\n\n if (state) {\n if (!this.params.bboxHelper) {\n this.params.bboxHelper = new Box3Helper(_box);\n }\n\n if (this.params.bboxHelper.parent) {\n this.params.bboxHelper.removeFromParent();\n }\n\n threeJsVariables.scene.add(this.params.bboxHelper);\n } else {\n if (this.params.bboxHelper) {\n this.params.bboxHelper.removeFromParent();\n }\n }\n }\n}\n\nexport class BuildingWithoutModel extends Building{\n\n constructor (model,props,settings) {\n super(model);\n this.name = model;\n this.info = createBuildingInfo({name: this.model},props,settings);\n\n return this;\n }\n\n getApartments() {\n return this.apartments;\n }\n}\n\n\nexport class BuildingBBOX extends Building{\n constructor (model) {\n super(model);\n\n }\n\n create () {\n this.name = this.model.name.split('_')[0];\n this.modelGroup.name = this.name;\n const bbox = new Box3();\n const size = new Vector3();\n const position = new Vector3();\n this.model.getWorldPosition(position);\n this.modelGroup.position.copy(position);\n bbox.setFromObject(this.model);\n const distance = bbox.distanceToPoint(position);\n bbox.getSize(size);\n const material = new MeshBasicMaterial({\n // transparent: true,\n // opacity: 0\n });\n\n const dimensions = new Vector3().subVectors( bbox.max, bbox.min );\n const boxGeo = new BoxGeometry(dimensions.x, dimensions.y, dimensions.z);\n const matrix = new Matrix4().setPosition(dimensions.addVectors(bbox.min, bbox.max).multiplyScalar( 0.5 ));\n boxGeo.applyMatrix4(matrix);\n boxGeo.center();\n boxGeo.translate(0,size.y / 2 + distance,0);\n\n const mesh = new Mesh(boxGeo,material);\n mesh.visible = false;\n\n mesh.userData.type = SelectedObjectType.Building;\n mesh.geometry.computeBoundsTree();\n this.instances.push(mesh);\n this.modelGroup.add(mesh);\n this.amenities.Roof = true;\n\n settingsData.objects_to_intersection.push(...this.instances);\n settingsData.instanced_floors_switch[this.name] = this.instances;\n const projectsGroup = threeJsVariables.scene.getObjectByName('Project Buildings');\n if (projectsGroup) {\n projectsGroup.add(this.modelGroup);\n }\n\n if (Buildings.isUsedBuilding(this.name)) {\n Buildings.addBuilding(this.name,this);\n }\n \n this.cylinderLabels = Objects.cylinderCSSLabels.filter(label => label.data.buildingEngineId === this.name);\n\n return this;\n }\n\n getApartments() {\n return this.apartments;\n }\n}\n\nfunction makeInstanceMesh(scope,baseMesh, count, type) {\n let rotation = new Euler(baseMesh.rotation.x, baseMesh.rotation.y, baseMesh.rotation.z, 'XYZ');\n let rotationQ = new Quaternion().setFromEuler(rotation);\n let matrix = new Matrix4();\n let scale = new Vector3(baseMesh.scale.x, baseMesh.scale.y, baseMesh.scale.z);\n let position;\n let floorHeight = 0;\n let from, to = 0;\n let iteration = (count) ? count : 0;\n let isFloor = false;\n let key;\n let value;\n let floorFrom;\n let floorTo;\n\n if (type === 'floor') {\n let [buildingName, floorName, modelFloorHeight] = baseMesh.name.split('_');\n const floorHeightInMeter = parseFloat(modelFloorHeight) / 100;\n floorName = floorName.replace('floor','');\n\n /* Checking floor TO value */\n if (floorName.match(/((-\\d{1,})|(\\d{1,})).((-\\d{1,})|(\\d{1,}))/g)){\n const split = floorName.split('-');\n floorFrom = split[0];\n floorTo = split[1];\n } else {\n floorFrom = floorName;\n floorTo = floorName;\n }\n\n from = Number(floorFrom);\n to = Number(floorTo);\n floorHeight = floorHeightInMeter;\n iteration = to - from;\n\n if (iteration === 0){\n iteration = 1;\n } else {\n iteration++;\n }\n isFloor = true;\n }\n\n let elementBuildingInstance = new InstancedMesh(baseMesh.geometry, baseMesh.material, iteration);\n elementBuildingInstance.instanceMatrix.setUsage(DynamicDrawUsage);\n\n for (let i = 0; i < iteration; i++) {\n const floorPosY = baseMesh.position.y + i * floorHeight;\n position = new Vector3(baseMesh.position.x, floorPosY, baseMesh.position.z);\n matrix.compose(position, rotationQ, scale);\n elementBuildingInstance.setMatrixAt(i, matrix);\n elementBuildingInstance.renderOrder = 1;\n\n switch (type) {\n case 'floor':\n key = from + i;\n value = {\n 'name': baseMesh.name,\n 'mesh': elementBuildingInstance,\n 'count': i,\n 'position': {x: position.x, y: position.y, z: position.z},\n 'basePosition': {x: position.x, y: position.y, z: position.z},\n 'rotation': rotation,\n 'diff': {\n x: 0,\n y: position.y,\n z: 0,\n },\n 'matrix': matrix\n };\n const floorObj = {floor: key, data: value};\n scope.addFloor(floorObj);\n break;\n case 'amenity':\n key = baseMesh.name;\n key = key.replace(/.\\d{1,}/g,'');\n value = {\n 'mesh': elementBuildingInstance\n };\n scope.addAmenities(key,value);\n break;\n }\n }\n elementBuildingInstance.name = `${baseMesh.name}_instance`;\n elementBuildingInstance.userData = {\n type: SelectedObjectType.Building,\n main_building_item: true,\n buildingFloors: true,\n };\n elementBuildingInstance.frustumCulled = false;\n elementBuildingInstance.receiveShadow = true;\n elementBuildingInstance.castShadow = true;\n // elementBuildingInstance.layers.set(1);\n\n return elementBuildingInstance;\n}\n","'use strict';\n\nimport { threeJsVariables } from '../../settings';\nimport { OutlinePass } from 'three/examples/jsm/postprocessing/OutlinePass';\nimport { LinearSRGBColorSpace, Vector2 } from 'three';\nimport { changeLangToCurrent } from '../components/langSwitcher/langSwitcher';\nimport {Switch} from \"../interfaces/switchers/Switch\";\nimport { Effect } from '../post-processing/Passes/Effect';\nimport {BaseElement} from \"../interfaces/BaseElement\";\n\nexport class BuildingOutline {\n static #outline;\n static #outlineBuildings = [];\n static #displayOption = null;\n static #switcher = null;\n #active = config.features.buildingOutline?.active || false;\n #checked = config.features.buildingOutline?.checked || false;\n #visibleColor = config.features.buildingOutline?.visibleColor || '#ffffff';\n #hiddenColor = config.features.buildingOutline?.hiddenColor || '#ffffff';\n #strength = config.features.buildingOutline?.strength || 3;\n\n constructor (name) {\n if (!this.#active)\n return;\n\n if (!BuildingOutline.#outline) {\n // BuildingOutline.#displayOption = createHtmlElement('','','div',['building-outline__container']);\n BuildingOutline.#displayOption = new BaseElement()\n .addClass('building-outline__container');\n // const option = createHtmlElement(BuildingOutline.#displayOption.DOMElement,'','div',['building-outline__option','display-option']);\n const option = new BaseElement()\n .addClass('building-outline__option','display-option')\n .appendTo(BuildingOutline.#displayOption.DOMElement);\n // const text = createHtmlElement(option.DOMElement, changeLangToCurrent('Building outline'),'span',['building-outline__text','language-string']);\n // text.setAttribute('data-dictionary', 'Building outline');\n new BaseElement('span')\n .addClass('building-outline__text','language-string')\n .innerHtml(changeLangToCurrent('Building outline'))\n .addAttribute('data-dictionary', 'Building outline')\n BuildingOutline.#switcher = new Switch(option.DOMElement);\n BuildingOutline.#switcher.checked = this.#checked;\n BuildingOutline.#switcher.listener = BuildingOutline.toggle;\n BuildingOutline.#outline = new BuildingOutlineEffect(BuildingOutline.#outlineBuildings,{\n strength: this.#strength,\n visibleColor: this.#visibleColor,\n hiddenColor: this.#hiddenColor\n });\n threeJsVariables.composer.addPass('buildingOutline',BuildingOutline.#outline);\n BuildingOutline.toggle();\n }\n\n const building = threeJsVariables.scene.getObjectByName(name);\n if (building)\n BuildingOutline.#outlineBuildings.push(building);\n }\n\n static addToDisplayOptions(container) {\n if (!BuildingOutline.#displayOption)\n return;\n\n container.appendChild(BuildingOutline.#displayOption.DOMElement);\n }\n\n static toggle(action) {\n if (BuildingOutline.#outline) {\n if (action instanceof Event) {\n BuildingOutline.#outline.active = action.target.checked;\n BuildingOutline.#switcher.checked = action.target.checked;\n } else {\n\n if (!BuildingOutline.#switcher.checkbox.checked) {\n BuildingOutline.#outline.active = false;\n } else {\n BuildingOutline.#outline.active = action;\n }\n }\n }\n }\n}\n\nclass BuildingOutlineEffect extends Effect{\n constructor (outlineArray,params = {}) {\n super();\n const renderSize = threeJsVariables.renderer.getSize(new Vector2());\n this.effect = new OutlinePass(renderSize,threeJsVariables.scene,threeJsVariables.perspectiveCamera,outlineArray);\n this.effect.edgeStrength = params.strength;\n this.effect.visibleEdgeColor.setStyle(params.visibleColor,LinearSRGBColorSpace);\n this.effect.hiddenEdgeColor.setStyle(params.hiddenColor,LinearSRGBColorSpace);\n this.effect.downSampleRatio = 2;\n }\n\n}\n","'use strict';\n\nimport { Group } from 'three';\nimport {isNumeric} from \"../../functions\";\nimport {projectMode} from \"../../settings\";\n\nexport class District {\n #sortedBuildings = [];\n #isOneFloorBuildings = [];\n\n constructor () {\n this.buildings = {};\n this.activeBuilding = null;\n }\n\n addOneMeshModel(model) {\n const group = new Group();\n group.name = model.name;\n\n group.position.set(model.parent.position.x, model.parent.position.y, model.parent.position.z);\n group.scale.set(model.parent.scale.x, model.parent.scale.y, model.parent.scale.z);\n group.rotation.set(model.parent.rotation.x, model.parent.rotation.y, model.parent.rotation.z);\n\n\n if (model.userData.groups) {\n model.geometry.groups.push(...model.userData.groups);\n }\n\n model.geometry.computeBoundsTree();\n model.layers.enable(1);\n group.add(model);\n\n return group;\n }\n\n addBuilding(name,building){\n this.buildings[name] = building;\n this.#sortedBuildings = Object.values(this.buildings).sort((prev,next) => {\n const prevLot = parseFloat(prev.info.buildingLot);\n const nextLot = parseFloat(next.info.buildingLot);\n if (!isNaN(prevLot) && !isNaN(nextLot)) {\n return prevLot - nextLot;\n } else {\n return prev.name.localeCompare(next.name)\n }\n });\n }\n\n activateBuilding(name){\n if (this.activeBuilding && this.activeBuilding.isActive){\n this.activeBuilding.deactivate();\n this.activeBuilding = null;\n }\n\n this.buildings[name].activate();\n this.activeBuilding = this.buildings[name];\n }\n\n deactivateBuilding(){\n if (this.activeBuilding && this.activeBuilding.isActive){\n this.activeBuilding.deactivate();\n this.activeBuilding = null;\n }\n }\n\n getActiveBuilding(){\n return this.activeBuilding;\n }\n\n getActiveBuildingAmountOfFloors() {\n return new Set(this.activeBuilding?.floorSliderNumbers).size || 0;\n }\n\n getDeactivatedBuildings(){\n return this.getBuildingsArray().filter(building => !building.isActive);\n }\n\n getBuilding(name){\n return this.buildings[name];\n }\n\n getBuildingsArray(){\n return this.#sortedBuildings;\n }\n\n getBuildingsInfoLength(){\n return this.getBuildingsArray()\n .map(building => Object.keys(building.info).length > 0)\n .filter(info => info === true).length;\n }\n \n isUsedBuilding(name) {\n const available = config.features.activeBuildings;\n if (!available)\n return true;\n \n return available.includes(name);\n }\n\n isOneFloorBuilding(engineId) {\n if (projectMode.LiteMode.isActive()) {\n if (this.#isOneFloorBuildings.length === 0) {\n for (const building in this.buildings) {\n const floors = new Set();\n this.buildings[building].apartments.forEach(apartment => {\n floors.add(apartment.userData.floor);\n });\n if (floors.size < 2) {\n const currentBuildingEngineId = this.buildings?.[building]?.info?.crm_data?.[0]?.buildingEngineId;\n currentBuildingEngineId && this.#isOneFloorBuildings.push(currentBuildingEngineId);\n }\n }\n\n if (this.#isOneFloorBuildings.length === 0)\n this.#isOneFloorBuildings.push('empty');\n }\n\n return this.#isOneFloorBuildings.includes(engineId);\n } else {\n return this.getActiveBuildingAmountOfFloors() <= 1;\n }\n }\n}\n","'use strict';\n\nimport { getUrlParam } from '../../functions';\nimport { getCommonAssets, getDictionary, getProp, getSettings, getSpecifications } from '../crm/crm-requests';\nimport { createOptionsCard } from './optionsCards';\nimport { setDataToApartment, setProjectSettings } from '../threejs/autoSelectionBoxes';\nimport { Buildings, projectMode, resourcesFolder, settingsData, threeJsVariables } from '../../settings';\nimport { BuildingWithoutModel } from '../building/Building';\nimport { Object3D, WebGLRenderer } from 'three';\nimport { getVars } from '../customStyles/customStyles';\nimport { getLordIconColors } from '../../lordicon';\nimport { setInitialHtmlDirection } from '../components/langSwitcher/langSwitcher';\nimport { Loader } from '../threejs/loader/Loader';\nimport { Cloudflare } from '../api/Cloudflare';\nimport { createThreeJsEnvironment } from '../threejs/threejs-components';\nimport { Vantages } from '../components/vantage/Vantage';\nimport { DreamsPreloader } from '../components/preloader/DreamsPreloader';\nimport { PrivacyAndTerms } from '../menu/PrivacyAndTerms';\nimport { BaseElement } from '../interfaces/BaseElement';\nimport { addPoweredLogo } from '../components/poweredLogo/poweredLogo';\n\nexport class OptionsCardViewer {\n\tstatic active = false;\n\n\tconstructor () {\n\t\tthis.propId = getUrlParam('card');\n\t}\n\n\tasync open() {\n\t\tif (!this.propId)\n\t\t\treturn new Promise(resolve => resolve());\n\n\t\tconst preloader = new DreamsPreloader(document.body)\n\t\t\t.absolute()\n\t\t\t.substrate()\n\t\t\t.blur();\n\n\t\tpreloader.container.addStyle('left',0);\n\t\tpreloader.container.addStyle('top',0);\n\t\tpreloader.container.addStyle('zIndex',10);\n\t\tpreloader.show();\n\n\t\tconst response = await getProp(this.propId);\n\n\t\tif (response.data.length === 0) {\n\t\t\tpreloader.remove();\n\t\t\treturn new Promise(resolve => resolve());\n\t\t}\n\n\t\tconst commonAssets = await getCommonAssets();\n\t\tsettingsData.commonAssets = commonAssets.data;\n\t\tconst settings = await getSettings();\n\t\tconst dictionary = await getDictionary();\n\t\tOptionsCardViewer.active = true;\n\n\t\tconst specifications = await getSpecifications();\n\t\tsettingsData.specifications = specifications.data;\n\n\t\tcreateThreeJsEnvironment();\n\n\t\tlet animateFn;\n\n\t\tfunction animate() {\n\t\t\tif (Vantages.isActive()) {\n\t\t\t\tVantages.render();\n\t\t\t}\n\t\t\tanimateFn = requestAnimationFrame(animate);\n\t\t}\n\n\t\tanimate();\n\n\t\tfunction showCard () {\n\t\t\tconst card = createOptionsCard({object: data, settings});\n\t\t\tcard.classList.add('separate-card');\n\n\t\t\tif (config.features.apartments.cardPrice === false) {\n\t\t\t\tconst priceBlock = card.querySelector('.options-card__price');\n\t\t\t\tpriceBlock && priceBlock.classList.add('hidden');\n\t\t\t}\n\n\t\t\tconst cardData = card.querySelector('.options-card__data');\n\t\t\tconst bottomContainer = new BaseElement()\n\t\t\t\t.addClass('separate-card__bottom-container')\n\t\t\t\t.appendTo(cardData)\n\t\t\t\t.DOMElement;\n\t\t\taddPoweredLogo(bottomContainer);\n\t\t\tnew PrivacyAndTerms({parent: bottomContainer});\n\t\t\tpreloader.remove();\n\t\t}\n\n\t\tconst loader = new Loader();\n\t\tconst draco = loader.dracoLoader;\n\t\tdraco.load(`${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/building/bundle.glb?v=${Cloudflare.version}`,(gltf) => {\n\t\t\tthreeJsVariables.bundleConfig = gltf.scene.userData.config;\n\t\t\tshowCard();\n\t\t},null,() => showCard());\n\n\t\tsetProjectSettings(settings,dictionary);\n\t\tgetVars(config.crmProjectSettings);\n\t\tgetLordIconColors();\n\t\tsetInitialHtmlDirection(config.crmProjectSettings);\n\n\t\tsettingsData.allCrmData = response.data;\n\t\tconst data = response.data[0];\n\t\tconst obj = new Object3D();\n\t\tobj.name = data.engineId;\n\t\tsetDataToApartment(obj,data);\n\t\tsettingsData.lastClickedFlat = obj;\n\n\t\tprojectMode.LiteMode = {\n\t\t\tisActive: () => false,\n\t\t\tresizeContainer: () => {}\n\t\t};\n\n\t\tconst allBuildings = config.crmProjectSettings.buildings;\n\t\tallBuildings.forEach(building => {\n\t\t\tconst buildingObject = new BuildingWithoutModel(building.buildingEngineId,settingsData.allCrmData,{data: config.crmProjectSettings});\n\t\t\tbuildingObject.apartments = [obj];\n\t\t\tbuildingObject.floorSliderNumbers = [data.floorNum, data.floorNum];\n\t\t\tBuildings.addBuilding(building.buildingEngineId,buildingObject);\n\t\t\tif (building.buildingEngineId === data.buildingEngineId) {\n\t\t\t\tBuildings.activateBuilding(building.buildingEngineId);\n\t\t\t}\n\t\t});\n\n\t\treturn new Promise(resolve => {});\n\t}\n}\n","'use strict';\n\n\nimport { BaseElement } from '../interfaces/BaseElement';\nimport {isMobile, settingsData, UIRoot} from '../../settings';\nimport { zoom } from '../../libs/directive';\nimport { ShareBtn } from '../components/share/Share';\nimport { ResizeObserver } from 'resize-observer';\nimport { getCurrentLangDirection } from '../components/langSwitcher/langSwitcher';\nimport { Drag } from '../interfaces/Drag';\nimport printJS from \"print-js\";\nimport { Cloudflare } from '../api/Cloudflare';\nimport {checkImageExists} from \"../../functions\";\n\n\nconst ICONS = {\n\tlineWidth: (size,index) => `\n\t\t\t\n\t\t\t`,\n\teraseSize: (size,index) => `\n\t\t\t\n\t\t\t`,\n\tfontSize: (size,index) => `\n\n`\n};\n\n\nexport class Paint {\n\tconstructor (url) {\n\t\tthis.container = new BaseElement()\n\t\t\t.addClass('paint')\n\t\t\t.appendTo(UIRoot)\n\t\t\t.DOMElement;\n\n\t\tnew BaseElement('button')\n\t\t\t.addClass('paint__close-btn','icon-close')\n\t\t\t.appendTo(this.container)\n\t\t\t.event('click',() => this.container.remove());\n\n\t\tthis.dashboard = new BaseElement()\n\t\t\t.addClass('paint__dashboard','zoom','disabled-drag')\n\t\t\t.event('wheel',this.#scale.bind(this))\n\t\t\t.event('touchend',this.#scale.bind(this))\n\t\t\t.appendTo(this.container)\n\t\t\t.DOMElement;\n\n\t\tthis.observer = new ResizeObserver((e) => this.#resize(e));\n\n\t\tthis.transformContainer = new BaseElement()\n\t\t\t.addClass('paint__dashboard-transform')\n\t\t\t.appendTo(this.dashboard)\n\t\t\t.DOMElement;\n\n\t\tthis.layers = new BaseElement()\n\t\t\t.addClass('paint__dashboard-layers')\n\t\t\t.appendTo(this.transformContainer)\n\t\t\t.DOMElement;\n\n\t\tthis.width = null;\n\t\tthis.height = null;\n\t\tthis.drawPanel = {};\n\t\tthis.aspect = {\n\t\t\timage: 1,\n\t\t\ttext: 1,\n\t\t\tscale: 1,\n\t\t\tdashboard: 1\n\t\t};\n\t\tthis.panel = null;\n\t\tthis.mode = null;\n\t\tthis.activeElement = null;\n\t\tthis.settings = {\n\t\t\tcolors: ['#000000','#ffffff','#ff0000','#00ff00','#0000ff','#f6ff00','#ff9500','#9c9c9c'],\n\t\t\tlineWidth: 10,\n\t\t\tfontSize: 64,\n\t\t\tcolor: '#0000ff',\n\t\t\teraseSize: 20,\n\t\t\tlineWidths: [5,10,15],\n\t\t\teraseSizes: [10,20,30],\n\t\t\tfontSizes: [32,64,128],\n\t\t\tshare: [\n\t\t\t\t{\n\t\t\t\t\t\"type\" : \"whatsapp\",\n\t\t\t\t\t\"icon\" : \"icon-whatsapp\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\" : \"telegram\",\n\t\t\t\t\t\"icon\" : \"icon-social-telegram\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\" : \"skype\",\n\t\t\t\t\t\"icon\" : \"icon-social-skype\"\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\t\tthis.canvas = {\n\t\t\tmain: null,\n\t\t\tdraw: null,\n\t\t\tmerge: null\n\t\t};\n\n\t\tthis.context = {\n\t\t\tmain: null,\n\t\t\tdraw: null\n\t\t};\n\n\t\tthis.image = new Image();\n\t\tthis.image.setAttribute('crossorigin', 'anonymous');\n\t\tthis.image.src = url;\n\t\tthis.name = getFileName(url);\n\t\tthis.image.addEventListener('load',() => {\n\t\t\tthis.width = this.image.width;\n\t\t\tthis.height = this.image.height;\n\t\t\tthis.createCanvas();\n\t\t\tthis.createDrawPanel();\n\t\t\tthis.createSavePanel();\n\t\t\tzoom();\n\t\t\tthis.observer.observe(this.dashboard);\n\t\t});\n\t}\n\n\tcreateCanvas() {\n\t\tthis.canvas.main = new BaseElement('canvas')\n\t\t\t.addClass('paint__canvas','paint__main-canvas')\n\t\t\t.appendTo(this.layers)\n\t\t\t.DOMElement;\n\n\t\tthis.canvas.draw = new BaseElement('canvas')\n\t\t\t.addClass('paint__canvas','paint__draw-canvas')\n\t\t\t.appendTo(this.layers)\n\t\t\t.DOMElement;\n\n\t\tthis.canvas.main.width = this.width;\n\t\tthis.canvas.main.height = this.height;\n\t\tthis.canvas.draw.width = this.width;\n\t\tthis.canvas.draw.height = this.height;\n\n\t\tthis.context.main = this.canvas.main.getContext('2d');\n\t\tthis.context.main.fillStyle = \"rgba(255, 255,255, 1)\";\n\t\tthis.context.main.fillRect(0, 0, this.width, this.height);\n\t\tthis.context.draw = this.canvas.draw.getContext('2d');\n\t\tthis.context.main.drawImage(this.image,0,0,this.width,this.height);\n\t}\n\n\tcreateDrawPanel() {\n\t\tthis.panel = new BaseElement()\n\t\t\t.addClass('paint__draw-panel')\n\t\t\t.event('click',this.#drawPanelHandler.bind(this))\n\t\t\t.appendTo(this.container)\n\t\t\t.DOMElement;\n\n\t\tconst wrapper = new BaseElement()\n\t\t\t.addClass('paint__draw-panel-wrapper')\n\t\t\t.event('scroll',this.#updateSettingsPositions.bind(this))\n\t\t\t.appendTo(this.panel)\n\t\t\t.DOMElement;\n\n\t\tthis.drawPanel.move = new Move(wrapper,this);\n\t\tthis.drawPanel.palette = new Palette(wrapper,this);\n\t\tthis.drawPanel.pencil = new Pencil(wrapper,this);\n\t\tif (!isMobile) {\n\t\t\tthis.drawPanel.text = new Text(wrapper,this);\n\t\t}\n\t\tthis.drawPanel.eraser = new Eraser(wrapper,this);\n\t\tthis.drawPanel.clear = new Clear(wrapper,this);\n\t\tthis.drawPanel.history = new History(wrapper,this);\n\n\t\tthis.drawPanel.pencil.active = true;\n\t\tthis.activeElement = this.drawPanel.pencil;\n\t}\n\n\tcreateSavePanel() {\n\t\tconst container = new BaseElement()\n\t\t\t.addClass('paint__save-panel')\n\t\t\t.appendTo(isMobile ? this.panel : this.container)\n\t\t\t.DOMElement;\n\n\t\tnew BaseElement()\n\t\t\t.addClass('paint__icon','icon-download')\n\t\t\t.event('click',this.#download.bind(this))\n\t\t\t.appendTo(container);\n\n\t\tnew BaseElement()\n\t\t\t.addClass('paint__icon','icon-share')\n\t\t\t.event('click',this.#share.bind(this))\n\t\t\t.appendTo(container);\n\n\t\t!isMobile && new BaseElement()\n\t\t\t.addClass('paint__icon','icon-print')\n\t\t\t.event('click',this.#print.bind(this))\n\t\t\t.appendTo(container);\n\t}\n\n\t#scale() {\n\t\tsetTimeout(() => {\n\t\t\tthis.aspect.scale = Number(this.transformContainer.getAttribute('data-scale'));\n\t\t\tthis.drawPanel.move.updateState();\n\t\t},0);\n\t}\n\n\t#resize(e) {\n\t\tconst dashboard = e[0].contentRect;\n\t\tthis.aspect.image = this.width / this.height;\n\t\tthis.aspect.dashboard = dashboard.width / dashboard.height;\n\n\t\tif (this.aspect.image > this.aspect.dashboard) {\n\t\t\tconst value = dashboard.height / (this.aspect.image / this.aspect.dashboard);\n\t\t\tthis.layers.style.height = value + 'px';\n\t\t\tthis.layers.style.width = '100%';\n\t\t\tthis.aspect.text = this.height / value;\n\t\t} else {\n\t\t\tconst value = dashboard.width / (this.aspect.dashboard / this.aspect.image);\n\t\t\tthis.layers.style.height = '100%';\n\t\t\tthis.layers.style.width = value + 'px';\n\t\t\tthis.aspect.text = this.width / value;\n\t\t}\n\t\tthis.#updateSettingsPositions();\n\t\tthis.#scale();\n\t}\n\n\t#updateSettingsPositions() {\n\t\tObject.values(this.drawPanel).forEach(element => {\n\t\t\tif (element.updateSettingsPosition) {\n\t\t\t\telement.updateSettingsPosition();\n\t\t\t}\n\t\t});\n\t}\n\n\tasync #download() {\n\t\tawait this.#mergeCanvases();\n\t\tconst link = document.createElement('a');\n\t\tlink.href = this.canvas.merge.toDataURL();\n\t\tlink.download = `${this.name ? this.name + '_modified' : 'paint'}.png`;\n\t\tlink.click();\n\t}\n\n\tasync #print() {\n\t\tawait this.#mergeCanvases();\n\t\tconst {cdnRepository,projectFolder} = config;\n\t\tconst logoUrl = `${cdnRepository}/${projectFolder}/resources/img/logo.png`;\n\t\tconst imageExists = await checkImageExists(logoUrl);\n\t\tconst logoUrlResized = imageExists ? Cloudflare.resize(logoUrl, { height: 100 }) : '';\n\t\t\n\t\tprintJS({\n\t\t\tprintable: this.canvas.merge.toDataURL(),\n\t\t\ttype: 'image',\n\t\t\theader: `

${config.features?.printHeader?.title || ''}

${imageExists ? `\"Logo\"` : ''}
`,\n\t\t\tstyle: '.printjs-custom-header { display: flex; flex-direction: row; justify-content: flex-end; align-items: center; gap: 20px; font-family: \"Arial\"; margin-bottom: 60px}'\n\t\t});\n\t}\n\n\t#mergeCanvases() {\n\t\treturn new Promise(async mainResolve => {\n\t\t\tthis.canvas.merge = new BaseElement('canvas').DOMElement;\n\t\t\tthis.canvas.merge.width = this.width;\n\t\t\tthis.canvas.merge.height = this.height;\n\t\t\tconst ctx = this.canvas.merge.getContext('2d');\n\n\t\t\tconst copyImage = (canvas) => {\n\t\t\t\treturn new Promise(resolve => {\n\t\t\t\t\tconst image = new Image();\n\t\t\t\t\timage.onload = () => {\n\t\t\t\t\t\tctx.drawImage(image,0,0,this.width,this.height);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t};\n\t\t\t\t\timage.src = canvas.toDataURL();\n\t\t\t\t})\n\t\t\t};\n\n\t\t\tawait copyImage(this.canvas.main);\n\t\t\tawait copyImage(this.canvas.draw);\n\t\t\tmainResolve();\n\t\t});\n\t}\n\n\tasync #share() {\n\t\tawait this.#mergeCanvases();\n\t\tconst response = await fetch(this.canvas.merge.toDataURL());\n\t\tconst blob = await response.blob();\n\n\t\tconst shareData = {\n\t\t\tfiles: [\n\t\t\t\tnew File([blob],`${this.name ? this.name + '_modified' : 'paint'}.png`,{\n\t\t\t\t\ttype: 'image/png',\n\t\t\t\t\tlastModified: new Date().getTime()\n\t\t\t\t})\n\t\t\t]\n\t\t};\n\n\t\tif (navigator.canShare && navigator.canShare(shareData)) {\n\t\t\tnavigator.share(shareData);\n\t\t}\n\n\t\t// const mediaContainer = new BaseElement()\n\t\t// \t.addClass('social-media','paint__share')\n\t\t// \t.appendTo(UIRoot)\n\t\t// \t.DOMElement;\n\t\t//\n\t\t// const content = new BaseElement()\n\t\t// \t.addClass('social-media__content')\n\t\t// \t.appendTo(mediaContainer)\n\t\t// \t.DOMElement;\n\t\t//\n\t\t// const closeBtn = new BaseElement('button')\n\t\t// \t.addClass('social-media__close-btn','icon-close')\n\t\t// \t.event('click',() => mediaContainer.remove())\n\t\t// \t.appendTo(mediaContainer);\n\t\t//\n\t\t//\n\t\t// this.settings.share.forEach(social => new ShareBtn(content,{\n\t\t// \ttype: social.type,\n\t\t// \turl: this.canvas.merge.toDataURL()\n\t\t// },social.icon));\n\t}\n\n\t#drawPanelHandler(e) {\n\t\tconst mode = e.target.getAttribute('data-mode');\n\t\tconst disabled = e.target.getAttribute('data-disabled');\n\t\tif (mode && !disabled) {\n\t\t\tif (this.activeElement) {\n\t\t\t\tif (this.activeElement === this.drawPanel[mode]) return;\n\t\t\t\tthis.activeElement.active = false;\n\t\t\t}\n\t\t\tthis.mode = mode;\n\t\t\tthis.drawPanel[mode].active = true;\n\t\t\tthis.activeElement = this.drawPanel[mode];\n\t\t\tthis.container.setAttribute('data-selected-mode',mode);\n\t\t}\n\t}\n\n}\n\nclass DrawElement {\n\tconstructor () {\n\t\tthis.enabled = false;\n\t}\n\n\tonChange() {\n\t\tif (this.enabled) {\n\t\t\tthis.btn.addClass('--active-mode');\n\t\t} else {\n\t\t\tthis.btn.removeClass('--active-mode');\n\t\t}\n\t}\n\n\tupdateSettingsPosition() {\n\t\tif (this.settings) {\n\t\t\tconst btnBounds = this.btn.DOMElement.getBoundingClientRect();\n\t\t\tconst panelBounds = this.scope.panel.getBoundingClientRect();\n\t\t\tconst settings = this.btn.DOMElement.querySelector('.paint__settings__container-wrapper');\n\t\t\tsettings.style.top = btnBounds.top - panelBounds.top + 'px';\n\t\t}\n\t}\n\n\tget active() {\n\t\treturn this.enabled;\n\t}\n\n\tset active(state) {\n\t\tthis.enabled = state;\n\t\tthis.onChange();\n\t}\n}\n\nclass Move extends DrawElement{\n\tconstructor (parent,scope) {\n\t\tsuper();\n\t\tthis.scope = scope;\n\t\tthis.disabled = true;\n\t\tthis.btn = new BaseElement()\n\t\t\t.addClass('paint__icon','icon-hand','paint--disabled')\n\t\t\t.addAttribute('data-mode','move')\n\t\t\t.appendTo(parent);\n\t}\n\n\tupdateState() {\n\t\tif (this.scope.aspect.scale > 1) {\n\t\t\tthis.btn.removeClass('paint--disabled');\n\t\t\tthis.btn.deleteAttribute('data-disabled');\n\t\t\tthis.disabled = false;\n\t\t} else {\n\t\t\tthis.btn.addClass('paint--disabled');\n\t\t\tthis.btn.addAttribute('data-disabled',true);\n\t\t\tthis.disabled = true;\n\t\t\tif (this.active) {\n\t\t\t\tthis.active = false;\n\t\t\t\tthis.scope.activeElement = null;\n\t\t\t}\n\t\t}\n\t}\n\n\tonChange () {\n\t\tsuper.onChange();\n\t\tif (this.active && !this.disabled) {\n\t\t\tthis.scope.dashboard.classList.remove('disabled-drag');\n\t\t} else {\n\t\t\tthis.scope.dashboard.classList.add('disabled-drag');\n\t\t}\n\t}\n\n}\n\nclass Palette extends DrawElement {\n\tconstructor (parent,scope) {\n\t\tsuper();\n\t\tthis.scope = scope;\n\t\tthis.btn = new BaseElement()\n\t\t\t.addClass('paint__icon','icon-palette','paint__palette')\n\t\t\t.event('click',this.openPalette.bind(this))\n\t\t\t//.addAttribute('data-mode','palette')\n\t\t\t.appendTo(parent);\n\n\t\tthis.selectedColorHelper = new BaseElement()\n\t\t\t.addClass('paint__palette__helper')\n\t\t\t.appendTo(this.btn.DOMElement);\n\n\t\tconst colors = new BaseElement()\n\t\t\t.addClass('paint__settings__container-wrapper')\n\t\t\t.appendTo(this.btn.DOMElement)\n\t\t\t.DOMElement;\n\n\t\tthis.settings = new BaseElement()\n\t\t\t.addClass('paint__settings__container','hidden')\n\t\t\t.appendTo(colors)\n\t\t\t.event('click',this.#colorSelectHandler.bind(this));\n\n\t\tthis.scope.settings.colors.forEach(color => {\n\t\t\tnew BaseElement()\n\t\t\t\t.addClass('paint__palette__color')\n\t\t\t\t.addAttribute('data-color',color)\n\t\t\t\t.addStyle('background',color)\n\t\t\t\t.appendTo(this.settings.DOMElement)\n\n\t\t\tif (color === this.scope.settings.color) {\n\t\t\t\tthis.selectedColorHelper.addStyle('background',color);\n\t\t\t}\n\t\t});\n\n\t\tthis.scope.container.addEventListener('click',(e) => {\n\t\t\tif (!this.settings.DOMElement.classList.contains('hidden')) {\n\t\t\t\tthis.openPalette(e);\n\t\t\t}\n\t\t});\n\n\t}\n\n\t#colorSelectHandler(e) {\n\t\tconst color = e.target.getAttribute('data-color');\n\t\tif (color) {\n\t\t\tthis.selectedColorHelper.addStyle('background',color);\n\t\t\tthis.scope.settings.color = color;\n\t\t\tthis.scope.drawPanel.text?.updateViewFontSize();\n\t\t}\n\t}\n\n\topenPalette(e) {\n\t\te.stopPropagation();\n\t\tthis.updateSettingsPosition();\n\t\tthis.settings.toggleClass('hidden');\n\t}\n}\n\nclass Pencil extends DrawElement {\n\tconstructor (parent,scope) {\n\t\tsuper();\n\t\tthis.scope = scope;\n\t\tthis.btn = new BaseElement()\n\t\t\t.addClass('paint__icon','icon-pencil')\n\t\t\t.event('click',this.#openSettings.bind(this))\n\t\t\t.addAttribute('data-mode','pencil')\n\t\t\t.appendTo(parent);\n\n\t\tconst data = createSettings(\n\t\t\t'pencil',\n\t\t\tthis.scope.settings.lineWidths,\n\t\t\tthis.scope.settings.lineWidth,\n\t\t\tICONS.lineWidth,\n\t\t\t(value) => {\n\t\t\t\tthis.scope.settings.lineWidth = value;\n\t\t\t\tthis.#closeSettings();\n\t\t\t}\n\t\t\t);\n\n\t\tthis.btn.appendElement(data.wrapper);\n\t\tthis.settings = data.settings;\n\n\n\t\tthis.drawHandler = (e) => this.#draw(e);\n\n\t\tthis.coord = {\n\t\t\tx: 0,\n\t\t\ty: 0\n\t\t};\n\t\tthis.bounding = null;\n\n\t\tthis.scope.canvas.draw.addEventListener('mousedown',this.#startDraw.bind(this));\n\t\tthis.scope.canvas.draw.addEventListener('touchstart',this.#startDraw.bind(this));\n\t\tthis.scope.canvas.draw.addEventListener('mouseup',this.#stopDraw.bind(this));\n\t\tthis.scope.canvas.draw.addEventListener('touchend',this.#stopDraw.bind(this));\n\t}\n\n\t#openSettings() {\n\t\tthis.updateSettingsPosition();\n\t\tthis.settings.removeClass('hidden');\n\t}\n\n\tonChange () {\n\t\tsuper.onChange();\n\t\tif (!this.active) {\n\t\t\tthis.#closeSettings();\n\t\t}\n\t}\n\n\t#closeSettings() {\n\t\tthis.settings.addClass('hidden');\n\t}\n\n\t#startDraw(e) {\n\t\tthis.#closeSettings();\n\t\tif (this.active) {\n\t\t\tif (e.touches && e.touches.length === 2) return;\n\t\t\tthis.scope.canvas.draw.addEventListener('mousemove',this.drawHandler);\n\t\t\tthis.scope.canvas.draw.addEventListener('touchmove',this.drawHandler);\n\t\t\tthis.#reposition(e);\n\t\t\tthis.scope.drawPanel.history.execute(new CanvasDrawCommand(this.scope.canvas.draw,this.scope.context.draw));\n\t\t}\n\t}\n\n\t#draw(e) {\n\t\tif (e.touches && e.touches.length === 2) return;\n\t\tthis.scope.context.draw.beginPath();\n\t\tthis.scope.context.draw.lineWidth = this.scope.settings.lineWidth;\n\t\tthis.scope.context.draw.lineCap = \"round\";\n\t\tthis.scope.context.draw.strokeStyle = this.scope.settings.color;\n\t\tthis.scope.context.draw.moveTo(this.coord.x, this.coord.y);\n\t\tthis.#reposition(e);\n\t\tthis.scope.context.draw.lineTo(this.coord.x, this.coord.y);\n\t\tthis.scope.context.draw.stroke();\n\t}\n\n\t#stopDraw() {\n\t\tthis.scope.canvas.draw.removeEventListener('mousemove',this.drawHandler);\n\t\tthis.scope.canvas.draw.removeEventListener('touchmove',this.drawHandler);\n\t}\n\n\t#reposition (e) {\n\t\tconst x = e.touches ? e.touches[0].clientX : e.clientX;\n\t\tconst y = e.touches ? e.touches[0].clientY : e.clientY;\n\t\tthis.bounding = this.scope.canvas.draw.getBoundingClientRect();\n\t\tthis.coord.x = (x - this.bounding.left) / this.bounding.width * this.scope.width;\n\t\tthis.coord.y = (y - this.bounding.top) / this.bounding.height * this.scope.height;\n\t}\n}\n\nclass Text extends DrawElement {\n\tconstructor (parent,scope) {\n\t\tsuper();\n\t\tthis.scope = scope;\n\t\tthis.btn = new BaseElement()\n\t\t\t.addClass('paint__icon','icon-text-paragraph')\n\t\t\t.event('click',this.#openSettings.bind(this))\n\t\t\t.addAttribute('data-mode','text')\n\t\t\t.appendTo(parent);\n\n\t\tthis.edit = false;\n\t\tthis.textContainer = new BaseElement()\n\t\t\t.addClass('paint__text-block')\n\t\t\t.DOMElement;\n\t\tconst header = new BaseElement()\n\t\t\t.addClass('paint__text-block__header')\n\t\t\t.appendTo(this.textContainer)\n\t\t\t.DOMElement;\n\t\tnew BaseElement('button')\n\t\t\t.addClass('paint__text-btn','paint__save-btn','icon-check-mark')\n\t\t\t.event('pointerdown',this.drawText.bind(this))\n\t\t\t.appendTo(header);\n\t\tnew BaseElement('button')\n\t\t\t.addClass('paint__text-btn','paint__cancel-btn','icon-close')\n\t\t\t.event('pointerdown',this.removeText.bind(this))\n\t\t\t.appendTo(header);\n\t\tthis.textArea = new BaseElement('textarea')\n\t\t\t.addStyle('font-family','Arial')\n\t\t\t.addClass('paint__text-area')\n\t\t\t.appendTo(this.textContainer)\n\t\t\t.DOMElement;\n\n\t\tthis.textResize = new BaseElement()\n\t\t\t.addClass('paint__text-resize')\n\t\t\t.appendTo(this.textContainer)\n\t\t\t.event('mousedown',this.#resizeStart.bind(this))\n\t\t\t.event('mouseup',this.#resizeEnd.bind(this))\n\t\t\t.event('touchstart',this.#resizeStart.bind(this))\n\t\t\t.event('touchend',this.#resizeEnd.bind(this));\n\n\t\tconst data = createSettings(\n\t\t\t'fontSize',\n\t\t\tthis.scope.settings.fontSizes,\n\t\t\tthis.scope.settings.fontSize,\n\t\t\tICONS.fontSize,\n\t\t\t(value) => {\n\t\t\t\tthis.scope.settings.fontSize = value;\n\t\t\t\tthis.updateViewFontSize();\n\t\t\t\tthis.#closeSettings();\n\t\t\t}\n\t\t);\n\n\t\tthis.resizeMoveHandler = (e) => this.#resizeMove(e);\n\t\tthis.btn.appendElement(data.wrapper);\n\t\tthis.settings = data.settings;\n\n\t\tthis.coord = {\n\t\t\tx: 0,\n\t\t\ty: 0\n\t\t};\n\n\t\tthis.resizeData = {\n\t\t\tstart: {},\n\t\t\tend: {}\n\t\t};\n\n\t\tthis.drag = new Drag(this.textContainer, {\n\t\t\tupdateElementPositionAfterDragEnd: false,\n\t\t\ttouchSupport: true\n\t\t});\n\t\tthis.drag.onDragStart = (e) => this.#dragStart(e);\n\t\tthis.drag.onDragEnd = (e) => this.#dragOver(e);\n\n\t\tthis.scope.canvas.draw.addEventListener('mousedown',this.#startPrint.bind(this));\n\t\tthis.scope.canvas.draw.addEventListener('touchstart',this.#startPrint.bind(this));\n\t}\n\n\t#resizeEnd() {\n\t\tdocument.removeEventListener('mousemove',this.resizeMoveHandler.bind(this));\n\t\tdocument.removeEventListener('touchmove',this.resizeMoveHandler.bind(this));\n\t\tthis.resizeData = {\n\t\t\tstart: {},\n\t\t\tend: {}\n\t\t};\n\t}\n\n\t#resizeStart(e) {\n\t\te.stopPropagation();\n\t\tthis.resizeData.start.x = e.touches ? e.touches[0].clientX : e.clientX;\n\t\tthis.resizeData.start.y = e.touches ? e.touches[0].clientY : e.clientY;\n\t\tconst bounds = this.textArea.getBoundingClientRect();\n\t\tthis.resizeData.start.width = bounds.width;\n\t\tthis.resizeData.start.height = bounds.height;\n\t\tdocument.addEventListener('mousemove',this.resizeMoveHandler.bind(this));\n\t\tdocument.addEventListener('touchmove',this.resizeMoveHandler.bind(this));\n\t}\n\n\t#resizeMove(e) {\n\t\tthis.resizeData.end.x = e.touches ? e.touches[0].clientX : e.clientX;\n\t\tthis.resizeData.end.y = e.touches ? e.touches[0].clientY : e.clientY;\n\t\tlet x = null;\n\t\tif (getCurrentLangDirection() === 'rtl') {\n\t\t\tx = this.resizeData.start.width - this.resizeData.end.x + this.resizeData.start.x;\n\t\t} else {\n\t\t\tx = this.resizeData.start.width + this.resizeData.end.x - this.resizeData.start.x;\n\t\t}\n\t\tconst y = this.resizeData.start.height + this.resizeData.end.y - this.resizeData.start.y;\n\t\tthis.textArea.style.width = x + 'px';\n\t\tthis.textArea.style.height = y + 'px';\n\t}\n\n\t#dragStart(e) {\n\t\tconst bounds = this.textContainer.getBoundingClientRect();\n\t\tconst x = e.touches ? e.touches[0].clientX : e.clientX;\n\t\tconst y = e.touches ? e.touches[0].clientY : e.clientY;\n\t\tthis.dragData = {\n\t\t\tx: x - bounds.x,\n\t\t\ty: y - bounds.y,\n\t\t\twidth: bounds.width\n\t\t};\n\t}\n\n\t#dragOver(e) {\n\t\tconst x = e.touches ? e.changedTouches[0].clientX : e.clientX;\n\t\tconst y = e.touches ? e.changedTouches[0].clientY : e.clientY;\n\t\tconst dir = getCurrentLangDirection();\n\t\tconst evt = {\n\t\t\tclientX: dir === 'rtl' ? (x - this.dragData.x + this.dragData.width) : x - this.dragData.x,\n\t\t\tclientY: y - this.dragData.y\n\t\t};\n\t\tthis.#reposition(evt);\n\t}\n\n\t#openSettings() {\n\t\tthis.updateSettingsPosition();\n\t\tthis.settings.removeClass('hidden');\n\t}\n\n\t#closeSettings() {\n\t\tthis.settings.addClass('hidden');\n\t}\n\n\tonChange () {\n\t\tsuper.onChange();\n\t\tif (this.edit) {\n\t\t\tthis.removeText();\n\t\t}\n\t\tif (!this.active) {\n\t\t\tthis.#closeSettings();\n\t\t}\n\t}\n\n\tdrawText() {\n\t\tconst text = this.textArea.value;\n\t\tthis.removeText();\n\t\tthis.scope.drawPanel.history.execute(new CanvasDrawCommand(this.scope.canvas.draw,this.scope.context.draw));\n\t\tthis.wrapText(text,this.coord.x,this.coord.y + this.scope.settings.fontSize);\n\t}\n\n\tremoveText() {\n\t\tthis.textContainer.remove();\n\t\tthis.textArea.value = '';\n\t\tthis.edit = false;\n\t\tthis.scope.dashboard.classList.remove('disabled-zoom');\n\t}\n\n\tupdateViewFontSize() {\n\t\tif (this.active) {\n\t\t\tthis.textArea.style.fontSize = this.scope.settings.fontSize / this.scope.aspect.text * this.scope.aspect.scale + 'px';\n\t\t\tthis.textArea.style.color = this.scope.settings.color;\n\t\t\tthis.#clampTextarea();\n\t\t\tthis.textArea.focus();\n\t\t}\n\t}\n\n\t#startPrint(e) {\n\t\tthis.#closeSettings();\n\t\tif (this.active) {\n\t\t\tif (this.edit) {\n\t\t\t\tthis.drawText();\n\t\t\t}\n\t\t\tif (e.touches && e.touches.length === 2) return;\n\t\t\tthis.scope.dashboard.classList.add('disabled-zoom');\n\t\t\tthis.textContainer.style.transform = '';\n\t\t\tthis.drag.xOffset = 0;\n\t\t\tthis.drag.yOffset = 0;\n\t\t\tconst x = e.touches ? e.touches[0].clientX : e.clientX;\n\t\t\tconst y = e.touches ? e.touches[0].clientY : e.clientY;\n\t\t\tthis.#reposition(e);\n\n\t\t\tif (getCurrentLangDirection() === 'rtl') {\n\t\t\t\tthis.textContainer.style.right = window.innerWidth - x + 'px';\n\t\t\t} else {\n\t\t\t\tthis.textContainer.style.left = x + 'px';\n\t\t\t}\n\t\t\tthis.textContainer.style.top = y + 'px';\n\t\t\tthis.scope.container.appendChild(this.textContainer);\n\t\t\tthis.textArea.focus();\n\t\t\tthis.edit = true;\n\t\t\tthis.updateViewFontSize();\n\t\t}\n\t}\n\n\t#clampTextarea() {\n\t\tconst bounds = this.textArea.getBoundingClientRect();\n\t\tif (bounds.x + bounds.width > window.innerWidth) {\n\t\t\tthis.textArea.style.width = (window.innerWidth - bounds.x) * 0.85 + 'px';\n\t\t}\n\t}\n\n\t#reposition (e) {\n\t\tconst x = e.touches ? e.touches[0].clientX : e.clientX;\n\t\tconst y = e.touches ? e.touches[0].clientY : e.clientY;\n\t\tthis.bounding = this.scope.canvas.draw.getBoundingClientRect();\n\t\tthis.coord.x = (x - this.bounding.left) / this.bounding.width * this.scope.width;\n\t\tthis.coord.y = (y - this.bounding.top) / this.bounding.height * this.scope.height;\n\t}\n\n\twrapText(text, x, y) {\n\t\tthis.scope.context.draw.font = `${this.scope.settings.fontSize}px Arial`;\n\t\tthis.scope.context.draw.fillStyle = `${this.scope.settings.color}`;\n\t\tthis.scope.context.draw.direction = getCurrentLangDirection();\n\t\tconst lines = text.split(\"\\n\");\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tthis.scope.context.draw.fillText(lines[i], x, y);\n\t\t\ty += this.scope.settings.fontSize;\n\t\t}\n\t}\n}\n\nclass Eraser extends DrawElement {\n\tconstructor (parent,scope) {\n\t\tsuper();\n\t\tthis.scope = scope;\n\t\tthis.btn = new BaseElement()\n\t\t\t.addClass('paint__icon','icon-erase')\n\t\t\t.event('click',this.#openSettings.bind(this))\n\t\t\t.addAttribute('data-mode','eraser')\n\t\t\t.appendTo(parent);\n\n\t\tthis.canvas = new BaseElement('canvas')\n\t\t\t.addClass('paint__canvas','paint__eraseHelper')\n\t\t\t.DOMElement;\n\t\tthis.canvas.width = this.scope.width;\n\t\tthis.canvas.height = this.scope.height;\n\t\tthis.canvas.style.pointerEvents = 'none';\n\t\tthis.canvas.style.zIndex = 10;\n\n\t\tthis.ctx = this.canvas.getContext('2d');\n\n\t\tconst data = createSettings(\n\t\t\t'erase',\n\t\t\tthis.scope.settings.eraseSizes,\n\t\t\tthis.scope.settings.eraseSize,\n\t\t\tICONS.eraseSize,\n\t\t\t(value) => {\n\t\t\t\tthis.scope.settings.eraseSize = value;\n\t\t\t\tthis.#closeSettings();\n\t\t\t}\n\t\t);\n\n\t\tthis.btn.appendElement(data.wrapper);\n\t\tthis.settings = data.settings;\n\n\t\tthis.eraseHandler = (e) => this.#erase(e);\n\t\tthis.eraseHelperHandler = (e) => this.#updateHelper(e);\n\n\t\tthis.coord = {\n\t\t\tx: 0,\n\t\t\ty: 0\n\t\t};\n\t\tthis.bounding = null;\n\n\t\tthis.scope.canvas.draw.addEventListener('mousedown',this.#startErase.bind(this));\n\t\tthis.scope.canvas.draw.addEventListener('touchstart',this.#startErase.bind(this));\n\t\tthis.scope.canvas.draw.addEventListener('mouseup',this.#stopErase.bind(this));\n\t\tthis.scope.canvas.draw.addEventListener('touchend',this.#stopErase.bind(this));\n\t}\n\n\t#openSettings() {\n\t\tthis.updateSettingsPosition();\n\t\tthis.settings.removeClass('hidden');\n\t}\n\n\t#closeSettings() {\n\t\tthis.settings.addClass('hidden');\n\t}\n\n\tonChange () {\n\t\tsuper.onChange();\n\t\tif (!this.active) {\n\t\t\tthis.#closeSettings();\n\t\t}\n\t}\n\n\t#updateHelper(e) {\n\t\tthis.ctx.clearRect(0,0,this.scope.width,this.scope.height);\n\t\tthis.#reposition(e);\n\t\tthis.ctx.beginPath();\n\t\tthis.ctx.arc(this.coord.x, this.coord.y, this.scope.settings.eraseSize, 0, 2 * Math.PI);\n\t\tthis.ctx.stroke();\n\t}\n\n\t#startErase(e) {\n\t\tthis.#closeSettings();\n\t\tif (this.active) {\n\t\t\tif (e.touches && e.touches.length === 2) return;\n\t\t\tthis.scope.canvas.draw.addEventListener('mousemove',this.eraseHandler);\n\t\t\tthis.scope.canvas.draw.addEventListener('touchmove',this.eraseHandler);\n\t\t\tthis.#reposition(e);\n\t\t\tthis.scope.drawPanel.history.execute(new CanvasDrawCommand(this.scope.canvas.draw,this.scope.context.draw));\n\t\t\tthis.#erase(e);\n\t\t}\n\t}\n\n\t#erase(e) {\n\t\tif (e.touches && e.touches.length === 2) return;\n\t\tthis.scope.context.draw.save();\n\t\tthis.scope.context.draw.beginPath();\n\t\tthis.scope.context.draw.arc(this.coord.x, this.coord.y, this.scope.settings.eraseSize, 0, 2*Math.PI, true);\n\t\tthis.scope.context.draw.clip();\n\t\tthis.scope.context.draw.clearRect(this.coord.x - this.scope.settings.eraseSize,this.coord.y-this.scope.settings.eraseSize,this.scope.settings.eraseSize*2,this.scope.settings.eraseSize*2);\n\t\tthis.scope.context.draw.restore();\n\t\tthis.#reposition(e);\n\t}\n\n\t#stopErase() {\n\t\tthis.scope.canvas.draw.removeEventListener('mousemove',this.eraseHandler);\n\t\tthis.scope.canvas.draw.removeEventListener('touchmove',this.eraseHandler);\n\t}\n\n\t#reposition (e) {\n\t\tconst x = e.touches ? e.touches[0].clientX : e.clientX;\n\t\tconst y = e.touches ? e.touches[0].clientY : e.clientY;\n\t\tthis.bounding = this.scope.canvas.draw.getBoundingClientRect();\n\t\tthis.coord.x = (x - this.bounding.left) / this.bounding.width * this.scope.width;\n\t\tthis.coord.y = (y - this.bounding.top) / this.bounding.height * this.scope.height;\n\t}\n}\n\nclass Clear extends DrawElement{\n\tconstructor (parent,scope) {\n\t\tsuper();\n\t\tthis.scope = scope;\n\t\tthis.btn = new BaseElement()\n\t\t\t.addClass('paint__icon','icon-trash-can')\n\t\t\t.event('click',this.#clearHandler.bind(this))\n\t\t\t.appendTo(parent);\n\t}\n\n\t#clearHandler() {\n\t\tif (window.confirm('Do you really want to clear?')) {\n\t\t\tthis.scope.drawPanel.history.execute(new CanvasDrawCommand(this.scope.canvas.draw,this.scope.context.draw));\n\t\t\tthis.scope.context.draw.clearRect(0,0,this.scope.width,this.scope.height);\n\t\t}\n\t}\n\n}\n\nclass History {\n\tconstructor (parent,scope) {\n\t\tthis.scope = scope;\n\t\tthis.btn = new BaseElement()\n\t\t\t.addClass('paint__icon','icon-back')\n\t\t\t.event('click',this.undo.bind(this))\n\t\t\t.appendTo(parent);\n\n\t\tthis.undos = [];\n\t\tthis.limit = 10;\n\t}\n\n\texecute(cmd) {\n\t\tif (this.undos.length === this.limit) {\n\t\t\tthis.undos = this.undos.splice(1);\n\t\t}\n\t\tthis.undos.push( cmd );\n\t\tcmd.execute();\n\t}\n\n\tundo() {\n\t\tlet cmd = null;\n\n\t\tif (this.undos.length > 0) {\n\t\t\tcmd = this.undos.pop();\n\t\t}\n\n\t\tif (cmd) {\n\t\t\tcmd.undo();\n\t\t}\n\n\t\treturn cmd;\n\t}\n}\n\nclass CanvasDrawCommand {\n\tconstructor (canvas,ctx) {\n\t\tthis.canvas = canvas;\n\t\tthis.width = canvas.width;\n\t\tthis.height = canvas.height;\n\t\tthis.ctx = ctx;\n\t\tthis.data = null;\n\t}\n\n\texecute() {\n\t\tthis.data = this.canvas.toDataURL();\n\t}\n\n\tundo() {\n\t\tconst img = new Image();\n\t\timg.onload = () => {\n\t\t\tthis.ctx.clearRect(0,0,this.width,this.height);\n\t\t\tthis.ctx.drawImage(img,0,0,this.width,this.height);\n\t\t};\n\t\timg.src = this.data;\n\t}\n\n}\n\nfunction createSettings (key,elements,defaultValue,iconFunction,callback) {\n\tconst wrapper = new BaseElement()\n\t\t.addClass('paint__settings__container-wrapper')\n\t\t.DOMElement;\n\n\tconst settings = new BaseElement()\n\t\t.addClass('paint__settings__container','hidden')\n\t\t.appendTo(wrapper);\n\n\telements.forEach((size,index) => {\n\t\tconst input = new BaseElement('input')\n\t\t\t.addAttribute('id',`${key}-${size}`)\n\t\t\t.addClass('paint__settings-input')\n\t\t\t.addAttribute('type','radio')\n\t\t\t.addAttribute('name',key)\n\t\t\t.addAttribute('value',size)\n\t\t\t.event('change',(e) => callback(Number(e.target.value)))\n\t\t\t.appendTo(settings.DOMElement);\n\n\t\tif (size === defaultValue) {\n\t\t\tinput.addAttribute('checked',true)\n\t\t}\n\n\t\tnew BaseElement('label')\n\t\t\t.addClass('paint__settings-label')\n\t\t\t.addAttribute('for',`${key}-${size}`)\n\t\t\t.innerHtml(iconFunction(size,index))\n\t\t\t.appendTo(settings.DOMElement)\n\t\t\t.DOMElement;\n\n\t});\n\n\treturn {wrapper,settings};\n}\n\n\nfunction getFileName(url) {\n\tconst uri = new URL(url);\n\tconst splited = uri.pathname.split('/');\n\tconst file = splited.find(name => name.match(/\\./g));\n\treturn file.split('.')[0];\n}\n","'use strict';\n\nimport { BaseElement } from '../interfaces/BaseElement';\nimport { settingsData } from '../../settings';\nimport { findSelectionAndCrmData, numberWithCommas } from '../../functions';\nimport { CardTypes } from '../../common';\nimport {changeLangToCurrent, getCurrentLang} from '../components/langSwitcher/langSwitcher';\n\nconst DEFAULT_SETTINGS = {\n price2: false,\n salePrice: true,\n rentPrice: false\n};\n\nexport class Price {\n constructor () {\n const prices = config.features.apartments.price;\n if (prices) {\n this.params = prices;\n } else {\n this.params = DEFAULT_SETTINGS;\n }\n\n this.show = Boolean((config.property.settings.displayPrice === 'show' ||\n config.property.settings.displayPrice === 'button' ||\n settingsData.isConferenceHost) && this.#priceIsPresentInCRM());\n\n this.currency = config.crmProjectSettings.localization.currencyLabel;\n this.priceButton = config.property.settings.displayPrice === 'button';\n this.items = {};\n }\n\n #priceIsPresentInCRM() {\n let isPricePresent = false;\n\n for (const priceType in this.params) {\n if (!this.params[priceType]) continue;\n\n isPricePresent = settingsData.allCrmData.some((item) => {\n return item[priceType] > 0;\n });\n\n }\n\n return isPricePresent;\n }\n\n addBlock(parent) {\n this.parent = parent;\n this.container = new BaseElement()\n .addClass('price')\n .appendTo(this.parent)\n .DOMElement;\n this.wrapper = new BaseElement()\n .addClass('price__wrapper')\n .appendTo(this.container)\n .DOMElement;\n\n Object.entries(this.params).forEach(([priceType,enabled]) => {\n if (enabled) {\n const item = Price.createPriceItem(this.wrapper,priceType);\n const itemDom = item.DOMElement;\n if (priceType === 'price2') {\n new BaseElement('span')\n .addClass('language-string','price-type','price2Title')\n .addAttribute('data-dictionary','price2Title')\n .innerHtml(changeLangToCurrent('price2Title'))\n .appendTo(itemDom);\n }\n\n const wrapper = new BaseElement()\n .addClass('card__price-wrapper')\n .appendTo(itemDom);\n const price = new BaseElement('span')\n .addClass( 'card__price-value', 'translate-number', 'price')\n .appendTo(wrapper.DOMElement);\n const currency = new BaseElement('span')\n .addClass( 'card__price-currency', 'language-string')\n .addAttribute('data-dictionary', this.currency)\n .innerHtml(changeLangToCurrent(this.currency))\n .appendTo(wrapper.DOMElement);\n\n const priceLabelData = config.crmProjectSettings.property.settings.priceLabel;\n if (priceLabelData['en'] === '') {\n this.items[priceType] = {\n item,\n price,\n currency\n }\n } else {\n const label = new BaseElement('span')\n .addClass('price-label', 'language-string', 'hidden')\n .innerHtml(priceLabelData[getCurrentLang()])\n .appendTo(this.wrapper);\n for (const key in priceLabelData) {\n label.addAttribute(`data-lang-${key}`, priceLabelData[key])\n }\n\n this.items[priceType] = {\n item,\n price,\n currency,\n label\n }\n }\n }\n });\n\n this.addPriceButton(parent);\n\n return this;\n }\n\n setPrice(crmOrEngineID) {\n if (!this.parent || !this.container) {\n console.error('Price error: Add price block first');\n return this;\n }\n\n const data = typeof crmOrEngineID === 'string' ? findSelectionAndCrmData(crmOrEngineID).crmDataOfFlat : crmOrEngineID;\n let cardType = null;\n let card = null;\n let element = null;\n\n if (this.parent.classList.contains('flat-tooltip__price-value')) {\n card = this.parent.closest('.flat-tooltip');\n cardType = 'flat-tooltip';\n } else if (this.parent.classList.contains('similar-card__price')) {\n card = this.parent.closest('.similar-card');\n cardType = CardTypes.Similar;\n } else if (this.parent.classList.contains('search__additional-content')) {\n cardType = 'search-item';\n } else if (this.parent.classList.contains('apartment-card__price')) {\n const elementWithTranslate = this.parent.querySelector('.translate-number');\n elementWithTranslate && elementWithTranslate.classList.remove('translate-number');\n cardType = 'mobile-item';\n } else if (this.parent.classList.contains('cylinder-building-label__item')) {\n cardType = 'cylinder-label';\n } else {\n card = this.parent.closest('.card');\n cardType = card.classList.contains(`${CardTypes.Options}-card`) ? CardTypes.Options : CardTypes.Unit;\n this.container.classList.add(`${cardType}-card__price`,'card__price');\n }\n\n if (data.status === 'Available' && this.showPrice) {\n const prices = this.getPrices(data);\n Object.keys(this.items).forEach(priceType => {\n if (prices[priceType]) {\n element = this.items[priceType];\n const priceValue = Price.prettier(prices[priceType]);\n if (Boolean(priceValue)) {\n if (card)\n card.classList.remove('unavailable');\n element.item\n .removeClass('unavailable')\n .addClass('ready-to-show');\n\n this.itemVisibility(priceType,'show');\n\n if (prices['price2'] && priceType !== 'price2') {\n element.item.addClass('old-price');\n } else {\n element.item.removeClass('old-price');\n }\n\n element.price\n .addClass(`${cardType}-card__price-value`)\n .removeClass('language-string')\n .deleteAttribute('data-dictionary')\n .innerHtml(priceValue);\n\n element.currency\n .addAttribute('data-dictionary',this.currency)\n .addClass('language-string')\n .innerHtml(changeLangToCurrent(this.currency));\n\n } else {\n this.itemVisibility(priceType,'hide');\n element.item\n .removeClass('ready-to-show');\n }\n } else {\n element = this.items[priceType];\n element.item\n .removeClass('ready-to-show');\n this.itemVisibility(priceType,'hide');\n }\n });\n } else if (data.status !== 'Available') {\n if (card)\n card.classList.add('unavailable');\n Object.keys(this.items).forEach(priceType => {\n element = this.items[priceType];\n if (priceType === 'salePrice') {\n element.item\n .addClass('unavailable')\n .addClass('ready-to-show')\n .removeClass('old-price');\n\n this.itemVisibility(priceType,'show');\n\n element.price\n .removeClass('translate-number')\n .innerHtml(changeLangToCurrent(data.status))\n .addAttribute('data-dictionary', data.status)\n .addClass(`${cardType}-card__price-value`,'language-string');\n\n element.currency\n .deleteAttribute('data-dictionary')\n .removeClass('language-string')\n .innerHtml('');\n } else {\n element.item\n .removeClass('ready-to-show')\n this.itemVisibility(priceType,'hide');\n }\n });\n } else {\n this.pricesToggle('hide');\n }\n return this;\n }\n\n addPriceButton(parent) {\n let button;\n\n if (this.priceButton) {\n let isAvailable;\n const isParentTooltip = parent.classList.contains('flat-tooltip__price-value');\n if (isParentTooltip) {\n isAvailable = false;\n } else {\n const engineId = parent.closest('[data-engineId]').getAttribute('data-engineId');\n const crmApartmentData = settingsData?.allCrmData.find(item => item.engineId === engineId);\n isAvailable = crmApartmentData.status === 'Available';\n }\n\n const scope = this;\n let state = 'hide';\n button = new BaseElement()\n .addClass(\n 'card__price-show-price-btn',\n 'language-string',\n 'button',\n 'cards-buttons')\n .addAttribute('data-dictionary', 'show price')\n .innerHtml(changeLangToCurrent('show price'))\n .event('click', function (e) {\n e.stopPropagation();\n state = state === 'hide' ? 'show' : 'hide';\n this.classList.toggle('hide');\n this.classList.toggle('hidden');\n scope.pricesToggle(state,true);\n })\n .appendTo(this.wrapper);\n\n if (isAvailable) {\n this.pricesToggle(state);\n } else {\n button.addClass('hide');\n button.addClass('hidden');\n button.DOMElement.closest('.price__wrapper').querySelector('.price-item').classList.remove('hidden');\n this.pricesToggle('show');\n }\n }\n return button;\n }\n\n pricesToggle(state,buttonClicked = false) {\n Object.keys(this.items).forEach(priceType => {\n this.itemVisibility(priceType,state,buttonClicked);\n });\n }\n\n getPrices(data) {\n const prices = {};\n Object.entries(this.params).forEach(([priceType,enabled]) => {\n if (enabled) {\n prices[priceType] = parseInt(data[priceType]);\n }\n });\n\n if (prices.price2 && prices.price2 === prices.salePrice) {\n delete prices.price2;\n }\n\n return prices;\n }\n\n itemVisibility(priceType,state,priceButtonClicked = false) {\n if (this.priceButton && !priceButtonClicked)\n return;\n\n const element = this.items[priceType];\n if (state === 'show' && element.item.DOMElement.classList.contains('ready-to-show')) {\n element.item.removeClass('hidden');\n if (!element.item.DOMElement.classList.contains('unavailable'))\n element.label && element.label.removeClass('hidden');\n } else {\n element.item.addClass('hidden');\n element.label && element.label.addClass('hidden');\n }\n }\n\n static createPriceItem(parent,priceType) {\n return new BaseElement()\n .addClass('price-item',priceType,'hidden')\n .appendTo(parent)\n }\n\n static prettier(value) {\n if (value > 0) {\n return numberWithCommas(value, true);\n }\n return '';\n }\n\n get showPrice() {\n return this.show;\n }\n}\n","'use strict';\nimport gsap from \"gsap\";\nimport {Draggable} from \"gsap/Draggable\";\nimport {CardTypes} from '../../common';\nimport {\n cardsData,\n isDesktop,\n isMobile,\n projectMode,\n settingsData,\n threeJsVariables,\n TRoot,\n UIRoot\n} from \"../../settings\";\nimport {\n openOptionsCard,\n removeOptionsCardGallery,\n resizeOptionsCardGallery,\n} from './optionsCards';\nimport {selectionBoxesSetStatusColor} from \"../threejs/raycast\";\nimport {\n isCompareMode,\n lockScreenOrientation,\n moveCameraToBuildingInCylinder,\n setCSSVar,\n userPrevent\n} from '../../functions';\nimport {findSelectionAndCrmData, rotation_to_flat} from \"../../functions\";\nimport {setActiveClassHandler} from \"./unitCards/unitCardFunctions\";\nimport {UnitCardClass} from \"./unitCards/UnitCardClass\";\nimport { getCurrentLangDirection} from '../components/langSwitcher/langSwitcher';\nimport { updateCompareButtonOffset, updateCompareButtonOffsetWeb } from '../menu/navigation/compareButton';\nimport { Vantages } from '../components/vantage/Vantage';\nimport {GetElement} from \"../interfaces/GetElement\";\nimport { BmbyMode } from '../mode/BmbyMode';\nimport {renderUpdateValuesOnDemand} from \"../../app\";\nimport {getActiveMenuData} from \"../menu/menu\";\n\nexport const createUnitCardAnimation = (object) => {\n const cardBox = UnitCardClass.findCard(object.engineId)?.html;\n const directionHtml = document.documentElement.getAttribute('dir');\n const menu = document.querySelector('.aside__container');\n const menuPosition = menu ? menu.getAttribute('data-menu-position') : 'right';\n\n let direction = (menuPosition === 'right') ? 'left' : 'right';\n\n if (BmbyMode.active) {\n direction = directionHtml === 'rtl' ? 'left' : 'right';\n }\n\n const navBar = document.querySelector('.right-nav-bar');\n\n const winY = threeJsVariables.mouse.winY;\n const winX = threeJsVariables.mouse.winX;\n\n const offsetWidth = directionHtml === 'rtl' ? 32 : 37;\n let position = offsetWidth;\n let scale = 1;\n let top = 110;\n let directionValue = 20;\n\n if (settingsData.buildingDestroyed)\n position = navBar.clientWidth + offsetWidth * 2;\n\n if (isDesktop) {\n direction = 'right';\n position = document.querySelector(`.search__container-main`).getBoundingClientRect().width + 80;\n directionValue = position;\n scale = 1.3;\n top = 200;\n } else {\n position = UnitCardClass.findCard(false, 'non-active')?.html ? position + 20 : position\n }\n\n\n const tl = gsap;\n if (UnitCardClass.cards.length > 1) {\n UnitCardClass.cards[1].html.style.top = 'unset';\n const cardMaxHeight = Math.max(...UnitCardClass.cards.map(card => card.html.getBoundingClientRect().height));\n const totalHeight = cardMaxHeight * 2;\n let offset = 75;\n let navBarHeight = 0;\n\n if (!isDesktop) {\n scale = 0.85;\n position = 75;\n offset = 50;\n const floorSlider = document.querySelector('.fs__main__container')?.getBoundingClientRect().width + 15 || 0;\n directionValue = directionValue + floorSlider;\n updateCompareButtonOffsetWeb(directionValue);\n } else {\n navBarHeight = document.querySelector('.bottom__nav-bar').getBoundingClientRect().height + 80;\n updateCompareButtonOffset(navBarHeight / 2);\n }\n\n if (totalHeight > window.innerHeight) {\n scale = window.innerHeight / (totalHeight + offset);\n position = (window.innerHeight - totalHeight + offset) / 2;\n } else {\n position = (window.innerHeight - totalHeight) / 2;\n navBarHeight = 0;\n updateCompareButtonOffset(0);\n }\n\n gsap.fromTo(\n [UnitCardClass.cards[0].html, UnitCardClass.cards[1].html],\n {scale: 1},\n {\n scale: scale,\n [direction]: directionValue,\n onStart: () => {\n userPrevent(true);\n },\n onComplete: () => {\n setTimeout(() => {\n userPrevent(false);\n }, 100);\n }\n });\n gsap.set(UnitCardClass.cards[0].html, {bottom: 'unset'});\n gsap.to(UnitCardClass.cards[0].html, {top: position});\n gsap.set(UnitCardClass.cards[1].html, {top: 'unset'});\n gsap.to(UnitCardClass.cards[1].html, {bottom: position + navBarHeight});\n } else {\n tl.from(cardBox, {\n top: winY,\n [direction]: winX,\n scale: 0,\n })\n tl.to(cardBox, {\n duration: 1.8,\n [direction]: position,\n scale: scale,\n ease: \"expo.out\",\n top: top,\n onStart: () => {\n userPrevent(true);\n settingsData.bombBlock = true;\n },\n onComplete: () => {\n userPrevent(false);\n if (!isDesktop) {\n const currentOpenedCard = UnitCardClass.findCard();\n if (currentOpenedCard)\n currentOpenedCard.html.style.removeProperty('transform');\n }\n settingsData.bombBlock = false;\n }\n });\n }\n\n}\n\nexport const dragUnitCard = () => {\n gsap.registerPlugin(Draggable);\n\n const cardBox = document.querySelectorAll(`.${CardTypes.Unit}-card`);\n if (!cardBox)\n return;\n\n // const menu = document.querySelector('.aside__container');\n // const menuWidth = menu ? menu.offsetWidth : 0;\n const buttonsHeight = document.querySelector('.bottom__nav-bar').getBoundingClientRect().height;\n const rtl = document.documentElement.getAttribute('dir') === 'rtl';\n const TRootWidth = TRoot.getBoundingClientRect().width;\n const UIRootWidth = UIRoot.getBoundingClientRect().width;\n const searchWidth = UIRoot.querySelector('.search__container-main')?.getBoundingClientRect().width || 0;\n\n const desktopModeBounce = {\n top: 0,\n left: -TRootWidth,\n width: window.innerWidth - searchWidth,\n height:window.innerHeight - (buttonsHeight + 80)\n };\n const webModeBounce = {\n top: 0,\n left: rtl ? - (window.innerWidth - UIRootWidth) : UIRootWidth,\n width: window.innerWidth - UIRootWidth,\n height: window.innerHeight\n };\n\n\t\tDraggable.create([...cardBox], {\n\t\t\t\ttype: \"x,y\",\n\t\t\t\tedgeResistance: 1,\n\t\t\t\tbounds: isDesktop ? desktopModeBounce : webModeBounce,\n\t\t\t\tinertia: true,\n\t\t\t\tzIndexBoost: false,\n\t\t\t\tonDragStart: (cardBox) => {\n\t\t\t\t\tcardsData.multiplyCards && setActiveClassHandler(cardBox);\n\t\t\t\t},\n\t\t\t}\n\t\t);\n}\n\nexport const openOptionsCardAnimation = (params) => {\n let width = '', height = '';\n\n if (!isMobile && !isDesktop && !isCompareMode()) {\n width = 'calc(100% - 56px)';\n height = '100%';\n } else if (isDesktop) {\n width = '100%';\n height = '100%';\n }\n\n if (params?.disableAnimation) {\n if (!isMobile) {\n Vantages.scopes.forEach(scope => scope.viewer.calculateViewport());\n }\n return;\n }\n\n\n if (isMobile) {\n const popUpPageAnimationDelay = 0;\n const globalAnimationDelay = isMobile ? 0 : 0.3;\n const elementToAnimate = getElementToAnimate();\n if (isMobile)\n settingsData.animationsDuration = 1;\n\n gsap.fromTo(\n elementToAnimate,\n {bottom: '-100vh'},\n {\n delay: popUpPageAnimationDelay + globalAnimationDelay,\n bottom: 0,\n duration: settingsData.animationsDuration,\n onComplete: () => {\n elementToAnimate.style.removeProperty('transform');\n const vantageViewer = document.querySelector('.vantage-viewer');\n !vantageViewer && renderUpdateValuesOnDemand(true);\n const spoiler = document.querySelector(`.${CardTypes.Options}-card__spoiler`);\n if (spoiler)\n spoiler.classList.remove('hidden');\n }\n },\n );\n } else {\n gsap.fromTo(\n getElementToAnimate(),\n {\n width:1,\n height: 1,\n scale: 0,\n borderRadius: \"50%\"},\n {\n scale: 1,\n width: width,\n height: height,\n borderRadius: \"0%\",\n duration: settingsData.animationsDuration,\n onUpdate: () => Vantages.scopes.forEach(scope => scope.viewer.calculateViewport())\n }\n );\n }\n}\n\nexport const closeOptionsCardAnimation = () => {\n const optionsCard =\n document.querySelector(`.${CardTypes.Options}-card`)\n || document.querySelector(`.${CardTypes.Options}-card .${CardTypes.Amenities}-card`);\n if (!optionsCard)\n return;\n\n if (isMobile) {\n const popUpPageAnimationDelay = 0;\n const globalAnimationDelay = isMobile ? 0 : 0.3;\n const elementToAnimate = getElementToAnimate();\n if (isMobile)\n settingsData.animationsDuration = 1;\n\n gsap.fromTo(\n elementToAnimate,\n {bottom: 0},\n {\n delay: popUpPageAnimationDelay + globalAnimationDelay,\n bottom: '-100vh',\n duration: settingsData.animationsDuration,\n onStart: () => {\n const spoiler = document.querySelector(`.${CardTypes.Options}-card__spoiler`);\n if (spoiler)\n spoiler.classList.add('hidden');\n },\n onComplete: () => {\n onCompleteCallbackFunction();\n }\n },\n );\n } else {\n gsap.fromTo(\n getElementToAnimate(),\n {\n scale: 1,\n borderRadius: \"0%\"\n },\n {\n scale: 0,\n borderRadius: \"50%\",\n duration: settingsData.animationsDuration,\n onComplete: onCompleteCallbackFunction\n }\n );\n }\n\n function onCompleteCallbackFunction() {\n optionsCard.remove();\n removeOptionsCardGallery();\n // toggleCardMainButton();\n projectMode.Pagination.paginate({source: 'flatCloseButtonHandler'});\n }\n}\n\nconst getElementToAnimate = () => {\n const optionsCards =\n document.querySelectorAll(`.${CardTypes.Options}-card`) ||\n document.querySelector(`.${CardTypes.Options}-card .${CardTypes.Amenities}-card`);\n // const plansBox = optionsCards[optionsCards.length - 1].querySelector('.options-card__plans-box');\n\n return optionsCards[optionsCards.length - 1];\n}\n\n/**\n * Mobile animations\n */\n\nexport const unitCardOpenAnimation = async () => {\n // let direction;\n let depth;\n if (isMobile) {\n // settingsData.isLandscape\n // ? direction = 'scaleY'\n // : direction = 'scaleX';\n settingsData.isLandscape\n ? depth = -500\n : depth = -300;\n\n const currentCard = document.querySelector('.unit-card');\n gsap.fromTo(\n currentCard,\n {\n // [direction]: 5,\n // filter: 'blur(10px)',\n bottom: depth,\n duration: settingsData.animationsDuration\n },\n {\n // [direction]: 1,\n // filter: 'blur(0px)',\n bottom: 0,\n duration: settingsData.animationsDuration,\n onComplete: () => {\n currentCard.removeAttribute('style');\n }\n }\n );\n }\n}\n\nexport const closeUnitCardAnimation = async (currentCard, action) => {\n if (!currentCard)\n return;\n\n let depth;\n if (isMobile) {\n settingsData.isLandscape\n ? depth = -500\n : depth = -300;\n return new Promise(resolve => {\n gsap.to(\n currentCard,\n {\n bottom: depth,\n duration: settingsData.animationsDuration,\n onComplete: () => {\n if (action !== 'update')\n removeUnitCard(currentCard, action);\n // IntersectionLegenda.updatePosition();\n resolve(true);\n }\n },\n );\n });\n } else {\n return new Promise(resolve => {\n gsap.to(\n currentCard,\n {\n scaleY: 0,\n duration: settingsData.animationsDuration,\n onStart: () => {\n for (let child of currentCard.children) {\n child.classList.add('hidden');\n }\n },\n onComplete: () => {\n if (action !== 'update')\n removeUnitCard(currentCard, action);\n currentCard.style.removeProperty('transform');\n resolve(true);\n }\n },\n );\n });\n }\n}\n\nconst removeUnitCard = (currentCard, action) => {\n currentCard.remove();\n const unitCard = UnitCardClass.findCard()?.html;\n\n if (unitCard && unitCard.classList.contains('card-from-another-building')) {\n restorePreviouslyUnitCardPosition();\n return;\n }\n\n if (unitCard && action !== 'close-all') {\n const keyPlanButton = document.querySelector(`.${CardTypes.Unit}-card__button-key-plan`);\n const engineId = unitCard.getAttribute('data-engineid');\n const {selectedMesh} = findSelectionAndCrmData(engineId);\n if (!selectedMesh)\n return;\n cardsData.cardMode.isDoubleCard = true;\n selectedMesh.userData.isClicked = true;\n\n if (settingsData.buildingDestroyed && keyPlanButton) {\n keyPlanButton.click();\n } else {\n if (config.features.privateHouseMode) {\n moveCameraToBuildingInCylinder(engineId.split('_')[0]);\n } else {\n rotation_to_flat(selectedMesh);\n selectionBoxesSetStatusColor(selectedMesh, 'click');\n }\n }\n\n setTimeout(() => {\n cardsData.cardMode.isDoubleCard = false;\n }, 300);\n\n unitCard.classList.remove('non-active');\n\n if (cardsData.multiplyCards)\n unitCard.classList.add('active');\n }\n restorePreviouslyUnitCardPosition();\n};\n\n\nexport function restorePreviouslyUnitCardPosition () {\n if (isMobile)\n return;\n\n if (UnitCardClass.cards.length > 0) {\n if (!settingsData.buildingDestroyed)\n UnitCardClass.cards.forEach(card => { card.html.classList.remove('unit-card--small') });\n\n const card = UnitCardClass.findCard().html;\n let position, value, direction,scale,directionValue, top;\n const height = card.getBoundingClientRect().height;\n const floorSlider = document.querySelector('.fs__main__container')?.getBoundingClientRect().width + 15 || 0;\n let offset = Math.round((height / card.offsetHeight + Number.EPSILON) * 100) / 100;\n\n if (isDesktop) {\n const search = document.querySelector(`.search__container-main`).getBoundingClientRect().width + 80;\n position = card.style.bottom === 'unset' ? 'top' : 'bottom';\n offset = offset === 1.3 ? 1 : offset;\n value = position === 'top' ? 200 : (window.innerHeight - 200 - height) * offset;\n direction = 'right';\n directionValue = search + floorSlider;\n scale = 1.3;\n top = '200px';\n } else {\n position = card.style.bottom === 'unset' ? 'top' : 'bottom';\n value = position === 'top' ? 110 : (window.innerHeight - 110 - height) * offset;\n directionValue = 37 + floorSlider;\n direction = getCurrentLangDirection() === 'ltr' ? 'right' : 'left';\n scale = 1;\n top = '110px';\n }\n\n gsap.to(card,{\n [position]: value,\n [direction]: directionValue,\n transform: `translate3d(0px, 0px, 0px) scale(${scale}, ${scale})`,\n duration: 0.5,\n onComplete: () => {\n isDesktop\n ? card.style.bottom = ''\n : card.style[position] = '';\n card.style.top = top ;\n }\n });\n }\n}\n\n// options card\nexport const openAndCloseMobileOptionsCard = (e, object = settingsData.lastClickedFlat.userData.crm_data, settings = config) => {\n const unitCard = UnitCardClass.findCard().html;\n const unitCardPreview = unitCard.querySelector(`.${CardTypes.Unit}-card__preview-block`);\n const unitCardWrapper = unitCard.querySelector(`.${CardTypes.Unit}-card__wrapper`);\n const shareBtn = unitCard.querySelector('.social-media-btn');\n const elementsToAnimate = [unitCardPreview, unitCardWrapper];\n\n if (shareBtn)\n elementsToAnimate.push(shareBtn);\n\n const tl = gsap.timeline();\n tl.to(elementsToAnimate, {\n duration: .2,\n opacity: 0,\n })\n tl.to(unitCard, {\n height: '100%',\n width: settingsData.isLandscape ? '100%' : '92vw',\n duration: .2,\n onUpdate: () => {\n unitCard.style.backgroundColor = 'var(--screenBg)';\n unitCard.style.width = '100%'\n },\n onComplete: () => {\n setTimeout(() => unitCard.style.backgroundColor = 'var(--menuBg)', 500 );\n\n if (settingsData.isLandscape) {\n openOptionsCard( {object, settings} );\n unitCardWrapper.removeAttribute('style');\n if (shareBtn)\n shareBtn.removeAttribute('style');\n unitCard.style.width = '276px';\n }\n }\n })\n !settingsData.isLandscape && tl.to(unitCard, {\n width: '100%',\n duration: .2,\n onComplete: () => {\n openOptionsCard( {object, settings} );\n unitCardWrapper.removeAttribute('style');\n unitCardPreview.removeAttribute('style');\n shareBtn && shareBtn.removeAttribute('style');\n unitCard.removeAttribute('style');\n },\n })\n}\n\nexport const fixedElementsPositionDurScrolling = () => {\n const scrollPlug = document.querySelector(`.${CardTypes.Options}-card__scroll-plug`);\n const optionsCard = document.querySelector(`.${CardTypes.Options}-card`);\n const header = document.querySelector(`.${CardTypes.Options}-card__header`);\n const optionsParameters = scrollPlug ? scrollPlug.getBoundingClientRect() : 0;\n const previewBlockParameters = document.querySelector(`.${CardTypes.Options}-card__plans-box`).getBoundingClientRect();\n const currentDirection = document.documentElement.getAttribute('dir');\n const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n const padding = currentDirection === 'rtl' ? '0 16px 3px 20px' : '0 20px 3px 16px';\n\n optionsCard.addEventListener('scroll', function scroll(e) {\n e.preventDefault();\n\n if (scrollPlug)\n scrollPlug.removeAttribute('style')\n\n if (optionsCard.scrollTop > previewBlockParameters.height - optionsParameters.height) {\n header.style.position = 'fixed';\n header.style.backgroundColor = '#151515';\n header.style.top = '57px';\n header.style.width = '100%';\n header.style.zIndex = '6';\n header.style.left = '0';\n header.style.padding = !isSafari ? padding : '0 16px 3px 16px';\n document.querySelector(`.${CardTypes.Options}-card__info-points`).style.marginTop = '95px';\n } else {\n header.removeAttribute('style');\n const infoPointsElement = document.querySelector(`.${CardTypes.Options}-card__info-points`);\n if (infoPointsElement)\n infoPointsElement.removeAttribute('style');\n }\n });\n}\n\nexport const draggableOptionsCardBlock = (e, action) => {\n if (isCompareMode())\n return;\n\n const optionsCard = document.querySelector(`.${CardTypes.Options}-card`);\n const optionsCardData = document.querySelector(`.${CardTypes.Options}-card__data`);\n\n const stopAnimation = checkClick(e);\n if (stopAnimation) return;\n const isClose = optionsCardData.classList.contains('close-data');\n\n if (!action)\n action = isClose ? 'open' : 'close';\n\n let gridLayout;\n switch (action) {\n case ('open'):\n gridLayout = isDesktop\n ? `1fr 420px`\n : `420px 1fr`;\n break;\n case ('close'):\n gridLayout = isDesktop\n ? `1fr 130px`\n : `130px 1fr`;\n break;\n }\n\n if (isMobile || !optionsCard)\n return;\n\n const amenities = optionsCard.querySelector('.options-card__amenities');\n gsap.to(optionsCard, {\n gridTemplateColumns: gridLayout,\n duration: 0.5,\n onStart: () => {\n action === \"open\" ? optionsCardData.classList.remove('close-data') : optionsCardData.classList.add('close-data');\n\n if (amenities && action === \"close\")\n amenities.classList.add('hidden');\n },\n onUpdate: () => {\n resizeOptionsCardGallery();\n\n setCSSVar(\n '--optionsCardPlansBoxWidth',\n `${Math.round(new GetElement('.options-card__plans-box').width)}px`\n );\n },\n onComplete: () => {\n if (amenities && action === \"open\")\n amenities.classList.remove('hidden');\n }\n });\n}\n\nconst checkClick = (e) => {\n const applyNowBtn = e.target === document.querySelector(`.${CardTypes.Options}-card__apply-now-btn`);\n const buyNow = e.target === document.querySelector(`.${CardTypes.Options}-card__buy-now_conf`);\n const similarAppChildEl = e.target.closest(`.${CardTypes.Similar}-card__container`);\n const favorite = e.target.closest(`.${CardTypes.Options}-card__favorite`);\n const switchers = e.target.closest(`.${CardTypes.Similar}-switcher-block`);\n\n return Boolean(favorite || switchers || similarAppChildEl || applyNowBtn || buyNow);\n}\n\n/**\n * COMPARE CARDS ANIMATION\n */\n\n// export const rollUpAndExpandCompareCards = (e) => {\n// if (isCompareMode())\n// return;\n//\n// const clickedCard = e.target.closest('.compare-block__card');\n//\n// const compareCardList = document.querySelectorAll('.compare-block__card');\n// compareCardList.forEach(elem => {\n// const elemId = elem.getAttribute('data-engineid');\n// if (elemId && elemId !== clickedCard?.getAttribute('data-engineid'))\n// elem.classList.toggle('minimized');\n//\n// clickedCard?.classList.remove('minimized');\n// })\n// }\n\n","'use strict';\n\nimport {getFieldsFromAPI} from \"../../functions\";\n\nexport const facingDictionary = () => {\n\treturn {\n\n\t\t\"דרום\": {\n\t\t\t\"en\": \"South\",\n\t\t\t\"ru\": \"\",\n\t\t\t\"he\": \"דרום\"\n\t\t},\n\n\t\t\"צפון\": {\n\t\t\t\"en\": \"North\",\n\t\t\t\"ru\": \"\",\n\t\t\t\"he\": \"צפון\"\n\t\t},\n\t\t\"מזרח\": {\n\t\t\t\"en\": \"East\",\n\t\t\t\"ru\": \"\",\n\t\t\t\"he\": \"מזרח\"\n\t\t},\n\n\t\t\"מערב\": {\n\t\t\t\"en\": \"West\",\n\t\t\t\"ru\": \"\",\n\t\t\t\"he\": \"מערב\"\n\t\t},\n\t\t\"South\": {\n\t\t\t\"en\": \"South\",\n\t\t\t\"ru\": \"\",\n\t\t\t\"he\": \"דרום\"\n\t\t},\n\t\t\"North\": {\n\t\t\t\"en\": \"North\",\n\t\t\t\"ru\": \"\",\n\t\t\t\"he\": \"צפון\"\n\t\t},\n\t\t\"East\": {\n\t\t\t\"en\": \"East\",\n\t\t\t\"ru\": \"\",\n\t\t\t\"he\": \"מזרח\"\n\t\t},\n\t\t\"West\": {\n\t\t\t\"en\": \"West\",\n\t\t\t\"ru\": \"\",\n\t\t\t\"he\": \"מערב\"\n\t\t}\n\t};\n}\n\nexport const dataArrayOfFlat = (object) => {\n\treturn [\n\t\t{\n\t\t\tname: 'apt. type',\n\t\t\tdata: object.modelName,\n\t\t\ticon: config.features.apartments.infoPointsIcons.aptType,\n\t\t},\n\t\t{\n\t\t\tname: 'bedrooms',\n\t\t\tdata: object.roomNum,\n\t\t\ticon: config.features.apartments.infoPointsIcons.bedrooms,\n\t\t\texceptions: getFieldsFromAPI.filter().find(el => el.type === 'roomNum')?.exceptions\n\t\t},\n\t\t{\n\t\t\tname: 'propType',\n\t\t\tdata: object.propType,\n\t\t\ticon: config.features.apartments.infoPointsIcons.propType,\n\t\t},\n\t\t{\n\t\t\tname: 'area',\n\t\t\tdata: object.totalSpace,\n\t\t\ticon: config.features.apartments.infoPointsIcons.area,\n\t\t},\n\t\t{\n\t\t\tname: 'exposure',\n\t\t\tdata: object.facing,\n\t\t\ticon: config.features.apartments.infoPointsIcons.exposure,\n\t\t},\n\t\t{\n\t\t\tname: 'balcony size',\n\t\t\tdata: object.balconySize,\n\t\t\ticon: config.features.apartments.infoPointsIcons.balconySize,\n\t\t},\n\t\t{\n\t\t\tname: 'roof balcony size',\n\t\t\tdata: object.roofBalconySize,\n\t\t\ticon: config.features.apartments.infoPointsIcons.roofBalconySize,\n\t\t},\n\t\t{\n\t\t\tname: 'covered balcony size',\n\t\t\tdata: object.coveredBalconySize,\n\t\t\ticon: config.features.apartments.infoPointsIcons.coveredBalconySize,\n\t\t},\n\t\t{\n\t\t\tname: 'basement size',\n\t\t\tdata: object.basementSize,\n\t\t\ticon: config.features.apartments.infoPointsIcons.basementSize,\n\t\t},\n\t\t{\n\t\t\tname: 'bathrooms',\n\t\t\tdata: object.bathRooms,\n\t\t\ticon: config.features.apartments.infoPointsIcons.bathrooms,\n\t\t},\n\t\t{\n\t\t\tname: 'garden size',\n\t\t\tdata: object.gardenSize,\n\t\t\ticon: config.features.apartments.infoPointsIcons.gardenSize, // no icon\n\t\t},\n\t\t{\n\t\t\tname: 'toilets',\n\t\t\tdata: object.toilets,\n\t\t\ticon: config.features.apartments.infoPointsIcons.toilets,\n\t\t},\n\t\t{\n\t\t\tname: 'accessible',\n\t\t\tdata: object.accessible,\n\t\t\ticon: config.features.apartments.infoPointsIcons.accessible,\n\t\t},\n\t\t{\n\t\t\tname: 'treatmentRoom',\n\t\t\tdata: object.treatmentRoom,\n\t\t\ticon: config.features.apartments.infoPointsIcons.treatmentRoom,\n\t\t},\n\t\t{\n\t\t\tname: 'managementFee',\n\t\t\tdata: object.managementFee,\n\t\t\ticon: config.features.apartments.infoPointsIcons.managementFee,\n\t\t},\n\t\t{\n\t\t\tname: 'maintenanceFee',\n\t\t\tdata: object.maintenanceFee,\n\t\t\ticon: config.features.apartments.infoPointsIcons.maintenanceFee,\n\t\t},\n\t\t{\n\t\t\tname: 'storages',\n\t\t\tdata: Boolean(object?.storage) ? object.storage : object.storages,\n\t\t\ticon: config.features.apartments.infoPointsIcons.storages,\n\t\t},\n\t\t{\n\t\t\tname: 'parkings',\n\t\t\tdata: Boolean(object?.parking) ? object.parking : object.parkings,\n\t\t\ticon: config.features.apartments.infoPointsIcons.parkings,\n\t\t},\n\t]\n}\n\nexport const createIconsArray = () => {\n\treturn [\n\t\t{\n\t\t\ttype: '360',\n\t\t\tcrmTitle: 'tours360',\n\t\t\t// plan: 'https://dreamsimages.bmby.com/mazlavidreams/panocontent/tours/b1/index.htm', // for testing buttons\n\t\t\tdisclaimer: 'Lorem dolores ex recusandae rerum.',\n\t\t\ticon: config.features.apartments.tourButtonsIcons[\"360\"],\n\t\t},\n\t\t{\n\t\t\ttype: '360Sample',\n\t\t\tcrmTitle: 'sample360',\n\t\t\tplan: 'https://dreamsimages.bmby.com/mazlavidreams/panocontent/tours/b1/index.htm', // for testing buttons\n\t\t\tdisclaimer: 'Lorem dolores ex recusandae rerum.',\n\t\t\ticon: config.features.apartments.tourButtonsIcons[\"360Sample\"],\n\t\t},\n\t\t{\n\t\t\ttype: '2D',\n\t\t\tcrmTitle: 'plan2D',\n\t\t\t// plan: 'https://dreamsimages.bmby.com/cnaan/content2d/proj_1.jpg', // for testing buttons\n\t\t\t// plan: '', // for testing buttons\n\t\t\tdisclaimer: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci animi autem delectus deleniti dignissimos, dolores ex exercitationem maxime neque provident, sapiente velit! Architecto eos eum, itaque iure libero recusandae rerum.',\n\t\t\ticon: config.features.apartments.tourButtonsIcons[\"2D\"],\n\t\t},\n\t\t{\n\t\t\ttype: 'keyPlan',\n\t\t\tcrmTitle: 'keyPlan',\n\t\t\t// plan: 'https://dreamsimages.bmby.com/cnaan/content2d/proj_1.jpg', // for testing buttons\n\t\t\t// plan: '', // for testing buttons\n\t\t\tdisclaimer: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci animi autem delectus deleniti dignissimos, dolores ex exercitationem maxime neque provident, sapiente velit! Architecto eos eum, itaque iure libero recusandae rerum.',\n\t\t\ticon: config.features.apartments.tourButtonsIcons[\"2D\"],\n\t\t},\n\t\t{\n\t\t\ttype: '3D',\n\t\t\tcrmTitle: 'web3D',\n\t\t\t// plan: '',\n\t\t\ticon: config.features.apartments.tourButtonsIcons[\"3D\"],\n\t\t},\n\t\t{\n\t\t\ttype: 'vantage',\n\t\t\tcrmTitle: 'vantage',\n\t\t\t// plan: 'https://dreamsimages.bmby.com/mazlavidreams/panocontent/vantages/vantage101a/index.htm?media-index=1&yaw=0', // for testing buttons\n\t\t\ticon: config.features.apartments.tourButtonsIcons[\"vantage\"],\n\t\t},\n\t\t{\n\t\t\ttype: 'gallery',\n\t\t\tcrmTitle: 'gallery',\n\t\t\ticon: config.features.apartments.tourButtonsIcons[\"gallery\"],\n\t\t},\n\t\t{\n\t\t\ttype: 'Ruler',\n\t\t\tcrmTitle: '',\n\t\t\ticon: config.features.apartments.tourButtonsIcons[\"ruler\"],\n\t\t},\n\t];\n};\n","'use strict';\n\nimport {changeLangToCurrent, getCurrentLang} from '../components/langSwitcher/langSwitcher';\nimport {\n findSelectionAndCrmData, getFieldsFromAPI,\n getObjectFromLocalStorage, getUrlParam,\n handleFavoriteLogic,\n isCompareMode, isNumeric, numberWithCommas\n} from '../../functions';\nimport {Buildings, cardsData, components, isDesktop, isMobile, isNoMenu, isWeb, settingsData} from \"../../settings\";\nimport { removeOptionCardListeners } from './optionsCards';\nimport { Prepayment} from \"../components/Prepayment/Prepayment\";\nimport {\n closeOptionsCardAnimation,\n} from \"./cardsAnimation\";\nimport {CardTypes, ViewMode} from \"../../common\";\nimport {dataArrayOfFlat, facingDictionary} from \"./cardsConfig\";\nimport {renderUpdateValuesOnDemand} from \"../../app\";\nimport {selectionBoxesSetStatusColor} from \"../threejs/raycast\";\nimport {setLordIcon} from '../../lordicon';\nimport { addBmbyEditButton, getPropType } from './unitCards/unitCardFunctions';\nimport {closeNotifications} from '../analytics/statistic';\nimport { CustomerContactNow } from '../menu/contactUs/CustomerContactNow';\nimport {BaseElement} from \"../interfaces/BaseElement\";\nimport {showAsideContainer} from \"../menu/menu\";\nimport { Price } from './Price';\nimport {setSearchContainerMaxHeight} from \"../menu/search/search\";\nimport {StaticPrepayment} from \"../components/StaticPrepayment\";\nimport {UnitCardClass} from \"./unitCards/UnitCardClass\";\nimport {Amenities} from \"../components/Amenities/Amenities\";\n\nexport const closeOptionsCard = () => {\n renderUpdateValuesOnDemand(false);\n closeNotifications();\n removeOptionCardListeners();\n closeOptionsCardAnimation();\n if (!isMobile) {\n document.querySelector('#threejs > .disclaimer')?.classList.remove('hidden');\n UnitCardClass.cards.forEach(card => card.html.classList.remove('hidden'));\n }\n\n cardsData.cardMode.isUnavailable = false;\n if (isWeb && !isNoMenu) {\n const searchMainContainer = document.querySelector('.search__container-main');\n if (searchMainContainer)\n searchMainContainer.style.marginInlineStart = '56px';\n const menu = document.querySelector('.aside__container');\n if (menu)\n menu.style.position = 'fixed';\n setSearchContainerMaxHeight();\n }\n\n if (isNoMenu)\n document.querySelector('.button-modes--back[data-button=\"back\"]')?.classList.remove('hidden');\n\n if (cardsData.cardMode.isAmenities) {\n if (settingsData.lastClickedFlat) {\n settingsData.lastClickedFlat.userData.isClicked = false;\n selectionBoxesSetStatusColor(settingsData.lastClickedFlat, 'hoverOut');\n }\n cardsData.cardMode.isAmenities = false;\n }\n\n if (isMobile) {\n // toggleCardMainButton();\n document.querySelector('.additional-menu__container')?.classList.remove('hidden');\n if (settingsData.isLandscape)\n document.querySelector('.amenities__main__container')?.classList.remove('hidden');\n components.mobileSearch?.show();\n const floorSlider = document.querySelector('.fs__main__container');\n floorSlider && floorSlider.classList.remove('hidden');\n }\n\n if (isDesktop)\n showAsideContainer();\n}\n\nexport const createHeader = (...props) => {\n const [object, cardBoxWrapper, settings, card, resize] = props;\n\n const cardBoxHeader = new BaseElement()\n .addClass(`${card}-card__header`, 'card__header', `${settingsData.isConferenceHost && \"conference\"}`)\n .appendTo(cardBoxWrapper)\n .DOMElement;\n\n if (isCompareMode())\n cardBoxHeader.classList.add('compare-mode');\n\n const titleBox = new BaseElement()\n .addClass(`${card}-card__title-box`, 'card__title-box')\n .appendTo(cardBoxHeader)\n .DOMElement;\n const subTitleBox = new BaseElement()\n .addClass(`${card}-card__subtitle-box`, 'card__subtitle-box')\n .appendTo(titleBox)\n .DOMElement;\n addTitleBlock(titleBox,object);\n\n if (Buildings.getBuildingsInfoLength() > 1)\n addTowerName(subTitleBox, card, object);\n if (!Buildings.isOneFloorBuilding(object.buildingEngineId) || getUrlParam('card'))\n addFloor(object, subTitleBox, card);\n if (cardsData.cardMode.isAmenities)\n return;\n // addAdditionalButtons({card: cardBoxWrapper, data: object, cardType: CardTypes.Options});\n\n // Apply now\n if (card === CardTypes.Options && isMobile) {\n let prepaymentPosition;\n if (resize)\n prepaymentPosition = settingsData.isLandscape ? 'beforebegin' : null;\n\n const optionsCardBumper = document.querySelector(`.${CardTypes.Options}-card__bumper`);\n const cardButtonsWrapper = optionsCardBumper && new BaseElement()\n .addClass('cards-buttons-wrapper')\n .appendTo(optionsCardBumper);\n\n if (cardButtonsWrapper?.DOMElement && settingsData.isConferenceHost && !cardsData.cardMode.isAmenities)\n new StaticPrepayment(cardButtonsWrapper.DOMElement, object);\n if (!cardsData.cardMode.isAmenities && cardButtonsWrapper?.DOMElement)\n new Prepayment(cardButtonsWrapper.DOMElement,object,prepaymentPosition);\n if (cardButtonsWrapper?.DOMElement)\n new CustomerContactNow('option-card').appendTo(cardButtonsWrapper.DOMElement);\n\n if (cardButtonsWrapper)\n addBmbyEditButton(object,cardButtonsWrapper.DOMElement,CardTypes.Options);\n\n if (cardButtonsWrapper?.DOMElement.children.length === 0)\n cardButtonsWrapper.remove();\n }\n\n if (!cardsData.cardMode.isAmenities && !isMobile) {\n addPriceBlock(object, titleBox);\n } else if (card === CardTypes.Options && !cardsData.cardMode.isAmenities && isMobile) {\n addPriceBlock(object, cardBoxHeader);\n } else if (card === CardTypes.Unit && !cardsData.cardMode.isAmenities && isMobile) {\n addPriceBlock(object, titleBox);\n } else {\n addPriceBlock(object, titleBox);\n }\n}\n\nexport const addTowerName = (parent, card, object) => {\n const buildingData = config.buildings.find(\n building => building.buildingEngineId === (object.buildingEngineId || object.buildingEngineID)\n );\n\n let towerName;\n Array.isArray(buildingData.buildingTitle) && buildingData.buildingTitle.length\n ? towerName = buildingData.buildingTitle.find(name => name.lang === getCurrentLang()).value\n : towerName = object.buildingName;\n\n const towerNameElement = new BaseElement()\n .addClass(`${card}-card__tower-name`, `card__tower-name`)\n .appendTo(parent)\n .DOMElement;\n if (!b.isOneFloorBuilding(object.buildingEngineId) || getUrlParam('card'))\n new BaseElement()\n .addClass('subtitle-separator')\n .appendTo(parent);\n\n if (isMobile && card === CardTypes.Options) {\n new BaseElement('span')\n .addClass(\n `${card}-card__floor-number-icon`,\n `card__floor-number-icon`,\n 'icon-building',\n )\n .appendTo(towerNameElement);\n }\n\n applyTowerNameNamingRule(towerName, towerNameElement, card);\n}\n\nexport const applyTowerNameNamingRule = (towerName, parent, cardType) => {\n const regExp = /[a-z\\u0590-\\u05fe]/gi;\n const isStringName = regExp.test(towerName);\n if (!isStringName) {\n new BaseElement('span')\n .addClass(`${cardType}-card__tower-name_num`, 'language-string')\n .addAttribute('data-dictionary', 'building')\n .innerHtml(changeLangToCurrent('building') + ' ')\n .appendTo(parent);\n }\n new BaseElement('span')\n .addClass(`${cardType}-card__tower-name_title`)\n .innerHtml(towerName + ' ')\n .appendTo(parent);\n}\n\nexport const addFloor = (object, parent, card) => {\n const floorNumberElement = new BaseElement()\n .addClass(`${card}-card__floor-number`, `card__floor-number`)\n .appendTo(parent)\n .DOMElement;\n if (isMobile && card === CardTypes.Options) {\n new BaseElement('span')\n .addClass(\n `${card}-card__floor-number-icon`,\n `card__floor-number-icon`,\n 'icon-floor',\n )\n .appendTo(floorNumberElement);\n }\n\n const isGroundFloor = settingsData.groundFloor.isActive && (parseInt(settingsData.groundFloor.floor) === parseInt(object.floorNum));\n const floorElement = new BaseElement('span')\n .addClass('language-string')\n .addAttribute('data-dictionary', 'floor')\n .innerHtml(changeLangToCurrent('floor') + ' ')\n .appendTo(floorNumberElement);\n\n if (isGroundFloor) {\n const fullLabel = settingsData.groundFloor.fullLabel;\n floorElement\n .addAttribute('data-dictionary', fullLabel)\n .innerHtml(changeLangToCurrent(fullLabel));\n } else {\n new BaseElement('span')\n .addClass(`${card}-card__floor-number_num`, 'card__floor-number_num', isGroundFloor ? 'hidden' : null)\n .innerHtml(object?.floorNum || object?.floor)\n .appendTo(floorNumberElement);\n }\n}\n\nexport const addTitleBlock = (parentElement,object) => {\n const titleBlock = new BaseElement('h3')\n .addClass(`${CardTypes.Options}-card__title`, 'card__title')\n .appendTo(parentElement)\n .DOMElement;\n\n addApartmentNameWithNumber(titleBlock,object);\n}\n\nexport function addApartmentNameWithNumber(parentElement,object) {\n const optionsCards = [...document.querySelectorAll(`.${CardTypes.Options}-card`)];\n const engineId = optionsCards.length === 1\n ? optionsCards[0].getAttribute('data-engineid')\n : optionsCards[1].getAttribute('data-engineid');\n\n const flatNameWrapper = new BaseElement()\n .addClass(`${CardTypes.Options}-card__flat-name-wrapper`, 'card__flat-name-wrapper')\n .appendTo(parentElement)\n .DOMElement;\n addFlatName(flatNameWrapper,object);\n\n new BaseElement('span')\n .addClass(`${CardTypes.Options}-card__title-flat-number`, 'card__title-flat-number')\n .innerHtml(!cardsData.cardMode.isAmenities ? findSelectionAndCrmData(engineId).crmDataOfFlat.propNum : '')\n .appendTo(flatNameWrapper);\n}\n\nconst addFlatName = (parentElement,object) => {\n const lastClickedFlat = !cardsData.cardMode.isAmenities ? settingsData.lastClickedFlat.userData.crm_data : null;\n const flatNameValue = !cardsData.cardMode.isAmenities\n ? `${getPropType(lastClickedFlat.propType)}`\n : object?.propNum || object?.title;\n const flatNameText = !cardsData.cardMode.isAmenities\n ? `${changeLangToCurrent(getPropType(lastClickedFlat.propType))}`\n : `${changeLangToCurrent(object?.propNum || object?.title)}`;\n new BaseElement('span')\n .addClass(`${CardTypes.Options}-card__title-flat-name`, 'language-string', 'card__title-flat-name')\n .addAttribute('data-dictionary', flatNameValue)\n .innerHtml(flatNameText)\n .appendTo(parentElement)\n}\n\nexport const addPriceBlock = (object, cardBox) => {\n if (cardsData.cardMode.isAmenities)\n return;\n\n new Price()\n .addBlock(cardBox)\n .setPrice(object);\n}\n\nexport const addInfopointsBlock = (...props) => {\n const [object, cardBox, card, settings] = props;\n const infoPointsBlock = new BaseElement()\n .addClass(`${card}-card__info-points`, 'card__info-points')\n .appendTo(cardBox)\n .DOMElement;\n\n if (isCompareMode())\n infoPointsBlock.classList.add('compare-mode');\n if (!cardsData.cardMode.isAmenities)\n addFlatDataToUnitCard(object, infoPointsBlock, card, settings, cardBox);\n}\n\nexport const addFlatDataToUnitCard = (object, infoPointsBlock, card) => {\n // info-points\n if (card === 'compare')\n return;\n\n const price = new Price();\n const cardsInfo = dataArrayOfFlat(object);\n const infoPointsData = cardsInfo.filter(data => {\n if (card === CardTypes.Unit && getFieldsFromAPI.small().indexOf(data.name) !== -1) {\n return data;\n } else if (card === CardTypes.Options && getFieldsFromAPI.full().indexOf(data.name) !== -1) {\n if ((data.name === 'managementFee' || data.name === 'maintenanceFee') && (!price.showPrice || cardsData.cardMode.isUnavailable))\n return;\n\n return data;\n } else if (card === 'search-item' && infopointsToShowInSearchItem().includes(data.name)) {\n if ((data.name === 'managementFee' || data.name === 'maintenanceFee') && (!price.showPrice || cardsData.cardMode.isUnavailable))\n return;\n\n return data;\n }\n });\n\n const decimalOptions = config.features.apartments?.decimalOptions;\n const decimalOptionsFieldsToApply = getFieldsToApply(decimalOptions);\n\n infoPointsData.forEach(data => {\n let value;\n\n data.exceptions\n ? value = data.exceptions[data.data]\n : value = data.data;\n\n if (data.name === 'parkings' && Array.isArray(value))\n value = value.length;\n\n if (data.name === 'storages' && Array.isArray(value)) {\n const valueCopy = [ ...value ];\n value = 0;\n valueCopy.forEach(item => {\n value += item.size;\n });\n }\n\n if (parseInt(value) === 0)\n return;\n\n if (decimalOptionsFieldsToApply.includes(data.name)) {\n decimalOptions[data.name] === 'show' ?\n value = parseFloat(value).toFixed(1):\n value = parseFloat(value).toFixed(0);\n }\n\n if(!isNaN(value))\n value = value.toLocaleString();\n\n const {contentSubtext, cardModelName, cardModelNameText} =\n createInfoPointsBlockElements(card, infoPointsBlock, value, data.name);\n\n cardModelNameText.innerHtml(isNumeric(value) ? numberWithCommas(value) : changeLangToCurrent(value));\n cardModelName.classList.add(data.icon);\n\n switch (data.name) {\n case 'area':\n case 'balcony size':\n case 'roof balcony size':\n case 'covered balcony size':\n case 'basement size':\n case 'garden size':\n case 'storages':\n applyRulesForArea(contentSubtext);\n break;\n case 'accessible':\n case 'treatmentRoom':\n applyAccessibleOrTreatmentRoomRules(cardModelNameText);\n break;\n case 'exposure':\n applyExposureRules(cardModelNameText, value, card, cardModelName);\n break;\n case 'managementFee':\n case 'maintenanceFee':\n applyRulesForPrice(contentSubtext);\n break;\n }\n });\n}\n\nfunction infopointsToShowInSearchItem() {\n const arrayOfSearchResultsFields = config.features.search.searchSortState.map(element => element.type);\n const arrayOfInfopoints = getFieldsFromAPI.full();\n\n setCommonFieldNames(arrayOfSearchResultsFields);\n\n return arrayOfInfopoints.filter(x => !arrayOfSearchResultsFields.includes(x));\n}\n\nfunction setCommonFieldNames(arrayOfUncommonNames) {\n const dictionaryOfDifference = {\n \"facing\": \"exposure\",\n \"roomNum\": \"bedrooms\",\n \"totalSpace\": \"area\",\n \"balconySize\": \"balcony size\",\n \"roofBalconySize\": \"roof balcony size\",\n \"coveredBalconySize\": \"covered balcony size\",\n \"basementSize\": \"basement size\"\n };\n\n for (const key in dictionaryOfDifference) {\n if (arrayOfUncommonNames.indexOf(key) !== -1)\n arrayOfUncommonNames.splice(arrayOfUncommonNames.indexOf(key), 1, dictionaryOfDifference[key]);\n }\n}\n\nconst createInfoPointsBlockElements = (card, infoPointsBlock, value, name) => {\n const cardContentBlock = new BaseElement()\n .addClass(`${card}-card__info-points-block`, 'card__info-points-block')\n .appendTo(infoPointsBlock)\n .DOMElement;\n const cardContentWrapper = new BaseElement()\n .addClass(`${card}-card__info-points-wrapper`, 'card__info-points-block-wrapper')\n .appendTo(cardContentBlock)\n .DOMElement;\n const cardModelName = new BaseElement()\n .addClass(`${card}-card__info-points-block_data`, 'card__info-points-block_data')\n .appendTo(cardContentWrapper)\n .DOMElement;\n const cardModelTextWrapper = new BaseElement()\n .addClass(`${card}-card__info-points-block_data-wrapper`, 'card__info-points-block_data-wrapper')\n .addAttribute('dir', 'ltr')\n .appendTo(cardModelName)\n .DOMElement;\n\n const cardModelNameText = new BaseElement('span')\n .addClass(\n `${card}-card__info-points-block_data_text`,\n 'card__info-points-block_data_text',\n isNumeric(value) ? 'translate-number' : 'language-string')\n .appendTo(cardModelTextWrapper)\n .addAttribute('data-dictionary', value);\n setDirectionForText(value, cardModelNameText.DOMElement);\n const contentSubtext = new BaseElement()\n .addClass(`${card}-card__info-points-block_subtitle`, 'card__info-points-block_subtitle')\n .appendTo(cardContentWrapper)\n .DOMElement;\n contentSubtext.innerHTML += `\n \n ${changeLangToCurrent(name).toLowerCase()}\n `;\n\n return {\n cardContentBlock,\n cardContentWrapper,\n cardModelName,\n cardModelTextWrapper,\n cardModelNameText,\n contentSubtext\n };\n}\n\nconst getFieldsToApply = (decimalOptions) => {\n const decimalOptionsFieldsToApply = [];\n for (let key in decimalOptions) {\n decimalOptionsFieldsToApply.push(key);\n }\n\n return decimalOptionsFieldsToApply;\n}\n\nconst setDirectionForText = (value, cardModelNameText) => {\n const regExp = /([A-Za-z])\\w+/g;\n if (regExp.test(value))\n cardModelNameText.style.direction = \"ltr\";\n}\n\nconst applyRulesForArea = (contentSubtext) => {\n const measurement = config.localization.area ? config.localization.area : \"m2\";\n contentSubtext.innerHTML += `,`;\n const measurementTag = new BaseElement('span')\n .addClass('language-string', 'card__info-points-block_subtitle-measurement', 'meters')\n .addAttribute('data-dictionary', measurement)\n .appendTo(contentSubtext)\n .DOMElement;\n measurementTag.innerHTML += changeLangToCurrent(measurement);\n}\n\nconst applyRulesForPrice = (contentSubtext) => {\n const currencyLocal = config.localization.currencyLabel;\n contentSubtext.innerText = contentSubtext.innerText + ',';\n const measurementTag = new BaseElement('span')\n .addClass('language-string', 'card__info-points-block_subtitle-measurement', 'currency')\n .addAttribute('data-dictionary', currencyLocal)\n .appendTo(contentSubtext)\n .DOMElement;\n measurementTag.innerHTML += changeLangToCurrent(currencyLocal);\n}\n\nconst applyAccessibleOrTreatmentRoomRules = (cardModelNameText) => {\n cardModelNameText\n .addClass('icon-check-mark')\n .removeClass('language-string', 'translate-number')\n .deleteAttribute('data-dictionary')\n .innerHtml('');\n}\n\nconst applyExposureRules = (cardModelNameText, value, card, cardModelName) => {\n const dataArray = value;\n const dictionary= facingDictionary();\n\n if (dataArray.length === 0) {\n cardModelName.closest(`.${card}-card__info-points-block`).remove();\n return;\n }\n\n cardModelNameText.remove();\n\n dataArray.forEach(element => {\n for (let key in dictionary) {\n if (element === key) {\n new BaseElement('span')\n .addClass(\n `${card}-card__info-points-block_data_text`,\n 'card__info-points-block_data_text',\n 'language-string'\n )\n .addAttribute('data-dictionary', dictionary[key].en + 'Short')\n .innerHtml(changeLangToCurrent(dictionary[key].en + 'Short'))\n .appendTo(cardModelName);\n }\n }\n });\n}\n\nexport const addFavoritesBlock = (object, cardBox, card) => {\n if (object.status !== \"Available\")\n return;\n\n const favoriteCheckboxBlock = new BaseElement()\n .addClass(`${card}-card__favorite`, 'card__favorite', 'options-item', 'favorite-button')\n .appendTo(cardBox)\n .DOMElement;\n new BaseElement('input')\n .addClass(`${card}-card__favorite-checkbox`, 'card__favorite-checkbox')\n .addAttribute('type', 'checkbox')\n .addAttribute('id', `favorite-check-id__${card}`)\n .appendTo(favoriteCheckboxBlock);\n const favoriteLabel = new BaseElement('label')\n .addClass(`${card}-card__favorite-label`, 'card__favorite-label','icon-unselected')\n .addAttribute('for', `favorite-check-id__${card}`)\n .event('click', (e) => {\n e.stopPropagation();\n handleFavoriteLogic(e, 'cardClick');\n })\n .appendTo(favoriteCheckboxBlock)\n .DOMElement;\n\n if (!isMobile) {\n favoriteLabel.classList.add('icon--lord-unselected');\n favoriteLabel.classList.remove('icon-unselected');\n let colors;\n if (isMobile && card === CardTypes.Options) {\n colors = 'primary:#ffffff,secondary:#ffffff'\n } else if (isMobile && card === CardTypes.MobileCard) {\n colors = 'primary:#000000,secondary:#000000'\n } else {\n colors = 'primary:#ff0000,secondary:#ff0000'\n }\n \n setLordIcon('favorite', favoriteLabel, {\n trigger: 'hover',\n stroke: 90,\n colors: colors\n });\n }\n \n\n // let secondFavorite;\n // if (card === CardTypes.MobileCard) {\n // secondFavorite = new BaseElement('label')\n // .addClass(`${card}-card__favorite-label`, `${card}-card__favorite-label--inverted`, 'card__favorite-label', 'icon--lord-unselected')\n // .addAttribute('for', `favorite-check-id__${card}`)\n // .event('click', (e) => {\n // e.stopPropagation();\n // handleFavoriteLogic(e, 'cardClick');\n // })\n // .appendTo(favoriteCheckboxBlock)\n // .DOMElement;\n //\n // setLordIcon('favorite', secondFavorite, {\n // trigger: 'hover',\n // stroke: 90,\n // colors: 'primary:#ffffff,secondary:#ffffff'\n // });\n // }\n\n const isInFavorite = getObjectFromLocalStorage(object.engineId);\n if (isInFavorite) {\n if (favoriteLabel.classList.contains('icon--lord-unselected')) {\n favoriteLabel.classList.remove('icon--lord-unselected');\n }\n if (favoriteLabel.classList.contains('icon-unselected')) {\n favoriteLabel.classList.remove('icon-unselected');\n }\n favoriteLabel.classList.add('icon-favorite_selected');\n // if (card === CardTypes.MobileCard) {\n // secondFavorite.classList.remove('icon--lord-unselected');\n // secondFavorite.classList.add('icon-favorite_selected');\n // }\n }\n}\n\nexport function addTechnicalSpecifications(...props) {\n if (!settingsData.specifications) return;\n const [object, cardBox, card, settings] = props;\n const specsBlock = new BaseElement()\n .addClass(`${card}-card__specifications`, 'card__specifications');\n\n new BaseElement()\n .addClass('specifications__title', 'language-string')\n .addAttribute('data-dictionary', 'Technical specifications')\n .innerHtml(changeLangToCurrent('Technical specifications'))\n .appendTo(specsBlock.DOMElement);\n \n const specsData = settingsData.specifications.sort((prev,next) => prev.order - next.order);\n const modelName = object?.modelName;\n const bmbyPropID = String(object?.bmbyPropID);\n const currLang = getCurrentLang();\n\n specsData.forEach((category, categoryIndex) => {\n if (category.items.length === 0) return;\n\n\n\n const specsCategory = new BaseElement()\n .addClass('specifications__category')\n .addAttribute('categoryId', category.categoryId)\n .addAttribute('state', categoryIndex === 0 ? 'expanded' : 'collapsed')\n .event('click', (e) => {\n e.stopPropagation();\n const element = e.target.closest('.specifications__category');\n const state = element.getAttribute('state');\n if (state === 'expanded') {\n element.setAttribute('state', 'collapsed');\n }else {\n element.setAttribute('state', 'expanded');\n }\n })\n .appendTo(specsBlock.DOMElement);\n const specsHeader = new BaseElement()\n .addClass('specifications__header')\n .appendTo(specsCategory.DOMElement);\n new BaseElement('span')\n .addClass('specifications__header-name')\n .innerHtml(category.name.find(elem => elem.lang === currLang).value)\n .appendTo(specsHeader.DOMElement);\n new BaseElement('span')\n .addClass('specifications__header-checker', 'icon-down2')\n .appendTo(specsHeader.DOMElement);\n const specsList = new BaseElement('ul')\n .addClass('specifications__list')\n .appendTo(specsCategory.DOMElement);\n\n category.items.forEach((item, itemIndex) => {\n if (item.models) {\n if (item.models.length !== 0 && !item.models.includes(modelName)) {\n return;\n }\n }else if (item.props) {\n if (item.props.length !== 0 && !item.props.includes(bmbyPropID)) {\n return;\n }\n }\n new BaseElement('il')\n .addClass('specifications__item')\n .addAttribute('itemIndex', itemIndex)\n .innerHtml(item.text.find(elem => elem.lang === currLang).value)\n .appendTo(specsList.DOMElement);\n });\n if (specsList.DOMElement.children.length === 0) {\n specsCategory.remove();\n }\n });\n if (specsBlock.DOMElement.children.length > 1) {\n specsBlock.appendTo(cardBox);\n }\n}\n\nexport function updateLangTechnicalSpecifications() {\n const categoryBlockArray = document.querySelectorAll('.specifications__category');\n if (!categoryBlockArray) return;\n const currLang = getCurrentLang();\n categoryBlockArray.forEach(categoryBlock => {\n const categoryId = categoryBlock.getAttribute('categoryId');\n const category = settingsData.specifications?.find(elem => elem.categoryId === categoryId);\n const headerNameBlock = categoryBlock.querySelector('.specifications__header-name');\n headerNameBlock.textContent = category.name.find(elem => elem.lang === currLang).value;\n const itemBlockArray = categoryBlock.querySelectorAll('.specifications__item');\n itemBlockArray.forEach(itemBlock => {\n const itemIndex = itemBlock.getAttribute('itemIndex');\n itemBlock.textContent = category.items[itemIndex].text.find(elem => elem.lang === currLang).value;\n });\n });\n}\n\nexport function addAmenitiesOfBuilding(currentCardBoxDataElement) {\n return;\n if (!Amenities.amenitiesArray.length)\n return;\n\n const rootElement = new BaseElement()\n .addClass(`${CardTypes.Options}-card__amenities`)\n .appendTo(currentCardBoxDataElement);\n new BaseElement('h4')\n .addClass(`${CardTypes.Options}-card__amenities-title`, 'language-string')\n .setAttributes({'data-dictionary': 'Amenities'})\n .innerHtml(changeLangToCurrent('Amenities'))\n .appendTo(rootElement.DOMElement);\n const wrapper = new BaseElement()\n .addClass(`${CardTypes.Options}-card__amenities-wrapper`)\n .appendTo(rootElement.DOMElement);\n\n Amenities.amenitiesArray.forEach(amenity => {\n amenity.elementForCard.appendTo(wrapper.DOMElement);\n });\n}\n","'use string'\n\nimport {findSelectionAndCrmData, userPrevent} from \"../../functions\";\nimport {CardTypes} from \"../../common\";\nimport {renderUpdateValuesOnDemand} from \"../../app\";\nimport {openOptionsCard, setWidthOfCardDependingOnMenu} from \"./optionsCards\";\nimport {Button} from \"../interfaces/buttons/Button\";\nimport {showAsideContainer} from \"../menu/menu\";\nimport {BaseElement} from \"../interfaces/BaseElement\";\nimport { Vantages } from '../components/vantage/Vantage';\nimport {UIRoot} from \"../../settings\";\nimport {isDesktop} from \"../../settings\";\nimport {UnitCardClass} from \"./unitCards/UnitCardClass\";\n\nexport const createCompareBlock = () => {\n if (userPrevent()) return;\n\n const menu = document.querySelector('.aside__container');\n const menuWidth = menu ? menu.getAttribute('data-initial-width') : 0;\n\n const compareBlockWidth = `${window.innerWidth - menuWidth}px`;\n const block = new BaseElement()\n .addClass('compare-block', 'non-canvas')\n .appendTo(UIRoot)\n .addStyle('width', compareBlockWidth)\n .DOMElement;\n\n setTimeout(() => renderUpdateValuesOnDemand(true), 1000);\n setWidthOfCardDependingOnMenu(block);\n\n createCompareCards(block);\n compareData(block, 'bold');\n}\n\nconst createCompareCards = (parent) => {\n const cardsList = document.querySelectorAll(`.${CardTypes.Unit}-card`);\n cardsList.forEach(card => {\n const engineId = card.getAttribute('data-engineid');\n const {crmDataOfFlat} = findSelectionAndCrmData(engineId);\n\n new BaseElement()\n .addClass('compare-block__card', 'compare-card')\n .addAttribute('data-engine', 'engineId')\n .appendTo(parent);\n\n openOptionsCard( {object: crmDataOfFlat, isForCompare: true});\n })\n\n createCloseButton(parent);\n}\n\nconst createCloseButton = (parent) => {\n new Button()\n .addClass('compare-block__close-button', 'close-button-cross')\n .event('click', closeHandler)\n .appendTo(parent);\n}\n\nfunction closeHandler() {\n if (Vantages.isActive()) {\n Vantages.close(() => {\n document.querySelector('.compare-block').remove();\n\n if (isDesktop)\n showAsideContainer();\n\n UnitCardClass.cards.forEach(card => card.html.classList.remove('hidden'));\n });\n } else {\n document.querySelector('.compare-block').remove();\n\n if (isDesktop)\n showAsideContainer();\n\n UnitCardClass.cards.forEach(card => card.html.classList.remove('hidden'));\n }\n}\n\nconst compareData = (compareBlock, mode) => {\n const cardsInfoPoints = compareBlock.getElementsByClassName('card__info-points');\n const cardsPrice = compareBlock.getElementsByClassName('options-card__price-value');\n\n switch (mode) {\n case 'bold':\n boldCompareMode(cardsInfoPoints);\n break;\n case 'color':\n colorCompareMode(cardsInfoPoints, cardsPrice);\n break;\n default:\n console.log('compareData: default case');\n break;\n }\n}\n\nconst boldCompareMode = (infoPoints) => {\n const leftCardDifferenceData = {exposure: []};\n const rightCardDifferenceData = {exposure: []};\n fillCardsDifferenceData({leftCardDifferenceData, rightCardDifferenceData, infoPoints});\n\n if (Object.keys(leftCardDifferenceData).length > 1 || (Object.keys(leftCardDifferenceData).length === 1 && leftCardDifferenceData.exposure.length > 0)) //{\n addDifferenceDataToCard(leftCardDifferenceData, infoPoints[0], 'bold');\n\n if (Object.keys(rightCardDifferenceData).length > 1 || (Object.keys(rightCardDifferenceData).length === 1 && rightCardDifferenceData.exposure.length > 0)) //{\n addDifferenceDataToCard(rightCardDifferenceData, infoPoints[1], 'bold');\n}\n\nconst fillCardsDifferenceData = (vars) => {\n const { infoPoints, leftCardDifferenceData, rightCardDifferenceData } = vars;\n const leftCardInfoPoints = getInfoPointsStructuredData(infoPoints[0]);\n const rightCardInfoPoints = getInfoPointsStructuredData(infoPoints[1]);\n const commonFields = getCommonFields(leftCardInfoPoints, rightCardInfoPoints);\n for (let element of commonFields) {\n if (element === 'exposure') {\n for (let i = 0; i < leftCardInfoPoints.exposure.length; i++) {\n if (!rightCardInfoPoints.exposure.includes(leftCardInfoPoints.exposure[i]))\n leftCardDifferenceData.exposure.push(leftCardInfoPoints.exposure[i]);\n }\n for (let i = 0; i < rightCardInfoPoints.exposure.length; i++) {\n if (!leftCardInfoPoints.exposure.includes(rightCardInfoPoints.exposure[i]))\n rightCardDifferenceData.exposure.push(rightCardInfoPoints.exposure[i]);\n }\n continue;\n }\n\n if (parseFloat(leftCardInfoPoints[element]) === parseFloat(rightCardInfoPoints[element]))\n continue;\n\n (parseFloat(leftCardInfoPoints[element]) > parseFloat(rightCardInfoPoints[element])) ?\n leftCardDifferenceData[element] = leftCardInfoPoints[element]:\n rightCardDifferenceData[element] = rightCardInfoPoints[element];\n }\n}\n\nconst getCommonFields = (leftCardInfoPoints, rightCardInfoPoints) => {\n const commonFields = [];\n for (let key in leftCardInfoPoints) {\n if (rightCardInfoPoints.hasOwnProperty(key))\n commonFields.push(key);\n }\n\n return commonFields;\n}\n\nconst colorCompareMode = (infoPoints, prices) => {\n const leftCardData = getInfoPointsStructuredData(infoPoints[0]);\n const rightCardData = getInfoPointsStructuredData(infoPoints[1]);\n const priceDifferenceInPercents = getPriceDifferenceInPercents(prices);\n const differenceData = {};\n\n for (let key in rightCardData) {\n if (key === 'exposure') {\n differenceData[key] = [];\n for (let i = 0; i < rightCardData[key].length; i++) {\n if (!leftCardData[key].includes(rightCardData[key][i]))\n differenceData[key].push(rightCardData[key][i])\n }\n continue;\n }\n let leftValue = parseInt(leftCardData[key]);\n let rightValue = parseInt(rightCardData[key]);\n if (isNaN(leftValue))\n leftValue = 0;\n\n const value = rightValue - leftValue;\n if (value === 0)\n continue;\n\n differenceData[key] = value;\n }\n\n addDifferenceDataToCard(differenceData, infoPoints[1], 'color');\n priceDifferenceInPercents && addDifferencePriceDataToCard(priceDifferenceInPercents, prices[1]);\n}\n\nconst getInfoPointsStructuredData = (infoPoints) => {\n const result = {};\n for (let i = 0; i < infoPoints.children.length; i++) {\n let value = '';\n let title = '';\n title = infoPoints.children[i].querySelector('.card__info-points-block_subtitle').children[0].getAttribute('data-dictionary');\n if (title === 'apt. type') continue;\n if (title === 'exposure') {\n value = [];\n const exposures = infoPoints.children[i].getElementsByClassName('card__info-points-block_data_text');\n for (let k = 0; k < exposures.length; k++) {\n value.push(exposures[k].getAttribute('data-dictionary'));\n }\n } else {\n value = infoPoints.children[i].querySelector('.card__info-points-block_data_text').getAttribute('data-dictionary');\n }\n result[title] = value;\n }\n return result;\n};\n\nconst getPriceDifferenceInPercents = (prices) => {\n if (prices.length <= 1)\n return 0;\n\n const leftCardPrice = parseFloat(prices[0].innerHTML.replace(/,/g, ''));\n const rightCardPrice = parseFloat(prices[1].innerHTML.replace(/,/g, ''));\n let differenceInPercents;\n if (rightCardPrice > leftCardPrice) {\n differenceInPercents = Math.round(rightCardPrice / leftCardPrice * 100 - 100);\n } else if (rightCardPrice < leftCardPrice) {\n differenceInPercents = Math.round(leftCardPrice / rightCardPrice * -100 + 100);\n }\n let sign;\n (differenceInPercents < 0) ? sign = '' : sign = '+';\n\n return `${sign}${differenceInPercents}`;\n};\n\nconst addDifferenceDataToCard = (differenceData, card, mode) => {\n for (let key in differenceData) {\n if (key === 'exposure') {\n for (let i = 0; i < differenceData[key].length; i++) {\n const exposureElement = card.querySelector(`[data-dictionary=\"${differenceData[key][i]}\"]`);\n if (exposureElement)\n exposureElement.classList.add(`positive-difference--${mode}`);\n }\n continue;\n }\n\n const targetField = card\n .querySelector(`[data-dictionary=\"${key}\"]`)\n .closest('.card__info-points-block-wrapper')\n .querySelector('.card__info-points-block_data-wrapper');\n\n if (mode === 'color') {\n let color = '';\n differenceData[key] > 0 ?\n color = 'positive':\n color = 'negative';\n const differenceField = document.createElement('span');\n const sign = differenceData[key] > 0 ? '+' : '';\n differenceField.innerHTML = `(${sign}${differenceData[key]})`;\n differenceField.classList.add(\n 'options-card__info-points-block_data_text',\n 'card__info-points-block_data_text',\n `${color}-difference--color`\n );\n targetField.appendChild(differenceField);\n } else if (mode === 'bold') {\n targetField.classList.add('positive-difference--bold');\n }\n }\n}\n\nconst addDifferencePriceDataToCard = (differenceData, priceField) => {\n const priceParentElement = priceField.parentElement;\n const priceDifferenceInPercentsElement = document.createElement('span');\n priceDifferenceInPercentsElement.innerHTML = `(${differenceData}%)`;\n if (differenceData > 0) {\n priceDifferenceInPercentsElement.classList.add('negative-difference');\n } else if (differenceData < 0) {\n priceDifferenceInPercentsElement.classList.add('positive-difference');\n }\n priceParentElement.appendChild(priceDifferenceInPercentsElement);\n};\n","'use strict';\n\nimport {\n checkImageExists,\n findSelectionAndCrmData,\n isCompareMode,\n isStringHasChars, setCSSVar,\n userPrevent\n} from '../../functions';\nimport {\n addAmenitiesOfBuilding,\n addApartmentNameWithNumber,\n addInfopointsBlock, addTechnicalSpecifications, closeOptionsCard, createHeader\n} from \"./cardsFunctions\";\nimport {\n Buildings,\n cardsData,\n components,\n isDesktop,\n isMobile,\n isNoMenu,\n projectMode,\n settingsData,\n UIRoot\n} from '../../settings';\nimport {applyNowContent} from \"../components/apply-now/applyNowContent\";\nimport printJS from \"print-js\";\nimport {CardTypes, ViewMode} from \"../../common\";\nimport {TraverseSwitcher} from \"../components/TraverseSwitcher/TraverseSwitcher\";\nimport {Disclaimer} from '../components/Disclaimer/Disclaimer';\nimport {OptionsCardGallery} from \"../components/OptionsCardGallery/OptionsCardGallery\";\nimport {Prepayment} from \"../components/Prepayment/Prepayment\";\nimport {Button} from \"../interfaces/buttons/Button\";\nimport {UnitCardClass} from './unitCards/UnitCardClass';\nimport {BaseElement} from \"../interfaces/BaseElement\";\nimport {changeLangToCurrent, getCurrentLang, getCurrentLangDirection} from '../components/langSwitcher/langSwitcher';\nimport {applyNow} from \"../components/apply-now/applyNow\";\nimport {hideTooltip} from \"../components/flatTooltip/flatTooltip\";\nimport {\n draggableOptionsCardBlock,\n fixedElementsPositionDurScrolling,\n openOptionsCardAnimation\n} from \"./cardsAnimation\";\nimport {createIconsArray} from \"./cardsConfig\";\nimport {SwipeScript} from \"../controls/swipe\";\nimport {zoom} from \"../../libs/directive\";\nimport {findSimilarApartments} from \"../menu/search/similarSearch\";\nimport {analytics} from \"../analytics/analytics\";\nimport {setActiveLordIcon, setLordIcon} from '../../lordicon';\nimport {renderUpdateValuesOnDemand} from \"../../app\";\nimport {\n addAdditionalButtons, addBmbyEditButton, floorPlanHandler,\n hideAbsentInConfigUnitCardInfoPoints\n} from './unitCards/unitCardFunctions';\nimport gsap from \"gsap\";\nimport { conferenceStatistic } from '../analytics/conferenceStatistic';\nimport { openSearchHandler } from '../menu/search/search';\nimport { Vantages } from '../components/vantage/Vantage';\nimport {hideAsideContainer, logoHandler} from \"../menu/menu\";\nimport { showStatisticPopUp } from '../analytics/statistic';\nimport { Cloudflare } from '../api/Cloudflare';\nimport {CustomerContactNow} from \"../menu/contactUs/CustomerContactNow\";\nimport {GetElement} from \"../interfaces/GetElement\";\nimport { Paint } from './Paint';\nimport {StaticPrepayment} from \"../components/StaticPrepayment\";\nimport { BmbyMode } from '../mode/BmbyMode';\nimport {Amenities} from \"../components/Amenities/Amenities\";\nimport {OptionsCardViewer} from \"./OptionsCardViewer\";\n\nlet optionCardGallery = null;\nlet vantageSwitcher = null;\n\nexport const openOptionsCard = (args = {}) => {\n let {\n object = settingsData.lastClickedFlat.userData.crm_data,\n isForCompare = false,\n isSimilarApartment = false,\n settings = config,\n params = {}\n } = args;\n\n analytics('option card', object);\n cardsData.cardMode.isAmenities = settingsData.lastClickedFlat.userData?.customSelection || object?.isAmenity;\n hideTooltip();\n\n document.querySelector('#threejs > .disclaimer')?.classList.add('hidden');\n\n if (!isForCompare) {\n const optionsCard = UIRoot.querySelector(`.${CardTypes.Options}-card`);\n const compareBlock = document.querySelector('.compare-block');\n if (compareBlock) {\n compareBlock.parentElement.removeChild(compareBlock);\n } else if (optionsCard) {\n optionsCard.parentElement.removeChild(optionsCard);\n }\n }\n\n createOptionsCard({object, settings, isForCompare});\n\n setCSSVar(\n '--optionsCardPlansBoxWidth',\n `${Math.round(new GetElement('.options-card__plans-box').width)}px`\n );\n\n const flatId = object?.bmbyPropID || settingsData?.lastClickedFlat?.userData?.name\n if (!isForCompare && flatId)\n projectMode.Pagination.paginate({\n source: 'openOptionsCard',\n flatId: flatId,\n isSimilarApartment\n });\n\n if (isNoMenu)\n document.querySelector('.button-modes--back[data-button=\"back\"]')?.classList.add('hidden');\n\n if (isMobile) {\n document.querySelector('.additional-menu__container')?.classList.add('hidden');\n const floorSlider = document.querySelector('.fs__main__container');\n floorSlider && floorSlider.classList.add('hidden');\n }\n\n UnitCardClass.changeCurrentCardPosition();\n renderUpdateValuesOnDemand(true);\n UnitCardClass.applyOptionsCardRules();\n // toggleCardMainButton();\n if (isDesktop)\n hideAsideContainer();\n if (!isMobile)\n UnitCardClass.cards.forEach(card => card.html.classList.add('hidden'));\n};\n\nexport const createOptionsCard = (args) => {\n let { object, settings, isForCompare } = args;\n const {selectedMesh} = findSelectionAndCrmData(object.engineId);\n settingsData.lastClickedFlat = selectedMesh;\n\n let cardParent = UIRoot;\n if (isForCompare) {\n const compareCardWrapper = document.getElementsByClassName('compare-block__card');\n compareCardWrapper[0].children.length === 0 ?\n cardParent = compareCardWrapper[0] :\n cardParent = compareCardWrapper[1];\n }\n\n\n const cardBox = new BaseElement()\n .addClass(\n `${CardTypes.Options}-card`,\n 'card',\n 'non-canvas'\n )\n .addAttribute('data-engineid', object.engineId)\n .event('scroll', optionsCardScrollHandler)\n .appendTo(cardParent);\n if (!isMobile) {\n const nonCompareModeSettings = isDesktop ? `1fr 420px` : `420px 1fr`;\n const gridLayout = isCompareMode()\n ? 'initial'\n : nonCompareModeSettings;\n cardBox\n .addStyle('grid-template-columns', gridLayout);\n }\n if (cardsData.cardMode.isAmenities)\n cardBox.addClass('background-backdrop-filter', `${CardTypes.Amenities}-card`);\n if (isCompareMode())\n cardBox.addClass('compare-mode');\n if (isNoMenu)\n cardBox.addClass('no-menu-mode');\n\n cardsData.cardMode.isUnavailable = object.status !== 'Available';\n\n if (isMobile) {\n addOptionsCardSpoilerTo(cardBox.DOMElement, object);\n\n !cardsData.cardMode.isUnavailable && new BaseElement()\n .addClass(`${CardTypes.Options}-card__bumper`)\n .appendTo(cardBox.DOMElement);\n }\n\n addPlansBlock( {cardBox: cardBox.DOMElement, object} );\n\n if (!isCompareMode()) {\n new Button()\n .addClass('options-card__close-button', 'close-button-cross')\n .event('click', closeHandler)\n .appendTo(cardBox.DOMElement);\n }\n\n const cardBoxData = new BaseElement()\n .addClass(`${CardTypes.Options}-card__data`, isMobile && 'swipe-marker')\n .appendTo(cardBox.DOMElement)\n .DOMElement;\n\n addLogoToDataElement(cardBoxData, settings);\n createHeader(object, cardBoxData, settings, CardTypes.Options);\n\n if (isMobile)\n openOptionsCardAnimation();\n\n if (cardsData.cardMode.isAmenities) {\n addAmenityDescription(object);\n if (isMobile) {\n fixedElementsPositionDurScrolling();\n setPlansBlockBoundaries();\n openOptionsCardAnimation();\n } else {\n setOptionsCardPlansBlockHeight();\n setOptionsCardDataHeightInCssVar();\n }\n if (object.propNum === 'Floor plan' && (!config.features.specifications || config.features.specifications.active) && settingsData.specifications) {\n addTechnicalSpecifications(object, cardBoxData, CardTypes.Options, settings);\n }\n return cardBox.DOMElement;\n }\n\n addInfopointsBlock(object, cardBoxData, CardTypes.Options, settings);\n\n if (!isCompareMode() && !isMobile)\n addDragElement(cardBoxData);\n\n if (!isMobile) {\n const optionsCardsHeader = document.querySelectorAll(`.${CardTypes.Options}-card__header`);\n const isCardHeaderButtonsExists = Boolean(document.querySelector(`.${CardTypes.Options}-card__header-buttons`));\n const buttonsContainerParent = isCompareMode() && isCardHeaderButtonsExists\n ? optionsCardsHeader[1]\n : optionsCardsHeader[0];\n const buttonsContainer = new BaseElement()\n .addClass(`${CardTypes.Options}-card__header-buttons`)\n .appendTo(buttonsContainerParent)\n .DOMElement;\n\n addSwipeHandlers(cardBoxData);\n\n if (settingsData.isConferenceHost && !cardsData.cardMode.isAmenities)\n new StaticPrepayment(buttonsContainer, object);\n if (!cardsData.cardMode.isAmenities && !isCompareMode() && !settingsData.isConferenceHost)\n new Prepayment(buttonsContainer,object);\n if (!isCompareMode())\n new CustomerContactNow('option-card').appendTo(buttonsContainer);\n if (isCompareMode()) {\n const iconFloorPlan = object.assets.tours360 ? 'icon-360' : 'icon-plan-type';\n new Button(\"Explore\")\n .addClass(\n `${CardTypes.Options}-card__button-floor-plan`, 'cards-buttons',\n iconFloorPlan,\n 'cards-buttons',\n 'button')\n .event('click', floorPlanHandler)\n .appendTo(buttonsContainer, 'beforeend')\n }\n\n addBmbyEditButton(object,buttonsContainer,CardTypes.Options,'beforeend');\n\n if (buttonsContainer.children.length === 0)\n buttonsContainer.remove();\n }\n\n if (isMobile) {\n fixedElementsPositionDurScrolling();\n setPlansBlockBoundaries();\n }\n\n addAdditionalButtons({card: cardBoxData, data: object, cardType: CardTypes.Options});\n\n if ((!config.features.specifications || config.features.specifications.active) && settingsData.specifications && !isCompareMode()) {\n addTechnicalSpecifications(object, cardBoxData, CardTypes.Options, settings);\n }\n\n addAmenitiesOfBuilding(cardBoxData);\n\n UnitCardClass.setUnitCardHeightIntoCssVar()\n findSimilarApartments();\n if (!isCompareMode()) {\n if (settingsData.isConferenceHost) {\n setTimeout(() => conferenceStatistic( {cardBox: cardBox.DOMElement, object} ), 2000);\n } else {\n setTimeout(() => showStatisticPopUp( {cardBox: cardBox.DOMElement, object} ), 2000);\n }\n }\n\n return cardBox.DOMElement;\n};\n\nfunction addLogoToDataElement(parent, settings) {\n if (OptionsCardViewer.active && !isMobile) {\n const logo = new BaseElement()\n .addClass('separate-card__logo')\n .appendTo(parent);\n\n new BaseElement('img')\n .addClass('logo__img')\n .addAttribute('src', Cloudflare.resize(settings.data.general.logo, {width: 300}))\n .appendTo(logo.DOMElement);\n }\n}\n\nfunction addAmenityDescription(object) {\n if (!object?.description)\n return;\n\n const descriptionData = object.description;\n const dataElement = document.querySelector('.options-card__data');\n const amenityDescription = new BaseElement('div')\n .addClass(`${CardTypes.Options}-card__amenity-description`, 'language-string')\n amenityDescription.innerHtml(changeLangToCurrent(descriptionData[getCurrentLang()]))\n .appendTo(dataElement);\n for (const key in descriptionData) {\n amenityDescription.addAttribute(`data-lang-${key}`, descriptionData[key])\n }\n}\n\nfunction addOptionsCardSpoilerTo(parent,object) {\n const spoiler = new BaseElement()\n .addClass(`${CardTypes.Options}-card__spoiler`, 'transparent-background', 'hidden')\n .appendTo(parent);\n\n addApartmentNameWithNumber(spoiler.DOMElement,object);\n\n new BaseElement('button')\n .addClass(`${CardTypes.Options}-card__back-button`, getCurrentLangDirection() === 'rtl' ? 'icon-right1' : 'icon-left1')\n .event('click', optionsCardBackButtonHandler)\n .appendTo(spoiler.DOMElement);\n}\n\nfunction optionsCardScrollHandler(event) {\n const spoilerElement = event.target.querySelector(`.${CardTypes.Options}-card__spoiler`);\n if (!spoilerElement)\n return;\n\n if (event.target.scrollTop < 40) {\n spoilerElement.classList.add('transparent-background');\n } else if (spoilerElement.classList.contains('transparent-background')) {\n spoilerElement.classList.remove('transparent-background');\n }\n}\n\nexport const setOptionsCardDataHeightInCssVar = () => {\n const optionsCardData = document.querySelector('.options-card__data');\n const optionsCardDataHeight = optionsCardData.getBoundingClientRect().height;\n // document.querySelector(':root')\n // .style.setProperty('--optionsCardDataHeight', `${optionsCardDataHeight}px`);\n setCSSVar('--optionsCardDataHeight', `${optionsCardDataHeight}px`);\n}\n\nconst addSwipeHandlers = (cardBoxData) => {\n SwipeScript(cardBoxData);\n if (document.querySelector('html').getAttribute('dir') === 'rtl' || isDesktop) {\n cardBoxData.addEventListener('swiped-right', swipeRightDataHandler);\n cardBoxData.addEventListener('swiped-left', swipeLeftDataHandler);\n } else {\n cardBoxData.addEventListener('swiped-right', swipeLeftDataHandler);\n cardBoxData.addEventListener('swiped-left', swipeRightDataHandler);\n }\n cardBoxData.addEventListener('click', draggableOptionsCardBlock);\n}\n\nconst addDragElement = (parent) => {\n return new BaseElement()\n .addClass(`${CardTypes.Options}-card__data-drag`)\n .appendTo(parent)\n .DOMElement;\n}\n\nexport const setWidthOfCardDependingOnMenu = (card = document.getElementsByClassName(`${CardTypes.Options}-card`)) => {\n if (card.length === 0 || isMobile || BmbyMode.active)\n return;\n if (!card.length) {\n setWidth(card);\n return;\n }\n\n for (let i = 0; i < card.length; i++) {\n setWidth(card[i]);\n }\n}\n\nconst setWidth = (card) => {\n if (!card)\n return;\n\n const rtl = document.querySelector('html').getAttribute('dir') === 'rtl';\n const menuWidth = (isMobile || isDesktop)\n ? document.querySelector('.aside__container').getAttribute('data-initial-width')\n : 56;\n if (isDesktop) {\n card.style.right = `0`;\n card.style.left = `initial`;\n } else if (rtl) {\n isCompareMode() && !card.classList.contains('compare-block') ?\n card.style.width = `100%` :\n card.style.width = `calc(100% - ${menuWidth}px)`;\n card.style.right = `initial`;\n card.style.left = `0`;\n } else {\n isCompareMode() && !card.classList.contains('compare-block') ?\n card.style.width = `100%` :\n card.style.width = `calc(100% - ${menuWidth}px)`;\n card.style.right = `0`;\n card.style.left = `initial`;\n }\n}\n\nconst addPlansBlock = async (args) => {\n const {cardBox, object} = args;\n\n const plansBlock = new BaseElement()\n .addClass(`${CardTypes.Options}-card__plans-box`)\n .appendTo(cardBox)\n .DOMElement;\n\n new BaseElement()\n .addClass(`${CardTypes.Options}-card__plans-box_preview`)\n .appendTo(plansBlock);\n\n const optionsCardButtons = new BaseElement()\n .addClass(`${CardTypes.Options}-card__plans-box_buttons`, !isMobile && 'background-backdrop-filter')\n .appendTo(plansBlock)\n .DOMElement;\n\n const plansData = addPlansData(object);\n let sortingArray = JSON.parse(JSON.stringify(plansData));\n sortingArray.sort((a,b) => {\n if (a.type === '360' || a.type === '360Sample') {\n return -1;\n }\n return 0;\n });\n\n await addPlansButtons( {object, plansData: sortingArray, parent: optionsCardButtons} );\n setPlansAndTours({cardBox, plansData: sortingArray} );\n setPlugToPreviewBlock(cardBox);\n togglePlans(cardBox);\n setOptionsCardButtonsWidthIntoCssVar();\n setInitialPlansButton(optionsCardButtons);\n\n isCompareMode() &&\n optionsCardButtons.querySelector('[data-type=\"2D\"]')?.click();\n\n return sortingArray;\n\n // function shiftTargetViewInFront(arr, target) {\n // arr.reverse();\n // for (let i = 0; i < arr.length; i++) {\n // if (arr[i].type === target) {\n // const temp = arr[i];\n // arr.splice(i, 1);\n // arr.push(temp);\n // arr.reverse();\n // break;\n // }\n // }\n // return arr;\n // }\n};\n\nfunction setInitialPlansButton(buttonsParent) {\n const initButtonName = config.features.apartments?.initialPlansButton;\n if (initButtonName && buttonsParent.children.length > 1) {\n const initButtonElement = buttonsParent.querySelector(`[data-type=\"${initButtonName}\"]`);\n if (initButtonElement)\n initButtonElement.click();\n }\n}\n\nexport const setPlansBlockBoundaries = () => {\n setOptionsCardPlansBlockHeight();\n setOptionsCardPlansBlockWidth();\n}\n\nexport const setOptionsCardPlansBlockHeight = () => {\n if (!isMobile)\n return;\n\n const optionsCard = document.querySelector('.options-card');\n if (!optionsCard)\n return;\n\n const unitCard = document.querySelector('.unit-card');\n const unitCardHeight = unitCard ? unitCard.getBoundingClientRect().height : 0;\n const optionsCardData = optionsCard.querySelector('.options-card__data');\n const optionsCardDataHeight = optionsCardData ? optionsCardData.getBoundingClientRect().height : 0;\n const plansBlock = optionsCard.querySelector(`.${CardTypes.Options}-card__plans-box`);\n const plansBlockHeight = window.innerHeight - unitCardHeight - optionsCardDataHeight;\n UnitCardClass.setUnitCardHeightIntoCssVar();\n\n // document.querySelector(':root').style.setProperty('--plansBlockHeight', `${Math.ceil(plansBlockHeight)}px`);\n setCSSVar('--plansBlockHeight', `${Math.ceil(plansBlockHeight)}px`);\n isMobile && settingsData.isLandscape\n ? plansBlock.classList.remove('plans-block-height')\n : plansBlock.classList.add('plans-block-height');\n}\n\nconst setOptionsCardPlansBlockWidth = () => {\n const optionsCard = document.querySelector('.options-card');\n if (!optionsCard)\n return;\n // const unitCard = document.querySelector('.unit-card');\n const plansBlock = document.querySelector(`.${CardTypes.Options}-card__plans-box`);\n // const unitCardWidth = unitCard ? unitCard.getBoundingClientRect().width : 0;\n\n const optionsCardData = optionsCard.querySelector('.options-card__data');\n const optionsCardDataWidth = optionsCardData.getBoundingClientRect().width;\n\n const plansBlockWidth = window.innerWidth - optionsCardDataWidth;\n // document.querySelector(':root').style.setProperty('--plansBlockWidth', `${plansBlockWidth}px`);\n setCSSVar('--plansBlockWidth', `${plansBlockWidth}px`);\n isMobile && !settingsData.isLandscape\n ? plansBlock.classList.remove('plans-block-width')\n : plansBlock.classList.add('plans-block-width');\n}\n\nexport const setOptionsCardButtonsWidthIntoCssVar = () => {\n const optionsCardButtons = document.querySelector('.options-card__plans-box_buttons');\n if (!isMobile || !settingsData.isLandscape || !optionsCardButtons) {\n return;\n }\n\n const optionsCardButtonsWidth = optionsCardButtons.getBoundingClientRect().width;\n // document.querySelector(':root').style.setProperty('--optionsCardButtonsWidth', `${optionsCardButtonsWidth}px`);\n setCSSVar('--optionsCardButtonsWidth', `${optionsCardButtonsWidth}px`);\n};\n\nexport const addPlansButtons = async (args) => {\n const {plansData, parent, object} = args;\n\n for (const button of plansData) {\n if (button.isActive && button.crmData) {\n const btn = new BaseElement('button')\n .addClass(\n `${button.type}`,\n `${CardTypes.Options}-card__plans-box_buttons-btn`\n )\n .addAttribute('data-type', button.type)\n .appendTo(parent);\n\n if (isMobile) {\n switch (button.type) {\n case '360Sample':\n btn.addClass('icon-360');\n addCardButtonTooltip(btn.DOMElement,'Sample');\n break;\n case '360':\n btn.addClass('icon-360');\n addCardButtonTooltip(btn.DOMElement,button.type);\n break;\n case 'gallery':\n btn.addClass('icon-gallery');\n addCardButtonTooltip(btn.DOMElement,button.type);\n break;\n case '2D':\n case 'keyPlan':\n btn.addClass('icon-plan-type');\n addCardButtonTooltip(btn.DOMElement,button.type);\n break;\n case 'vantage':\n btn.addClass('icon-vantage');\n addCardButtonTooltip(btn.DOMElement,button.type);\n break;\n case 'ruler':\n btn.addClass('icon-ruler');\n addCardButtonTooltip(btn.DOMElement,button.type);\n break;\n default:\n btn.addClass('icon-teddy');\n addCardButtonTooltip(btn.DOMElement,button.type);\n break;\n }\n } else {\n if (button.type === '360Sample') {\n setLordIcon('360View', btn.DOMElement, {\n stroke: 90,\n trigger: 'hover'\n }, 'afterbegin');\n addCardButtonTooltip(btn.DOMElement,'Sample')\n } else {\n if (button.icon) {\n btn\n .deleteAttribute('data-dictionary')\n .removeClass('language-string')\n .innerHtml('');\n setLordIcon(button.type, btn.DOMElement, {\n stroke: 90,\n trigger: 'hover'\n })\n } else {\n setLordIcon(button.type, btn.DOMElement, {\n stroke: 90,\n trigger: 'hover'\n });\n }\n\n addCardButtonTooltip(btn.DOMElement,button.type);\n }\n }\n\n if (button.type === 'vantage' && !isCompareMode()) {\n vantageSwitcher = new TraverseSwitcher();\n }\n }\n }\n\n if (\n !object.engineId.startsWith('zero') &&\n plansData.find(btn => btn.type === 'vantage' &&\n btn?.crmData?.length === 0)) {\n if (!cardsData.cardMode.isAmenities)\n new Vantages(object.buildingEngineId).addButton(parent);\n }\n\n addActiveClassToBtnTogglersPlans(parent);\n if (!parent.closest('.compare-block') && isDesktop)\n addBackButton(parent);\n};\n\nconst appearPlansButtonAnimation = (button) => {\n if (!button.classList.contains('hidden'))\n return;\n\n let fromPoint = settingsData.isLandscape\n ? -200\n : 200;\n\n gsap.fromTo(\n button,\n {x: fromPoint},\n {\n x: 0,\n duration: settingsData.animationsDuration,\n onStart: () => {\n button.classList.remove('hidden');\n }\n }\n );\n}\n\nconst allPlansButtonsDisappear = () => {\n const allPlansButtons = [...document.querySelectorAll(`.${CardTypes.Options}-card__plans-box_buttons-btn`)];\n allPlansButtons.forEach(button => {\n disappearPlansButtonsAnimation(button);\n })\n}\n\nconst disappearPlansButtonsAnimation = (button) => {\n if (button.classList.contains('hidden'))\n return;\n\n let toPoint = settingsData.isLandscape\n ? -200\n : 200;\n\n gsap.fromTo(\n button,\n {x: 0},\n {\n x: toPoint,\n duration: settingsData.animationsDuration,\n onComplete: () => {\n button.classList.add('hidden');\n }\n }\n );\n}\n\nconst setPlansAndTours = (args) => {\n const {cardBox, plansData} = args;\n const block = cardBox.querySelector(`.${CardTypes.Options}-card__plans-box_preview`);\n const togglerButton = cardBox.querySelector(`.${CardTypes.Options}-card__plans-box_buttons-btn`);\n const loader = cardBox.querySelector(`.${CardTypes.Options}-card__plans-box_preview-loader`);\n\n if (loader)\n block.removeChild(loader);\n createPlanPreviewElement( {cardBox, element: togglerButton, block, plansData} );\n}\n\nexport const createPlanPreviewElement = (args) => {\n const {cardBox, element, block, plansData} = args;\n if (!plansData || !element)\n return;\n\n if (element.classList.contains('vantage-mode-btn')) {\n const evt = new Event('click');\n element.dispatchEvent(evt);\n return;\n }\n\n if (element && element.classList.contains('print')\n || element && element.classList.contains('download')\n || element.classList.contains('plan-back_btn'))\n return;\n\n addDisclaimer(cardBox, element);\n\n if (element.getAttribute('data-type') === 'gallery') {\n block.innerHTML = '';\n block.classList.remove('zoom');\n block.classList.remove('is-padding');\n let pictures = plansData.find(assets => assets.type === 'gallery').crmData;\n\n // if (pictures.length > 1 && pictures.length < 4)\n // pictures = pictures.concat(pictures);\n\n new OptionsCardGallery(block, pictures)\n .create();\n\n return;\n }\n\n const src = new URL(plansData.find(data => data.type === element.getAttribute('data-type')).crmData);\n block.innerHTML = '';\n\n if (src.origin.match(/matterport/g)) {\n src.searchParams.append('play', '1');\n\n if (isMobile) {\n src.searchParams.append('brand', '0');\n src.searchParams.append('title', '0');\n }\n }\n\n const preview = new BaseElement((element.getAttribute('data-type') === '2D' ||element.getAttribute('data-type') === 'keyPlan') ? 'img' : 'iframe')\n .addClass(`${CardTypes.Options}-card__plans-box_preview-content`, `plan-${element.getAttribute('data-type')}`)\n .appendTo(block);\n\n if (element.getAttribute('data-type') === '2D' || element.getAttribute('data-type') === 'keyPlan') {\n // Do check in case of SVG file\n const srcString = src.toString();\n const planURL = srcString.endsWith(\".svg\")\n ? srcString\n : Cloudflare.resize(srcString, { width: isMobile ? 2048 : 4096 });\n preview\n .event('click', (event) => {\n if (!isCompareMode() || event.detail > 1)\n return;\n\n const popUp = new BaseElement()\n .addClass(`${CardTypes.Options}-card__plan-pop-up`, 'background-backdrop-filter')\n .appendTo(document.body);\n\n new Button()\n .addClass(`${CardTypes.Options}-card__close-button`, 'close-button-cross')\n .event('click', () => {\n popUp.event('animationend', () => {\n popUp.remove();\n })\n\n popUp.addClass('close');\n })\n .appendTo(popUp.DOMElement);\n\n new BaseElement(block.cloneNode(true))\n .appendTo(popUp.DOMElement);\n\n zoom();\n })\n .addAttribute('src', planURL);\n const print = cardBox.querySelector(`.${CardTypes.Options}-card__print-btn`);\n if (!print)\n if (config.features.apartments.isPrint && !isMobile && !isDesktop)\n addPrintButton(cardBox);\n\n addPaintButton(cardBox,planURL);\n block.classList.add('zoom');\n addActionsWith2DPlan('2D', element, isMobile);\n\n if(!isMobile && !config.features.apartments.hasPadding && !block.classList.contains('is-padding'))\n block.classList.add('is-padding');\n } else {\n preview.addAttribute('src', src);\n if (block.classList.contains('is-padding'))\n block.classList.remove('is-padding');\n }\n}\n\nexport const addDisclaimer = (cardBox, element) => {\n const optionsCardsBox = document.querySelector('.options-card__plans-box');\n const previousDisclaimer = optionsCardsBox.querySelector('.options-card__disclaimer') || null;\n if (previousDisclaimer)\n previousDisclaimer.remove();\n\n let selectedMesh;\n if (cardsData.cardMode.isAmenities) {\n selectedMesh = null;\n } else {\n selectedMesh = findSelectionAndCrmData(cardBox.getAttribute('data-engineId')).selectedMesh;\n }\n\n const legalComments = selectedMesh ? selectedMesh.userData.crm_data.assets.legalComments : null;\n const dataType = element.getAttribute('data-type');\n let disclaimerText;\n switch(dataType) {\n case 'keyPlan':\n case '2D':\n disclaimerText = legalComments?.plan2D.find(obj => obj.lang === 'en')?.value\n ? legalComments?.plan2D\n : '2dDisclaimer';\n break;\n case '360Sample':\n disclaimerText = legalComments?.tours360.find(obj => obj.lang === 'en')?.value\n ? legalComments?.tours360\n : '360sampleDisclaimer';\n break;\n case '360':\n disclaimerText = legalComments?.tours360.find(obj => obj.lang === 'en')?.value\n ? legalComments?.tours360\n : '360Disclaimer';\n break;\n case 'vantage':\n disclaimerText = legalComments?.[dataType]?.find(obj => obj.lang === 'en')?.value\n ? legalComments?.[dataType]\n : 'vantageDisclaimer';\n break;\n case 'gallery':\n disclaimerText = legalComments?.[dataType]?.find(obj => obj.lang === 'en')?.value\n ? legalComments?.[dataType]\n : 'optionsCardGalleryDisclaimer';\n break;\n }\n\n new Disclaimer(optionsCardsBox, disclaimerText, 'options-card__disclaimer');\n}\n\nconst setPlugToPreviewBlock = (cardBox) => {\n const block = cardBox.querySelector(`.${CardTypes.Options}-card__plans-box_preview`);\n if (!cardBox.querySelector(`.${CardTypes.Options}-card__plans-box_preview`).hasChildNodes()) {\n new BaseElement()\n .addClass(`${CardTypes.Options}-card__plans-box_preview-empty`)\n .innerHtml('Content will be soon')\n .appendTo(block);\n }\n}\n\nconst addActiveClassToBtnTogglersPlans = (buttons) => {\n const firstButton = buttons.children[0];\n if (!firstButton || !buttons)\n return;\n\n firstButton.classList.add('active');\n if (firstButton.getAttribute('data-type') === 'vantage' && !isCompareMode())\n vantageSwitcher?.show();\n\n if (!isMobile)\n setActiveLordIcon(firstButton.getAttribute('lord-icon-name'), buttons);\n}\n\nconst togglePlans = (cardBox) => {\n const btnBlock = cardBox.querySelector(`.${CardTypes.Options}-card__plans-box_buttons`);\n btnBlock.addEventListener('click', togglePlansHandler.bind(this, cardBox));\n};\n\nexport function getFloorAmenitiesFromCommonAssets (object) {\n if (typeof settingsData.commonAssets === 'object') {\n const amenities = settingsData.commonAssets[object.buildingEngineId]?.floorAmenities;\n if (amenities) {\n const data = amenities.find(floor => object.floorNum >= Number(floor.from) && object.floorNum <= Number(floor.to));\n if (data) {\n return data.assets.plan2D;\n }\n }\n }\n}\n\nconst addPlansData = (object) => {\n let settingArray = JSON.parse(JSON.stringify(config.property.buttons));\n const hideButtons = config.features.apartments.excludeButtons;\n if (!cardsData.cardMode.isAmenities) {\n const keyPlan = getFloorAmenitiesFromCommonAssets(object);\n\n if (keyPlan) {\n object.assets.keyPlan = keyPlan;\n settingArray.push({\n type: 'keyPlan',\n active: true\n });\n }\n }\n\n if (hideButtons) {\n settingArray = settingArray.filter(btn => !hideButtons.includes(btn.type));\n }\n\n const iconsArray = createIconsArray();\n let flag360;\n let plansArray = settingArray.map(data => {\n const dataConfig = iconsArray.find(prop => prop.type === data.type);\n const crmData = Boolean(object) ? object?.assets[dataConfig.crmTitle] : null;\n let obj = {\n type: data.type,\n crmData,\n icon: dataConfig.icon,\n isActive: data.active,\n };\n\n if (data.type === '360' && Boolean(obj.crmData))\n flag360 = true;\n\n return obj;\n });\n\n if (flag360)\n plansArray = plansArray.filter(btn => btn.type !== '360Sample');\n\n return plansArray;\n};\n\nconst addActionsWith2DPlan = (buttonText, btn) => {\n if (buttonText === '2D') {\n zoom();\n btn.classList.add('active');\n }\n};\n\nconst addPrintButton = (cardBox) => {\n if (cardBox.querySelector('.print') || isCompareMode())\n return;\n\n const plansBoxButtons = cardBox.querySelector(`.${CardTypes.Options}-card__plans-box_buttons`);\n const printBtn = new BaseElement('button')\n .addClass(`${CardTypes.Options}-card__plans-box_buttons-btn`, 'print')\n .event('click', print2DPlan.bind(this, cardBox))\n .appendTo(plansBoxButtons)\n .DOMElement;\n\n addCardButtonTooltip(printBtn,'Print');\n\n setLordIcon('print', printBtn, {\n stroke: 90,\n trigger: 'hover'\n });\n};\n\nexport function addCardButtonTooltip (element,key) {\n let type;\n\n switch (key) {\n case '360':\n type = 'Tours';\n break;\n case '2D':\n type = '2DPlan';\n break;\n case 'vantage':\n type = 'Vantage';\n break;\n case 'keyPlan':\n type = 'Key plan';\n break;\n default:\n type = key;\n break;\n\n }\n\n new BaseElement('span')\n .addClass(`${CardTypes.Options}-card__plans-box_buttons-tooltip`,'language-string')\n .addAttribute('data-dictionary',type)\n .innerHtml(changeLangToCurrent(type))\n .appendTo(element);\n}\n\nconst addPaintButton = (cardBox,url) => {\n const engineId = cardBox.getAttribute('data-engineid');\n let isFloorPlan = engineId.startsWith('zero');\n if ((cardBox.classList.contains('amenities-card') && !isFloorPlan) || cardBox.querySelector('.paint-2d') || config.features.apartments.isPaint === false)\n return;\n\n const plansBoxButtons = cardBox.querySelector(`.${CardTypes.Options}-card__plans-box_buttons`);\n const paintBtn = new BaseElement('button')\n .addClass(`${CardTypes.Options}-card__plans-box_buttons-btn`, 'paint-2d', isMobile ? 'icon-pencil' : null)\n .event('click', () => {\n const img = cardBox.querySelector('img');\n const imgURL = img.getAttribute('src');\n isFloorPlan = engineId.startsWith('zero') || img.classList.contains('plan-keyPlan');\n if (isFloorPlan) {\n const floor = Number(engineId.split('_')[1]);\n const crmDataOfFloor = Buildings.activeBuilding.apartments.find(obj => obj.userData.crm_data.floorNum === floor)?.userData.crm_data;\n analytics('floor_plan_paint',crmDataOfFloor);\n } else {\n const {crmDataOfFlat} = findSelectionAndCrmData(engineId);\n analytics('plan_paint',crmDataOfFlat);\n }\n new Paint(imgURL);\n })\n .appendTo(plansBoxButtons)\n .DOMElement;\n\n addCardButtonTooltip(paintBtn,'Draw');\n\n !isMobile && setLordIcon('edit2', paintBtn, {\n stroke: \"bold\",\n trigger: 'hover'\n });\n};\n\nconst print2DPlan = async (cardBox) => {\n const engineId = cardBox.getAttribute('data-engineid');\n let resize;\n if (engineId.split('_')[0] === 'zero') {\n resize = cardBox.querySelector('img.plan-2D').getAttribute('src');\n } else if (engineId) {\n const crm = settingsData.allCrmData.find(obj => obj.engineId === engineId);\n // resize = Cloudflare.resize(crm.assets.plan2D,{\n // height: 700\n // });\n const img = cardBox.querySelector('img');\n if (img.classList.contains('plan-2D')) {\n resize = crm.assets.plan2D;\n } else if (img.classList.contains('plan-keyPlan')) {\n resize = crm.assets.keyPlan;\n }\n}\n\n resize = resize.replace(/resize\\/image\\/width=\\d+\\//, '').replace(/\\?v=\\d+/, '');\n resize = Cloudflare.resize(resize,{\n height: 850\n });\n\n const {cdnRepository,projectFolder, features} = config;\n const logoUrl = `${cdnRepository}/${projectFolder}/resources/img/logo.png`;\n const imageExists = await checkImageExists(logoUrl);\n const logoUrlResized = imageExists ? Cloudflare.resize(logoUrl, { height: 100 }) : '';\n\n printJS({\n printable: decodeURI(resize),\n type: 'image',\n header: `

${config.features?.printHeader?.title || ''}

${imageExists ? `\"Logo\"` : ''}
`,\n style: '.printjs-custom-header { display: flex; flex-direction: row; justify-content: flex-end; align-items: center; gap: 20px; font-family: \"Arial\"; margin-bottom: 60px; margin-right: 20px;}'\n });\n\n // printJS(decodeURI(resize), 'image');\n}\n\nconst addBackButton = (parent) => {\n if (document.querySelector('.plan-back_btn'))\n return;\n\n const button = new BaseElement('button')\n .addClass(\n `${CardTypes.Options}-card__plans-box_buttons-btn`,\n 'search__round-button',\n 'plan-back_btn',\n 'icon-back',\n 'hidden'\n )\n .addAttribute('data-type', 'Back')\n .event('click', optionsCardBackButtonHandler)\n .appendTo(parent);\n\n appearPlansButtonAnimation(button.DOMElement);\n}\n\n/**\n * Handlers\n */\n\nasync function optionsCardBackButtonHandler() {\n hideAbsentInConfigUnitCardInfoPoints();\n projectMode.Pagination.paginate({source: 'cardsBackButton'});\n if (Vantages.isActive()) {\n Vantages.close(() => {\n allPlansButtonsDisappear();\n closeOptionsCard();\n if (isMobile) {\n if (settingsData.activeViewMode !== ViewMode.FloorPlan) {\n UnitCardClass.closeMobileCard();\n } else {\n Amenities.hide();\n }\n // components.mobileSearch.focusOnActiveCard();\n }\n });\n } else {\n setTimeout(() => {\n allPlansButtonsDisappear();\n closeOptionsCard();\n\n if (isMobile) {\n if (settingsData.activeViewMode !== ViewMode.FloorPlan)\n UnitCardClass.closeMobileCard();\n\n // components.mobileSearch.focusOnActiveCard();\n }\n\n\n\n }, 100);\n }\n}\n\n/**\n * Handlers\n */\n\nexport function closeHandler() {\n if (Vantages.isActive()) {\n Vantages.close(() => {\n closeOptionsCard();\n Amenities.createSwiper();\n if (settingsData.activeViewMode === ViewMode.FloorPlan)\n Amenities.hide();\n });\n } else {\n closeOptionsCard();\n }\n}\n\nexport const applyNowHandler = () => {\n if (settingsData.showApplyNow)\n applyNow(\n document.body,\n applyNowContent,\n false,\n ['print-btn', 'popup-btn.icon-close'],\n settingsData.lastClickedFlat\n );\n}\n\nexport const togglePlansHandler = (cardBox, e) => {\n console.warn('togglePlansHandler');\n e.stopPropagation();\n if (userPrevent()) return;\n if (cardsData.cardMode.isAmenities || (cardsData.cardMode.isAmenities && e.target.classList.contains('options-card__close-btn')) || e.target.closest('.traverse-switcher') || e.target.classList.contains('plan-back_btn') || e.target.closest('.vantage-mode-btn') || e.target.classList.contains('paint-2d'))\n return;\n\n if (e.target.closest('.vantage')) {\n vantageSwitcher ?\n vantageSwitcher.show() : null;\n } else {\n vantageSwitcher ?\n vantageSwitcher.hide() : null;\n }\n\n if (!e.target.classList.contains('traverse-switcher__control-button') && vantageSwitcher)\n vantageSwitcher.setCurrentFloorButtonInFocus();\n\n let target = e.target.tagName === 'BUTTON' ? e.target : e.target.parentElement;\n\n if (target.classList.contains('paint-2d') || !target.getAttribute('data-type')) return;\n\n const engineId = cardBox.getAttribute('data-engineid');\n if (engineId.split('_')[0] === 'zero')\n return;\n\n const {crmDataOfFlat} = findSelectionAndCrmData(engineId);\n const plansData = addPlansData(crmDataOfFlat);\n const sortingArray = plansData.reduce((arr, data) => {\n const elem = data.type === '360' ? data : null;\n elem ? arr.unshift(data) : arr.push(data);\n\n return arr;\n }, []);\n\n removeOptionsCardGallery();\n\n // const block = cardBox.querySelector(`.${CardTypes.Options}-card__plans-box_preview`);\n const block =\n e.target.closest(`.${CardTypes.Options}-card`).querySelector(`.${CardTypes.Options}-card__plans-box_preview`);\n block.removeAttribute('style');\n\n if (target === cardBox.querySelector(`.${CardTypes.Options}-card__plans-box_buttons`)\n || target.classList.contains('print')\n || target.classList.contains('download')\n || target.classList.contains('plan-back_btn'))\n return;\n\n if (Vantages.isActive()) {\n Vantages.close(undefined,engineId);\n }\n // Vantage.globalHandler('plan-box-element');\n\n const btnList = cardBox.querySelectorAll(`.${CardTypes.Options}-card__plans-box_buttons-btn`);\n createPlanPreviewElement( {cardBox, element: target, block, plansData: sortingArray} );\n\n if (!target.classList.contains('2D') && !target.classList.contains('keyPlan')) {\n cardBox.querySelector('.print') && cardBox.querySelector('.print').remove();\n cardBox.querySelector('.paint-2d') && cardBox.querySelector('.paint-2d').remove();\n cardBox.querySelector('.download') && cardBox.querySelector('.download').remove();\n cardBox.querySelector(`.${CardTypes.Options}-card__plans-box_preview`).removeAttribute('style');\n }\n\n btnList.forEach(btn => {\n if (btn.classList.contains('active')) {\n btn.classList.remove('active');\n if (!isMobile) {\n btn.removeAttribute('disabled');\n setActiveLordIcon(undefined, cardBox.querySelector(`.${CardTypes.Options}-card__plans-box_buttons`));\n }\n }\n });\n\n if (!isMobile)\n target.setAttribute('disabled', 'disabled');\n\n target.classList.add('active');\n\n if (!isMobile)\n setActiveLordIcon(target.getAttribute('lord-icon-name'), cardBox.querySelector(`.${CardTypes.Options}-card__plans-box_buttons`));\n}\n\nconst swipeRightDataHandler = (e) => {\n draggableOptionsCardBlock(e, 'close');\n}\n\nconst swipeLeftDataHandler = (e) => {\n draggableOptionsCardBlock(e, 'open');\n}\n\n/**\n * Remove all listeners\n */\n\nexport const removeOptionCardListeners = () => {\n const closeButton = document.querySelector(`.${CardTypes.Options}-card__close-btn`);\n closeButton?.removeEventListener('click', closeHandler);\n\n const applyNowButton = document.querySelector(`.${CardTypes.Options}-card__apply-now-btn`);\n applyNowButton?.removeEventListener('click', applyNowHandler);\n\n const btnBlock = document.querySelector(`.${CardTypes.Options}-card__plans-box_buttons`);\n btnBlock?.removeEventListener('click', togglePlansHandler);\n\n const cardBoxData = document.querySelector(`.${CardTypes.Options}-card__data`);\n if (cardBoxData) {\n cardBoxData.removeEventListener('swiped-right', swipeRightDataHandler);\n cardBoxData.removeEventListener('swiped-right', swipeLeftDataHandler);\n cardBoxData.removeEventListener('swiped-left', swipeLeftDataHandler);\n cardBoxData.removeEventListener('swiped-left', swipeRightDataHandler);\n cardBoxData.removeEventListener('click', draggableOptionsCardBlock);\n }\n\n const optionsCard = document.querySelector(`.${CardTypes.Options}-card`);\n if (isMobile && optionsCard)\n optionsCard.removeEventListener('scroll', scroll);\n}\n\nexport function renameTowerNameInOptionCard() {\n const card = document.querySelector(`.${CardTypes.Options}-card`);\n if (Buildings.getBuildingsInfoLength() <= 1 || !card)\n return;\n\n\n const towerName = card.querySelector('.card__tower-name');\n const activeBuildingTowerName = Buildings.getActiveBuilding().info.towerName;\n let name;\n\n Array.isArray(activeBuildingTowerName) ?\n name = activeBuildingTowerName.find(name => name.lang === getCurrentLang()).value:\n name = activeBuildingTowerName;\n\n !isStringHasChars(name) ?\n towerName.textContent = name + ' ' + changeLangToCurrent('building'):\n towerName.textContent = name;\n}\n\nexport function resizeOptionsCardGallery() {\n if (optionCardGallery !== null)\n optionCardGallery?.update();\n}\n\nexport function removeOptionsCardGallery() {\n if (optionCardGallery !== null) {\n optionCardGallery.remove();\n optionCardGallery = null;\n }\n}\n\nexport function changeOptionsCardGalleryDirection() {\n if (optionCardGallery)\n optionCardGallery.changeDirection();\n}\n","'use string'\n\nimport {\n cardsAnimations,\n cardsCloseMobile,\n cardsCloseWebDesktop,\n cardsFunctionsMobile,\n cardsFunctionsWeb,\n closeMultiCards,\n createUnitCard,\n disableArrowButtons,\n keyButtonState,\n multiCardsLogic, setUnitCardWrapperTemplateGridAreas,\n updateUnitCard,\n} from './unitCardFunctions';\nimport { Buildings, cardsData, isMobile, settingsData } from '../../../settings';\nimport {\n markSelectedApartments,\n removeSearchContainer,\n} from '../../menu/search/search';\nimport {\n findSelectionAndCrmData,\n isCompareMode,\n isOptionsCardOpened, setCSSVar,\n setParametersDependsOnCanvasArea,\n} from '../../../functions';\nimport { getCurrentLang } from '../../components/langSwitcher/langSwitcher';\nimport { Amenities } from '../../components/Amenities/Amenities';\nimport {setOptionsCardPlansBlockHeight} from \"../optionsCards\";\nimport {restorePreviouslyUnitCardPosition} from \"../cardsAnimation\";\n\nexport class UnitCardClass {\n static cards = [];\n\n constructor(object) {\n this.engineId = object.engineId;\n this.status = object.status;\n this.bmbyPropID = object.bmbyPropID;\n this.buildingEngineId = object.buildingEngineId;\n this.buildingName = object.buildingName;\n this.floor = object.floorNum;\n this.propNum = object.propNum;\n this.propType = object.propType;\n this.price = object.salePrice;\n this.infoPoints = {\n balconySize: object.balconySize,\n bathRooms: object.bathRooms,\n gardenSize: object.gardenSize,\n propType: object.propType,\n toilets: object.toilets,\n roomNum: object.roomNum,\n totalSpace: object.totalSpace,\n facing: object.facing,\n modelName: object.modelName,\n accessible: object.accessible,\n treatmentRoom: object.treatmentRoom,\n storages: Boolean(object?.storage) ? object.storage : object.storages,\n parkings: Boolean(object?.parking) ? object.parking : object.parkings\n };\n this.plans = {\n plan2D: object.assets.plan2D,\n plan2DVertical: object.assets.plan2DVertical,\n preview2D: object.assets.preview2D,\n tours360: object.assets.tours360,\n sample360: object.assets.sample360,\n vantage: object.assets.vantage,\n gallery: object.assets.gallery\n }\n }\n\n createCard() {\n const currentCard = UnitCardClass.findCard();\n if (UnitCardClass.cards.length <= 2 && cardsData.multiplyCards || !currentCard.html) {\n createUnitCard(this);\n } else {\n this.updateCard();\n }\n\n if (!isMobile) {\n const searchItem = document.querySelector(`li.search__result-item:not(.similar-item)[data-engineid=${this.engineId}]`);\n if (searchItem) {\n searchItem.classList.add('active');\n searchItem.classList.add('active-card');\n searchItem.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n });\n }\n }\n\n const search = document.querySelector('.search__container-main');\n search && search.setAttribute('mobile-state', 'minimized');\n setParametersDependsOnCanvasArea('building-switcher');\n setUnitCardWrapperTemplateGridAreas();\n setOptionsCardPlansBlockHeight();\n if (!isMobile)\n Amenities.hide();\n // IntersectionLegenda.updatePosition();\n }\n\n compareCardToBuilding() {\n const buildingId = this.engineId.split('_')[0];\n const activeBuilding = Buildings.getActiveBuilding();\n const keyPlanBtn = this.html.querySelector('.unit-card__button-key-plan');\n const selection = findSelectionAndCrmData(this.engineId).selectedMesh;\n\n if (activeBuilding.name === buildingId) {\n keyPlanBtn && keyPlanBtn.removeAttribute('disabled');\n this.html.classList.remove('card-from-another-building');\n selection.userData.isClicked = true;\n const internal = setInterval(() => {\n if (!settingsData.activeModeSwitching) {\n clearInterval(internal);\n setTimeout(() => {\n markSelectedApartments(this.engineId);\n },500);\n }\n },100)\n } else {\n this.html.classList.add('card-from-another-building');\n selection.userData.isClicked = false;\n keyPlanBtn && keyPlanBtn.setAttribute('disabled',true);\n }\n }\n\n async updateCard() {\n // const currentCard = UnitCardClass.findCard();\n if (isMobile) {\n // await closeUnitCardAnimation(currentCard.html, 'update');\n updateUnitCard(this);\n // await unitCardOpenAnimation();\n } else {\n const currentActiveCard = document.querySelector('.search__result-item.active.active-card');\n if (currentActiveCard)\n currentActiveCard.classList.remove('active', 'active-card');\n\n updateUnitCard(this);\n }\n }\n\n setNode(node) {\n this.html = node;\n }\n\n static findCard(id, className) {\n if (className)\n return UnitCardClass.cards.find(card => card.html.classList.contains(className));\n\n if (!id)\n return UnitCardClass.cards[0];\n\n return UnitCardClass.cards.find(card => card.engineId === id);\n }\n\n setAnimationsToCard() {\n cardsAnimations.apply(this);\n }\n\n setFunctionsToWebCard() {\n if (isMobile) return;\n cardsFunctionsWeb.apply(this)\n }\n\n setFunctionsToMobileCard() {\n if (!isMobile) return;\n cardsFunctionsMobile();\n }\n\n static async closeMobileCard() {\n if (UnitCardClass.cards.length < 1)\n return;\n\n await cardsCloseMobile();\n setParametersDependsOnCanvasArea('building-switcher');\n }\n\n closeWebOrDesktopCard(card, id) {\n cardsCloseWebDesktop(card, id);\n }\n\n setFunctionsToMultiCards(card) {\n multiCardsLogic(card)\n }\n\n setKeyPlanButtonState(card) {\n keyButtonState(card);\n }\n\n static changeTowerNameWhenLanguageSwitching(){\n if (!UnitCardClass.cards.length) return;\n\n const activeBuildingTowerName = Buildings.getActiveBuilding().info.towerName;\n\n let name;\n\n if (Array.isArray(activeBuildingTowerName)){\n name = activeBuildingTowerName.find(name => name.lang === getCurrentLang()).value;\n } else {\n name = activeBuildingTowerName;\n }\n\n UnitCardClass.cards.forEach(card =>{\n const cardTowerName = card.html.querySelector('.card__tower-name');\n if (cardTowerName)\n cardTowerName.textContent = name;\n });\n }\n\n static activateMutliCardsMode(target) {\n cardsData.multiplyCards = true;\n const card = UnitCardClass.findCard();\n card.html.classList.add('active');\n target.classList.add('active');\n\n disableArrowButtons();\n }\n\n static deactivateMutliCardsMode(target) {\n cardsData.multiplyCards = false;\n const cardActive = UnitCardClass.findCard(false, 'active');\n const cardNonActive = UnitCardClass.findCard(false, 'non-active');\n target ? target.classList.remove('active') : null;\n cardActive ? cardActive.html.classList.remove('active') : null;\n\n disableArrowButtons();\n\n if (cardNonActive) {\n const cardNonActiveId = cardNonActive.html.getAttribute('data-engineid');\n cardNonActive.closeWebOrDesktopCard(cardNonActive.html, cardNonActiveId);\n }\n }\n\n static closeMultipleCards() {\n closeMultiCards();\n }\n\n static applyOptionsCardRules() {\n if (isCompareMode() || UnitCardClass.cards.length > 1)\n return;\n\n const currentCard = UnitCardClass.findCard();\n if (currentCard) {\n setTimeout(() => {\n currentCard.html.style.paddingBottom = 0;\n }, 100);\n }\n }\n\n static setUnitCardHeightIntoCssVar() {\n const unitCard = UnitCardClass.findCard();\n let unitCardHeight;\n if (!unitCard) {\n unitCardHeight = 0;\n } else {\n const currentCardElement = unitCard.html;\n unitCardHeight = currentCardElement.getBoundingClientRect().height;\n }\n // document.querySelector(':root').style.setProperty('--unitCardHeight', `${unitCardHeight}px`);\n setCSSVar('--unitCardHeight', `${unitCardHeight}px`);\n }\n\n static clearInlineStyles() {\n const currentCard = UnitCardClass.findCard();\n if (currentCard)\n currentCard.html.removeAttribute('style');\n }\n\n static createCard(crmData) {\n const newCard = new UnitCardClass(crmData);\n UnitCardClass.cards.push(newCard);\n newCard.createCard();\n }\n\n static changeCurrentCardPosition() {\n if (!isMobile || !UnitCardClass.findCard())\n return;\n\n const currentCardHtmlElement = UnitCardClass.findCard().html;\n if (isOptionsCardOpened()) {\n setTimeout(() => {\n currentCardHtmlElement.style.marginBottom = 0;\n currentCardHtmlElement.style.marginRight = 0;\n }, 100);\n }\n }\n\n static isAnyCardOpened() {\n return Boolean(UnitCardClass.cards.length > 0);\n }\n}\n","'use string';\n\nimport {\n enableSwitcherBtns,\n findSelectionAndCrmData,\n flatClick, getFieldsFromAPI, isBetaResourcesFolder, isCompareMode, isNumeric, isRoofExists,\n makeStringNumbersStrong,\n moveAroundTheFloors,\n numberWithCommas,\n rotation_to_flat, setCSSVar,\n userPrevent,\n} from '../../../functions';\nimport { CardTypes, ViewMode } from '../../../common';\nimport {\n Buildings,\n cardsData, components,\n GSAPAnimationMixer,\n isDesktop,\n isMobile, isNoMenu,\n projectMode,\n settingsData,\n UIRoot\n} from '../../../settings';\nimport {addFavoritesBlock, addPriceBlock, applyTowerNameNamingRule} from \"../cardsFunctions\";\nimport {moveElements, rightNavMenuZIndexChange} from \"../../menu/navigation/right-nav-bar\";\nimport {\n closeUnitCardAnimation,\n createUnitCardAnimation,\n dragUnitCard,\n openAndCloseMobileOptionsCard, restorePreviouslyUnitCardPosition,\n unitCardOpenAnimation\n} from \"../cardsAnimation\";\nimport {openOptionsCard, setOptionsCardPlansBlockHeight} from '../optionsCards';\nimport { Prepayment } from \"../../components/Prepayment/Prepayment\";\nimport {\n changeLangToCurrent,\n getCurrentLang,\n getCurrentLangDirection,\n} from '../../components/langSwitcher/langSwitcher';\nimport {dataArrayOfFlat, facingDictionary} from \"../cardsConfig\";\nimport {\n changeActiveCardWhenBuildingClick, openSearchHandler,\n toggleResultsList,\n} from '../../menu/search/search';\nimport {hideTooltip} from \"../../components/flatTooltip/flatTooltip\";\nimport {isOrbitControlsEnabled} from \"../../controls/orbitControls\";\nimport {bombButtonInitActionHandler} from \"../../controls/destroyBuilding\";\nimport { renderUpdateValuesOnDemand } from '../../../app';\nimport {SwipeScript} from \"../../controls/swipe\";\nimport {UnitCardClass} from \"./UnitCardClass\";\nimport {selectionBoxesSetStatusColor} from \"../../threejs/raycast\";\nimport {\n createCompareCardsButton,\n updateCompareButtonOffset,\n} from '../../menu/navigation/compareButton';\nimport {setLordIcon} from \"../../../lordicon\";\nimport { Amenities } from '../../components/Amenities/Amenities';\nimport { analytics } from '../../analytics/analytics';\nimport { SocialMedia } from '../../components/share/Share';\nimport {Button} from \"../../interfaces/buttons/Button\";\nimport {ExploreButton} from \"../../interfaces/buttons/Specific/ExploreButton\";\nimport {CustomerContactNow} from \"../../menu/contactUs/CustomerContactNow\";\nimport {BaseElement} from \"../../interfaces/BaseElement\";\nimport { Cloudflare } from '../../api/Cloudflare';\nimport * as PANOLENS from \"panolens\";\nimport gsap from 'gsap';\nimport { BmbyMode } from '../../mode/BmbyMode';\nimport { WebGLRenderer } from 'three';\n\nexport function createUnitCard(data) {\n const prevCard = UnitCardClass.findCard();\n Panorama.disableAll();\n\n if (prevCard?.html && cardsData.multiplyCards) {\n prevCard.html.classList.remove('active');\n prevCard.html.classList.add('non-active');\n }\n\n const card = new BaseElement()\n .addClass(`${CardTypes.Unit}-card`, 'card', 'non-canvas', !isMobile && (settingsData.activeViewMode === ViewMode.FloorPlan) ? 'unit-card--small' : null)\n .addAttribute('data-engineId', data.engineId)\n .appendTo(UIRoot, 'beforeend')\n .DOMElement;\n\n analytics('unit card',data);\n data.setNode(card);\n data.setFunctionsToMultiCards(card);\n data.setFunctionsToMobileCard();\n setDataToUnitCard(card, data);\n data.setFunctionsToWebCard();\n\n if (UnitCardClass.cards.length > 1 && cardsData.multiplyCards)\n UnitCardClass.cards.forEach(card => { card.html.classList.add('unit-card--small') });\n\n data.setAnimationsToCard();\n\n if (UnitCardClass.cards.length > 1 && cardsData.multiplyCards)\n createCompareCardsButton();\n\n if (settingsData.buildingDestroyed && !cardsData.multiplyCards)\n card.querySelector('.unit-card__compare-btn').click();\n\n // document.querySelector(':root').style.setProperty('--left-bar-bottom-move', \"264px\");\n // setCSSVar('--left-bar-bottom-move', '264px')\n\n return card;\n}\n\nexport const updateUnitCard = (data) => {\n let card = UnitCardClass.findCard();\n\n if (cardsData.multiplyCards) {\n card = UnitCardClass.findCard(false, 'active');\n\n // if (settingsData.buildingDestroyed)\n // data.setKeyPlanButtonState(UnitCardClass.findCard(false, 'non-active').html);\n }\n UnitCardClass.cards = UnitCardClass.cards.filter(cardInst => {\n const id = card.html.getAttribute('data-engineid');\n projectMode.Cylinder.cylinderBuildingLabels.markLabel(id,'close');\n return cardInst.engineId !== id;\n });\n\n analytics('unit card',data);\n card.html.setAttribute('data-engineId', `${data.engineId}`);\n card.html.innerHTML = '';\n\n // if (isMobile) {\n // const spoiler = new BaseElement()\n // .addClass(`${CardTypes.Unit}-card__spoiler`)\n // .appendTo(card.html);\n //\n // new Button()\n // .addClass(\n // `${CardTypes.Unit}-card__back-button`,\n // 'button',\n // getCurrentLangDirection() === 'rtl' ? 'icon-right1' : 'icon-left1',\n // 'no-select'\n // )\n // .event('click', spoilerBackButtonClickHandler)\n // .appendTo(spoiler.DOMElement);\n // }\n\n data.setNode(card.html);\n data.setFunctionsToMobileCard();\n setDataToUnitCard(card.html, data);\n data.setFunctionsToWebCard();\n data.setFunctionsToMobileCard();\n data.setFunctionsToMultiCards(card.html);\n\n return card.html;\n};\n\nexport function updateUnitCardProps (unitCardScope,props) {\n let apartmentProps;\n if (props) {\n apartmentProps = props;\n } else {\n apartmentProps = findSelectionAndCrmData(unitCardScope.engineId).crmDataOfFlat;\n }\n\n unitCardScope.price = apartmentProps.salePrice;\n unitCardScope.status = apartmentProps.status;\n unitCardScope.html.innerHTML = '';\n unitCardScope.setNode(unitCardScope.html);\n unitCardScope.setFunctionsToMobileCard();\n setDataToUnitCard(unitCardScope.html, unitCardScope);\n unitCardScope.setFunctionsToWebCard();\n unitCardScope.setFunctionsToMobileCard();\n unitCardScope.setFunctionsToMultiCards(unitCardScope.html);\n}\n\nconst setDataToUnitCard = (card, data) => {\n const previewPicBlock = !isMobile && new BaseElement()\n .addClass(`${CardTypes.Unit}-card__preview-block`, 'card__preview-block')\n .appendTo(card)\n .DOMElement;\n const cardBoxWrapper = new BaseElement()\n .addClass(`${CardTypes.Unit}-card__wrapper`, 'card__wrapper')\n .appendTo(card)\n .DOMElement;\n\n createHeader(data, cardBoxWrapper);\n addInfopointsBlock(data.infoPoints, cardBoxWrapper);\n\n setImageType(data, previewPicBlock, CardTypes.Unit);\n\n addAdditionalButtons({card, data, cardType: CardTypes.Unit});\n\n if (!isMobile) {\n new Button()\n .addClass(`${CardTypes.Unit}-card__close-button`, 'close-button-cross')\n .event('click', closeHandler)\n .appendTo(card);\n createCardSwitchers(data, card);\n addButtons(cardBoxWrapper, data);\n clickToPreview2D(previewPicBlock, data);\n disableArrowButtons();\n }\n\n data.html = card;\n};\n\nexport function setImageType(data, previewPicBlock, cardType) {\n let previewUrl = '';\n if (cardType === CardTypes.MobileCard)\n data.plans = data.assets;\n\n if (data.plans.gallery?.length) {\n previewUrl = '';\n } else if (data.plans.tours360) {\n previewUrl = data.plans.tours360;\n } else if (data.plans.sample360) {\n previewUrl = data.plans.sample360;\n } else {\n const randomTour = Buildings.getActiveBuilding()\n .getInfo()?.crm_data.filter(el => el.assets.tours360 && !el.assets.gallery.length) || [];\n if (randomTour.length)\n previewUrl = randomTour[0].assets.tours360;\n }\n\n if (previewPicBlock) {\n if (!isMobile && config.features.apartments?.panorama && isTourHasCorrectDomain(previewUrl)) {\n setPanoramaToUnitCardPreview(previewUrl, previewPicBlock);\n } else if (config.features.apartments?.vantagePreview && !data.plans.preview2D) {\n const vantageFolder = isBetaResourcesFolder() ? 'vantages3D_beta' : 'vantages3D';\n const previewUrl = `${config.cdnRepository}/${config.projectFolder}/panocontent/${vantageFolder}/${data.buildingEngineId}/${data.engineId}/preview.jpg`;\n const scaledUrl = Cloudflare.resize(previewUrl, {width: 276});\n const previewPicElement = new BaseElement('img')\n .addClass(`${cardType}-card__preview-block_pic`, 'card__preview-block_pic')\n .appendTo(previewPicBlock)\n .addAttribute('src', scaledUrl)\n .event('error', () => addPreview2D(data.plans, previewPicElement))\n .DOMElement;\n } else {\n const previewPicElement = new BaseElement('img')\n .addClass(`${cardType}-card__preview-block_pic`, 'card__preview-block_pic')\n .appendTo(previewPicBlock)\n .DOMElement;\n addPreview2D(data.plans, previewPicElement);\n }\n }\n}\n\nexport const addAdditionalButtons = (args) => {\n if (isCompareMode() || cardsData.cardMode.isAmenities)\n return;\n\n const {card, data, cardType} = args;\n\n const styleClassPrefix = cardType === `${CardTypes.Similar}`\n ? `${CardTypes.Similar}-card`\n : `${cardType}-card`;\n const buttonsParent = isMobile && (cardType === CardTypes.Options || cardType === CardTypes.Unit)\n ? document.querySelector(`.${cardType}-card__spoiler`)\n : card.querySelector(`.${styleClassPrefix}__title-box`);\n const additionalButtonsWrapper = new BaseElement()\n .addClass(`${styleClassPrefix}__additional-buttons-wrapper`, 'card__additional-buttons-wrapper')\n .appendTo(buttonsParent)\n .DOMElement;\n\n new SocialMedia(additionalButtonsWrapper,'apt')\n .addClass(`${styleClassPrefix}__social-media-btn`);\n if (config.features.apartments.isFavorite)\n addFavoritesBlock(data, additionalButtonsWrapper, cardType);\n if (!isMobile && cardType === 'unit')\n addCompareButtonToUnitCard(additionalButtonsWrapper);\n addAdditionalButtonClassToWrapperChildren(cardType);\n};\n\nconst addAdditionalButtonClassToWrapperChildren = (cardType) => {\n const buttonsWrappers = [...document.querySelectorAll(`.${cardType}-card__additional-buttons-wrapper`)];\n if (!Boolean(buttonsWrappers))\n return;\n\n for (let wrapper of buttonsWrappers) {\n const wrapperChildrenCatalogue = [...wrapper.children];\n for (let child of wrapperChildrenCatalogue) {\n child.classList.add(`${cardType}-card__additional-button`, 'card__additional-button');\n }\n }\n}\n\nfunction setPanoramaToUnitCardPreview(url, parent) {\n if (isMobile)\n return;\n\n const thumbnailNameFileName = '/thumbnail.png';\n const tour360url = url.split('/index');\n tour360url[1] = thumbnailNameFileName;\n const panoramaUrl = tour360url.join('');\n let panorama = Panorama.getScope();\n\n if (panorama && !cardsData.multiplyCards) {\n panorama.setContainer(parent);\n panorama.load(panoramaUrl);\n } else if (cardsData.multiplyCards && Panorama.getScope(1)) {\n panorama = Panorama.findEmptyScope();\n panorama.setContainer(parent);\n panorama.load(panoramaUrl);\n } else {\n new Panorama(parent,panoramaUrl);\n }\n}\n\n\n\nfunction isTourHasCorrectDomain(tourUrl) {\n if (!tourUrl) return false;\n const tourUrlDomain = new URL(tourUrl).hostname;\n\n return tourUrlDomain === 'dreamsimages.bmby.com';\n}\n\n/**\n * HEADER\n */\n\nexport const createHeader = (...props) => {\n const [data, cardBoxWrapper, position = 'afterbegin'] = props;\n const cardBoxHeader = new BaseElement()\n .addClass(\n `${CardTypes.Unit}-card__header`,\n 'card__header',\n `${settingsData.isConferenceHost && \"conference\"}`)\n .appendTo(cardBoxWrapper, position)\n .DOMElement;\n const titleBox = new BaseElement()\n .addClass(`${CardTypes.Unit}-card__title-box`, 'card__title-box')\n .appendTo(cardBoxHeader)\n .DOMElement;\n addTitleBlock(data, titleBox);\n const subTitleBox = new BaseElement()\n .addClass(`${CardTypes.Unit}-card__subtitle-box`, 'card__subtitle-box')\n .appendTo(isMobile ? titleBox : cardBoxHeader)\n .DOMElement;\n\n if (isMobile)\n new ExploreButton('unit-card').appendTo(cardBoxWrapper);\n\n if (Buildings.getBuildingsInfoLength() > 1)\n addTowerName(subTitleBox,data);\n \n if (!Buildings.isOneFloorBuilding(data.buildingEngineId))\n addFloor(data.floor, subTitleBox);\n addPriceBlock(data.engineId, cardBoxHeader);\n};\n\nconst addTitleBlock = (props, cardBox) => {\n const titleBlock = new BaseElement('h3')\n .addClass(`${CardTypes.Unit}-card__title`, 'card__title')\n .appendTo(cardBox)\n .DOMElement;\n const flatNameWrapper = new BaseElement()\n .addClass(`${CardTypes.Unit}-card__flat-name-wrapper`, 'card__flat-name-wrapper')\n .appendTo(\n isMobile\n ? document.querySelector(`.${CardTypes.Unit}-card__spoiler`)\n : titleBlock\n ).DOMElement;\n new BaseElement('span')\n .addClass(`${CardTypes.Unit}-card__title-flat-name`, 'language-string', 'card__title-flat-name')\n .addAttribute('data-dictionary', `${getPropType(props.propType)}`)\n .innerHtml(`${changeLangToCurrent(getPropType(props.propType))}`)\n .appendTo(flatNameWrapper, 'beforeend')\n .DOMElement;\n new BaseElement('span')\n .addClass(`${CardTypes.Unit}-card__title-flat-number`, 'card__title-flat-number')\n .innerHtml(props.propNum)\n .appendTo(flatNameWrapper);\n};\n\nexport const getPropType = (propType) => {\n switch (propType) {\n case 'Commercial':\n return 'Comm.';\n case 'Villa':\n return 'Villa';\n default:\n return 'Apt.';\n }\n};\n\nconst addFloor = (floorNum, parent) => {\n const towerNameElement = new BaseElement()\n .addClass(`${CardTypes.Unit}-card__floor-number`, `card__floor-number`)\n .appendTo(parent)\n .DOMElement;\n\n const isGroundFloor = settingsData.groundFloor.isActive && (parseInt(settingsData.groundFloor.floor) === parseInt(floorNum));\n const towerNameText = isMobile ? 'at floor' : 'floor';\n const floorElement = new BaseElement('span')\n .addClass('language-string', )\n .addAttribute('data-dictionary', towerNameText)\n .innerHtml(changeLangToCurrent(towerNameText) + ' ')\n .appendTo(towerNameElement, 'beforeend');\n\n if (isGroundFloor) {\n const fullLabel = settingsData.groundFloor.fullLabel;\n floorElement\n .addAttribute('data-dictionary', fullLabel)\n .innerHtml(changeLangToCurrent(fullLabel));\n } else {\n new BaseElement('span')\n .addClass(`${CardTypes.Unit}-card__floor-number_num`, 'card__floor-number_num', isGroundFloor ? 'hidden' : null)\n .innerHtml(floorNum)\n .appendTo(towerNameElement);\n }\n};\n\nconst addTowerName = (parent,data) => {\n let towerName;\n let building;\n\n if ((projectMode.LiteMode.isActive() && (projectMode.LiteMode.modeIs('picture') || projectMode.LiteMode.modeIs('empty'))) || config.features.privateHouseMode){\n building = Buildings.getBuilding(data.engineId.split('_')[0]);\n towerName = building.info.towerName;\n } else {\n building = Buildings.getActiveBuilding();\n towerName = building.info.towerName;\n }\n \n // if (config.features.privateHouseMode && Buildings.isOneFloorBuilding(data.engineId))\n // return;\n\n if (Array.isArray(towerName))\n towerName = towerName.find(el => el.lang === getCurrentLang()).value;\n\n // const towerNameElement = new BaseElement()\n // .addClass(`${CardTypes.Unit}-card__tower-name`, `card__tower-name`)\n // .appendTo(parent);\n //\n // if (towerName.split(' ').length < 2) {\n // new BaseElement('span')\n // .addClass(`${CardTypes.Unit}-card__tower-name_num`, 'language-string')\n // .addAttribute('data-dictionary', 'building')\n // .innerHtml(changeLangToCurrent('building'))\n // .appendTo(towerNameElement.DOMElement, 'beforeend')\n //\n // new BaseElement('span')\n // .addClass(`${CardTypes.Unit}-card__tower-name_title`)\n // .innerHtml(towerName)\n // .appendTo(towerNameElement.DOMElement);\n // } else {\n // towerNameElement.innerHtml(towerName);\n // }\n // towerNameElement.innerHtml(makeStringNumbersStrong(towerNameElement.DOMElement.innerHTML));\n\n applyTowerNameNamingRule(towerName, parent, CardTypes.Unit);\n\n if (!b.isOneFloorBuilding(data.buildingEngineId))\n new BaseElement()\n .addClass('subtitle-separator')\n .appendTo(parent);\n};\n\n/**\n * INFO-POINTS\n */\n\nconst addInfopointsBlock = (...props) => {\n if (cardsData.cardMode.isAmenities)\n return;\n\n const [infoPoints, cardBox] = props;\n const infoPointsBlock = new BaseElement()\n .addClass(`${CardTypes.Unit}-card__info-points`, 'card__info-points')\n .appendTo(cardBox);\n if (isMobile)\n infoPointsBlock.event('click', infoPointsHandler);\n\n const regExp = /([A-Za-z])\\w+/g;\n const measurement = config.localization.area ? config.localization.area : \"m2\";\n const dictionary = facingDictionary();\n const cardsInfo = dataArrayOfFlat(infoPoints);\n const infoPointsData = cardsInfo.filter(data => {\n if (getFieldsFromAPI.small().indexOf(data.name) !== -1)\n return data;\n // if (config.features.apartments.aptCardFieldsCntOptions.indexOf(data.name) !== -1)\n // return data;\n });\n\n infoPointsData.forEach(data => {\n let value;\n\n data.exceptions\n ? value = data.exceptions[data.data]\n : value = data.data;\n\n if (parseInt(value) === 0 || value === undefined)\n return;\n\n if (data.name === 'storages' && Array.isArray(value)) {\n const valueCopy = [ ...value ];\n value = 0;\n valueCopy.forEach(item => {\n value += item.size;\n });\n }\n\n if (parseInt(value) === 0)\n return;\n\n const cardContentBlock = new BaseElement()\n .addClass(`${CardTypes.Unit}-card__info-points-block`, 'card__info-points-block')\n .addAttribute('data-block-type', data.name)\n .appendTo(infoPointsBlock.DOMElement);\n\n const cardContentWrapper = new BaseElement()\n .addClass(`${CardTypes.Unit}-card__info-points-wrapper`, 'card__info-points-block-wrapper')\n .appendTo(cardContentBlock.DOMElement);\n\n const cardModelName = new BaseElement()\n .addClass(\n `${CardTypes.Unit}-card__info-points-block_data`,\n 'card__info-points-block_data',\n `${data.icon}`\n )\n .appendTo(cardContentWrapper.DOMElement);\n\n const cardModelNameText = new BaseElement('span')\n .addClass(\n `${CardTypes.Unit}-card__info-points-block_data_text`,\n 'card__info-points-block_data_text',\n isNumeric(value) ? 'translate-number' : 'language-string')\n .addAttribute('data-dictionary', value)\n .innerHtml(isNumeric(value) ? numberWithCommas(value) : changeLangToCurrent(value))\n .appendTo(cardModelName.DOMElement, 'beforeend')\n if (regExp.test(value))\n cardModelNameText.addStyle('direction', 'ltr');\n\n const contentSubtext = new BaseElement()\n .addClass(`${CardTypes.Unit}-card__info-points-block_subtitle`, 'card__info-points-block_subtitle')\n .addInnerHtml(`\n \n ${changeLangToCurrent(data.name).toLowerCase()}\n `)\n .appendTo(cardContentWrapper.DOMElement);\n\n switch(data.name) {\n case 'area':\n case 'balcony size':\n case 'roof balcony size':\n case 'covered balcony size':\n case 'basement size':\n case 'storages':\n contentSubtext.addInnerHtml(`,`);\n\n new BaseElement('span')\n .addClass('language-string', 'card__info-points-block_subtitle-measurement', 'meters')\n .addAttribute('data-dictionary', measurement)\n .addInnerHtml(changeLangToCurrent(measurement))\n .appendTo(contentSubtext.DOMElement, 'beforeend');\n break;\n case 'exposure':\n if (value.length === 0) {\n cardContentBlock.remove()\n return;\n }\n\n cardModelNameText.remove();\n\n value.forEach(element => {\n for (let key in dictionary) {\n if (element === key) {\n new BaseElement('span')\n .addClass(\n `${CardTypes.Unit}-card__info-points-block_data_text`,\n 'card__info-points-block_data_text',\n 'language-string')\n .addAttribute('data-dictionary',dictionary[key].en + 'Short')\n .innerHtml(changeLangToCurrent(dictionary[key].en + 'Short'))\n .appendTo(cardModelName.DOMElement, 'beforeend');\n }\n }\n });\n break;\n case 'accessible':\n case 'treatmentRoom':\n cardModelNameText\n .innerHtml('')\n .addClass('icon-check-mark');\n break;\n // case 'storages':\n // if (Array.isArray(value)) {\n // if (value.length === 0) {\n // cardContentBlock.remove()\n // return;\n // }\n //\n // const valueCopy = [ ...value ];\n // value = 0;\n // valueCopy.forEach(item => {\n // value += item.size;\n // });\n // }\n //\n // cardModelNameText.innerHtml(value);\n // break;\n case 'parkings':\n if (Array.isArray(value)) {\n if (value.length === 0) {\n cardContentBlock.remove()\n return;\n }\n\n value = value.length;\n }\n\n cardModelNameText.innerHtml(value);\n\n break;\n }\n });\n\n hideAbsentInConfigUnitCardInfoPoints();\n setInfoPointsLayoutDependsOnChildren(infoPointsBlock.DOMElement);\n};\n\nexport const setInfoPointsLayoutDependsOnChildren = (infoPoints) => {\n const visibleInfoPoints = [...infoPoints.querySelectorAll('.card__info-points-block:not(.hidden)')];\n visibleInfoPoints.length >= 4 ?\n infoPoints.classList.add('card__info-points--narrow'):\n infoPoints.classList.remove('card__info-points--narrow');\n};\n\nexport const hideAbsentInConfigUnitCardInfoPoints = () => {\n if (cardsData.cardMode.isAmenities)\n return;\n\n for (let card of UnitCardClass.cards) {\n const infoPointsBlocks =\n card.html.querySelector(`.${CardTypes.Unit}-card__info-points`).children;\n // hideNeededInfoPoints(infoPointsBlocks);\n for (let block of infoPointsBlocks) {\n if (!getFieldsFromAPI.small().includes(block.getAttribute('data-block-type')))\n block.classList.add('hidden');\n }\n }\n\n // function hideNeededInfoPoints(infoPointsBlocks) {\n // for (let block of infoPointsBlocks) {\n // if (!config.features.apartments.aptCardFieldsCntUnit.includes(block.getAttribute('data-block-type')))\n // block.classList.add('hidden');\n // }\n // }\n}\n\nexport const showPresentInConfigUnitCardInfoPointsInsideApt = () => {\n const infoPointsBlocks = UnitCardClass.findCard().html.querySelector(`.${CardTypes.Unit}-card__info-points`).children;\n for (let block of infoPointsBlocks) {\n if (config.features.apartments.aptCardFieldsCntOptions.includes(block.getAttribute('data-block-type')))\n block.classList.remove('hidden');\n }\n}\n\n/**\n * PREVIEW\n */\n\nconst addPreview2D = (data, pic) => {\n const width = 270;\n const quality = 100;\n if (!data?.preview2D) {\n if (Array.isArray(data?.gallery) && data?.gallery.length){\n const scaled = Cloudflare.resize(data.gallery[0],{\n width,\n quality\n });\n pic.setAttribute('src',scaled);\n } else if (config.crmProjectSettings.property.settings.previewImg) {\n const scaled = Cloudflare.resize(config.crmProjectSettings.property.settings.previewImg,\n {\n width,\n quality\n });\n pic.setAttribute('src', `${scaled}`);\n } else {\n pic.setAttribute('src', 'img/holder.jpg');\n }\n } else {\n const scaled = Cloudflare.resize(data.preview2D,\n {\n width,\n quality\n });\n pic.setAttribute('src', scaled);\n }\n}\n\n\n\n\nconst clickToPreview2D = (previewBlock, data) => {\n const accessToEnter = !cardsData.cardMode.isUnavailable ? true : config.crmProjectSettings.property.settings.enterNotForSale;\n\n if (!accessToEnter) return;\n\n // const icon = data.plans.tours360 ? 'icon-360' : 'icon-plan-type';\n // previewBlock.classList.add(icon);\n\n previewBlock.addEventListener('click', previewClickHandler);\n};\n\n/**\n * BUTTONS\n */\n\nconst addButtons = (cardBox, data) => {\n const buttonBlock = new BaseElement()\n .addClass(`${CardTypes.Unit}-card__button`, 'card__button')\n .appendTo(cardBox);\n\n const iconKeyPlan = 'icon-floorplan';\n const keyPlanButtonValue = 'Key plan';\n let iconFloorPlan = data.plans.tours360 ? 'icon-360' : 'icon-plan-type';\n const accessToEnter = !cardsData.cardMode.isUnavailable\n ? true\n : config.crmProjectSettings.property.settings.enterNotForSale;\n\n if (projectMode.LiteMode.isActive() && (projectMode.LiteMode.modeIs('picture') || projectMode.LiteMode.modeIs('empty')))\n buttonBlock.addClass('key-plan__hide');\n\n if (BmbyMode.active) {\n addBmbyEditButton(data, buttonBlock.DOMElement, CardTypes.Unit, 'beforeend');\n }\n\n if (accessToEnter) {\n new Button(BmbyMode.active?\"Plans\":\"Explore\")\n .addClass(\n `${CardTypes.Unit}-card__button-floor-plan`,\n iconFloorPlan,\n 'cards-buttons',\n 'button')\n .event('click', floorPlanHandler)\n .appendTo(buttonBlock.DOMElement, 'beforeend')\n }\n\n const keyPlanButton = new Button(keyPlanButtonValue)\n .addClass(\n `${CardTypes.Unit}-card__button-key-plan`,\n iconKeyPlan,\n 'cards-buttons',\n 'button')\n .event('click', keyPlanHandlerThrottling)\n .appendTo(buttonBlock.DOMElement, 'beforeend');\n\n const hasKeyPlan = Boolean(\n settingsData.commonAssets[Buildings.getActiveBuilding().name]\n ?.floorAmenities.filter(group => {\n parseInt(group.from) >= parseInt(data.floor) && parseInt(group.to) <= parseInt(data.floor)\n }));\n\n if ((config.features?.hideKeyPlanButton || !isRoofExists()) || (config.features?.plainKeyPlan && !hasKeyPlan))\n keyPlanButton.addClass('hidden');\n};\n\nexport function addBmbyEditButton (data,parent,cardType,position,additionalClasses = []) {\n if (BmbyMode.active) {\n new Button('Prop card')\n .addClass(`${cardType}-card__button-floor-plan`, 'bmby-edit', 'cards-buttons','button',`${cardType}-card__button-bmby-btn`,...additionalClasses)\n .event('click',() => {\n const message = {\n action: 'EditProperty',\n data: data.bmbyPropID\n };\n window.parent.postMessage(JSON.stringify(message),\"*\");\n })\n .appendTo(parent, position)\n }\n}\n\nexport const addCompareButtonToUnitCard = (parent) => {\n const button = new Button()\n .addClass(\n `${CardTypes.Unit}-card__compare-btn`,\n 'button',\n 'compare-btn',\n cardsData.multiplyCards && 'active')\n .event('click', compareBtnUnitCardHandler, {capture: true})\n .appendTo(parent)\n\n setLordIcon('compare', button.DOMElement, {\n trigger: 'hover',\n delay: 0,\n stroke: 90\n });\n};\n\n/**\n * SWITCH CARDS\n */\n\nconst createCardSwitchers = (object, cardBox) => {\n const activeTower = Buildings.getActiveBuilding();\n const sortingCrm = activeTower.info.crm_data.sort((prev, next) => prev.propNum - next.propNum);\n if (sortingCrm.length < 2)\n return;\n \n const switcherBlock = new BaseElement()\n .addClass(`${CardTypes.Unit}-card__switcher-block`, 'card__switcher-block')\n .appendTo(cardBox.querySelector(`.${CardTypes.Unit}-card__preview-block`));\n\n const prevButton = new Button()\n .addClass(\n `${CardTypes.Unit}-card__switcher-block--prev`,\n `card__switcher-block--prev`,\n 'icon-left1')\n .event('click', switchPrevHandler)\n .appendTo(switcherBlock.DOMElement);\n\n const nextButton = new Button()\n .addClass(\n `${CardTypes.Unit}-card__switcher-block--next`,\n `card__switcher-block--next`,\n 'icon-right1')\n .event('click', switchNextHandler)\n .appendTo(switcherBlock.DOMElement);\n \n if (object.propNum === sortingCrm[0].propNum) {\n prevButton.addStyle('opacity', '0');\n prevButton.addStyle('touchAction', 'none');\n } else if (object.propNum === sortingCrm[sortingCrm.length - 1].propNum) {\n nextButton.addStyle('opacity', '0');\n nextButton.addStyle('touchAction', 'none');\n }\n};\n\nconst switchPrevHandler = (e) => {\n e.stopPropagation();\n switchHandlerThrottling('prev', e);\n};\n\nconst switchNextHandler = (e) => {\n e.stopPropagation();\n switchHandlerThrottling('next', e);\n};\n\nlet timerSwitch;\nfunction switchHandlerThrottling(action, e) {\n const target = e;\n if (timerSwitch !== null) {\n clearTimeout(timerSwitch);\n }\n\n timerSwitch = setTimeout(function() {\n switchBetweenCards(action, target);\n }, 250);\n}\n\nconst switchBetweenCards = (action, e) => {\n if (userPrevent()) return;\n\n const card = CardTypes.Unit;\n const engineId = e.target.closest(`.${card}-card`).getAttribute('data-engineid');\n const {activeTower, crmDataOfFlat} = findSelectionAndCrmData(engineId);\n const object = crmDataOfFlat;\n settingsData.doubleClick = false;\n\n if (settingsData.bombBlock) return;\n if (settingsData.buildingDestroyed) return;\n\n const unitCards = UnitCardClass.cards;\n\n const sortingCrm = activeTower.info.crm_data.sort((prev, next) => prev.propNum - next.propNum);\n let newObject;\n\n /**\n * Found flat by propNum\n */\n\n const currentObject = sortingCrm.find(item => item.propNum === object.propNum).propNum;\n sortingCrm.forEach((flat, index) => {\n\n const actionIndex = (action === 'prev') ? index - 1 : index + 1;\n const actionIndexMulti = (action === 'prev') ? index - 2 : index + 2;\n\n if (flat.propNum === currentObject) {\n newObject = sortingCrm[actionIndex];\n\n if (cardsData.multiplyCards && newObject.engineId) {\n unitCards.forEach(card => {\n if (card.html.getAttribute('data-engineid') === newObject.engineId) {\n newObject = sortingCrm[actionIndexMulti];\n }\n })\n }\n }\n });\n\n if (!newObject)\n return;\n\n let newObjectSelection = activeTower.apartments.find(item => item.name === newObject.engineId);\n setActiveClassHandler(e, newObjectSelection);\n flatClick(newObjectSelection);\n\n if (document.querySelector('.search__container-main'))\n changeActiveCardWhenBuildingClick(newObjectSelection, true);\n};\n\nexport const disableArrowButtons = () => {\n if (isMobile)\n return;\n\n const cardBox = UnitCardClass.cards;\n\n if (cardBox.length > 0) {\n cardBox.forEach(card => {\n const blockButtons = card.html.querySelector(`.${CardTypes.Unit}-card__switcher-block`);\n if (!blockButtons)\n return;\n\n if (settingsData.buildingDestroyed || cardsData.multiplyCards ) {\n if (!blockButtons.classList.contains('hide')) {\n blockButtons.classList.add('hide');\n }\n } else {\n if (blockButtons.classList.contains('hide')) {\n blockButtons.classList.remove('hide');\n }\n }\n })\n }\n};\n\n/**\n * HANDLERS\n */\n\n// async function spoilerBackButtonClickHandler() {\n// await cardsCloseMobile();\n// openSearchHandler();\n// }\n\nconst infoPointsHandler = (e) => {\n const currentCard = e.target.closest(`.${CardTypes.Unit}-card`);\n const {crmDataOfFlat} = findSelectionAndCrmData(currentCard.getAttribute('data-engineid'));\n crmDataOfFlat['custom-field-source'] = 'info-points';\n\n openOptionsCard( {object: crmDataOfFlat} );\n};\n\nexport const floorPlanHandler = (e) => {\n const currentCard = e.target.closest(`.${CardTypes.Unit}-card`) || e.target.closest(`.${CardTypes.Options}-card`);\n const {crmDataOfFlat} = findSelectionAndCrmData(currentCard.getAttribute('data-engineid'));\n crmDataOfFlat['custom-field-source'] = 'floor-plan';\n\n openOptionsCard( {object: crmDataOfFlat} );\n};\n\nlet timerKeyPlan;\nexport function keyPlanHandlerThrottling(e) {\n if (timerKeyPlan !== null)\n clearTimeout(timerKeyPlan);\n\n timerKeyPlan = setTimeout(function() {\n if (config.features?.plainKeyPlan) {\n const plugMeshOfTheFloor = Buildings.getActiveBuilding().floorsPlug.find(plug => plug.floor === settingsData.lastClickedFlat.userData.floor);\n if (plugMeshOfTheFloor)\n projectMode.FloorPlan.floorAmenities.show(plugMeshOfTheFloor.data);\n } else {\n keyPlanHandler(e);\n }\n }, 250);\n}\n\nconst keyPlanHandler = (e) => {\n if (isMobile && components.mobileSearch.state === 'opened-fully')\n return;\n\n let currentCard;\n isMobile\n ? currentCard = e.target.closest('.results-viewer__apartment-card')\n : currentCard = e.target.closest(`.${CardTypes.Unit}-card`);\n\n if (!isMobile) {\n const compareButton = currentCard.querySelector('.unit-card__compare-btn');\n if (!compareButton.classList.contains('active'))\n compareButton.click();\n }\n\n hideTooltip();\n\n if (cardsData.multiplyCards)\n setActiveClassHandler(e, false);\n\n if (!isOrbitControlsEnabled() || settingsData.bombBlock)\n return;\n\n if (!isMobile) {\n enableSwitcherBtns(true);\n toggleResultsList('close');\n }\n\n const {selectedMesh} = findSelectionAndCrmData(currentCard.getAttribute('data-engineid'));\n const floorIndex = selectedMesh.userData.floor;\n\n if (isMobile) {\n settingsData.lastClickedFlat = selectedMesh;\n settingsData.currentFloor = floorIndex;\n bombButtonInitActionHandler();\n } else {\n const button = currentCard.querySelector(`.${CardTypes.Unit}-card__button-key-plan`);\n if (button.classList.contains('icon-floorplan') && settingsData.buildingDestroyed || cardsData.cardMode.isDoubleCard) {\n moveAroundTheFloors(selectedMesh.userData.crm_data.engineId);\n } else {\n settingsData.lastClickedFlat = selectedMesh;\n settingsData.currentFloor = floorIndex;\n bombButtonInitActionHandler();\n }\n }\n\n renderUpdateValuesOnDemand();\n rightNavMenuZIndexChange();\n\n if (!isMobile) {\n if (settingsData.buildingDestroyed) {\n UnitCardClass.cards.forEach(card => { card.html.classList.add('unit-card--small') });\n } else {\n UnitCardClass.cards.forEach(card => { card.html.classList.remove('unit-card--small') });\n }\n\n if (!cardsData.multiplyCards)\n restorePreviouslyUnitCardPosition();\n }\n}\n\n// export function changeKeyButtonState(button, currentCard, previousClass, newClass, innerWord) {\n// if (isMobile && !button) {\n// return;\n// } else {\n// button = currentCard.querySelector(`.${CardTypes.Unit}-card__button-key-plan`);\n// }\n//\n// button.classList.remove(previousClass)\n// button.classList.add(newClass);\n// button.innerHTML = changeLangToCurrent(innerWord);\n// button.setAttribute('data-dictionary', innerWord);\n// }\n\nconst compareBtnUnitCardHandler = (e) => {\n const target = e.target;\n if (target.classList.contains(`${CardTypes.Unit}-card__compare-btn`)) {\n if (e.target.classList.contains('active')) {\n setActiveClassHandler(e);\n UnitCardClass.deactivateMutliCardsMode(target);\n } else {\n UnitCardClass.activateMutliCardsMode(target);\n }\n }\n}\n\nexport const closeHandler = (e) => {\n const currentCard = e.target.closest(`.${CardTypes.Unit}-card`);\n const currentCardId = currentCard.getAttribute('data-engineid');\n const instancedCard = UnitCardClass.findCard(currentCardId);\n projectMode.Cylinder.cylinderBuildingLabels.markLabel(currentCardId,'close');\n\n isMobile && settingsData.isLandscape\n ? UnitCardClass.closeMobileCard()\n : instancedCard.closeWebOrDesktopCard(currentCard, currentCardId);\n\n if (settingsData.activeViewMode === ViewMode.Cylinder && !settingsData.activeModeSwitching)\n Amenities.show(0);\n}\n\nexport const previewClickHandler = async (e) => {\n e.stopPropagation();\n\n if (isMobile && e.target.closest('.search-item__explore-button')) {\n const searchResultItem = e.target.closest('.search__result-item');\n const {crmDataOfFlat} =\n findSelectionAndCrmData(searchResultItem.getAttribute('data-engineid'));\n settingsData.lastClickedFlat = {userData: {crm_data: crmDataOfFlat}};\n\n openOptionsCard({object: crmDataOfFlat, settings: config});\n\n return;\n }\n\n const currentCard = document.querySelector(`.${CardTypes.Unit}-card`);\n const preview = currentCard.querySelector(`.${CardTypes.Unit}-card__preview-block`);\n const unitCardExploreButton = document.querySelector('.unit-card__explore-button');\n const {crmDataOfFlat} =\n findSelectionAndCrmData(currentCard.getAttribute('data-engineid'));\n\n if (e.target === preview || e.target.closest('.unit-card__explore-button') === unitCardExploreButton) {\n setActiveClassHandler(e);\n openOptionsCard({object: crmDataOfFlat, settings: config});\n }\n}\n\n// export const toggleCardMainButton = () => {\n// return;\n// if (!isMobile)\n// return;\n//\n// const optionsCard = document.querySelector('.options-card');\n// if (optionsCard && !cardsData.cardMode.isAmenities) {\n// ExploreButton.hide('unit-card');\n//\n// const unitCardWrapper = document.querySelector('.unit-card__wrapper');\n// const previousButtonsWrapper = unitCardWrapper.querySelector('.unit-card__buttons-wrapper');\n// const buttonsWrapper = previousButtonsWrapper || new BaseElement()\n// .addClass('unit-card__buttons-wrapper')\n// .appendTo(unitCardWrapper)\n// .DOMElement;\n// if (cardsData.cardMode.isAmenities)\n// buttonsWrapper.classList.add('hidden');\n//\n// if (!cardsData.cardMode.isAmenities)\n// new Prepayment(buttonsWrapper, settingsData.lastClickedFlat.userData.crm_data);\n// const prevCustomerContactNowButton = document.querySelector('.options-card__customer-contact-now-btn');\n// if (!prevCustomerContactNowButton)\n// new CustomerContactNow('options-card').appendTo(buttonsWrapper);\n// // : CustomerContactNow.showOptionsCardButton();\n// setUnitCardWrapperTemplateGridAreas();\n// setOptionsCardPlansBlockHeight();\n// } else {\n// ExploreButton.show('unit-card');\n// // CustomerContactNow.hideOptionsCardButton();\n// }\n// }\n\nexport const setUnitCardWrapperTemplateGridAreas = () => {\n const unitCardButtonsWrapper = document.querySelector('.unit-card__buttons-wrapper');\n const amountOfButtons = unitCardButtonsWrapper ? unitCardButtonsWrapper.children.length : 1;\n const singleButtonTemplate = '\"header links\" \"info-points info-points\"';\n const multipleButtonsTemplate = '\"header header\" \"links links\" \"info-points info-points\"';\n const template = amountOfButtons > 1 ? multipleButtonsTemplate : singleButtonTemplate;\n // document.querySelector(':root').style.setProperty('--unitCardWrapperTemplateGridAreas', template);\n setCSSVar('--unitCardWrapperTemplateGridAreas', template);\n}\n\nexport const setActiveClassHandler = (e, switchObj) => {\n e.preventDefault();\n const unitCardList = UnitCardClass.cards;\n\n if (!e.target.closest(`.${CardTypes.Unit}-card`)) return;\n const target = e.target.closest(`.${CardTypes.Unit}-card`).getAttribute('data-engineid');\n\n /**\n * Search toggle active class\n */\n const searchItemPrevious = document.querySelector(`.search__result-item.active-card`);\n const searchItem = document.querySelector(`.search__result-item[data-engineid=${target}]`);\n searchItemPrevious && searchItemPrevious.classList.remove('active-card');\n searchItem && searchItem.classList.add('active-card');\n\n /**\n * remove active class from all cards\n */\n unitCardList.forEach(card => {\n card.html.classList.remove('active');\n card.html.classList.add('non-active');\n });\n\n /**\n * if click was from switching of cards, change only active card\n */\n if (switchObj) {\n const {selectedMesh} = findSelectionAndCrmData(target);\n\n if (UnitCardClass.cards.length > 1 || !cardsData.multiplyCards) {\n selectedMesh.userData.isClicked = false;\n selectionBoxesSetStatusColor(selectedMesh, 'hoverOut');\n }\n\n settingsData.lastClickedFlat = switchObj;\n rotation_to_flat(switchObj);\n switchObj.userData.isClicked = true;\n selectionBoxesSetStatusColor(switchObj, 'click');\n cardsData.multiplyCards && setActiveCard(e.target.closest(`.${CardTypes.Unit}-card`));\n\n return;\n }\n\n /**\n * set active class to clicked card\n */\n unitCardList.forEach(card => {\n if (target === card.html.getAttribute('data-engineid')) {\n const {selectedMesh} = findSelectionAndCrmData(target);\n settingsData.lastClickedFlat = selectedMesh;\n cardsData.multiplyCards && setActiveCard(card.html);\n }\n });\n}\n\nexport const setActiveCard = (card) => {\n card.classList.toggle('non-active');\n card.classList.toggle('active');\n}\n\nexport const changeUnitCardPosition = () => {\n const unitCard = UnitCardClass.findCard();\n if (isDesktop || !unitCard)\n return;\n const currentDirection = document.querySelector('.aside__container').getAttribute('data-menu-position');\n const id = unitCard.engineId;\n\n if (isMobile) {\n UnitCardClass.closeMobileCard();\n const {selectedMesh} = findSelectionAndCrmData(id);\n flatClick(selectedMesh);\n selectionBoxesSetStatusColor(selectedMesh, 'click');\n selectedMesh.userData.isClicked = true;\n return;\n }\n\n function setAndChangeAttributes(fromDirection, toDirection) {\n let position = unitCard.html.style[fromDirection];\n position = (!position) ? unitCard.html.style[toDirection] : position;\n const positionNumber = position.replace('px', '');\n unitCard.html.removeAttribute('style');\n unitCard.html.setAttribute('style', `${toDirection}:${+positionNumber}px`);\n }\n\n if (unitCard && isDesktop !== '1') {\n currentDirection === 'right'\n ? setTimeout(() => setAndChangeAttributes('right', 'left'), 70)\n : setTimeout(() => setAndChangeAttributes('left', 'right'), 70);\n }\n}\n\n// export const changeCardPositionWhenSearchOpen = () => {\n// return;\n// const isDesktopMode = isDesktop;\n// const card = UnitCardClass.findCard();\n// const search = document.querySelector(`.search__container-main`);\n//\n// if (isDesktop)\n// return;\n//\n// const cardCurrentPosition = card.html.getBoundingClientRect().x;\n// if (search) {\n// const searchWidth = search.getBoundingClientRect().width;\n// const newCardPosition = cardCurrentPosition - searchWidth;\n// card.html.style.left = `${newCardPosition}px`;\n// } else {\n// card.html.style.left = `${window.innerWidth - card.html.getBoundingClientRect().width - 37}px`;\n// }\n// }\n\n/**\n * MOBILE FUNC\n */\n\nexport const addSwipeListener = () => {\n const cardBox = UnitCardClass.findCard();\n // const accessToEnter = !cardsData.cardMode.isUnavailable ? true : config.crmProjectSettings.property.settings.enterNotForSale;\n\n SwipeScript(cardBox.html);\n}\n\nexport const moveCardWhenBuildingDestroyed = () => {\n const card = UnitCardClass.findCard();\n if (!card || isMobile || isDesktop)\n return;\n\n const navBarContainer = document.querySelector('.right-nav-bar');\n const menu = document.querySelector('.aside__container');\n const menuPosition = menu?.getAttribute('data-menu-position');\n const rtl = document.querySelector('html').getAttribute('dir') === 'rtl';\n const direction = (rtl || menuPosition === 'right') ? 'left' : 'right';\n const currentCardPosition = card.html.style[direction].replace('px', '');\n let cardPosition = currentCardPosition;\n let topPosition = 60;\n let bottomPosition = 60;\n let offsetWidth;\n\n offsetWidth = rtl\n ? navBarContainer.offsetLeft\n : (window.innerWidth - navBarContainer.offsetLeft) / 2;\n\n const fsContainer = document.querySelector('.fs__main__container');\n if (settingsData.buildingDestroyed && fsContainer && (currentCardPosition*1.15) <= navBarContainer.clientWidth + offsetWidth)\n cardPosition = parseInt(currentCardPosition, 10) + navBarContainer.clientWidth + offsetWidth + 12;\n\n if (settingsData.buildingDestroyed && UnitCardClass.cards.length === 2) {\n const cardHeight = parseInt(UnitCardClass.cards[0].html.getBoundingClientRect().height);\n const compareButtonHeight = parseInt(document.querySelector('.compare-button').getBoundingClientRect().height);\n const resultPosition = parseInt(window.innerHeight) / 2 - compareButtonHeight - cardHeight - 15;\n\n topPosition = bottomPosition = resultPosition;\n }\n\n\n // const mixer = GSAPAnimationMixer.getMixer('floorPlan');\n const mixer = GSAPAnimationMixer.registerNewMixer('moveCardWhenBuildingDestroyed');\n if (UnitCardClass.cards.length === 2) {\n const animation = gsap.to([UnitCardClass.cards[0].html, UnitCardClass.cards[1].html],{\n [direction]: `${cardPosition}px`,\n });\n\n const animationTopCard = gsap.to(UnitCardClass.cards[0].html,{\n top: `${topPosition}px`,\n });\n\n const animationBottomCard = gsap.to(UnitCardClass.cards[1].html,{\n bottom: `${bottomPosition}px`,\n });\n\n mixer.addAnimation(animation);\n mixer.addAnimation(animationTopCard);\n mixer.addAnimation(animationBottomCard);\n\n const compareBtn = UIRoot.querySelector('.compare-button');\n if (compareBtn && parseInt(currentCardPosition) !== parseInt(cardPosition)) {\n const dir = getCurrentLangDirection() === 'rtl' ? 'left' : 'right';\n const buttonOffset = compareBtn.getBoundingClientRect().width / 2;\n const buttonPosition = parseInt(getComputedStyle(compareBtn)[dir]);\n updateCompareButtonOffset(buttonPosition + cardPosition - buttonOffset);\n const animation = gsap.to(compareBtn,{\n [direction]: `${buttonPosition + parseInt(cardPosition, 10) - buttonOffset}px`\n });\n\n mixer.addAnimation(animation);\n }\n } else if (UnitCardClass.cards.length < 2) {\n const animation = gsap.to(UnitCardClass.cards[0].html,{\n [direction]: `${cardPosition}px`,\n });\n mixer.addAnimation(animation);\n }\n mixer.play();\n\n // card.html.setAttribute('style', `${!isDesktop ? 'transform: scale(0.95);' : 'transform: scale(1);'} ${direction}:${cardPosition}px`);\n // card.html.setAttribute('style', `${direction}:${cardPosition}px`);\n}\n\n// export function moveCardAfterExitingKeyPlan() {\n// const card = UnitCardClass.findCard();\n// if (!card || isMobile || isDesktop)\n// return;\n//\n// const langDirection = getCurrentLangDirection();\n// langDirection === 'ltr' ? card.html.style.right = '37px' : card.html.style.left = '37px';\n// }\n\nexport const removeUnitCardListeners = (currentCard) => {\n const floorPlan = currentCard.querySelector(`.${CardTypes.Unit}-card__button-floor-plan`);\n const keyPlan = currentCard.querySelector(`.${CardTypes.Unit}-card__button-key-plan`);\n const preview = currentCard.querySelector(`.${CardTypes.Unit}-card__preview-block`);\n const prevButton = currentCard.querySelector(`.${CardTypes.Unit}-card__switcher-block--prev`);\n const nextButton = currentCard.querySelector(`.${CardTypes.Unit}-card__switcher-block--next`);\n const closeButton = currentCard.querySelector(`.${CardTypes.Unit}-card__close-btn`);\n const compareButton = currentCard.querySelector(`.${CardTypes.Unit}-card__compare-btn`);\n\n if (!isMobile) {\n closeButton && closeButton.removeEventListener('click', closeHandler);\n compareButton && compareButton.removeEventListener('click', compareBtnUnitCardHandler);\n }\n\n floorPlan && floorPlan.removeEventListener('click', floorPlanHandler);\n keyPlan && keyPlan.removeEventListener('click', keyPlanHandlerThrottling);\n preview && preview.removeEventListener('click', previewClickHandler);\n prevButton && prevButton.removeEventListener('click', switchPrevHandler);\n nextButton && nextButton.removeEventListener('click', switchNextHandler);\n currentCard.removeEventListener('click', setActiveClassHandler);\n}\n\n/**\n * Class methods\n */\n\nexport async function cardsAnimations() {\n if (isMobile) {\n await unitCardOpenAnimation();\n } else {\n createUnitCardAnimation(this);\n setTimeout(() => dragUnitCard(), 1000);\n }\n}\n\nexport function cardsFunctionsWeb() {\n hideTooltip();\n}\n\nexport function cardsFunctionsMobile() {\n const unitCard = UnitCardClass.findCard();\n\n if (unitCard) {\n unitCard.html.removeEventListener('swiped-right', openAndCloseMobileOptionsCard);\n unitCard.html.removeEventListener('swiped-left', openAndCloseMobileOptionsCard);\n }\n\n addSwipeListener();\n // moveCardWhenBuildingDestroyed();\n rightNavMenuZIndexChange();\n // CLOSE SEARCH\n const searchContainer = document.querySelector('.search__container-main');\n const isMinimized = (searchContainer) ? searchContainer.classList.contains('minimize') : '';\n const rtl = document.querySelector('html').getAttribute('dir') === 'rtl';\n const actionType =\n settingsData.isLandscape ?\n rtl ?\n 'swiped-left':\n 'swiped-left':\n 'swiped-down';\n // if(!isMinimized) {\n // mobileHandleSearch({type: actionType});\n // }\n}\n\nexport function cardsCloseWebDesktop(card, id) {\n let currentCard = card;\n let flatData = findSelectionAndCrmData(id);\n\n removeUnitCardListeners(currentCard);\n closeUnitCardAnimation(currentCard).then(() => {\n Panorama.disableAll();\n // if(isDesktop && UnitCardClass.cards.length > 0)\n // gsap.to(UnitCardClass.cards[0].html, {duration: 1.8, scale: 1.3, top: 200});\n // if (!settingsData.buildingDestroyed)\n // UnitCardClass.cards.forEach(card => { card.html.classList.remove('unit-card--small') });\n });\n\n UnitCardClass.cards = UnitCardClass.cards.filter(\n card => card.engineId !== currentCard.getAttribute('data-engineid')\n );\n const activeSearchItemList = document.querySelectorAll('.search__result-item:not(.similar-item).active');\n activeSearchItemList.forEach(elem => {\n if (elem.getAttribute('data-engineid') === currentCard.getAttribute('data-engineid')) {\n elem.classList.remove('active');\n elem.classList.remove('active-card');\n } else {\n elem.classList.add('active-card')\n }\n });\n\n flatData.selectedMesh.userData.isClicked = false;\n selectionBoxesSetStatusColor(flatData.selectedMesh, 'hoverOut');\n\n const compareBtn = document.querySelector(`.compare-button`);\n if (compareBtn)\n compareBtn.remove();\n\n moveElements();\n\n // if (settingsData.activeViewMode !== ViewMode.FloorPlan)\n // searchGetResults();\n setTimeout(() => {\n if (settingsData.buildingDestroyed)\n UnitCardClass.cards[0]?.html.querySelector('.unit-card__compare-btn').click();\n }, 500);\n\n}\n\nexport async function cardsCloseMobile() {\n const unitCard = UnitCardClass.findCard();\n if (!unitCard)\n return;\n await closeUnitCardAnimation(unitCard.html);\n projectMode.Cylinder.cylinderBuildingLabels.markLabel(unitCard.engineId,'close');\n Panorama.disableAll();\n removeUnitCardListeners(unitCard.html);\n const activeSearchItem = document.querySelector('.search__result-item:not(.similar-item).active');\n if (activeSearchItem)\n activeSearchItem.classList.remove('active');\n UnitCardClass.cards = [];\n\n if (cardsData.cardMode.isAmenities && isMobile)\n return;\n\n const {selectedMesh} = findSelectionAndCrmData(unitCard.engineId);\n if (!selectedMesh)\n return;\n selectedMesh.userData.isClicked = false;\n selectionBoxesSetStatusColor(selectedMesh, 'hoverOut');\n}\n\nexport function multiCardsLogic(card) {\n if (!cardsData.multiplyCards)\n return;\n\n card.classList.add('active');\n\n UnitCardClass.cards.forEach(card => {\n card.html.addEventListener('click', setActiveClassHandler);\n });\n}\n\nexport function keyButtonState(card) {\n if (!card)\n card = UnitCardClass.findCard()?.html;\n\n const buttonKeyPlan = card.querySelector(`.${CardTypes.Unit}-card__button-key-plan`);\n if (buttonKeyPlan.classList.contains('icon-right')) {\n buttonKeyPlan.classList.add('icon-floorplan')\n buttonKeyPlan.classList.remove('icon-right');\n buttonKeyPlan.innerHTML = changeLangToCurrent('Key plan');\n buttonKeyPlan.setAttribute('data-dictionary', 'Key plan');\n }\n}\n\nexport function closeMultiCards(switchBuildings = false) {\n const cardList = UnitCardClass.cards;\n UnitCardClass.deactivateMutliCardsMode();\n\n cardList.forEach(card => {\n closeUnitCardAnimation(card.html, 'close-all');\n projectMode.Cylinder.cylinderBuildingLabels.markLabel(card.buildingEngineId,'close');\n\n // HOVER OUT SEARCH\n\n const activeSearchItemList = document.querySelectorAll('.search__result-item:not(.similar-item).active');\n activeSearchItemList.forEach(elem => {\n if (elem.getAttribute('data-engineid') === card.html.getAttribute('data-engineid')) {\n elem.classList.remove('active');\n elem.classList.remove('active-card');\n } else {\n elem.classList.add('active-card')\n }\n });\n });\n\n if (!config.features.privateHouseMode) {\n const activeTower = Buildings.getActiveBuilding();\n activeTower && activeTower.apartments.forEach(item => {\n item.userData.isClicked = false;\n selectionBoxesSetStatusColor(item, 'hoverOut', undefined, undefined, switchBuildings);\n });\n }\n\n UnitCardClass.cards = [];\n\n const compareBtn = document.querySelector(`.compare-button`);\n if (compareBtn)\n compareBtn.remove();\n\n moveElements();\n}\n\n\nclass Panorama {\n static scopes = [];\n\n constructor (parent, url) {\n this.parent = parent;\n this.url = Cloudflare.resize(url,{\n width: 300\n });\n this.viewer = new PANOLENS.Viewer( {container: this.parent, controlBar: false, cameraFov: 90} );\n window.removeEventListener( 'resize' , this.viewer.HANDLER_WINDOW_RESIZE, true );\n this.panorama = new PANOLENS.ImagePanorama(this.url);\n this.viewer.add(this.panorama);\n this.viewer.addUpdateCallback(this.rotation.bind(this));\n this.active = true;\n\n Panorama.scopes.push(this);\n }\n\n rotation() {\n this.viewer.panorama.rotation.y -= 0.0025;\n }\n\n stop() {\n window.cancelAnimationFrame(this.viewer.requestAnimationId);\n this.active = false;\n }\n\n run () {\n this.viewer.animate();\n this.active = true;\n }\n\n load(url) {\n const resizedUrl = Cloudflare.resize(url,{\n width: 300\n });\n this.panorama.load(resizedUrl);\n this.stop();\n this.run();\n }\n\n setContainer(container) {\n this.parent = container;\n container.appendChild(this.viewer.renderer.domElement);\n }\n\n static getScope(index = 0) {\n return Panorama.scopes[index];\n }\n\n static findEmptyScope() {\n return Panorama.scopes.find(scope => !document.body.contains(scope.parent));\n }\n\n static disableAll() {\n Panorama.scopes.forEach(scope => {\n if (!document.body.contains(scope.parent)) {\n scope.stop();\n }\n });\n }\n}\n","'use strict'\n\nimport { flatClick } from '../../functions';\nimport { Buildings, projectMode, settingsData } from '../../settings';\nimport {openOptionsCard} from \"./optionsCards\";\nimport {changeLangToCurrent} from \"../components/langSwitcher/langSwitcher\";\nimport {ViewMode} from \"../../common\";\nimport {BaseElement} from \"../interfaces/BaseElement\";\n\nexport const createModal = (bmbyPropID) => {\n let apartmentData;\n let crmApartmentData;\n let currentBuilding;\n\n crmApartmentData = settingsData?.allCrmData.find(item => item.bmbyPropID === +bmbyPropID);\n\n if (crmApartmentData) {\n currentBuilding = Buildings.getBuilding(crmApartmentData.buildingEngineId);\n apartmentData = currentBuilding.apartments.find(item => item.userData.crm_data.bmbyPropID === +bmbyPropID);\n if (currentBuilding)\n Buildings.activateBuilding(currentBuilding.name);\n }\n\n if (!apartmentData) {\n // return;\n for (let key in Buildings.buildings) {\n const customSelections = Buildings.buildings[key].customSelections\n customSelections.forEach((element) => {\n if (element.userData.name === bmbyPropID) {\n apartmentData = element;\n Buildings.activateBuilding(apartmentData.userData.crm_data.buildingEngineId);\n }\n })\n }\n\n return;\n }\n\n const aptExistText = 'propEnterPopup';\n // const aptErrorText = 'Property does not exist';\n const aptExistButton = 'No';\n // const aptErrorButton = 'Yes';\n\n const modal = new BaseElement()\n .addClass('modal__container', 'non-canvas')\n .appendTo(document.body)\n .DOMElement;\n new BaseElement()\n .addClass('modal__container-shade', 'non-canvas')\n .appendTo(document.body);\n const modalWrapper = new BaseElement()\n .addClass('modal__container-wrapper', 'non-canvas')\n .appendTo(modal)\n .DOMElement;\n new BaseElement()\n .addClass('modal__container-text', 'language-string')\n .addAttribute('data-dictionary', aptExistText)\n .innerHtml(changeLangToCurrent(aptExistText))\n .appendTo(modalWrapper);\n const buttonsBlock = new BaseElement()\n .addClass('modal__container-buttons-block')\n .appendTo(modalWrapper)\n .DOMElement;\n new BaseElement('button')\n .addClass('modal__container-close-btn', 'language-string', 'button')\n .addAttribute('data-dictionary', aptExistButton)\n .innerHtml(changeLangToCurrent(aptExistButton))\n .event('click', closeBtnClickHandler)\n .appendTo(buttonsBlock);\n\n if (apartmentData) {\n new BaseElement('button')\n .addClass('modal__container-btn', 'button', 'language-string')\n .addAttribute('data-dictionary', 'Enter')\n .addAttribute('data-menu-item', 'search')\n .innerHtml(changeLangToCurrent('Enter'))\n .event('click', (e) => buttonClickHandler(e, apartmentData))\n .appendTo(buttonsBlock);\n }\n}\n\nconst buttonClickHandler = async (e, apartmentData) => {\n document.querySelector('.modal__container').remove();\n document.querySelector('.modal__container-shade').remove();\n\n settingsData.lastClickedFlat = apartmentData;\n\n const activeBuilding = Buildings.getActiveBuilding();\n await projectMode.Cylinder.enter(activeBuilding);\n await flatClick(apartmentData);\n openOptionsCard();\n}\n\nconst closeBtnClickHandler = () => {\n projectMode.Pagination.paginate({source: 'urlModalCloseButton'});\n\n document.querySelector('.modal__container-close-btn').removeEventListener('click', closeBtnClickHandler);\n document.querySelector('.modal__container').remove();\n document.querySelector('.modal__container-shade').remove();\n\n const activeBuilding = Buildings.getActiveBuilding();\n if (activeBuilding) {\n if (settingsData.activeViewMode !== ViewMode.Cylinder)\n Buildings.deactivateBuilding();\n }\n\n // removePropParam();\n}\n","import { rgbaToHexA, rotation_to_flat } from '../../../functions';\nimport { Buildings, isDesktop, isMobile, isTablet, settingsData, threeJsVariables, UIRoot } from '../../../settings';\nimport { intersectionClickHandler, selectionBoxesSetStatusColor } from '../../threejs/raycast';\nimport { changeLangToCurrent, getCurrentLang, getCurrentLangDirection } from '../langSwitcher/langSwitcher';\nimport gsap from 'gsap';\nimport { UnitCardClass } from '../../cards/unitCards/UnitCardClass';\nimport { MathUtils, Object3D } from 'three';\nimport { CSS2DObject } from '../../../libs/CSS2DRenderer';\nimport {Cloudflare} from \"../../api/Cloudflare\";\nimport {BaseElement} from \"../../interfaces/BaseElement\";\nimport { Button } from '../../interfaces/buttons/Button';\nimport { DreamsPreloader } from '../preloader/DreamsPreloader';\nimport { PhotoSwiperGallery } from '../../menu/gallery/galleryDesktop';\nimport Swiper from \"swiper\";\nimport {Navigation} from \"swiper/modules\";\n\nexport class Amenities {\n static parentContainer;\n static amenitiesContainer;\n static amenitiesSwiper;\n static amenitiesSwiperElement;\n static amenitiesWrapper;\n static amenitiesArray = [];\n\n constructor (building) {\n this.amenities = building.customSelections.concat(building.cylinderLabels);\n this.amenities.sort((prev,next) => {\n const prevIndex = config.features.amenities.findIndex(el => el?.engineId === prev.name);\n const nextIndex = config.features.amenities.findIndex(el => el?.engineId === next.name);\n if (prevIndex > nextIndex) {\n return 1;\n } else if (prevIndex < nextIndex) {\n return -1;\n } else {\n return 0;\n }\n });\n }\n\n add() {\n if (!this.amenities.length) {\n Amenities.clear();\n return;\n }\n\n Amenities.clear();\n this.amenities.forEach(amenity =>{\n let amenityElement;\n if (amenity.type === 'CylinderCSSLabel') {\n amenityElement = new CylinderCSSLabel(Amenities.amenitiesWrapper).create(amenity)\n } else {\n amenityElement = new Amenity(Amenities.amenitiesWrapper).create(amenity);\n }\n if (!isMobile)\n amenityElement.element.addClass('swiper-slide')\n Amenities.amenitiesArray.push(amenityElement);\n });\n\n if (!isMobile) {\n new BaseElement()\n .addClass('amenities__navigation-btn', 'swiper-button-next', 'icon-down2')\n .appendTo(Amenities.amenitiesSwiperElement.DOMElement);\n new BaseElement()\n .addClass('amenities__navigation-btn', 'swiper-button-prev', 'icon-up2')\n .appendTo(Amenities.amenitiesSwiperElement.DOMElement);\n\n Amenities.destroySwiper();\n Amenities.createSwiper();\n }\n }\n\n static createMainContainer(){\n if (isMobile)\n return;\n\n const checkAmenities = Buildings.getBuildingsArray().some(building => building.customSelections.length || building.cylinderLabels.length);\n if (!checkAmenities)\n return;\n\n this.parentContainer = UIRoot;\n\n if (!this.exist()) {\n Amenities.amenitiesContainer = new BaseElement()\n .addClass('amenities__main__container', 'non-canvas', 'swiper')\n .appendTo(this.parentContainer);\n Amenities.amenitiesSwiperElement = new BaseElement()\n .addClass('amenities__swiper')\n .appendTo(Amenities.amenitiesContainer.DOMElement);\n Amenities.amenitiesWrapper = new BaseElement()\n .addClass('amenities-wrapper', 'swiper-wrapper')\n .appendTo(Amenities.amenitiesSwiperElement.DOMElement);\n if (isTablet)\n Amenities.amenitiesContainer.addClass('tablet-styles');\n } else {\n Amenities.show();\n }\n }\n\n static destroySwiper() {\n if (Amenities.amenitiesSwiper) {\n Amenities.amenitiesSwiper.destroy();\n Amenities.amenitiesSwiper = null;\n }\n }\n\n static createSwiper() {\n if (!Amenities.exist())\n return;\n\n Swiper.use([Navigation]);\n Amenities.amenitiesSwiper = new Swiper('.amenities__swiper', {\n direction: 'vertical',\n slidesPerView: 'auto',\n navigation: {\n nextEl: \".amenities__navigation-btn.swiper-button-next\",\n prevEl: \".amenities__navigation-btn.swiper-button-prev\",\n }\n });\n }\n\n static hide () {\n if (!this.exist())\n return;\n\n if (Amenities.amenitiesContainer?.DOMElement?.classList.contains('hidden'))\n return;\n\n Amenities.amenitiesArray.forEach(amenity => amenity.hoverOut());\n\n gsap.to(Amenities.amenitiesContainer.DOMElement,{\n scale:0,\n duration: .3,\n onComplete: () => {\n Amenities.amenitiesContainer.addClass('hidden');\n Amenities.amenitiesContainer.removeStyle('transform');\n }\n });\n }\n\n static show(delay = .8) {\n if (!this.exist() || UnitCardClass.findCard()?.html || !Amenities.amenitiesContainer?.DOMElement?.classList.contains('hidden') || isMobile)\n return;\n\n gsap.fromTo(Amenities.amenitiesContainer.DOMElement, {\n scale: 0\n }, {\n scale: 1,\n delay: delay,\n duration: .5,\n onStart: () => {\n Amenities.amenitiesContainer.removeClass('hidden');\n },\n onComplete: () => {\n Amenities.amenitiesContainer.removeStyle('transform');\n Amenities.createSwiper();\n }\n });\n }\n\n static hideAmenitiesSelectionBoxes() {\n if (config.features?.keyplanAmenities)\n return;\n\n settingsData.objects_to_intersection = settingsData.objects_to_intersection.filter(object =>\n !settingsData.customSelections.includes(object)\n );\n }\n\n static showAmenitiesSelectionBoxes() {\n if (config.features?.keyplanAmenities)\n return;\n\n settingsData.objects_to_intersection = settingsData.objects_to_intersection.concat(settingsData.customSelections.filter(selection => selection?.isObject3D));\n }\n\n static clear(){\n if (isMobile)\n Amenities.amenitiesArray = [];\n\n if (!this.exist())\n return;\n\n while (Amenities.amenitiesWrapper?.DOMElement?.firstElementChild) {\n Amenities.amenitiesWrapper.DOMElement.firstElementChild.remove();\n }\n this.amenitiesArray = [];\n }\n\n static unselectAmenities() {\n this.exist() && this.amenitiesArray.forEach(amenity => amenity.hoverOut());\n }\n\n static exist(){\n // return Amenities.amenitiesContainer?.DOMElement || document.querySelector('.amenities__main__container');\n return Amenities.amenitiesContainer?.DOMElement;\n }\n}\n\nclass Amenity {\n constructor (container) {\n this.container = container;\n this.amenity = null;\n this.element = null;\n this.crmData = null;\n this.highlightColor = rgbaToHexA(config.style.colors.find(color => color.key === 'brand2').value.split(','),false).substring(1);\n this.active = false;\n this.name = null;\n this.direction = getCurrentLangDirection();\n this.amenityPoint = new BaseElement().addClass('amenity__mesh__point','hide__point');\n new BaseElement('span').addClass('amenity__mesh__span').appendTo(this.amenityPoint.DOMElement);\n this.amenityLabel = new CSS2DObject(this.amenityPoint.DOMElement);\n this.amenityLabel.userData.zoom = 1;\n this.amenityLabel.name = `amenity`;\n this.line = null;\n }\n\n create(amenity) {\n this.amenity = amenity;\n this.hasEngineID = this.amenity.userData.crm_data.engineId !== '';\n if (typeof this.amenity.add === 'function')\n this.amenity.add(this.amenityLabel);\n this.crmData = amenity.userData.crm_data;\n if (!this.crmData) {\n console.log(`%cData for ${this.amenity.name} is absent`, 'color: orange');\n return;\n }\n\n // const parseName = this.crmData.propNum.match(/([A-Z]|([a-z]))/g).join('').toLowerCase();\n // this.name = parseName.charAt(0).toUpperCase() + parseName.substring(1);\n this.name = this.crmData.propNum || this.crmData.title;\n const imgUrl = Boolean(this.crmData.assets.preview2D) ? this.crmData.assets.preview2D :\n Array.isArray(this.crmData.assets.gallery) ? this.crmData.assets.gallery[0] : undefined;\n\n this.element = new BaseElement()\n .addClass('amenity__btn')\n .addAttribute('amenity', this.name);\n this.elementForCard = new BaseElement(this.element.DOMElement.cloneNode(true));\n\n if (this.container?.DOMElement)\n this.element.appendTo(this.container.DOMElement);\n\n if (imgUrl) {\n this.element.addStyle('background-image', `url(\"${Cloudflare.resize(imgUrl, {height: 256})}\")`);\n\n const imageContainer = new BaseElement()\n .addClass('amenity__image-container')\n .appendTo(this.elementForCard.DOMElement);\n new BaseElement('img')\n .addClass('amenity__image')\n .setAttributes({\n 'src': `${Cloudflare.resize(imgUrl, {height: 256})}`,\n 'alt': 'Amenity image'\n })\n .appendTo(imageContainer.DOMElement);\n }\n\n if (isMobile || isDesktop || isTablet) {\n this.element.event('click', () => {\n if (isMobile || isTablet) {\n this.click();\n } else {\n Amenities.unselectAmenities();\n if (this.element.DOMElement.classList.contains('active__amenity')) {\n this.hoverOut();\n } else {\n this.hover();\n }\n this.click();\n }\n });\n } else {\n this.element\n .event('mouseenter', (e) => this.hover(e))\n .event('mouseleave', () => this.hoverOut())\n .event('click', () => this.click());\n }\n\n const text = new BaseElement('span')\n .addClass('amenity__text', 'language-string')\n .addAttribute('data-dictionary', this.name)\n .innerHtml(changeLangToCurrent(this.name))\n .appendTo(this.element.DOMElement);\n\n\n const infoWrapper = new BaseElement()\n .addClass('amenity__info-wrapper')\n .appendTo(this.elementForCard.DOMElement);\n new BaseElement(text.DOMElement.cloneNode(true)).appendTo(infoWrapper.DOMElement);\n new BaseElement('span')\n .addClass('amenity_icon', 'icon-lotus')\n .appendTo(infoWrapper.DOMElement);\n\n\n if (!isMobile && config.resources.background.cylinderBg === 'sky')\n text.addClass('dark-text');\n\n return this;\n }\n\n hover() {\n if (this.amenity.userData.crm_data.showTarget === false) {\n this.element.addClass('active__amenity');\n this.active = true;\n return;\n }\n this.element.addClass('active__amenity');\n this.active = true;\n if (this.hasEngineID) {\n rotation_to_flat(this.amenity);\n selectionBoxesSetStatusColor(this.amenity,'amenityHover',false,this.highlightColor);\n }\n\n if (!isMobile && this.hasEngineID){\n this.drawLine();\n this.updateLine();\n }\n }\n\n drawLine(){\n if (this.line)\n return;\n\n // this.line = createHtmlElement(document.body,'','div',['amenity__line']);\n this.line = new BaseElement()\n .addClass('amenity__line')\n .appendTo(document.body);\n const bounding = this.element.DOMElement.getBoundingClientRect();\n this.direction = getCurrentLangDirection();\n\n if (this.direction === 'rtl' && !isDesktop) {\n this.line.addStyle('left', bounding.left + bounding.width + 'px');\n } else {\n this.line.addStyle('left', bounding.left + 'px');\n }\n this.line.addStyle('top', bounding.bottom + 'px');\n }\n\n updateLine() {\n if (this.active){\n requestAnimationFrame(this.updateLine.bind(this));\n const {bottom,left,width} = this.element.DOMElement.getBoundingClientRect();\n const elementWidth = this.direction === 'rtl' && !isDesktop ? width : 0;\n const amenity2D = this.amenityPoint.DOMElement.getBoundingClientRect();\n const distanceX = Math.abs(left - amenity2D.left) - elementWidth;\n const distanceY = Math.abs(bottom - amenity2D.bottom);\n const square = Math.sqrt((distanceX * distanceX) + (distanceY * distanceY));\n const angle = Math.atan2(amenity2D.bottom - bottom,amenity2D.left - left - elementWidth);\n const degree = MathUtils.radToDeg(angle);\n this.line\n .addStyle('transform', `rotateZ(${degree}deg)`)\n .addStyle('width', `${square}px`);\n }\n }\n\n hoverOut(){\n if (this.amenity.userData.crm_data.showTarget === false) {\n this.active = false;\n this.element.removeClass('active__amenity');\n return;\n }\n this.active = false;\n this.element.removeClass('active__amenity');\n\n if (this.hasEngineID)\n selectionBoxesSetStatusColor(this.amenity,'hoverOut',false);\n\n if (this.line){\n this.line.remove();\n this.line = null;\n }\n }\n\n click(){\n intersectionClickHandler(this.amenity);\n }\n}\n\n\nclass CylinderCSSLabel extends Amenity{\n constructor (container) {\n super(container);\n \n }\n \n create (label) {\n this.amenity = new Object3D();\n this.name = label.data.title.en || Date.now();\n this.amenity.position.fromArray(label.position);\n this.amenity.name = this.name;\n this.amenity.add(this.amenityLabel);\n this.labelData = label;\n\n if (!this.labelData.data.hasOwnProperty('event')) {\n this.labelData.data.event = true;\n }\n\n this.url = new URL(label.data.url);\n this.type = this.url.pathname.match(/\\.(htm|html)/g) ? '360' : 'img';\n this.gallery = label.data?.gallery && label.data?.gallery.length > 0 ? label.data.gallery : null;\n \n this.element = new BaseElement()\n .addClass('amenity__btn')\n .addAttribute('amenity', this.name)\n .appendTo(this.container.DOMElement);\n \n if (this.type === 'img') {\n this.element.addStyle('background-image', `url(\"${Cloudflare.resize(this.url.href, {height: 256})}\")`);\n } else {\n if (this.labelData.data.preview360) {\n this.element.addStyle('background-image', `url(\"${Cloudflare.resize(this.labelData.data.preview360, {height: 256})}\")`);\n } else {\n this.element.addClass('icon-360','amenity__tour-btn');\n }\n }\n \n if (isMobile || isDesktop || isTablet) {\n this.element.event('click', () => {\n if (isMobile || isTablet) {\n this.click();\n } else {\n Amenities.unselectAmenities();\n if (this.element.DOMElement.classList.contains('active__amenity')) {\n this.hoverOut();\n } else {\n this.hover();\n }\n }\n });\n } else {\n this.element.event('mouseenter', (e) => this.hover(e));\n this.element.event('mouseleave', () => this.hoverOut());\n this.element.event('click', () => this.click());\n }\n \n const text = new BaseElement('span')\n .addClass('amenity__text', 'language-string')\n .appendTo(this.element.DOMElement);\n \n if (config.dictionary[this.name]) {\n text.addAttribute('data-dictionary',this.name);\n text.innerHtml(changeLangToCurrent(this.name));\n } else {\n Object.entries(this.labelData.data.title).forEach(([lang,value]) => {\n text.addAttribute(`data-lang-${lang}`,value);\n });\n const translation = this.labelData.data.title[getCurrentLang()] || '';\n text.innerHtml(translation);\n }\n \n if (config.resources.background.cylinderBg === 'sky')\n text.addClass('dark-text');\n \n return this;\n }\n \n hover() {\n if (this.labelData.data.rotate) {\n if (this.amenity.parent === null) {\n threeJsVariables.scene.add(this.amenity);\n }\n this.element.addClass('active__amenity');\n this.active = true;\n rotation_to_flat(this.amenity);\n } else {\n this.element.addClass('active__amenity');\n this.active = true;\n return;\n }\n\n if (!isMobile){\n this.drawLine();\n this.updateLine();\n }\n }\n \n hoverOut(){\n if (this.labelData.data.rotate) {\n this.active = false;\n this.element.removeClass('active__amenity');\n if (this.line){\n this.line.remove();\n this.line = null;\n }\n if (this.amenity.parent) {\n this.amenity.removeFromParent();\n }\n \n } else {\n this.active = false;\n this.element.removeClass('active__amenity');\n }\n }\n \n click () {\n if (!this.labelData.data.event)\n return;\n\n settingsData.stopRender = true;\n this.mainContainer = new BaseElement()\n .addClass('orbit-360-viewer')\n .appendTo(document.body);\n const content = new BaseElement()\n .addClass('orbit-360-viewer__content')\n .appendTo(this.mainContainer.DOMElement);\n \n let viewer;\n \n if (this.type === '360') {\n new Button()\n .addClass('icon-close')\n .event('click', this.closeHandler.bind(this))\n .appendTo(content.DOMElement);\n this.preloader = new BaseElement()\n .addClass('orbit-360-preloader')\n .appendTo(content.DOMElement);\n new DreamsPreloader(this.preloader.DOMElement,'orbit-360-pr').show();\n viewer = new BaseElement('iframe')\n .addClass('orbit-360-viewer__player','player-iframe')\n .addAttribute('src',this.url.href)\n .appendTo(content.DOMElement);\n viewer.DOMElement.onload = () => this.preloader.remove();\n } else {\n viewer = new BaseElement('div')\n .addClass('orbit-360-viewer__player','player-img')\n .appendTo(content.DOMElement);\n \n let data = this.gallery && this.gallery.length ? this.gallery : [this.url.href];\n data = data.map(url => Cloudflare.resize(url,{width: isMobile ? 1024 : 2880}));\n const gallery = new PhotoSwiperGallery(data,0,viewer.DOMElement);\n gallery.onClose = () => this.closeHandler();\n gallery.open();\n }\n }\n \n closeHandler() {\n this.mainContainer.remove();\n settingsData.stopRender = false;\n }\n \n}\n","'use strict';\n\nimport { createOptionsCard } from '../../cards/optionsCards';\nimport { Buildings, cardsData, isMobile } from '../../../settings';\nimport { CylinderControlPanel } from '../CylinderControlPanel/CylinderControlPanel';\nimport { changeLangToCurrent } from '../langSwitcher/langSwitcher';\n\nexport class FloorAmenities {\n constructor () {\n this.settings = null;\n }\n\n show(mesh) {\n if (!this.active) return;\n\n const floor = mesh.userData.floor;\n const data = this.getData(mesh);\n if (!data) return;\n\n const activeBuilding = Buildings.getActiveBuilding();\n const object = {\n assets: data.assets,\n floorNum: floor,\n engineId: mesh.name,\n propNum: `Floor plan`,\n buildingName: activeBuilding.info.labelName,\n buildingEngineId: activeBuilding.name\n };\n cardsData.cardMode.isAmenities = true;\n if (isMobile)\n document.querySelector('.additional-menu__container').classList.add('hidden');\n\n const card = createOptionsCard({object, settings: config, params: {}, isForeCompare: false});\n const floorPlanBtn = card?.querySelector('.options-card__plans-box_buttons-btn[data-type=\"2D\"]')?.querySelector('.options-card__plans-box_buttons-tooltip');\n if (floorPlanBtn) {\n floorPlanBtn.setAttribute('data-dictionary','Floor plan');\n floorPlanBtn.textContent = changeLangToCurrent('Floor plan');\n }\n }\n \n addIcon(parent,mesh) {\n if (!this.active) return;\n const data = this.getData(mesh);\n if (!data) return;\n\n const amenitiesContainer = parent.querySelector('.floor-amenities');\n if (amenitiesContainer) {\n amenitiesContainer.classList.add('icon-info');\n }\n }\n\n getData(mesh) {\n const floor = mesh.userData.floor;\n const activeBuildingName = Buildings.getActiveBuilding().name;\n\n return this.settings[activeBuildingName]?.floorAmenities.find(el => floor >= el.from && floor <= el.to);\n }\n\n set settingsData(data) {\n this.settings = data;\n }\n\n get active(){\n return this.settings;\n }\n}\n","\"use strict\";\n\nimport {BaseElement} from \"../interfaces/BaseElement\";\nimport {changeLangToCurrent, getCurrentLang} from \"./langSwitcher/langSwitcher\";\nimport gsap from \"gsap\";\nimport {createHtmlElement, getUrlParam} from \"../../functions\";\nimport { DreamsPreloader } from './preloader/DreamsPreloader';\n\nexport class Banner extends BaseElement {\n #root;\n #wrapper;\n #configData;\n #preloader = null;\n\n constructor(configData) {\n super();\n\n this.#configData = configData;\n if (!this.#configData.active)\n return;\n\n this.#root = this;\n this.#root\n .addClass('banner', this.#configData.name)\n .appendTo(document.body);\n\n this.#addElements();\n this.#show();\n }\n\n #addElements() {\n this.#wrapper = new BaseElement()\n .addClass('banner__wrapper')\n .event('click', this.#clickActionHandler.bind(this))\n .appendTo(this.#root.DOMElement);\n\n const contentWrapper = new BaseElement()\n .addClass('banner__content-wrapper')\n .appendTo(this.#wrapper.DOMElement);\n\n const titleConfigData = this.#configData.title;\n const title = new BaseElement('h3')\n .addClass('banner__title')\n .appendTo(contentWrapper.DOMElement);\n this.#addTranslationToElement(title, titleConfigData);\n\n const subTitle = new BaseElement('div')\n .addClass('banner__sub-title')\n .appendTo(contentWrapper.DOMElement);\n\n const subTitleConfigData = this.#configData.subTitle;\n const subtitleText = new BaseElement('h5')\n .addClass('banner__sub-text')\n .appendTo(subTitle.DOMElement);\n this.#addTranslationToElement(subtitleText, subTitleConfigData);\n\n const actionButtonConfigData = this.#configData.actionButton.title;\n if (actionButtonConfigData) {\n const actionButton = new BaseElement('button')\n .addClass('banner__action-button')\n .appendTo(subTitle.DOMElement);\n this.#addTranslationToElement(actionButton, actionButtonConfigData);\n }\n\n new BaseElement('button')\n .addClass('banner__close-button', 'close-button-cross')\n .appendTo(this.#wrapper.DOMElement);\n\n new BaseElement('span')\n .addClass('banner__icon', 'icon-horn')\n .appendTo(this.#wrapper.DOMElement);\n }\n\n #clickActionHandler(event) {\n if (!event.target.classList.contains('banner__close-button')) {\n switch(this.#configData.actionButton.action) {\n case 'iframe':\n this.#createIframe();\n break;\n case 'tab':\n this.#openTab();\n break;\n }\n }\n\n gsap.to(this.DOMElement, {\n duration: 0.75,\n scale: 0,\n onComplete: () => {\n this.remove();\n }\n });\n }\n\n #createIframe() {\n const iframeContainer = new BaseElement()\n .addClass('banner__iframe-container')\n .appendTo(document.body);\n\n this.#addPreloader(iframeContainer.DOMElement);\n\n const iframeWrapper = new BaseElement()\n .addClass('banner__iframe-wrapper')\n .appendTo(iframeContainer.DOMElement);\n\n const iframe = new BaseElement('iframe')\n .addClass('banner__iframe')\n .addAttribute('src', this.#getParsedURL())\n .appendTo(iframeWrapper.DOMElement);\n\n new BaseElement('button')\n .addClass('prepayment__close-btn','icon-close')\n .event('click', () => { iframeContainer.remove() })\n .appendTo(iframeWrapper.DOMElement);\n\n iframe.DOMElement.onload = () => this.#removePreloader();\n }\n\n #openTab() {\n open(this.#configData.actionButton.url, \"_blank\");\n }\n\n #getParsedURL() {\n const url = new URL(this.#configData.actionButton.url);\n if (url.pathname === '/PaymentGateWay/NewWizard/')\n url.pathname += `${getCurrentLang()}/`;\n\n const clientId = getUrlParam('clientId');\n if (clientId)\n url.search += `&i=${clientId}`;\n\n return url;\n }\n\n #addPreloader(parent,customClass) {\n this.#preloader = new DreamsPreloader(parent,customClass).show();\n }\n\n #removePreloader() {\n this.#preloader && this.#preloader.remove();\n this.#preloader = null;\n }\n\n #addTranslationToElement(element, translations) {\n element\n .addClass('language-string')\n .innerHtml(changeLangToCurrent(translations[getCurrentLang()]))\n\n for (const key in translations) {\n element.addAttribute(`data-lang-${key}`, translations[key])\n }\n }\n\n #show() {\n gsap.fromTo(\n this.#root.DOMElement,\n {\n scale: 0,\n },\n {\n duration: 0.75,\n scale: 1,\n onStart: () => {\n this.#root.removeClass('hidden')\n },\n onComplete: () => {\n this.#root.DOMElement.style = '';\n }\n }\n )\n }\n}\n","'use strict';\n\nimport {BaseElement} from \"../../interfaces/BaseElement\";\nimport {isDev, settingsData, threeJsVariables} from \"../../../settings\";\nimport {ViewMode} from \"../../../common\";\nimport {getCurrentCameraDistance} from \"../../controls/orbitControls\";\n\nexport class ConfigInformer {\n\tconstructor() {\n\t\tif (!isDev)\n\t\t\treturn;\n\n\t\tconst self = this;\n\n\t\tdocument.addEventListener('keydown', function (event) {\n\t\t\tif (event.ctrlKey && event.altKey && event.key === 'p') {\n\t\t\t\tdocument.removeEventListener('keydown', cylinderClearSettingsHandler);\n\t\t\t\tswitch (settingsData.activeViewMode) {\n\t\t\t\t\tcase ViewMode.Orbit:\n\t\t\t\t\t\tself.cameraPosition;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ViewMode.Cylinder:\n\t\t\t\t\t\tdocument.addEventListener('keydown', cylinderClearSettingsHandler);\n\t\t\t\t\t\tself.cylinderCameraLimits;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ViewMode.FloorPlan:\n\t\t\t\t\t\tdocument.addEventListener('keydown', keyplanClearSettingsHandler);\n\t\t\t\t\t\tself.keyplanCameraLimits;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tfunction cylinderClearSettingsHandler(event) {\n\t\t\tif (event.ctrlKey && event.altKey && event.key === 'c') {\n\t\t\t\tconsole.log('%cCylinder limits are set to the debug values', 'color: palegreen');\n\t\t\t\tconfig.threejs.orbitControls.cylinder.desktop.min = 0;\n\t\t\t\tconfig.threejs.orbitControls.cylinder.desktop.max = 500;\n\t\t\t}\n\t\t}\n\n\t\tfunction keyplanClearSettingsHandler(event) {\n\t\t\tif (event.ctrlKey && event.altKey && event.key === 'c') {\n\t\t\t\tconsole.log('%cKeyplan limits are set to the debug values', 'color: palegreen');\n\t\t\t\tconfig.threejs.orbitControls.floorplan.desktop.min = 10;\n\t\t\t\tconfig.threejs.orbitControls.floorplan.desktop.max = 500;\n\t\t\t}\n\t\t}\n\t}\n\n\tget cameraPosition() {\n\t\tnew InformerWindow(`\n\t\t\t
\n\t\t\t\tCamera x: ${threeJsVariables.perspectiveCamera.position.x}\n\t\t\t\tCamera y: ${threeJsVariables.perspectiveCamera.position.y}\n\t\t\t\tCamera z: ${threeJsVariables.perspectiveCamera.position.z}\n\t\t\t\t\t\t\n\t\t\t\tOrbit x: ${threeJsVariables.orbitControls.target.x}\n\t\t\t\tOrbit y: ${threeJsVariables.orbitControls.target.y}\n\t\t\t\tOrbit z: ${threeJsVariables.orbitControls.target.z}\n\t\t\t
\n\t\t`);\n\t}\n\n\tget cylinderCameraLimits() {\n\t\tnew InformerWindow(`\n\t\t\t
\n\t\t\t\tCamera distance: ${getCurrentCameraDistance()}\n\t\t\t
\n\t\t`);\n\t}\n\n\tget keyplanCameraLimits() {\n\t\tnew InformerWindow(`\n\t\t\t
\n\t\t\t\tCamera distance: ${getCurrentCameraDistance()}\n\t\t\t
\n\t\t`);\n\t}\n}\n\nclass InformerWindow {\n\t#rootElement;\n\t#content;\n\n\tconstructor(content) {\n\t\tthis.#content = content;\n\t\tthis.#rootElement = this.#create();\n\t}\n\n\t#create() {\n\t\tconst window = new BaseElement()\n\t\t\t.addStyle('position', 'fixed')\n\t\t\t.addStyle('z-index', Infinity)\n\t\t\t.addStyle('top', '50%')\n\t\t\t.addStyle('left', '50%')\n\t\t\t.addStyle('background-color', 'black')\n\t\t\t.addStyle('color', 'green')\n\t\t\t.addStyle('font-weight', '700')\n\t\t\t.addStyle('padding', '10px')\n\t\t\t.addStyle('border-radius', '10px')\n\t\t\t.addStyle('font-size', '20px')\n\t\t\t.innerHtml(this.#content)\n\t\t\t.appendTo(document.body);\n\t\tnew BaseElement()\n\t\t\t.addClass('close-button-cross')\n\t\t\t.event('click', () => window.remove())\n\t\t\t.appendTo(window.DOMElement);\n\n\t\treturn window;\n\t}\n}","'use strict';\n\nimport {isMobile, projectMode, settingsData, TRoot} from \"../../../settings\";\nimport {BaseElement} from \"../../interfaces/BaseElement\";\nimport gsap from 'gsap';\nimport {isOptionsCardOpened, setCSSVar} from \"../../../functions\";\n\nexport class CylinderControlPanel {\n static #element = null;\n static #backButton = null;\n static #activeButtons = [\n 'back'\n ];\n constructor() {\n if (CylinderControlPanel.#element || !isMobile)\n return;\n\n CylinderControlPanel.#element = new BaseElement()\n .addClass('cylinder-control-panel')\n .appendTo(TRoot);\n CylinderControlPanel.#addButtons();\n CylinderControlPanel.updateWidthCssVar();\n }\n\n static #addButtons() {\n CylinderControlPanel.#createButtons();\n CylinderControlPanel.#addListenersToButtons();\n CylinderControlPanel.#addIconsToButtons();\n }\n\n static updateWidthCssVar() {\n if (!isMobile)\n return;\n\n setCSSVar('--cylinderControlPanelWidth', `${parseInt(CylinderControlPanel.#width)}px`);\n }\n\n static #createButtons() {\n CylinderControlPanel.#backButton =\n CylinderControlPanel.#activeButtons.includes('back') && new CylinderControlPanelButton('Back')\n .appendTo(CylinderControlPanel.#element.DOMElement);\n }\n\n static #addListenersToButtons() {\n CylinderControlPanel.#backButton && CylinderControlPanel.#backButton.event('click', CylinderControlPanel.#backButtonHandler);\n }\n\n static #addIconsToButtons() {\n CylinderControlPanel.#backButton && new BaseElement('span')\n .addClass('cylinder-control-panel__button-icon', 'icon-back')\n .appendTo(CylinderControlPanel.#backButton.DOMElement);\n }\n\n static async #backButtonHandler() {\n if (settingsData.buildingDestroyed)\n await projectMode.FloorPlan.exitFromMode();\n\n CylinderControlPanel.update();\n }\n\n static update() {\n if (!CylinderControlPanel.#element)\n return;\n\n const optionsCard = Boolean(document.querySelector('.options-card'));\n if (optionsCard) {\n CylinderControlPanel.#element.addClass('hidden');\n return;\n } else {\n CylinderControlPanel.#element.removeClass('hidden');\n }\n if (settingsData.buildingDestroyed) {\n CylinderControlPanel.showButton(CylinderControlPanel.#backButton);\n } else {\n CylinderControlPanel.hideButton(CylinderControlPanel.#backButton);\n }\n\n CylinderControlPanel.updateWidthCssVar();\n }\n\n static remove() {\n if (!CylinderControlPanel.#element)\n return;\n\n CylinderControlPanel.#element.remove();\n CylinderControlPanel.#element = null;\n }\n\n static get #width() {\n return CylinderControlPanel.#element.DOMElement.getBoundingClientRect().width;\n }\n\n static showButton(button) {\n // if (typeof button === 'string') {\n // switch(button) {\n // case 'key-plan':\n // button = CylinderControlPanel.#keyplanButton;\n // break;\n // default:\n // button = undefined;\n // break;\n // }\n // }\n\n if (!button || !button.DOMElement.classList.contains('hidden'))\n return;\n\n gsap.fromTo(\n button.DOMElement,\n {x: 200},\n {\n x: 0,\n duration: settingsData.animationsDuration,\n onStart: () => {\n button.removeClass('hidden');\n }\n }\n );\n }\n\n static hideButton(button) {\n // if (typeof button === 'string') {\n // switch(button) {\n // case 'key-plan':\n // button = CylinderControlPanel.#keyplanButton;\n // break;\n // default:\n // button = undefined;\n // break;\n // }\n // }\n\n if (!button || button.DOMElement.classList.contains('hidden'))\n return;\n\n gsap.fromTo(\n button.DOMElement,\n {x: 0},\n {\n x: 200,\n duration: settingsData.animationsDuration,\n onComplete: () => {\n button.addClass('hidden');\n }\n }\n );\n }\n\n static hide() {\n if (!Boolean(CylinderControlPanel.#element))\n return;\n\n CylinderControlPanel.#element.addClass('hidden');\n }\n\n static show() {\n if (!Boolean(CylinderControlPanel.#element) || isOptionsCardOpened())\n return;\n\n CylinderControlPanel.#element.removeClass('hidden');\n }\n}","'use strict';\n\nimport { Vector3 } from 'three';\nimport { getWorldData } from '../../controls/orbitControls';\nimport { radToDeg } from 'three/src/math/MathUtils';\nimport gsap from 'gsap';\nimport { settingsData, threeJsVariables } from '../../../settings';\nimport { ViewMode } from '../../../common';\n\nexport class Disappear {\n static #objectsToDisappear = [];\n static #cameraVec = new Vector3();\n static #objectVec = new Vector3();\n\n #mesh;\n #duration;\n #disappearDegrees;\n\n constructor (mesh,disappearDegrees = 45, duration = 0.3) {\n this.#mesh = mesh;\n this.#disappearDegrees = disappearDegrees;\n this.#duration = duration;\n this.hided = false;\n\n Disappear.#objectsToDisappear.push(this);\n this.update();\n }\n\n #applyEffect(state,material) {\n if (state === 'show') {\n gsap.to(material,{\n duration: this.#duration,\n opacity: material.userData.defaultSettings.opacity,\n onStart: () => {\n this.#mesh.visible = true;\n material.transparent = true;\n },\n onComplete: () => {\n this.hided = false;\n material.transparent = material.userData.defaultSettings.transparent\n }\n });\n } else {\n gsap.to(material,{\n duration: this.#duration,\n opacity: 0,\n onStart: () => {\n material.transparent = true;\n },\n onComplete: () => this.#mesh.visible = false\n });\n }\n }\n\n hide() {\n if (this.hided) return;\n this.hided = true;\n\n if (this.#duration === 0) {\n this.#mesh.visible = false;\n } else {\n if (Array.isArray(this.#mesh.material)) {\n this.#mesh.material.forEach(material => this.#applyEffect('hide',material));\n } else {\n this.#applyEffect('hide',this.#mesh.material);\n }\n }\n }\n\n show() {\n if (this.hided) {\n\n if (this.#duration === 0) {\n this.hided = false;\n this.#mesh.visible = true;\n } else {\n if (Array.isArray(this.#mesh.material)) {\n this.#mesh.material.forEach(material => this.#applyEffect('show',material));\n } else {\n this.#applyEffect('show',this.#mesh.material);\n }\n }\n }\n }\n \n update() {\n Disappear.#objectVec.copy(this.#mesh.position);\n Disappear.#objectVec.setY(0);\n Disappear.#cameraVec.copy(threeJsVariables.perspectiveCamera.position);\n Disappear.#cameraVec.setY(0);\n \n const angle = Disappear.#cameraVec.angleTo(Disappear.#objectVec);\n const degrees = radToDeg(angle);\n \n if (degrees < this.#disappearDegrees) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n static update() {\n if (!Disappear.#objectsToDisappear.length || settingsData.activeViewMode !== ViewMode.Orbit) return;\n\n for (let i = 0; i < Disappear.#objectsToDisappear.length; i++) {\n Disappear.#objectsToDisappear[i].update();\n }\n }\n}\n\n\nexport function prepareObjectsToDisappear () {\n const bundle = threeJsVariables.bundleConfig?.objectsDisappear || [];\n const fromConfig = config.features.objectsDisappear || [];\n const objects = bundle.concat(fromConfig);\n objects.forEach(data => {\n const object = threeJsVariables.scene.getObjectByName(data.name);\n if (object) {\n new Disappear(object,data.disappearDegrees,data.disappearDuration);\n }\n });\n}\n","'use strict';\n\nimport {changeLangToCurrent, getCurrentLang} from '../langSwitcher/langSwitcher';\nimport {isMobile, isNoMenu, settingsData, TRoot} from \"../../../settings\";\nimport {BaseElement} from \"../../interfaces/BaseElement\";\nimport {BmbyMode} from \"../../mode/BmbyMode\";\nimport {ViewMode} from \"../../../common\";\n\nexport class Disclaimer {\n\t#element = document.createElement('span');\n\t#text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.';\n\t#additionalClassName;\n\n\tconstructor(parent, text, className) {\n\t\tif (!parent)\n\t\t\treturn;\n\n\t\tif (className)\n\t\t\tthis.#additionalClassName = className;\n\t\tif (this.#additionalClassName)\n\t\t\tthis.#element.classList.add(this.#additionalClassName);\n\n\t\tif (isNoMenu)\n\t\t\tthis.#element.classList.add('no-menu-mode');\n\n\t\tif (text)\n\t\t\tthis.#text = text;\n\n\t\tif (isMobile && className === 'disclaimer__main-screen' && settingsData.activeViewMode === ViewMode.Cylinder)\n\t\t\tthis.#element.classList.add('hidden');\n\n\n\t\tthis.#element.classList.add('disclaimer', 'language-string');\n\t\tthis.#setText();\n\n\t\tparent.appendChild(this.#element);\n\t}\n\n\tset text(value) {\n\t\tif (!this.#element) return;\n\n\t\tthis.#text = value;\n\t\tthis.#setText();\n\t}\n\n\tset style(value) {\n\t\tif (!this.#element) return;\n\n\t\tthis.#element.style[value.style] = value.value;\n\t}\n\n\tset textHtml(value) {\n\t\tif (!this.#element) return;\n\t\tthis.#text = value;\n\t\tthis.#element.innerHTML = this.#text;\n\t}\n\n\tget element() {\n\t\treturn this.#element;\n\t}\n\n\t#setText() {\n\t\tconst IS_LONG = isMobile ? 55 : 110;\n\n\t\tconst addDisclaimerBackupText = () => {\n\t\t\tthis.#element.classList.remove('language-string');\n\t\t\tthis.#element.style.cursor = 'pointer';\n\t\t\tnew BaseElement('span')\n\t\t\t\t.addClass('disclaimer__text', 'language-string')\n\t\t\t\t.addAttribute('data-dictionary', 'disclaimerBackup')\n\t\t\t\t.innerHtml(changeLangToCurrent('disclaimerBackup'))\n\t\t\t\t.appendTo(this.#element);\n\t\t\tnew BaseElement('span')\n\t\t\t\t.addClass('disclaimer__info-icon', 'icon-info')\n\t\t\t\t.appendTo(this.#element);\n\t\t}\n\n\t\tif (Array.isArray(this.#text)) {\n\t\t\tconst englishTranslationLength = this.#text.find(item => item?.lang === 'en')?.value.length;\n\t\t\tif (englishTranslationLength > IS_LONG) {\n\t\t\t\tthis.#element.addEventListener('click', () => {\n\t\t\t\t\tthis.createDisclaimerPopUp(changeLangToCurrent(this.#text.find(item => item?.lang === getCurrentLang())?.value));\n\t\t\t\t});\n\t\t\t\taddDisclaimerBackupText();\n\t\t\t} else {\n\t\t\t\tthis.#text.forEach(item => {\n\t\t\t\t\tif (item && item.value.length) {\n\t\t\t\t\t\tthis.#element.setAttribute(`data-lang-${item.lang}`, item?.value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst value = config.dictionary['disclaimerBackup'][item.lang] || config.dictionary['disclaimerBackup'].en;\n\t\t\t\t\t\titem.value = value;\n\t\t\t\t\t\tthis.#element.setAttribute(`data-lang-${item.lang}`,value);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tthis.#element.innerHTML = changeLangToCurrent(this.#text.find(item => item?.lang === getCurrentLang())?.value);\n\t\t\t}\n\t\t} else {\n\t\t\tif (config.dictionary?.[this.#text]?.['en']?.length > IS_LONG) {\n\t\t\t\tthis.#element.addEventListener('click', () => {\n\t\t\t\t\tthis.createDisclaimerPopUp(changeLangToCurrent(this.#text));\n\t\t\t\t});\n\t\t\t\taddDisclaimerBackupText();\n\t\t\t} else {\n\t\t\t\tthis.#element.setAttribute('data-dictionary', this.#text);\n\t\t\t\tthis.#element.innerHTML = changeLangToCurrent(this.#text);\n\t\t\t}\n\t\t}\n\t}\n\n\tsetStyle(styleName, value) {\n\t\tif (!this.#element) return;\n\n\t\tthis.#element.style[`${styleName}`] = value;\n\t}\n\n\taddClass(className) {\n\t\tif (!this.#element) return;\n\n\t\tthis.#element.classList.add(className);\n\t}\n\n\tshow() {\n\t\tif (!this.#element) return;\n\n\t\tthis.#element.classList.remove('hidden');\n\t}\n\n\thide() {\n\t\tif (!this.#element) return;\n\n\t\tthis.#element.classList.add('hidden');\n\t}\n\n\tcreateDisclaimerPopUp(text) {\n\t\tif (TRoot.querySelector('.disclaimer__pop-up'))\n\t\t\treturn;\n\n\t\tconst additionalClass = this.#additionalClassName === 'options-card__disclaimer' ? 'options-card__disclaimer-pop-up' : undefined;\n\t\tconst popUp = new BaseElement()\n\t\t\t.addClass('disclaimer__pop-up', additionalClass)\n\t\t\t.appendTo(TRoot);\n\t\tnew BaseElement('span')\n\t\t\t.addClass('disclaimer__pop-up-text')\n\t\t\t.innerHtml(text)\n\t\t\t.appendTo(popUp.DOMElement);\n\t\tnew BaseElement('button')\n\t\t\t.addClass('disclaimer__pop-up-close', 'close-button-cross')\n\t\t\t.event('click', () => {\n\t\t\t\tpopUp.remove();\n\t\t\t})\n\t\t\t.appendTo(popUp.DOMElement);\n\n\t\tconst disclaimerClickPopUpHandler = (event) => {\n\t\t\tif (event.target.closest('.disclaimer__pop-up') || event.target.closest('.disclaimer'))\n\t\t\t\treturn;\n\n\t\t\tpopUp.remove();\n\t\t\twindow.removeEventListener('click', disclaimerClickPopUpHandler);\n\t\t};\n\t\twindow.addEventListener('click', disclaimerClickPopUpHandler);\n\t}\n}\n\nexport class LegalComments extends Disclaimer {\n\tconstructor(mesh, parent, text) {\n\t\tsuper(parent, text);\n\n\t\tthis.comments = mesh ? mesh.userData.crm_data.assets.legalComments : null;\n\t}\n\n\tsetComment(type) {\n\t\tlet text = '';\n\n\t\tswitch (type) {\n\t\t\tcase '2D':\n\t\t\t\ttext = Array.isArray(this.comments?.plan2D) ?\n\t\t\t\t\tthis.comments.plan2D.find(obj => obj.lang === getCurrentLang()).value : null;\n\t\t\t\tif (text) {\n\t\t\t\t\tthis.textHtml = text;\n\t\t\t\t\tthis.setTranslation(this.comments.plan2D);\n\t\t\t\t} else {\n\t\t\t\t\tthis.text = '2dDisclaimer';\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase '360Sample':\n\t\t\t\ttext = Array.isArray(this.comments?.tours360) ?\n\t\t\t\t\tthis.comments.tours360.find(obj => obj.lang === getCurrentLang()).value : null;\n\t\t\t\tif (text) {\n\t\t\t\t\tthis.textHtml = text;\n\t\t\t\t\tthis.setTranslation(this.comments.tours360);\n\t\t\t\t} else {\n\t\t\t\t\tthis.text = '360sampleDisclaimer';\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase '360':\n\t\t\t\ttext = Array.isArray(this.comments?.tours360) ?\n\t\t\t\t\tthis.comments.tours360.find(obj => obj.lang === getCurrentLang()).value : null;\n\t\t\t\tif (text) {\n\t\t\t\t\tthis.textHtml = text;\n\t\t\t\t\tthis.setTranslation(this.comments.tours360);\n\t\t\t\t} else {\n\t\t\t\t\tthis.text = '360Disclaimer';\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'vantage':\n\t\t\t\ttext = Array.isArray(this.comments?.vantage) ?\n\t\t\t\t\tthis.comments.vantage.find(obj => obj.lang === getCurrentLang()).value : null;\n\t\t\t\tif (text) {\n\t\t\t\t\tthis.textHtml = text;\n\t\t\t\t\tthis.setTranslation(this.comments.vantage);\n\t\t\t\t} else {\n\t\t\t\t\tthis.text = 'vantageDisclaimer';\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'gallery':\n\t\t\t\ttext = Array.isArray(this.comments?.gallery) ?\n\t\t\t\t\tthis.comments.gallery.find(obj => obj.lang === getCurrentLang()).value : null;\n\t\t\t\tif (text) {\n\t\t\t\t\tthis.textHtml = text;\n\t\t\t\t\tthis.setTranslation(this.comments.gallery);\n\t\t\t\t} else {\n\t\t\t\t\tthis.text = 'optionsCardGalleryDisclaimer';\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.hide();\n\t\t}\n\t}\n\n\tsetTranslation(commentsArray) {\n\t\tthis.element.removeAttribute('data-dictionary');\n\t\tcommentsArray.forEach(comment => {\n\t\t\tthis.element.setAttribute(`data-lang-${comment.lang}`, comment.value);\n\t\t});\n\t}\n}\n","'use strict';\n\nimport axios from 'axios';\nimport { Group, Matrix4 } from 'three';\nimport { ParksEnvironment } from './EnvironmentLayers/ParksEnvironment';\nimport {resourcesFolder, settingsData, threeJsVariables} from '../../../settings';\nimport { BaseElement } from '../../interfaces/BaseElement';\nimport { changeLangToCurrent, getCurrentLang } from '../langSwitcher/langSwitcher';\nimport { LeisureEnvironment } from './EnvironmentLayers/LeisureEnvironment';\nimport { EducationEnvironment } from './EnvironmentLayers/EducationEnvironment';\nimport { FunEnvironment } from './EnvironmentLayers/FunEnvironment';\nimport { RoadsEnvironment } from './EnvironmentLayers/RoadsEnvironment';\nimport { RailwayEnvironment } from './EnvironmentLayers/RailwayEnvironment';\nimport { TerrainEnvironment } from '../Terrain/Terrain';\nimport { Popup } from '../publicLayers/Popup';\nimport { buildingHoverOut } from '../../threejs/raycast';\nimport { Cloudflare } from '../../api/Cloudflare';\nimport { BuildingsEnvironment } from './EnvironmentLayers/BuildingEnvironment';\nimport { DayNightEnvironment } from './EnvironmentLayers/DayNightEnvironment';\nimport { Loader } from '../../threejs/loader/Loader';\nimport { SeaEnvironment } from './EnvironmentLayers/SeaEnvironment';\nimport { TreesEnvironment } from './EnvironmentLayers/TreesEnvironment';\nimport { OrbitDayAndNight } from '../../liveAnimations/DayNight/OrbitDayAndNight';\nimport { BmbyMode } from '../../mode/BmbyMode';\nimport {lordIconColors} from \"../../../lordicon\";\nimport { DayNightButton } from '../../threejs/DayNightButton/DayNightButton';\n\nconst DEFAULT_SETTINGS = {\n\tactive: false,\n};\n\nlet intersectedEnvironment = null;\nlet environmentObject = null;\n\nexport class Environment {\n\tstatic scope = null;\n\n\tconstructor () {\n\t\tif (config.features.environment) {\n\t\t\tthis.params = config.features.environment;\n\t\t} else {\n\t\t\tthis.params = DEFAULT_SETTINGS;\n\t\t}\n\n\t\tthis.group = new Group();\n\t\tthis.group.name = 'Environment';\n\t\tthis.environments = {};\n\t\tthis.lat = 0;\n\t\tthis.lng = 0;\n\t\tthis.activePublicLayer = null;\n\t\tthis.bundleScene = null;\n\t\tthis.bundleLoaded = false;\n\t\tthis.popup = new Popup();\n\t\tEnvironment.scope = this;\n\t}\n\n\tload () {\n\t\tif (!this.active || BmbyMode.active) return;\n\n\t\tif (Environment.fromBundle()) {\n\t\t\tconst loader = new Loader();\n\t\t\tconst dracoLoader = loader.dracoLoader;\n\t\t\tdracoLoader.load(`${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/points/osm.glb?v=${Cloudflare.version}`, glb => {\n\t\t\t\tthis.bundleScene = glb.scene;\n\t\t\t\tthis.config = glb.scene.userData.config;\n\t\t\t\tif (this.config) {\n\t\t\t\t\tconst dayNightButtonWrapp = document.querySelector('.weather-description-wrapp .switch-wrapp');\n\t\t\t\t\tdayNightButtonWrapp && DayNightButton.canActivate() && new DayNightButton(dayNightButtonWrapp);\n\t\t\t\t\tconst environmentToggle = document.querySelector('.environment-toggle-container');\n\t\t\t\t\tenvironmentToggle && (environmentToggle.style.display = 'none');\n\t\t\t\t}\n\t\t\t\tthis.#onLoad();\n\t\t\t});\n\t\t} else {\n\t\t\taxios.get(`${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/points/environment.json?v=${Cloudflare.version}`)\n\t\t\t\t.then(response => this.config = response.data)\n\t\t\t\t.catch(() => this.config = {})\n\t\t\t\t.finally(() => this.#onLoad());\n\t\t}\n\t}\n\n\t#onLoad () {\n\t\tif (!Object.keys(this.config).length) {\n\t\t\tthis.params.active = false;\n\t\t\treturn;\n\t\t}\n\n\t\tconst root = Environment.fromBundle() ? this.config.Environment : this.config;\n\n\t\tthis.lat = root.lat;\n\t\tthis.lng = root.lng;\n\t\tconst matrix = new Matrix4().fromArray(root.matrix);\n\t\tthis.group.applyMatrix4(matrix);\n\n\t\tthis.environments = {\n\t\t\tTerrain: new TerrainEnvironment(),\n\t\t\tBuildings: new BuildingsEnvironment(),\n\t\t\tDayNight: new DayNightEnvironment(),\n\t\t\tSea: new SeaEnvironment(),\n\t\t\tTrees: new TreesEnvironment(),\n\t\t\tHighway: new RoadsEnvironment(),\n\t\t\tRailway: new RailwayEnvironment(),\n\t\t\tParks: new ParksEnvironment(),\n\t\t\tEducation: new EducationEnvironment(),\n\t\t\tLeisure: new LeisureEnvironment(),\n\t\t\tFun: new FunEnvironment(),\n\t\t};\n\n\t\tObject.entries(this.environments).forEach(([name, scope]) => {\n\t\t\tthis.group.add(scope.group);\n\n\t\t\tif (Environment.fromBundle()) {\n\t\t\t\tscope.loadFromBundle(this.bundleScene, this.config);\n\t\t\t} else {\n\t\t\t\tscope.settings = this.config[name];\n\n\t\t\t\t// if (name === 'Buildings' && this.config[name]) {\n\t\t\t\t// \tscope.load();\n\t\t\t\t// }\n\n\t\t\t\tif (name === 'DayNight' && this.config[name]) {\n\t\t\t\t\tscope.create();\n\t\t\t\t}\n\n\t\t\t\t// if (name === 'Terrain' && this.config[name]) {\n\t\t\t\t// \tscope.create();\n\t\t\t\t// }\n\t\t\t}\n\t\t});\n\n\t\tif (OrbitDayAndNight.isActiveAndSelected) {\n\t\t\tEnvironment.toggle3D('show');\n\t\t}\n\n\t\tthreeJsVariables.scene.add(this.group);\n\t\tthis.bundleLoaded = true;\n\t}\n\n\tasync createPublicLayers (container) {\n\t\tconst publicLayerContainer = new BaseElement()\n\t\t\t.addClass('public-layers', 'display-option')\n\t\t\t.appendTo(container)\n\t\t\t.DOMElement;\n\n\t\tnew BaseElement()\n\t\t\t.addClass('public-layers__toggle-block')\n\t\t\t.appendTo(publicLayerContainer)\n\t\t\t.DOMElement;\n\n\t\t// new BaseElement('span')\n\t\t// \t.addClass('public-layers__title', 'language-string')\n\t\t// \t.innerHtml(changeLangToCurrent('Public layers'))\n\t\t// \t.addAttribute('data-dictionary', 'Public layers')\n\t\t// \t.appendTo(toggleBlock);\n\n\t\tconst layersContainer = new BaseElement()\n\t\t\t.addClass('public-layers__elements')\n\t\t\t.appendTo(publicLayerContainer)\n\t\t\t.event('click', this.publicLayersHandler.bind(this))\n\t\t\t.DOMElement;\n\n\t\tif (Environment.fromBundle()) {\n\t\t\tawait new Promise(resolve => {\n\t\t\t\tconst awaitBundleInterval = setInterval(() => {\n\t\t\t\t\tif (this.bundleLoaded) {\n\t\t\t\t\t\tclearInterval(awaitBundleInterval);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t}\n\t\t\t\t},100);\n\t\t\t});\n\t\t}\n\n\t\tObject.entries(this.environments).forEach(([name, scope]) => {\n\t\t\tif (name !== 'Terrain' && name !== 'Buildings' && name !== 'Sea' && name !== 'Trees') {\n\t\t\t\tscope.createPublicButton(layersContainer);\n\t\t\t}\n\t\t});\n\t}\n\n\tpublicLayersHandler (e) {\n\t\tconst button = e.target.closest('.public-layer__btn');\n\t\tif (!button)\n\t\t\treturn;\n\n\t\tif (settingsData.isConferenceHost) {\n\t\t\tconst dealsButtonElement = document.querySelector('.public-layer__btn.deals');\n\t\t\t// const {primaryColor, secondaryColor, activeColor} = getLordIconColor();\n\n\t\t\tif (!button.classList.contains('deals')) {\n\t\t\t\tplaydownDeals(dealsButtonElement, lordIconColors.primary, lordIconColors.secondary);\n\t\t\t} else {\n\t\t\t\tconst state = dealsButtonElement.getAttribute('state');\n\t\t\t\tif (state === 'pressed') {\n\t\t\t\t\tplaydownDeals(dealsButtonElement, lordIconColors.primary, lordIconColors.secondary);\n\t\t\t\t} else {\n\t\t\t\t\thighlightDeals(dealsButtonElement, lordIconColors.active);\n\n\t\t\t\t\tconst id = button.getAttribute('data-public-layer');\n\t\t\t\t\tconst previouslyActiveLayer = Object.values(this.environments).find(scope => scope?.active);\n\t\t\t\t\tif (previouslyActiveLayer && previouslyActiveLayer.id !== id) {\n\t\t\t\t\t\tpreviouslyActiveLayer.publicButtonHandler();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst id = button.getAttribute('data-public-layer');\n\t\tif (this.environments[id]) {\n\t\t\tconst previouslyActiveLayer = Object.values(this.environments).find(scope => scope?.active);\n\t\t\tif (previouslyActiveLayer && previouslyActiveLayer.id !== id)\n\t\t\t\tpreviouslyActiveLayer.publicButtonHandler();\n\t\t\tthis.environments[id].publicButtonHandler();\n\t\t\tthis.activePublicLayer = this.environments[id];\n\t\t\tif (previouslyActiveLayer && previouslyActiveLayer.id === id)\n\t\t\t\tthis.activePublicLayer = null;\n\t\t} else {\n\t\t\tthis.activePublicLayer = null;\n\t\t}\n\n\t\tthis.popup.hidePopup();\n\n\t\tfunction playdownDeals(dealsButtonElement, primaryColor, secondaryColor) {\n\t\t\tdocument.querySelectorAll('.deals-point').forEach(item => item.classList.add('hidden'));\n\t\t\tdealsButtonElement.setAttribute('state', 'non-pressed');\n\n\t\t\tconst icon = dealsButtonElement.querySelector('.lord__icon');\n\t\t\ticon.setAttribute('colors',`primary:${primaryColor},secondary:${secondaryColor}`);\n\t\t\tdealsButtonElement.style.color = '';\n\t\t}\n\n\t\tfunction highlightDeals(dealsButtonElement, activeColor) {\n\t\t\tdealsButtonElement.setAttribute('state', 'pressed');\n\t\t\tdocument.querySelectorAll('.deals-point').forEach(item => item.classList.remove('hidden'));\n\n\t\t\tconst icon = dealsButtonElement.querySelector('.lord__icon');\n\t\t\ticon.setAttribute('colors',`primary:${activeColor},secondary:${activeColor}`);\n\t\t\tdealsButtonElement.style.color = activeColor;\n\t\t}\n\t}\n\n\taddCustomLayer (key, layer) {\n\t\tthis.environments[key] = layer;\n\t}\n\n\tgetEnvironmentTransformation () {\n\t\tconst matrix = new Matrix4();\n\t\tmatrix.copy(this.group.matrixWorld);\n\t\treturn matrix;\n\t}\n\n\tsetDayTime(times) {\n\t Object.values(this.environments).forEach(scope => {\n\t if (scope.setDayTime) {\n\t scope.setDayTime(times);\n }\n });\n }\n\n setTime(time) {\n Object.values(this.environments).forEach(scope => {\n if (scope.setTime) {\n scope.setTime(time);\n }\n });\n }\n\n\tsetAlpha(alpha) {\n\t\tObject.values(this.environments).forEach(scope => {\n\t\t\tif (scope.setAlpha) {\n\t\t\t\tscope.setAlpha(alpha);\n\t\t\t}\n\t\t});\n\t}\n\n\tintersect (obj) {\n\t\tif (this.activePublicLayer && this.activePublicLayer.id === 'Highway') {\n\t\t\tswitch (typeof obj) {\n\t\t\t\tcase 'object':\n\t\t\t\t\tintersectedEnvironment = this.environments[obj.userData.environmentId];\n\t\t\t\t\tenvironmentObject = intersectedEnvironment.getObjectById(obj.userData.id);\n\t\t\t\t\tif (environmentObject.tags.hasOwnProperty('name')) {\n\t\t\t\t\t\tif (environmentObject.tags.hasOwnProperty(`name:${getCurrentLang()}`)) {\n\t\t\t\t\t\t\tthis.popup.popupContent = environmentObject.tags[`name:${getCurrentLang()}`];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.popup.popupContent = environmentObject.tags.name;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.popup.showPopup();\n\t\t\t\t\t\tbuildingHoverOut();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.popup.hidePopup();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'string':\n\t\t\t\t\tthis.popup.updatePopupPosition();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'undefined':\n\t\t\t\t\tthis.popup.hidePopup();\n\t\t\t\t\tintersectedEnvironment = null;\n\t\t\t\t\tenvironmentObject = null;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t\n\thideLabelsByDistance(state) {\n\t\tObject.values(this.environments).forEach(scope => {\n\t\t\tscope.hideLabelsByDistance(state);\n\t\t});\n\t}\n\n\tget active () {\n\t\treturn this.params.active;\n\t}\n\n\tstatic setDayTime(times) {\n\t Environment.scope?.setDayTime(times);\n }\n\n static setTime(time) {\n\t Environment.scope?.setTime(time);\n }\n\n static setAlpha(alpha) {\n\t\tEnvironment.scope?.setAlpha(alpha);\n }\n\n\tstatic addCustomLayer (key, layer) {\n\t\tEnvironment.scope?.addCustomLayer(key, layer);\n\t}\n\n\tstatic addLayers (container) {\n\t\tEnvironment.scope?.createPublicLayers(container);\n\t}\n\n\tstatic isActive () {\n\t\treturn Environment.scope?.params.active;\n\t}\n\n\tstatic getLayer (id) {\n\t\treturn Environment.scope?.environments[id];\n\t}\n\n\tstatic getEnvironmentTransformation () {\n\t\treturn Environment.scope?.getEnvironmentTransformation();\n\t}\n\n\tstatic setActivePublicLayer (scope) {\n\t\tif (Environment.scope) {\n\t\t\tEnvironment.scope.activePublicLayer = scope;\n\t\t}\n\t}\n\n\tstatic getActivePublicLayer () {\n\t\treturn Environment.scope?.activePublicLayer;\n\t}\n\n\tstatic animate (delta) {\n\t\tif (!Environment.getActivePublicLayer()) return;\n\t\tEnvironment.getActivePublicLayer().tick(delta);\n\t}\n\n\tstatic hide () {\n\t\tif (Environment.scope?.activePublicLayer) {\n\t\t\tEnvironment.scope.activePublicLayer.hide();\n\t\t}\n\t}\n\n\tstatic show () {\n\t\tif (Environment.scope?.activePublicLayer) {\n\t\t\tEnvironment.scope.activePublicLayer.show();\n\t\t}\n\t}\n\n\tstatic mouseOverHandler () {\n\t\tif (Environment.scope?.activePublicLayer) {\n\t\t\tEnvironment.scope.activePublicLayer.mouseOverHandler();\n\t\t}\n\t}\n\n\tstatic intersect (obj) {\n\t\tEnvironment.scope?.intersect(obj);\n\t}\n\n\tstatic fromBundle () {\n\t\treturn config.features.environment?.active && config.features.environment?.allInBundle;\n\t}\n\n\tstatic toggle3D (state) {\n\t\tif (Environment.scope && Environment.fromBundle()) {\n\n\t\t\tswitch (state) {\n\t\t\t\tcase 'show':\n\t\t\t\t\tEnvironment.scope.environments.DayNight.show();\n\t\t\t\t\tEnvironment.scope.environments.Terrain.show();\n\t\t\t\t\tEnvironment.scope.environments.Buildings.show();\n\t\t\t\t\tEnvironment.scope.environments.Trees.show();\n\t\t\t\t\tEnvironment.scope.environments.Sea.show();\n\t\t\t\t\tEnvironment.scope.hideLabelsByDistance(false);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'hide':\n\t\t\t\t\tEnvironment.scope.environments.DayNight.hide();\n\t\t\t\t\tEnvironment.scope.environments.Terrain.hide();\n\t\t\t\t\tEnvironment.scope.environments.Buildings.hide();\n\t\t\t\t\tEnvironment.scope.environments.Trees.hide();\n\t\t\t\t\tEnvironment.scope.environments.Sea.hide();\n\t\t\t\t\tEnvironment.scope.hideLabelsByDistance(true);\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\t\t}\n\t}\n\n\n}\n\nwindow.env = Environment;\n","'use strict';\n\n\nimport { EnvironmentLayer } from './EnvironmentLayer';\nimport { Loader } from '../../../threejs/loader/Loader';\nimport { resourcesFolder } from '../../../../settings';\nimport { Cloudflare } from '../../../api/Cloudflare';\nimport { prepareMaterial } from '../../../threejs/autoProjectScript';\nimport { BatchedMesh, Euler, Matrix4, Quaternion, Vector3 } from 'three';\nimport { mergeVertices } from 'three/examples/jsm/utils/BufferGeometryUtils';\n\nexport class BuildingsEnvironment extends EnvironmentLayer{\n\tconstructor () {\n\t\tsuper('Buildings');\n\t\t\n\t\tthis.types = {};\n\t\tthis.batch = {\n\t\t\tglobalRoof: []\n\t\t};\n\t\tthis.materials = [];\n\t\t// this.useBundle = config.features.environment?.useBundle;\n\t\tthis.globalRoofMaterial = null;\n\t}\n\t\n\t// load() {\n\t// \t// if (!this.useBundle) return;\n\t// \t//\n\t// \t// const loader = new Loader();\n\t// \t// const dracoLoader = loader.dracoLoader;\n\t// \t// const textureLoader = loader.textureLoader;\n\t// \t// const objectLoader = loader.objectLoader;\n\t// \t//\n\t// \t// dracoLoader.load(`${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/points/osm.glb?v=${Cloudflare.version}`,glb => {\n\t// \t// \tconst scene = glb.scene;\n\t// \t// \tconst config = glb.scene.userData.config;\n\t// \t//\n\t// \t// \tthis.#createGlobalRoofMaterial(config,textureLoader);\n\t// \t// \tthis.#createTypes(config,textureLoader,objectLoader);\n\t// \t// \tthis.#prepareBatchData(config,scene);\n\t// \t// \tthis.#createBuildings();\n\t// \t// })\n\t// }\n\t\n\tloadFromBundle (scene, conf) {\n\t\tconst config = conf[this.id];\n\t\tif (!config) return;\n\t\t\n\t\tconst loader = new Loader();\n\t\tconst textureLoader = loader.textureLoader;\n\t\tconst objectLoader = loader.objectLoader;\n\t\tthis.settings = config.settings;\n\t\tthis.#createGlobalRoofMaterial(config,textureLoader);\n\t\tthis.#createTypes(config,textureLoader,objectLoader);\n\t\tthis.#prepareBatchData(config,scene);\n\t\tthis.#createBuildings();\n\t}\n\t\n\t#createGlobalRoofMaterial(config,textureLoader) {\n\t\tthis.globalRoofMaterial = prepareMaterial(config.globalRoof.config,textureLoader,config.globalRoof.type);\n\t}\n\t\n\t#createTypes(config,textureLoader,objectLoader) {\n\t\tObject.entries(config.types).forEach(([name,data]) => {\n\t\t\tthis.types[name] = {};\n\t\t\tthis.batch[name] = [];\n\t\t\t\n\t\t\tif (data.geometry) {\n\t\t\t\tthis.types[name].geometry = mergeVertices(Object.values(objectLoader.parseGeometries([data.geometry]))[0]);\n\t\t\t\tthis.types[name].material = prepareMaterial(data.material.config,textureLoader,data.material.type);\n\t\t\t\t\n\t\t\t\tif (this.types[name].material.emissiveMap) {\n\t\t\t\t\tthis.materials.push(this.types[name].material);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t\n\t\t\t\tif (data.roofMaterial) {\n\t\t\t\t\tthis.types[name].roofMaterial = prepareMaterial(data.roofMaterial.config,textureLoader,data.roofMaterial.type);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (data.sidewallMaterial) {\n\t\t\t\t\tthis.types[name].sidewallMaterial = prepareMaterial(data.sidewallMaterial.config,textureLoader,data.sidewallMaterial.type);\n\t\t\t\t\t\n\t\t\t\t\tif (this.types[name].sidewallMaterial.emissiveMap) {\n\t\t\t\t\t\tthis.materials.push(this.types[name].sidewallMaterial);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t\n\tsetAlpha(alpha) {\n\t\tthis.materials.forEach(material => {\n\t\t\tmaterial.emissiveIntensity = 1 - alpha;\n\t\t});\n\t}\n\t\n\t#prepareBatchData(config,scene) {\n\t\tconst osm = config.osm;\n\t\tconst position = new Vector3();\n\t\tconst quaternion = new Quaternion();\n\t\tconst scale = new Vector3();\n\t\t\n\t\tif (osm) {\n\t\t\tif (Object.keys(this.types).length === 0) {\n\t\t\t\tthis.batch.default = {\n\t\t\t\t\tsidewall: []\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tosm.forEach(building => {\n\t\t\t\t\tconst id = building.data.id.toString();\n\t\t\t\t\tconst object = scene.getObjectByName(id);\n\t\t\t\t\tposition.copy(object.position);\n\t\t\t\t\tquaternion.copy(object.quaternion);\n\t\t\t\t\tscale.copy(object.scale);\n\t\t\t\t\t\n\t\t\t\t\tthis.batch.default.sidewall.push({\n\t\t\t\t\t\tgeometry: object.getObjectByName(id + '_sidewall').geometry,\n\t\t\t\t\t\tmaterial: this.globalRoofMaterial,\n\t\t\t\t\t\tmatrix: new Matrix4().compose(position,quaternion,scale)\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.batch.globalRoof.push({\n\t\t\t\t\t\tgeometry: object.getObjectByName(id + '_roof').geometry,\n\t\t\t\t\t\tmaterial: this.globalRoofMaterial,\n\t\t\t\t\t\tmatrix: new Matrix4().compose(position,quaternion,scale)\n\t\t\t\t\t})\n\t\t\t\t\t\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tObject.entries(this.types).forEach(([name,data]) => {\n\t\t\t\t\n\t\t\t\tif (data.geometry) {\n\t\t\t\t\tthis.batch[name] = [];\n\t\t\t\t} else {\n\t\t\t\t\tthis.batch[name] = {\n\t\t\t\t\t\tsidewall: []\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst buildings = osm.filter(building => building.type === name);\n\t\t\t\tbuildings.forEach(building => {\n\t\t\t\t\tconst id = building.data.id.toString();\n\t\t\t\t\tconst object = scene.getObjectByName(id);\n\t\t\t\t\tposition.copy(object.position);\n\t\t\t\t\tquaternion.copy(object.quaternion);\n\t\t\t\t\tscale.copy(object.scale);\n\t\t\t\t\t\n\t\t\t\t\tif (data.geometry) {\n\t\t\t\t\t\tthis.batch[name].push({\n\t\t\t\t\t\t\tgeometry: data.geometry,\n\t\t\t\t\t\t\tmaterial: data.material,\n\t\t\t\t\t\t\tmatrix: new Matrix4().compose(position,quaternion,scale)\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (data.roofMaterial) {\n\t\t\t\t\t\t\tif (!this.batch[name].roof) {\n\t\t\t\t\t\t\t\tthis.batch[name].roof = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.batch[name].roof.push({\n\t\t\t\t\t\t\t\tgeometry: object.getObjectByName(id + '_roof').geometry,\n\t\t\t\t\t\t\t\tmaterial: data.roofMaterial,\n\t\t\t\t\t\t\t\tmatrix: new Matrix4().compose(position,quaternion,scale)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.batch.globalRoof.push({\n\t\t\t\t\t\t\t\tgeometry: object.getObjectByName(id + '_roof').geometry,\n\t\t\t\t\t\t\t\tmaterial: this.globalRoofMaterial,\n\t\t\t\t\t\t\t\tmatrix: new Matrix4().compose(position,quaternion,scale)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (data.sidewallMaterial) {\n\t\t\t\t\t\t\tthis.batch[name].sidewall.push({\n\t\t\t\t\t\t\t\tgeometry: object.getObjectByName(id + '_sidewall').geometry,\n\t\t\t\t\t\t\t\tmaterial: data.sidewallMaterial,\n\t\t\t\t\t\t\t\tmatrix: new Matrix4().compose(position,quaternion,scale)\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})\n\t\t\t});\n\t\t\t\n\t\t} else {\n\t\t\tconst buildingsGroup = scene.getObjectByName('Buildings');\n\t\t\t\n\t\t\tif (Object.keys(this.types).length === 0) {\n\t\t\t\tthis.batch.default = {\n\t\t\t\t\tsidewall: []\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tbuildingsGroup.children.forEach(object => {\n\t\t\t\t\tconst id = object.name;\n\t\t\t\t\tposition.copy(object.position);\n\t\t\t\t\tquaternion.copy(object.quaternion);\n\t\t\t\t\tscale.copy(object.scale);\n\t\t\t\t\t\n\t\t\t\t\tthis.batch.default.sidewall.push({\n\t\t\t\t\t\tgeometry: object.getObjectByName(id + '_sidewall').geometry,\n\t\t\t\t\t\tmaterial: this.globalRoofMaterial,\n\t\t\t\t\t\tmatrix: new Matrix4().compose(position,quaternion,scale)\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.batch.globalRoof.push({\n\t\t\t\t\t\tgeometry: object.getObjectByName(id + '_roof').geometry,\n\t\t\t\t\t\tmaterial: this.globalRoofMaterial,\n\t\t\t\t\t\tmatrix: new Matrix4().compose(position,quaternion,scale)\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tObject.entries(this.types).forEach(([name,data]) => {\n\t\t\t\t\n\t\t\t\tif (data.geometry) {\n\t\t\t\t\tthis.batch[name] = [];\n\t\t\t\t} else {\n\t\t\t\t\tthis.batch[name] = {\n\t\t\t\t\t\tsidewall: []\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst buildings = buildingsGroup.children.filter(building => building.userData.type === name);\n\t\t\t\tbuildings.forEach(object => {\n\t\t\t\t\tconst id = object.name;\n\t\t\t\t\tposition.copy(object.position);\n\t\t\t\t\tquaternion.copy(object.quaternion);\n\t\t\t\t\tscale.copy(object.scale);\n\t\t\t\t\t\n\t\t\t\t\tif (data.geometry) {\n\t\t\t\t\t\tthis.batch[name].push({\n\t\t\t\t\t\t\tgeometry: data.geometry,\n\t\t\t\t\t\t\tmaterial: data.material,\n\t\t\t\t\t\t\tmatrix: new Matrix4().compose(position,quaternion,scale)\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (data.roofMaterial) {\n\t\t\t\t\t\t\tif (!this.batch[name].roof) {\n\t\t\t\t\t\t\t\tthis.batch[name].roof = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.batch[name].roof.push({\n\t\t\t\t\t\t\t\tgeometry: object.getObjectByName(id + '_roof').geometry,\n\t\t\t\t\t\t\t\tmaterial: data.roofMaterial,\n\t\t\t\t\t\t\t\tmatrix: new Matrix4().compose(position,quaternion,scale)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.batch.globalRoof.push({\n\t\t\t\t\t\t\t\tgeometry: object.getObjectByName(id + '_roof').geometry,\n\t\t\t\t\t\t\t\tmaterial: this.globalRoofMaterial,\n\t\t\t\t\t\t\t\tmatrix: new Matrix4().compose(position,quaternion,scale)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (data.sidewallMaterial) {\n\t\t\t\t\t\t\tthis.batch[name].sidewall.push({\n\t\t\t\t\t\t\t\tgeometry: object.getObjectByName(id + '_sidewall').geometry,\n\t\t\t\t\t\t\t\tmaterial: data.sidewallMaterial,\n\t\t\t\t\t\t\t\tmatrix: new Matrix4().compose(position,quaternion,scale)\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})\n\t\t\t});\n\t\t}\n\t}\n\t\n\t#createBuildings() {\n\t\tconst create = (name,array) => {\n\t\t\tif (!array.length) return;\n\n\t\t\tarray = array.filter(item => item.geometry)\n\t\t\tconst count = array.length;\n\t\t\tconst vertexCount = array.reduce((acc,v) => acc+= v.geometry.attributes.position.count,0);\n\t\t\tconst indexCount = array.reduce((acc,v) => acc+= v.geometry.index.count,0);\n\t\t\t\n\t\t\tconst mesh = new BatchedMesh(count,vertexCount,indexCount,array[0].material);\n\t\t\tarray.forEach(data => {\n\t\t\t\tconst id = mesh.addGeometry(data.geometry);\n\t\t\t\tmesh.setMatrixAt(id,data.matrix);\n\t\t\t});\n\t\t\tmesh.name = name;\n\t\t\tthis.group.add(mesh);\n\t\t};\n\t\t\n\t\tObject.entries(this.batch).forEach(([name,data]) => {\n\t\t\tif (Array.isArray(data)) {\n\t\t\t\tcreate(name,data);\n\t\t\t} else {\n\t\t\t\tObject.entries(data).forEach(([subName,subData]) => {\n\t\t\t\t\tcreate(name + '_'+ subName,subData)\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\t\n\tshow () {\n\t\tthis.group.visible = true;\n\t}\n\t\n\thide () {\n\t\tthis.group.visible = false;\n\t}\n\t\n\tset settings(data) {\n\t\tif (data) {\n\t\t\tthis.group.position.fromArray(data.position);\n\t\t}\n\t}\n\t\n}\n","'use strict';\n\n\nimport { EnvironmentLayer } from './EnvironmentLayer';\nimport { OrbitDayAndNight } from '../../../liveAnimations/DayNight/OrbitDayAndNight';\nimport { DayNightEffect } from '../../../post-processing/Passes/DayNightPass';\nimport { threeJsVariables } from '../../../../settings';\nimport { Loader } from '../../../threejs/loader/Loader';\nimport { Color, LinearSRGBColorSpace, Vector3 } from 'three';\nimport { LUT } from '../../../post-processing/Passes/LUT';\n\nexport class DayNightEnvironment extends EnvironmentLayer{\n\t\n\tconstructor () {\n\t\tsuper('DayNight');\n\t\t\n\t\tthis.radius = 3000;\n\t\tthis.colors = {\n\t\t\toriginAmbient: new Color(),\n\t\t\ttargetAmbient: new Color()\n\t\t};\n\t\tthis.pass = new DayNightEffect(threeJsVariables.perspectiveCamera);\n\t\tthreeJsVariables.composer.composer.insertPass(this.pass.effect,3);\n\t}\n\t\n\tcreate () {\n\t\tconst sunGroup = OrbitDayAndNight.addSun({\n\t\t\tturbidity: 1.4158,\n\t\t\trayleigh: 1.5733,\n\t\t\tmieCoefficient: 0.06,\n\t\t\tmieDirectionalG: 0.9999,\n\t\t\tuseTime: true\n\t\t});\n\t\tthis.group.add(sunGroup);\n\t\tthis.sky = sunGroup.children[0];\n\t\tthis.sky.scale.setScalar(this.radius);\n\t\tthis.pass.setSky(this.sky);\n\t\tOrbitDayAndNight.sky = this.sky;\n\t\tOrbitDayAndNight.usePresets = false;\n\t\tthreeJsVariables.composer.addUpdatableElement(this.pass.effect);\n\t}\n\t\n\tshow () {\n\t\tthis.group.visible = true;\n\t\tthis.pass.active = true;\n\t}\n\t\n\thide () {\n\t\tthis.group.visible = false;\n\t\tthis.pass.active = false;\n\t}\n\t\n\tsetAlpha(alpha) {\n\t\tif (!this.colors.originAmbient.equals(this.colors.targetAmbient)) {\n\t\t\tconst sceneAmbient = threeJsVariables.scene.getObjectByName('ambientLight');\n\t\t\tsceneAmbient.color.lerpColors(this.colors.targetAmbient,this.colors.originAmbient,alpha);\n\t\t}\n\t\t\n\t\tconst luts = Object.values(LUT.scopes);\n\t\tfor (let i = 0; i < luts.length; i++) {\n\t\t\tluts[i].updateTime(alpha);\n\t\t}\n\t}\n\t\n\tsetDayTime(times) {\n\t\tthis.pass.setDayTime(times);\n\t\tthis.sky.material.uniforms.sunriseTime.value = times.sunrise;\n\t\tthis.sky.material.uniforms.sunsetTime.value = times.sunset;\n\t\tthis.sky.material.uniforms.dayStartTime.value = times.dayStart;\n\t\tthis.sky.material.uniforms.dayEndTime.value = times.dayEnd;\n\t}\n\t\n\tsetTime(time) {\n\t\tthis.pass.setTime(time);\n\t\tif (this.sky)\n\t\t\tthis.sky.material.uniforms.currentTime.value = time;\n\t}\n\t\n\tloadFromBundle (scene, conf) {\n\t\tconst config = conf.dayNight;\n\t\tif (!config) return;\n\t\tthis.settings = config;\n\t\tthis.create();\n\t}\n\t\n\tset settings (data) {\n\t\tif (!data) return;\n\t\tif (Object.keys(data.luts).length) {\n\t\t\tconst loader = new Loader().luteLoader;\n\t\t\tObject.entries(data.luts).forEach(([lutTime,lutData]) => {\n\t\t\t\tif (lutData.source) {\n\t\t\t\t\tconst parsedLut = loader.parse(lutData.source);\n\t\t\t\t\tconst texture = parsedLut.texture3D;\n\t\t\t\t\ttexture.colorSpace = LinearSRGBColorSpace;\n\t\t\t\t\tthis.pass.effect.uniforms[lutTime].value = texture;\n\t\t\t\t\tthis.pass.effect.uniforms[lutTime + 'Size'].value = parsedLut.size;\n\t\t\t\t\tthis.pass.effect.uniforms[lutTime + 'Intensity'].value = lutData.intensity;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\tconst sceneAmbient = threeJsVariables.scene.getObjectByName('ambientLight');\n\t\tthis.colors.originAmbient.copy(sceneAmbient.color);\n\t\tif (data.nightAmbient) {\n\t\t\tthis.colors.targetAmbient.setStyle(data.nightAmbient,LinearSRGBColorSpace);\n\t\t} else {\n\t\t\tthis.colors.targetAmbient.copy(sceneAmbient.color);\n\t\t}\n\t\t\n\t\tthis.radius = data.radius;\n\t\tconst nightLights = [];\n\t\tdata.pointLights.forEach(data => {\n\t\t\tconst light = new NightLight(data);\n\t\t\tnightLights.push(light.struct);\n\t\t});\n\t\t\n\t\tif (nightLights.length > 0) {\n\t\t\tthis.pass.effect.setLights(nightLights);\n\t\t}\n\t\t\n\t\tObject.entries(data.fog).forEach(([name,value]) => {\n\t\t\tthis.pass.effect.uniforms[name].value = value;\n\t\t});\n\t}\n\t\n}\n\n\nclass NightLight {\n\tconstructor (data) {\n\t\tthis.color = new Color().setStyle(data.color,LinearSRGBColorSpace);\n\t\tthis.intensity = data.intensity;\n\t\tthis.position = new Vector3().fromArray(data.position);\n\t\tthis.rotation = new Vector3().fromArray(data.rotation);\n\t\tthis.radius = data.radius;\n\t}\n\t\n\tget struct() {\n\t\treturn {\n\t\t\tposition: this.position,\n\t\t\trotation: this.rotation,\n\t\t\tintensity: this.intensity,\n\t\t\tcolor: this.color,\n\t\t\tradius: this.radius\n\t\t}\n\t}\n}\n","'use strict';\n\n\nimport { EnvironmentLayer } from './EnvironmentLayer';\n\nexport class EducationEnvironment extends EnvironmentLayer{\n constructor () {\n super('Education');\n }\n\n}","'use strict';\n\nimport { BufferGeometry, Group, Line, LineBasicMaterial, MathUtils, Vector3 } from 'three';\nimport { RoutsEnvironment } from './RoutsEnvironment';\nimport { BaseElement } from '../../../interfaces/BaseElement';\nimport { changeLangToCurrent, getCurrentLang } from '../../langSwitcher/langSwitcher';\nimport { CSS2DObject } from '../../../../libs/CSS2DRenderer';\nimport {lordIconColors, setLordIcon} from '../../../../lordicon';\nimport {\n addBuildingsIntersections,\n addPoiToIntersection,\n isBuildingIntersectionsSet,\n poiIntersection, removePoiFromIntersection,\n} from '../../../poi/poiCss';\nimport { isElementHovered, labelVisibility } from '../../../../functions';\nimport { PublicLayers } from '../../publicLayers/PublicLayers';\nimport {GSAPAnimationMixer, isMobile, threeJsVariables} from \"../../../../settings\";\nimport { OrbitDayAndNight } from '../../../liveAnimations/DayNight/OrbitDayAndNight';\nimport { getOrbitControlsDistanceAndPan, getPolarAngleFromViewMode, getWorldData, hideOrbitToMapBackButton, hideOrbitToMapButton, setMinAndMaxControlsDistance, setOrbitControls, setPanLimits, setPolarAngle, showOrbitToMapBackButton, showOrbitToMapButton } from '../../../controls/orbitControls';\nimport { animateCamera } from '../../../threejs/animation';\nimport { ViewMode } from '../../../../common';\n\n\nexport class EnvironmentLayer extends RoutsEnvironment {\n constructor (id) {\n super();\n\n this.id = id;\n this.active = false;\n this.objects = [];\n this.iconColors = {};\n this.group = new Group();\n this.group.visible = false;\n this.group.name = this.id;\n this.poiLineMaterial = new LineBasicMaterial({color: '#ffffff', transparent: true});\n this.animateCamera = false;\n }\n\n show() {\n this.active = true;\n !isBuildingIntersectionsSet() && addBuildingsIntersections();\n this.create();\n if (!OrbitDayAndNight.isActiveAndSelected) {\n this.hideLabelsByDistance(true);\n }\n this.group.visible = true;\n }\n\n hide() {\n this.active = false;\n this.group.visible = false;\n this.clear();\n }\n\n create() {\n this.objects.forEach(obj => {\n this.createLabel(obj);\n });\n }\n\n loadFromBundle(scene,conf) {\n const config = conf[this.id];\n if (!config) return;\n this.settings = config;\n }\n\n clear() {\n this.objects.forEach(obj => {\n this.removeRoute(obj);\n\n if (obj.line) {\n obj.line.removeFromParent();\n obj.line.geometry.dispose();\n obj.line.material.dispose();\n delete obj.line;\n }\n\n if (obj.label) {\n removePoiFromIntersection(obj.label);\n obj.label.removeFromParent();\n delete obj.label;\n }\n })\n }\n\n createPublicButton(parent) {\n if (this.objects.length === 0) return;\n\n this.#getIconColors();\n this.publicLayerBtn = new BaseElement('button')\n .addClass('public-layer__btn',this.id)\n .addAttribute('data-public-layer',this.id)\n .event('mouseover', this.mouseOverHandler.bind(this))\n .event('mouseout', this.mouseOutHandler.bind(this))\n .appendTo(parent)\n .DOMElement;\n\n const iconParameters = {\n trigger: 'hover',\n stroke: 70\n }\n\n if (document.body.classList.contains('light-theme')) {\n iconParameters.id = 'public-layer__btn';\n iconParameters.primaryColor = '#fff';\n iconParameters.secondaryColor = '#fff';\n }\n\n setLordIcon(this.id.toLowerCase(), this.publicLayerBtn, iconParameters);\n\n new BaseElement('span')\n .addClass('public-layer__btn-text', 'language-string')\n .addAttribute('data-dictionary', this.id)\n .innerHtml(changeLangToCurrent(this.id))\n .appendTo(this.publicLayerBtn);\n }\n\n mouseOverHandler() {\n if (!this.active || (this.active && isElementHovered(this.publicLayerBtn))) {\n const icon = this.publicLayerBtn.querySelector('.lord__icon');\n icon.setAttribute('colors',`primary:${this.iconColors.activeColor},secondary:${this.iconColors.activeColor}`);\n this.publicLayerBtn.style.color = this.iconColors.activeColor;\n }\n }\n\n mouseOutHandler() {\n if (!this.active) {\n const icon = this.publicLayerBtn.querySelector('.lord__icon');\n const customColorId = icon.getAttribute('custom-color-id');\n if (customColorId) {\n icon.setAttribute('colors',`primary:${lordIconColors.customColors[customColorId].primaryColor},secondary:${lordIconColors.customColors[customColorId].secondaryColor}`);\n } else {\n icon.setAttribute('colors',`primary:${this.iconColors.primaryColor},secondary:${this.iconColors.secondaryColor}`);\n }\n\n this.publicLayerBtn.style.color = '';\n }\n }\n\n publicButtonHandler() {\n if (this.group.visible) {\n this.hide();\n this.mouseOutHandler();\n } else {\n this.show();\n this.mouseOverHandler();\n }\n }\n\n createLabel(object) {\n if (!object.isLabel) return;\n\n const tags = object.tags;\n const names = {};\n\n config.languages.forEach(lang => {\n if (tags.hasOwnProperty(`name:${lang}`)) {\n names[lang] = tags[`name:${lang}`];\n } else if (tags.hasOwnProperty('name')) {\n names[lang] = config.dictionary[tags.name] ? config.dictionary[tags.name][lang] : tags.name;\n } else {\n const name = tags.leisure || tags.amenity || tags.building || tags.railway;\n const upperCase = name.charAt(0).toUpperCase() + name.slice(1);\n names[lang] = config.dictionary[upperCase] ? config.dictionary[upperCase][lang] : upperCase;\n }\n });\n\n const labelContainer = new BaseElement()\n .addClass('public-label')\n .DOMElement;\n\n new BaseElement()\n .addClass('public-label__type',tags.assets.icon)\n .addStyle('background-color',tags.assets.color)\n .appendTo(labelContainer);\n\n const textBlock = new BaseElement()\n .addClass('public-label__text-block')\n .appendTo(labelContainer)\n .DOMElement;\n\n const text = new BaseElement('span')\n .addClass('public-label__text','language-string')\n .innerHtml(names[getCurrentLang()])\n .appendTo(textBlock);\n\n Object.entries(names).forEach(([key,value]) => {\n text.addAttribute(`data-lang-${key}`,value);\n });\n\n new BaseElement('span')\n .addClass('public-label-text__separator')\n .innerHtml('|')\n .appendTo(textBlock);\n\n new BaseElement('span')\n .addClass('public-label__distance')\n .innerHtml(object.distance + 'm')\n .appendTo(textBlock);\n\n const label = new CSS2DObject(labelContainer);\n label.userData.zoom = 1;\n label.name = `layer-poi__${object.id}`;\n label.position.copy(object.point);\n label.element.onclick = () => {\n if (config.features.environment?.buildRoutsOnClick === false || isMobile)\n return;\n this.removePreviouslyRoute();\n this.buildRoute(object);\n };\n\n addPoiToIntersection(label);\n poiIntersection();\n\n const lineGeometry = new BufferGeometry().setFromPoints([\n object.point,\n new Vector3().copy(object.point).setY(object.altitude)\n ]);\n\n const line = new Line(lineGeometry,this.poiLineMaterial);\n line.name = 'poi_line';\n\n object.label = label;\n object.line = line;\n\n this.group.add(label,line);\n }\n \n hideLabelsByDistance(state) {\n const labels = this.objects.filter(el => el.isLabel && el.distance > 400);\n labels.forEach(data => labelVisibility(data,state));\n }\n\n getObjectById(id) {\n return this.objects.find(obj => obj.id === id);\n }\n\n #getIconColors() {\n // const { primaryColor, secondaryColor, activeColor } = getLordIconColor();\n\n this.iconColors.primaryColor = lordIconColors.primary;\n this.iconColors.secondaryColor = lordIconColors.secondary;\n this.iconColors.activeColor = lordIconColors.active;\n }\n\n static animateCameraShow() {\n const {cameraVector, orbitControlsVector} = getWorldData();\n const target = config.threejs.orbitControls.target;\n const minAngle = MathUtils.degToRad(10);\n const maxAngle = MathUtils.degToRad(70);\n const targetAngle = (minAngle + maxAngle) / 2;\n const minDistance = getOrbitControlsDistanceAndPan(ViewMode.Orbit).minDistance;\n const maxDistance = 460;\n const length = maxDistance;\n\n const defaultTarget = new Vector3(target.x, target.y, target.z);\n const position = new Vector3()\n .subVectors(cameraVector, orbitControlsVector).setY(0).normalize()\n .setY(1 / Math.tan(targetAngle))\n .setLength(length).add(orbitControlsVector);\n\n const mixer = GSAPAnimationMixer.registerNewMixer('showEnvironment');\n const cameraAnimation = animateCamera(\n cameraVector,\n position,\n orbitControlsVector,\n true ? orbitControlsVector : defaultTarget, // test\n undefined,\n length,\n targetAngle,\n 0,\n 1500,\n TWEEN.Easing.Sinusoidal.InOut,\n () => {\n threeJsVariables.trackballControls.maxDistance = maxDistance;\n setOrbitControls(ViewMode.Orbit);\n showOrbitToMapBackButton();\n },\n () => {\n threeJsVariables.trackballControls.minDistance = minDistance;\n threeJsVariables.trackballControls.maxDistance = maxDistance;\n threeJsVariables.orbitControls.minPolarAngle = minAngle;\n threeJsVariables.orbitControls.maxPolarAngle = maxAngle;\n setPanLimits(ViewMode.Orbit);\n showOrbitToMapButton();\n },\n );\n mixer.addAnimation(cameraAnimation);\n mixer.play();\n }\n\n static animateCameraHide() {\n const {cameraVector, orbitControlsVector} = getWorldData();\n const target = config.threejs.orbitControls.target;\n const {minAngle} = getPolarAngleFromViewMode(ViewMode.Orbit);\n const {minDistance, maxDistance} = getOrbitControlsDistanceAndPan(ViewMode.Orbit);\n const foreshortening = config.threejs.orbitControls.autoZoomSettings.foreshortening;\n const length = (maxDistance + minDistance) / 2;\n\n const defaultTarget = new Vector3(target.x, target.y, target.z);\n const position = new Vector3().subVectors(cameraVector, orbitControlsVector).normalize().setY(0).setLength(length).add(orbitControlsVector);\n const mixer = GSAPAnimationMixer.registerNewMixer('hideEnvironment');\n const cameraAnimation = animateCamera(\n cameraVector,\n config.features.privateHouseMode ?\n cameraVector : position,\n orbitControlsVector,\n config.features.privateHouseMode ? orbitControlsVector : defaultTarget,\n undefined,\n config.features.privateHouseMode ? this.minDistance : length,\n minAngle,\n 0,\n 1500,\n TWEEN.Easing.Sinusoidal.InOut,\n () => {\n threeJsVariables.trackballControls.maxDistance = maxDistance;\n setOrbitControls(ViewMode.Orbit);\n setPolarAngle(ViewMode.Orbit);\n setPanLimits(ViewMode.Orbit);\n },\n () => {\n setMinAndMaxControlsDistance(ViewMode.Orbit);\n hideOrbitToMapButton();\n hideOrbitToMapBackButton();\n },\n );\n mixer.addAnimation(cameraAnimation);\n mixer.play();\n }\n\n set settings(data) {\n this.group.position.fromArray(data.position);\n data.objects.forEach(obj => {\n if (obj.point) {\n obj.point = new Vector3().fromArray(obj.point);\n }\n\n const parsedRouteVectors = [];\n obj.route.forEach(point => {\n parsedRouteVectors.push(new Vector3().fromArray(point));\n });\n\n obj.route = parsedRouteVectors;\n });\n this.objects = data.objects;\n }\n\n static resetToDefault() {\n const publicLayers = document.querySelector('.public-layers__elements');\n if (!publicLayers)\n return;\n\n // const {primaryColor, secondaryColor} = getLordIconColor();\n const allButtons = publicLayers.querySelectorAll('.public-layer__btn');\n allButtons.forEach(button => {\n const icon = button.querySelector('.lord__icon');\n const customColorId = icon.getAttribute('custom-color-id');\n if (customColorId) {\n icon.setAttribute('colors',`primary:${lordIconColors.customColors[customColorId].primaryColor},secondary:${lordIconColors.customColors[customColorId].secondaryColor}`);\n } else {\n icon.setAttribute('colors',`primary:${lordIconColors.primary},secondary:${lordIconColors.secondary}`);\n }\n // icon.setAttribute('colors',`primary:${lordIconColors.primary},secondary:${lordIconColors.secondary}`);\n button.style.color = '';\n });\n\n if (PublicLayers.isActive && PublicLayers.activeLayer && PublicLayers.activeLayer.type === 'poi')\n return;\n\n const publicButton = publicLayers.querySelector('[data-public-layer=\"poi\"]');\n if (!publicButton)\n return;\n\n publicButton.click();\n }\n}\n","'use strict';\n\n\nimport { EnvironmentLayer } from './EnvironmentLayer';\n\nexport class FunEnvironment extends EnvironmentLayer{\n constructor () {\n super('Fun');\n }\n\n}","'use strict';\n\n\nimport { EnvironmentLayer } from './EnvironmentLayer';\n\nexport class LeisureEnvironment extends EnvironmentLayer{\n constructor () {\n super('Leisure');\n }\n\n}","'use strict';\n\nimport { EnvironmentLayer } from './EnvironmentLayer';\n\nexport class ParksEnvironment extends EnvironmentLayer{\n constructor () {\n super('Parks');\n }\n\n}","'use strict';\n\n\nimport { EnvironmentLayer } from './EnvironmentLayer';\n\nexport class RailwayEnvironment extends EnvironmentLayer{\n constructor () {\n super('Railway');\n this.animateCamera = true;\n }\n\n create() {\n this.objects.forEach(obj => {\n this.createLabel(obj);\n this.buildRoute(obj);\n });\n }\n\n show() {\n super.show();\n EnvironmentLayer.animateCameraShow();\n }\n\n hide() {\n super.hide();\n EnvironmentLayer.animateCameraHide();\n }\n\n}","'use strict';\n\nimport { EnvironmentLayer } from './EnvironmentLayer';\n\nexport class RoadsEnvironment extends EnvironmentLayer{\n constructor () {\n super('Highway');\n // this.roadsEffect = new RoadsAdditionalEffect();\n this.animateCamera = true;\n }\n\n show() {\n this.active = true;\n this.create();\n this.group.visible = true;\n EnvironmentLayer.animateCameraShow();\n }\n\n create() {\n // this.roadsEffect.enable().then(() => {\n this.objects.forEach(obj => this.buildRoute(obj));\n // });\n }\n \n hide() {\n this.active = false;\n this.group.visible = false;\n this.clear();\n // this.roadsEffect.disable();\n EnvironmentLayer.animateCameraHide();\n }\n\n intersect(obj) {\n }\n\n}\n\n\n// export class RoadsAdditionalEffect {\n// constructor () {\n// this.controls = threeJsVariables.orbitControls;\n// this.renderer = threeJsVariables.renderer;\n// this.params = {\n// bloomDefaultConfig: {},\n// bloomActiveConfig: {\n// strength: 0.8,\n// radius: -1,\n// threshold: 0.81,\n// enabled: true\n// }\n// };\n// }\n//\n// enable() {\n// const mixer = GSAPAnimationMixer.registerNewMixer('roadsCamera');\n// const angle = getPolarAngleFromViewMode(ViewMode.Orbit);\n// const polarAngle = {value: angle.maxAngle};\n// const toneMapping = {value: this.renderer.toneMappingExposure};\n//\n// const polarAngleAnimation = gsap.to(polarAngle,{\n// value: (angle.minAngle + angle.maxAngle) / 2,\n// duration: GSAPAnimationMixer.duration,\n// ease: GSAPAnimationMixer.ease,\n// onUpdate: () => {\n// this.controls.maxPolarAngle = polarAngle.value;\n// }\n// });\n//\n// const toneMappingAnimation = gsap.to(toneMapping,{\n// value: 0.5,\n// duration: GSAPAnimationMixer.duration,\n// ease: GSAPAnimationMixer.ease,\n// onUpdate: () => {\n// this.renderer.toneMappingExposure = toneMapping.value;\n// }\n// });\n//\n// mixer.addAnimation(polarAngleAnimation);\n// mixer.addAnimation(toneMappingAnimation);\n//\n// return new Promise(resolve => {\n// mixer.addCallback('onComplete',() => {\n// this.applyBloom(true);\n// resolve();\n// });\n// mixer.play();\n// });\n// }\n//\n// disable() {\n// const mixer = GSAPAnimationMixer.registerNewMixer('roadsCamera');\n// const angle = getPolarAngleFromViewMode(ViewMode.Orbit);\n// const polarAngle = {value: this.controls.getPolarAngle()};\n// const toneMapping = {value: this.renderer.toneMappingExposure};\n// this.applyBloom(false);\n//\n// const polarAngleAnimation = gsap.to(polarAngle,{\n// value: angle.maxAngle,\n// duration: GSAPAnimationMixer.duration,\n// ease: GSAPAnimationMixer.ease,\n// onUpdate: () => {\n// this.controls.maxPolarAngle = polarAngle.value;\n// this.controls.setPolarAngle(polarAngle.value);\n// }\n// });\n//\n// const toneMappingAnimation = gsap.to(toneMapping,{\n// value: 1,\n// duration: GSAPAnimationMixer.duration,\n// ease: GSAPAnimationMixer.ease,\n// onUpdate: () => {\n// this.renderer.toneMappingExposure = toneMapping.value;\n// }\n// });\n//\n// mixer.addAnimation(polarAngleAnimation);\n// mixer.addAnimation(toneMappingAnimation);\n//\n// return new Promise(resolve => {\n// mixer.addCallback('onComplete',() => resolve());\n// mixer.play();\n// });\n// }\n//\n// applyBloom(state) {\n// const bloom = threeJsVariables.composer.getPass('bloom');\n// if (!bloom) return;\n//\n// if (state) {\n// this.params.bloomDefaultConfig = bloom.config;\n// bloom.config = this.params.bloomActiveConfig;\n// } else {\n// bloom.config = this.params.bloomDefaultConfig;\n// }\n// }\n//\n// }","'use strict';\n\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\nimport { LineMaterial } from 'three/examples/jsm/lines/LineMaterial';\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\nimport { BufferGeometry, CatmullRomCurve3, Color, LinearSRGBColorSpace } from 'three';\nimport { SelectedObjectType } from '../../../../common';\nimport { settingsData } from '../../../../settings';\n\nexport class RoutsEnvironment {\n constructor () {\n this.animations = [];\n }\n\n buildRoute(object) {\n if (object.buildedRoute || object.route.length < 2 || config.features.poi?.hideRoutes && object.tags.building === 'train_station')\n return;\n\n // const curve = new CatmullRomCurve3(object.route);\n // curve.curveType = 'centripetal';\n // curve.tension = 0.5;\n // const curvedPoint = curve.getPoints(10);\n const geometry = new BufferGeometry().setFromPoints(object.route);\n const lineGeometry = new LineGeometry().setPositions(geometry.getAttribute('position').array);\n const routeLineMaterial = new LineMaterial({\n color: new Color().setStyle(object.tags.assets.route,LinearSRGBColorSpace),\n linewidth: object.tags.assets.linewidth || 5,\n dashed: false,\n opacity: 0.9,\n alphaToCoverage: true,\n depthTest: object.tags.assets.depthTest || true,\n depthWrite: object.tags.assets.depthTest || true,\n transparent: !object.tags.assets.depthTest || false\n });\n routeLineMaterial.resolution.set( window.innerWidth / 4, window.innerHeight / 4 );\n const dashRouteLineMaterial = new LineMaterial({\n color: new Color().setStyle('#ffffff',LinearSRGBColorSpace),\n linewidth: object.tags.assets.linewidth || 5,\n dashed: true,\n dashOffset: 1,\n opacity: 0.6,\n gapSize: 20,\n dashSize: 10,\n alphaToCoverage: true,\n depthTest: object.tags.assets.depthTest || true,\n depthWrite: object.tags.assets.depthTest || true,\n transparent: !object.tags.assets.depthTest || false\n });\n \n dashRouteLineMaterial.resolution.set( window.innerWidth / 4, window.innerHeight / 4 );\n const dashLine = new Line2(lineGeometry,dashRouteLineMaterial);\n dashLine.name = 'route_dash';\n dashLine.computeLineDistances();\n dashLine.scale.set(1,1,1);\n\n dashRouteLineMaterial.tick = () => {\n dashRouteLineMaterial.dashOffset -= 1;\n };\n\n const line = new Line2(lineGeometry,routeLineMaterial);\n line.name = 'route_line';\n line.computeLineDistances();\n line.scale.set(1,1,1);\n line.userData.id = object.id;\n line.userData.environmentId = this.id;\n line.userData.type = SelectedObjectType.Route;\n dashLine.userData.id = object.id;\n\n this.animations.push(dashRouteLineMaterial);\n\n object.buildedRoute = {\n line,\n dashLine\n };\n\n this.group.add(line);\n this.group.add(dashLine);\n\n if (this.id === 'Highway') {\n settingsData.objects_to_intersection.push(line);\n }\n }\n\n removePreviouslyRoute() {\n const object = this.objects.find(obj => obj.buildedRoute);\n object && this.removeRoute(object);\n }\n\n removeRoute(object) {\n if (!object.buildedRoute) return;\n Object.values(object.buildedRoute).forEach(el => {\n el.removeFromParent();\n el.geometry.dispose();\n this.animations = this.animations.filter(material => material !== el.material);\n el.material.dispose();\n settingsData.objects_to_intersection = settingsData.objects_to_intersection.filter(intersectedObject => intersectedObject !== el);\n });\n\n delete object.buildedRoute;\n }\n\n tick(delta) {\n this.animations.forEach(material => material.tick(delta));\n }\n\n}\n","'use strict';\n\n\nimport { EnvironmentLayer } from './EnvironmentLayer';\nimport { Loader } from '../../../threejs/loader/Loader';\nimport { Mesh, RepeatWrapping } from 'three';\nimport { prepareMaterial } from '../../../threejs/autoProjectScript';\nimport { log } from 'three/examples/jsm/nodes/math/MathNode';\n\nexport class SeaEnvironment extends EnvironmentLayer{\n\tconstructor () {\n\t\tsuper('Sea');\n\t\tthis.material = null;\n\t}\n\t\n\tshow() {\n\t\tthis.group.visible = true;\n\t}\n\t\n\thide() {\n\t\tthis.group.visible = false;\n\t}\n\t\n\tloadFromBundle (scene, conf) {\n\t\tconst configData = conf[this.id];\n\t\tif (!configData) return;\n\t\t\n\t\tthis.settings = configData.settings;\n\t\tconst mesh = scene.getObjectByName('Sea');\n\t\tif (!mesh) return;\n\t\t\n\t\tconst loader = new Loader();\n\t\tconst textureLoader = loader.textureLoader;\n\t\tconst noise = textureLoader.load(`${config.cdnRepository}/DreamsGeneralStorage/textures/water/noise.jpg`);\n\t\tnoise.wrapS = noise.wrapT = RepeatWrapping;\n\t\tlet defaultWaterTexture = null;\n\t\tconst materialConfig = configData.material.config;\n\t\tif (materialConfig.map === 'water.jpg') {\n\t\t\tmaterialConfig.map = null;\n\t\t\tdefaultWaterTexture = textureLoader.load(`${config.cdnRepository}/DreamsGeneralStorage/textures/water/water.jpg`);\n\t\t\tdefaultWaterTexture.wrapS = defaultWaterTexture.wrapT = RepeatWrapping;\n\t\t}\n\t\t\n\t\tthis.material = prepareMaterial(materialConfig,textureLoader,'SeaMaterial');\n\t\tthis.material.noise = noise;\n\t\t\n\t\tif (defaultWaterTexture) {\n\t\t\tthis.material.map = defaultWaterTexture;\n\t\t}\n\t\t\n\t\tconst seaMesh = new Mesh(mesh.geometry.clone(),this.material);\n\t\tseaMesh.name = 'Sea';\n\t\tthis.group.add(seaMesh);\n\t}\n\t\n\tsetDayTime(times) {\n\t\tif (this.material) {\n\t\t\tthis.material.setDayTime(times);\n\t\t}\n\t}\n\t\n\tsetTime(time) {\n\t\tif (this.material) {\n\t\t\tthis.material.setTime(time);\n\t\t}\n\t}\n\t\n\tset settings(data) {\n\t\tif (data) {\n\t\t\tthis.group.position.fromArray(data.position);\n\t\t\t\n\t\t\tif (data.rotation) {\n\t\t\t\tthis.group.rotation.fromArray(data.rotation);\n\t\t\t}\n\t\t\t\n\t\t\tif (data.scale) {\n\t\t\t\tthis.group.scale.fromArray(data.scale);\n\t\t\t}\n\t\t}\n\t}\n\t\n}\n","'use strict';\n\n\nimport { EnvironmentLayer } from './EnvironmentLayer';\nimport { BufferGeometry, Points, Vector3 } from 'three';\nimport { prepareMaterial } from '../../../threejs/autoProjectScript';\nimport { Loader } from '../../../threejs/loader/Loader';\nimport { splitArray } from '../../../../functions';\nimport { LUT } from '../../../post-processing/Passes/LUT';\n\nexport class TreesEnvironment extends EnvironmentLayer{\n\tconstructor () {\n\t\tsuper('Trees');\n\t}\n\t\n\tshow() {\n\t\tthis.group.visible = true;\n\t}\n\t\n\thide() {\n\t\tthis.group.visible = false;\n\t}\n\t\n\tloadFromBundle (scene, conf) {\n\t\tconst config = conf[this.id];\n\t\tif (!config) return;\n\t\t\n\t\tthis.settings = config.settings;\n\t\tconst types = config.types;\n\t\tconst clusters = config.clusters;\n\t\tconst loader = new Loader();\n\t\tconst textureLoader = loader.textureLoader;\n\t\t\n\t\tclusters.forEach(cluster => {\n\t\t\tcluster.points.forEach(point => {\n\t\t\t\tthis.objects.push(new Vector3().fromArray(point));\n\t\t\t});\n\t\t});\n\t\t\n\t\tconst points = splitArray(this.objects,Object.keys(types).length);\n\t\tconst lut = LUT.getScope('osm-trees');\n\t\t\n\t\tObject.values(types).forEach((data,index) => {\n\t\t\tconst material = prepareMaterial(data.config,textureLoader,'TreeMaterial');\n\t\t\tlut && lut.include(material);\n\t\t\tconst geometry = new BufferGeometry().setFromPoints(points[index]);\n\t\t\tconst point = new Points(geometry,material);\n\t\t\tthis.group.add(point);\n\t\t});\n\t}\n\t\n\tset settings(data) {\n\t\tif (data) {\n\t\t\tthis.group.position.fromArray(data.position);\n\t\t}\n\t}\n\t\n}\n","'use strict';\n\nimport {\n BufferGeometry, Float32BufferAttribute,\n MathUtils,\n Points,\n PointsMaterial,\n TextureLoader,\n Vector3,\n} from 'three';\nimport { Buildings, settingsData, threeJsVariables } from '../../../settings';\nimport { apartmentLabelHandler } from '../flatLabels/flatLabels';\nimport { ViewMode } from '../../../common';\n\nconst worldPosition = new Vector3();\n// const cameraVector = new Vector3();\n// const cameraPolarVector = new Vector3();\nconst cameraAzimuthVector = new Vector3();\n// const polarVector = new Vector3();\nconst azimuthVector = new Vector3();\n// const box = new Box3();\n// const size = new Vector3();\n\nexport class Favorite {\n\n static favorites = [];\n static angel = config.features.favorite?.angel || 45;\n static active = config.features.favorite?.active || false;\n\n constructor (apt,action) {\n if (apt.getObjectByName('favorite') && action === 'add' || !Favorite.active)\n return;\n\n switch (action) {\n case 'add':\n this.add(apt);\n break;\n case 'remove':\n this.remove(apt);\n break;\n }\n }\n\n remove(apt) {\n const scope = Favorite.favorites.find(fav => fav.engineId === apt.userData.crm_data.engineId)?.scope;\n\n if (scope) {\n scope.label.removeFromParent();\n delete scope.apt.userData.favorite;\n Favorite.favorites = Favorite.favorites.filter(fav => fav.engineId !== apt.userData.crm_data.engineId);\n\n //Remove flatLabel\n const label = document.querySelector(`.flat-label-container[data-apartment-name=\"${apt.name}\"]`);\n if (label) {\n label.querySelector('.in-favorite')?.classList.remove('in-favorite');\n }\n }\n }\n\n add (apt) {\n this.apt = apt;\n this.apt.userData.favorite = true;\n this.label = Favorite.heart.clone();\n this.label.name = 'favorite';\n this.apt.add(this.label);\n const obj = {\n engineId: this.apt.userData.crm_data.engineId,\n buildingEngineId: this.apt.userData.crm_data.buildingEngineId,\n lbl: this.label,\n scope: this\n };\n\n Favorite.favorites.push(obj);\n Favorite.intersect();\n\n // Change flat label in floorPlan mode\n const label = document.querySelector(`.flat-label-container[data-apartment-name=\"${apt.name}\"]`);\n if (label) {\n label.querySelector('.flat-label--point')?.classList.add('in-favorite');\n }\n }\n\n static toggle(action) {\n if (!Favorite.active)\n return;\n\n const activeBuildingName = Buildings.getActiveBuilding().name;\n\n Favorite.favorites.forEach(label => {\n if (label.buildingEngineId === activeBuildingName) {\n label.lbl.visible = action === 'show';\n } else {\n label.lbl.visible = false;\n }\n });\n }\n\n static intersect() {\n if (!Favorite.active || settingsData.activeModeSwitching) return;\n\n if (settingsData.activeViewMode !== ViewMode.Cylinder) {\n Favorite.toggle('hide');\n return;\n }\n\n const activeBuildingName = Buildings.getActiveBuilding().name;\n\n Favorite.favorites.forEach(label => {\n if (label.buildingEngineId === activeBuildingName) {\n label.lbl.getWorldPosition(worldPosition);\n azimuthVector.copy(worldPosition);\n azimuthVector.setY(0);\n\n cameraAzimuthVector.copy(threeJsVariables.perspectiveCamera.position);\n cameraAzimuthVector.setY(0);\n\n const azimuthAngle = cameraAzimuthVector.angleTo(azimuthVector);\n const deg = MathUtils.radToDeg(azimuthAngle);\n\n label.lbl.visible = deg < Favorite.angel;\n } else {\n label.lbl.visible = false;\n }\n });\n }\n\n static load() {\n if (!Favorite.active)\n return;\n\n const textureLoader = new TextureLoader();\n const heart = textureLoader.load('./img/heart.png');\n\n const geometry = new BufferGeometry();\n geometry.setAttribute( 'position', new Float32BufferAttribute( [0,0,0], 3 ) );\n\n const material = new PointsMaterial({\n map: heart,\n transparent: true,\n size: 3,\n sizeAttenuation: true,\n depthTest: false\n });\n\n Favorite.heart = new Points(geometry,material);\n }\n}\n","'use strict';\n\nimport {isMobile, isNoMenu} from '../../../settings';\nimport { BaseElement } from '../../interfaces/BaseElement';\n\nexport class Fullscreen {\n static element = document.documentElement;\n static scopes = [];\n\n constructor () {}\n\n addBtn(parent,additionalClass) {\n if (isNoMenu)\n return;\n\n if (!Fullscreen.active) return this;\n this.btn = new BaseElement('button')\n .addClass('fullscreen-btn','icon-fullscreen-arrows','background-backdrop-filter')\n .appendTo(parent)\n .event('click', Fullscreen.handler);\n\n if (additionalClass) {\n this.btn.addClass(additionalClass);\n }\n\n this.updateState();\n Fullscreen.scopes.push(this);\n\n return this;\n }\n\n updateState() {\n if (Fullscreen.enabled) {\n this.btn.removeClass('icon-fullscreen-arrows');\n this.btn.addClass('icon-fullscreen-arrows-2');\n } else {\n this.btn.removeClass('icon-fullscreen-arrows-2');\n this.btn.addClass('icon-fullscreen-arrows');\n }\n }\n\n dispose() {\n Fullscreen.scopes = Fullscreen.scopes.filter(btn => btn !== this);\n }\n\n set visibility(state) {\n switch (state) {\n case 'hide':\n this.btn.addClass('hidden');\n break;\n case 'show':\n this.btn.removeClass('hidden');\n break;\n }\n }\n\n static get active() {\n return isMobile && document.fullscreenEnabled;\n }\n\n static get enabled() {\n return document.fullscreenElement;\n }\n\n static handler() {\n if (Fullscreen.enabled) {\n Fullscreen.#close()\n .then(() => Fullscreen.updateButtonsState());\n } else {\n Fullscreen.#open()\n .then(() => Fullscreen.updateButtonsState());\n }\n }\n\n static visibilityToggle(state) {\n if (!Fullscreen.active) return;\n Fullscreen.scopes.forEach(btn => btn.visibility = state);\n }\n\n static updateButtonsState() {\n if (!Fullscreen.active) return;\n Fullscreen.scopes.forEach(btn => btn.updateState());\n }\n\n static #open() {\n return new Promise(resolve => {\n if (Fullscreen.element.requestFullscreen) {\n Fullscreen.element.requestFullscreen()\n .then(() => resolve());\n } else if (Fullscreen.element.mozRequestFullScreen) {\n Fullscreen.element.mozRequestFullScreen()\n .then(() => resolve());\n } else if (Fullscreen.element.webkitRequestFullscreen) {\n Fullscreen.element.webkitRequestFullscreen()\n .then(() => resolve());\n } else if (Fullscreen.element.msRequestFullscreen) {\n Fullscreen.element.msRequestFullscreen()\n .then(() => resolve());\n }\n });\n }\n\n static #close() {\n return new Promise(resolve => {\n if (document.exitFullscreen) {\n document.exitFullscreen()\n .then(() => resolve());\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen()\n .then(() => resolve());\n } else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen()\n .then(() => resolve());\n } else if (document.msExitFullscreen) {\n document.msExitFullscreen()\n .then(() => resolve());\n }\n });\n }\n}\n","import {BaseElement} from \"../interfaces/BaseElement\";\nimport {changeLangToCurrent} from \"./langSwitcher/langSwitcher\";\nimport {areAllApartmentsSold, capitalizeFirstLetter} from \"../../functions\";\nimport {Buildings, isDesktop, settingsData, projectMode, isMobile, TRoot, UIRoot} from \"../../settings\";\nimport { Color, LinearSRGBColorSpace } from 'three';\nimport {ViewMode} from \"../../common\";\n\nexport class IntersectionLegenda extends BaseElement {\n static #rootElement;\n static #color = new Color();\n // static #colorStatuses = config.resources.bundle?.selectionBoxes?.colorStatus;\n static #dictionary = {};\n static #wasShown = false;\n\n constructor(parentElement) {\n super();\n\n const colorStatus = config.resources.bundle?.selectionBoxes?.colorStatus;\n const isLiteModeEmpty = (projectMode.LiteMode.isActive() && projectMode.LiteMode.modeIs('empty'));\n const isColorStatusAbsent = !colorStatus || colorStatus.length === 0;\n if (isColorStatusAbsent || isLiteModeEmpty || config.features.privateHouseMode || !parentElement)\n return;\n\n IntersectionLegenda.#rootElement = this;\n this.addClass('intersection-legenda');\n if(isDesktop) this.addClass('background-backdrop-filter');\n this.appendTo(parentElement);\n\n IntersectionLegenda.build();\n }\n\n static build() {\n if (!IntersectionLegenda.#rootElement)\n return;\n\n if (areAllApartmentsSold(Buildings.getActiveBuilding())) {\n IntersectionLegenda.#clear();\n IntersectionLegenda.setAllApartmentsAreSold();\n IntersectionLegenda.#rootElement.addClass('error');\n } else {\n IntersectionLegenda.#clear();\n IntersectionLegenda.#createColorDictionary();\n IntersectionLegenda.#addDictionaryDataToRootElement();\n }\n\n if (isMobile)\n IntersectionLegenda.#addMobileLogic();\n\n IntersectionLegenda.show();\n }\n\n static setAllApartmentsAreSold() {\n new BaseElement('span')\n .addAttribute('data-dictionary', 'unavailableBuildingLabel')\n .addClass('language-string', 'intersection-legenda__status')\n .innerHtml(changeLangToCurrent('unavailableBuildingLabel'))\n .appendTo(IntersectionLegenda.#rootElement.DOMElement);\n }\n\n static remove() {\n IntersectionLegenda.#rootElement?.DOMElement.remove();\n IntersectionLegenda.#rootElement = null;\n }\n\n static show() {\n if (!IntersectionLegenda.#rootElement)\n return;\n\n if (isMobile)\n setTimeout(() => IntersectionLegenda.hide(), 3000);\n IntersectionLegenda.#rootElement.removeClass('hidden')\n }\n\n static hide() {\n if (!IntersectionLegenda.#rootElement)\n return;\n\n IntersectionLegenda.#rootElement.addClass('hidden')\n }\n\n static #createColorDictionary() {\n let crmStatuses = IntersectionLegenda.#findDistinctStatus(settingsData.allCrmData);\n const colorStatuses = config.resources.bundle?.selectionBoxes?.colorStatus;\n colorStatuses.forEach((item) => {\n if (!crmStatuses.includes(item.status.toLowerCase()))\n return;\n\n const currentTranslatedStatus = changeLangToCurrent(capitalizeFirstLetter(item.status));\n if (Boolean(currentTranslatedStatus.trim()) && !(currentTranslatedStatus in IntersectionLegenda.#dictionary))\n IntersectionLegenda.#dictionary[currentTranslatedStatus] =\n IntersectionLegenda.#color.setStyle(`#${item.basic}`,LinearSRGBColorSpace).convertLinearToSRGB().getHexString();\n });\n }\n\n static #addDictionaryDataToRootElement() {\n for (let key in IntersectionLegenda.#dictionary) {\n IntersectionLegenda.#createHtmlElementForDictionaryItem(key, IntersectionLegenda.#dictionary[key]);\n }\n }\n\n static #createHtmlElementForDictionaryItem(key, value) {\n const rootElement = new BaseElement()\n .addClass('intersection-legenda__item-wrapper')\n .appendTo(IntersectionLegenda.#rootElement.DOMElement);\n new BaseElement('span')\n .addClass('intersection-legenda__status')\n .innerHtml(key)\n .appendTo(rootElement.DOMElement);\n new BaseElement()\n .addClass('intersection-legenda__color')\n .addStyle('background-color', `#${value}`)\n .appendTo(rootElement.DOMElement);\n }\n\n static #clear() {\n IntersectionLegenda.#dictionary = {};\n IntersectionLegenda.#rootElement.innerHtml('');\n IntersectionLegenda.#rootElement.removeClass('error');\n }\n\n static #findDistinctStatus(arr) {\n let statuses = arr.map(obj => obj.status.toLowerCase());\n return [...new Set(statuses)];\n }\n\n static #addMobileLogic() {\n TRoot.addEventListener('touchstart', () => {\n if (settingsData.activeViewMode === ViewMode.Cylinder && !IntersectionLegenda.#wasShown) {\n IntersectionLegenda.show();\n IntersectionLegenda.#wasShown = true;\n }\n\n });\n UIRoot.addEventListener('touchstart', () => {\n IntersectionLegenda.#wasShown = false;\n })\n }\n}\n","'use strict';\n\nimport {getCurrentLangDirection} from \"../langSwitcher/langSwitcher\";\nimport {isMobile, isTablet} from \"../../../settings\";\nimport Swiper from \"swiper\";\nimport {EffectCube, Navigation, Pagination} from \"swiper/modules\";\nimport { Cloudflare } from '../../api/Cloudflare';\nimport {BaseElement} from \"../../interfaces/BaseElement\";\n\nexport class OptionsCardGallery {\n constructor(container, picturesArray) {\n this.container = container;\n this.picturesArray = picturesArray;\n this.swiper = null;\n this.galleryContainer = null;\n }\n\n create() {\n\n this.galleryContainer = new BaseElement()\n .addClass('swiper', 'options__card__gallery')\n .addAttribute('dir', getCurrentLangDirection())\n .appendTo(this.container)\n const galleryWrapper = new BaseElement()\n .addClass('options__card__gallery__wrapper', 'swiper-wrapper')\n .appendTo(this.galleryContainer.DOMElement);\n\n\n this.picturesArray.forEach((picture, index) => {\n let url;\n\n if (isMobile || isTablet) {\n url = Cloudflare.resize(picture,{\n width: 1024,\n quality: 75\n });\n } else {\n url = Cloudflare.resize(picture,{\n width: 2048,\n quality: 75\n });\n }\n\n const imgContainer = new BaseElement()\n .addClass('options__card__gallery__img__container', 'swiper-slide')\n .appendTo(galleryWrapper.DOMElement);\n new BaseElement('img')\n .addClass('options__card__gallery__img')\n .event('load', () => { preloaderContainer.remove() })\n .setAttributes({\n 'src': url,\n 'alt': `Picture-${index}`\n })\n .appendTo(imgContainer.DOMElement);\n const preloaderContainer = new BaseElement()\n .addClass('options__card__gallery__img__preloader')\n .appendTo(imgContainer.DOMElement);\n new BaseElement()\n .addClass('swiper-lazy-preloader', 'swiper-lazy-preloader-white')\n .appendTo(preloaderContainer.DOMElement);\n });\n\n new BaseElement()\n .addClass('options__card__gallery__pagination', 'swiper-pagination')\n .appendTo(this.galleryContainer.DOMElement);\n new BaseElement()\n .addClass('options__card__gallery__navigation-btn', 'swiper-button-next', 'icon-right1')\n .appendTo(this.galleryContainer.DOMElement);\n new BaseElement()\n .addClass('options__card__gallery__navigation-btn', 'swiper-button-prev', 'icon-left1')\n .appendTo(this.galleryContainer.DOMElement);\n\n Swiper.use([Pagination, EffectCube, Navigation]);\n this.swiper = new Swiper('.options__card__gallery', {\n effect: this.picturesArray.length > 1 && this.picturesArray.length < 4 ? 'slide' : 'cube',\n loop: this.picturesArray.length > 1,\n spaceBetween: 30,\n pagination: {\n el: '.options__card__gallery__pagination',\n type: 'bullets',\n clickable: true\n },\n navigation: {\n nextEl: \".options__card__gallery__navigation-btn.swiper-button-next\",\n prevEl: \".options__card__gallery__navigation-btn.swiper-button-prev\",\n },\n });\n }\n\n update() {\n this.swiper?.update();\n }\n\n remove() {\n this.galleryContainer?.remove();\n this.galleryContainer = null;\n this.swiper = null;\n }\n\n changeDirection() {\n if (!this.swiper) return;\n this.remove();\n this.create();\n }\n}\n","'use strict';\n\n\nimport { BaseElement } from '../interfaces/BaseElement';\nimport gsap from 'gsap';\nimport { GSAPAnimationMixer, isMobile } from '../../settings';\nimport { getUrlParam } from '../../functions';\nimport { Cloudflare } from '../api/Cloudflare';\nimport { changeLangToCurrent } from './langSwitcher/langSwitcher';\nimport { BmbyMode } from '../mode/BmbyMode';\n\nexport class PWA {\n\tconstructor () {\n\t\tthis.event = null;\n\t\tthis.container = null;\n\t\tthis.icon = `${config.cdnRepository}/resize/image/width=60,height=50/${config.projectFolder}/resources/img/favicon.png?v=${Cloudflare.version}`;\n\t}\n\n\taddEvents () {\n\t\tif (window.BeforeInstallPromptEvent) {\n\t\t\twindow.addEventListener('beforeinstallprompt', (e) => {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.event = e;\n\t\t\t});\n\t\t}\n\t}\n\n\t#animate (state) {\n\t\tif (state === 'show') {\n\t\t\treturn new Promise(resolve => {\n\t\t\t\tgsap.fromTo(this.container, {\n\t\t\t\t\ty: '-200%',\n\t\t\t\t}, {\n\t\t\t\t\ty: 0,\n\t\t\t\t\tduration: 1,\n\t\t\t\t\tease: GSAPAnimationMixer.ease,\n\t\t\t\t\tonComplete: () => resolve(),\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\treturn new Promise(resolve => {\n\t\t\t\tgsap.to(this.container, {\n\t\t\t\t\ty: '-200%',\n\t\t\t\t\tduration: 1,\n\t\t\t\t\tease: GSAPAnimationMixer.ease,\n\t\t\t\t\tonComplete: () => resolve(),\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\n\tasync show () {\n\t\tif (getUrlParam('source') === 'pwa' || !isMobile || BmbyMode.active) return;\n\n\t\tawait new Promise(resolve => {\n\t\t\tconst interval = setInterval(() => {\n\t\t\t\tconst videoPopUp = document.querySelector('.video-pop-up');\n\t\t\t\tconst consolto = document.querySelector('.drop-down__clone');\n\t\t\t\tconst notify = document.querySelector('.notiflix-notify');\n\t\t\t\tif (!videoPopUp && !consolto && !notify) {\n\t\t\t\t\tclearInterval(interval);\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t},200)\n\t\t});\n\n\t\tthis.container = new BaseElement()\n\t\t\t.addClass('pwa')\n\t\t\t.appendTo(document.body)\n\t\t\t.DOMElement;\n\n\t\tconst wrapper = new BaseElement()\n\t\t\t.addClass('pwa__wrapper')\n\t\t\t.appendTo(this.container)\n\t\t\t.DOMElement;\n\n\t\tconst logo = new BaseElement()\n\t\t\t.addClass('pwa__logo')\n\t\t\t.appendTo(wrapper)\n\t\t\t.DOMElement;\n\n\t\tnew BaseElement('img')\n\t\t\t.addClass('pwa__icon')\n\t\t\t.addAttribute('src', this.icon)\n\t\t\t.appendTo(logo);\n\n\t\tconst contentBlock = new BaseElement()\n\t\t\t.addClass('pwa__content-block')\n\t\t\t.appendTo(wrapper)\n\t\t\t.DOMElement;\n\n\t\tconst textBlock = new BaseElement()\n\t\t\t.addClass('pwa__text-block')\n\t\t\t.appendTo(contentBlock)\n\t\t\t.DOMElement;\n\n\t\tnew BaseElement('span')\n\t\t\t.addClass('pwa__title', 'language-string')\n\t\t\t.addAttribute('data-dictionary', 'Install the application')\n\t\t\t.innerHtml(changeLangToCurrent('Install the application'))\n\t\t\t.appendTo(textBlock);\n\n\t\tnew BaseElement('span')\n\t\t\t.addClass('pwa__title')\n\t\t\t.innerHtml(`\"${config.projectTitle}\"`)\n\t\t\t.appendTo(textBlock);\n\n\t\tnew BaseElement('button')\n\t\t\t.addClass('pwa__install', 'language-string')\n\t\t\t.addAttribute('data-dictionary', 'Install')\n\t\t\t.innerHtml(changeLangToCurrent('Install'))\n\t\t\t.appendTo(contentBlock)\n\t\t\t.event('click', this.#installHandler.bind(this));\n\n\t\tnew BaseElement()\n\t\t\t.addClass('pwa__close-btn', 'icon-close')\n\t\t\t.appendTo(contentBlock)\n\t\t\t.event('click', this.close.bind(this));\n\n\t\tthis.#animate('show');\n\t}\n\n\tasync #installHandler () {\n\t\tif (this.event) {\n\t\t\tthis.event.prompt();\n\t\t\t// const {outcome} = await this.event.userChoice;\n\t\t\t// if (outcome === 'accepted') {\n\t\t\t//\n\t\t\t// } else if (outcome === 'dismissed') {\n\t\t\t//\n\t\t\t// }\n\t\t\tthis.event = null;\n\t\t} else {\n\t\t\tconst installHelper = new window.AddToHomeScreen(\n\t\t\t\t{\n\t\t\t\t\tappName: config.projectTitle,\n\t\t\t\t\tappIconUrl: this.icon,\n\t\t\t\t\tassetUrl: './img/pwa/',\n\t\t\t\t\tshowErrorMessageForUnsupportedBrowsers: window.AddToHomeScreen.SHOW_ERRMSG_UNSUPPORTED.NONE,\n\t\t\t\t\tallowUserToCloseModal: false,\n\t\t\t\t\tmaxModalDisplayCount: -1,\n\t\t\t\t});\n\t\t\tinstallHelper.show();\n\n\t\t\tconst container = document.querySelector('.adhs-container');\n\n\t\t\tif (container) {\n\t\t\t\tconst modal = container.querySelector('.adhs-modal');\n\t\t\t\tnew BaseElement('button')\n\t\t\t\t\t.addClass('button','pwa__close-modal-btn')\n\t\t\t\t\t.innerHtml('Close')\n\t\t\t\t\t.event('click',() => container.remove())\n\t\t\t\t\t.appendTo(modal);\n\t\t\t}\n\t\t}\n\t\tthis.close();\n\t}\n\n\tasync close () {\n\t\tawait this.#animate('hide');\n\t\tthis.container.remove();\n\t}\n\n}\n\n\n// document.addEventListener('DOMContentLoaded', function () {\n// \twindow.AddToHomeScreenInstance = new window.AddToHomeScreen({\n// \t\tappName: config.projectTitle,\n// \t\tappIconUrl: 'https://dreamsimages.bmby.com/resize/image/width=256/GreenSide/resources/img/logo.png',\n// \t\tassetUrl: './img/pwa/',\n// \t\tshowErrorMessageForUnsupportedBrowsers: window.AddToHomeScreen.SHOW_ERRMSG_UNSUPPORTED.NONE,\n// \t\tallowUserToCloseModal: false,\n// \t\tmaxModalDisplayCount: -1\n// \t});\n//\n// \tconst popup = window.AddToHomeScreenInstance.show('en');\n// });\n","'use strict';\n\nimport { BaseElement } from '../../interfaces/BaseElement';\nimport { Cloudflare } from '../../api/Cloudflare';\n\nconst DEFAULT_SETTINGS = {\n active: false,\n passwords: []\n};\n\nexport class Password {\n constructor () {\n this.params = config.features.protect || DEFAULT_SETTINGS;\n this.valid = false;\n }\n\n create() {\n if (!this.params.active) return new Promise(resolve => resolve());\n\n this.container = new BaseElement()\n .addClass('protected')\n .appendTo(document.body)\n .DOMElement;\n\n const logo = new BaseElement()\n .addClass('protected-logo')\n .appendTo( this.container)\n .DOMElement;\n\n const body = new BaseElement()\n .addClass('protected__body')\n .appendTo(this.container)\n .DOMElement;\n\n const {projectFolder,cdnRepository} = config;\n const url = Cloudflare.resize(`${cdnRepository}/${projectFolder}/resources/img/logo.png`,{\n width: 500\n });\n logo.style.backgroundImage = `url(${url})`;\n\n // const loginBlock = new BaseElement()\n // .addClass('protected__body-element')\n // .appendTo(body)\n // .DOMElement;\n\n const passwordBlock = new BaseElement()\n .addClass('protected__body-element')\n .appendTo(body)\n .DOMElement;\n\n // const userName = new BaseElement('input')\n // .addClass('login-input','protected-input')\n // .event('input',this.removeError.bind(this))\n // .appendTo(loginBlock)\n // .addAttribute('id','login')\n // .addAttribute('required',true)\n // .DOMElement;\n\n // new BaseElement('label')\n // .addClass('protected-label')\n // .innerHtml('Login')\n // .addAttribute('for','login')\n // .appendTo(loginBlock);\n\n const userPassword = new BaseElement('input')\n .addClass('password-input','protected-input')\n .addAttribute('type','password')\n .addAttribute('id','password')\n .addAttribute('required',true)\n .event('input',this.removeError.bind(this))\n .appendTo(passwordBlock)\n .DOMElement;\n\n new BaseElement('label')\n .addClass('protected-label')\n .innerHtml('Password')\n .addAttribute('for','password')\n .appendTo(passwordBlock);\n\n new BaseElement('div')\n .addClass('protected-show-password')\n .appendTo(passwordBlock)\n .event('click',() => this.showPassword(userPassword));\n\n new BaseElement('button')\n .addClass('protected-submit')\n .innerHtml('Sign in')\n .appendTo(body)\n .event('click',(e) => this.submit(e,userPassword));\n\n new BaseElement('h5')\n .addClass('protected-text')\n .appendTo(this.container)\n .innerHtml('For support, please call 03-5617003');\n\n\n return new Promise(resolve => {\n const interval = setInterval(() => {\n if (this.valid) {\n clearInterval(interval);\n this.container.remove();\n resolve();\n }\n },200);\n });\n }\n\n submit(e,passwordElement) {\n e.preventDefault();\n const password = passwordElement.value;\n\n if (this.params.passwords.includes(password)) {\n passwordElement.value = '';\n this.valid = true;\n } else {\n passwordElement.classList.add('protected-error');\n }\n }\n\n showPassword(element) {\n const type = element.getAttribute('type');\n if (type === 'password') {\n element.setAttribute('type','text');\n } else {\n element.setAttribute('type','password');\n }\n }\n\n removeError(e) {\n e.target.classList.remove('protected-error');\n }\n\n}","'use strict';\n\nimport {\n createHtmlElement,\n findSelectionAndCrmData,\n getCurrentDateTime,\n getUrlParam,\n isCurrentDateWithinRange\n} from '../../../functions';\nimport {changeLangToCurrent, getCurrentLang} from \"../langSwitcher/langSwitcher\";\nimport {analytics} from \"../../analytics/analytics\";\nimport { getProps, releasePayment } from '../../crm/crm-requests';\nimport {UnitCardClass} from \"../../cards/unitCards/UnitCardClass\";\nimport {selectionBoxesSetStatusColor} from \"../../threejs/raycast\";\nimport { isMobile, projectMode, settingsData } from '../../../settings';\nimport {searchGetResults} from \"../../menu/search/search\";\nimport { DreamsPreloader } from '../preloader/DreamsPreloader';\n\nlet paymentUID = null;\n\nexport class Prepayment {\n constructor (parent, crm, position) {\n const APISettings = config.crmProjectSettings.prepayment;\n const isWithingDateRange = isCurrentDateWithinRange(APISettings?.utcStartTime, APISettings?.utcEndTime, getCurrentDateTime('YYYY-MM-DD HH:MM', 'UTC'))\n const isAPIPermits = isWithingDateRange && APISettings?.active === 1;\n const isUrlParam = parseInt(getUrlParam('prepayment')) === 1;\n const isActive = isUrlParam || isAPIPermits;\n if (crm.engineId.match(/patio/g) || !isActive)\n return;\n\n this.parent = parent;\n this.crm = crm;\n this.position = position;\n this.preloader = null;\n this.reserved = false;\n\n if (this.crm.status !== 'Available' && this.crm.status !== 'InSaving')\n return;\n\n this.#addButton();\n if (this.crm.status === 'InSaving')\n this.button.disabled = true;\n }\n\n static disable(prop) {\n const currentButton = document.getElementById('prepayment');\n if (!currentButton)\n return;\n\n if (prop.engineId === currentButton.getAttribute('engineId'))\n currentButton.disabled = true;\n }\n\n static enable(prop) {\n const currentButton = document.getElementById('prepayment');\n if (!currentButton)\n return;\n\n if (prop.engineId === currentButton.getAttribute('engineId'))\n currentButton.disabled = false;\n }\n\n #addButton() {\n if (this.position) {\n this.button = createHtmlElement('','','button',['customer-contact-now-btn', 'prepayment-btn','language-string']);\n this.parent.insertAdjacentElement(this.position,this.button);\n } else {\n this.button = createHtmlElement(this.parent,'','button',['customer-contact-now-btn', 'prepayment-btn','language-string']);\n }\n\n this.button.type = 'button';\n this.button.setAttribute('id','prepayment');\n this.button.setAttribute('engineId', this.crm.engineId);\n\n if (this.reserved) {\n this.button.innerText = changeLangToCurrent('Reserved');\n this.button.setAttribute('data-dictionary', 'Reserved');\n this.button.classList.add('reserved');\n } else {\n this.button.classList.add('button');\n this.button.innerText = changeLangToCurrent('Make Prepayment');\n this.button.setAttribute('data-dictionary', 'Make Prepayment');\n this.button.addEventListener('click', this.#listener.bind(this));\n }\n }\n\n #listener(e) {\n e.stopPropagation();\n\n if (this.reserved) return;\n\n this.#createPrepayment();\n analytics('prepayment',this.crm)\n }\n\n #createPrepayment() {\n this.prepaymentContainer = createHtmlElement(document.body,'','div',['prepayment-container']);\n this.iframeContainer = createHtmlElement(this.prepaymentContainer,'','div',['prepayment-container__iframe-container']);\n\n this.#addPreloader(this.iframeContainer);\n\n const closeBtn = createHtmlElement(this.iframeContainer,'','button',['prepayment__close-btn','icon-close']);\n const iframe = createHtmlElement(this.iframeContainer,'','iframe',['prepayment-iframe']);\n let url =`https://mbeat.bmby.com/PaymentGateWay/NewWizard/${getCurrentLang()}/?prop_id=${this.crm.bmbyPropID}&project_id=${config.projectGuid}`;\n const clientId = getUrlParam('clientId');\n if (clientId) {\n url += `&i=${clientId}`;\n }\n iframe.src = url;\n\n closeBtn.addEventListener('click', this.#closeListener.bind(this));\n\n iframe.onload = () => this.#removePreloader();\n }\n\n async #closeListener() {\n\n this.#addPreloader(this.iframeContainer,'prepayment__preloader-opacity');\n\n const paymentData = {\n action: 'closed',\n propId: this.crm.bmbyPropID\n };\n\n if (paymentUID) {\n paymentData.uid = paymentUID;\n }\n\n await releasePayment(paymentData);\n const newCrmData = await getProps();\n const data = newCrmData.data;\n const newAptStatus = data.find(apt => apt.bmbyPropID === this.crm.bmbyPropID).status;\n const searchList = document.querySelector('.search__container-bottom');\n\n if (newAptStatus !== this.crm.status) {\n this.crm.status = newAptStatus;\n\n if (!isMobile) {\n const card = new UnitCardClass(this.crm);\n UnitCardClass.closeMultipleCards();\n UnitCardClass.cards.push(card);\n card.createCard();\n }\n\n const { selectedMesh } = findSelectionAndCrmData(this.crm.engineId);\n selectedMesh.userData.isActive = false;\n selectedMesh.userData.isClicked = true;\n selectionBoxesSetStatusColor(selectedMesh,'click');\n this.button.remove();\n const secondBtn = document.querySelector('.prepayment-btn');\n secondBtn && secondBtn.remove();\n\n this.reserved = true;\n\n const optionCard = document.querySelector('.options-card');\n if (optionCard) {\n optionCard.classList.add('unavailable');\n\n const optionCardPriceBlock = optionCard.querySelector('.options-card__price');\n if (optionCardPriceBlock) {\n optionCardPriceBlock.classList.add('language-string');\n optionCardPriceBlock.innerHTML = changeLangToCurrent(newAptStatus);\n optionCardPriceBlock.setAttribute('data-dictionary', newAptStatus);\n optionCardPriceBlock.classList.remove('hide-price-field');\n }\n\n const favorite = optionCard.querySelector('.options-card__favorite');\n favorite?.remove();\n }\n } else {\n const { selectedMesh } = findSelectionAndCrmData(this.crm.engineId);\n selectedMesh.userData.isActive = true;\n selectedMesh.userData.isInSearch = true;\n selectedMesh.userData.isClicked = true;\n selectionBoxesSetStatusColor(selectedMesh,'click');\n }\n\n // Update all apartments\n data.forEach(apt => {\n if (apt.engineId !== this.crm.engineId) {\n const oldData = settingsData.allCrmData.find(crm => crm.engineId === apt.engineId);\n if (oldData)\n oldData.status = apt.status;\n }\n });\n\n if (searchList)\n searchGetResults();\n\n this.#removePreloader();\n this.#closePrepayment();\n }\n\n #addPreloader(parent,customClass) {\n this.preloader = new DreamsPreloader(parent,customClass)\n .absolute()\n .show();\n }\n\n #removePreloader() {\n this.preloader && this.preloader.remove();\n this.preloader = null;\n }\n\n #closePrepayment() {\n this.prepaymentContainer.remove();\n }\n}\n\n\nwindow.addEventListener(\"message\", (e) => {\n if (e && typeof e.data === 'object') {\n if (e.data.paymentUID) {\n paymentUID = e.data.paymentUID;\n } else if (e.data.buildingId) {\n const buildingName = config.buildings.find(building => building.buildingId === e.data.buildingId)?.buildingEngineId;\n if (buildingName) {\n projectMode.Cylinder.switchBuilding(buildingName, false, true);\n }\n }\n }\n});\n","'use strict';\n\nexport class ProjectLogs {\n static #timers = {};\n static #logs = {\n userData: {\n type: null,\n bandwidthSpeed: null,\n userAgent: navigator.userAgent\n },\n timeLog: {\n total: null,\n api: {\n props: -1,\n settings: -1,\n loader: -1\n },\n bundle: null\n }\n };\n\n constructor() {\n ProjectLogs.#measureUserBandwidthSpeed();\n ProjectLogs.#userDeviceType();\n }\n\n static get getLogs() {\n return ProjectLogs.#logs;\n }\n\n static timerStartFor(logType) {\n const splitLogType = logType.split(\"_\");\n if (splitLogType.length > 1) {\n if (!ProjectLogs.#timers.hasOwnProperty(splitLogType[0]))\n ProjectLogs.#timers[splitLogType[0]] = {};\n\n ProjectLogs.#timers[splitLogType[0]][splitLogType[1]] = {\n start: performance.now()\n };\n } else {\n ProjectLogs.#timers[splitLogType[0]] = {\n start: performance.now()\n };\n }\n }\n\n static timerStopFor(logType) {\n const splitLogType = logType.split(\"_\");\n if (!ProjectLogs.#timers.hasOwnProperty(splitLogType[0]))\n return;\n\n if (splitLogType.length > 1) {\n ProjectLogs.#timers[splitLogType[0]][splitLogType[1]].end = performance.now();\n\n const start = ProjectLogs.#timers[splitLogType[0]][splitLogType[1]].start;\n const end = ProjectLogs.#timers[splitLogType[0]][splitLogType[1]].end;\n\n ProjectLogs.#logs.timeLog[splitLogType[0]][splitLogType[1]] = (end - start).toFixed(2);\n } else {\n ProjectLogs.#timers[splitLogType[0]].end = performance.now();\n\n const start = ProjectLogs.#timers[splitLogType[0]].start;\n const end = ProjectLogs.#timers[splitLogType[0]].end;\n\n ProjectLogs.#logs.timeLog[splitLogType[0]] = (end - start).toFixed(2);\n }\n }\n\n static #measureUserBandwidthSpeed() {\n const img = new Image();\n let startTime, endTime;\n\n img.onload = function () {\n endTime = new Date().getTime();\n const duration = (endTime - startTime) / 1000; // in seconds\n const speed = (523 / duration).toFixed(2); // size of the image divided by duration\n ProjectLogs.#logs.userData.bandwidthSpeed = `${speed} KB/s`;\n };\n\n startTime = new Date().getTime();\n img.src = \"https://dreamsimages.bmby.com/DreamsGeneralStorage/textures/water/water.jpg\"; // Replace this URL with the URL of a small file on your server\n }\n\n static #userDeviceType() {\n const userAgent = navigator.userAgent;\n let deviceType;\n if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent)) {\n deviceType = \"Mobile\";\n } else if (/iPad/i.test(userAgent)) {\n deviceType = \"Tablet\";\n } else {\n deviceType = \"Desktop\";\n }\n\n ProjectLogs.#logs.userData.type = deviceType;\n }\n}","'use strict';\n\n\nimport { BaseElement } from '../../interfaces/BaseElement';\nimport { DreamsPreloader } from '../preloader/DreamsPreloader';\n\nexport class Scheduler {\n\tstatic loaded = false;\n\t\n\tconstructor (guid) {\n\t\tthis.guid = guid;\n\t\t\n\t\tif (!Scheduler.loaded) {\n\t\t\tthis.#addScript().then(() => {\n\t\t\t\tthis.meeting = new BmbyScheduler.MeetingScheduler({\n\t\t\t\t\tguid: this.guid,\n\t\t\t\t\topenBtn: false\n\t\t\t\t});\n\t\t\t})\n\t\t} else {\n\t\t\tthis.meeting = new BmbyScheduler.MeetingScheduler({\n\t\t\t\tguid: this.guid,\n\t\t\t\topenBtn: false\n\t\t\t});\n\t\t}\n\t}\n\t\n\tbind(btn) {\n\t\tthis.btn = btn;\n\t\tthis.btn.addEventListener('click',this.#btnHandler.bind(this));\n\t}\n\t\n\t#btnHandler() {\n\t\tif (!Scheduler.loaded) {\n\t\t\tconst preloader = new DreamsPreloader(document.body);\n\t\t\tconst awaitScripts = setInterval(() => {\n\t\t\t\tif (Scheduler.loaded) {\n\t\t\t\t\tclearInterval(awaitScripts);\n\t\t\t\t\tpreloader.remove();\n\t\t\t\t\tthis.meeting.show();\n\t\t\t\t}\n\t\t\t},100);\n\t\t} else {\n\t\t\tthis.meeting.show();\n\t\t}\n\t}\n\t\n\t#addScript() {\n\t\treturn new Promise(resolve => {\n\t\t\tnew BaseElement('script')\n\t\t\t\t.addAttribute('src','https://bmbyscheduler.azurewebsites.net/bmby-scheduler.js')\n\t\t\t\t.addAttribute('id','bmbySchedulerScript')\n\t\t\t\t.addAttribute('defer', true)\n\t\t\t\t.event('load',() => {\n\t\t\t\t\tScheduler.loaded = true;\n\t\t\t\t\tresolve();\n\t\t\t\t})\n\t\t\t\t.appendTo(document.head);\n\t\t\t\n\t\t\tnew BaseElement('link')\n\t\t\t\t.addAttribute('href','https://bmbyscheduler.azurewebsites.net/bmby-scheduler.css')\n\t\t\t\t.addAttribute('id','bmbySchedulerStyles')\n\t\t\t\t.addAttribute('rel','stylesheet')\n\t\t\t\t.appendTo(document.head);\n\t\t})\n\t}\n\t\n}\n","import {BaseElement} from \"../interfaces/BaseElement\";\nimport {isMobile, UIRoot} from \"../../settings\";\nimport {logoHandler} from \"../menu/menu\";\nimport { Cloudflare } from '../api/Cloudflare';\nimport { BmbyMode } from '../mode/BmbyMode';\n\nexport class ScreenLogo extends BaseElement{\n static #rootElement;\n\n constructor(logoImageURL) {\n super();\n if (!isMobile) return;\n\n ScreenLogo.#rootElement = this;\n ScreenLogo.#rootElement\n .addClass('screen-logo')\n .event('click', logoHandler)\n .appendTo(UIRoot);\n new BaseElement('img')\n .addClass('screen-logo__image')\n .appendTo(ScreenLogo.#rootElement.DOMElement)\n .addAttribute('src', Cloudflare.resize(logoImageURL,{height: 50}))\n }\n\n static show() {\n ScreenLogo.#rootElement?.removeClass('hidden');\n }\n\n static hide() {\n ScreenLogo.#rootElement?.addClass('hidden');\n }\n}\n","'use strict';\n\nimport {BaseElement} from \"../interfaces/BaseElement\";\nimport {changeLangToCurrent, getCurrentLang} from \"./langSwitcher/langSwitcher\";\n\nexport class StaticPrepayment {\n\tconstructor(parent, data) {\n\t\tthis.data = data;\n\n\t\tthis.#createButton(parent);\n\t}\n\n\t#createButton(parent) {\n\t\tnew BaseElement('button')\n\t\t\t.addClass('prepayment-button', 'customer-contact-now-btn', 'prepayment-btn', 'language-string', 'button')\n\t\t\t.setAttributes({'data-dictionary': 'Make Prepayment'})\n\t\t\t.innerHtml(changeLangToCurrent('Make Prepayment'))\n\t\t\t.event('click', this.#createPrepayment.bind(this))\n\t\t\t.appendTo(parent);\n\t}\n\n\t#createPrepayment(event) {\n\t\tevent.stopPropagation();\n\n\t\tconst staticPrepaymentRoot = new BaseElement()\n\t\t\t.addAttribute('id', 'staticPrepayment')\n\t\t\t.appendTo(document.body);\n\n\t\tnew BaseElement()\n\t\t\t.addClass('curtain')\n\t\t\t.appendTo(staticPrepaymentRoot.DOMElement);\n\n\t\tconsole.log(this.data);\n\n\t\tconst aptData = {\n\t\t\taptModel: this.data.propType,\n\t\t\taptType: this.data.modelName,\n\t\t\tbedrooms: this.data.roomNum,\n\t\t\tfloor: this.data.floorNum,\n\t\t\tprice: this.data.price2\n\t\t}\n\n\t\tconst dictionary = {\n\t\t\trentRequest: {\n\t\t\t\ten: \"Reservation request\",\n\t\t\t\the: \"שריון דירה\"\n\t\t\t},\n\t\t\taptType: {\n\t\t\t\ten: \"apt. type\",\n\t\t\t\the: \"דגם\"\n\t\t\t},\n\t\t\tbedrooms: {\n\t\t\t\ten: \"bedrooms\",\n\t\t\t\the: \"חדרים\"\n\t\t\t},\n\t\t\tfloor: {\n\t\t\t\ten: \"floor\",\n\t\t\t\the: \"קומה\"\n\t\t\t},\n\t\t\tsubtitle_1: {\n\t\t\t\ten: \"Thank you for choosing to rent an apartment.\",\n\t\t\t\the: \"תודה שבחרתם לתפוס את הדירה בפרוייקט.\"\n\t\t\t},\n\t\t\tsubtitle_2: {\n\t\t\t\ten: \"In this short and simple process we will make an apartment reservation for you.\",\n\t\t\t\the: \"בתהליך קצר ופשוט זה נתפוס לך את הדירה.\"\n\t\t\t},\n\t\t\tsubtitle_3: {\n\t\t\t\ten: \"Personal Details\",\n\t\t\t\the: \"פרטים אישיים\"\n\t\t\t},\n\t\t\tphase: {\n\t\t\t\ten: \"Phase\",\n\t\t\t\the: \"שלב\"\n\t\t\t},\n\t\t\tfirstName: {\n\t\t\t\ten: \"First Name\",\n\t\t\t\the: \"שם פרטי\"\n\t\t\t},\n\t\t\tlastName: {\n\t\t\t\ten: \"Last Name\",\n\t\t\t\the: \"שם משפחה\"\n\t\t\t},\n\t\t\tcantBeEmpty: {\n\t\t\t\ten: \" can't be empty\",\n\t\t\t\the: \" הוא שדה חובה\"\n\t\t\t},\n\t\t\tpleaseProvideValid: {\n\t\t\t\ten: \"Please provide a valid \",\n\t\t\t\the: \"Please provide a valid\"\n\t\t\t},\n\t\t\temail: {\n\t\t\t\ten: \"Email\",\n\t\t\t\the: \"אימייל\"\n\t\t\t},\n\t\t\tmobile: {\n\t\t\t\ten: \"Mobile\",\n\t\t\t\the: \"נייד\"\n\t\t\t},\n\t\t\tstartReservation: {\n\t\t\t\ten: \"Start Reservation\",\n\t\t\t\the: \"התחל הזמנה\"\n\t\t\t}\n\t\t}\n\n\t\tconst content = `\n\t\t\t

\n\t\t\t\t${dictionary.rentRequest[getCurrentLang()]}\n\t\t\t

\n\t\t\t
\n\t\t\t
\n\t\t\t\t\t\"House\n\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
${changeLangToCurrent(aptData.aptModel)}
\n\t\t\t\t\t\t\t\t\t\t\t
₪ ${aptData.price.toLocaleString()}
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
${aptData.aptType}
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t${dictionary.aptType[getCurrentLang()]}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
${aptData.bedrooms}
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t${dictionary.bedrooms[getCurrentLang()]}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
${aptData.floor}
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t${dictionary.floor[getCurrentLang()]}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t${dictionary.subtitle_1[getCurrentLang()]}\n\t\t\t\t\t\t\t

\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t${dictionary.subtitle_2[getCurrentLang()]}\t\n\t\t\t\t\t\t\t

\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t${dictionary.subtitle_3[getCurrentLang()]}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t1\n\t\t\t\t\t\t\t\t\t/4 \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t${dictionary.phase[getCurrentLang()]}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t${dictionary.firstName[getCurrentLang()]}${dictionary.cantBeEmpty[getCurrentLang()]}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t${dictionary.lastName[getCurrentLang()]}${dictionary.cantBeEmpty[getCurrentLang()]}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t${dictionary.pleaseProvideValid[getCurrentLang()]}${dictionary.email[getCurrentLang()]}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t${dictionary.pleaseProvideValid[getCurrentLang()]}${dictionary.mobile[getCurrentLang()]}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t
\n\t
\n\t\t`;\n\t\tnew BaseElement()\n\t\t\t.addClass('content-element')\n\t\t\t.innerHtml(content)\n\t\t\t.appendTo(staticPrepaymentRoot.DOMElement);\n\n\t\tnew BaseElement('button')\n\t\t\t.addClass('close-button', 'close-button-cross')\n\t\t\t.event('click', () => {\n\t\t\t\tstaticPrepaymentRoot.remove()\n\t\t\t})\n\t\t\t.appendTo(staticPrepaymentRoot.DOMElement);\n\t}\n}","'use strict';\n\nimport ThreeGeo from '../../../libs/three-geo.esm';\nimport {\n Box3, Color,\n Group, LinearFilter, LinearMipmapLinearFilter, LinearSRGBColorSpace, MathUtils,\n MeshStandardMaterial,\n Raycaster,\n Vector3,\n} from 'three';\nimport { threeJsVariables } from '../../../settings';\nimport { OSMEnv } from '../../threejs/sceneBackground';\nimport { latLngAltToVector3 } from '../publicLayers/Layer';\nimport { OrbitDayAndNight } from '../../liveAnimations/DayNight/OrbitDayAndNight';\nimport { ColorCorrection } from '../../threejs/colorCorrection';\nimport { Environment } from '../Environment/Environment';\nimport { EnvironmentLayer } from '../Environment/EnvironmentLayers/EnvironmentLayer';\nimport { getShadowParams, prepareMaterial } from '../../threejs/autoProjectScript';\nimport { Loader } from '../../threejs/loader/Loader';\nimport { LUT } from '../../post-processing/Passes/LUT';\nimport { sceneObjectsGroup } from '../../points/points';\nimport { TilesTerrain } from './TilesTerrain';\n\nlet groundGroup = null;\nlet intersections = null;\nlet objectsToHeightIntersection = [];\nconst vector = new Vector3();\nconst terrainRaycaster = new Raycaster();\nterrainRaycaster.firstHitOnly = true;\nconst originRay = new Vector3();\nconst directionRay = new Vector3();\n\nexport class Terrain {\n constructor () {\n }\n\n loadTerrain(group) {\n if (Environment.isActive()) {\n if (!Environment.fromBundle()) {\n TerrainEnvironment.scope?.create(group);\n }\n return;\n }\n\n if (!OrbitDayAndNight.isActive) return;\n\n const { ground, localization } = config.features.dayNight.settings;\n const mapBoxToken = 'pk.eyJ1IjoiYWJkdWxsYWJlc3QiLCJhIjoiY2tvc2RiZGlwMDBmdjJxbXc2cjRlZTRkcCJ9.-P0yGd4LAGQodEj87GKl-w';\n const lat = localization.lat;\n const lng = localization.lng;\n const type = ground.type || 'static';\n\n groundGroup = new Group();\n groundGroup.name = 'Terrain group';\n group.add(groundGroup);\n \n groundGroup.position.set(ground.position.x,ground.position.y,ground.position.z);\n groundGroup.rotation.set(ground.rotation.x, ground.rotation.y, ground.rotation.z);\n \n switch (type) {\n case 'static':\n const geo = new ThreeGeo({\n tokenMapbox: mapBoxToken,\n unitsSide: ground.unitsSide\n });\n \n let shadowSettings = getShadowParams(threeJsVariables.bundleConfig,'terrain');\n if (!shadowSettings) {\n shadowSettings = {\n castShadow: false,\n receiveShadow: true\n }\n }\n const terrain = geo.getTerrainRgb([lat,lng],ground.radius,ground.zoom);\n terrain.then(geoGroup => {\n const box = new Box3();\n const v = new Vector3();\n const zero = new Vector3();\n const anisotropy = threeJsVariables.renderer.capabilities.getMaxAnisotropy();\n const colors = new ColorCorrection().getColors('ground');\n \n geoGroup.traverse(el => {\n if (el.isMesh) {\n const t = el.material.map;\n t.magFilter = LinearFilter;\n t.minFilter = LinearMipmapLinearFilter;\n t.anisotropy = anisotropy;\n threeJsVariables.renderer.initTexture(t);\n box.setFromObject(el).getCenter(v);\n el.geometry.center();\n el.position.copy(v);\n \n el.material = new MeshStandardMaterial({\n color: new Color().setStyle(colors.color,LinearSRGBColorSpace),\n emissive: new Color().setStyle(colors.emissive,LinearSRGBColorSpace),\n map: t,\n envMap: OSMEnv.preloaded.envMap,\n transparent: true\n });\n \n el.material.onBeforeCompile = (shader) => {\n \n shader.uniforms.groundDensity = {value: ground.fogDensity};\n \n const vertexVarying = 'varying float zFOG;\\n';\n const vertex_position = shader.vertexShader.replace(\n '#include ',\n [\n '#include ',\n 'zFOG = -gl_Position.z;'\n ].join( '\\n' )\n );\n \n shader.vertexShader = vertexVarying + vertex_position;\n \n const fragmentVarying = 'varying float zFOG;\\n uniform float groundDensity;\\n';\n const fragmentMap = shader.fragmentShader.replace(\n '#include ',\n [\n '#include ',\n `gl_FragColor.a = smoothstep(0.5,1.0,exp( -groundDensity * groundDensity * zFOG * zFOG ));`\n ].join( '\\n' )\n );\n \n shader.fragmentShader = fragmentVarying + fragmentMap;\n };\n \n const distance = el.position.distanceTo(zero);\n // el.receiveShadow = !(ground.unshadowDistance && ground.unshadowDistance > distance);\n el.receiveShadow = ground.unshadowDistance ? !(ground.unshadowDistance > distance) : shadowSettings.receiveShadow;\n el.castShadow = shadowSettings.castShadow;\n }\n });\n \n groundGroup.add(geoGroup);\n });\n break;\n case 'tiles':\n const tiles = new TilesTerrain(mapBoxToken,lat,lng);\n const map = tiles.load('MeshStandardMaterial');\n const scale = Math.cos(MathUtils.degToRad(lat));\n groundGroup.scale.set(scale,scale,scale);\n groundGroup.add(map);\n \n break;\n }\n }\n\n intersectHeightFromLatLng(lat,lng) {\n if (groundGroup === null) return 0;\n\n vector.copy(latLngAltToVector3(\n {\n lat: Number(lat),\n lng: Number(lng)\n }\n ,{\n lat: Number(config.localization.latitude),\n lng: Number(config.localization.longitude)\n }\n ));\n\n originRay.set(vector.x, 2000, vector.z);\n directionRay.set(vector.x, -2000, vector.z);\n directionRay.sub(originRay).normalize();\n terrainRaycaster.set(originRay, directionRay);\n\n intersections = terrainRaycaster.intersectObjects(groundGroup.children);\n if (intersections.length) {\n return intersections[0].point.y;\n } else {\n return 0;\n }\n }\n\n intersectHeightFromVector3(vec3) {\n objectsToHeightIntersection = [];\n if (groundGroup && OSMEnv.osm && OSMEnv.osm.parent) {\n objectsToHeightIntersection.push(groundGroup);\n }\n\n if (sceneObjectsGroup.children.length) {\n objectsToHeightIntersection.push(sceneObjectsGroup);\n }\n\n if (threeJsVariables.tilesRenderer) {\n objectsToHeightIntersection.push(threeJsVariables.scene.getObjectByName('async env'));\n }\n\n if (objectsToHeightIntersection.length === 0) return 0;\n\n vector.set(vec3.x,vec3.y,vec3.z);\n originRay.set(vector.x, 2000, vector.z);\n directionRay.set(vector.x, -2000, vector.z);\n directionRay.sub(originRay).normalize();\n terrainRaycaster.set(originRay, directionRay);\n\n intersections = terrainRaycaster.intersectObjects(objectsToHeightIntersection);\n if (intersections.length) {\n return intersections[0].point.y;\n } else {\n return 0;\n }\n }\n\n static applyColorCorrection(colorKey,color) {\n if (groundGroup === null) return;\n\n groundGroup.traverse(el => {\n if (el.isMesh) {\n el.material[colorKey].setStyle(color,LinearSRGBColorSpace);\n }\n })\n }\n\n}\n\nexport class TerrainEnvironment extends EnvironmentLayer{\n static scope = null;\n\n constructor () {\n super('Terrain');\n this.lat = 0;\n this.lng = 0;\n this.material = null;\n this.zoom = 14;\n this.radius = 4000;\n this.fog = 0;\n this.unitsSide = 5650;\n\n this.group.rotation.x = - Math.PI / 2;\n TerrainEnvironment.scope = this;\n }\n\n create(parentGroup) {\n const mapBoxToken = 'pk.eyJ1IjoiYWJkdWxsYWJlc3QiLCJhIjoiY2tvc2RiZGlwMDBmdjJxbXc2cjRlZTRkcCJ9.-P0yGd4LAGQodEj87GKl-w';\n const { ground } = config.features.dayNight.settings;\n const type = ground.type || 'static';\n \n if (parentGroup) {\n groundGroup = new Group();\n groundGroup.name = 'Terrain';\n groundGroup.rotation.x = - Math.PI / 2;\n groundGroup.position.copy(this.group.position);\n const matrix = Environment.getEnvironmentTransformation();\n groundGroup.applyMatrix4(matrix);\n parentGroup.add(groundGroup);\n } else {\n groundGroup = this.group;\n }\n \n let shadowSettings = getShadowParams(threeJsVariables.bundleConfig,'terrain');\n if (!shadowSettings) {\n shadowSettings = {\n castShadow: false,\n receiveShadow: true\n }\n }\n \n switch (type) {\n case 'static':\n const geoEnv = new ThreeGeo({\n tokenMapbox: mapBoxToken,\n unitsSide: this.unitsSide\n });\n \n const terrainEnv = geoEnv.getTerrainRgb([this.lat,this.lng],this.radius,this.zoom);\n terrainEnv.then(geoGroup => {\n const box = new Box3();\n const v = new Vector3();\n const anisotropy = threeJsVariables.renderer.capabilities.getMaxAnisotropy();\n const lut = LUT.getScope('terrain');\n geoGroup.traverse(el => {\n if (el.isMesh) {\n const t = el.material.map;\n t.magFilter = LinearFilter;\n t.minFilter = LinearMipmapLinearFilter;\n t.anisotropy = anisotropy;\n threeJsVariables.renderer.initTexture(t);\n box.setFromObject(el).getCenter(v);\n el.geometry.center();\n el.position.copy(v);\n \n const material = this.material.clone();\n material.map = t;\n el.material = material;\n el.castShadow = shadowSettings.castShadow;\n el.receiveShadow = shadowSettings.receiveShadow;\n \n if (lut) {\n lut.include(material);\n }\n else {\n material.onBeforeCompile = (shader) => {\n this.upgradeShader(shader);\n };\n }\n }\n });\n groundGroup.add(geoGroup);\n });\n break;\n case 'tiles':\n groundGroup.rotation.x = 0;\n const tiles = new TilesTerrain(mapBoxToken,this.lat,this.lng);\n const map = tiles.load(this.material.type);\n const scale = Math.cos(MathUtils.degToRad(this.lat));\n groundGroup.scale.set(scale,scale,scale);\n groundGroup.add(map);\n break;\n }\n }\n \n loadFromBundle (scene, conf) {\n const config = conf[this.id];\n if (!config) return;\n this.settings = config;\n this.create();\n }\n \n show() {\n this.group.visible = true;\n }\n\n hide() {\n this.group.visible = false;\n }\n\n set settings(data) {\n this.lat = data.lat;\n this.lng = data.lng;\n this.group.position.fromArray(data.position);\n this.zoom = data.zoom;\n this.radius = data.radius;\n this.fog = data.fog;\n if (data.unitsSide) {\n this.unitsSide = data.unitsSide;\n }\n const loader = new Loader();\n const textureLoader = loader.textureLoader;\n this.material = prepareMaterial(data.material,textureLoader,data.materialType);\n }\n\n upgradeShader(shader) {\n if (Environment.fromBundle()) return;\n shader.uniforms.groundDensity = {value: this.fog};\n\n const vertexVarying = 'varying float zFOG;\\n';\n const vertex_position = shader.vertexShader.replace(\n '#include ',\n [\n '#include ',\n 'zFOG = -gl_Position.z;'\n ].join( '\\n' )\n );\n\n shader.vertexShader = vertexVarying + vertex_position;\n\n const fragmentVarying = 'varying float zFOG;\\n uniform float groundDensity;\\n';\n const fragmentMap = shader.fragmentShader.replace(\n '#include ',\n [\n '#include ',\n `gl_FragColor.a = smoothstep(0.5,1.0,exp( -groundDensity * groundDensity * zFOG * zFOG ));`\n ].join( '\\n' )\n );\n\n shader.fragmentShader = fragmentVarying + fragmentMap;\n }\n\n static upgradeShader(shader) {\n TerrainEnvironment.scope?.upgradeShader(shader);\n }\n}\n","'use strict';\n\nimport { LODRadial, MapBoxProvider, MapHeightNode, MapNode, MapView, UnitsUtils } from 'geo-three';\nimport { LinearFilter, LinearMipmapLinearFilter, MeshBasicMaterial, MeshStandardMaterial, Texture } from 'three';\nimport { threeJsVariables } from '../../../settings';\nimport { LUT } from '../../post-processing/Passes/LUT';\n\nconst basicMaterial = new MeshBasicMaterial();\nconst standartMaterial = new MeshStandardMaterial();\n\nclass StandartMapHeightNode extends MapHeightNode {\n\tconstructor (parentNode, mapView, location, level, x , y, geometry, material) {\n\t\tsuper(parentNode, mapView, location, level, x, y, geometry, material);\n\t\t\n\t\tthis.material = standartMaterial.clone();\n\t\tconst lut = LUT.getScope('terrain');\n\t\tif (lut) {\n\t\t\tlut.include(this.material);\n\t\t}\n\t\t\n\t}\n}\n\nclass BasicMapHeightNode extends MapHeightNode {\n\tconstructor (parentNode, mapView, location, level, x , y, geometry, material) {\n\t\tsuper(parentNode, mapView, location, level, x, y, geometry, material);\n\t\t\n\t\tthis.material = basicMaterial.clone();\n\t\tconst lut = LUT.getScope('terrain');\n\t\tif (lut) {\n\t\t\tlut.include(this.material);\n\t\t}\n\t}\n}\n\nMapNode.prototype.loadData = function() {\n\treturn __awaiter(this, void 0, void 0, function* () {\n\t\tif (this.level < this.mapView.provider.minZoom || this.level > this.mapView.provider.maxZoom) {\n\t\t\tconsole.warn('Geo-Three: Loading tile outside of provider range.', this);\n\t\t\tthis.material.map = MapNode.defaultTexture;\n\t\t\tthis.material.needsUpdate = true;\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tconst image = yield this.mapView.provider.fetchTile(this.level, this.x, this.y);\n\t\t\tif (this.disposed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst texture = new Texture(image);\n\t\t\ttexture.generateMipmaps = false;\n\t\t\ttexture.magFilter = LinearFilter;\n\t\t\ttexture.minFilter = LinearMipmapLinearFilter;\n\t\t\ttexture.anisotropy = threeJsVariables.renderer.capabilities.getMaxAnisotropy();\n\t\t\ttexture.needsUpdate = true;\n\t\t\tthis.material.map = texture;\n\t\t}\n\t\tcatch (e) {\n\t\t\tif (this.disposed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconsole.warn('Geo-Three: Failed to load node tile data.', this);\n\t\t\tthis.material.map = MapNode.defaultTexture;\n\t\t}\n\t\tthis.material.needsUpdate = true;\n\t});\n};\nMapNode.prototype.nodeReady = function() {\n\tif (this.disposed) {\n\t\t// console.warn('Geo-Three: nodeReady() called for disposed node.', this);\n\t\tthis.dispose();\n\t\treturn;\n\t}\n\tif (this.parentNode !== null) {\n\t\tthis.parentNode.nodesLoaded++;\n\t\tif (this.parentNode.nodesLoaded === MapNode.childrens) {\n\t\t\tif (this.parentNode.subdivided === true) {\n\t\t\t\tthis.parentNode.isMesh = false;\n\t\t\t}\n\t\t\tfor (let i = 0; i < this.parentNode.children.length; i++) {\n\t\t\t\tthis.parentNode.children[i].visible = true;\n\t\t\t}\n\t\t}\n\t\tif (this.parentNode.nodesLoaded > MapNode.childrens) {\n\t\t\tconsole.error('Geo-Three: Loaded more children objects than expected.', this.parentNode.nodesLoaded, this);\n\t\t}\n\t}\n\telse {\n\t\tthis.visible = true;\n\t}\n}\n\nfunction __awaiter(thisArg, _arguments, P, generator) {\n\tfunction adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n\treturn new (P || (P = Promise))(function (resolve, reject) {\n\t\tfunction fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n\t\tfunction rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n\t\tfunction step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n\t\tstep((generator = generator.apply(thisArg, _arguments || [])).next());\n\t});\n}\n\n\nexport class TilesTerrain {\n\tconstructor (token,lat,lng) {\n\t\tthis.token = token;\n\t\tthis.lat = lat;\n\t\tthis.lng = lng;\n\t}\n\t\n\tload(materialType) {\n\t\t\n\t\tswitch (materialType) {\n\t\t\tcase 'MeshStandardMaterial':\n\t\t\t\tMapView.mapModes.set(MapView.HEIGHT,StandartMapHeightNode);\n\t\t\t\tbreak;\n\t\t\tcase 'MeshBasicMaterial':\n\t\t\t\tMapView.mapModes.set(MapView.HEIGHT,BasicMapHeightNode);\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\tconst provider = new MapBoxProvider(this.token, 'mapbox.satellite', MapBoxProvider.MAP_ID, 'jpg70', false);\n\t\tconst heightProvider = new MapBoxProvider(this.token, 'mapbox.terrain-rgb', MapBoxProvider.MAP_ID, 'pngraw');\n\t\tconst map = new MapView(MapView.HEIGHT, provider,heightProvider);\n\t\tmap.material = new MeshBasicMaterial({transparent: true, opacity: 0, depthTest: false});\n\t\tmap.lod = new LODRadial(40,150);\n\t\t\n\t\tconst coords = UnitsUtils.datumsToSpherical(this.lat, this.lng);\n\t\tmap.position.set(-coords.x,0,coords.y);\n\t\t\n\t\treturn map;\n\t}\n\t\n}\n","'use strict';\n\nimport {createHtmlElement, userPrevent} from \"../../../functions\";\nimport {isMobile, settingsData} from \"../../../settings\";\nimport gsap from \"gsap\";\nimport {CardTypes} from \"../../../common\";\nimport {changeLangToCurrent} from \"../langSwitcher/langSwitcher\";\n\nexport class TraverseSwitcher {\n #ANIMATION_DURATION = 0.5;\n\n #buttonsWrapper = null;\n #buttonsWindow = null;\n #plansBoxPreview = null;\n\n constructor(parent = document.querySelector('.options-card__plans-box')) {\n this.element = document.createElement('div');\n this.element.classList.add('traverse-switcher', 'background-backdrop-filter', 'hidden');\n this.element.addEventListener('click', this.controlButtonsHandler.bind(this));\n this.#buttonsWrapper = createHtmlElement(this.element, '', 'div', ['traverse-switcher__buttons-wrapper']);\n this.#buttonsWindow = createHtmlElement(this.#buttonsWrapper, '', 'div', ['traverse-switcher__window']);\n this.floorButtons = createHtmlElement(this.#buttonsWindow, '', 'div', ['traverse-switcher__buttons']);\n if (isMobile)\n this.#addText('floor');\n\n parent.appendChild(this.element);\n\n this.addFloorButtons();\n this.addControlButtons();\n this.setCurrentFloorButtonInFocus();\n this.checkControlButtonsVisibility();\n\n if (this.floorButtons.children.length <= 1)\n this.hide();\n }\n\n set listener(listener) {\n this.element.addEventListener('click', listener);\n }\n\n show() {\n if (this.floorButtons.children.length <= 1 || config.features?.vantage?.hideSwitcher)\n return;\n\n this.element.classList.remove('hidden');\n }\n\n hide() {\n this.element.classList.add('hidden');\n }\n\n setCurrentFloorButtonInFocus() {\n for (let i = 0; i < this.floorButtons.children.length; i++) {\n const currentRange = this.floorButtons.children[i].innerHTML.split('-');\n if (currentRange.length === 1 &&\n parseInt(currentRange[0]) === parseInt(settingsData.currentFloor) ||\n parseInt(currentRange[0]) <= parseInt(settingsData.currentFloor) &&\n parseInt(currentRange[1]) >= parseInt(settingsData.currentFloor)) {\n this.currentActiveButtonIndex = i;\n this.getElementsStyleParams();\n gsap.to(this.floorButtons, {top: (0 - this.buttonsWindowHeight) * i});\n break;\n }\n }\n this.checkControlButtonsVisibility();\n }\n\n #addText(text) {\n const textElement = createHtmlElement(this.element, changeLangToCurrent(text), 'span', ['traverse-switcher__text', 'language-string']);\n textElement.setAttribute('data-dictionary', text);\n }\n\n controlButtonsHandler(event) {\n if (userPrevent()) return;\n\n if (event.target.classList.contains('traverse-switcher__control-button-up')) {\n userPrevent(true);\n this.moveItemsUp();\n } else if (event.target.classList.contains('traverse-switcher__control-button-down')) {\n userPrevent(true);\n this.moveItemsDown();\n } else {\n return;\n }\n\n this.#plansBoxPreview = document.querySelector(`.${CardTypes.Options}-card__plans-box_preview`);\n this.#plansBoxPreview.removeAttribute('style');\n this.#plansBoxPreview.innerHTML = '';\n\n const vantage = createHtmlElement(\n this.#plansBoxPreview,\n '',\n 'iframe',\n [\n `${CardTypes.Options}-card__plans-box_preview-content`,\n 'plan-vantage'\n ]\n );\n vantage.setAttribute('src', this.floorButtons.children[this.currentActiveButtonIndex].getAttribute('vantage-url'));\n\n this.checkControlButtonsVisibility();\n }\n\n moveItemsUp() {\n this.getElementsStyleParams();\n\n this.currentActiveButtonIndex++;\n gsap.to(this.floorButtons,\n {\n top: (this.buttonsTop - this.buttonsWindowHeight),\n duration: this.#ANIMATION_DURATION,\n onComplete: () => { userPrevent(false); }}\n );\n }\n\n moveItemsDown() {\n this.getElementsStyleParams();\n\n this.currentActiveButtonIndex--;\n gsap.to(\n this.floorButtons,\n {\n top: (this.buttonsTop + this.buttonsWindowHeight),\n duration: this.#ANIMATION_DURATION,\n onComplete: () => { userPrevent(false); }}\n );\n }\n\n checkControlButtonsVisibility() {\n if (this.currentActiveButtonIndex === 0) {\n this.#hideElement(this.controlDown);\n }\n\n if (this.currentActiveButtonIndex === this.floorButtons.children.length - 1) {\n this.#hideElement(this.controlUp);\n }\n\n if (this.currentActiveButtonIndex > 0) {\n this.#showElement(this.controlDown);\n }\n\n if (this.currentActiveButtonIndex < this.floorButtons.children.length - 1) {\n this.#showElement(this.controlUp);\n }\n }\n\n #hideElement(element) {\n if (!element) return;\n element.disabled = true;\n element.style.opacity = 0;\n }\n\n #showElement(element) {\n if (!element) return;\n element.disabled = false;\n element.style = '';\n }\n\n getElementsStyleParams() {\n this.buttonsTop = parseFloat(getComputedStyle(this.floorButtons).top);\n this.buttonsHeight = parseFloat(getComputedStyle(this.floorButtons).height);\n this.buttonsWindowHeight = parseFloat(getComputedStyle(this.#buttonsWindow).height);\n }\n\n addFloorButtons() {\n const lastClickedFlatCrmData = settingsData.lastClickedFlat.userData.crm_data;\n const lastClickedFlatVantageYaw =\n parseInt(settingsData.lastClickedFlat.userData.crm_data.assets.vantage.split('yaw=')[1], 10);\n let previousVantage = null;\n let previousButton = null;\n let previousFloorNumber = null;\n let lastFoundFloor = null;\n\n for (let i = 0; i < settingsData.allCrmData.length; i++) {\n if (!settingsData.allCrmData[i].assets.vantage)\n continue;\n\n if (settingsData.allCrmData[i].modelName === lastClickedFlatCrmData.modelName &&\n settingsData.lastClickedFlat.userData.crm_data.buildingEngineId === settingsData.allCrmData[i].buildingEngineId) {\n let previousVantageIndex = null;\n const currentVantageIndex = settingsData.allCrmData[i].assets.vantage.split('media-index=')[1];\n\n const currentVantageYaw =\n parseInt(settingsData.allCrmData[i].assets.vantage.split('yaw=')[1], 10);\n const isCurrentVantageYawNaN = isNaN(currentVantageYaw) && typeof currentVantageYaw !== 'number';\n const isLastClickedFlatVantageYaw = isNaN(lastClickedFlatVantageYaw) && typeof lastClickedFlatVantageYaw !== 'number';\n if (lastClickedFlatVantageYaw !== currentVantageYaw && isCurrentVantageYawNaN !== isLastClickedFlatVantageYaw)\n continue;\n\n if (previousVantage)\n previousVantageIndex = previousVantage.split('media-index=')[1];\n\n if (previousVantageIndex === currentVantageIndex) {\n lastFoundFloor = previousFloorNumber = settingsData.allCrmData[i].floorNum;\n continue;\n }\n\n previousVantage = settingsData.allCrmData[i].assets.vantage;\n if (previousButton && previousFloorNumber && parseInt(previousButton.innerHTML) !== parseInt(previousFloorNumber))\n previousButton.innerHTML = `${previousButton.innerHTML}-${previousFloorNumber}`;\n\n if (previousButton && (parseInt(previousButton.innerHTML.split('-')[1]) === parseInt(previousFloorNumber)))\n previousFloorNumber = null;\n\n if (parseInt(previousButton?.innerHTML, 10) === parseInt(settingsData.allCrmData[i].floorNum, 10))\n continue;\n\n const button = createHtmlElement(\n this.floorButtons,\n settingsData.allCrmData[i].floorNum,\n 'div',\n ['traverse-switcher__position']\n );\n button.setAttribute('vantage-url', settingsData.allCrmData[i].assets.vantage);\n\n previousButton = button;\n }\n }\n\n if(!previousButton)\n return;\n\n if (parseInt(previousButton.innerHTML.split('-')[0]) < parseInt(lastFoundFloor)) {\n if (lastFoundFloor)\n previousButton.innerHTML = `${previousButton.innerHTML}-${lastFoundFloor}`\n }\n }\n\n addControlButtons() {\n if (this.floorButtons.children.length <= 1)\n return;\n\n this.controlUp = createHtmlElement(this.element, '', 'button', ['traverse-switcher__control-button', 'traverse-switcher__control-button-up', 'traverse-switcher__button', 'icon-up2']);\n this.controlDown = createHtmlElement(this.element, '', 'button', ['traverse-switcher__control-button', 'traverse-switcher__control-button-down', 'traverse-switcher__button', 'icon-down2']);\n }\n}","'use strict';\n\nimport { BaseElement } from \"../interfaces/BaseElement\";\nimport gsap from 'gsap';\nimport {setLordIcon} from \"../../lordicon\";\nimport {isDesktop, isMobile, settingsData} from \"../../settings\";\nimport {asideHandler, getActiveMenuData} from \"../menu/menu\";\nimport {changeLangToCurrent, getCurrentLangDirection} from \"./langSwitcher/langSwitcher\";\nimport {lockScreenOrientation} from \"../../functions\";\nimport {BmbyMode} from \"../mode/BmbyMode\";\nimport { ViewMode } from \"../../common\";\n\nexport class VideoPopUp extends BaseElement {\n static #root;\n #active = false;\n #obsticleRect = {\n width: 0,\n height: 0\n };\n targetElement = isMobile\n ? document.querySelector('.additional-menu__item[data-menu-item=\"More\"]')\n : isDesktop\n ? document.querySelector('.aside__navigation_list .aside__navigation-menu__item[data-menu-item=\"documents\"]')\n : document.querySelector('.aside__navigation_list .aside__navigation-menu__item[data-menu-item=\"gallery\"]');\n #key = 'playBouncy';\n #dictKey = 'Video';\n\n constructor() {\n super();\n\n if (!config.features?.videoPopUp?.active || BmbyMode.active) {\n return;\n }\n this.#active = true;\n\n VideoPopUp.#root = this;\n this.#createVideoPopUp();\n this.#createVideoMenuItem();\n this.#addMenuResizeCallback();\n\n if (!config.features?.videoPopUp?.type) {\n config.features.videoPopUp.type = 'popup';\n }\n\n if (config.features?.videoPopUp?.type && config.features.videoPopUp.type !== 'menu' && !isMobile) {\n setTimeout(() => {\n this.#clickHandler();\n lockScreenOrientation();\n }, config.features.videoPopUp.delay * 1000);\n }\n\n return this;\n }\n\n static isOpen() {\n const videoPopUpElement = document.querySelector('.video-pop-up');\n if (!videoPopUpElement || !VideoPopUp.#root)\n return false;\n return VideoPopUp.#root.getAttribute('state') === 'expanded' ? true : false;\n }\n\n static close() {\n if (VideoPopUp.isOpen()) {\n VideoPopUp.#root.#clickHandler();\n }\n }\n\n static open() {\n if (!VideoPopUp.#root) {\n new VideoPopUp();\n }else if (!VideoPopUp.isOpen()) {\n VideoPopUp.#root.#clickHandler();\n }\n }\n\n static shrink() {\n if (VideoPopUp.#root.getAttribute('state') === 'expanded' && VideoPopUp.#root.getAttribute('type') === 'popup' && !isMobile) {\n VideoPopUp.#root.#clickResizeHandler();\n }\n }\n\n static isPlaying() {\n const video = VideoPopUp.getVideoElement();\n if (!video)\n return false;\n const isIframe = video.tagName === 'IFRAME';\n if (isIframe) {\n // let answer;\n\n // const messageReceiveCallback = (event) => {\n // console.log('MESSAGE RECEIVED');\n // console.log(event);\n // answer = 0;\n // if (event.origin !== 'https://www.youtube.com') return;\n // const data = JSON.parse(event.data);\n // if (data.event === 'infoDelivery' && data.info && data.info.playerState !== undefined) {\n // answer = data.info.playerState === 1;\n // }\n // window.removeListener('message', messageReceiveCallback);\n // };\n\n // window.addEventListener('message', messageReceiveCallback);\n\n // video.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"getPlayerState\",\"args\":\"\"}', '*');\n\n // const interval = setInterval(() => {\n // if (answer !== undefined) {\n // clearInterval(interval);\n // console.log(answer);\n // return answer;\n // }\n // console.log('waiting');\n // }, 250);\n return true;\n } else {\n return !video.paused;\n }\n }\n\n static isActive() {\n if (!VideoPopUp.#root) {\n return false;\n }\n return VideoPopUp.#root.#active;\n }\n\n #resizeCallback = (entries) => {\n // const entry = entries[0];\n const menu = document.querySelector('.aside__container');\n const search = document.querySelector('.search__container-main');\n const menuBounds = menu.getBoundingClientRect();\n const searchBounds = search?.getBoundingClientRect();\n const currentDirection = getCurrentLangDirection();\n let menuWidth = currentDirection === 'ltr'\n ? menuBounds.right\n : window.innerWidth - menuBounds.left;\n let searchWidth = currentDirection === 'ltr'\n ? searchBounds?.right || 0\n : window.innerWidth - searchBounds?.left || 0;\n const activeMenu = getActiveMenuData();\n if (activeMenu !== '3dModel' && activeMenu !== 'search') {\n searchWidth = 0;\n }\n this.#obsticleRect.width = Math.max(menuWidth, searchWidth);\n this.#obsticleRect.height = activeMenu === 'search' ? getComputedStyle(this.DOMElement).getPropertyValue('--bottom-offset-in-search').split('px')[0] : 0;\n this.DOMElement.style.setProperty('--obstacle-width', this.#obsticleRect.width + 'px');\n this.DOMElement.style.setProperty('--obstacle-height', this.#obsticleRect.height + 'px');\n }\n\n static updateObsticleSize() {\n if (VideoPopUp.isActive()) {\n VideoPopUp.#root.#resizeCallback();\n }\n }\n\n static addSearchResizeCallback(search) {\n if (!VideoPopUp.#root || isMobile || isDesktop) {\n return;\n }\n const observer = new ResizeObserver(this.#root.#resizeCallback);\n observer.observe(search);\n }\n \n #addMenuResizeCallback() {\n if (isMobile || isDesktop) {\n return;\n }\n const menu = document.querySelector('.aside__container');\n const observer = new ResizeObserver(this.#resizeCallback);\n observer.observe(menu);\n }\n\n static getVideoElement() {\n return VideoPopUp.#root?.DOMElement.querySelector('.video-pop-up__video');\n }\n\n #createVideoPopUp() {\n this.addClass('video-pop-up')\n .appendTo(document.body);\n\n const wrapper = new BaseElement()\n .addClass('video-pop-up__wrapper', 'hidden')\n .appendTo(this.DOMElement);\n \n let closeButton;\n\n if (isMobile) {\n this\n .addClass('background-backdrop-filter')\n .addAttribute('type', 'popup')\n .addAttribute('state', 'expanded');\n wrapper.removeClass('hidden');\n \n closeButton = new BaseElement('button')\n .addClass('close-button-cross', 'video-pop-up__close-button', 'hidden')\n .event('click', this.#clickHandler.bind(this))\n .appendTo(wrapper.DOMElement);\n }else {\n this\n .addAttribute('type', config.features.videoPopUp.type !== 'shrinked' ? 'popup' : 'shrinked')\n .addAttribute('state', 'collapsed');\n \n const titleBar = new BaseElement()\n .addClass('video-pop-up__title-bar', 'background-backdrop-filter')\n .appendTo(wrapper.DOMElement);\n\n new BaseElement('button')\n .addClass(this.getAttribute('type') === 'shrinked' ? 'icon-fullscreen-arrows' : 'icon-fullscreen-arrows-2')\n .addClass('video-pop-up__resize-button')\n .event('click', this.#clickResizeHandler.bind(this))\n .appendTo(titleBar.DOMElement);\n\n new BaseElement('button')\n .addClass('icon-close', 'video-pop-up__close-button')\n .event('click', this.#clickHandler.bind(this))\n .appendTo(titleBar.DOMElement);\n }\n\n if (config.features?.videoPopUp?.url.indexOf('youtube') > -1) {\n new BaseElement('iframe')\n .addClass('video-pop-up__video')\n .event('ended', this.#clickHandler.bind(this))\n .event('load', () => closeButton?.removeClass('hidden'))\n .setAttributes({\n 'src': config.features?.videoPopUp?.url + '?enablejsapi=1',\n 'allowFullScreen': true,\n 'autoplay': true,\n 'frameBorder': '0',\n 'allow': \"encrypted-media; gyroscope\"\n })\n .appendTo(wrapper.DOMElement);\n } else {\n const video = new BaseElement('video')\n .addClass('video-pop-up__video')\n .event('ended', this.#clickHandler.bind(this))\n .event('load', () => closeButton?.removeClass('hidden'))\n .setAttributes({\n 'controls': true,\n 'autoplay': true\n })\n .appendTo(wrapper.DOMElement);\n new BaseElement('source')\n .addAttribute('src', config.features?.videoPopUp?.url)\n .appendTo(video.DOMElement);\n video.DOMElement.muted = 'muted';\n }\n }\n\n #createVideoMenuItem() {\n if (isMobile) {\n const navList = document.querySelector('.aside__navigation_list');\n const menuElements = [...navList.querySelectorAll('.aside__navigation-menu__item')];\n menuElements.forEach(element => { element.classList.add('horizontal-separator') });\n\n const videoMinimizedElement = new BaseElement('li')\n .addClass('aside__navigation-menu__item', 'mobile-menu-item')\n .event('click', this.#clickHandler.bind(this))\n .appendTo(navList);\n new BaseElement('span')\n .addClass('aside__navigation-menu__text', 'language-string', 'text', 'body')\n .addAttribute('data-dictionary', this.#dictKey)\n .innerHtml(changeLangToCurrent(this.#dictKey))\n .appendTo(videoMinimizedElement.DOMElement);\n const iconElement = new BaseElement('span')\n .addClass('aside__navigation-menu__icon')\n .appendTo(videoMinimizedElement.DOMElement)\n setLordIcon('playBouncy', iconElement.DOMElement, {trigger: 'hover',delay:'0'});\n return;\n }else {\n const menuItem = new BaseElement('li')\n .addClass('aside__navigation-menu__item');\n this.targetElement.after(menuItem.DOMElement);\n this.targetElement = menuItem.DOMElement;\n\n new BaseElement('span')\n .addClass('aside__navigation-menu__text', 'language-string', 'text', 'body')\n .innerHtml(changeLangToCurrent(this.#dictKey))\n .setAttributes({\n 'data-dictionary': this.#dictKey,\n 'data-menu-item': this.#key\n })\n .appendTo(menuItem.DOMElement);\n\n menuItem.addAttribute('data-menu-item', this.#key);\n\n const icon = new BaseElement('span')\n .addClass('aside__navigation-menu__icon')\n .appendTo(menuItem.DOMElement);\n setLordIcon('playBouncy', menuItem.DOMElement, {trigger: 'hover', delay: '0'});\n }\n }\n\n #clickHandler(e) {\n let videoPopUpElement = document.querySelector('.video-pop-up');\n if (!videoPopUpElement) {\n videoPopUpElement = this.DOMElement;\n }\n if (isMobile) {\n asideHandler();\n }\n if (e) {\n e.stopPropagation();\n }\n\n const videoPopUpWrapper = videoPopUpElement.querySelector('.video-pop-up__wrapper');\n const videoPopUpState = videoPopUpElement.getAttribute('state');\n const video = videoPopUpElement.querySelector('.video-pop-up__video');\n const isIframe = video.tagName === 'IFRAME';\n const duration = isMobile && videoPopUpState === 'collapsed' ? 0 : 0.5;\n const bounds = this.targetElement.getBoundingClientRect();\n const targetTopPosition = bounds.top + bounds.height / 2;\n const targetLeftPosition = bounds.left + bounds.width / 2;\n\n switch(videoPopUpState) {\n case 'expanded':\n gsap.to(videoPopUpElement, {\n duration,\n top: targetTopPosition,\n left: targetLeftPosition,\n scale: 0,\n onStart: () => {\n if (isIframe) {\n video.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n } else {\n video.pause();\n video.webkitExitFullscreen();\n }\n },\n onUpdate: () => {\n const progress = gsap.getProperty(videoPopUpElement, 'scale');\n videoPopUpElement.style.transform = `translate(-50%, -50%) scale(${progress})`;\n },\n onComplete: () => {\n videoPopUpElement.setAttribute('state', 'collapsed');\n videoPopUpWrapper.classList.add('hidden');\n lockScreenOrientation();\n }\n });\n break;\n case 'collapsed':\n const dummyElement = new BaseElement()\n .addClass('video-pop-up')\n .addAttribute('type', config.features.videoPopUp.type !== 'shrinked' ? 'popup' : 'shrinked')\n .addAttribute('state', 'expanded')\n .addAttribute('style', `--obstacle-width: ${this.#obsticleRect.width}px; --obstacle-height: ${this.#obsticleRect.height}px;`)\n .appendTo(document.body);\n const dummyBounds = dummyElement.DOMElement.getBoundingClientRect();\n const newTargetTopPosition = dummyBounds.top + dummyBounds.height / 2;\n const newTargetLeftPosition = dummyBounds.left + dummyBounds.width / 2;\n dummyElement.remove();\n videoPopUpElement.style.top = targetTopPosition + 'px';\n videoPopUpElement.style.left = targetLeftPosition + 'px';\n videoPopUpElement.style.transform = 'translate(-50%, -50%) scale(0)';\n videoPopUpElement.setAttribute('type', config.features.videoPopUp.type !== 'shrinked' ? 'popup' : 'shrinked');\n if (isMobile) {\n videoPopUpElement.setAttribute('type', 'popup');\n }\n videoPopUpWrapper.classList.remove('hidden');\n gsap.to(videoPopUpElement, {\n duration: duration * 0.5,\n top: newTargetTopPosition,\n left: newTargetLeftPosition,\n scale: 1,\n onStart: () => {\n const resizeBtn = videoPopUpElement.querySelector('.video-pop-up__resize-button');\n resizeBtn?.classList.remove('icon-fullscreen-arrows');\n resizeBtn?.classList.remove('icon-fullscreen-arrows-2');\n resizeBtn?.classList.add(config.features.videoPopUp.type !== 'shrinked' ? 'icon-fullscreen-arrows-2' : 'icon-fullscreen-arrows');\n },\n onComplete: () => {\n videoPopUpElement.setAttribute('state', 'expanded');\n videoPopUpElement.setAttribute('style', '');\n this.#resizeCallback();\n }\n });\n }\n }\n\n #clickResizeHandler() {\n const videoPopUpElement = document.querySelector('.video-pop-up');\n if (!videoPopUpElement)\n return;\n\n const videoPopUpType = videoPopUpElement.getAttribute('type');\n const videoPopUpResize = videoPopUpElement.querySelector('.video-pop-up__resize-button');\n const duration = 0.25;\n\n const dummyElement = new BaseElement()\n .addClass('video-pop-up')\n .addAttribute('type', videoPopUpType === 'shrinked' ? 'popup' : 'shrinked')\n .addAttribute('state', 'expanded')\n .addAttribute('style', `--obstacle-width: ${this.#obsticleRect.width}px; --obstacle-height: ${this.#obsticleRect.height}px;`)\n .appendTo(document.body);\n const dummyBounds = dummyElement.DOMElement.getBoundingClientRect();\n const targetTopPosition = dummyBounds.top + dummyBounds.height / 2;\n const targetLeftPosition = dummyBounds.left + dummyBounds.width / 2;\n const targetWidth = dummyBounds.width;\n const targetHeight = dummyBounds.height;\n dummyElement.remove();\n \n switch(videoPopUpType) {\n case 'popup':\n gsap.to(videoPopUpElement, {\n duration,\n width: targetWidth,\n height: targetHeight,\n top: targetTopPosition,\n left: targetLeftPosition,\n onComplete: () => {\n videoPopUpElement.setAttribute('type', 'shrinked');\n videoPopUpResize.classList.remove('icon-fullscreen-arrows-2');\n videoPopUpResize.classList.add('icon-fullscreen-arrows');\n videoPopUpElement.setAttribute('style', '');\n this.#resizeCallback();\n }\n });\n break;\n case 'shrinked':\n gsap.to(videoPopUpElement, {\n duration,\n width: targetWidth,\n height: targetHeight,\n top: targetTopPosition,\n left: targetLeftPosition,\n onStart: () => {\n const currentBounds = videoPopUpElement.getBoundingClientRect();\n const currentTopPosition = currentBounds.top + currentBounds.height / 2;\n const currentLeftPosition = currentBounds.left + currentBounds.width / 2;\n videoPopUpElement.style.top = currentTopPosition + 'px';\n videoPopUpElement.style.left = currentLeftPosition + 'px';\n },\n onComplete: () => {\n videoPopUpElement.setAttribute('type', 'popup');\n videoPopUpResize.classList.remove('icon-fullscreen-arrows');\n videoPopUpResize.classList.add('icon-fullscreen-arrows-2');\n videoPopUpElement.setAttribute('style', '');\n }\n });\n break;\n }\n }\n}\n","'use strict';\n\nimport {changeLangToCurrent} from \"../langSwitcher/langSwitcher\";\nimport {isDesktop, isMobile, settingsData} from \"../../../settings\";\nimport {\n changePlaceholder, customiseForm,\n moveFormToBlock,\n setPropId,\n setTranslateToCheckbox,\n setTranslateToSendBtn,\n} from '../form/form';\nimport { contactToAgentWithWidget } from '../chats/chats';\n\nfunction creatHtmlElement(parent, elementName, elementTag, elementClass) {\n const el = document.createElement(elementTag);\n\n if (Array.isArray(elementClass)) {\n elementClass.forEach(classElement => {\n el.classList.add(classElement);\n });\n } else {\n el.style.cssText = elementClass;\n }\n el.textContent = elementName;\n if (parent)\n parent.appendChild(el);\n\n return el;\n}\n\nexport function chatsApplyNow(parent, contentObject) {\n const isiOS = iOS();\n // const phoneNumberUse = ['sms','call'];\n\n const mainContainer = creatHtmlElement(parent, '', 'div', ['apply__main-container','chats','hidden']);\n const contentWrapper = creatHtmlElement(mainContainer, '', 'div', ['apply__content__wrapper']);\n const titleContainer = creatHtmlElement(contentWrapper, '', 'div', ['apply__title-container']);\n const title = creatHtmlElement(titleContainer, `${changeLangToCurrent('leadFormTitle')}`, 'h2', ['apply__title', 'language-string']);\n title.dataset.dictionary = 'leadFormTitle';\n const span = creatHtmlElement(titleContainer, changeLangToCurrent(contentObject.subTitle.text), 'span', ['apply__sub-title', 'language-string']);\n span.dataset.dictionary = contentObject.subTitle.dic;\n //Icons\n const socialIcons = creatHtmlElement(contentWrapper, '', 'ul', ['apply__social-icons']);\n\n if (config.communications?.length === 0)\n return mainContainer;\n\n contentObject.channelsConfig.forEach(channel => {\n const isActive = config.communications?.find(channelConf => channelConf.type === channel.name)?.active;\n if (!isActive)\n return;\n\n if (!isiOS && channel.name === \"facetime\")\n return;\n\n const currentPrefix = channel.prefix;\n let currentHref = config.communications.find(channelConf => channelConf.type === channel.name).value;\n\n /* Remove '+' from whatsapp number */\n if (channel.name === 'whatsapp' && currentHref)\n currentHref = currentHref.replace('+','');\n\n const socialIconItem = creatHtmlElement(socialIcons, '', 'li', ['apply__social-icon__item']);\n const href = creatHtmlElement(socialIconItem, '', 'a', ['apply__social-href']);\n href.href = currentPrefix + currentHref;\n (channel.target) ? href.setAttribute('target', channel.target) : '';\n const socialImg = creatHtmlElement(href, '', 'span', ['custom-icon', channel.icon]);\n socialImg.src = `src/img/social-icons/${channel.name.toLowerCase()}.svg`;\n socialImg.alt = changeLangToCurrent(channel.name);\n const socialIconText = creatHtmlElement(href, changeLangToCurrent(channel.dic), 'span', ['apply__social-icon__text', 'language-string']);\n socialIconText.dataset.name = channel.name;\n socialIconText.dataset.dictionary = channel.dic;\n });\n\n return mainContainer;\n}\n\nexport async function applyNow(parent, contentObject, useSubstrate = true, hideElementsArr = [], object) {\n const isSafari = navigator.vendor && navigator.vendor.indexOf('Apple') > -1;\n const isiOS = iOS();\n\n if (document.querySelector('.apply__main-container__outer'))\n return;\n\n if (config.contactWidget.active) {\n contactToAgentWithWidget(object);\n return;\n }\n\n let mainContainerOuter;\n let mainContainer;\n\n if (useSubstrate) {\n mainContainerOuter = creatHtmlElement(parent, '', 'div', ['apply__main-container__outer', 'non-canvas']);\n mainContainer = creatHtmlElement(mainContainerOuter, '', 'div', ['apply__main-container', 'non-canvas']);\n } else {\n mainContainer = creatHtmlElement(parent, '', 'div', ['apply__main-container']);\n }\n\n !isMobile && setWidthOfApplyNow();\n\n const contentWrapper = creatHtmlElement(mainContainer, '', 'div', ['apply__content__wrapper']);\n const closeBtn = creatHtmlElement(mainContainer, '', 'div', ['apply-btn__close', 'icon-close']);\n closeBtn.setAttribute('id', 'applyCloseBtn');\n const titleContainer = creatHtmlElement(contentWrapper, '', 'div', ['apply__title-container']);\n const title = creatHtmlElement(titleContainer, `${changeLangToCurrent(contentObject.title.text)}`, 'h2', ['apply__title', 'language-string']);\n title.dataset.dictionary = contentObject.title.dic;\n const span = creatHtmlElement(titleContainer, changeLangToCurrent(contentObject.subTitle.text), 'span', ['apply__sub-title', 'language-string']);\n span.dataset.dictionary = contentObject.subTitle.dic;\n //Icons\n const socialIcons = creatHtmlElement(contentWrapper, '', 'ul', ['apply__social-icons']);\n contentObject.channelsConfig.forEach(channel => {\n\n if (config.features.applyNow.channels.length === 0)\n return;\n\n const isActive = config.features.applyNow.channels.find(channelConf => channelConf.type === channel.name)?.active;\n if (!isActive)\n return;\n\n if (!isiOS && channel.name === \"facetime\")\n return;\n\n const currentPrefix = channel.prefix;\n const currentHref = config.features.applyNow.channels.find(channelConf => channelConf.type === channel.name).href;\n const socialIconItem = creatHtmlElement(socialIcons, '', 'li', ['apply__social-icon__item']);\n const href = creatHtmlElement(socialIconItem, '', 'a', ['apply__social-href']);\n href.href = currentPrefix + currentHref;\n (channel.target) ? href.setAttribute('target', channel.target) : '';\n const socialImg = creatHtmlElement(href, '', 'span', ['custom-icon', channel.icon]);\n socialImg.src = `src/img/social-icons/${channel.name.toLowerCase()}.svg`;\n socialImg.alt = changeLangToCurrent(channel.name);\n const socialIconText = creatHtmlElement(href, changeLangToCurrent(channel.dic), 'span', ['apply__social-icon__text', 'language-string']);\n socialIconText.dataset.name = channel.name;\n socialIconText.dataset.dictionary = channel.dic;\n });\n\n hideElements(hideElementsArr);\n\n closeBtn.addEventListener('click', () => {\n closeBtnHandler();\n showElements(hideElementsArr);\n });\n // ADD Form\n if (config.general.leadForm || settingsData.isConferenceHost) {\n const form = document.querySelector('.form__container-main');\n moveFormToBlock(contentWrapper);\n customiseForm(form);\n setTranslateToSendBtn(form);\n changePlaceholder(form);\n setPropId(contentWrapper, object);\n setTranslateToCheckbox(form);\n }\n\n if (isSafari && isMobile)\n contentWrapper.style.marginTop = '62px';\n}\n\nexport const setWidthOfApplyNow = () => {\n const applyContainer = document.querySelector('.apply__main-container:not(.chats)');\n\n if (!applyContainer || isMobile)\n return;\n\n const menuWidth = document.querySelector('.aside__container').getAttribute('data-initial-width');\n let width = window.innerWidth - menuWidth;\n const rtl = document.querySelector('html').getAttribute('dir') === 'rtl';\n applyContainer.style.width = `${width}px`;\n\n if (isDesktop) {\n applyContainer.style.right = `${menuWidth}px`;\n applyContainer.style.left = `initial`;\n } else {\n if (rtl) {\n applyContainer.style.right = `${menuWidth}px`;\n applyContainer.style.left = `initial`;\n } else {\n applyContainer.style.right = `initial`;\n applyContainer.style.left = `${menuWidth}px`;\n }\n }\n}\n\nfunction hideElements(hideArray) {\n if (hideArray.length > 0) {\n hideArray.forEach(element => {\n const domElement = document.querySelector(`.${element}`);\n if (domElement) {\n domElement.style.display = 'none';\n }\n });\n }\n}\n\nfunction showElements(elementsArr) {\n if (elementsArr.length > 0) {\n elementsArr.forEach(element => {\n const domElement = document.querySelector(`.${element}`);\n if (domElement) {\n domElement.style.removeProperty('display');\n }\n });\n }\n}\n\nexport function closeBtnHandler() {\n const applyContainer = document.querySelector('.apply__main-container:not(.chats)');\n const applyContainerOuter = document.querySelector('.apply__main-container__outer');\n\n moveFormToBlock();\n\n if (applyContainerOuter) {\n applyContainerOuter.remove();\n applyContainer.remove();\n } else {\n const applyContainer = document.querySelector('.apply__main-container:not(.chats)');\n applyContainer.remove();\n }\n}\n\nfunction iOS() {\n return [\n 'iPad Simulator',\n 'iPhone Simulator',\n 'iPod Simulator',\n 'iPad',\n 'iPhone',\n 'iPod',\n 'MacIntel',\n ].includes(navigator.platform)\n // iPad on iOS 13 detection\n || (navigator.userAgent.includes(\"Mac\") && \"ontouchend\" in document)\n}","export const applyNowContent ={\n title: {\n text: 'Get in touch today',\n dic: 'Get in touch today',\n },\n subTitle: {\n text: 'Our customer service representatives are happy to help 24/7',\n dic: 'Our customer service',\n },\n channelsConfig: [\n {\n name: 'messenger',\n prefix: \"https://m.me/\",\n icon: 'icon-facebook-messenger',\n target: '_blank',\n dic: 'Messenger',\n },\n {\n name: 'whatsapp',\n prefix: \"https://wa.me/\",\n icon: 'icon-whatsapp',\n target: '_blank',\n dic: 'Whatsapp',\n },\n {\n name: 'sms',\n prefix: \"sms:\",\n icon: 'icon-chat',\n dic: 'SMS',\n },\n {\n name: 'call',\n prefix: \"tel:\",\n icon: 'icon-call',\n dic: 'Call'\n },\n {\n name: 'facetime',\n prefix: 'facetime://',\n icon: 'icon-video-call',\n dic: 'Facetime'\n },\n {\n name: 'email',\n prefix: \"mailto:\",\n icon: 'icon-email',\n dic: 'Email',\n },\n {\n name: 'appointment',\n prefix: \"\",\n icon: 'icon-meeting',\n dic: 'Appointment'\n },\n ]\n};","'use strict';\n\nimport { Box3, Color, DoubleSide, Group, LinearSRGBColorSpace, Mesh, ShaderMaterial, Vector3 } from 'three';\nimport { assignDeep, Buildings, settingsData, threeJsVariables } from '../../../settings';\nimport { BaseElement } from '../../interfaces/BaseElement';\nimport { UnitCardClass } from '../../cards/unitCards/UnitCardClass';\nimport { findSelectionAndCrmData, flatClick } from '../../../functions';\nimport { hoverOutPreviousSelection, selectionBoxesSetStatusColor } from '../../threejs/raycast';\nimport { getBuildingLabel } from './buildingLabels';\nimport { changeLangToCurrent, getCurrentLang } from '../langSwitcher/langSwitcher';\nimport { Price } from '../../cards/Price';\nimport { CSS2DObject } from '../../../libs/CSS2DRenderer';\nimport { markSelectedApartments } from '../../menu/search/search';\n\nconst DEFAULT_PARAMS = {\n\tfields: {\n\t\tname: true,\n\t\ttype: false,\n\t\tprice: false\n\t},\n\tshowSold: true\n};\n\nexport class CylinderBuildingLabels {\n\tconstructor () {\n\t\tthis.group = null;\n\t\tthis.params = assignDeep(DEFAULT_PARAMS,config.threejs.label.cylinder || {});\n\t\tthis.color = new Color();\n\t\tthis.activeLabel = null;\n\t}\n\t\n\tcreate() {\n\t\tif (!config.features.privateHouseMode) return;\n\t\t\n\t\tif (!this.group) {\n\t\t\tthis.group = new Group();\n\t\t\tthis.group.name = 'CylinderLabels';\n\t\t\t// const buildings = Buildings.getBuildingsArray().filter(building => building.info.availableApartments > 0);\n\t\t\tconst buildings = Buildings.getBuildingsArray();\n\t\t\tbuildings.forEach(building => this.#buildLabel(building));\n\t\t}\n\t\t\n\t\tthis.translateLabels();\n\t\t\n\t\tthreeJsVariables.scene.add(this.group);\n\t}\n\t\n\t#buildLabel(building) {\n\t\tif (building.info.availableApartments === 0 && !this.params.showSold)\n\t\t\treturn;\n\t\t\n\t\tconst box = new Box3();\n\t\tconst size = new Vector3();\n\t\tconst center = new Vector3();\n\t\tbox.setFromObject(building.selectionsGroup);\n\t\tbox.getCenter(center);\n\t\tbox.getSize(size);\n\t\t\n\t\tconst container = new BaseElement()\n\t\t\t.addClass('cylinder-building-label')\n\t\t\t.event('click',() => {\n\t\t\t\thoverOutPreviousSelection(UnitCardClass.findCard()?.html);\n\t\t\t\tif (settingsData.buildingDestroyed)\n\t\t\t\t\tselectionBoxesSetStatusColor(building.apartments[0], 'lock');\n\t\t\t\t\n\t\t\t\tselectionBoxesSetStatusColor(building.apartments[0], 'click');\n\t\t\t\tflatClick(building.apartments[0]);\n\t\t\t})\n\t\t\t.DOMElement;\n\t\t\n\t\tconst wrapper = new BaseElement()\n\t\t\t.addClass('cylinder-building-label__wrapper')\n\t\t\t.appendTo(container)\n\t\t\t.DOMElement;\n\t\t\n\t\tnew BaseElement()\n\t\t\t.addClass('cylinder-building-label__bubble')\n\t\t\t.appendTo(wrapper)\n\t\t\t// .innerHtml(getBuildingLabel());\n\t\t\n\t\tconst content = new BaseElement()\n\t\t\t.addClass('cylinder-building-label__content')\n\t\t\t.appendTo(wrapper)\n\t\t\t.DOMElement;\n\t\t\n\t\tnew BaseElement()\n\t\t\t.addClass('cylinder-building-label__arrow')\n\t\t\t.appendTo(content);\n\t\t\n\t\tlet isSold;\n\t\t\n\t\tif (building.info.availableApartments > 0) {\n\t\t\tObject.entries(this.params.fields).forEach(([key,value]) => {\n\t\t\t\tif (value) {\n\t\t\t\t\tswitch (key) {\n\t\t\t\t\t\tcase 'name':\n\t\t\t\t\t\t\tconst names = building.info.towerName;\n\t\t\t\t\t\t\tif (names && Array.isArray(names) && names.length) {\n\t\t\t\t\t\t\t\tconst nameContainer = new BaseElement('span')\n\t\t\t\t\t\t\t\t\t.addClass('cylinder-building-label__item','icon-home2')\n\t\t\t\t\t\t\t\t\t.appendTo(content)\n\t\t\t\t\t\t\t\t\t.DOMElement;\n\t\t\t\t\t\t\t\tlet current = names.find(data => data.lang === getCurrentLang());\n\t\t\t\t\t\t\t\tif (!current) {\n\t\t\t\t\t\t\t\t\tcurrent = names.find(data => data.lang === 'en');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst name = new BaseElement('span')\n\t\t\t\t\t\t\t\t\t.addClass('cylinder-building-label__text','language-string')\n\t\t\t\t\t\t\t\t\t.addAttribute('data-key',key)\n\t\t\t\t\t\t\t\t\t.innerHtml(current.value)\n\t\t\t\t\t\t\t\t\t.appendTo(nameContainer);\n\t\t\t\t\t\t\t\tnames.forEach(data => name.addAttribute(`data-lang-${data.lang}`,data.value));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'price':\n\t\t\t\t\t\t\tconst priceBlock = new BaseElement('span')\n\t\t\t\t\t\t\t\t.addClass('cylinder-building-label__item')\n\t\t\t\t\t\t\t\t.addAttribute('data-key',key)\n\t\t\t\t\t\t\t\t.appendTo(content)\n\t\t\t\t\t\t\t\t.DOMElement;\n\t\t\t\t\t\t\tnew Price()\n\t\t\t\t\t\t\t\t.addBlock(priceBlock)\n\t\t\t\t\t\t\t\t.setPrice(building.info.crm_data[0]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'type':\n\t\t\t\t\t\t\tconst type = new BaseElement('span')\n\t\t\t\t\t\t\t\t.addClass('cylinder-building-label__item','icon-plan-type')\n\t\t\t\t\t\t\t\t.addAttribute('data-key',key)\n\t\t\t\t\t\t\t\t.appendTo(content)\n\t\t\t\t\t\t\t\t.DOMElement;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tnew BaseElement('span')\n\t\t\t\t\t\t\t\t.addClass('cylinder-building-label__item-text')\n\t\t\t\t\t\t\t\t.innerHtml(building.info.crm_data[0].modelName)\n\t\t\t\t\t\t\t\t.appendTo(type);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tisSold = false;\n\t\t} else {\n\t\t\tisSold = true;\n\t\t\tconst color = config.resources.bundle.selectionBoxes.colorStatus.find(color => color.status === building.info.crm_data[0].status.toLowerCase());\n\t\t\tconst bgColor = '#' + this.color.setStyle(`#${color.basic}`,LinearSRGBColorSpace).convertLinearToSRGB().getHexString();\n\t\t\tconst bgElement = container.querySelector('.cylinder-building-label__bubble');\n\t\t\tconst arrow = container.querySelector('.cylinder-building-label__arrow');\n\t\t\tbgElement.style.background = bgColor;\n\t\t\tarrow.style.background = bgColor;\n\t\t\t\n\t\t\tconst item = new BaseElement('span')\n\t\t\t\t.addClass('cylinder-building-label__item')\n\t\t\t\t.appendTo(content)\n\t\t\t\t.DOMElement;\n\t\t\t\n\t\t\tnew BaseElement('span')\n\t\t\t\t.addClass('cylinder-building-label__text','language-string')\n\t\t\t\t.addAttribute('data-dictionary',building.info.crm_data[0].status)\n\t\t\t\t.innerHtml(changeLangToCurrent(building.info.crm_data[0].status))\n\t\t\t\t.appendTo(item);\n\t\t}\n\t\t\n\t\tconst label = new CSS2DObject(container);\n\t\tlabel.name = `labelTower-${building.info.labelName}`;\n\t\tlabel.position.set(center.x,size.y,center.z);\n\t\tlabel.userData.buildingEngineId = building.name;\n\t\tlabel.userData.isSold = isSold;\n\t\tthis.group.add(label);\n\t}\n\t\n\ttranslateLabels() {\n\t\tif (!config.features.privateHouseMode) return;\n\t\tthis.group.children.forEach(label => {\n\t\t\tconst text = label.element.querySelector('.cylinder-building-label__text');\n\t\t\tif (text) {\n\t\t\t\tconst dictionaryKey = text.getAttribute('data-dictionary');\n\t\t\t\tif (dictionaryKey) {\n\t\t\t\t\ttext.innerHTML = changeLangToCurrent(dictionaryKey);\n\t\t\t\t} else {\n\t\t\t\t\ttext.innerHTML = text.getAttribute(`data-lang-${getCurrentLang()}`)\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t\n\tupdateResults() {\n\t\tif (!config.features.privateHouseMode) return;\n\t\tconst buildings = settingsData.searchResult.map(crm => crm.buildingEngineId);\n\t\tconst availableLabels = this.group.children.filter(label => !label.userData.isSold);\n\t\tavailableLabels.forEach(label => {\n\t\t\tif (buildings.includes(label.userData.buildingEngineId)) {\n\t\t\t\tUnitCardClass.cards.forEach(card => {\n\t\t\t\t\tif (card.buildingEngineId === label.userData.buildingEngineId) {\n\t\t\t\t\t\tmarkSelectedApartments(card.engineId);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tlabel.visible = true;\n\t\t\t} else {\n\t\t\t\tif (!label.element.classList.contains('cylinder-building-label--clicked')) {\n\t\t\t\t\tlabel.visible = false;\n\t\t\t\t} else {\n\t\t\t\t\tUnitCardClass.cards.forEach(card => {\n\t\t\t\t\t\tif (card.buildingEngineId === label.userData.buildingEngineId) {\n\t\t\t\t\t\t\tconst {selectedMesh} = findSelectionAndCrmData(card.engineId);\n\t\t\t\t\t\t\tif (selectedMesh) {\n\t\t\t\t\t\t\t\tselectionBoxesSetStatusColor(selectedMesh, 'unlock');\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}\n\t\t\t}\n\t\t});\n\t}\n\t\n\tmarkLabel(engineId,state) {\n\t\tif (!config.features.privateHouseMode) return;\n\n\t\tconst id = engineId.split('_')[0];\n\t\tconst availableLabels = this.group.children.filter(label => !label.userData.isSold);\n\t\tconst label = availableLabels.find(label => label.userData.buildingEngineId === id);\n\t\tif (label) {\n\t\t\tconst building = Buildings.getBuilding(id);\n\t\t\tconst crm = building.info.crm_data[0];\n\t\t\tconst bgElement = label.element.querySelector('.cylinder-building-label__bubble');\n\t\t\tconst arrow = label.element.querySelector('.cylinder-building-label__arrow');\n\t\t\tif (state === 'click') {\n\t\t\t\tconst color = config.resources.bundle.selectionBoxes.colorStatus.find(color => color.status === crm.status.toLowerCase());\n\t\t\t\tconst bgColor = '#' + this.color.setStyle(`#${color.basic}`,LinearSRGBColorSpace).convertLinearToSRGB().getHexString();\n\t\t\t\tbgElement.style.background = bgColor;\n\t\t\t\tarrow.style.background = bgColor;\n\t\t\t\tlabel.element.classList.add('cylinder-building-label--clicked');\n\t\t\t\tlabel.visible = true;\n\t\t\t\tthis.activeLabel = label;\n\t\t\t} else {\n\t\t\t\tbgElement.style.background = '';\n\t\t\t\tarrow.style.background = '';\n\t\t\t\tlabel.element.classList.remove('cylinder-building-label--clicked');\n\t\t\t\tif (this.activeLabel === label) {\n\t\t\t\t\tthis.activeLabel = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.updateResults();\n\t\t\t\tthis.updateEffect();\n\t\t\t\tthis.updateHighlight(state);\n\t\t\t},0);\n\t\t}\n\t}\n\t\n\tupdateEffect() {\n\t\tconst effect = threeJsVariables.composer.getPass('maskObjectPass');\n\t\tif (this.activeLabel) {\n\t\t\tconst building = Buildings.getBuilding(this.activeLabel.userData.buildingEngineId);\n\t\t\teffect.setObject(building.selectionsGroup);\n\t\t\teffect.active = true;\n\t\t} else {\n\t\t\teffect.active = false;\n\t\t}\n\t}\n\n\tupdateHighlight(state) {\n\t\tif (this.activeLabel) {\n\t\t\tif (state !== 'click') return;\n\t\t\tconst bbox = Buildings.getBuilding(this.activeLabel.userData.buildingEngineId);\n\t\t\tlet building;\n\t\t\tbbox.selectionsGroup.traverse(object => {\n\t\t\t\tif (object.isMesh && !building && object.userData.name.includes(this.activeLabel.userData.buildingEngineId)) {\n\t\t\t\t\tbuilding = object;\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst highlightPrev = threeJsVariables.scene.getObjectByName('highlight');\n\t\t\tif (highlightPrev) {\n\t\t\t\tthreeJsVariables.scene.remove(highlightPrev);\n\t\t\t\thighlightPrev.geometry.dispose();\n\t\t\t\thighlightPrev.material.dispose();\n\t\t\t}\n\t\t\tif (!building) {\n\t\t\t\tconsole.log('selection box model wasnt found');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst colorStatus = config.resources.bundle.selectionBoxes.colorStatus;\n\t\t\tconst color = colorStatus.find(c => c.status === 'available');\n\t\t\tconst highlight = building.clone(true);\n\t\t\thighlight.name = 'highlight';\n\t\t\thighlight.userData = { name: 'highlight' };\n\t\t\thighlight.material = new ShaderMaterial({\n\t\t\t\tuniforms: {\n\t\t\t\t\tcolor: { value: new Color().setStyle(`#${color.hover}`,LinearSRGBColorSpace) },\n\t\t\t\t\tbaseHeight: { value: -0.5 },\n\t\t\t\t\tgradHeight: { value: 4.5 }\n\t\t\t\t},\n\t\t\t\tvertexShader: `\n\t\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\t\tvoid main() {\n\t\t\t\t\t\tvUv = position.xy;\n\t\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n\t\t\t\t\t}\n\t\t\t\t`,\n\t\t\t\tfragmentShader: `\n\t\t\t\t\tuniform vec3 color;\n\t\t\t\t\tuniform float baseHeight;\n\t\t\t\t\tuniform float gradHeight;\n\t\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\t\tvoid main() {\n\t\t\t\t\t\tfloat alpha = 1.0 - (vUv.y - baseHeight) / gradHeight;\n\t\t\t\t\t\tif (vUv.y <= 0.01) {\n\t\t\t\t\t\t\talpha = 0.0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgl_FragColor = vec4(color, alpha);\n\t\t\t\t\t}\n\t\t\t\t`,\n\t\t\t\ttransparent: true,\n\t\t\t\tside: DoubleSide,\n\t\t\t\tdepthWrite: false\n\t\t\t});\n\t\t\tbuilding.getWorldPosition(highlight.position);\n\t\t\tbuilding.getWorldScale(highlight.scale);\n\t\t\tbuilding.getWorldQuaternion(highlight.quaternion);\n\t\t\tthreeJsVariables.scene.add(highlight);\n\t\t} else {\n\t\t\tconst highlight = threeJsVariables.scene.getObjectByName('highlight');\n\t\t\tif (highlight) {\n\t\t\t\tthreeJsVariables.scene.remove(highlight);\n\t\t\t\thighlight.geometry.dispose();\n\t\t\t\thighlight.material.dispose();\n\t\t\t}\n\t\t}\n\t}\n\t\n\tremove() {\n\t\tif (this.group && this.group.parent) {\n\t\t\tthis.group.removeFromParent();\n\t\t\tthis.group.traverse(el => {\n\t\t\t\tif (el.isCSS2DObject) {\n\t\t\t\t\tel.element.remove();\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n}\n","import {\n Box3,\n Mesh,\n MeshBasicMaterial,\n PlaneGeometry, Quaternion,\n Sphere,\n TextureLoader,\n Vector3,\n} from 'three';\nimport { settingsData, threeJsVariables } from '../../../settings';\nimport { autoRotateTimerAction, rotateToCamera } from '../../controls/orbitControls';\n\nconst selectionBoxesBox = {};\n\nconst axisZ = new Vector3( 0, 0, 1 ).normalize();\nconst axisY = new Vector3(0,1,0).normalize();\nconst quaternion = new Quaternion();\n\nexport function rotateHoverCursorWithCamera () {\n if (!config.features.cursor?.active){\n return;\n }\n\n const hover = threeJsVariables.scene.getObjectByName('Building hover');\n if (!hover){\n return;\n }\n\n if (hover.visible){\n const hoverPosition = hover.getWorldPosition(new Vector3());\n const vec = new Vector3();\n\n quaternion.setFromAxisAngle(axisY, threeJsVariables.orbitControls.getAzimuthalAngle());\n vec.applyQuaternion(quaternion);\n\n const cursorVec = new Vector3().copy(hoverPosition);\n cursorVec.add(vec);\n\n hover.position.set(cursorVec.x, hoverPosition.y, cursorVec.z);\n hover.rotation.set(0, rotateToCamera(-Math.PI / 2), 0);\n }\n\n}\n\nexport function updateHoverPosition (building, y, action) {\n if (!config.features.cursor?.active){\n return;\n }\n\n const radiusDivide = config.features.cursor.radiusDivide;\n\n const hover = threeJsVariables.scene.getObjectByName('Building hover');\n if (!hover){\n return;\n }\n\n switch (action) {\n case 'show':\n const selectionBoxValues = getSelectionBoxValues(building.name);\n if (!selectionBoxValues){\n return;\n }\n\n autoRotateTimerAction('update');\n\n const {center, sphere} = selectionBoxValues;\n\n const axisVec = new Vector3().copy(axisZ);\n const cursorVec = new Vector3().copy(center);\n const scalarVec = new Vector3();\n\n // scalarVec.add( axisVec.multiplyScalar(sphere.radius / radiusDivide) );\n quaternion.setFromAxisAngle(axisY, threeJsVariables.orbitControls.getAzimuthalAngle());\n scalarVec.applyQuaternion(quaternion);\n\n cursorVec.add(scalarVec);\n // cursorVec.applyQuaternion(quaternion);\n\n hover.position.set(cursorVec.x, y, cursorVec.z);\n hover.rotation.set(0, rotateToCamera(-Math.PI / 2), 0);\n hover.visible = true;\n\n settingsData.animateBuildingHover = true;\n\n break;\n case 'hide':\n hover.visible = false;\n settingsData.animateBuildingHover = false;\n\n break;\n }\n}\n\nexport function calculateBoxForSelectionBoxes (selectionBoxes) {\n if (!config.features.cursor?.active){\n return;\n }\n\n selectionBoxes.forEach(sBox =>{\n const center = sBox.getWorldPosition(new Vector3());\n const sphere = new Box3().setFromObject(sBox).getBoundingSphere(new Sphere());\n\n selectionBoxesBox[sBox.name] = {\n center,\n sphere\n };\n });\n}\n\nfunction getSelectionBoxValues (buildingName) {\n return selectionBoxesBox[`${buildingName}_selectionBoxes`];\n}\n","'use strict';\n\nimport {CSS2DObject} from \"../../../libs/CSS2DRenderer.js\";\nimport {threeJsVariables, isMobile, Buildings, projectMode, TRoot, settingsData} from '../../../settings';\nimport { Box3, MathUtils, Raycaster, Vector3 } from 'three';\nimport {getCurrentCameraDistance} from '../../controls/orbitControls';\nimport {Vector2} from 'three';\nimport {setCoordinates} from '../../threejs/autoProjectScript';\nimport {addPoiToIntersection} from '../../poi/poiCss';\nimport {Group} from 'three';\nimport {ViewMode} from '../../../common';\nimport {enterToTheBuildingWithMaxAvailableApartments} from './building_switch';\nimport {Cluster} from '../../threejs/Cluster/CSS2DCluster';\nimport { Cloudflare } from '../../api/Cloudflare';\nimport { BaseElement } from '../../interfaces/BaseElement';\nimport { createAnimatedProjectLabel } from '../../widgets/poi/poiv3';\nimport { BmbyMode } from '../../mode/BmbyMode';\n\nconst buildingLabels = [];\nconst zoomRule = config.threejs.label.size || 0.6;\n\nexport function BuildingLabels(selectionBoxes) {\n\tif (projectMode.LiteMode.isActive()) {\n\t\tbuildingLabelLiteMode();\n\t\treturn;\n\t}\n\n\tif (config.features.blockCylinderMode || BmbyMode.active) {\n\t\treturn;\n\t}\n\n\tif (config.features.privateHouseMode) {\n\t\toneLabelLogic(selectionBoxes,'privateHouse');\n\t\treturn;\n\t}\n\t\n\tif (config.threejs.label.oneLabel) {\n\t\toneLabelLogic(selectionBoxes,'oneLabel');\n\t\treturn;\n\t}\n\n\tconst scene = threeJsVariables.scene;\n\tconst buildingsLabelsGroup = new Group();\n\tconst {y} = config.threejs.projectRotation;\n\tconst {heightCorrection, resize} = config.threejs.label;\n\tconst colors = config.threejs.label.colors || {};\n\tconst hideClickHere = config.threejs.label.hideClickHere;\n\tbuildingsLabelsGroup.name = 'buildingsLabelsGroup';\n\tif (!threeJsVariables.bundleConfig) {\n\t\tbuildingsLabelsGroup.rotation.set(0, y, 0);\n\t} else if (threeJsVariables.bundleConfig && threeJsVariables.bundleConfig.version) {\n\t\tsetCoordinates(buildingsLabelsGroup, threeJsVariables.bundleConfig.project);\n\t} else {\n\t\tsetCoordinates(buildingsLabelsGroup, threeJsVariables.bundleConfig.building);\n\t}\n\t//buildingsLabelsGroup.rotation.set(0,y,0);\n\t//For Cnaan env\n\t// const selectionBoxesParent = selectionBoxes[0].parent;\n\t// buildingsLabelsGroup.position.set(selectionBoxesParent.position.x,selectionBoxesParent.position.y,selectionBoxesParent.position.z);\n\t// buildingsLabelsGroup.rotation.set(selectionBoxesParent.rotation.x,selectionBoxesParent.rotation.y,selectionBoxesParent.rotation.z);\n\t// buildingsLabelsGroup.scale.set(selectionBoxesParent.scale.x,1,selectionBoxesParent.scale.z);\n\n\t// buildings_info.forEach(building => {\n\t// const buildingMesh = selectionBoxes.filter(sb => sb.name === `${building.name}_selectionBoxes`)[0];\n\t// const sBoxSize = new Box3().setFromObject(buildingMesh).getSize(new THREE.Vector3());\n\t// const labelContainer = document.createElement('div');\n\t// const labelTowerNumber = building.labelName;\n\t// // const labelTowerLetter = building.labelName.charAt(building.labelName.length - 1);\n\t// labelContainer.className = 'building-labels';\n\t//\n\t// labelContainer.setAttribute('data-attribute', building.labelName);\n\t//\n\t// if (building.buildingIcon.length){\n\t// labelContainer.innerHTML = `\n\t//
\n\t//
\n\t//
\n\t// `;\n\t//\n\t// } else {\n\t//\n\t// labelContainer.innerHTML = `\n\t//
\n\t// ${labelTowerNumber}\n\t//
\n\t// `;\n\t// }\n\t//\n\t// if (labelContainer) {\n\t// if (labelContainer.getAttribute('data-attribute') === building.labelName) {\n\t// labelContainer.classList.add('active');\n\t// }\n\t// }\n\t// const label = new CSS2DObject(labelContainer);\n\t// // const diffHightLabels = (window.innerWidth < 450) ? 20 : 15;\n\t// // const diffHightLabels = (window.innerWidth < 450) ? 50 : 30; /// Remove when building position is 0,0,0\n\t// const diffHightLabels = isMobile ? heightCorrection.mobile : heightCorrection.desktop;\n\t//\n\t// label.name = `labelTower-${building.labelName}`;\n\t// //label.material = new THREE.MeshBasicMaterial({color: 'red'});\n\t//\n\t// // label.position.set(roofCenterPoint.x, roofCenterPoint.y + diffHightLabels, roofCenterPoint.z);\n\t// label.position.set(buildingMesh.position.x, sBoxSize.y + diffHightLabels + buildingMesh.position.y, buildingMesh.position.z);\n\t//\n\t// if (resize){\n\t// const currentCameraDistance = getCurrentCameraDistance();\n\t// label.userData.zoom = 1 / currentCameraDistance * 100 + 0.25;\n\t// } else {\n\t// label.userData.zoom = 1;\n\t// }\n\t//\n\t// // label.userData.zoom = isMobile ? 0.9 : 1;\n\t//\n\t// buildingsLabelsGroup.add(label);\n\t//\n\t// });\n\tconst CLUSTERS = {};\n\tconst buildings = Buildings.getBuildingsArray();\n\n\tif (Cluster.active) {\n\t\tconst lots = [...new Set(buildings.map(building => building.info.buildingLot).filter(lot => lot?.length))];\n\t\tlots.forEach(id => {\n\t\t\tCLUSTERS[id] = new Cluster(id);\n\t\t});\n\t}\n\n\tbuildings.forEach((building, index) => {\n\t\tconst buildingMesh = selectionBoxes.filter(sb => sb.name === `${building.name}_selectionBoxes`)[0];\n\n\t\tif (!buildingMesh)\n\t\t\treturn;\n\n\t\tconst sBoxSize = new Box3().setFromObject(buildingMesh).getSize(new Vector3());\n\t\tconst labelContainer = document.createElement('div');\n\t\tconst labelTowerNumber = building.info.labelName;\n\t\tconst buildingColor = building.info.color;\n\t\t// const labelTowerLetter = building.labelName.charAt(building.labelName.length - 1);\n\t\tlabelContainer.className = 'building-labels';\n\t\tlabelContainer.setAttribute('data-attribute', building.info.labelName);\n\t\tlabelContainer.addEventListener('click', labelContainerClickHandler);\n\n\n\t\tconst labelBGColor = Boolean(buildingColor)\n\t\t\t? buildingColor\n\t\t\t: undefined;\n\n\t\tif (building.info.buildingIcon.length) {\n\t\t\tlabelContainer.innerHTML = `\n\t\t\t
\n\t\t\t\t
${getBuildingLabel(labelBGColor)}
\n\t\t\t\t
\n\t\t\t
\n `;\n\n\t\t} else {\n\t\t\tlabelContainer.innerHTML = `\n
\n
${getBuildingLabel(labelBGColor)}
\n ${labelTowerNumber}\n
`;\n\t\t}\n\n\t\tif (labelContainer) {\n\t\t\tif (labelContainer.getAttribute('data-attribute') === building.info.labelName) {\n\t\t\t\tlabelContainer.classList.add('active');\n\t\t\t}\n\n\t\t\tif (colors.text) {\n\t\t\t\tlabelContainer.querySelector('.building-labels_wrapper').style = `color: ${colors.text}`;\n\t\t\t}\n\t\t}\n\t\tconst label = new CSS2DObject(labelContainer);\n\t\t// const diffHightLabels = isMobile ? heightCorrection.mobile : heightCorrection.desktop;\n\t\tconst diffHightLabels = heightCorrection.desktop;\n\n\t\tlabel.name = `labelTower-${building.info.labelName}`;\n\t\t//label.material = new THREE.MeshBasicMaterial({color: 'red'});\n\n\t\t// label.position.set(roofCenterPoint.x, roofCenterPoint.y + diffHightLabels, roofCenterPoint.z);\n\t\tlabel.position.set(buildingMesh.position.x, sBoxSize.y + diffHightLabels + buildingMesh.position.y, buildingMesh.position.z);\n\n\t\tif (resize) {\n\t\t\tconst currentCameraDistance = getCurrentCameraDistance();\n\t\t\tlabel.userData.zoom = 1 / currentCameraDistance * 100 + 0.25;\n\t\t} else {\n\t\t\tlabel.userData.zoom = zoomRule;\n\t\t}\n\n\t\t// label.userData.zoom = isMobile ? 0.9 : 1;\n\n\t\tconst cluster = CLUSTERS[building.info.buildingLot];\n\n\t\tif (cluster) {\n\t\t\tif (!cluster.parent) {\n\t\t\t\tbuildingsLabelsGroup.add(cluster);\n\t\t\t\taddPoiToIntersection(cluster);\n\t\t\t}\n\n\t\t\tcluster.add(label);\n\t\t\tcluster.updateCount();\n\n\t\t} else {\n\t\t\tbuildingsLabelsGroup.add(label);\n\t\t\taddPoiToIntersection(label);\n\t\t}\n\n\t\tbuildingLabels.push(label);\n\n\t});\n\n\tbuildingsLabelHideWhenAnimationStart();\n\n\tscene.add(buildingsLabelsGroup);\n\n\tObject.values(CLUSTERS).forEach(cluster => cluster.split());\n\tif (Cluster.buildingLabelMode) {\n\t\tObject.values(CLUSTERS).forEach(cluster => {\n\t\t\tif (resize) {\n\t\t\t\tconst currentCameraDistance = getCurrentCameraDistance();\n\t\t\t\tcluster.userData.zoom = 1 / currentCameraDistance * 100 + 0.25;\n\t\t\t} else {\n\t\t\t\tcluster.userData.zoom = zoomRule;\n\t\t\t}\n\n\t\t\tbuildingLabels.push(cluster);\n\t\t});\n\n\t}\n\n}\n\nexport const labelContainerClickHandler = async (e) => {\n\tif (!e.target.closest('.building-labels_wrapper'))\n\t\treturn;\n\n\tconst wrapper = e.target.closest('.building-labels_wrapper');\n\tconst clickedLabelBuildingName = wrapper.getAttribute('data-name');\n\tconst clickedBuilding = Buildings.getBuilding(clickedLabelBuildingName)\n\tawait projectMode.Cylinder.enter(clickedBuilding);\n};\n\nexport function buildingLabelLiteMode() {\n\tif (projectMode.LiteMode.modeIs('picture') || projectMode.LiteMode.modeIs('empty')) {\n\t\tcreateEmptyBuildingLabels();\n\t\treturn;\n\t} else if (projectMode.LiteMode.modeIs('rotate')) {\n\t\tprojectMode.LiteMode.rotor.initLabels();\n\t\treturn;\n\t}\n\n\tconst buildings = Buildings.getBuildingsArray();\n\tconst colors = config.threejs.label.colors || {};\n\tconst hideClickHere = config.threejs.label.hideClickHere;\n\n\tbuildings.forEach(building => {\n\t\tconst selection = projectMode.LiteMode.intersections.find(sb => sb.name.startsWith(building.name));\n\n\t\tif (!selection || !Object.keys(building.info).length) return;\n\n\t\tconst labelTowerNumber = building.info.labelName;\n\t\tconst labelContainer = document.createElement('div');\n\t\tlabelContainer.className = 'building-labels';\n\t\tlabelContainer.setAttribute('data-attribute', labelTowerNumber);\n\t\tconst buildingColor = building.info.color;\n\t\tconst labelBGColor = Boolean(buildingColor)\n\t\t\t? buildingColor\n\t\t\t: undefined;\n\n\t\tif (building.info.buildingIcon.length) {\n\t\t\tlabelContainer.innerHTML = `\n
\n
${getBuildingLabel(labelBGColor)}
\n
\n
\n `;\n\n\t\t} else {\n\n\t\t\tlabelContainer.innerHTML = `\n
\n
${getBuildingLabel(labelBGColor)}
\n ${labelTowerNumber}\n
\n `;\n\t\t}\n\n\t\tif (colors.text) {\n\t\t\tlabelContainer.querySelector('.building-labels_wrapper').style = `color: ${colors.text}`;\n\t\t}\n\n\t\tlabelContainer.classList.add('active');\n\t\tconst label = new CSS2DObject(labelContainer);\n\t\tlabel.name = `labelTower-${building.info.labelName}`;\n\t\tlabelContainer.addEventListener('click', labelContainerClickHandler);\n\n\t\tif (config.features.liteMode.settings.buildingLabelDiff) {\n\t\t\tlabel.userData.zoom = 1 - config.features.liteMode.settings.buildingLabelDiff;\n\t\t} else {\n\t\t\tlabel.userData.zoom = zoomRule;\n\t\t}\n\n\t\tselection.add(label);\n\t});\n}\n\nfunction oneLabelLogic (selections,name) {\n\tconst box = new Box3();\n\tselections.forEach(selection => box.expandByObject(selection));\n\tconst size = new Vector3();\n\tconst center = new Vector3();\n\tbox.getSize(size);\n\tbox.getCenter(center);\n\n\tconst buildingsLabelsGroup = new Group();\n\tconst {heightCorrection, resize} = config.threejs.label;\n\tconst hideClickHere = config.threejs.label.hideClickHere;\n\tbuildingsLabelsGroup.name = 'buildingsLabelsGroup';\n\t// const colorBg = config.style.colors.find(color => color.key === 'brand1');\n\n\tcreateAnimatedProjectLabel()\n\t\t.then(svg => {\n\n\t\t\tconst labelContainer = new BaseElement()\n\t\t\t\t.addClass('building-labels','active','all-in-one__label')\n\t\t\t\t.event('click',() => enterToTheBuildingWithMaxAvailableApartments())\n\t\t\t\t.DOMElement;\n\n\t\t\tlabelContainer.innerHTML = `\n\t\t\t
\n\t\t\t
${svg}
\n\t\t\t
\n\t\t\t
\n\t\t\t `;\n\n\t\t\tconst height = size.y + center.y + heightCorrection.desktop;\n\t\t\tconst label = new CSS2DObject(labelContainer);\n\t\t\tlabel.name = `labelTower-all-in-one`;\n\t\t\tlabel.position.set(center.x, height, center.z);\n\t\t\tif (resize) {\n\t\t\t\tconst currentCameraDistance = getCurrentCameraDistance();\n\t\t\t\tlabel.userData.zoom = 1 / currentCameraDistance * 100 + 0.25;\n\t\t\t} else {\n\t\t\t\tlabel.userData.zoom = zoomRule;\n\t\t\t}\n\t\t\taddPoiToIntersection(label);\n\t\t\tbuildingsLabelsGroup.add(label);\n\t\t});\n\n\t// const labelContainer = new BaseElement()\n\t// \t.addClass('building-labels','active','private-house__label')\n\t// \t.event('click',() => enterToTheBuildingWithMaxAvailableApartments())\n\t// \t.DOMElement;\n\t//\n\t// labelContainer.innerHTML = `\n //
\n //
${getBuildingLabel(`rgba(${colorBg.value})`)}
\n //
\n //
\n // `;\n\t// const height = size.y + center.y + heightCorrection.desktop;\n\t// const label = new CSS2DObject(labelContainer);\n\t// label.name = `labelTower-privateHouse`;\n\t// label.position.set(center.x, height, center.z);\n\t// label.userData.zoom = 1;\n\t// buildingsLabelsGroup.add(label);\n\tthreeJsVariables.scene.add(buildingsLabelsGroup);\n}\n\n\nfunction createEmptyBuildingLabels() {\n\tconst labels = config.features.liteMode.labels;\n\tif (!labels) return;\n\n\tconst buildings = Buildings.getBuildingsArray();\n\tconst colors = config.threejs.label.colors || {};\n\tconst hideClickHere = config.threejs.label.hideClickHere;\n\tconst group = projectMode.LiteMode.group;\n\tconst isDebug = projectMode.LiteMode.debug;\n\tconst labelsGroup = new Group();\n\tlabelsGroup.name = 'Labels';\n\tgroup.add(labelsGroup);\n\n\tbuildings.forEach(building => {\n\t\tconst labelData = labels.find(obj => obj.buildingEngineId === building.name);\n\n\t\tif (!labelData) return;\n\n\t\tconst labelContainer = document.createElement('div');\n\t\tconst labelTowerNumber = building.info.labelName;\n\t\tlabelContainer.className = 'building-labels';\n\t\tlabelContainer.setAttribute('data-attribute', building.info.labelName);\n\n\t\tif (building.info.buildingIcon.length) {\n\t\t\tlabelContainer.innerHTML = `\n
\n
${getBuildingLabel(colors.background)}
\n
\n
\n `;\n\n\t\t} else {\n\n\t\t\tlabelContainer.innerHTML = `\n
\n
${getBuildingLabel(colors.background)}
\n ${labelTowerNumber}\n
\n `;\n\t\t}\n\n\t\tconst labelWrapper = labelContainer.querySelector('.building-labels_wrapper');\n\n\t\tif (colors.text) {\n\t\t\tlabelWrapper.style = `color: ${colors.text}`;\n\t\t}\n\n\t\tlabelContainer.classList.add('active');\n\t\tconst label = new CSS2DObject(labelContainer);\n\t\tlabel.name = `labelTower-${building.info.labelName}`;\n\t\tlabel.userData.buildingEngineId = labelData.buildingEngineId;\n\t\tlabelContainer.addEventListener('click', () => {\n\t\t\tif (settingsData.activeViewMode === ViewMode.Orbit) {\n\t\t\t\tenterToTheBuildingWithMaxAvailableApartments();\n\t\t\t}\n\t\t});\n\n\t\tlabelContainer.addEventListener('pointerenter', () => {\n\t\t\tif (settingsData.activeViewMode === ViewMode.Orbit) {\n\t\t\t\tlabelWrapper.classList.add('building__hovered');\n\t\t\t}\n\t\t});\n\n\t\tlabelContainer.addEventListener('pointerleave', () => {\n\t\t\tlabelWrapper.classList.remove('building__hovered');\n\t\t});\n\n\n\t\tif (config.features.liteMode.settings.buildingLabelDiff) {\n\t\t\tlabel.userData.zoom = 1 - config.features.liteMode.settings.buildingLabelDiff;\n\t\t} else {\n\t\t\tlabel.userData.zoom = zoomRule;\n\t\t}\n\n\t\tlabel.position.set(labelData.position.x, labelData.position.y, 0);\n\t\tlabelsGroup.add(label);\n\t});\n\n\tisDebug && liteModeDebugLabels();\n}\n\n\nfunction liteModeDebugLabels() {\n\tconst debugFolder = projectMode.LiteMode.debugFolder;\n\tconst group = projectMode.LiteMode.group;\n\tconst labels = group.getObjectByName('Labels');\n\tconst labelsFolder = debugFolder.addFolder('Labels');\n\tconst data = {};\n\tconst fn = {\n\t\tupdate: (label) => {\n\t\t\tconst id = label.userData.buildingEngineId;\n\t\t\tdata[id] = {\n\t\t\t\tbuildingEngineId: id,\n\t\t\t\tposition: {\n\t\t\t\t\tx: label.position.x,\n\t\t\t\t\ty: label.position.y\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\texport: () => {\n\t\t\tconst configData = [];\n\t\t\tObject.values(data).forEach(value => configData.push(value));\n\t\t\tprompt('config.features.liteMode.labels : ', JSON.stringify(configData));\n\t\t}\n\t};\n\n\tlabels.traverse(el => {\n\t\tif (!el.isGroup) {\n\t\t\tconst id = el.userData.buildingEngineId;\n\t\t\tconst labelFolder = labelsFolder.addFolder(id);\n\t\t\tlabelFolder.add(el.position, 'x', -1, 1, 0.0001).onChange(() => fn.update(el));\n\t\t\tlabelFolder.add(el.position, 'y', -1, 1, 0.0001).onChange(() => fn.update(el));\n\t\t}\n\t});\n\n\tlabelsFolder.add(fn, 'export');\n}\n\n// export function buildingsLabelsToggle (buildingIndex) {\n// const labelGroup = threeJsVariables.scene.getObjectByName('buildingsLabelsGroup');\n// const activeBuilding = buildings_info[buildingIndex];\n// const labelPrefix = \"labelTower-\";\n//\n// labelGroup.traverse(label =>{\n// if (buildingIndex !== undefined){\n// if (label.name !== labelPrefix + activeBuilding.labelName){\n// label.visible = false;\n// } else {\n// label.visible = true;\n// }\n// } else {\n// label.visible = true;\n// }\n// });\n//\n// }\n\nexport function buildingsLabelResize() {\n\tif (!threeJsVariables.orbitControls.enabled || !config.threejs.label.resize || !threeJsVariables.labelRenderer) {\n\t\treturn;\n\t}\n\n\tconst labelGroup = threeJsVariables.scene.getObjectByName('buildingsLabelsGroup');\n\tif (labelGroup) {\n\t\tconst currentCameraDistance = getCurrentCameraDistance();\n\t\t// const {currentMinDistance,currentMaxDistance} = getOrbitControlsDistanceAndAngle();\n\t\tlabelGroup.traverse(label => {\n\t\t\tif (label.type === 'Object3D' && !label.isCSS2DCluster) {\n\t\t\t\t// if (currentCameraDistance < currentMinDistance + 5){\n\t\t\t\tlabel.userData.zoom = 1 / currentCameraDistance * 100 + 0.25;\n\t\t\t\t//\n\t\t\t\t// label.userData.zoom = isMobile ? 0.85 : 0.9;\n\t\t\t\t// } else {\n\t\t\t\t// const calcZoom = 1 / currentCameraDistance * 100 + 0.25;\n\t\t\t\t// if (isMobile){\n\t\t\t\t// label.userData.zoom = calcZoom >= 0.85 ? 0.85 : calcZoom;\n\t\t\t\t// } else {\n\t\t\t\t// label.userData.zoom = calcZoom >= 0.9 ? 0.9 : calcZoom;\n\t\t\t\t// }\n\t\t\t\t// }\n\t\t\t}\n\t\t});\n\t\tconst canvas = threeJsVariables.renderer.getSize(new Vector2());\n\t\tconst isLabelRenderExists = JSON.stringify(threeJsVariables.labelRenderer) !== '{}'\n\t\tif (isLabelRenderExists)\n\t\t\tthreeJsVariables.labelRenderer.setSize(canvas.x, canvas.y);\n\t\t// threeJsVariables.labelRenderer.render(threeJsVariables.scene,threeJsVariables.perspectiveCamera);\n\t}\n}\n\n// export function buildingsLabelUpdate () {\n// const mainLabelContainer = threeJsVariables.labelRenderer.domElement;\n// if (mainLabelContainer){\n// mainLabelContainer.style.display = 'none';\n// setTimeout(()=>{\n// mainLabelContainer.style.display = 'block';\n// },10);\n// }\n// }\n\n// export function buildingsLabelUpdate () {\n//\n// if (settingsData.activeViewMode !== ViewMode.Orbit){\n// return;\n// }\n//\n// const buildingLabels = document.querySelectorAll('.building-labels_wrapper');\n//\n// if (buildingLabels.length) {\n// buildingLabels.forEach(label =>{\n// label.style.display = '';\n// });\n// // if (settingsData.activeViewMode !== ViewMode.Cylinder) {\n// // buildingLabels.style.display = 'none';\n// // setTimeout(() => {\n// // buildingLabels.removeAttribute('style')\n// // // showPoi();\n// // },10);\n// // } else {\n// // buildingLabels.style.display = 'none';\n// // }\n// }\n// }\n\nexport function hideBuildingLabels() {\n\tconst buildingLabels = TRoot.querySelectorAll('.building-labels_wrapper:not(.lite-mode__building-label)');\n\n\tif (buildingLabels.length) {\n\t\tbuildingLabels.forEach(label => {\n\t\t\tlabel.classList.add('hidden');\n\t\t});\n\t}\n\n\tCluster.hide();\n}\n\nexport function showBuildingLabels() {\n\tconst buildingLabels = TRoot.querySelectorAll('.building-labels_wrapper');\n\n\tif (buildingLabels.length) {\n\t\tbuildingLabels.forEach(label => {\n\t\t\tlabel.classList.remove('hidden');\n\t\t\tlabel.classList.remove('hide__label');\n\t\t});\n\t}\n\n\tCluster.show();\n}\n\n// export function buildingsLabelHideWhenAnimationStart () {\n// if (settingsData.buildingDestroyed){\n// return;\n// }\n//\n// const buildingLabels = document.querySelectorAll('.building-labels_wrapper');\n//\n// if (buildingLabels.length){\n// buildingLabels.forEach(label =>{\n// label.style.display = 'none';\n// });\n// }\n// }\n\nexport function buildingsLabelHideWhenAnimationStart() {\n\tconst buildingLabels = document.querySelectorAll('.building-labels_wrapper');\n\n\tif (buildingLabels.length) {\n\t\tbuildingLabels.forEach(label => {\n\t\t\tlabel.classList.add('hide__label');\n\t\t\t// label.style.display = 'none';\n\t\t});\n\t}\n}\n\n// export function hoverBuildingLabel () {\n// const labelExist = threeJsVariables.scene.getObjectByName('Building hover label');\n// if (!labelExist){\n// const labelContainer = document.createElement('div');\n// //labelContainer.textContent = 'Click to enter';\n// labelContainer.classList.add('building__hover-label');\n//\n// const label = new CSS2DObject(labelContainer);\n// label.name = 'Building hover label';\n// label.visible = false;\n// label.material = new THREE.MeshBasicMaterial({color: 0xffffff});\n// label.userData.zoom = isMobile ? 0.9 : 1;\n// threeJsVariables.scene.add(label);\n// } else {\n//\n// const vec = new THREE.Vector3();\n// vec.set(\n// ( threeJsVariables.mouse.winX / window.innerWidth ) * 2 - 1,\n// - ( threeJsVariables.mouse.winY / window.innerHeight ) * 2 + 1,\n// 0 );\n//\n// vec.unproject(threeJsVariables.perspectiveCamera);\n// labelExist.position.set(vec.x,vec.y - 0.01,vec.z);\n// labelExist.visible = true;\n//\n// }\n// }\n\n// export function hoverOutBuildingLabel () {\n// const labelExist = threeJsVariables.scene.getObjectByName('Building hover label');\n// if (labelExist){\n// labelExist.visible = false;\n// }\n// }\n\nexport function mobileBuildingLabelsHideLogic() {\n\tif (config.features.poi.checkOverlapping === false) {\n\t\treturn;\n\t}\n\n\tfunction getBoundingRect(label) {\n\t\treturn label.element.getBoundingClientRect();\n\t}\n\n\tfunction areLabelsOverlapping(label1, label2) {\n\t\tconst rect1 = getBoundingRect(label1);\n\t\tconst rect2 = getBoundingRect(label2);\n\n\t\treturn !(\n\t\t\trect1.top > rect2.bottom ||\n\t\t\trect1.right < rect2.left ||\n\t\t\trect1.bottom < rect2.top ||\n\t\t\trect1.left > rect2.right\n\t\t);\n\t}\n\n\tconst camera = threeJsVariables.perspectiveCamera;\n\tfor (let i = 0; i < buildingLabels.length; i++) {\n\t\tconst label1 = buildingLabels[i];\n\t\tlabel1.element.setAttribute('mobile-hide-logic', 'show');\n\n\t\tfor (let j = 0; j < buildingLabels.length; j ++) {\n\t\t\tconst label2 = buildingLabels[j];\n\n\t\t\tif (label1 !== label2 && areLabelsOverlapping(label1,label2)) {\n\t\t\t\tconst d1 = label1.position.distanceTo(camera.position);\n\t\t\t\tconst d2 = label2.position.distanceTo(camera.position);\n\t\t\t\tif (d1 < d2) {\n\t\t\t\t\tlabel2.element.setAttribute('mobile-hide-logic', 'hide');\n\t\t\t\t} else {\n\t\t\t\t\tlabel1.element.setAttribute('mobile-hide-logic', 'hide');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n}\n\nexport function getBuildingLabel (color = 'white') {\n return `\n\t\t\t\n\t\t\n`\n}\n","'use strict';\n\nimport gsap from 'gsap';\nimport {Buildings, cardsData, isDesktop, isMobile, isNoMenu, isWeb, projectMode, settingsData, UIRoot} from '../../../settings';\nimport {\n changeBorderRadius, isCylinderDisplayModeEqual,\n setParametersDependsOnCanvasArea,\n userPrevent,\n} from '../../../functions';\nimport {UnitCardClass} from \"../../cards/unitCards/UnitCardClass\";\nimport { getCurrentLang } from '../langSwitcher/langSwitcher';\n\nexport const BuildingSwitch = {\n add: function (container) {\n if (!document.getElementById('building-switcher')) {\n let buildings_list_html = '';\n let buildingsCounter = 0;\n\n Buildings.getBuildingsArray().forEach((building, i) => {\n let towerName;\n\n if (building.getInfo().crm_data) {\n if (Array.isArray(building.info.towerName)){\n towerName = building.info.towerName.find(el => el.lang === getCurrentLang()).value;\n } else {\n towerName = building.info.towerName;\n }\n\n buildings_list_html += `
${towerName}
`;\n buildingsCounter++;\n }\n });\n\n container.insertAdjacentHTML('beforeend', `\n
\n \n
${buildings_list_html}
\n \n
\n
${buildings_list_html}
\n
\n
\n `);\n\n container.querySelector('#building-switcher .buildings-dropdown-wrapper').addEventListener('click', (event) => {\n const targetWrapper = event.target.closest('.buildings-dropdown-wrapper');\n if (targetWrapper) {\n const visible = targetWrapper.getAttribute('visible') === 'true' ? true : false;\n targetWrapper.setAttribute('visible', !visible);\n if (visible === false) {\n return;\n }\n }\n const targetItem = event.target.closest('.building-item');\n if (targetItem) {\n if (targetItem.classList.contains('active')) {\n targetWrapper.setAttribute('visible', true);\n }else {\n const targetName = targetItem.getAttribute('data-building');\n projectMode.Cylinder.switchBuilding(targetName);\n }\n }\n });\n\n if (isWeb) {\n container.querySelector('#building-switcher .buildings-dropdown-wrapper').addEventListener('mouseenter', (event) => {\n event.target.closest('.buildings-dropdown-wrapper')?.setAttribute('visible', true);\n });\n container.querySelector('#building-switcher .buildings-dropdown-wrapper').addEventListener('mouseleave', (event) => {\n event.target.closest('.buildings-dropdown-wrapper')?.setAttribute('visible', false);\n });\n }\n\n if (Buildings.getBuildingsInfoLength() <= 1) {\n document.querySelector('#building-switcher').classList.add('hide');\n }\n\n document.querySelector('#building-switcher .buildings-list .building-item').classList.add(\"active\");\n document.querySelector('#building-switcher .buildings-dropdown .building-item').classList.add(\"active\");\n\n let nav_btns = document.querySelectorAll('#building-switcher .new-ui-direction-btn');\n if (nav_btns) {\n nav_btns.forEach(btn => {\n btn.addEventListener('click', switchArrowClickHandler);\n });\n }\n changeBorderRadius(document.getElementById('building-switcher'));\n\n return document.querySelector('#building-switcher');\n }\n },\n\n changeLanguage: function() {\n const items = document.querySelectorAll('.building-item');\n\n items.forEach(item => {\n const dataName = item.getAttribute('data-building');\n const buildingInfo = Buildings.getBuilding(dataName).info;\n\n let name;\n\n if (Array.isArray(buildingInfo.towerName) && buildingInfo.towerName.length){\n name = buildingInfo.towerName.find(name => name.lang === getCurrentLang()).value;\n } else {\n name = buildingInfo.towerName;\n }\n\n item.firstElementChild.textContent = name;\n });\n }\n}\n\nconst switchArrowClickHandler = (event) => {\n if (userPrevent() || settingsData.activeModeSwitching)\n return;\n\n settingsData.activeModeSwitching = true;\n\n const items_list = document.querySelectorAll('#building-switcher .buildings-list .building-item');\n const active_item = document.querySelector('#building-switcher .building-item.active');\n if (event.target.classList.contains('next-btn')) {\n let target_index = Number(active_item.getAttribute('data-index')) + 1;\n if (items_list.length === target_index)\n target_index = 0;\n\n const targetName = document.querySelector(`.building-item[data-index=\"${target_index}\"]`).getAttribute('data-building');\n projectMode.Cylinder.switchBuilding(targetName);\n\n } else if (event.target.classList.contains('prev-btn')) {\n let target_index = Number(active_item.getAttribute('data-index')) - 1;\n if (target_index < 0)\n target_index = items_list.length - 1;\n\n const targetName = document.querySelector(`.building-item[data-index=\"${target_index}\"]`).getAttribute('data-building');\n projectMode.Cylinder.switchBuilding(targetName);\n }\n}\n\nexport function hideBuildingSwitcher () {\n const switcher = document.querySelector('#building-switcher');\n if (switcher){\n gsap.to(switcher,{bottom: -100, opacity:0, duration: 1,onComplete:()=>{\n switcher.classList.add('hide');\n switcher.classList.remove('showed');\n resetBuildingSwitcherAnimation(switcher);\n }});\n }\n}\n\nexport function showBuildingSwitcher () {\n if (config.features.privateHouseMode)\n return;\n \n let switcher = document.querySelector('#building-switcher');\n\n if (!switcher) {\n switcher = BuildingSwitch.add(UIRoot);\n }\n\n if (switcher.classList.contains('showed') || Buildings.getBuildingsInfoLength() <= 1){\n return;\n }\n\n document.querySelectorAll('#building-switcher .building-item.active').forEach(item => item.classList.remove('active'));\n\n const activeBuilding = Buildings.getActiveBuilding();\n switcher.querySelectorAll(`.building-item[data-building=\"${activeBuilding.name}\"]`).forEach(item => item.classList.add('active'));\n const dropDown = switcher.querySelector('.buildings-dropdown');\n const activeElement = dropDown.querySelector(`.building-item[data-building=\"${activeBuilding.name}`);\n activeElement && activeElement.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n });\n\n gsap.fromTo(switcher,{bottom: -100,opacity: 0},{bottom:32, opacity:1, duration: 1,\n onStart:()=>{\n switcher.classList.remove('hide');\n },onComplete:()=>{\n resetBuildingSwitcherAnimation(switcher);\n switcher.classList.add('showed');\n setParametersDependsOnCanvasArea('building-switcher');\n }});\n}\n\nfunction resetBuildingSwitcherAnimation (switcher) {\n switcher.style.removeProperty('bottom');\n}\n\nexport function showBuildings () {\n const buildingToShow = Buildings.getActiveBuilding();\n\n\n if (buildingToShow.modelGroup) {\n buildingToShow.activate();\n buildingToShow.modelGroup.visible = true;\n buildingToShow.isHide = false;\n }\n\n\n\n // return;\n // const mixer = GSAPAnimationMixer.getMixer('switchingBuilding');\n //\n // if (!buildingToShow.modelGroup) return;\n // buildingToShow.modelGroup.traverse(mesh => {\n // if (mesh.isMesh) {\n // if (Array.isArray(mesh.material)) {\n // mesh.material.forEach(item => {\n // const animation = gsap.to(item, {\n // duration: GSAPAnimationMixer.duration,\n // opacity: item.userData.defaultSettings ? item.userData.defaultSettings.opacity : 1,\n // ease: GSAPAnimationMixer.ease,\n // onStart: () => {\n // item.transparent = true;\n // item.needsUpdate = true;\n // settingsData.bombBlock = true;\n // buildingToShow.modelGroup.visible = true;\n // },\n // // onUpdate: multimaterialNeedsUpdate,\n // onComplete: () => {\n // if (item.userData.defaultSettings)\n // item.transparent = item.userData.defaultSettings.transparent;\n // buildingToShow.isHide = false;\n // settingsData.bombBlock = false;\n // }\n // });\n //\n // mixer.addAnimation(animation);\n // });\n // } else {\n // const animation = gsap.to(mesh.material, {\n // duration: GSAPAnimationMixer.duration,\n // opacity: 1,\n // ease: GSAPAnimationMixer.ease,\n // onStart: () => {\n // mesh.material.transparent = true;\n // mesh.material.needsUpdate = true;\n // settingsData.bombBlock = true;\n // buildingToShow.modelGroup.visible = true;\n // },\n // onComplete: () => {\n // mesh.material.transparent = config.resources.bundle?.material.transparent || false;\n // buildingToShow.isHide = false;\n // settingsData.bombBlock = false;\n // }\n // });\n //\n // mixer.addAnimation(animation);\n // }\n // }\n // });\n}\n\nexport function hideBuildings () {\n if (config.features.privateHouseMode || isCylinderDisplayModeEqual('show all')) return;\n\n const buildingsToHide = Buildings.getDeactivatedBuildings();\n\n if (!buildingsToHide.length) return;\n\n\n buildingsToHide.forEach(building => {\n building.deactivate();\n building.modelGroup.visible = Boolean(config.features.buildingOpacity);\n building.isHide = true;\n });\n\n\n // const globalTimeLine = gsap.timeline({\n // paused: true,\n // onStart: () => settingsData.bombBlock = true,\n // onComplete: () => settingsData.bombBlock = false\n // });\n\n // const mixer = GSAPAnimationMixer.getMixer(mode === 'switching' ? 'switchingBuilding' : 'cylinderEnter');\n // // const mixer = GSAPAnimationMixer.registerNewMixer('hideBuildings',false);\n // mixer.addCallback('onComplete',() => {\n // buildingsToHide.forEach(building => {\n // building.modelGroup.visible = Boolean(config.features.buildingOpacity);\n // building.isHide = true;\n // });\n // });\n //\n // buildingsToHide.forEach(building => {\n // if (!building.modelGroup) return;\n // // const tl = gsap.timeline({\n // // onComplete: () => {\n // // building.modelGroup.visible = Boolean(config.features.buildingOpacity);\n // // building.isHide = true;\n // // }\n // // });\n //\n // building.modelGroup.traverse(mesh => {\n // if (mesh.isMesh) {\n // if (Array.isArray(mesh.material)) {\n // mesh.material.forEach(item => {\n // const animation = gsap.to(item, {\n // duration: GSAPAnimationMixer.duration,\n // ease: GSAPAnimationMixer.ease,\n // // transparent: true,\n // onStart: () => {\n // item.transparent = true;\n // item.needsUpdate = true;\n // },\n // opacity: config.features.buildingOpacity ? config.features.buildingOpacity : 0,\n // // onUpdate: multimaterialNeedsUpdate\n // });\n // mixer.addAnimation(animation);\n // });\n // } else {\n // const animation = gsap.to(mesh.material, {\n // duration: GSAPAnimationMixer.duration,\n // ease: GSAPAnimationMixer.ease,\n // // transparent: true,\n // onStart: () => {\n // mesh.material.transparent = true;\n // mesh.material.needsUpdate = true;\n // },\n // opacity: config.features.buildingOpacity ? config.features.buildingOpacity : 0,\n // });\n // mixer.addAnimation(animation);\n // }\n // }\n // });\n // // GSAPAnimationMixer.addToMixer(mode === 'switching' ? 'switchBuilding' : 'cylinderEnter');\n // // globalTimeLine.add(tl,0);\n // });\n //\n // // globalTimeLine.play(0);\n}\n\nexport function showAllBuildings () {\n\n const buildings = Buildings.getBuildingsArray();\n const deactivatedBuildings = Buildings.getDeactivatedBuildings();\n\n // if (showWithoutAnimation) {\n deactivatedBuildings.forEach(building => {\n building.modelGroup.visible = true;\n building.setLayer(0);\n building.isHide = false;\n });\n\n buildings.forEach(building => {\n if (projectMode.LiteMode.isActive()){\n settingsData.poiIntersection.forEach(mesh => {\n if (!settingsData.objects_to_intersection.includes(mesh)) {\n settingsData.objects_to_intersection.push(mesh);\n }\n });\n\n settingsData.additionalIntersectionObjects.forEach(mesh => {\n if (!settingsData.objects_to_intersection.includes(mesh)) {\n settingsData.objects_to_intersection.push(mesh);\n }\n });\n\n } else {\n settingsData.poiIntersection.forEach(mesh => {\n if (!settingsData.objects_to_intersection.includes(mesh)) {\n settingsData.objects_to_intersection.push(mesh);\n }\n });\n\n settingsData.additionalIntersectionObjects.forEach(mesh => {\n if (!settingsData.objects_to_intersection.includes(mesh)) {\n settingsData.objects_to_intersection.push(mesh);\n }\n });\n\n settingsData.objects_to_intersection.push(...building.instances);\n }\n });\n\n\n //\n // return;\n // // }\n // let mixer = GSAPAnimationMixer.getMixer('exitToOrbit');\n //\n // if (!mixer) {\n // mixer = GSAPAnimationMixer.registerNewMixer('exitToOrbit');\n // }\n //\n // mixer.addCallback('onStart',() => {\n // buildings.forEach(building => {\n // if (building.isHide) {\n // building.modelGroup.visible = true;\n // }\n // });\n // });\n //\n // mixer.addCallback('onComplete',() => {\n // buildings.forEach(building => {\n // if (building.isHide) {\n // building.isHide = false;\n // }\n // });\n // });\n //\n // buildings.forEach(building => {\n //\n // if (projectMode.LiteMode.isActive()){\n // settingsData.objects_to_intersection.push(\n // ...settingsData.poiIntersection,\n // ...settingsData.additionalIntersectionObjects\n // );\n // } else {\n // settingsData.objects_to_intersection.push(\n // ...building.instances,\n // ...settingsData.poiIntersection,\n // ...settingsData.additionalIntersectionObjects\n // );\n // }\n //\n // if (building.isHide){\n //\n // // const tl = gsap.timeline({\n // // onStart: () => {\n // // building.modelGroup.visible = true;\n // // },\n // // onComplete: () => {\n // // building.isHide = false;\n // // }\n // // });\n // building.modelGroup.traverse(mesh => {\n // if (mesh.isMesh) {\n // if (Array.isArray(mesh.material)) {\n // mesh.material.forEach(item => {\n // const animation = gsap.to(item, {\n // duration: GSAPAnimationMixer.duration,\n // ease: GSAPAnimationMixer.ease,\n // opacity: item.userData.defaultSettings ? item.userData.defaultSettings.opacity : 1,\n // onComplete: () => {\n // if (item.userData.defaultSettings) {\n // item.transparent = item.userData.defaultSettings.transparent;\n // } else {\n // item.transparent = config.resources.bundle.material.transparent || false;\n // }\n // }\n // });\n // mixer.addAnimation(animation);\n // });\n // } else {\n // const animation = gsap.to(mesh.material, {\n // duration: GSAPAnimationMixer.duration,\n // ease: GSAPAnimationMixer.ease,\n // opacity: mesh.material.userData.defaultSettings ? mesh.material.userData.defaultSettings.opacity : 1,\n // onComplete: () => {\n // if (mesh.material.userData.defaultSettings) {\n // mesh.material.transparent = mesh.material.userData.defaultSettings.transparent;\n // } else {\n // mesh.material.transparent = config.resources.bundle.material.transparent || false;\n // }\n // }\n // });\n // mixer.addAnimation(animation);\n // }\n // }\n // });\n //\n // // globalTimeLine.add(tl,0);\n // }\n // });\n //\n // // globalTimeLine.play(0);\n //\n // // return Promise.all(animations);\n}\n\nexport function closeUnitCard(buildingSwitching = false) {\n if (cardsData.multiplyCards && buildingSwitching) {\n if (UnitCardClass.cards.length > 1) {\n UnitCardClass.cards.forEach(card => {\n if (card.html.classList.contains('active')) {\n const activeCard = card.html.getAttribute('data-engineid');\n card.closeWebOrDesktopCard(card.html, activeCard);\n }\n });\n\n const card = UnitCardClass.findCard();\n card && card.compareCardToBuilding();\n\n } else {\n const card = UnitCardClass.findCard();\n card && card.compareCardToBuilding();\n }\n } else {\n if (UnitCardClass.findCard()?.html)\n UnitCardClass.closeMultipleCards();\n }\n}\n\nexport async function enterToTheBuildingWithMaxAvailableApartments () {\n function getAvailableApartments() {\n return Buildings.getBuildingsArray().reduce((acc,value) =>{\n if (Object.keys(value.info).length){\n acc.push({\n name: value.name,\n availableApartments: value.info.availableApartments\n });\n }\n \n return acc;\n },[]);\n }\n \n let availableApartments = getAvailableApartments();\n\n if (projectMode.LiteMode.isActive() && projectMode.LiteMode.modeIs('schematic') && availableApartments.length === 0) {\n await new Promise(resolve => {\n const awaitBuildingsInterval = setInterval(() => {\n if (Buildings.getBuildingsArray().length) {\n availableApartments = getAvailableApartments();\n clearInterval(awaitBuildingsInterval);\n resolve();\n }\n },200);\n })\n }\n\n const maxValue = Math.max(...availableApartments.map(building => building.availableApartments));\n const buildingWithMaxApartments = availableApartments.find(building => building.availableApartments === maxValue);\n if (!buildingWithMaxApartments) {\n return false;\n } else {\n projectMode.Cylinder.enter(Buildings.getBuilding(buildingWithMaxApartments.name));\n return true;\n }\n}\n","import {createHtmlElement, restrictUserInteractions, setCSSVar} from '../../../functions';\nimport { changeLangToCurrent, getCurrentLangDirection} from '../langSwitcher/langSwitcher';\nimport gsap from 'gsap';\nimport {\n changeFormTitle,\n changePlaceholder,\n moveFormToBlock,\n setPropId,\n setTranslateToSendBtn,\n} from '../form/form';\nimport { chatsApplyNow } from '../apply-now/applyNow';\nimport { applyNowContent } from '../apply-now/applyNowContent';\nimport TextPlugin from 'gsap/TextPlugin';\nimport {components, isDesktop, isMobile, isNoMenu, settingsData, UIRoot} from '../../../settings';\nimport { analytics } from '../../analytics/analytics';\nimport {preventMenuWidthAnimation, toggleMenuWidth} from '../../menu/menu';\nimport { PopUp, PopUpPage } from '../../interfaces/pages/PopUp';\nimport {BaseElement} from \"../../interfaces/BaseElement\";\nimport { McID } from '../../menu/contactUs/McID';\nimport { Cookie } from '../../Cookie/Cookie';\nimport {ViewMode} from \"../../../common\";\nimport { log } from 'three/examples/jsm/nodes/math/MathNode';\n\nexport function chatsInit () {\n if (isDesktop && !settingsData.isConferenceHost || isNoMenu) return;\n\n let parent;\n\n if (settingsData.isConferenceHost && !isDesktop){\n if (isMobile) {\n parent = UIRoot;\n } else {\n parent = document.querySelector('.aside__bottom__container');\n }\n } else if (settingsData.isConferenceHost && isDesktop || isDesktop) {\n parent = document.querySelector('.aside__container');\n } else if (isMobile) {\n parent = UIRoot;\n } else {\n parent = document.querySelector('.aside__bottom__container');\n }\n\n components.contactWidget = new ContactWidget(parent);\n \n if (McID.active && !isDesktop) {\n if (!config.contactWidget.active && !settingsData.isConferenceHost) return;\n \n const logoImage = document.querySelector('.mc-id__logo');\n const logoWrapper = document.querySelector('.mc-id__logo-wrapper');\n const anchor = new BaseElement()\n .addClass('mc_id__consolto-anchor')\n .appendTo(logoWrapper)\n .DOMElement;\n const status = document.querySelector('.mc-id__consolto-status');\n status.style.display = 'none';\n\n components.contactWidget.onFlyEnd = () => {\n status.style.display = '';\n logoImage.classList.remove('invisible');\n anchor.remove();\n };\n components.contactWidget.container = anchor;\n components.contactWidget.showFormAnimation = false;\n components.contactWidget.createClone(logoImage);\n components.contactWidget.dropDownClone.classList.remove('hidden');\n logoImage.classList.add('invisible');\n components.contactWidget.createTextAndShowWidget();\n \n McID.addNewButton(components.contactWidget.createOptionButton(),'mc-menu');\n } else {\n components.contactWidget.create();\n }\n}\n\nexport function contactFormChangeLanguage () {\n if (components.contactWidget)\n components.contactWidget.changeLanguage();\n}\n\nexport function contactToAgentWithWidget (propId) {\n if (components.contactWidget)\n components.contactWidget.contactToAgent(undefined,propId);\n}\n\nexport function closeContactWidget () {\n if (components.contactWidget)\n components.contactWidget.close();\n\n PopUpPage.hide();\n}\n\n\nexport class ContactWidget {\n #formUsed = ['.contact-us','.apply__main-container:not(.chats)'];\n #defaultAgentName = {\n en: 'Bridget',\n he: \"ברידג'ט\",\n ru: 'Бриджит'\n };\n #video\n\n constructor (parent, animation = true) {\n this.parent = parent;\n this.animation = animation;\n this.container = null;\n this.widgetBtn = null;\n this.closeBtn = null;\n this.contentContainer = null;\n this.form = null;\n this.opened = false;\n this.showFormAnimation = true;\n this.consoltoIsActive = settingsData.isConferenceHost || config?.consolto?.active;\n this.consoltoWidget = null;\n this.agentStatus = 'offline';\n this.agentElement = null;\n this.cloneBtn = null;\n this.dropDownClone = null;\n this.applyNow = null;\n this.activeContent = null;\n this.blockEvents = false;\n this.formUse = true;\n this.onFlyEnd = () => {};\n this.imageAgentUrl = config.contactWidget?.agentImageUrl || '../img/online.png';\n this.#video = config.features.contactWidget?.video?.active && config.features.contactWidget?.video?.url;\n }\n\n async create () {\n if (!config.contactWidget.active && !settingsData.isConferenceHost) return;\n\n this.container = createHtmlElement('', '', 'div', ['contact-widget__main-container', 'invisible']);\n this.parent.insertAdjacentElement('afterbegin',this.container);\n this.widgetBtn = createHtmlElement(\n this.container,\n '',\n 'div',\n ['contact-widget__btn', 'background-backdrop-filter']\n );\n document.documentElement.style.setProperty('--image-agent-url', `url(\\'${this.imageAgentUrl}\\')`);\n const text = createHtmlElement(this.widgetBtn,changeLangToCurrent('Lets talk'),'span',['language-string']);\n text.setAttribute('data-dictionary','Lets talk');\n\n // if (!isMobile){\n // this.widgetBtn.classList.add('language-string');\n // this.widgetBtn.setAttribute('data-dictionary','Lets talk');\n // }\n\n if (this.consoltoIsActive) {\n const consoltoScript = createHtmlElement(document.body, '', 'script', []);\n consoltoScript.setAttribute('id', 'et-iframe');\n consoltoScript.setAttribute('data-version', '0.5');\n\n if (settingsData.isConferenceHost){\n consoltoScript.setAttribute('data-widgetId', config.features.contactWidget.consolto.id);\n } else {\n consoltoScript.setAttribute('data-widgetId', config?.consolto.id);\n }\n\n consoltoScript.setAttribute('src', 'https://client.consolto.com/iframeApp/iframeApp.js');\n this.widgetBtn.classList.add('consolto');\n\n window.addEventListener('consoltoEvent', this.addConsoltoEventListener.bind(this));\n }\n\n this.contentContainer = createHtmlElement(this.container, '', 'div', ['contact-widget__content__container', 'hidden']);\n this.closeBtn = createHtmlElement(this.contentContainer, '', 'div', ['contact-widget__close__btn', 'icon-close']);\n\n this.closeBtn.addEventListener('click', this.close.bind(this));\n this.widgetBtn.addEventListener('click', this.contactToAgent.bind(this));\n\n this.cloneBtn = this.widgetBtn.cloneNode(true);\n this.cloneBtn.classList.add('clone');\n this.cloneBtn.textContent = '';\n\n if (isMobile){\n this.cloneBtn.classList.add('normal__size');\n }\n\n // this.dropDownClone = this.widgetBtn.cloneNode(true);\n // this.dropDownClone.classList.add('drop-down__clone');\n // this.dropDownClone.textContent = '';\n // const dropDownText = createHtmlElement(this.dropDownClone,'','span',['drop-down__text','hidden']);\n //\n // if (this.#video) {\n // dropDownText.style.paddingBottom = '140px';\n // this.#addVideoToTheWidget();\n // }\n this.createClone();\n\n if (this.formUse){\n this.form = createHtmlElement(this.contentContainer,'','div',['chats__form']);\n this.form.insertAdjacentElement('afterbegin',this.cloneBtn);\n this.form.classList.add('hidden');\n }\n\n this.applyNow = chatsApplyNow(this.contentContainer, applyNowContent);\n this.applyNow.insertAdjacentElement('afterbegin',this.cloneBtn.cloneNode(true));\n \n // const showDate = Cookie.getCookie('contactWidgetShowDate');\n // let text;\n // const agentNames = { agentName: {} };\n //\n // config.contactWidget.agentName.forEach(name => {\n // if (name.value) {\n // agentNames.agentName[name.lang] = name.value;\n // } else {\n // agentNames.agentName[name.lang] = this.#defaultAgentName[name.lang];\n // }\n // });\n //\n // if (!showDate){\n // Cookie.setCookie('contactWidgetShowDate',Date.now());\n // text = changeLangToCurrent('contactWidgetWelcomeText',[agentNames]);\n // } else {\n // const dateFrom = Number(showDate);\n // const expiredDate = dateFrom + 2629800000;\n //\n // if (Date.now() > expiredDate){\n // text = changeLangToCurrent('contactWidgetWelcomeText',[agentNames]);\n // } else {\n // text = changeLangToCurrent('contactWelcomeText2');\n // }\n // }\n // this.showWidget(text);\n this.createTextAndShowWidget();\n }\n \n createClone(element) {\n this.dropDownClone = element ? element.cloneNode(true) : this.widgetBtn.cloneNode(true);\n this.dropDownClone.classList.add('drop-down__clone');\n this.dropDownClone.textContent = '';\n const dropDownText = createHtmlElement(this.dropDownClone,'','span',['drop-down__text','hidden']);\n \n if (this.#video) {\n dropDownText.style.paddingBottom = '140px';\n this.#addVideoToTheWidget();\n }\n }\n \n createTextAndShowWidget() {\n const showDate = Cookie.getCookie('contactWidgetShowDate');\n let text;\n const agentNames = { agentName: {} };\n \n config.contactWidget.agentName.forEach(name => {\n if (name.value) {\n agentNames.agentName[name.lang] = name.value;\n } else {\n agentNames.agentName[name.lang] = this.#defaultAgentName[name.lang];\n }\n });\n \n if (!showDate){\n Cookie.setCookie('contactWidgetShowDate',Date.now());\n text = changeLangToCurrent('contactWidgetWelcomeText',[agentNames]);\n } else {\n const dateFrom = Number(showDate);\n const expiredDate = dateFrom + 2629800000;\n \n if (Date.now() > expiredDate){\n text = changeLangToCurrent('contactWidgetWelcomeText',[agentNames]);\n } else {\n text = changeLangToCurrent('contactWelcomeText2');\n }\n }\n this.showWidget(text);\n }\n \n createOptionButton() {\n if (!config.contactWidget.active && !settingsData.isConferenceHost) return;\n \n const widgetBtn = createHtmlElement(\n '',\n changeLangToCurrent('Lets talk'),\n 'div',\n ['mc-id__contact-widget__btn','language-string','icon-video-call']\n );\n widgetBtn.setAttribute('data-dictionary','Lets talk');\n widgetBtn.setAttribute('data-role','consolto');\n \n if (this.consoltoIsActive) {\n const consoltoScript = createHtmlElement(document.body, '', 'script', []);\n consoltoScript.setAttribute('id', 'et-iframe');\n consoltoScript.setAttribute('data-version', '0.5');\n \n if (settingsData.isConferenceHost) {\n consoltoScript.setAttribute('data-widgetId', config.features.contactWidget.consolto.id);\n } else {\n consoltoScript.setAttribute('data-widgetId', config?.consolto.id);\n }\n \n consoltoScript.setAttribute('src', 'https://client.consolto.com/iframeApp/iframeApp.js');\n window.addEventListener('consoltoEvent', this.addConsoltoEventListener.bind(this));\n }\n \n const popUp = new PopUp({\n id: 'consolto-form',\n needsCloseBtn: true,\n destroy: false\n });\n \n popUp.onClose = () => {\n popUp.hide();\n setTimeout(() => {\n this.close();\n },300);\n };\n \n this.contentContainer = createHtmlElement(popUp.content, '', 'div', ['contact-widget__content__container','mc-id__contact-widget__content__container', 'hidden']);\n // this.closeBtn = createHtmlElement(this.contentContainer, '', 'div', ['contact-widget__close__btn', 'icon-close']);\n // this.closeBtn.addEventListener('click', this.close.bind(this));\n \n new BaseElement()\n .addClass('mc-id__logo','mc-id__logo-form')\n .appendTo(this.contentContainer)\n .DOMElement;\n \n widgetBtn.addEventListener('click', (e) => {\n // if (!this.isFormSend()) {\n // popUp.show();\n // }\n this.contactToAgent(e);\n });\n \n if (this.formUse){\n this.form = createHtmlElement(this.contentContainer,'','div',['chats__form']);\n this.form.classList.add('hidden');\n }\n \n this.applyNow = chatsApplyNow(this.contentContainer, applyNowContent);\n \n return widgetBtn;\n }\n\n getForm(propId){\n let activeElement = false;\n\n this.#formUsed.forEach(query => {\n const form = document.querySelector(query)?.querySelector('.form__container-main');\n\n if (form) {\n activeElement = query;\n }\n });\n\n switch (activeElement) {\n case '.contact-us':\n // removeContactUs();\n moveFormToBlock(this.form);\n\n break;\n\n case '.apply__main-container:not(.chats)':\n moveFormToBlock(this.form);\n const applyContainer = document.querySelector('.apply__main-container:not(.chats)');\n applyContainer.remove();\n break;\n\n default:\n moveFormToBlock(this.form);\n\n break;\n\n }\n\n this.#customiseForm(propId);\n }\n\n addConsoltoEventListener (e) {\n if (e.detail.consoltoReady) {\n this.consoltoWidget = new CustomEvent('consolto_h2w', {\n detail: {\n 'et-click-type': 'open-widget',\n 'et-agent-id': config.features.contactWidget?.consolto?.agentId || '',\n },\n });\n }\n \n const iframe = document.querySelector('#expertips_iframe');\n\n if (e.detail?.action === 'AVAILABILITY_STATE_CHANGE') {\n this.changeAgentStatus(e.detail.value);\n this.changeButtonTitle();\n }\n\n if (e.detail?.action === 'OPEN_WIDGET'){\n this.btnVisibleToggle('hide');\n if (iframe) {\n iframe.style.display = 'block';\n }\n }\n\n if (e.detail?.action === 'CLOSE_WIDGET') {\n preventMenuWidthAnimation(false);\n toggleMenuWidth({action: 'mini', source: 'eventListener'});\n this.btnVisibleToggle('show');\n if (iframe) {\n iframe.style.display = 'none';\n }\n }\n\n if (e.detail?.action === 'CALL_STARTED_CLIENT'){\n analytics('call_start');\n }\n\n }\n\n changeAgentStatus (status) {\n this.agentStatus = status;\n \n if (McID.active) {\n McID.updateConsoltoStatus(status);\n } else {\n if (isMobile){\n this.cloneBtn.className = `contact-widget__btn consolto clone normal__size ${status}`;\n this.widgetBtn.className = `contact-widget__btn consolto ${status}`;\n } else {\n this.cloneBtn.className = `contact-widget__btn consolto clone ${status}`;\n this.widgetBtn.className = `contact-widget__btn language-string consolto ${status}`;\n }\n }\n }\n\n changeButtonTitle() {\n if (isMobile || McID.active)\n return;\n\n switch (this.agentStatus) {\n case 'offline':\n this.widgetBtn.innerHTML = changeLangToCurrent('contactUs');\n this.widgetBtn.setAttribute('data-dictionary','contactUs');\n break;\n case 'available':\n this.widgetBtn.innerHTML = changeLangToCurrent('Lets talk');\n this.widgetBtn.setAttribute('data-dictionary','Lets talk');\n break;\n default:\n console.log('ContactWidget:ChangeButtonTitle:Default case triggered');\n break;\n }\n }\n\n btnVisibleToggle(action){\n if (McID.active) return;\n switch (action) {\n case 'show':\n this.widgetBtn.style.visibility = 'visible';\n break;\n case 'hide':\n this.widgetBtn.style.visibility = 'hidden';\n break;\n }\n }\n\n #customiseForm(propId){\n if (!config.general.leadForm && !settingsData.isConferenceHost) return;\n\n this.form.querySelector('input[type=\"email\"]').parentElement.classList.add('hidden');\n\n if (propId){\n setPropId(this.form, propId);\n }\n \n changeFormTitle('Lets talk');\n }\n\n contactToAgent (e,propId) {\n if (e?.target?.classList?.contains('contact-widget__btn') && this.opened){\n return;\n }\n\n if (this.consoltoIsActive) {\n\n // if (this.isFormSend()){\n //\n // if (this.opened){\n // const popup = PopUp.getScope('consolto-form');\n // if (popup) {\n // popup.hide();\n // } else {\n // this.close();\n // }\n // }\n //\n this.openConsoltoWidget();\n //\n // } else {\n //\n // if (this.formUse) {\n // this.getForm(propId);\n // this.activeContent = this.form;\n // this.open();\n // } else {\n // this.openConsoltoWidget();\n // }\n // }\n\n /*switch (this.agentStatus) {\n case 'offline':\n\n if (this.opened) {\n this.showApplyNow();\n\n } else {\n\n if (this.isFormSend()) {\n this.activeContent = this.applyNow;\n this.open();\n } else {\n this.activeContent = this.form;\n this.open();\n }\n }\n break;\n\n case 'available':\n\n if (this.isFormSend()){\n\n if (this.opened){\n this.close();\n }\n\n this.openConsoltoWidget();\n\n } else {\n\n if (this.opened){\n this.openConsoltoWidget();\n } else {\n this.activeContent = this.form;\n this.open();\n }\n\n }\n break;\n\n case 'busy':\n\n if (this.opened) {\n this.showApplyNow();\n\n } else {\n\n if (this.isFormSend()) {\n this.activeContent = this.applyNow;\n this.open();\n } else {\n this.activeContent = this.form;\n this.open();\n }\n }\n break;\n\n }*/\n\n } else {\n\n if (this.isFormSend()) {\n if (this.opened){\n this.showApplyNow();\n } else {\n this.activeContent = this.applyNow;\n this.open();\n }\n } else {\n\n if (this.formUse){\n this.getForm(propId);\n this.activeContent = this.form;\n } else {\n this.activeContent = this.applyNow;\n }\n this.open();\n }\n }\n\n preventMenuWidthAnimation(true);\n }\n\n openConsoltoWidget () {\n window.dispatchEvent(this.consoltoWidget);\n }\n\n showApplyNow () {\n if (this.activeContent === this.applyNow) return;\n\n const tl = gsap.timeline({\n onComplete: () => {\n this.activeContent = this.applyNow;\n },\n });\n\n if (this.widgetBtn.style.visibility === 'hidden'){\n this.widgetBtn.style.visibility = 'visible';\n }\n\n\n tl.fromTo(this.form, {\n transform: 'rotateY(0)',\n }, {\n transform: 'rotateY(90deg)',\n duration: .2,\n onComplete: () => {\n this.form.classList.add('hidden');\n this.applyNow.classList.remove('hidden');\n\n tl.fromTo(this.applyNow, {\n transform: 'rotateY(-90deg)',\n }, {\n transform: 'rotateY(0)',\n duration: .2,\n });\n },\n });\n }\n\n open () {\n if (this.opened) return;\n if (this.blockEvents) return;\n \n this.resetStyle();\n\n this.activeContent.classList.remove('hidden');\n this.contentContainer.classList.remove('hidden');\n\n // tl.fromTo(this.contentContainer, {\n // height: 0,\n // }, {\n // height: 'auto',\n // duration: .5,\n // onStart: () => {\n // if (this.activeContent === this.form){\n // this.widgetBtn.style.visibility = 'hidden';\n // }\n // this.contentContainer.style.padding = '';\n // },\n // });\n \n if (this.showFormAnimation) {\n this.blockEvents = true;\n const tl = gsap.timeline({\n onComplete: () => {\n this.opened = true;\n this.blockEvents = false;\n },\n });\n \n tl.fromTo(this.contentContainer, {\n transform: `translate(50%, 50%) scale(0)`\n }, {\n transform: `translate(0) scale(1)`,\n duration: .5,\n onStart: () => {\n this.btnVisibleToggle('hide');\n this.contentContainer.style.padding = '';\n },\n });\n \n \n tl.fromTo([this.activeContent, this.closeBtn], {\n opacity: 0,\n }, {\n opacity: 1,\n duration: .8,\n });\n } else {\n this.opened = true;\n }\n }\n\n resetStyle () {\n this.applyNow.classList.add('hidden');\n this.applyNow.style.opacity = '';\n this.applyNow.style.transform = '';\n\n if (this.formUse){\n this.form.classList.add('hidden');\n this.form.style.opacity = '';\n this.form.style.transform = '';\n }\n\n this.contentContainer.style.transform = '';\n this.contentContainer.style.height = '';\n }\n\n close () {\n if (!this.opened || this.blockEvents) return;\n\n this.blockEvents = true;\n\n this.contentContainer.classList.add('hidden');\n this.opened = false;\n this.btnVisibleToggle('show');\n this.blockEvents = false;\n this.resetStyle();\n preventMenuWidthAnimation(false);\n }\n\n isFormSend () {\n const sendDate = Cookie.getCookie('contactFormSend');\n\n if (sendDate){\n const parseSendDate = Number(sendDate);\n const expiredDate = parseSendDate + 2629800000;\n\n return Date.now() <= expiredDate;\n\n } else {\n\n return false;\n }\n }\n\n changeLanguage () {\n if (!this.form)\n return;\n\n setTranslateToSendBtn(this.form);\n changePlaceholder(this.form);\n }\n\n showWidget (text) {\n if (!this.animation) {\n this.container.classList.remove('hidden','invisible');\n\n return;\n }\n\n const dir = getCurrentLangDirection();\n const side = isDesktop || isMobile ? 0 : dir === 'rtl' ? -100 : 100;\n const avatarSize = isMobile ? 10 : 80;\n const topDropDown = isMobile ? settingsData.isLandscape ? 10 : 100 : 200;\n const diff = isMobile ? 8 : 5;\n const scale = isMobile ? 0.25 : 0.5;\n\n gsap.registerPlugin(TextPlugin);\n\n const tl = gsap.timeline();\n const closeBtn = new BaseElement()\n .addClass('drop-down__close-btn','icon-close','hidden')\n .appendTo(this.dropDownClone)\n .event('click',() => {\n tl.clear();\n this.#hideText(tl, 0);\n this.#flyToWidget(tl, avatarSize, diff, scale);\n closeBtn.addClass('hidden');\n });\n\n document.body.appendChild(this.dropDownClone);\n\n // Drop down\n tl.to(this.dropDownClone,{\n transform: `translate(${window.innerWidth / 2 + side}px, ${topDropDown}px)`,\n left: 0,\n top: 0,\n duration: .5\n });\n\n // Print\n tl.to(this.dropDownClone.querySelector('.drop-down__text'),{\n text: text,\n duration: Math.ceil(text.split(' ').length / 4),\n onStart: () => {\n this.dropDownClone.querySelector('.drop-down__text').classList.remove('hidden');\n closeBtn.removeClass('hidden');\n },\n onUpdate: () => {\n const textElement = this.dropDownClone.querySelector('.drop-down__text');\n const textElementHeight = textElement.getBoundingClientRect().height;\n const videoWrapperPosition = textElementHeight - 50;\n setCSSVar('--videoWrapperPosition', `${videoWrapperPosition}px`);\n }\n });\n\n this.#hideText(tl);\n this.#flyToWidget(tl, avatarSize, diff, scale);\n }\n\n positionRecalc() {\n if (this.dropDownClone) {\n const dir = getCurrentLangDirection();\n const side = isDesktop || isMobile ? 0 : dir === 'rtl' ? -100 : 100;\n const topDropDown = isMobile ? settingsData.isLandscape ? 10 : 100 : 200;\n \n gsap.to(this.dropDownClone,{\n transform: `translate(${window.innerWidth / 2 + side}px, ${topDropDown}px)`,\n left: 0,\n top: 0,\n duration: .5\n });\n }\n }\n\n #flyToWidget(tl, avatarSize, diff, scale) {\n tl.to(this.dropDownClone, {\n transform: () => {\n const containerPosition = this.container.getBoundingClientRect();\n const asideContainer = document.querySelector('.aside__container');\n if (asideContainer.classList.contains('minimized')) {\n avatarSize = 40;\n }\n return `translate(${containerPosition.x + avatarSize + diff}px,${containerPosition.y - avatarSize + diff}px) scale(${scale})`;\n },\n duration: 1,\n onComplete: () => {\n this.container.classList.remove('hidden','invisible');\n this.dropDownClone.remove();\n this.dropDownClone = null;\n this.onFlyEnd();\n\n restrictUserInteractions(false);\n },\n onStart: () => {\n if (this.#video)\n this.#removeVideoFromWidget();\n \n this.dropDownClone.querySelector('.drop-down__close-btn').classList.add('hidden');\n }\n })\n }\n\n #hideText(tl, delay = 2.5) {\n tl.to(this.dropDownClone.querySelector('.drop-down__text'),{\n opacity: 0,\n duration: .2,\n delay: delay,\n onComplete: () => this.dropDownClone.querySelector('.drop-down__text').classList.add('hidden')\n });\n }\n\n #addVideoToTheWidget() {\n const videoWrapperElement = new BaseElement()\n .addClass('drop-down__video-wrapper')\n .event('click', videoWrapperClickHandler, {once: true})\n .appendTo(this.dropDownClone);\n const placeholder = new BaseElement('img')\n .addClass('video-placeholder')\n .appendTo(videoWrapperElement.DOMElement);\n placeholder.DOMElement.src = config.features.contactWidget?.video?.placeholder;\n const playIcon = new BaseElement()\n .addClass('playpause', 'icon-play')\n .appendTo(videoWrapperElement.DOMElement);\n\n const videoElement = new BaseElement('video')\n .addClass('drop-down__video')\n .appendTo(videoWrapperElement.DOMElement);\n videoElement.DOMElement.controls = true;\n videoElement.DOMElement.autoplay = false;\n videoElement.DOMElement.muted = false;\n videoElement.DOMElement.allowfullscreen = true;\n\n const videoSource = new BaseElement('source')\n .appendTo(videoElement.DOMElement);\n videoSource.DOMElement.src = this.#video;\n videoSource.DOMElement.type = `video/mp4`;\n\n function videoWrapperClickHandler() {\n placeholder.remove();\n playIcon.remove();\n const asideContainer = document.querySelector('.aside__container');\n const offset = asideContainer.getAttribute('data-initial-width');\n const videoPopUp = new PopUpPage('');\n videoPopUp.addClass('widget-video');\n videoPopUp.contentElement.appendChild(videoWrapperElement.DOMElement);\n videoPopUp.root.style.width = `calc(100% - ${offset}px`;\n // videoElement.DOMElement.controls = true;\n videoElement.DOMElement.pause();\n }\n }\n\n #removeVideoFromWidget() {\n const videoWrapper = this.dropDownClone.querySelector('.drop-down__video-wrapper');\n if (videoWrapper)\n videoWrapper.remove();\n }\n}\n","'use strict';\n\nimport TWEEN from '../../../libs/tween.umd';\nimport {\n autoRotateTimerAction,\n getCurrentCameraDistance, getOrbitControlsCurrentPolarAngle,\n getOrbitControlsDistanceAndPan,\n getPolarAngleFromViewMode,\n getWorldData, setMinAndMaxControlsDistance,\n} from '../../controls/orbitControls';\nimport { Buildings, isMobile, settingsData, threeJsVariables } from '../../../settings';\nimport { animateCamera } from '../../threejs/animation';\nimport { Box3, Spherical, Vector3 } from 'three';\nimport { userPrevent } from '../../../functions';\nimport { ViewMode } from '../../../common';\nimport { BaseElement } from '../../interfaces/BaseElement';\nimport { CylinderBase } from '../../cylinderGrid/CylinderBase';\n\nconst _spherical = new Spherical();\nconst _worldPosition = new Vector3();\nconst _axis = new Vector3(0,-1,0).normalize();\n\nexport class Compass {\n static scopes = {};\n\n constructor (parent,id,camera,controls) {\n this.id = id;\n this.camera = camera;\n this.controls = controls;\n this.vector = new Vector3();\n this.spherical = new Spherical();\n\n this.element = new BaseElement()\n .addClass('compass-container','background-backdrop-filter')\n .appendTo(parent);\n \n if (this.id === 'orbit' && threeJsVariables.googleMiniMap.params.active && !isMobile) {\n parent.classList.add('--mini-map-position');\n }\n\n this.btn = new BaseElement('button')\n .addClass('compass', 'icon-compas')\n .addAttribute('data-type','compass')\n .appendTo(this.element.DOMElement)\n .DOMElement;\n\n Compass.scopes[this.id] = this;\n }\n\n rotate() {\n this.vector.copy(this.camera.position).sub(this.controls.target);\n this.spherical.setFromVector3(this.vector);\n this.btn.style.transform = `rotate(${this.spherical.theta - config.threejs.compass.correction}rad)`;\n }\n\n addClickHandler(func) {\n this.btn.addEventListener('click',func);\n }\n\n addClass(className) {\n this.element.addClass(className);\n }\n\n visible(state) {\n if (state) {\n this.element.removeClass('hidden');\n } else {\n this.addClass('hidden');\n }\n }\n\n dispose() {\n this.element.DOMElement.remove();\n this.btn = null;\n this.element = null;\n this.camera = null;\n this.controls = null;\n this.vector = null;\n this.spherical = null;\n delete Compass.scopes[this.id];\n }\n\n static getScope(id) {\n return Compass.scopes[id];\n }\n\n}\n\nexport function compassInit (container = document.body) {\n const compass = new Compass(container,'orbit',threeJsVariables.perspectiveCamera,threeJsVariables.orbitControls);\n compass.addClickHandler(compassClickHandler);\n compass.rotate();\n}\n\nexport function compassClickHandler(arrowObject) {\n if (userPrevent())\n return;\n\n autoRotateTimerAction('update');\n\n const {cameraVector,orbitControlsVector} = getWorldData();\n const {minAngle,maxAngle} = getPolarAngleFromViewMode();\n const currentDistance = getCurrentCameraDistance();\n const currentPolarAngle = getOrbitControlsCurrentPolarAngle();\n\n let orbitTarget;\n\n if (settingsData.activeViewMode === ViewMode.Orbit){\n const defaultOrbitControlsTarget = config.threejs.orbitControls.target;\n orbitTarget = new Vector3(defaultOrbitControlsTarget.x,defaultOrbitControlsTarget.y,defaultOrbitControlsTarget.z);\n } else {\n orbitTarget = orbitControlsVector;\n }\n\n let vector;\n const direction = new Vector3().copy(cameraVector).sub(orbitControlsVector);\n const compass = Compass.getScope('orbit');\n\n if (arrowObject.isMesh) {\n arrowObject.getWorldPosition(_worldPosition);\n const arrowDirection = new Vector3().subVectors(_worldPosition,CylinderBase.center);\n _spherical.setFromVector3(arrowDirection);\n vector = direction.applyAxisAngle(_axis, compass.spherical.theta - _spherical.theta).add(orbitTarget);\n } else {\n vector = direction.applyAxisAngle(_axis, compass.spherical.theta - config.threejs.compass.correction).add(orbitTarget);\n }\n\n animateCamera(\n cameraVector,\n vector,\n orbitControlsVector,\n orbitTarget,\n undefined,\n currentDistance,\n currentPolarAngle,\n undefined,\n 1000,\n TWEEN.Easing.Sinusoidal.InOut,\n ()=>{\n threeJsVariables.orbitControls.maxPolarAngle = currentPolarAngle;\n threeJsVariables.orbitControls.minPolarAngle = currentPolarAngle;\n },\n ()=>{\n threeJsVariables.orbitControls.setPolarAngle(currentPolarAngle);\n threeJsVariables.orbitControls.maxPolarAngle = maxAngle;\n threeJsVariables.orbitControls.minPolarAngle = minAngle;\n setMinAndMaxControlsDistance();\n }\n );\n}\n\n\n/**\n * Change compass position in landscape mode when building destroyed\n */\n\n// export const compassPositionChange = (moveDirection) => {\n// return;\n// if (!settingsData.isLandscape) return;\n// const bottomNavBar = document.querySelector('.bottom__nav-bar');\n// const currentDirection = document.documentElement.getAttribute('dir');\n//\n// if (currentDirection === 'rtl' && settingsData.buildingDestroyed) {\n// bottomNavBar.style.left = '100px';\n// bottomNavBar.style.right = 'initial';\n// } else if (currentDirection === 'ltr' && settingsData.buildingDestroyed) {\n// bottomNavBar.style.right = '100px';\n// bottomNavBar.style.left = 'initial';\n// } else if (!settingsData.buildingDestroyed) {\n// bottomNavBar.removeAttribute('style');\n// bottomNavBar.style.opacity = '1';\n// }\n//\n// // switch (moveDirection) {\n// // case 'left':\n// // bottomNavBar.style.left = '100px';\n// // break;\n// // case 'right':\n// // bottomNavBar.style.right = '100px';\n// // break;\n// // case 'default':\n// // bottomNavBar.removeAttribute('style');\n// // bottomNavBar.style.opacity = '1';\n// // break;\n// // }\n// }\n\nexport function compassVisibleToggle (action) {\n const compass = Compass.getScope('orbit');\n if (!compass)\n return;\n\n switch (action) {\n case 'show':\n compass.visible(true);\n break;\n case 'hide':\n compass.visible(false);\n break;\n }\n\n}\n","'use strict';\n\nimport { Buildings, isMobile, settingsData, threeJsVariables } from '../../../settings';\nimport {\n lazyLoadingData\n} from '../../../functions';\nimport {\n getCurrentCameraDistance,\n getOrbitControlsDistanceAndAngle, getOrbitControlsDistanceAndPan,\n rotateToCamera,\n} from '../../controls/orbitControls';\nimport {ViewMode} from \"../../../common\";\nimport {bombButtonInitActionHandler} from \"../../controls/destroyBuilding\";\nimport {\n CircleGeometry,\n LineBasicMaterial,\n Mesh,\n MeshBasicMaterial,\n ShapeGeometry,\n Vector3,\n BufferGeometry,\n Line,\n Box3,\n Group,\n Vector2\n} from 'three';\nimport { FontLoader } from 'three/examples/jsm/loaders/FontLoader'\nimport {changeLangToCurrent, getCurrentLang} from \"../langSwitcher/langSwitcher\";\nimport * as THREE from \"three\";\nimport { BmbyMode } from '../../mode/BmbyMode';\n\n\nlet fontLoaded = false;\nlet fontLoader = null;\nlet fontRegular = null;\nlet fontBold = null;\n\nexport async function cylinderFloorNumbers() {\n if (settingsData.activeViewMode !== ViewMode.Cylinder)\n return;\n\n const cylinderFloorSliderGroupName = 'cylinderFloorNumbers';\n const activeBuilding = Buildings.getActiveBuilding();\n if (/*threeJsVariables.scene.getObjectByName(cylinderFloorSliderGroupName) ||*/ activeBuilding?.floors.length === 1)\n return;\n\n let cylinderFloorSliderGroup = threeJsVariables.scene.getObjectByName(cylinderFloorSliderGroupName);\n\n if (cylinderFloorSliderGroup /*&& group.children.length*/) {\n threeJsVariables.scene.remove(cylinderFloorSliderGroup);\n\n function disposeNode(node) {\n if (node instanceof THREE.Mesh) {\n if (node.geometry) {\n node.geometry.dispose();\n }\n\n if (node.material) {\n if (Array.isArray(node.material)) {\n node.material.forEach(material => {\n if (material.map)\n material.map.dispose();\n material.dispose();\n });\n } else {\n if (node.material.map)\n node.material.map.dispose();\n node.material.dispose();\n }\n }\n }\n }\n\n function disposeHierarchy(node, callback) {\n for (let i = node.children.length - 1; i >= 0; i--) {\n let child = node.children[i];\n disposeHierarchy(child, callback);\n callback(child);\n }\n }\n\n disposeHierarchy(cylinderFloorSliderGroup, disposeNode);\n }\n\n cylinderFloorSliderGroup = new Group();\n cylinderFloorSliderGroup.name = cylinderFloorSliderGroupName;\n\n if (!fontLoaded) {\n fontLoader = new FontLoader();\n fontRegular = await lazyLoadingData(fontLoader, 'fonts/assistant/Assistant_Regular.json');\n fontBold = await lazyLoadingData(fontLoader, 'fonts/assistant/Assistant_Bold.json');\n fontLoader = true;\n }\n\n // const allFonts = await lazyLoadingAll([fontRegular, fontBold]);\n\n\n const sortedFloorSelections = activeBuilding.selections.sort((a, b) => a.floor - b.floor);\n const edgeNumbers = [sortedFloorSelections[0].floor, sortedFloorSelections[sortedFloorSelections.length - 1].floor];\n const totalFloors = activeBuilding.selections.length;\n const selectionBoxes = activeBuilding.selectionsGroup;\n selectionBoxes.children.forEach((box) => {\n switch (box.name.charAt(0)) {\n case 'F': {\n const floorNumber = parseInt(box.name.split('_')[1], 10);\n const edgeFloor = edgeNumbers.includes(floorNumber);\n const cylinderFloorElements = createFloorNumber(box, fontRegular, fontBold, floorNumber, selectionBoxes, edgeFloor, totalFloors);\n cylinderFloorSliderGroup.add(cylinderFloorElements);\n break;\n }\n case 'R':\n break;\n case 'L':\n break;\n case 'S':\n break;\n }\n });\n\n const scene = threeJsVariables.scene;\n scene.add(cylinderFloorSliderGroup);\n threeJsVariables.renderList.reorder();\n showOrHideCylinderFloorNumbers();\n rotateCylinderFloorNumbers();\n}\n\nfunction createFloorNumber(...options) {\n const [box, fontRegular, fontBold, floorNumber, selectionBoxes, edgeFloor, totalFloors] = options;\n const floorNumbersSize = config.threejs.floorNumbers.size;\n const multiple = getMultiple();\n\n const positionLeftOfBuilding = - 1;\n const baseElementsPosition = floorNumbersSize;\n let color = 0xffffff;\n\n (config?.resources?.background?.cylinderBg === 'sky') && (color = 0x000000);\n\n const parent = box.parent.name.split('_');\n\n const floorCenterSel = selectionBoxes.getWorldPosition(new Vector3());\n const boxSize = new Box3().setFromObject(box).getSize(new Vector3());\n const boxCenter = new Box3().setFromObject(box).getCenter(new Vector3());\n\n const apartments = box.children.filter(apt => !apt.name.startsWith(config.resources.bundle.selectionBoxes.floorPlugName) && !apt.name.startsWith(`${parent[0]}_amenity`));\n\n const apartmentsGroup = new Group();\n apartmentsGroup.position.set(box.position.x,box.position.y,box.position.z);\n\n for (let i = 0; i < apartments.length; i++){\n const cloneApt = apartments[i].clone();\n apartmentsGroup.add(cloneApt);\n }\n\n const apartmentsGroupBoxSize = new Box3().setFromObject(apartmentsGroup).getSize(new Vector3());\n const apartmentsGroupBoxCenter = new Box3().setFromObject(apartmentsGroup).getCenter(new Vector3());\n\n let minHeightApt = null;\n let floorBox, floorCenter;\n\n apartments.forEach((apt) =>{\n const aptBox = new Box3().setFromObject(apt);\n const size = aptBox.getSize(new Vector3());\n if (Math.floor(size.y) !== Math.floor(apartmentsGroupBoxSize.y)){\n minHeightApt = apt;\n }\n });\n\n if (!minHeightApt){\n floorBox = new Box3().setFromObject(apartments[0]);\n floorCenter = floorBox.getCenter(new Vector3());\n } else {\n floorBox = new Box3().setFromObject(minHeightApt);\n floorCenter = floorBox.getCenter(new Vector3());\n\n apartmentsGroupBoxCenter.y = apartmentsGroupBoxCenter.y + selectionBoxes.position.y;\n\n if (floorCenter.y < apartmentsGroupBoxCenter.y){\n floorCenter = new Vector3(floorCenter.x,apartmentsGroupBoxCenter.y,floorCenter.z);\n }\n\n }\n\n const floorElements = new Group();\n floorElements.name = 'floorElements';\n floorElements.position.set(floorCenterSel.x, floorCenter.y, floorCenterSel.z);\n floorElements.userData.floorIndex = floorNumber;\n floorElements.userData.floor = floorNumber;\n\n const floorNumberBool = (!(floorNumber % multiple) || edgeFloor) && totalFloors >= 10;\n const size = (floorNumberBool) ? 1.3 : 1;\n const font = (floorNumberBool) ? fontBold : fontRegular;\n\n const isBuildingOpacity = Boolean(config.features.buildingOpacity);\n\n const isGroundFloor = settingsData.groundFloor.isActive && (parseInt(settingsData.groundFloor.floor) === parseInt(floorNumber));\n const shortLabel = settingsData.groundFloor.shortLabel;\n // const shapes = font.generateShapes(`${floorNumber}`, size);\n const shapes = font.generateShapes(`${isGroundFloor ? changeLangToCurrent(shortLabel) : floorNumber}`, size);\n\n const geometry = new ShapeGeometry(shapes);\n const material = new MeshBasicMaterial({color, transparent: isBuildingOpacity});\n const number = new Mesh(geometry, material);\n Boolean(config.features.buildingOpacity) && number.layers.enable(1);\n\n const textPositionCorrection = (floorNumber < multiple && floorNumber > 0) ? size * 0.5 : 0;\n const positionNotBoldCorrection = (!floorNumberBool) ? size : 0;\n number.position.set(0, 0.5, (baseElementsPosition - textPositionCorrection - positionNotBoldCorrection) * positionLeftOfBuilding );\n number.userData.defaultPosition = new Vector3(0, 0.5, (baseElementsPosition - textPositionCorrection - positionNotBoldCorrection) * positionLeftOfBuilding);\n number.rotation.y = Math.PI * -0.5;\n number.name = `floor-${floorNumber}`;\n\n const line = createLine(baseElementsPosition, positionLeftOfBuilding, color, positionNotBoldCorrection);\n const circle = createCircle(baseElementsPosition, positionLeftOfBuilding, size, number);\n\n floorElements.add(number);\n floorElements.add(line);\n floorElements.add(circle);\n if (!BmbyMode.active) {\n floorElements.visible = (floorNumberBool);\n }\n\n return floorElements;\n}\n\nfunction createCircle(baseElementsPosition, positionLeftOfBuilding, size, number) {\n const geometryCircle = new CircleGeometry(size, 30);\n const materialCircle = new MeshBasicMaterial({\n transparent: true,\n opacity: 0\n });\n const circle = new Mesh(geometryCircle, materialCircle);\n circle.position.set(number.position.x + 0.2, 0, (baseElementsPosition - size) * positionLeftOfBuilding);\n circle.rotation.y = Math.PI * -0.5;\n circle.position.y = size;\n circle.name = 'circle';\n circle.visible = false;\n\n return circle;\n}\n\nfunction createLine(baseElementsPosition, positionLeftOfBuilding, color, positionNotBoldCorrection) {\n const materialLine = new LineBasicMaterial({\n color,\n transparent: true,\n opacity: 0.3\n });\n const geometryLine = new BufferGeometry().setFromPoints([\n new Vector3(0, 0, 0),\n new Vector3(0, 0, (baseElementsPosition - positionNotBoldCorrection) * positionLeftOfBuilding)\n ]);\n const line = new Line(geometryLine, materialLine);\n line.geometry.attributes.position.needsUpdate = true;\n line.name = 'line';\n Boolean(config.features.buildingOpacity) && line.layers.enable(1);\n\n return line;\n}\n\n// export function rotateCylinderFloorNumbers() {\n// if (settingsData.activeViewMode !== ViewMode.Cylinder && settingsData.destroyedMode) {\n// return;\n// }\n//\n// const cylinderFloorNumbers = threeJsVariables.scene.getObjectByName('cylinderFloorNumbers');\n// if (!cylinderFloorNumbers) return;\n//\n// cylinderFloorNumbers.children.forEach(item =>{\n// item.rotation.y = rotateToCamera();\n// });\n// }\n\nexport function rotateCylinderFloorNumbers() {\n const cylinderFloorNumbers = threeJsVariables.scene.getObjectByName('cylinderFloorNumbers');\n if (!cylinderFloorNumbers) return;\n\n cylinderFloorNumbers.children.forEach(item =>{\n item.rotation.y = rotateToCamera();\n });\n}\n\nexport function removeCylinderFloorNumbers() {\n const cylinderFloorNumbers = threeJsVariables.scene.getObjectByName('cylinderFloorNumbers');\n if (!cylinderFloorNumbers) return;\n threeJsVariables.scene.remove(cylinderFloorNumbers);\n cylinderFloorNumbers.traverse(e=>{\n if (e.isMesh || e.isLine){\n e.geometry.dispose();\n e.material.dispose();\n }\n })\n}\n\nlet windowVector = new Vector2();\nlet canvasSize = new Vector2();\n\nexport function showOrHideCylinderFloorNumbers() {\n if (settingsData.activeViewMode !== ViewMode.Cylinder || BmbyMode.active)\n return;\n\n const floors = threeJsVariables.scene.getObjectByName('cylinderFloorNumbers');\n if (!floors)\n return;\n\n const currentCameraDistance = getCurrentCameraDistance();\n const {minDistance,maxDistance} = getOrbitControlsDistanceAndPan(ViewMode.Cylinder);\n const {currentMinDistance,currentMaxDistance} = getOrbitControlsDistanceAndAngle();\n const {activate,foreshortening} = config.threejs.orbitControls.autoZoomSettings;\n const size = config.threejs.floorNumbers.size;\n const resizeCoefficient = config.threejs.floorNumbers.resizeCoefficient ? config.threejs.floorNumbers.resizeCoefficient : 2;\n const firstFloorNumber = Buildings.getActiveBuilding().floorSliderNumbers[Buildings.getActiveBuilding().floorSliderNumbers.length -1];\n const topFloorNumber = Buildings.getActiveBuilding().floorSliderNumbers[0];\n\n if (Math.ceil(currentMinDistance) !== Math.ceil(minDistance))\n return;\n\n let center = activate ? foreshortening : (maxDistance + minDistance) / 2;\n floors.traverse(el => {\n if (el.name === 'floorElements'){\n if (currentCameraDistance <= center){\n el.visible = true;\n } else if (currentCameraDistance > center){\n const currentFloor = parseInt(el.userData.floor, 10)\n const edgeFloor = currentFloor === firstFloorNumber || currentFloor === topFloorNumber;\n el.visible = (el.userData.floor % getMultiple() === 0) || edgeFloor;\n }\n } else if (isMobile && el.name.match(/floor/) ) {\n const line = el.parent.getObjectByName('line');\n if (!settingsData.isLandscape) {\n threeJsVariables.renderer.getSize(canvasSize);\n windowVector.set(window.innerWidth,window.innerHeight);\n\n if (canvasSize.equals(windowVector)) {\n const cubSize = Math.abs(size * 3);\n if (currentCameraDistance < cubSize) {\n el.position.z = el.userData.defaultPosition.z + ((cubSize - currentCameraDistance) / (resizeCoefficient));\n line.scale.z = 1 - ((cubSize - currentCameraDistance) / (resizeCoefficient * size));\n } else {\n el.position.set(el.userData.defaultPosition.x,el.userData.defaultPosition.y,el.userData.defaultPosition.z);\n line.scale.z = 1;\n }\n } else {\n el.position.set(el.userData.defaultPosition.x,el.userData.defaultPosition.y,el.userData.defaultPosition.z);\n line.scale.z = 1;\n }\n } else {\n el.position.set(el.userData.defaultPosition.x,el.userData.defaultPosition.y,el.userData.defaultPosition.z);\n line.scale.z = 1;\n }\n }\n });\n}\n\n// export const cylinderFloorNumbersResize = () => {\n// const windowWidth = window.innerWidth;\n// const cylinderFloorNumbers = threeJsVariables.scene.getObjectByName('cylinderFloorNumbers');\n//\n// if (!cylinderFloorNumbers) return;\n//\n// cylinderFloorNumbers.traverse(item => {\n// if (item.name === 'line') {\n// console.log(item);\n// let positions = item.geometry.attributes.position.array;\n//\n// const newPositions = positions.map(point => {\n// if (point !== 0) {\n// point++;\n// }\n// return point;\n// });\n//\n// // item.geometry.setAttribute('position', new THREE.BufferAttribute(newPositions, 2));\n// // item.geometry.computeBoundingBox();\n// // item.geometry.computeBoundingSphere();\n// // console.log(item);\n// // console.log(positions);\n// // console.log(newPositions);\n// }\n// });\n// }\n\nexport function cylinderFloorNumbersIntersection(action) {\n if ((settingsData.activeViewMode !== ViewMode.Cylinder) && settingsData.destroyedMode)\n return;\n\n const {scene, raycaster} = threeJsVariables;\n const cylinderFloorNumbers = scene.getObjectByName('cylinderFloorNumbers');\n const intersects = (cylinderFloorNumbers)\n ? raycaster.intersectObjects(cylinderFloorNumbers.children, true)\n : [];\n\n const canvas = document.getElementById('c');\n\n if (intersects.length === 0) {\n // canvas.style.cursor = '';\n return;\n }\n\n const object = intersects[0].object;\n if (object.parent.name === 'floorElements' && object.parent.visible && object.name !== 'line') {\n canvas.style.cursor = 'pointer';\n\n if (action === 'click') {\n canvas.style.cursor = '';\n\n const currentFloor = object.parent.userData.floorIndex;\n const activeBuilding = Buildings.getActiveBuilding();\n const apartment = activeBuilding.apartments.find(apt => apt.userData.floor === currentFloor);\n\n settingsData.currentFloor = currentFloor;\n settingsData.lastClickedFlat = apartment;\n\n bombButtonInitActionHandler();\n }\n }\n}\n\nfunction getMultiple() {\n return config.threejs.floorNumbers?.multiple || (Buildings.getActiveBuilding().selectionsGroup.children.length < 10 ? 2 : 10);\n}\n","'use strict';\n\nimport {changeLangToCurrent} from \"../langSwitcher/langSwitcher\";\nimport {TimesOfDay} from \"../../liveAnimations/litemode/dayNight/TimesOfDay\";\nimport {BuildingOutline} from \"../../building/BuildingOutline\";\nimport {Weather} from \"../weather/Weather\";\nimport axios from 'axios';\nimport { PublicLayers } from '../publicLayers/PublicLayers';\nimport { EnvironmentToggle } from '../../threejs/sceneBackground';\nimport { isMobile, isNoMenu, settingsData } from '../../../settings';\nimport {BaseElement} from \"../../interfaces/BaseElement\";\nimport {PopUpPage} from \"../../interfaces/pages/PopUp\";\nimport { FutureDevelopment } from '../futureDevelopment/FutureDevelopment';\nimport { Environment } from '../Environment/Environment';\nimport { Cookie } from '../../Cookie/Cookie';\nimport { OrbitDayAndNight } from '../../liveAnimations/DayNight/OrbitDayAndNight';\nimport { BmbyMode } from '../../mode/BmbyMode';\nimport { DayNightButton } from '../../threejs/DayNightButton/DayNightButton';\n\nexport class DisplayOptions {\n #element = null;\n #options = null;\n #weather = null;\n #timesOfDay = null;\n static isOpened = false;\n static scope = null;\n\n constructor(parent) {\n if (BmbyMode.active)\n return;\n\n this.#element = new BaseElement()\n .addClass('display-options', isMobile ? null : 'background-backdrop-filter', isNoMenu ? 'no-menu-mode' : null);\n\n if(config.features.weather.bg && !isMobile){\n this.#element.addStyle(\"background-color\", config.features.weather.bg);\n }\n\n if (!isMobile) {\n const position = config.features?.weather?.position;\n switch (position) {\n case \"left\":\n this.#element.addClass('display-options--align-left');\n break;\n case \"center\":\n this.#element.addClass('display-options--align-center');\n break;\n }\n }\n\n this.#createDisplayOptionsHeader(this.#element.DOMElement);\n this.#createOptions();\n\n if (Environment.isActive()) {\n Environment.addLayers(this.#options.DOMElement);\n } else {\n this.publicLayers = new PublicLayers(this.#options.DOMElement);\n }\n\n this.orbitDayAndNight = null;\n EnvironmentToggle.scope?.addToDisplayOption(this.#options.DOMElement);\n if (!isMobile)\n new FutureDevelopment(this.#options.DOMElement).createSwitcher();\n\n this.#getData().then(() => {\n if (!this.data)\n return;\n\n this.#weather = new Weather(this.#element.DOMElement, 'display-options__weather-widget',this.data);\n if (TimesOfDay.active) {\n this.#timesOfDay = new TimesOfDay(this.#options.DOMElement, this.data);\n } else {\n EnvironmentToggle.scope.response = this.data;\n }\n \n if (Environment.fromBundle() && OrbitDayAndNight.isActiveAndSelected && !this.orbitDayAndNight) {\n this.orbitDayAndNight = new OrbitDayAndNight(this.#options.DOMElement,this.data);\n }\n\n setInterval(() => {\n this.#weather?.refreshTime();\n this.#timesOfDay?.refreshTime();\n this.orbitDayAndNight?.refreshTime();\n },1000);\n this.#addEventListenerToNeededElements();\n });\n\n if (!this.#isDisplayOptionsNeeded())\n return;\n\n this.#element.appendTo(parent);\n DisplayOptions.displayOptionsVisibility('hide');\n\n this.#showOnBoarding();\n DisplayOptions.scope = this;\n }\n\n #addEventListenerToNeededElements() {\n const listOfElementsSelectors = ['.display-options__header', '.display-options__weather-widget'];\n listOfElementsSelectors.forEach(element => {\n const currentElement = this.#element.DOMElement.querySelector(element);\n if (currentElement) {\n currentElement.addEventListener('click', this.#displayOptionsHeaderHandler.bind(this));\n currentElement.style.cursor = 'pointer';\n }\n });\n }\n\n async #getData() {\n const api = config.features.weather?.api;\n const apiUrl = `${api.domain}?lat=${config.localization.latitude}&lon=${config.localization.longitude}&units=${api.units}&appid=${api.id}`;\n const response = await axios.get(apiUrl);\n if (response.status !== 200) return;\n this.data = await response.data;\n }\n\n #isDisplayOptionsNeeded() {\n return (\n config.features.weather?.active ||\n config.features.weather?.widget ||\n this.#timesOfDay?.isActive\n );\n }\n\n #createOptions() {\n this.#options = new BaseElement()\n .addClass('display-options__options', 'display-options__options--collapsed');\n\n if (isMobile) {\n const displayOptionsPage = new PopUpPage('Public layers');\n displayOptionsPage.addClass('display-options-page');\n displayOptionsPage.addClass('hidden');\n displayOptionsPage.removeClass('background-backdrop-filter');\n displayOptionsPage.titleIcon = 'icon-tune';\n displayOptionsPage.contentElement.appendChild(this.#options.DOMElement);\n } else {\n this.#element.appendElement(this.#options.DOMElement);\n }\n\n BuildingOutline.addToDisplayOptions(this.#options.DOMElement);\n }\n\n #createDisplayOptionsHeader(parent) {\n const displayOptionsHeader = new BaseElement('span')\n .addClass('display-options__header')\n .appendTo(parent);\n if (!isMobile) {\n new BaseElement('span')\n .addClass('header__text', 'language-string')\n .innerHtml(changeLangToCurrent('Public layers'))\n .addAttribute('data-dictionary', 'Public layers')\n .appendTo(displayOptionsHeader.DOMElement);\n new BaseElement('span')\n .addClass('header__checker', 'icon-down2')\n .appendTo(displayOptionsHeader.DOMElement);\n } else {\n new BaseElement('span')\n .addClass('header__icon', 'icon-tune')\n .appendTo(displayOptionsHeader.DOMElement);\n }\n }\n\n #displayOptionsHeaderHandler(e) {\n if(e.target.closest('.switch-wrapp')) return;\n const optionsElement = document.querySelector('.display-options__options');\n if (isMobile) {\n DisplayOptions.displayOptionsVisibility('show');\n\n const displayOptionsPopUpPage = document.querySelector('.pop-up-page.display-options-page');\n displayOptionsPopUpPage.addEventListener('click', this.#mobileDisplayOptionsPageClickHandler.bind(this));\n } else {\n if (optionsElement.classList.contains('display-options__options--collapsed')) {\n if (settingsData.isConferenceHost) {\n optionsElement.addEventListener('transitionend',() => OrbitDayAndNight.turnOn(),{once: true});\n }\n DisplayOptions.displayOptionsVisibility('show');\n } else {\n DisplayOptions.displayOptionsVisibility('hide');\n }\n }\n }\n\n #mobileDisplayOptionsPageClickHandler(event) {\n if (\n event.target === document.querySelector('.pop-up-page.display-options-page') ||\n event.target.closest('button') ||\n event.target.closest('.switch') ||\n event.target.closest('.weather-state')\n ) {\n DisplayOptions.displayOptionsVisibility('hide');\n PopUpPage.hide();\n }\n }\n\n static displayOptionsVisibility(action) {\n const displayOptions = document.querySelector('.display-options');\n const displayOptionsElement = document.querySelector('.display-options__options');\n\n if (!displayOptions || !displayOptionsElement)\n return;\n\n switch (action) {\n case 'show':\n DisplayOptions.isOpened = true;\n if (Environment.scope?.config && !isMobile) {\n OrbitDayAndNight.turnOn();\n DayNightButton.scope?.updatePreviousState(action);\n }\n\n DisplayOptions.#showDisplayOptions();\n if (isMobile) {\n document.querySelector('.display-options-page').classList.remove('hidden');\n PopUpPage.animation('show');\n }\n\n break;\n case 'hide':\n DisplayOptions.isOpened = false;\n if (Environment.scope?.config && !isMobile) {\n \n if (DayNightButton.scope?.switcherState) {\n OrbitDayAndNight.turnOff();\n Weather.scope?.resetToDefault();\n }\n }\n\n DisplayOptions.hideDisplayOptions();\n\n break;\n case 'update':\n if (isMobile) {\n displayOptionsElement.style.removeProperty('max-height');\n break;\n }\n if (displayOptions.classList.contains('display-options--expanded')) {\n displayOptionsElement.style.maxHeight = displayOptionsElement.scrollHeight + 'px';\n }\n break;\n default:\n console.log('#displayOptionsVisibility default case');\n break;\n }\n }\n\n static #showDisplayOptions() {\n const displayOptions = document.querySelector('.display-options');\n const displayOptionsElement = document.querySelector('.display-options__options');\n const headerChecker = document.querySelector('.header__checker');\n\n if (!displayOptions || !displayOptionsElement || !isMobile && !headerChecker)\n return;\n\n DisplayOptions.calculateMaxHeight();\n\n displayOptionsElement.classList.remove('display-options__options--collapsed');\n displayOptions.classList.add('display-options--expanded');\n if (headerChecker)\n headerChecker.classList.add('rotate');\n }\n\n static hideDisplayOptions() {\n const displayOptions = document.querySelector('.display-options');\n const displayOptionsElement = document.querySelector('.display-options__options');\n const headerChecker = document.querySelector('.header__checker');\n\n if (!displayOptions || !displayOptionsElement || !isMobile && !headerChecker)\n return;\n\n if (!isMobile)\n displayOptionsElement.style.maxHeight = null;\n displayOptionsElement.classList.add('display-options__options--collapsed');\n displayOptions.classList.remove('display-options--expanded');\n if (headerChecker)\n headerChecker.classList.remove('rotate');\n }\n\n #showOnBoarding() {\n if (isMobile)\n return;\n\n const showed = Cookie.getCookie('displayOptionsOnBoarding');\n if (!showed) {\n Cookie.setCookie('displayOptionsOnBoarding','showed');\n DisplayOptions.displayOptionsVisibility('show');\n const interval = setInterval(() => {\n DisplayOptions.displayOptionsVisibility('update');\n if (!document.querySelector('#preloader_slider')) {\n clearInterval(interval);\n setTimeout(() => DisplayOptions.displayOptionsVisibility('hide'),2000);\n }\n },100);\n }\n }\n\n get displayOptions() {\n return this.#options.DOMElement;\n }\n\n static hide() {\n const displayOptionsEntities = document.querySelectorAll('.display-options');\n for (let i = 0; i < displayOptionsEntities.length; i++) {\n displayOptionsEntities[i].classList.add('hidden');\n }\n\n Weather.showed = false;\n\n if (Weather.selectedWeather) {\n Weather.effects[Weather.selectedWeather.id].disable();\n }\n }\n\n static show() {\n const displayOptionsEntities = document.querySelectorAll('.display-options');\n for (let i = 0; i < displayOptionsEntities.length; i++) {\n displayOptionsEntities[i].classList.remove('hidden');\n }\n\n Weather.showed = true;\n\n if (Weather.selectedWeather) {\n if (Weather.effects[Weather.selectedWeather.id].effect){\n }\n Weather.effects[Weather.selectedWeather.id].enable();\n }\n }\n\n static calculateMaxHeight() {\n const displayOptions = document.querySelector('.display-options');\n if (!displayOptions || isMobile)\n return;\n const optionsElement = displayOptions.querySelector('.display-options__options');\n const bottomNavBar = document.querySelector('.bottom__nav-bar');\n const bottomNavBarHeight = bottomNavBar ? bottomNavBar.getBoundingClientRect().height : 0;\n const bottomNavBarBottomOffset = bottomNavBar ? parseInt(getComputedStyle(bottomNavBar).bottom, 10) : 0;\n const displayOptionsHeight = displayOptions.getBoundingClientRect().height;\n const displayOptionsTopOffset = displayOptions.getBoundingClientRect().top;\n const gapBetweenOptionsAndBottomNavBar = 10;\n const displayOptionsArea = displayOptionsHeight + optionsElement.scrollHeight + displayOptionsTopOffset + gapBetweenOptionsAndBottomNavBar;\n const bottomNavBarAreaHeight = bottomNavBarHeight + bottomNavBarBottomOffset;\n\n if (displayOptionsArea > window.innerHeight - bottomNavBarAreaHeight) {\n const displayOptionsGap = parseInt(getComputedStyle(displayOptions).gap, 10);\n const offset = displayOptionsHeight + displayOptionsTopOffset + bottomNavBarAreaHeight + gapBetweenOptionsAndBottomNavBar + displayOptionsGap;\n optionsElement.style.maxHeight = window.innerHeight - offset + 'px';\n optionsElement.style.overflowY = 'auto';\n } else {\n optionsElement.style.maxHeight = optionsElement.scrollHeight + 'px';\n optionsElement.style.removeProperty('overflow-y');\n }\n }\n}\n","'use strict';\n\nimport {isRoofExists} from \"../../../functions\";\nimport {flatLabelPositionChange, flatLabels, flatLabelsRemove} from \"./flatLabels\";\nimport {settingsData} from \"../../../settings\";\n\nexport class CylinderFlatLabels {\n constructor() {\n if (isRoofExists())\n return;\n\n flatLabels({currentFloor: settingsData.currentFloor, location: 'cylinder'});\n flatLabelPositionChange({x: 0, y: 0, z: 0});\n }\n\n static remove() {\n flatLabelsRemove();\n }\n}","'use strict';\n\nimport { Buildings, projectMode, settingsData, threeJsVariables } from '../../../settings';\nimport { Box3, Group, Vector3 } from 'three';\nimport { ViewMode } from '../../../common';\nimport { getCurrentCameraDistance } from '../../controls/orbitControls';\nimport {CSS2DObject} from \"../../../libs/CSS2DRenderer\";\nimport {changeLangToCurrent, getCurrentLang} from \"../langSwitcher/langSwitcher\";\nimport { intersectionClickHandler } from '../../threejs/raycast';\nimport {setCSSVar} from \"../../../functions\";\nimport {BaseElement} from \"../../interfaces/BaseElement\";\n\n/* Old version */\n\nexport const flatLabels = ({currentFloor, location}) => {\n const activeBuilding = Buildings.getActiveBuilding();\n const floor = activeBuilding.getFloorSelections(currentFloor);\n const scene = threeJsVariables.scene;\n const flaLabelsGroup = new Group();\n flaLabelsGroup.name = 'flaLabelsGroup';\n\n const flatLabelsTextColor = config.threejs?.flatLabels?.textColor;\n if(flatLabelsTextColor)\n setCSSVar('--flatLabelsTextColor', flatLabelsTextColor);\n\n const box = new Box3();\n const size = new Vector3();\n\n for (const apartment of floor) {\n const isPlug = apartment.name.toLowerCase().startsWith(config.resources.bundle.selectionBoxes.floorPlugName)\n if (apartment.name.match(/(amenity)|(Loby)|(lobby)|(Roof)|(roof)/g) || !apartment.userData.crm_data && !isPlug)\n continue;\n\n let flatLabelContainer;\n let flatLabel;\n const center = apartment.getWorldPosition(new Vector3());\n box.setFromObject(apartment).getSize(size);\n\n\n //Apartment\n if (!isPlug){\n flatLabelContainer = getHtml({apartment, type: 'apt', location});\n flatLabel = new CSS2DObject(flatLabelContainer);\n flatLabel.element.setAttribute('data-apartment-name',apartment.name);\n flatLabel.element.onclick = (e) => apartmentLabelHandler(e.target);\n } else {\n flatLabelContainer = getHtml({apartment, type: 'plug'});\n projectMode.FloorPlan.floorAmenities.addIcon(flatLabelContainer,apartment);\n flatLabel = new CSS2DObject(flatLabelContainer);\n }\n flatLabel.userData.zoom = config.threejs.flatLabels.resize ? 1.0 : config.threejs.flatLabels.size;\n flatLabel.name = `floor-label`;\n flatLabel.position.set(center.x, center.y + size.y, center.z);\n flaLabelsGroup.add(flatLabel);\n }\n scene.add(flaLabelsGroup);\n}\n\nexport function flatLabelPictureLiteMode (apartment) {\n const flatLabelContainer = getHtml({apartment, type: 'apt'});\n flatLabelContainer.classList.add('picture-mode');\n const flatLabel = new CSS2DObject(flatLabelContainer);\n flatLabel.element.setAttribute('data-apartment-name',apartment.name);\n flatLabel.element.onclick = (e) => apartmentLabelHandler(e.target);\n flatLabel.userData.zoom = 1.0;\n flatLabel.name = `label`;\n\n apartment.add(flatLabel);\n return flatLabel;\n}\n\n/* New version */\n\n// export const flatLabels = (currentFloor) => {\n//\n// const activeBuilding = Buildings.getActiveBuilding();\n// const floor = activeBuilding.getFloorSelections(currentFloor);\n//\n// // const scene = threeJsVariables.scene;\n// // const flaLabelsGroup = new THREE.Group();\n// // flaLabelsGroup.name = 'flaLabelsGroup';\n//\n// for (const apartment of floor) {\n//\n// if (apartment.name.match(/(amenity)|(Loby)|(lobby)|(Roof)|(roof)/g)) continue;\n//\n// let flatLabelContainer;\n// let flatLabel;\n//\n// //Apartment\n// if (!apartment.name.toLowerCase().startsWith(config.resources.bundle.selectionBoxes.floorPlugName)){\n//\n// flatLabelContainer = getHtml(apartment, 'apt');\n//\n// flatLabel = new CSS2DObject(flatLabelContainer);\n// flatLabel.element.setAttribute('data-apartment-name',apartment.name);\n// flatLabel.element.onclick = (e) => apartmentLabelHandler(e.target);\n// } else {\n//\n// flatLabelContainer = getHtml(apartment, 'plug');\n// flatLabel = new CSS2DObject(flatLabelContainer);\n// }\n//\n// flatLabel.userData.zoom = 0.1;\n// flatLabel.name = `floor-label`;\n//\n// // flaLabelsGroup.add(flatLabel);\n// apartment.add(flatLabel);\n//\n// }\n//\n// // scene.add(flaLabelsGroup);\n// }\n\nfunction apartmentLabelHandler (target) {\n const flatContainer = target.closest('.flat-label-container');\n const aptName = flatContainer.getAttribute('data-apartment-name');\n const apt = threeJsVariables.scene.getObjectByName(aptName);\n intersectionClickHandler(apt);\n}\n\nexport const flatLabelsRemove = () => {\n\n /* New Version */\n\n // const activeBuilding = Buildings.getActiveBuilding();\n //\n // activeBuilding.selectionsGroup.traverse(el =>{\n // if (el.name === 'floor-label'){\n // el.removeFromParent();\n // }\n // });\n\n\n /* Old version */\n const scene = threeJsVariables.scene;\n if (scene.getObjectByName('flaLabelsGroup')) {\n const groupToRemove = scene.getObjectByName('flaLabelsGroup');\n scene.remove(groupToRemove);\n\n const labels = document.querySelectorAll('.flat-label-container');\n labels.forEach(item => {\n item.remove();\n });\n }\n}\n\nexport function flatLabelPositionChange(position) {\n const scene = threeJsVariables.scene;\n if (scene.getObjectByName('flaLabelsGroup')) {\n const groupToPositionSet = scene.getObjectByName('flaLabelsGroup');\n groupToPositionSet.position.x += position.x;\n groupToPositionSet.position.y += position.y;\n groupToPositionSet.position.z += position.z;\n\n // const labels = document.querySelectorAll('.flat-label-container');\n // labels.forEach(item => {\n // item.remove();\n // });\n }\n}\n\nexport function flatLabelResize () {\n if (settingsData.activeViewMode === ViewMode.FloorPlan && config.threejs.flatLabels.resize){\n\n /* New version */\n // const currentCameraDistance = getCurrentCameraDistance();\n // const zoom = 1 / currentCameraDistance * 100 - 0.65;\n //\n // const activeBuilding = Buildings.getActiveBuilding();\n //\n // activeBuilding.selectionsGroup.traverse(el =>{\n // if (el.name === 'floor-label'){\n // el.userData.zoom = zoom > 1 ? 1 : zoom;\n // }\n // });\n\n /* Old version */\n const labelsGroup = threeJsVariables.scene.getObjectByName('flaLabelsGroup');\n if (labelsGroup){\n const currentCameraDistance = getCurrentCameraDistance();\n const distance = config.threejs.flatLabels.size - currentCameraDistance * (config.threejs.flatLabels.size / 2) / threeJsVariables.orbitControls.maxDistance;\n const zoom = Math.max( config.threejs.flatLabels.size / 2, Math.min( config.threejs.flatLabels.size, distance ));\n\n labelsGroup.traverse(label =>{\n if (label.type === 'Object3D')\n label.userData.zoom = zoom;\n });\n }\n }\n}\n// export const flatLabelsUpdate = (currentFloor) => {\n// flatLabelsRemove();\n// flatLabels(currentFloor);\n// }\n\nfunction getHtml({apartment, type, location}) {\n const flatLabelContainer = document.createElement('div');\n flatLabelContainer.className = 'flat-label-container';\n // const clickedApartment = settingsData.lastClickedFlat;\n const pointClasses = ['flat-label--point'];\n const icon360Classes = ['flat-label--icon'];\n let subTitleInfo;\n\n switch (type) {\n case 'apt':\n const crm = apartment.userData?.crm_data;\n if (!crm)\n return;\n\n if (crm.status.toLowerCase() !== 'available') {\n pointClasses.push('unavailable');\n subTitleInfo = changeLangToCurrent(crm.status);\n } else {\n pointClasses.push('available');\n subTitleInfo = location === 'cylinder' ? '' : crm.modelName;\n }\n\n if (crm.assets.tours360 && location !== 'cylinder')\n icon360Classes.push('icon-360');\n if (apartment.userData.favorite)\n pointClasses.push('in-favorite');\n\n\n const isHiddenSubtitle = config.threejs.flatLabels?.hideSubtitle;\n const flatLabelSubtitleDataDictionary =\n isHiddenSubtitle\n ? ''\n : crm.status === 'Available' ? subTitleInfo : crm.status;\n const subtitleInnerHtml = isHiddenSubtitle ? '' : subTitleInfo;\n flatLabelContainer.innerHTML = `\n
\n
\n
\n

${crm.propNum}

\n

${subtitleInnerHtml}

\n
\n
\n \n
\n
\n
`;\n\n if (location === 'cylinder') {\n const flatLabelText = flatLabelContainer.querySelector('.flat-label--title');\n flatLabelText.classList.add('font-normal');\n }\n\n break;\n case 'plug':\n let element = `\n
\n
\n ${changeLangToCurrent('floor')}\n ${apartment.userData.floor}\n
\n
\n
`;\n\n const isGroundFloor = settingsData.groundFloor.isActive && (parseInt(settingsData.groundFloor.floor) === parseInt(apartment.userData.floor));\n if (isGroundFloor) {\n const fullLabel = settingsData.groundFloor.fullLabel;\n const groundFloor = new BaseElement()\n .addClass('flat-label-center');\n const contentWrapper = new BaseElement()\n .addClass('flat-label__content-wrapper')\n .appendTo(groundFloor.DOMElement);\n new BaseElement()\n .addClass('floor-amenities')\n .appendTo(groundFloor.DOMElement);\n new BaseElement('span')\n .addClass('language-string', 'flat-label-center--title')\n .addAttribute(`data-dictionary`, fullLabel)\n .innerHtml(changeLangToCurrent(fullLabel))\n .appendTo(contentWrapper.DOMElement);\n element = groundFloor.DOMElement.outerHTML;\n }\n\n flatLabelContainer.innerHTML = element;\n break;\n }\n\n return flatLabelContainer;\n}\n","'use strict';\n\nimport { changeLangToCurrent, getCurrentLang } from '../langSwitcher/langSwitcher';\nimport { Buildings, isMobile, isDesktop, projectMode, settingsData, UIRoot } from '../../../settings';\nimport { dataArrayOfFlat, facingDictionary } from '../../cards/cardsConfig';\nimport {threeJsVariables} from \"../../../settings\";\nimport { ViewMode } from '../../../common';\nimport {getPropType, setInfoPointsLayoutDependsOnChildren} from \"../../cards/unitCards/unitCardFunctions\";\nimport {BaseElement} from \"../../interfaces/BaseElement\";\nimport { Price } from '../../cards/Price';\nimport {getFieldsFromAPI, isNumeric, numberWithCommas} from \"../../../functions\";\n\nlet tooltip = null;\nlet price = null;\nexport const createTooltip = () => {\n tooltip = new BaseElement()\n .addClass('flat-tooltip')\n .appendTo(UIRoot)\n .DOMElement;\n createHeader();\n createInfoPoints();\n price = config.property.settings?.displayPrice !== 'button' && new Price()\n .addBlock(document.querySelector(`.flat-tooltip__price-value`));\n};\n\nconst createHeader = () => {\n const tooltipHeader = new BaseElement()\n .addClass('flat-tooltip__header', 'card__header')\n .appendTo(tooltip)\n .DOMElement;\n const tooltipTitleBox = new BaseElement()\n .addClass('flat-tooltip__title-box', 'card__title-box')\n .appendTo(tooltipHeader)\n .DOMElement;\n const tooltipSubtitle = new BaseElement()\n .addClass('flat-tooltip__subtitle-box', 'card__subtitle-box')\n .appendTo(tooltipHeader)\n .DOMElement;\n const tooltipTitle = new BaseElement('h3')\n .addClass('flat-tooltip__title', 'card__title')\n .appendTo(tooltipTitleBox)\n .DOMElement;\n const tooltipPrice = new BaseElement()\n .addClass('flat-tooltip__price', 'card__price')\n .appendTo(tooltipTitleBox)\n .DOMElement;\n new BaseElement('span')\n .addClass('flat-tooltip__flat-name', 'card__title-flat-name', 'language-string')\n .addAttribute('data-dictionary', 'Apt.')\n .appendTo(tooltipTitle);\n new BaseElement('span')\n .addClass('flat-tooltip__flat-number', 'card__title-flat-number', 'language-string')\n .appendTo(tooltipTitle);\n if (Buildings.getBuildingsInfoLength() > 1) {\n new BaseElement()\n .addClass('flat-tooltip__tower-name', 'card__tower-name')\n .appendTo(tooltipSubtitle);\n new BaseElement()\n .addClass('subtitle-separator')\n .appendTo(tooltipSubtitle);\n }\n const tooltipFloorNum = new BaseElement()\n .addClass('flat-tooltip__floor-number', 'card__floor-number')\n .appendTo(tooltipSubtitle)\n .DOMElement;\n new BaseElement('span')\n .addClass('flat-tooltip__floor-number-floor', 'card__floor_floor', 'language-string')\n .addAttribute('data-dictionary', 'floor')\n .appendTo(tooltipFloorNum)\n .innerHtml(changeLangToCurrent('floor') + ' ');\n new BaseElement('span')\n .addClass('flat-tooltip__floor-number_num', 'card__floor_num')\n .appendTo(tooltipFloorNum);\n\n new BaseElement('span')\n .addClass('flat-tooltip__price-value', 'card__price-value')\n .appendTo(tooltipPrice)\n new BaseElement('span')\n .addClass('flat-tooltip__rent-price-value', 'card__price-value')\n .appendTo(tooltipPrice);\n new BaseElement('span')\n .addClass('flat-tooltip__price-currency', 'card__price-currency', 'language-string')\n .appendTo(tooltipPrice);\n}\n\nconst createInfoPoints = () => {\n new BaseElement()\n .addClass('flat-tooltip__info-points', 'card__info-points')\n .appendTo(tooltip);\n new BaseElement()\n .addClass('flat-tooltip__flat-number')\n .appendTo(tooltip);\n new BaseElement()\n .addClass('flat-tooltip__flat-model')\n .appendTo(tooltip);\n}\n\nexport const updateTooltipText = async (selectedObject, crmDataObject) => {\n const isAmenity = selectedObject.userData.customSelection;\n if (!crmDataObject && isAmenity || !crmDataObject && (projectMode.LiteMode.modeIs('picture') || projectMode.LiteMode.modeIs('empty')))\n crmDataObject = selectedObject.userData.crm_data;\n\n if (!crmDataObject)\n return;\n\n isAmenity ?\n tooltip.classList.add('amenity') :\n tooltip.classList.remove('amenity');\n\n if (!isAmenity)\n tooltip.setAttribute('data-engineid', crmDataObject?.engineId);\n\n updateTooltipHeader(crmDataObject);\n updateTooltipInfoPoints(crmDataObject);\n}\n\nconst updateTooltipHeader = (crmDataObject) => {\n let towerName;\n\n ((projectMode.LiteMode.isActive() && (projectMode.LiteMode.modeIs('picture') || projectMode.LiteMode.modeIs('empty'))) || config.features.privateHouseMode) ?\n towerName = Buildings.getBuilding(crmDataObject.buildingEngineId).info.towerName:\n towerName = Buildings.getActiveBuilding().info.towerName;\n\n let name;\n Array.isArray(towerName) ?\n name = towerName.find(el => el.lang === getCurrentLang()).value:\n name = towerName;\n\n const tooltipTowerName = document.querySelector('.flat-tooltip__tower-name');\n const tooltipFlatName = document.querySelector('.flat-tooltip__flat-name');\n const tooltipFlatNumber = document.querySelector('.flat-tooltip__flat-number');\n const tooltipFloorNum = document.querySelector('.flat-tooltip__floor-number_num');\n const subtitleBox = document.querySelector('.flat-tooltip__subtitle-box');\n\n tooltipFlatName.innerHTML = changeLangToCurrent(getPropType(crmDataObject.propType));\n\n if (tooltip.classList.contains('amenity')) {\n tooltipFlatNumber.classList.add('language-string');\n tooltipFlatNumber.setAttribute('data-dictionary', crmDataObject.propNum);\n tooltipFlatNumber.innerHTML = changeLangToCurrent(crmDataObject.propNum);\n } else {\n tooltipFlatNumber.classList.remove('language-string');\n tooltipFlatNumber.removeAttribute('data-dictionary');\n tooltipFlatNumber.innerHTML = crmDataObject.propNum;\n }\n\n const floorStringElement = document.querySelector('.flat-tooltip__floor-number');\n const separator = floorStringElement.parentElement.querySelector('.subtitle-separator');\n const numberFloorElement = floorStringElement.querySelector('.flat-tooltip__floor-number-floor');\n if (!b.isOneFloorBuilding(crmDataObject.buildingEngineId)) {\n floorStringElement?.classList.remove('hidden');\n separator?.classList.remove('hidden');\n // subtitleBox?.classList.remove('hidden');\n\n if (tooltipFloorNum) {\n const isGroundFloor = settingsData.groundFloor.isActive && (parseInt(settingsData.groundFloor.floor) === parseInt(crmDataObject.floorNum));\n if (isGroundFloor) {\n numberFloorElement.classList.add('hidden');\n tooltipFloorNum.innerHTML = changeLangToCurrent(settingsData.groundFloor.fullLabel);\n } else {\n numberFloorElement.classList.remove('hidden');\n tooltipFloorNum.innerHTML = crmDataObject.floorNum;\n }\n }\n\n } else {\n floorStringElement?.classList.add('hidden');\n separator?.classList.add('hidden');\n // subtitleBox?.classList.add('hidden');\n }\n\n\n const regExp = /[a-z\\u0590-\\u05fe]/gi;\n const isStringName = regExp.test(name);\n if (Buildings.getBuildingsInfoLength() > 1 /*&& !Buildings.isOneFloorBuilding(crmDataObject.buildingEngineId)*/) {\n if (!isStringName) {\n let towerNumber = document.querySelector('.flat-tooltip__tower-name_num');\n let towerTitle = document.querySelector('.flat-tooltip__tower-name_title');\n\n if (!towerNumber) {\n towerNumber = new BaseElement('span')\n .addClass('flat-tooltip__tower-name_num', 'language-string')\n .addAttribute('data-dictionary', 'building')\n .appendTo(tooltipTowerName)\n .DOMElement;\n towerTitle = new BaseElement('span')\n .addClass('flat-tooltip__tower-name_title')\n .appendTo(tooltipTowerName)\n .DOMElement;\n }\n towerTitle.innerHTML = name;\n towerNumber.innerHTML = changeLangToCurrent('building') + ' ';\n } else {\n tooltipTowerName.innerHTML = name;\n }\n }\n\n price && price.setPrice(crmDataObject);\n}\n\nconst updateTooltipInfoPoints = (crmDataObject) => {\n let tooltipInfoPoint = document.querySelector('.flat-tooltip__info-points');\n tooltipInfoPoint.innerHTML = '';\n const regExp = /([A-Za-z])\\w+/g;\n const measurement = config.localization.area ? config.localization.area : \"m2\";\n const cardsInfo = dataArrayOfFlat(crmDataObject);\n const infoPointsData = cardsInfo.filter((data) => {\n if (getFieldsFromAPI.small().indexOf(data.name) !== -1)\n return data;\n })\n\n infoPointsData.forEach((data) => {\n let value;\n\n data.exceptions\n ? value = data.exceptions[data.data]\n : value = data.data;\n\n if (data.name === 'storages' && Array.isArray(value)) {\n const valueCopy = [ ...value ];\n value = 0;\n valueCopy.forEach(item => {\n value += item.size;\n });\n }\n\n if (parseInt(value) === 0 || value === undefined)\n return;\n\n const cardContentBlock = new BaseElement()\n .addClass('flat-tooltip-card__info-points-block', 'card__info-points-block')\n .appendTo(tooltipInfoPoint)\n .DOMElement;\n const cardContentWrapper = new BaseElement()\n .addClass('flat-tooltip-card__info-points-wrapper', 'card__info-points-block-wrapper')\n .appendTo(cardContentBlock)\n .DOMElement;\n const cardModelName = new BaseElement()\n .addClass(`flat-tooltip-card__info-points-block_data`, 'card__info-points-block_data')\n .appendTo(cardContentWrapper)\n .DOMElement;\n const cardModelNameText = new BaseElement('span')\n .addClass(`flat-tooltip-card__info-points-block_data_text`, 'card__info-points-block_data_text', isNumeric(value) ? 'translate-number' : 'language-string')\n .addAttribute('data-dictionary', value)\n .appendTo(cardModelName);\n const contentSubtext = new BaseElement()\n .addClass(`flat-tooltip-card__info-points-block_subtitle`, 'card__info-points-block_subtitle')\n .appendTo(cardContentWrapper)\n .DOMElement;\n\n if (regExp.test(value))\n cardModelNameText.addStyle('direction', 'ltr');\n // cardModelNameText.style.direction = \"ltr\";\n\n contentSubtext.innerHTML += `${changeLangToCurrent(data.name).toLowerCase()}`;\n\n switch(data.name) {\n case 'area':\n case 'balcony size':\n case 'roof balcony size':\n case 'covered balcony size':\n case 'basement size':\n case 'storages':\n const coma = `,`;\n contentSubtext.innerHTML += coma;\n new BaseElement('span')\n .addClass('language-string', 'card__info-points-block_subtitle-measurement', 'meters')\n .addAttribute('data-dictionary', measurement)\n .innerHtml(/*contentSubtext + */changeLangToCurrent(measurement))\n .appendTo(contentSubtext);\n break;\n case 'exposure':\n if (Boolean(!value))\n return;\n\n const dictionary = facingDictionary();\n let exposureString = '';\n\n if (!Array.isArray(value))\n value = value.split(',');\n if (value.length === 0) {\n cardContentBlock.remove();\n return;\n }\n\n value.forEach((exposure, index) => {\n exposureString += changeLangToCurrent(dictionary[exposure].en + 'Short');\n if (index !== value.length - 1)\n exposureString += ', ';\n });\n value = exposureString;\n break;\n case 'accessible':\n case 'treatmentRoom':\n cardModelNameText\n .innerHtml('')\n .addClass('icon-check-mark');\n break;\n // case 'storages':\n case 'parkings':\n if (Boolean(!value)) {\n cardContentBlock.remove();\n return;\n }\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n cardContentBlock.remove();\n return;\n }\n\n value = value.length;\n }\n\n cardModelNameText.innerHtml(value);\n\n break;\n }\n\n const listOfExceptions = [\n 'accessible',\n 'treatmentRoom',\n // 'storages',\n 'parkings'\n ]\n\n if (!listOfExceptions.includes(data.name))\n cardModelNameText.innerHtml(isNumeric(value) ? numberWithCommas(value) : changeLangToCurrent(value));\n cardModelName.classList.add(data.icon);\n });\n\n setInfoPointsLayoutDependsOnChildren(tooltipInfoPoint);\n};\n\nexport const updateTooltipPosition = (hoveredObject) => {\n if (hoveredObject && !hoveredObject?.userData.isClicked)\n showTooltip();\n return hoveredObject;\n};\n\nexport const hideTooltip = () => {\n if (isMobile)\n return;\n\n if (tooltip) {\n tooltip.style.transition = '';\n tooltip.style.display = 'none';\n tooltip.style.opacity = 0;\n }\n};\n\nexport const showTooltip = () => {\n const isKeyplanAmenity = config.features?.keyplanAmenities && settingsData.selectedObject?.userData?.customSelection;\n if ((settingsData.buildingDestroyed && !isKeyplanAmenity) || isDesktop)\n return;\n if (settingsData.activeViewMode === ViewMode.Orbit)\n return;\n\n tooltip.style.display = 'block';\n tooltip.style.opacity = 1;\n\n const tooltipWidth = tooltip.getBoundingClientRect().width;\n const tooltipHeight = tooltip.getBoundingClientRect().height;\n const dir = document.documentElement.getAttribute('dir');\n const searchBlock = document.getElementsByClassName('search__container-main')[0];\n const menu = document.getElementsByClassName('aside__container')[0];\n const border = {\n bottom: 0,\n top: window.innerHeight,\n left: 0,\n right: window.innerWidth,\n }\n let menuWidth = 0 ;\n let searchWidth = 0 ;\n if (searchBlock && menu) {\n menuWidth = parseInt(getComputedStyle(menu).width);\n searchWidth = parseInt(getComputedStyle(searchBlock).width);\n }\n\n if (dir === 'ltr') {\n border.right = window.innerWidth;\n border.left = menuWidth + searchWidth;\n } else if (dir === 'rtl') {\n border.right = window.innerWidth - (menuWidth + searchWidth);\n border.left = 0;\n }\n\n (threeJsVariables.mouse.winX + 25 + tooltipWidth) < border.right ?\n tooltip.style.left = threeJsVariables.mouse.winX + 25 + 'px':\n tooltip.style.left = threeJsVariables.mouse.winX - tooltipWidth - 25 + 'px';\n\n (threeJsVariables.mouse.winY + 25 + tooltipHeight) < window.innerHeight ?\n tooltip.style.top = threeJsVariables.mouse.winY + 25 + 'px':\n tooltip.style.top = threeJsVariables.mouse.winY - tooltipHeight - 25 + 'px';\n tooltip.style.opacity = 1;\n};\n","'use strict';\n\nimport {\n Buildings,\n cardsData,\n isDesktop,\n isMobile,\n projectMode,\n settingsData, TRoot, UIRoot\n} from '../../../settings';\nimport { createHtmlElement, userPrevent } from '../../../functions';\nimport {UnitCardClass} from \"../../cards/unitCards/UnitCardClass\";\nimport gsap from 'gsap';\nimport {enableOrbitControls} from \"../../controls/orbitControls\";\nimport {BaseElement} from \"../../interfaces/BaseElement\";\nimport {changeLangToCurrent} from \"../langSwitcher/langSwitcher\";\n\nexport class FloorSlider {\n constructor (container) {\n this.defaultContainer = this.#calculateParent();\n this.container = container || this.defaultContainer;\n this.rightNavBar = document.querySelector('.right-nav-bar');\n this.floors = [];\n this.isScrolling = null;\n this.slider = null;\n this.leader = null;\n this.maxFloorBtn = null;\n this.minFloorBtn = null;\n this.maxSeparator = null;\n this.minSeparator = null;\n this.blockFloorSLider = false;\n this.fsTop = 0;\n this.leaderHeight = 0;\n this.floorBtnHeight = 0;\n this.floorBtnHalfHeight = 0;\n this.staticBtnHeight = 0;\n this.fsMargin = 50;\n this.plugHeight = 0;\n this.scrollHandler = null;\n this.clickHandler = null;\n this.separatorHandler = null;\n this.visibleBtnsCount = isMobile ? 4 : 5;\n }\n\n async create() {\n const activeBuilding = Buildings.getActiveBuilding();\n this.floors = activeBuilding.getFloorNumbersForFloorSlider();\n\n this.slider = createHtmlElement(\n this.container,\n '',\n 'div',\n ['fs__main__container', isMobile ? 'background-backdrop-filter' : null]\n );\n this.maxFloorBtn = createHtmlElement(\n this.slider,\n '',\n 'button',\n ['fs__static__floor', 'fs__max__floor']);\n\n if(!isMobile) {\n this.maxSeparator = createHtmlElement(\n this.slider,\n '',\n 'div',\n ['leader__separator', 'max__separator', 'icon-more']\n );\n }\n this.leader = new BaseElement('ul')\n .addClass('fs__leader')\n .appendTo(this.slider)\n .DOMElement;\n\n this.floors.forEach(floor => {\n const isGroundFloor = settingsData.groundFloor.isActive && (parseInt(settingsData.groundFloor.floor) === parseInt(floor));\n const shortLabel = settingsData.groundFloor.shortLabel;\n const floorElement = new BaseElement('li')\n .addClass('fs__floor__number', isGroundFloor ? 'language-string' : null)\n .innerHtml(isGroundFloor ? changeLangToCurrent(shortLabel) : floor)\n .addAttribute('data-floor', floor)\n .appendTo(this.leader);\n if (isGroundFloor)\n floorElement.addAttribute('data-dictionary', shortLabel);\n });\n\n const max = Math.max(...this.floors);\n const min = Math.min(...this.floors);\n this.maxFloorBtn.textContent = max;\n\n this.fsTop = this.slider.getBoundingClientRect().top;\n\n this.calculateHeight();\n\n if(!isMobile) {\n this.minSeparator = new BaseElement()\n .addClass('leader__separator', 'min__separator', 'icon-more')\n .appendTo(this.slider);\n }\n\n const isGroundFloor = settingsData.groundFloor.isActive && (parseInt(settingsData.groundFloor.floor) === parseInt(min));\n const shortLabel = settingsData.groundFloor.shortLabel;\n this.minFloorBtn = new BaseElement('button')\n .addClass('fs__static__floor','fs__min__floor', isGroundFloor ? 'language-string' : null)\n .innerHtml(isGroundFloor ? changeLangToCurrent(shortLabel) : min)\n .appendTo(this.slider);\n if (isGroundFloor)\n this.minFloorBtn.addAttribute('data-dictionary', shortLabel);\n\n const plug = createHtmlElement('','','li',['fs__plug']);\n this.leader.insertAdjacentElement('afterbegin',plug);\n this.leader.appendChild(plug.cloneNode());\n\n await this.click(this.getFloorBtn(settingsData.currentFloor));\n\n this.scrollHandler = this.scroll.bind(this);\n this.clickHandler = this.click.bind(this);\n this.separatorHandler = this.jump.bind(this);\n\n this.leader.addEventListener('scroll', this.scrollHandler);\n this.leader.addEventListener('click',this.clickHandler);\n\n if(!isMobile) {\n this.maxSeparator.addEventListener('click', this.separatorHandler);\n this.minSeparator.event('click', this.separatorHandler);\n }\n\n this.maxFloorBtn.addEventListener('click', () => this.click(this.getFloorBtn(this.floors[0])));\n this.minFloorBtn.event('click', () => this.click(this.getFloorBtn(this.floors[this.floors.length - 1])));\n\n if (isMobile)\n this.#mobileMode();\n }\n\n calculateHeight() {\n if (!this.slider)\n return;\n\n let usePreset;\n let totalHeight;\n let presetTotalHeight;\n let separator;\n\n const presetWeb = {\n bottomNavBar: isDesktop\n ? this.getElementHeight('aside__container')\n : this.getElementHeight('bottom__nav-bar')\n };\n\n if (isMobile) {\n if (settingsData.isLandscape){\n // this.rightNavBar.classList.add('fs-slider-open');\n this.fsTop = 0;\n this.leaderHeight = 100;\n } else {\n this.fsTop = this.slider.getBoundingClientRect().top - this.fsMargin / 2;\n this.leaderHeight = 160;\n }\n this.staticBtnHeight = this.leaderHeight * 0.4;\n this.floorBtnHeight = this.leaderHeight * 0.4;\n this.floorBtnHalfHeight = this.leaderHeight * 0.4 / 2;\n } else {\n usePreset = presetWeb;\n presetTotalHeight = Math.max(...Object.values(usePreset));\n separator = (isMobile)?0:this.maxSeparator.getBoundingClientRect().height * 2;\n\n if (isDesktop){\n this.slider.classList.add('floor-slider__desktop');\n presetTotalHeight += document.querySelector('.aside__logo').getBoundingClientRect().height ;\n this.fsTop = 0;\n }\n\n totalHeight = Math.ceil(window.innerHeight - this.fsTop - presetTotalHeight - this.fsMargin - separator);\n\n this.staticBtnHeight = totalHeight / this.visibleBtnsCount + 2;\n this.floorBtnHeight = (totalHeight - this.staticBtnHeight * 2) / (this.visibleBtnsCount);\n this.floorBtnHalfHeight = Math.ceil(this.floorBtnHeight / 2);\n this.leaderHeight = totalHeight - this.staticBtnHeight * 2;\n }\n\n this.plugHeight = this.leaderHeight / 2 - this.floorBtnHalfHeight;\n\n document.documentElement.style.setProperty('--fsBtnHeight', `${this.floorBtnHeight}px`);\n document.documentElement.style.setProperty('--fsBtnHeightHalf', `${this.floorBtnHalfHeight}px`);\n document.documentElement.style.setProperty('--fsPlugHeight', `${this.plugHeight}px`);\n document.documentElement.style.setProperty('--fsLeaderHeight', `${this.leaderHeight}px`);\n document.documentElement.style.setProperty('--fsMargin', `${this.fsMargin / 2}px`);\n document.documentElement.style.setProperty('--fsStaticBtnHeight', `${this.staticBtnHeight}px`);\n }\n\n resize(){\n if (!this.slider || cardsData.cardMode.isAmenities)\n return;\n\n this.calculateHeight();\n const floorBtn = this.getFloorBtn(settingsData.currentFloor);\n const scrollDiff = this.leader.scrollTop + this.plugHeight - floorBtn?.offsetTop;\n\n this.setActiveFloorNumber();\n this.setActiveFloorNumber(floorBtn);\n\n gsap.to(this.leader,{\n duration: .3,\n scrollTop: this.leader.scrollTop - scrollDiff\n });\n }\n\n jump(e){\n const separator = e.target;\n let floorTarget;\n\n if (separator.classList.contains('max__separator')) {\n floorTarget = this.getFloorBtn(settingsData.currentFloor + this.visibleBtnsCount);\n if (!floorTarget)\n floorTarget = this.getFloorBtn(Math.max(...Object.values(this.floors)) - 1);\n } else if (separator.classList.contains('min__separator')){\n floorTarget = this.getFloorBtn(settingsData.currentFloor - this.visibleBtnsCount);\n if (!floorTarget)\n floorTarget = this.getFloorBtn(Math.min(...Object.values(this.floors)));\n }\n\n this.click(floorTarget);\n }\n\n getElementHeight(elementClass){\n return document.querySelector(`.${elementClass}`)\n ? window.innerHeight - document.querySelector(`.${elementClass}`).getBoundingClientRect().top\n : 0;\n }\n\n remove() {\n this.leader.removeEventListener('scroll',this.scrollHandler);\n this.leader.removeEventListener('click',this.clickHandler);\n this.scrollHandler = null;\n this.clickHandler = null;\n this.slider.remove();\n this.floors = [];\n this.isScrolling = null;\n this.slider = null;\n this.leader = null;\n this.blockFloorSLider = false;\n this.rightNavBar && this.rightNavBar.classList.remove('fs-slider-open');\n }\n\n scroll(){\n if (this.blockFloorSLider)\n return;\n if (this.isScrolling !== null){\n clearTimeout(this.isScrolling);\n this.isScrolling = null;\n }\n if (userPrevent()) return;\n this.rangeBtnToggle();\n enableOrbitControls(false);\n this.isScrolling = setTimeout(()=>{\n for (let number of this.leader.children){\n const scrollDiff = this.leader.scrollTop + this.plugHeight - number.offsetTop;\n if (scrollDiff < this.floorBtnHalfHeight ) {\n const floor = Number(number.getAttribute('data-floor'));\n this.setActiveFloorNumber();\n this.setActiveFloorNumber(number);\n gsap.to(this.leader,{\n duration: .3,\n scrollTop: this.leader.scrollTop - scrollDiff\n });\n this.isScrolling = null;\n this.block();\n this.changeFloor(floor);\n return;\n }\n }\n },300);\n }\n\n getFloorBtn(floor){\n return this.leader?.querySelector(`.fs__floor__number[data-floor=\"${floor}\"]`);\n }\n\n setActiveFloorNumber(element){\n if (!element){\n const getPrevActiveNumber = this.leader.querySelector('.fs__active__floor');\n getPrevActiveNumber && getPrevActiveNumber.classList.remove('fs__active__floor');\n return;\n }\n\n element.classList.add('fs__active__floor');\n }\n\n rangeBtnToggle(){\n const fsMinFloorBtn = this.getFloorBtn(this.floors[this.floors.length - 1]);\n const fsMaxFloorBtn = this.getFloorBtn(this.floors[0]);\n\n const maxBtnDiff = Math.abs(this.leader.scrollTop + this.plugHeight - fsMaxFloorBtn.offsetTop) - this.floorBtnHalfHeight;\n const minBtnDiff = Math.abs(this.leader.scrollTop + this.plugHeight - fsMinFloorBtn.offsetTop) - this.floorBtnHalfHeight;\n\n if (maxBtnDiff < this.plugHeight){\n this.maxFloorBtn.classList.add('fs__hide__btn');\n if(!isMobile) {\n this.maxSeparator.classList.add('fs__hide__btn');\n }\n } else {\n this.maxFloorBtn.classList.remove('fs__hide__btn');\n if(!isMobile) {\n this.maxSeparator.classList.remove('fs__hide__btn');\n }\n }\n\n if (minBtnDiff < this.plugHeight){\n this.minFloorBtn.addClass('fs__hide__btn');\n if(!isMobile) {\n this.minSeparator.addClass('fs__hide__btn');\n }\n } else {\n this.minFloorBtn.removeClass('fs__hide__btn');\n if(!isMobile) {\n this.minSeparator.removeClass('fs__hide__btn');\n }\n }\n }\n\n async click(floorBtn) {\n if (this.blockFloorSLider)\n return;\n\n const target = (floorBtn instanceof HTMLElement) ? floorBtn : floorBtn.target;\n if (!target.classList.contains('fs__floor__number'))\n return;\n target.scrollIntoView({\n block: 'center',\n behavior: 'smooth'\n });\n\n return new Promise(resolve => {\n setTimeout(() => {\n this.rangeBtnToggle();\n resolve(true);\n }, 500);\n });\n }\n\n async changeFloor(selectedFloor){\n if (selectedFloor < settingsData.currentFloor) {\n projectMode.FloorPlan.down(selectedFloor);\n\n if (UIRoot.querySelector('.search__container-main') && !UnitCardClass.cards.length)\n return;\n\n if (isMobile) {\n // await UnitCardClass.closeMobileCard();\n // openSearchHandler();\n } else {\n UnitCardClass.closeMultipleCards();\n }\n } else if (selectedFloor > settingsData.currentFloor) {\n projectMode.FloorPlan.up(selectedFloor);\n\n if (UIRoot.querySelector('.search__container-main') && !UnitCardClass.cards.length)\n return;\n\n if (isMobile) {\n // await UnitCardClass.closeMobileCard();\n // openSearchHandler();\n } else {\n UnitCardClass.closeMultipleCards();\n }\n } else if (selectedFloor === settingsData.currentFloor) {\n enableOrbitControls(true);\n this.unblock();\n }\n }\n\n block(){\n this.blockFloorSLider = true;\n this.slider.style.pointerEvents = 'none';\n this.leader.style.touchAction = 'none';\n }\n\n unblock(){\n this.blockFloorSLider = false;\n this.slider.style.pointerEvents = '';\n this.leader.style.touchAction = '';\n }\n\n updateScroll(currentFloor){\n const floorBtn = this.getFloorBtn(currentFloor);\n const scrollDiff = this.leader.scrollTop + this.plugHeight - floorBtn.offsetTop;\n\n this.setActiveFloorNumber();\n this.setActiveFloorNumber(floorBtn);\n // this.#selectFirstAvailableApartmentOnTheFloor(currentFloor);\n\n gsap.to(this.leader,{\n duration: .5,\n scrollTop: this.leader.scrollTop - scrollDiff,\n onStart: () => this.block(),\n onComplete: () => {\n this.rangeBtnToggle();\n this.unblock();\n }\n });\n }\n\n #mobileMode() {\n const allElements = [...this.slider.children];\n allElements.forEach(element => {\n if (!element.classList.contains('fs__leader') && !element.classList.contains('leader__separator')) {\n element.classList.add('hidden');\n }\n })\n }\n\n #calculateParent() {\n return isMobile\n ? TRoot\n : document.querySelector('.buttons__wrapper');\n }\n}\n","'use strict';\n\n\nimport { Form } from '../../interfaces/Form';\nimport { BaseElement } from '../../interfaces/BaseElement';\nimport { changeLangToCurrent } from '../langSwitcher/langSwitcher';\nimport { isMobile } from '../../../settings';\nimport { Preview } from '../preview/Preview';\nimport { PopUp } from '../../interfaces/pages/PopUp';\nimport { changeFormTitle, customiseForm, moveFormToBlock } from './form';\nimport { CustomerContactNow } from '../../menu/contactUs/CustomerContactNow';\n\nexport class McIdLeadForm {\n\tconstructor () {\n\t\tconst fields = [\n\t\t\t{\n\t\t\t\ttype: 'text',\n\t\t\t\tplaceholder: 'mcIdSignInName',\n\t\t\t\tvalue:'',\n\t\t\t\tname: 'Fname',\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: 'email',\n\t\t\t\tname: 'Email',\n\t\t\t\tvalue:'',\n\t\t\t\tplaceholder: 'mcIdSignInEmail',\n\t\t\t\trequired: true\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: 'tel',\n\t\t\t\tname: 'Mobile',\n\t\t\t\tvalue:'',\n\t\t\t\tplaceholder: 'mcIdSignInPhone',\n\t\t\t\trequired: true\n\t\t\t}\n\t\t];\n\t\t\n\t\tconst params = {\n\t\t\tclassName: 'mc-id__lead-form',\n\t\t\tallowedKey: '',\n\t\t\ttitleKey: 'mcIdLeadFormTitle',\n\t\t\tsubmitKey: 'mcIdSingInSubmit',\n\t\t\tformName: 'mcIdLeadForm'\n\t\t};\n\t\t\n\t\tthis.form = new Form(fields,params);\n\t\tthis.form.create();\n\t\tlet firstCheckboxSelected = true;\n\t\tlet secondCheckboxSelected = true;\n\t\t\n\t\t//First checkbox\n\t\tconst allowedContainer = new BaseElement()\n\t\t\t.addClass('form__allowed-container','mc-id__lead-form__allowed-container')\n\t\t\t.appendTo(this.form.submitBtn.DOMElement,'beforebegin')\n\t\t\t.DOMElement;\n\t\t\n\t\tnew BaseElement('input')\n\t\t\t.addClass('form__allowed-input','mc-id__lead-form__allowed-input')\n\t\t\t.addAttribute('type','checkbox')\n\t\t\t.addAttribute('checked',true)\n\t\t\t.event('change', (e) => {\n\t\t\t\tfirstCheckboxSelected = !!e.target.checked;\n\t\t\t\tsetSubmitBtnState();\n\t\t\t})\n\t\t\t.appendTo(allowedContainer);\n\t\t\n\t\tnew BaseElement('p')\n\t\t\t.addClass('form__allowed-text','mc-id__lead-form__allowed-text','language-string')\n\t\t\t.addAttribute('data-dictionary','allowedText')\n\t\t\t.innerHtml(changeLangToCurrent('allowedText'))\n\t\t\t.appendTo(allowedContainer)\n\t\t\t.DOMElement;\n\t\t\n\t\t//Second checkbox\n\t\tconst conditionContainer = new BaseElement()\n\t\t\t.addClass('form__allowed-container','mc-id__lead-form__allowed-container')\n\t\t\t.appendTo(this.form.submitBtn.DOMElement,'beforebegin')\n\t\t\t.DOMElement;\n\t\t\n\t\tnew BaseElement('input')\n\t\t\t.addClass('form__allowed-input','mc-id__lead-form__allowed-input')\n\t\t\t.addAttribute('type','checkbox')\n\t\t\t.addAttribute('checked',true)\n\t\t\t.event('change', (e) => {\n\t\t\t\tsecondCheckboxSelected = !!e.target.checked;\n\t\t\t\tsetSubmitBtnState();\n\t\t\t})\n\t\t\t.appendTo(conditionContainer);\n\t\t\n\t\tif (isMobile) {\n\t\t\tnew BaseElement('a')\n\t\t\t\t.addClass('mc-id__lead-form__sub-title--conditions','language-string')\n\t\t\t\t.addAttribute('data-dictionary','phoneLoginTitle2')\n\t\t\t\t.innerHtml(changeLangToCurrent('phoneLoginTitle2'))\n\t\t\t\t.addAttribute('href','#')\n\t\t\t\t.event('click',(e) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tnew Preview('/assets/privacy/condition.pdf');\n\t\t\t\t})\n\t\t\t\t.appendTo(conditionContainer)\n\t\t\t\t.DOMElement;\n\t\t} else {\n\t\t\tnew BaseElement('a')\n\t\t\t\t.addClass('mc-id__lead-form__sub-title--conditions','language-string')\n\t\t\t\t.addAttribute('data-dictionary','phoneLoginTitle2')\n\t\t\t\t.innerHtml(changeLangToCurrent('phoneLoginTitle2'))\n\t\t\t\t.addAttribute('href','/assets/privacy/condition.pdf')\n\t\t\t\t.addAttribute('target','_blank')\n\t\t\t\t.appendTo(conditionContainer)\n\t\t\t\t.DOMElement;\n\t\t}\n\t\t\n\t\tconst setSubmitBtnState = () => {\n\t\t\tif (firstCheckboxSelected && secondCheckboxSelected) {\n\t\t\t\tthis.form.submitBtn?.deleteAttribute('disabled');\n\t\t\t} else {\n\t\t\t\tthis.form.submitBtn?.addAttribute('disabled',true);\n\t\t\t}\n\t\t};\n\t\t\n\t\tthis.form.setOnValidCallback((formData) => {\n\t\t\tconst data = {\n\t\t\t\tform: {},\n\t\t\t\tsource: 'dreams-iframe'\n\t\t\t};\n\t\t\tformData.forEach((value,key) => {\n\t\t\t\tdata.form[key] = value;\n\t\t\t});\n\t\t\t\n\t\t\twindow.parent.postMessage(data, \"*\");\n\t\t\tthis.form.hide();\n\t\t});\n\t\tthis.form.show();\n\t}\n\t\n}\n\n\nexport class McIdDreamsForm {\n\tconstructor () {\n\t\t\n\t\tthis.popUp = new PopUp({\n\t\t\tid: 'dreams-form__popup',\n\t\t\tneedsCloseBtn: true,\n\t\t\tdestroy: true\n\t\t});\n\t\t\n\t\tif (CustomerContactNow.isActive) {\n\t\t\tthis.popUp.container.addClass('customer-contact-now');\n\t\t}\n\t\t\n\t\tthis.popUp.onClose = () => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tconst parent = document.querySelector('.contact-us__content') || document.body;\n\t\t\t\tmoveFormToBlock(parent);\n\t\t\t\tcustomiseForm(document.querySelector('.form__container-main'));\n\t\t\t\tchangeFormTitle('leadFormTitle');\n\t\t\t},250);\n\t\t\tthis.popUp.hide();\n\t\t};\n\t\t\n\t\tmoveFormToBlock(this.popUp.content);\n\t\tcustomiseForm(document.querySelector('.form__container-main'));\n\t\tchangeFormTitle('leadFormTitle');\n\t\tthis.popUp.show();\n\t}\n}\n","'use strict'\n\nimport {getUrlParam} from \"../../../functions\";\nimport axios from \"axios\";\nimport {changeLangToCurrent} from \"../langSwitcher/langSwitcher\";\nimport intlTelInput from 'intl-tel-input';\nimport 'intl-tel-input/build/css/intlTelInput.css';\nimport {settingsData} from \"../../../settings\";\nimport { contactToAgentWithWidget } from '../chats/chats';\nimport {BaseElement} from \"../../interfaces/BaseElement\";\nimport { Cookie } from '../../Cookie/Cookie';\nimport { McID, McIDLead } from '../../menu/contactUs/McID';\nimport { CustomerContactNow, CustomerContactNowIframe } from '../../menu/contactUs/CustomerContactNow';\nimport { BmbyMode } from '../../mode/BmbyMode';\n\nlet formTitle = null;\n\nexport const initForm = async (parent) => {\n if ((!config.general.leadForm && !settingsData.isConferenceHost) || BmbyMode.active) return;\n\n const formId = config.general.leadFormId;\n const url = `${config.apiDomain}/External/Interfaces/form/${formId}/`;\n\n // const container = createElements('div', ['form__container-main', 'hidden'], parent, 'beforeend', {\n // data: 'id',\n // value: \"interface-embbed\"\n // });\n\n const container = new BaseElement()\n .addClass('form__container-main', 'hidden')\n .addAttribute('id', \"interface-embbed\")\n .appendTo(parent, 'beforeend')\n .DOMElement;\n \n if (CustomerContactNow.isActive) {\n new CustomerContactNowIframe(container).create();\n \n if (!McID.fromDreamsMap) {\n const element = new McIDLead({\n icon: 'icon-chat'\n });\n \n McID.addNewButton(element.getDOM(),'mc-menu');\n }\n \n return;\n }\n\n await axios.post(url)\n .then(res => {\n container.innerHTML = res.data;\n })\n .catch(err => {\n console.log(err)\n });\n\n const scripts = container.querySelectorAll(\"script\");\n const regExp = /google/gi;\n\n scripts.forEach(script => {\n const isGoogle = regExp.test(script.src);\n if (!isGoogle) {\n const s = document.createElement(\"script\");\n s.setAttribute(\"type\", \"text/javascript\");\n s.innerHTML = script.innerHTML;\n if (script.src && script.src !== \"\")\n s.src = script.src;\n container.insertAdjacentElement('beforeend', s);\n }\n });\n\n if (container.childNodes.length !== 0) {\n const isUS = config.apiDomain.match(/us/gi);\n if (isUS)\n window.intlTelInput = intlTelInput;\n }\n\n addTitle(container);\n\n const style = container.querySelector('style');\n container.removeChild(style);\n customiseForm(container);\n \n if (!McID.fromDreamsMap) {\n const element = new McIDLead({\n icon: 'icon-chat'\n });\n \n McID.addNewButton(element.getDOM(),'mc-menu');\n }\n\n return container;\n}\n\nexport const customiseForm = (parent) => {\n const buttonList = parent.querySelectorAll('input[type=button]');\n buttonList.forEach(btn => {\n btn.classList.contains('button') && btn.classList.add('button');\n btn.removeAttribute('onclick');\n btn.addEventListener('click', handleFormClick);\n });\n\n const emailInput = parent.querySelector('input[type=email]');\n if (emailInput) {\n emailInput.removeAttribute('placeholder');\n emailInput.parentElement.classList.remove('hidden');\n }\n \n const checkBox = parent.querySelector('input[name=\"FieldData[MailSms]\"]');\n if (checkBox) {\n checkBox.checked = config.features?.contactUs?.isCheckboxChecked;\n }\n\n changePhonePattern(parent);\n changePlaceholder(parent);\n setTranslateToCheckbox(parent);\n setTranslateToSendBtn(parent);\n swapSendButtonAndAgreement(parent);\n}\n\nconst swapSendButtonAndAgreement = (parent) => {\n const button = parent.querySelector('.btn');\n const agreement = parent.querySelector('.mail-sms-field');\n if (button && agreement) {\n button.parentElement.insertBefore(agreement, button);\n }\n}\n\nfunction changePhonePattern (parent) {\n const phoneInput = parent.querySelector('input[name=\"FieldData[Phone_Mobile]\"]');\n\n if (!phoneInput) return;\n\n phoneInput.setAttribute('pattern','(^\\\\+?([0-9]{7,})$)');\n}\n\nconst validateForm = () => {\n let valid;\n let formData = document.forms.namedItem(\"interfaceForm\");\n if (formData == null) {\n // const noForm = true;\n const wrapper = document.createElement('form');\n wrapper.name = \"interfaceForm\";\n const el = document.getElementById('bmbyFormWarp');\n el.parentNode.insertBefore(wrapper, el);\n wrapper.appendChild(el);\n formData = document.forms.namedItem(\"interfaceForm\");\n }\n formData = formData.elements;\n valid = document.querySelector('form').reportValidity();\n\n for (let i = 0; i < formData.length; i++) {\n if (!formData[i].checkValidity()) valid = false;\n }\n\n return valid;\n}\n\n// const handleFormClick = (e) => {\n// const bmbyDomain = config.apiDomain === \"https://mbeat.bmby.com\" ? \"https://bmby.com\" : \"https://wwwus.bmby.com\";\n// let formData = document.forms.namedItem(\"interfaceForm\");\n// let noForm;\n//\n// if (formData == null) {\n// noForm = true;\n// }\n//\n// if(validateForm()){\n// stamfunction();//builds hidden input - analytics\n// updateMediaData();//builds hidden input - MediaData\n// const oData = new FormData(formData);\n// oData.append(\"action\", \"sendform\");\n//\n//\n// const url = bmbyDomain + \"/shared/AddLead/index.php\";\n// axios.post(url, oData)\n// .then(data => {\n// if (data.request.readyState === 4 && data.status === 200) {\n// const response = data.request.responseText && JSON.parse(data.request.responseText);\n// if (response[\"status\"] === \"success\") {\n// switch (response[\"responseType\"]) {\n// case \"redirect\" :\n//\n// window.location.href = response[\"response\"];\n// break;\n//\n// case \"alert\" :\n// alert(response[\"response\"]);\n// break;\n//\n// case \"msg\" :\n// const form = document.querySelector(\"#interface-embbed form\");\n// const inform = document.querySelector(\"#messagerResponse\");\n//\n// inform.classList.add('language-string');\n// inform.setAttribute('data-dictionary', 'Thank you for your request, our agents will contact you soon');\n// inform.innerHTML = changeLangToCurrent('Thank you for your request, our agents will contact you soon');\n//\n// form.style.display = \"none\";\n// // inform.innerHTML=response[\"response\"];\n// inform.style.display = \"block\";\n//\n// setTimeout(function () {\n// form.reset();\n// inform.style.display = \"none\";\n// form.style.display = \"block\";\n// }, 7000);\n//\n// break;\n// }\n// } else {\n// const alertbox = document.querySelector(\"#interface-embbed .alert-box\");\n// const errbox = document.querySelector(\"#interface-embbed .alert-box .error\");\n// alertbox.style.display = \"block\";\n// errbox.style.display = \"block\";\n// const inform = document.querySelector(\"#messagerResponse\");\n// inform.classList.add('language-string');\n// inform.setAttribute('data-dictionary', 'Thank you for your request. Our agents will contact you soon');\n// inform.innerHTML = changeLangToCurrent('Thank you for your request. Our agents will contact you soon');\n// // inform.innerHTML = 'Thank you for your request. Our agents will contact you soon';\n// // inform.innerHTML=response[\"response\"];\n// setTimeout(function () {\n// alertbox.style.display = \"none\";\n// errbox.style.display = \"none\";\n// }, 3000);\n// }\n//\n// } else\n// alert(\"error\");\n//\n// })\n// .catch(err => console.log(err))\n// }\n// if(noForm){\n// noForm = false;\n// document.getElementById(\"bmbyFormWarp\").outerHTML = document.getElementById(\"bmbyFormWarp\").innerHTML;\n// }\n// }\n\n\nconst handleFormClick = (e) => {\n const bmbyDomain = config.apiDomain === \"https://mbeat.bmby.com\" ? \"https://bmby.com\" : \"https://wwwus.bmby.com\";\n let formData = document.forms.namedItem(\"interfaceForm\");\n\n const utmValue = getUrlParam('utm_source');\n if (utmValue) {\n const formDataChild = formData.children[0]\n\n new BaseElement('input')\n .setAttributes({\n 'name': 'utm_source',\n 'type': 'hidden',\n 'id': 'utm_source',\n 'value': utmValue\n })\n .appendTo(formDataChild);\n }\n\n let noForm;\n\n if (formData == null) {\n noForm = true;\n }\n\n if(validateForm()){\n stamfunction();//builds hidden input - analytics\n updateMediaData();//builds hidden input - MediaData\n const oData = new FormData(formData);\n oData.append(\"action\", \"sendform\");\n\n\n const url = bmbyDomain + \"/shared/AddLead/index.php\";\n\n if (settingsData.isConferenceHost){\n \n Cookie.setCookie('contactFormData',JSON.stringify({\n name: oData.get('FieldData[Fname]'),\n phone: oData.get('FieldData[Phone_Mobile]')\n }));\n \n Cookie.setCookie('contactFormSend',Date.now());\n\n contactToAgentWithWidget();\n\n // const form = document.querySelector(\"#interface-embbed form\");\n // const inform = document.querySelector(\"#messagerResponse\");\n // const title = document.querySelector('.form__container-main_title');\n\n // inform.classList.add('language-string');\n // inform.setAttribute('data-dictionary', 'Thank you for your request, our agents will contact you soon');\n // inform.innerHTML = changeLangToCurrent('Thank you for your request, our agents will contact you soon');\n //\n // form.style.display = \"none\";\n // title.style.display = 'none';\n // // inform.innerHTML=response[\"response\"];\n // inform.style.display = \"block\";\n //\n // setTimeout(function () {\n // form.reset();\n // inform.style.display = \"none\";\n // form.style.display = \"block\";\n // title.style.display = '';\n // updateContactWidget();\n // }, 7000);\n\n } else {\n e.target.setAttribute('disabled',true);\n\n axios.post(url, oData)\n .then(data => {\n if (data.request.readyState === 4 && data.status === 200) {\n const response = data.request.responseText && JSON.parse(data.request.responseText);\n if (response[\"status\"] === \"success\") {\n Cookie.setCookie('contactFormData',JSON.stringify({\n name: oData.get('FieldData[Fname]'),\n phone: oData.get('FieldData[Phone_Mobile]')\n }));\n \n Cookie.setCookie('contactFormSend',Date.now());\n\n switch (response[\"responseType\"]) {\n case \"redirect\" :\n\n window.location.href = response[\"response\"];\n break;\n\n case \"alert\" :\n alert(response[\"response\"]);\n break;\n\n case \"msg\" :\n const formInContactWidget = document.querySelector('.form__container-main')\n .closest('.contact-widget__content__container');\n\n if (config.contactWidget.active && formInContactWidget) {\n\n //Send form data to consolto\n const sendClientInfo = new CustomEvent('consolto_h2w', {\n detail: {\n 'et-client-info': true,\n 'et-first-name': oData.get('FieldData[Fname]'),\n 'et-email': oData.get('FieldData[Fname]'),\n 'et-phone': oData.get('FieldData[Phone_Mobile]'),\n 'et-agent-id': config.features.contactWidget?.consolto?.agentId || '',\n },\n });\n\n window.dispatchEvent(sendClientInfo);\n contactToAgentWithWidget();\n } else {\n\n const form = document.querySelector(\"#interface-embbed form\");\n const inform = document.querySelector(\"#messagerResponse\");\n const title = document.querySelector('.form__container-main_title');\n\n inform.classList.add('language-string');\n inform.setAttribute('data-dictionary', 'Thank you for your request, our agents will contact you soon');\n inform.innerHTML = changeLangToCurrent('Thank you for your request, our agents will contact you soon');\n\n form.style.display = \"none\";\n title.style.display = 'none';\n // inform.innerHTML=response[\"response\"];\n inform.style.display = \"block\";\n\n setTimeout(function () {\n form.reset();\n inform.style.display = \"none\";\n form.style.display = \"block\";\n title.style.display = '';\n // updateContactWidget();\n }, 7000);\n }\n\n break;\n }\n } else {\n // const alertbox = document.querySelector(\"#interface-embbed .alert-box\");\n // const errbox = document.querySelector(\"#interface-embbed .alert-box .error\");\n // alertbox.style.display = \"block\";\n // errbox.style.display = \"block\";\n const inform = document.querySelector(\"#messagerResponse\");\n inform.classList.add('language-string');\n // inform.setAttribute('data-dictionary', 'Thank you for your request. Our agents will contact you soon');\n // inform.innerHTML = changeLangToCurrent('Thank you for your request. Our agents will contact you soon');\n inform.setAttribute('data-dictionary', 'System error');\n inform.innerHTML = changeLangToCurrent('System error');\n // inform.innerHTML = 'Thank you for your request. Our agents will contact you soon';\n // inform.innerHTML=response[\"response\"];\n // setTimeout(function () {\n // alertbox.style.display = \"none\";\n // errbox.style.display = \"none\";\n // }, 3000);\n }\n\n } else\n alert(\"System error\");\n\n })\n .catch(err => console.log(err))\n .finally(() => {\n e.target.removeAttribute('disabled');\n })\n\n }\n\n\n }\n if(noForm){\n noForm = false;\n document.getElementById(\"bmbyFormWarp\").outerHTML = document.getElementById(\"bmbyFormWarp\").innerHTML;\n }\n};\n\nexport const changePlaceholder = (parent) => {\n if (!Boolean(parent))\n return;\n\n const placeholderDic = [\n {\n name: 'text',\n value: `${changeLangToCurrent('Name')}`\n },\n {\n name: 'tel',\n value: `${changeLangToCurrent('Phone')}`\n },\n {\n name: 'email',\n value: `${changeLangToCurrent('Email')}`\n }\n ]\n const inputList = parent.querySelectorAll('.input');\n inputList.forEach(input => {\n input.removeAttribute('placeholder');\n const ph = placeholderDic.find(object => input.getAttribute('type') === object.name);\n input.setAttribute('placeholder', ph.value);\n input.setAttribute('data-dictionary', ph.value);\n });\n}\n\nexport const addTitle = (parent) => {\n // formTitle = createElements('div',\n // [\n // 'form__container-main_title',\n // 'language-string',\n // 'text',\n // 'subheadline'\n // ], parent, 'afterbegin');\n //\n // formTitle.setAttribute('data-dictionary', 'leadFormTitle');\n // formTitle.innerHTML = `${changeLangToCurrent('leadFormTitle')}`;\n\n new BaseElement()\n .addClass(\n 'form__container-main_title',\n 'language-string',\n 'text',\n 'subheadline'\n )\n .setAttributes({\n 'data-dictionary': 'leadFormTitle'\n })\n .innerHtml(`${changeLangToCurrent('leadFormTitle')}`)\n .appendTo(parent, 'afterbegin')\n}\n\nexport function changeFormTitle (dictionaryKey) {\n if (formTitle) {\n formTitle.setAttribute('data-dictionary', dictionaryKey);\n formTitle.innerHTML = `${changeLangToCurrent(dictionaryKey)}`;\n }\n}\n\nexport const setTranslateToSendBtn = (parent) => {\n if (!Boolean(parent))\n return;\n\n const button = parent.querySelector('.button');\n if (!button)\n return;\n\n button.classList.add('language-string');\n button.setAttribute('data-dictionary', 'send');\n\n const flexibleInputDictionaryAttribute = button.getAttribute('data-dictionary');\n button.setAttribute('value', `${changeLangToCurrent(flexibleInputDictionaryAttribute)}`);\n}\n\nexport const setPropId = (parent, object) => {\n const inputList = parent.querySelectorAll(`input[name=\"FieldData[PropID]\"]`);\n\n inputList.forEach(element => {\n element.value = object.userData.crm_data.bmbyPropID;\n })\n}\n\nexport const setTranslateToCheckbox = (parent) => {\n if (!Boolean(parent))\n return;\n\n const checkBox = parent.querySelector('input[name=\"FieldData[MailSms]\"]');\n if (checkBox) {\n const checkBoxParent = checkBox.parentElement;\n const textElement = checkBoxParent.querySelector('span');\n \n checkBoxParent.classList.add('mail-sms-field');\n textElement.classList.add('language-string', 'text', 'footnote');\n textElement.setAttribute('data-dictionary', 'I would like to receive marketing information, special offers and benefits through email and sms');\n textElement.innerHTML = changeLangToCurrent('I would like to receive marketing information, special offers and benefits through email and sms');\n }\n}\n\nexport const moveFormToBlock = (parent = document.body, position = 'beforeend') => {\n if (!config.general.leadForm && !settingsData.isConferenceHost) return;\n\n const form = document.querySelector('.form__container-main');\n if (!form)\n return;\n\n if (parent.tagName === 'BODY') {\n form.classList.add('hidden');\n } else {\n form.classList.remove('hidden');\n }\n // form.classList.remove('hidden');\n\n parent.insertAdjacentElement(position, form);\n}\n","'use strict';\n\nimport { BaseElement } from '../../interfaces/BaseElement';\nimport { Switch } from '../../interfaces/switchers/Switch';\nimport { changeLangToCurrent } from '../langSwitcher/langSwitcher';\nimport gsap from 'gsap';\nimport {projectMode, settingsData, threeJsVariables} from '../../../settings';\nimport { Box3, Vector3 } from 'three';\nimport {updateShadowMap} from \"../../threejs/lights\";\n\nexport class FutureDevelopment {\n #vec3 = new Vector3();\n #box3 = new Box3();\n\n constructor (parent) {\n this.settings = config.features.futureDevelopment || {active: false, checked: false, list: []};\n this.active = (this.settings.active && this.settings.list.length && !projectMode.LiteMode.isActive());\n if (!this.active) return;\n\n this.parent = parent;\n this.blockAnimation = false;\n }\n\n createSwitcher() {\n if (!this.active) return;\n\n this.mainContainer = new BaseElement()\n .addClass('future-development','display-option','display-options__future-development')\n .appendTo(this.parent)\n .DOMElement;\n\n new BaseElement('span')\n .addClass('future-development__title','language-string')\n .addAttribute('data-dictionary','Future development')\n .innerHtml(changeLangToCurrent('Future development'))\n .appendTo(this.mainContainer);\n\n this.switcher = new Switch(this.mainContainer);\n this.switcher.checked = this.settings.checked;\n this.switcherState = this.settings.checked;\n this.switcher.listener = this.switcherHandler.bind(this);\n this.settings.list.forEach(name => {\n const objectOnScene = threeJsVariables.scene.getObjectByName(name);\n if (objectOnScene) {\n this.#box3.setFromObject(objectOnScene).getSize(this.#vec3);\n objectOnScene.userData.y = objectOnScene.position.y;\n objectOnScene.userData.size = this.#vec3.y;\n }\n });\n\n if (!this.settings.checked) {\n const event = new Event('change');\n this.switcher.checkbox.dispatchEvent(event);\n } else {\n this.settings.list.forEach(name => {\n const objectOnScene = threeJsVariables.scene.getObjectByName(name);\n if (objectOnScene)\n objectOnScene.position.y = this.switcherState ? objectOnScene.userData.y : objectOnScene.userData.y - objectOnScene.userData.size;\n });\n }\n }\n\n switcherHandler(e) {\n if (this.blockAnimation) {\n this.switcher.checkbox.checked = this.switcherState;\n return;\n }\n\n this.switcherState = e.target.checked;\n const tl = gsap.timeline({\n paused: true,\n onStart: () => this.blockAnimation = true,\n onUpdate: () => updateShadowMap(),\n onComplete: () => this.blockAnimation = false\n });\n\n this.settings.list.forEach(name => {\n const objectOnScene = threeJsVariables.scene.getObjectByName(name);\n if (objectOnScene) {\n const animation = gsap.to(objectOnScene.position,{\n y: this.switcherState ? objectOnScene.userData.y : objectOnScene.userData.y - objectOnScene.userData.size,\n duration: 1,\n onStart: () => {\n if (this.switcherState) {\n objectOnScene.visible = true;\n }\n },\n onComplete: () => {\n if (!this.switcherState) {\n objectOnScene.visible = false\n }\n }\n });\n\n tl.add(animation,0);\n }\n });\n tl.play(0);\n }\n\n}","'use strict';\n\nimport { components, isDesktop, isMobile, projectMode, settingsData, TRoot } from '../../../settings';\nimport {\n capitalizeFirstLetter,\n getUrlParam,\n isOptionsCardOpened,\n numberWithCommas,\n RTL_LANGUAGES\n} from '../../../functions';\nimport {rightNavMenuZIndexChange} from \"../../menu/navigation/right-nav-bar\";\nimport {closeAsideMenu, getActiveMenuData, setMenuPositionDataAttribute, toggleMenuWidth, updatePagesStyle} from '../../menu/menu';\nimport {\n changeOptionsCardGalleryDirection,\n renameTowerNameInOptionCard,\n setWidthOfCardDependingOnMenu,\n} from '../../cards/optionsCards';\nimport {CardTypes, ViewMode} from \"../../../common\";\nimport { mapUpdate } from '../../widgets/poi/poiv3';\nimport {applyNow, closeBtnHandler} from \"../apply-now/applyNow\";\nimport {applyNowContent} from \"../apply-now/applyNowContent\";\nimport {createStreetNames} from \"../street-names/addStreetNames\";\nimport {dragUnitCard} from \"../../cards/cardsAnimation\";\nimport { updateMapPanoramaInOrbit } from '../../poi/poiCss';\nimport {recreateBlockWhenLangSwitch} from \"../../menu/search/similarSearch\";\nimport {changeUnitCardPosition, closeMultiCards} from \"../../cards/unitCards/unitCardFunctions\";\nimport {setCompareButtonPosition} from \"../../menu/navigation/compareButton\";\nimport { changeNotiflixNotifyPosition, updateNotiflixNotifyDirection } from '../../analytics/statistic';\nimport {UnitCardClass} from \"../../cards/unitCards/UnitCardClass\";\nimport { BuildingSwitch } from '../building-switch/building_switch';\nimport { contactFormChangeLanguage } from '../chats/chats';\nimport {PrivacyAndTerms} from \"../../menu/PrivacyAndTerms\";\nimport { CylinderBase } from '../../cylinderGrid/CylinderBase';\nimport {closeOptionsCard, updateLangTechnicalSpecifications} from \"../../cards/cardsFunctions\";\nimport {changePlaceholder, setTranslateToCheckbox, setTranslateToSendBtn} from \"../form/form\";\nimport { contactUsChangeLanguage } from '../../menu/contactUs/contactUs';\nimport {IntersectionLegenda} from \"../IntersectionLegenda\";\nimport { updateAboutUsLanguage } from '../../menu/about/aboutv3';\nimport { Documents } from '../../menu/documents/Documents';\nimport {Vantages} from \"../vantage/Vantage\";\nimport {BaseElement} from \"../../interfaces/BaseElement\";\nimport { Cookie } from '../../Cookie/Cookie';\nimport { Joystick } from '../../controls/Joystick';\nimport {Amenities} from \"../Amenities/Amenities\";\nimport {cylinderFloorNumbers} from \"../cylinderFloorNumbers/cylinderFloorNumbers\";\nimport { Objects } from '../../threejs/Objects/Objects';\nimport { SalesPlane } from \"../../threejs/SalesPlane\";\nimport { MultipleSelector } from '../../interfaces/MultipleSelector';\n\nexport const langSwitcher = ({languages}) => {\n const languagesArr = languages.map(lang => lang.toLowerCase());\n const currentLang = getCurrentLang();\n changeContentText(currentLang);\n setLocaleFormatForNumbers();\n\n if (languagesArr.length > 1)\n addLangDropDownList(languagesArr,languages,currentLang);\n}\n\nexport function langToggleHandler (e) {\n let element;\n if (e.target.classList.contains('lord__icon')){\n element = e.target.closest('.header__lang-toggle').querySelector('.lang-items__list');\n } else {\n element = e.target.firstElementChild;\n }\n setActiveLang(element);\n element.classList.toggle('lang-items__list__hide');\n}\n\nfunction setActiveLang (langContainer) {\n const currentLang = getCurrentLang();\n const activeLang = langContainer.querySelector('.lang__item.lang__active');\n if (currentLang !== activeLang.dataset.lang){\n activeLang.classList.remove('lang__active');\n const newLangElement = langContainer.querySelector('.lang__item[data-lang=\"'+currentLang+'\"]');\n newLangElement.classList.add('lang__active');\n }\n}\n\nfunction addLangDropDownList (langsArr,languages,currentLang) {\n const allToggle = document.querySelectorAll('.header__lang-toggle');\n allToggle.forEach(el =>{\n addLangToMobileMenu(el,langsArr,languages,currentLang);\n el.addEventListener('click',(e) => langToggleHandler(e));\n });\n}\n\nfunction addLangToMobileMenu (container,langsArr,languages,currentLang) {\n const englishFlagNodes = {\n us: ``,\n uk: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n `,\n ca: `\n \n \n `\n };\n\n const languageFlags = [\n {\n lang: 'en',\n text: 'English',\n node: englishFlagNodes[config.features?.languageSwitcher?.flagType?.en || 'us'],\n },\n {\n lang: 'he',\n text: 'Hebrew',\n className: 'icon-Israel2',\n node: ``,\n },\n {\n lang: 'ar',\n text: 'Arabic',\n node: `\n `,\n },\n {\n lang: 'el',\n text: 'Greek',\n node: ` \n `,\n },\n {\n lang: 'de',\n text: 'German',\n node: `\n \n \n \n `,\n },\n {\n lang: 'ru',\n text: 'Russian',\n className: 'icon-Russia2',\n node: ``,\n },\n {\n lang: 'fr',\n text: 'France',\n className: 'icon-fr',\n node: ``\n },\n {\n lang: 'sp',\n text: 'Spain',\n className: 'icon-spain',\n node: `\n \n \n \n \n \n \n \n \n \n `\n }\n ];\n\n const isNoFlag = config.features?.languageSwitcher?.noFlag;\n const langListItems = new BaseElement('ul')\n .addClass('lang-items__list', isDesktop ? 'lang-items__list__hide' : null, isNoFlag ? 'no-flag' : null)\n .event('click', (e) => mobileLangHandler(e,languages))\n .appendTo(isDesktop ? container : document.getElementsByClassName('aside__language-switcher')[0]);\n\n langsArr.forEach(lng =>{\n if (!languageFlags.find(item => item.lang === lng))\n return;\n\n const {lang, node, text} = languageFlags.find(item => item.lang === lng);\n\n const lngBtn = new BaseElement('li')\n .addClass('lang__item', currentLang === lng ? 'lang__active' : null)\n .setAttributes({\n 'data-lang': lng,\n 'title': capitalizeFirstLetter(lng)\n })\n .appendTo(langListItems.DOMElement);\n\n const buttonType = isNoFlag\n ? lang\n : node ? node : lang\n\n new BaseElement('span')\n .addClass('lang__flag')\n .innerHtml(buttonType)\n .appendTo(lngBtn.DOMElement);\n\n if (isDesktop && !isNoFlag) {\n new BaseElement('span')\n .addClass('lang__text')\n .innerHtml(text)\n .appendTo(lngBtn.DOMElement)\n }\n });\n}\n\nfunction mobileLangHandler (e,languages) {\n e.stopImmediatePropagation();\n const parent = e.target.closest('.lang__item');\n if (!parent)\n return;\n const languageList = parent.closest('.lang-items__list');\n const lng = languages.find(item => item === parent.dataset.lang);\n\n if (lng === getCurrentLang())\n return;\n\n const presentDisclaimer = TRoot.querySelector('.disclaimer__pop-up')\n if (presentDisclaimer)\n presentDisclaimer.remove();\n\n setDomElementLangChanges(lng, parent);\n changeContentText(lng);\n setLocaleFormatForNumbers();\n changeLangInIframe(lng);\n // headerState(true);\n\n if (isMobile) {\n closeOptionsCard();\n closeAsideMenu();\n components.mobileSearch?.update('full-update');\n }\n\n closeMultiCards();\n\n if (settingsData.activeViewMode === ViewMode.Cylinder && !Vantages.isActive())\n Amenities.show();\n\n if (isDesktop)\n languageList.classList.add('lang-items__list__hide');\n if (!isMobile)\n toggleMenuWidth({action: 'mini', source: 'orbit'})\n}\n\nfunction changeLangInIframe (lang) {\n const allFrames = document.querySelectorAll('.content__page');\n allFrames.forEach(frame =>{\n const newUrl = new URL(frame.src);\n newUrl.searchParams.set('lang',lang);\n frame.src = newUrl.href;\n });\n\n if (isMobile && UnitCardClass.findCard()?.html)\n changeUnitCardPosition();\n}\n\n// export function setInitialHtmlDirection (settings) {\n// const languagesArr = settings.languages.map(lang => lang.toLowerCase());\n// let currentLang = languagesArr[0];\n//\n// if (!getCookie('language')) {\n// const isLangInURL = getUrlParam('lang');\n// if (isLangInURL && languagesArr.includes(isLangInURL)) {\n// currentLang = isLangInURL;\n// } else if (settings.general.defaultLanguage) {\n// const defLanguage = settings.general.defaultLanguage;\n// currentLang = languagesArr.includes(defLanguage) ? defLanguage : languagesArr[0];\n// } else {\n// let userLang = window.navigator.language.toLowerCase().split('-')[0];\n// currentLang = settings.languages.includes(userLang) ? userLang : languagesArr[0];\n// }\n// } else {\n// currentLang = getCookie('language');\n// if (!languagesArr.includes(currentLang)){\n// if (settings.general.defaultLanguage){\n// const defLanguage = settings.general.defaultLanguage;\n// currentLang = languagesArr.includes(defLanguage) ? defLanguage : languagesArr[0];\n// } else {\n// let userLang = window.navigator.language.toLowerCase().split('-')[0];\n// currentLang = settings.languages.includes(userLang) ? userLang : languagesArr[0];\n// }\n// }\n// }\n//\n// const html = document.querySelector('html');\n// html.setAttribute('lang', currentLang);\n// html.setAttribute('dir', (RTL_LANGUAGES.includes(currentLang)) ? 'rtl' : 'ltr');\n// setCookie('language', currentLang, {'max-age': 365 * 2 * 24 * 60 * 60 * 1000});\n//\n// return currentLang;\n// }\n\nexport function setInitialHtmlDirection(settings) {\n const languagesArr = settings.languages.map(lang => lang.toLowerCase());\n const getDefaultLanguage = () => {\n const defLanguage = settings.general.defaultLanguage?.toLowerCase();\n return languagesArr.includes(defLanguage) ? defLanguage : languagesArr[0];\n };\n\n const getBrowserLanguage = () => {\n let userLang = window.navigator.language.toLowerCase().split('-')[0];\n return languagesArr.includes(userLang) ? userLang : getDefaultLanguage();\n };\n\n const getCurrentLanguage = () => {\n const urlLang = getUrlParam('lang')?.toLowerCase();\n if (urlLang && languagesArr.includes(urlLang)) return urlLang;\n\n const cookieLang = Cookie.getCookie('language');\n if (cookieLang) return languagesArr.includes(cookieLang) ? cookieLang : getDefaultLanguage();\n\n return settings.general.defaultLanguage ? getDefaultLanguage() : getBrowserLanguage();\n };\n\n const currentLang = getCurrentLanguage();\n document.querySelector('html').setAttribute('lang', currentLang);\n document.querySelector('html').setAttribute('dir', RTL_LANGUAGES.includes(currentLang) ? 'rtl' : 'ltr');\n Cookie.setCookie('language', currentLang, { 'max-age': 365 * 2 * 24 * 60 * 60 * 1000 });\n projectMode.Pagination.query('lang',currentLang);\n}\n\nasync function setDomElementLangChanges(currentLang, selectedLang) {\n const applyNowBlock = document.querySelector(`.apply__main-container:not(.chats)`);\n const optionsCard = document.querySelector(`.${CardTypes.Options}-card`);\n\n settingsData.switchLang = true;\n const html = document.querySelector('html');\n html.setAttribute('lang', currentLang);\n projectMode.Pagination.query('lang',currentLang);\n html.setAttribute('dir', RTL_LANGUAGES.includes(currentLang) ? 'rtl' : 'ltr');\n Cookie.setCookie('language', currentLang, {'max-age': 365 * 2 * 24 * 60 * 60 * 1000});\n\n const langContainer = selectedLang.parentElement;\n const activeLang = langContainer.querySelector('.lang__item.lang__active');\n activeLang.classList.remove('lang__active');\n selectedLang.classList.add('lang__active');\n updatePagesStyle();\n\n BuildingSwitch.changeLanguage();\n // changeSearchModulePosition();\n contactFormChangeLanguage();\n\n const formContainerMainElement = document.querySelector('.form__container-main');\n changePlaceholder(formContainerMainElement);\n setTranslateToCheckbox(formContainerMainElement);\n setTranslateToSendBtn(formContainerMainElement);\n mapUpdate();\n updateAboutUsLanguage();\n updateMapPanoramaInOrbit();\n PrivacyAndTerms.updateItems();\n !isMobile && createStreetNames();\n !isMobile && cylinderFloorNumbers();\n contactUsChangeLanguage();\n Documents.changeLanguage();\n SalesPlane.scope?.changeLanguage();\n setMenuPositionDataAttribute();\n CylinderBase.changeLanguage();\n Objects.translate();\n IntersectionLegenda.build();\n Joystick.updatePosition();\n MultipleSelector.refresh();\n if (!isMobile) {\n changeUnitCardPosition();\n\n setTimeout(() => {\n dragUnitCard();\n }, 200);\n\n if (applyNowBlock) {\n closeBtnHandler();\n applyNow(document.body, applyNowContent, false, ['print-btn', 'popup-btn.icon-close'], settingsData.lastClickedFlat);\n }\n }\n\n updateLangTechnicalSpecifications();\n\n if (optionsCard) {\n setWidthOfCardDependingOnMenu();\n recreateBlockWhenLangSwitch();\n changeOptionsCardGalleryDirection();\n renameTowerNameInOptionCard();\n changeNotiflixNotifyPosition();\n Vantages.scopes.forEach(scope => scope.viewer.calculateViewport());\n }else {\n updateNotiflixNotifyDirection();\n }\n\n UnitCardClass.changeTowerNameWhenLanguageSwitching();\n\n const compareCards = document.querySelector(`.compare-block`);\n if (compareCards) {\n setWidthOfCardDependingOnMenu(compareCards);\n }\n\n const compareButton = document.querySelector('.compare-button');\n compareButton && setCompareButtonPosition(compareButton);\n\n}\n\nfunction changeContentText(currentLang) {\n const textNodes = document.querySelectorAll('.language-string');\n textNodes.forEach(item => {\n if (item.getAttribute('data-dictionary')) {\n if (item.classList.contains('flat-label--subtitle')){\n item.innerText = changeLangToCurrent(item.getAttribute('data-dictionary'));\n } else {\n if (item.getAttribute('data-dictionary-param')) {\n const param = item.getAttribute('data-dictionary-param');\n item.setAttribute(param, changeLangToCurrent(item.getAttribute('data-dictionary')));\n } else {\n item.innerText = changeLangToCurrent(item.getAttribute('data-dictionary'));\n }\n }\n } else if (item.getAttribute('data-lang-en')) {\n item.innerText = item.getAttribute(`data-lang-${getCurrentLang()}`);\n } else if (item.getAttribute('data-dictionary-parse')) {\n const [number, word] = item.textContent.split(' ');\n const text = changeLangToCurrent(item.getAttribute('data-dictionary-parse'));\n item.innerText = `${number} ${text}`;\n } else if (item.getAttribute('data-lord-lang')) {\n item.lastChild.textContent = changeLangToCurrent(item.getAttribute('data-lord-lang'));\n } else {\n item.innerText = item.getAttribute(`data-${currentLang.toLowerCase()}`);\n }\n });\n}\n\nfunction setLocaleFormatForNumbers() {\n const markedNumberElements = document.querySelectorAll('.translate-number');\n markedNumberElements.forEach(element => {\n const isPrice = element.classList.contains('price');\n element.innerText = numberWithCommas(element.innerText, isPrice);\n });\n}\n\nexport function getCurrentLang() {\n return document.querySelector('html').getAttribute('lang');\n}\n\nexport function getCurrentLangDirection () {\n return document.querySelector('html').getAttribute('dir');\n}\n\nexport function changeLangToCurrent(word,replaceArray) {\n if (config.dictionary && config.dictionary[word]) {\n if (replaceArray && replaceArray.length) {\n replaceArray.forEach(obj => {\n Object.entries(obj).forEach(([key,value]) => {\n const regExp = new RegExp(`{{${key}}}`, 'g');\n Object.entries(value).forEach(([lang,value]) => {\n config.dictionary[word][lang] = config.dictionary[word][lang].replace(regExp,value);\n });\n });\n });\n }\n if (config.dictionary[word][getCurrentLang()])\n return config.dictionary[word][getCurrentLang()];\n }\n\n return word;\n}\n","'use strict';\n\nconst COUNTRIES = {\n\tAD: 'Andorra',\n\tAE: 'United Arab Emirates',\n\tAF: 'Afghanistan',\n\tAG: 'Antigua and Barbuda',\n\tAI: 'Anguilla',\n\tAL: 'Albania',\n\tAM: 'Armenia',\n\tAO: 'Angola',\n\tAQ: 'Antarctica',\n\tAR: 'Argentina',\n\tAS: 'American Samoa',\n\tAT: 'Austria',\n\tAU: 'Australia',\n\tAW: 'Aruba',\n\tAX: 'Åland Islands',\n\tAZ: 'Azerbaijan',\n\tBA: 'Bosnia and Herzegovina',\n\tBB: 'Barbados',\n\tBD: 'Bangladesh',\n\tBE: 'Belgium',\n\tBF: 'Burkina Faso',\n\tBG: 'Bulgaria',\n\tBH: 'Bahrain',\n\tBI: 'Burundi',\n\tBJ: 'Benin',\n\tBL: 'Saint Barthélemy',\n\tBM: 'Bermuda',\n\tBN: 'Brunei',\n\tBO: 'Bolivia',\n\tBQ: 'Caribbean Netherlands',\n\tBR: 'Brazil',\n\tBS: 'Bahamas',\n\tBT: 'Bhutan',\n\tBV: 'Bouvet Island',\n\tBW: 'Botswana',\n\tBY: 'Belarus',\n\tBZ: 'Belize',\n\tCA: 'Canada',\n\tCC: 'Cocos Islands',\n\tCD: 'Democratic Republic of the Congo',\n\tCF: 'Central African Republic',\n\tCG: 'Republic of the Congo',\n\tCH: 'Switzerland',\n\tCI: 'Ivory Coast',\n\tCK: 'Cook Islands',\n\tCL: 'Chile',\n\tCM: 'Cameroon',\n\tCN: 'China',\n\tCO: 'Colombia',\n\tCR: 'Costa Rica',\n\tCU: 'Cuba',\n\tCV: 'Cabo Verde',\n\tCW: 'Curaçao',\n\tCX: 'Christmas Island',\n\tCY: 'Cyprus',\n\tCZ: 'Czechia',\n\tDE: 'Germany',\n\tDJ: 'Djibouti',\n\tDK: 'Denmark',\n\tDM: 'Dominica',\n\tDO: 'Dominican Republic',\n\tDZ: 'Algeria',\n\tEC: 'Ecuador',\n\tEE: 'Estonia',\n\tEG: 'Egypt',\n\tEH: 'Western Sahara',\n\tER: 'Eritrea',\n\tES: 'Spain',\n\tET: 'Ethiopia',\n\tFI: 'Finland',\n\tFJ: 'Fiji',\n\tFK: 'Falkland Islands',\n\tFM: 'Micronesia',\n\tFO: 'Faroe Islands',\n\tFR: 'France',\n\tGA: 'Gabon',\n\tGB: 'United Kingdom',\n\tGD: 'Grenada',\n\tGE: 'Georgia',\n\tGF: 'French Guiana',\n\tGG: 'Guernsey',\n\tGH: 'Ghana',\n\tGI: 'Gibraltar',\n\tGL: 'Greenland',\n\tGM: 'Gambia',\n\tGN: 'Guinea',\n\tGP: 'Guadeloupe',\n\tGQ: 'Equatorial Guinea',\n\tGR: 'Greece',\n\tGS: 'South Georgia and the South Sandwich Islands',\n\tGT: 'Guatemala',\n\tGU: 'Guam',\n\tGW: 'Guinea-Bissau',\n\tGY: 'Guyana',\n\tHK: 'Hong Kong',\n\tHM: 'Heard Island and McDonald Islands',\n\tHN: 'Honduras',\n\tHR: 'Croatia',\n\tHT: 'Haiti',\n\tHU: 'Hungary',\n\tID: 'Indonesia',\n\tIE: 'Ireland',\n\tIL: 'Israel',\n\tIM: 'Isle of Man',\n\tIN: 'India',\n\tIO: 'British Indian Ocean Territory',\n\tIQ: 'Iraq',\n\tIR: 'Iran',\n\tIS: 'Iceland',\n\tIT: 'Italy',\n\tJE: 'Jersey',\n\tJM: 'Jamaica',\n\tJO: 'Jordan',\n\tJP: 'Japan',\n\tKE: 'Kenya',\n\tKG: 'Kyrgyzstan',\n\tKH: 'Cambodia',\n\tKI: 'Kiribati',\n\tKM: 'Comoros',\n\tKN: 'Saint Kitts and Nevis',\n\tKP: 'North Korea',\n\tKR: 'South Korea',\n\tKW: 'Kuwait',\n\tKY: 'Cayman Islands',\n\tKZ: 'Kazakhstan',\n\tLA: 'Laos',\n\tLB: 'Lebanon',\n\tLC: 'Saint Lucia',\n\tLI: 'Liechtenstein',\n\tLK: 'Sri Lanka',\n\tLR: 'Liberia',\n\tLS: 'Lesotho',\n\tLT: 'Lithuania',\n\tLU: 'Luxembourg',\n\tLV: 'Latvia',\n\tLY: 'Libya',\n\tMA: 'Morocco',\n\tMC: 'Monaco',\n\tMD: 'Moldova',\n\tME: 'Montenegro',\n\tMF: 'Saint Martin',\n\tMG: 'Madagascar',\n\tMH: 'Marshall Islands',\n\tMK: 'North Macedonia',\n\tML: 'Mali',\n\tMM: 'Myanmar',\n\tMN: 'Mongolia',\n\tMO: 'Macao',\n\tMP: 'Northern Mariana Islands',\n\tMQ: 'Martinique',\n\tMR: 'Mauritania',\n\tMS: 'Montserrat',\n\tMT: 'Malta',\n\tMU: 'Mauritius',\n\tMV: 'Maldives',\n\tMW: 'Malawi',\n\tMX: 'Mexico',\n\tMY: 'Malaysia',\n\tMZ: 'Mozambique',\n\tNA: 'Namibia',\n\tNC: 'New Caledonia',\n\tNE: 'Niger',\n\tNF: 'Norfolk Island',\n\tNG: 'Nigeria',\n\tNI: 'Nicaragua',\n\tNL: 'Netherlands',\n\tNO: 'Norway',\n\tNP: 'Nepal',\n\tNR: 'Nauru',\n\tNU: 'Niue',\n\tNZ: 'New Zealand',\n\tOM: 'Oman',\n\tPA: 'Panama',\n\tPE: 'Peru',\n\tPF: 'French Polynesia',\n\tPG: 'Papua New Guinea',\n\tPH: 'Philippines',\n\tPK: 'Pakistan',\n\tPL: 'Poland',\n\tPM: 'Saint Pierre and Miquelon',\n\tPN: 'Pitcairn',\n\tPR: 'Puerto Rico',\n\tPS: 'Palestine',\n\tPT: 'Portugal',\n\tPW: 'Palau',\n\tPY: 'Paraguay',\n\tQA: 'Qatar',\n\tRE: 'Réunion',\n\tRO: 'Romania',\n\tRS: 'Serbia',\n\tRU: 'Russia',\n\tRW: 'Rwanda',\n\tSA: 'Saudi Arabia',\n\tSB: 'Solomon Islands',\n\tSC: 'Seychelles',\n\tSD: 'Sudan',\n\tSE: 'Sweden',\n\tSG: 'Singapore',\n\tSH: 'Saint Helena, Ascension and Tristan da Cunha',\n\tSI: 'Slovenia',\n\tSJ: 'Svalbard and Jan Mayen',\n\tSK: 'Slovakia',\n\tSL: 'Sierra Leone',\n\tSM: 'San Marino',\n\tSN: 'Senegal',\n\tSO: 'Somalia',\n\tSR: 'Suriname',\n\tSS: 'South Sudan',\n\tST: 'Sao Tome and Principe',\n\tSV: 'El Salvador',\n\tSX: 'Sint Maarten',\n\tSY: 'Syria',\n\tSZ: 'Eswatini',\n\tTC: 'Turks and Caicos Islands',\n\tTD: 'Chad',\n\tTF: 'French Southern Territories',\n\tTG: 'Togo',\n\tTH: 'Thailand',\n\tTJ: 'Tajikistan',\n\tTK: 'Tokelau',\n\tTL: 'Timor-Leste',\n\tTM: 'Turkmenistan',\n\tTN: 'Tunisia',\n\tTO: 'Tonga',\n\tTR: 'Turkey',\n\tTT: 'Trinidad and Tobago',\n\tTV: 'Tuvalu',\n\tTW: 'Taiwan',\n\tTZ: 'Tanzania',\n\tUA: 'Ukraine',\n\tUG: 'Uganda',\n\tUM: 'United States Minor Outlying Islands',\n\tUS: 'United States of America',\n\tUY: 'Uruguay',\n\tUZ: 'Uzbekistan',\n\tVA: 'Holy See',\n\tVC: 'Saint Vincent and the Grenadines',\n\tVE: 'Venezuela',\n\tVG: 'Virgin Islands (UK)',\n\tVI: 'Virgin Islands (US)',\n\tVN: 'Vietnam',\n\tVU: 'Vanuatu',\n\tWF: 'Wallis and Futuna',\n\tWS: 'Samoa',\n\tYE: 'Yemen',\n\tYT: 'Mayotte',\n\tZA: 'South Africa',\n\tZM: 'Zambia',\n\tZW: 'Zimbabwe',\n};\nconst TIME_ZONES = {\n\t'Africa/Abidjan': {\n\t\tu: 0,\n\t\tc: ['CI', 'BF', 'GH', 'GM', 'GN', 'ML', 'MR', 'SH', 'SL', 'SN', 'TG'],\n\t},\n\t'Africa/Accra': {\n\t\ta: 'Africa/Abidjan',\n\t\tc: ['GH'],\n\t\tr: 1,\n\t},\n\t'Africa/Addis_Ababa': {\n\t\ta: 'Africa/Nairobi',\n\t\tc: ['ET'],\n\t\tr: 1,\n\t},\n\t'Africa/Algiers': {\n\t\tu: 60,\n\t\tc: ['DZ'],\n\t},\n\t'Africa/Asmara': {\n\t\ta: 'Africa/Nairobi',\n\t\tc: ['ER'],\n\t\tr: 1,\n\t},\n\t'Africa/Asmera': {\n\t\ta: 'Africa/Nairobi',\n\t\tc: ['ER'],\n\t\tr: 1,\n\t},\n\t'Africa/Bamako': {\n\t\ta: 'Africa/Abidjan',\n\t\tc: ['ML'],\n\t\tr: 1,\n\t},\n\t'Africa/Bangui': {\n\t\ta: 'Africa/Lagos',\n\t\tc: ['CF'],\n\t\tr: 1,\n\t},\n\t'Africa/Banjul': {\n\t\ta: 'Africa/Abidjan',\n\t\tc: ['GM'],\n\t\tr: 1,\n\t},\n\t'Africa/Bissau': {\n\t\tu: 0,\n\t\tc: ['GW'],\n\t},\n\t'Africa/Blantyre': {\n\t\ta: 'Africa/Maputo',\n\t\tc: ['MW'],\n\t\tr: 1,\n\t},\n\t'Africa/Brazzaville': {\n\t\ta: 'Africa/Lagos',\n\t\tc: ['CG'],\n\t\tr: 1,\n\t},\n\t'Africa/Bujumbura': {\n\t\ta: 'Africa/Maputo',\n\t\tc: ['BI'],\n\t\tr: 1,\n\t},\n\t'Africa/Cairo': {\n\t\tu: 120,\n\t\tc: ['EG'],\n\t},\n\t'Africa/Casablanca': {\n\t\tu: 60,\n\t\td: 0,\n\t\tc: ['MA'],\n\t},\n\t'Africa/Ceuta': {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: ['ES'],\n\t},\n\t'Africa/Conakry': {\n\t\ta: 'Africa/Abidjan',\n\t\tc: ['GN'],\n\t\tr: 1,\n\t},\n\t'Africa/Dakar': {\n\t\ta: 'Africa/Abidjan',\n\t\tc: ['SN'],\n\t\tr: 1,\n\t},\n\t'Africa/Dar_es_Salaam': {\n\t\ta: 'Africa/Nairobi',\n\t\tc: ['TZ'],\n\t\tr: 1,\n\t},\n\t'Africa/Djibouti': {\n\t\ta: 'Africa/Nairobi',\n\t\tc: ['DJ'],\n\t\tr: 1,\n\t},\n\t'Africa/Douala': {\n\t\ta: 'Africa/Lagos',\n\t\tc: ['CM'],\n\t\tr: 1,\n\t},\n\t'Africa/El_Aaiun': {\n\t\tu: 60,\n\t\td: 0,\n\t\tc: ['EH'],\n\t},\n\t'Africa/Freetown': {\n\t\ta: 'Africa/Abidjan',\n\t\tc: ['SL'],\n\t\tr: 1,\n\t},\n\t'Africa/Gaborone': {\n\t\ta: 'Africa/Maputo',\n\t\tc: ['BW'],\n\t\tr: 1,\n\t},\n\t'Africa/Harare': {\n\t\ta: 'Africa/Maputo',\n\t\tc: ['ZW'],\n\t\tr: 1,\n\t},\n\t'Africa/Johannesburg': {\n\t\tu: 120,\n\t\tc: ['ZA', 'LS', 'SZ'],\n\t},\n\t'Africa/Juba': {\n\t\tu: 120,\n\t\tc: ['SS'],\n\t},\n\t'Africa/Kampala': {\n\t\ta: 'Africa/Nairobi',\n\t\tc: ['UG'],\n\t\tr: 1,\n\t},\n\t'Africa/Khartoum': {\n\t\tu: 120,\n\t\tc: ['SD'],\n\t},\n\t'Africa/Kigali': {\n\t\ta: 'Africa/Maputo',\n\t\tc: ['RW'],\n\t\tr: 1,\n\t},\n\t'Africa/Kinshasa': {\n\t\ta: 'Africa/Lagos',\n\t\tc: ['CD'],\n\t\tr: 1,\n\t},\n\t'Africa/Lagos': {\n\t\tu: 60,\n\t\tc: ['NG', 'AO', 'BJ', 'CD', 'CF', 'CG', 'CM', 'GA', 'GQ', 'NE'],\n\t},\n\t'Africa/Libreville': {\n\t\ta: 'Africa/Lagos',\n\t\tc: ['GA'],\n\t\tr: 1,\n\t},\n\t'Africa/Lome': {\n\t\ta: 'Africa/Abidjan',\n\t\tc: ['TG'],\n\t\tr: 1,\n\t},\n\t'Africa/Luanda': {\n\t\ta: 'Africa/Lagos',\n\t\tc: ['AO'],\n\t\tr: 1,\n\t},\n\t'Africa/Lubumbashi': {\n\t\ta: 'Africa/Maputo',\n\t\tc: ['CD'],\n\t\tr: 1,\n\t},\n\t'Africa/Lusaka': {\n\t\ta: 'Africa/Maputo',\n\t\tc: ['ZM'],\n\t\tr: 1,\n\t},\n\t'Africa/Malabo': {\n\t\ta: 'Africa/Lagos',\n\t\tc: ['GQ'],\n\t\tr: 1,\n\t},\n\t'Africa/Maputo': {\n\t\tu: 120,\n\t\tc: ['MZ', 'BI', 'BW', 'CD', 'MW', 'RW', 'ZM', 'ZW'],\n\t},\n\t'Africa/Maseru': {\n\t\ta: 'Africa/Johannesburg',\n\t\tc: ['LS'],\n\t\tr: 1,\n\t},\n\t'Africa/Mbabane': {\n\t\ta: 'Africa/Johannesburg',\n\t\tc: ['SZ'],\n\t\tr: 1,\n\t},\n\t'Africa/Mogadishu': {\n\t\ta: 'Africa/Nairobi',\n\t\tc: ['SO'],\n\t\tr: 1,\n\t},\n\t'Africa/Monrovia': {\n\t\tu: 0,\n\t\tc: ['LR'],\n\t},\n\t'Africa/Nairobi': {\n\t\tu: 180,\n\t\tc: ['KE', 'DJ', 'ER', 'ET', 'KM', 'MG', 'SO', 'TZ', 'UG', 'YT'],\n\t},\n\t'Africa/Ndjamena': {\n\t\tu: 60,\n\t\tc: ['TD'],\n\t},\n\t'Africa/Niamey': {\n\t\ta: 'Africa/Lagos',\n\t\tc: ['NE'],\n\t\tr: 1,\n\t},\n\t'Africa/Nouakchott': {\n\t\ta: 'Africa/Abidjan',\n\t\tc: ['MR'],\n\t\tr: 1,\n\t},\n\t'Africa/Ouagadougou': {\n\t\ta: 'Africa/Abidjan',\n\t\tc: ['BF'],\n\t\tr: 1,\n\t},\n\t'Africa/Porto-Novo': {\n\t\ta: 'Africa/Lagos',\n\t\tc: ['BJ'],\n\t\tr: 1,\n\t},\n\t'Africa/Sao_Tome': {\n\t\tu: 0,\n\t\tc: ['ST'],\n\t},\n\t'Africa/Timbuktu': {\n\t\ta: 'Africa/Abidjan',\n\t\tc: ['ML'],\n\t\tr: 1,\n\t},\n\t'Africa/Tripoli': {\n\t\tu: 120,\n\t\tc: ['LY'],\n\t},\n\t'Africa/Tunis': {\n\t\tu: 60,\n\t\tc: ['TN'],\n\t},\n\t'Africa/Windhoek': {\n\t\tu: 120,\n\t\tc: ['NA'],\n\t},\n\t'America/Adak': {\n\t\tu: -600,\n\t\td: -540,\n\t\tc: ['US'],\n\t},\n\t'America/Anchorage': {\n\t\tu: -540,\n\t\td: -480,\n\t\tc: ['US'],\n\t},\n\t'America/Anguilla': {\n\t\ta: 'America/Puerto_Rico',\n\t\tc: ['AI'],\n\t\tr: 1,\n\t},\n\t'America/Antigua': {\n\t\ta: 'America/Puerto_Rico',\n\t\tc: ['AG'],\n\t\tr: 1,\n\t},\n\t'America/Araguaina': {\n\t\tu: -180,\n\t\tc: ['BR'],\n\t},\n\t'America/Argentina/Buenos_Aires': {\n\t\tu: -180,\n\t\tc: ['AR'],\n\t},\n\t'America/Argentina/Catamarca': {\n\t\tu: -180,\n\t\tc: ['AR'],\n\t},\n\t'America/Argentina/ComodRivadavia': {\n\t\ta: 'America/Argentina/Catamarca',\n\t\tr: 1,\n\t},\n\t'America/Argentina/Cordoba': {\n\t\tu: -180,\n\t\tc: ['AR'],\n\t},\n\t'America/Argentina/Jujuy': {\n\t\tu: -180,\n\t\tc: ['AR'],\n\t},\n\t'America/Argentina/La_Rioja': {\n\t\tu: -180,\n\t\tc: ['AR'],\n\t},\n\t'America/Argentina/Mendoza': {\n\t\tu: -180,\n\t\tc: ['AR'],\n\t},\n\t'America/Argentina/Rio_Gallegos': {\n\t\tu: -180,\n\t\tc: ['AR'],\n\t},\n\t'America/Argentina/Salta': {\n\t\tu: -180,\n\t\tc: ['AR'],\n\t},\n\t'America/Argentina/San_Juan': {\n\t\tu: -180,\n\t\tc: ['AR'],\n\t},\n\t'America/Argentina/San_Luis': {\n\t\tu: -180,\n\t\tc: ['AR'],\n\t},\n\t'America/Argentina/Tucuman': {\n\t\tu: -180,\n\t\tc: ['AR'],\n\t},\n\t'America/Argentina/Ushuaia': {\n\t\tu: -180,\n\t\tc: ['AR'],\n\t},\n\t'America/Aruba': {\n\t\ta: 'America/Puerto_Rico',\n\t\tc: ['AW'],\n\t\tr: 1,\n\t},\n\t'America/Asuncion': {\n\t\tu: -240,\n\t\td: -180,\n\t\tc: ['PY'],\n\t},\n\t'America/Atikokan': {\n\t\ta: 'America/Panama',\n\t\tc: ['CA'],\n\t\tr: 1,\n\t},\n\t'America/Atka': {\n\t\ta: 'America/Adak',\n\t\tr: 1,\n\t},\n\t'America/Bahia': {\n\t\tu: -180,\n\t\tc: ['BR'],\n\t},\n\t'America/Bahia_Banderas': {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: ['MX'],\n\t},\n\t'America/Barbados': {\n\t\tu: -240,\n\t\tc: ['BB'],\n\t},\n\t'America/Belem': {\n\t\tu: -180,\n\t\tc: ['BR'],\n\t},\n\t'America/Belize': {\n\t\tu: -360,\n\t\tc: ['BZ'],\n\t},\n\t'America/Blanc-Sablon': {\n\t\ta: 'America/Puerto_Rico',\n\t\tc: ['CA'],\n\t\tr: 1,\n\t},\n\t'America/Boa_Vista': {\n\t\tu: -240,\n\t\tc: ['BR'],\n\t},\n\t'America/Bogota': {\n\t\tu: -300,\n\t\tc: ['CO'],\n\t},\n\t'America/Boise': {\n\t\tu: -420,\n\t\td: -360,\n\t\tc: ['US'],\n\t},\n\t'America/Buenos_Aires': {\n\t\ta: 'America/Argentina/Buenos_Aires',\n\t\tr: 1,\n\t},\n\t'America/Cambridge_Bay': {\n\t\tu: -420,\n\t\td: -360,\n\t\tc: ['CA'],\n\t},\n\t'America/Campo_Grande': {\n\t\tu: -240,\n\t\tc: ['BR'],\n\t},\n\t'America/Cancun': {\n\t\tu: -300,\n\t\tc: ['MX'],\n\t},\n\t'America/Caracas': {\n\t\tu: -240,\n\t\tc: ['VE'],\n\t},\n\t'America/Catamarca': {\n\t\ta: 'America/Argentina/Catamarca',\n\t\tr: 1,\n\t},\n\t'America/Cayenne': {\n\t\tu: -180,\n\t\tc: ['GF'],\n\t},\n\t'America/Cayman': {\n\t\ta: 'America/Panama',\n\t\tc: ['KY'],\n\t\tr: 1,\n\t},\n\t'America/Chicago': {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: ['US'],\n\t},\n\t'America/Chihuahua': {\n\t\tu: -420,\n\t\td: -360,\n\t\tc: ['MX'],\n\t},\n\t'America/Coral_Harbour': {\n\t\ta: 'America/Panama',\n\t\tc: ['CA'],\n\t\tr: 1,\n\t},\n\t'America/Cordoba': {\n\t\ta: 'America/Argentina/Cordoba',\n\t\tr: 1,\n\t},\n\t'America/Costa_Rica': {\n\t\tu: -360,\n\t\tc: ['CR'],\n\t},\n\t'America/Creston': {\n\t\ta: 'America/Phoenix',\n\t\tc: ['CA'],\n\t\tr: 1,\n\t},\n\t'America/Cuiaba': {\n\t\tu: -240,\n\t\tc: ['BR'],\n\t},\n\t'America/Curacao': {\n\t\ta: 'America/Puerto_Rico',\n\t\tc: ['CW'],\n\t\tr: 1,\n\t},\n\t'America/Danmarkshavn': {\n\t\tu: 0,\n\t\tc: ['GL'],\n\t},\n\t'America/Dawson': {\n\t\tu: -420,\n\t\tc: ['CA'],\n\t},\n\t'America/Dawson_Creek': {\n\t\tu: -420,\n\t\tc: ['CA'],\n\t},\n\t'America/Denver': {\n\t\tu: -420,\n\t\td: -360,\n\t\tc: ['US'],\n\t},\n\t'America/Detroit': {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: ['US'],\n\t},\n\t'America/Dominica': {\n\t\ta: 'America/Puerto_Rico',\n\t\tc: ['DM'],\n\t\tr: 1,\n\t},\n\t'America/Edmonton': {\n\t\tu: -420,\n\t\td: -360,\n\t\tc: ['CA'],\n\t},\n\t'America/Eirunepe': {\n\t\tu: -300,\n\t\tc: ['BR'],\n\t},\n\t'America/El_Salvador': {\n\t\tu: -360,\n\t\tc: ['SV'],\n\t},\n\t'America/Ensenada': {\n\t\ta: 'America/Tijuana',\n\t\tr: 1,\n\t},\n\t'America/Fort_Nelson': {\n\t\tu: -420,\n\t\tc: ['CA'],\n\t},\n\t'America/Fort_Wayne': {\n\t\ta: 'America/Indiana/Indianapolis',\n\t\tr: 1,\n\t},\n\t'America/Fortaleza': {\n\t\tu: -180,\n\t\tc: ['BR'],\n\t},\n\t'America/Glace_Bay': {\n\t\tu: -240,\n\t\td: -180,\n\t\tc: ['CA'],\n\t},\n\t'America/Godthab': {\n\t\ta: 'America/Nuuk',\n\t\tr: 1,\n\t},\n\t'America/Goose_Bay': {\n\t\tu: -240,\n\t\td: -180,\n\t\tc: ['CA'],\n\t},\n\t'America/Grand_Turk': {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: ['TC'],\n\t},\n\t'America/Grenada': {\n\t\ta: 'America/Puerto_Rico',\n\t\tc: ['GD'],\n\t\tr: 1,\n\t},\n\t'America/Guadeloupe': {\n\t\ta: 'America/Puerto_Rico',\n\t\tc: ['GP'],\n\t\tr: 1,\n\t},\n\t'America/Guatemala': {\n\t\tu: -360,\n\t\tc: ['GT'],\n\t},\n\t'America/Guayaquil': {\n\t\tu: -300,\n\t\tc: ['EC'],\n\t},\n\t'America/Guyana': {\n\t\tu: -240,\n\t\tc: ['GY'],\n\t},\n\t'America/Halifax': {\n\t\tu: -240,\n\t\td: -180,\n\t\tc: ['CA'],\n\t},\n\t'America/Havana': {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: ['CU'],\n\t},\n\t'America/Hermosillo': {\n\t\tu: -420,\n\t\tc: ['MX'],\n\t},\n\t'America/Indiana/Indianapolis': {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: ['US'],\n\t},\n\t'America/Indiana/Knox': {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: ['US'],\n\t},\n\t'America/Indiana/Marengo': {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: ['US'],\n\t},\n\t'America/Indiana/Petersburg': {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: ['US'],\n\t},\n\t'America/Indiana/Tell_City': {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: ['US'],\n\t},\n\t'America/Indiana/Vevay': {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: ['US'],\n\t},\n\t'America/Indiana/Vincennes': {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: ['US'],\n\t},\n\t'America/Indiana/Winamac': {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: ['US'],\n\t},\n\t'America/Indianapolis': {\n\t\ta: 'America/Indiana/Indianapolis',\n\t\tr: 1,\n\t},\n\t'America/Inuvik': {\n\t\tu: -420,\n\t\td: -360,\n\t\tc: ['CA'],\n\t},\n\t'America/Iqaluit': {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: ['CA'],\n\t},\n\t'America/Jamaica': {\n\t\tu: -300,\n\t\tc: ['JM'],\n\t},\n\t'America/Jujuy': {\n\t\ta: 'America/Argentina/Jujuy',\n\t\tr: 1,\n\t},\n\t'America/Juneau': {\n\t\tu: -540,\n\t\td: -480,\n\t\tc: ['US'],\n\t},\n\t'America/Kentucky/Louisville': {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: ['US'],\n\t},\n\t'America/Kentucky/Monticello': {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: ['US'],\n\t},\n\t'America/Knox_IN': {\n\t\ta: 'America/Indiana/Knox',\n\t\tr: 1,\n\t},\n\t'America/Kralendijk': {\n\t\ta: 'America/Puerto_Rico',\n\t\tc: ['BQ'],\n\t\tr: 1,\n\t},\n\t'America/La_Paz': {\n\t\tu: -240,\n\t\tc: ['BO'],\n\t},\n\t'America/Lima': {\n\t\tu: -300,\n\t\tc: ['PE'],\n\t},\n\t'America/Los_Angeles': {\n\t\tu: -480,\n\t\td: -420,\n\t\tc: ['US'],\n\t},\n\t'America/Louisville': {\n\t\ta: 'America/Kentucky/Louisville',\n\t\tr: 1,\n\t},\n\t'America/Lower_Princes': {\n\t\ta: 'America/Puerto_Rico',\n\t\tc: ['SX'],\n\t\tr: 1,\n\t},\n\t'America/Maceio': {\n\t\tu: -180,\n\t\tc: ['BR'],\n\t},\n\t'America/Managua': {\n\t\tu: -360,\n\t\tc: ['NI'],\n\t},\n\t'America/Manaus': {\n\t\tu: -240,\n\t\tc: ['BR'],\n\t},\n\t'America/Marigot': {\n\t\ta: 'America/Puerto_Rico',\n\t\tc: ['MF'],\n\t\tr: 1,\n\t},\n\t'America/Martinique': {\n\t\tu: -240,\n\t\tc: ['MQ'],\n\t},\n\t'America/Matamoros': {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: ['MX'],\n\t},\n\t'America/Mazatlan': {\n\t\tu: -420,\n\t\td: -360,\n\t\tc: ['MX'],\n\t},\n\t'America/Mendoza': {\n\t\ta: 'America/Argentina/Mendoza',\n\t\tr: 1,\n\t},\n\t'America/Menominee': {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: ['US'],\n\t},\n\t'America/Merida': {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: ['MX'],\n\t},\n\t'America/Metlakatla': {\n\t\tu: -540,\n\t\td: -480,\n\t\tc: ['US'],\n\t},\n\t'America/Mexico_City': {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: ['MX'],\n\t},\n\t'America/Miquelon': {\n\t\tu: -180,\n\t\td: -120,\n\t\tc: ['PM'],\n\t},\n\t'America/Moncton': {\n\t\tu: -240,\n\t\td: -180,\n\t\tc: ['CA'],\n\t},\n\t'America/Monterrey': {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: ['MX'],\n\t},\n\t'America/Montevideo': {\n\t\tu: -180,\n\t\tc: ['UY'],\n\t},\n\t'America/Montreal': {\n\t\ta: 'America/Toronto',\n\t\tc: ['CA'],\n\t\tr: 1,\n\t},\n\t'America/Montserrat': {\n\t\ta: 'America/Puerto_Rico',\n\t\tc: ['MS'],\n\t\tr: 1,\n\t},\n\t'America/Nassau': {\n\t\ta: 'America/Toronto',\n\t\tc: ['BS'],\n\t\tr: 1,\n\t},\n\t'America/New_York': {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: ['US'],\n\t},\n\t'America/Nipigon': {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: ['CA'],\n\t},\n\t'America/Nome': {\n\t\tu: -540,\n\t\td: -480,\n\t\tc: ['US'],\n\t},\n\t'America/Noronha': {\n\t\tu: -120,\n\t\tc: ['BR'],\n\t},\n\t'America/North_Dakota/Beulah': {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: ['US'],\n\t},\n\t'America/North_Dakota/Center': {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: ['US'],\n\t},\n\t'America/North_Dakota/New_Salem': {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: ['US'],\n\t},\n\t'America/Nuuk': {\n\t\tu: -180,\n\t\td: -120,\n\t\tc: ['GL'],\n\t},\n\t'America/Ojinaga': {\n\t\tu: -420,\n\t\td: -360,\n\t\tc: ['MX'],\n\t},\n\t'America/Panama': {\n\t\tu: -300,\n\t\tc: ['PA', 'CA', 'KY'],\n\t},\n\t'America/Pangnirtung': {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: ['CA'],\n\t},\n\t'America/Paramaribo': {\n\t\tu: -180,\n\t\tc: ['SR'],\n\t},\n\t'America/Phoenix': {\n\t\tu: -420,\n\t\tc: ['US', 'CA'],\n\t},\n\t'America/Port-au-Prince': {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: ['HT'],\n\t},\n\t'America/Port_of_Spain': {\n\t\ta: 'America/Puerto_Rico',\n\t\tc: ['TT'],\n\t\tr: 1,\n\t},\n\t'America/Porto_Acre': {\n\t\ta: 'America/Rio_Branco',\n\t\tr: 1,\n\t},\n\t'America/Porto_Velho': {\n\t\tu: -240,\n\t\tc: ['BR'],\n\t},\n\t'America/Puerto_Rico': {\n\t\tu: -240,\n\t\tc: [\n\t\t\t'PR',\n\t\t\t'AG',\n\t\t\t'CA',\n\t\t\t'AI',\n\t\t\t'AW',\n\t\t\t'BL',\n\t\t\t'BQ',\n\t\t\t'CW',\n\t\t\t'DM',\n\t\t\t'GD',\n\t\t\t'GP',\n\t\t\t'KN',\n\t\t\t'LC',\n\t\t\t'MF',\n\t\t\t'MS',\n\t\t\t'SX',\n\t\t\t'TT',\n\t\t\t'VC',\n\t\t\t'VG',\n\t\t\t'VI',\n\t\t],\n\t},\n\t'America/Punta_Arenas': {\n\t\tu: -180,\n\t\tc: ['CL'],\n\t},\n\t'America/Rainy_River': {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: ['CA'],\n\t},\n\t'America/Rankin_Inlet': {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: ['CA'],\n\t},\n\t'America/Recife': {\n\t\tu: -180,\n\t\tc: ['BR'],\n\t},\n\t'America/Regina': {\n\t\tu: -360,\n\t\tc: ['CA'],\n\t},\n\t'America/Resolute': {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: ['CA'],\n\t},\n\t'America/Rio_Branco': {\n\t\tu: -300,\n\t\tc: ['BR'],\n\t},\n\t'America/Rosario': {\n\t\ta: 'America/Argentina/Cordoba',\n\t\tr: 1,\n\t},\n\t'America/Santa_Isabel': {\n\t\ta: 'America/Tijuana',\n\t\tr: 1,\n\t},\n\t'America/Santarem': {\n\t\tu: -180,\n\t\tc: ['BR'],\n\t},\n\t'America/Santiago': {\n\t\tu: -240,\n\t\td: -180,\n\t\tc: ['CL'],\n\t},\n\t'America/Santo_Domingo': {\n\t\tu: -240,\n\t\tc: ['DO'],\n\t},\n\t'America/Sao_Paulo': {\n\t\tu: -180,\n\t\tc: ['BR'],\n\t},\n\t'America/Scoresbysund': {\n\t\tu: -60,\n\t\td: 0,\n\t\tc: ['GL'],\n\t},\n\t'America/Shiprock': {\n\t\ta: 'America/Denver',\n\t\tr: 1,\n\t},\n\t'America/Sitka': {\n\t\tu: -540,\n\t\td: -480,\n\t\tc: ['US'],\n\t},\n\t'America/St_Barthelemy': {\n\t\ta: 'America/Puerto_Rico',\n\t\tc: ['BL'],\n\t\tr: 1,\n\t},\n\t'America/St_Johns': {\n\t\tu: -150,\n\t\td: -90,\n\t\tc: ['CA'],\n\t},\n\t'America/St_Kitts': {\n\t\ta: 'America/Puerto_Rico',\n\t\tc: ['KN'],\n\t\tr: 1,\n\t},\n\t'America/St_Lucia': {\n\t\ta: 'America/Puerto_Rico',\n\t\tc: ['LC'],\n\t\tr: 1,\n\t},\n\t'America/St_Thomas': {\n\t\ta: 'America/Puerto_Rico',\n\t\tc: ['VI'],\n\t\tr: 1,\n\t},\n\t'America/St_Vincent': {\n\t\ta: 'America/Puerto_Rico',\n\t\tc: ['VC'],\n\t\tr: 1,\n\t},\n\t'America/Swift_Current': {\n\t\tu: -360,\n\t\tc: ['CA'],\n\t},\n\t'America/Tegucigalpa': {\n\t\tu: -360,\n\t\tc: ['HN'],\n\t},\n\t'America/Thule': {\n\t\tu: -240,\n\t\td: -180,\n\t\tc: ['GL'],\n\t},\n\t'America/Thunder_Bay': {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: ['CA'],\n\t},\n\t'America/Tijuana': {\n\t\tu: -480,\n\t\td: -420,\n\t\tc: ['MX'],\n\t},\n\t'America/Toronto': {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: ['CA', 'BS'],\n\t},\n\t'America/Tortola': {\n\t\ta: 'America/Puerto_Rico',\n\t\tc: ['VG'],\n\t\tr: 1,\n\t},\n\t'America/Vancouver': {\n\t\tu: -480,\n\t\td: -420,\n\t\tc: ['CA'],\n\t},\n\t'America/Virgin': {\n\t\ta: 'America/Puerto_Rico',\n\t\tc: ['VI'],\n\t\tr: 1,\n\t},\n\t'America/Whitehorse': {\n\t\tu: -420,\n\t\tc: ['CA'],\n\t},\n\t'America/Winnipeg': {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: ['CA'],\n\t},\n\t'America/Yakutat': {\n\t\tu: -540,\n\t\td: -480,\n\t\tc: ['US'],\n\t},\n\t'America/Yellowknife': {\n\t\tu: -420,\n\t\td: -360,\n\t\tc: ['CA'],\n\t},\n\t'Antarctica/Casey': {\n\t\tu: 660,\n\t\tc: ['AQ'],\n\t},\n\t'Antarctica/Davis': {\n\t\tu: 420,\n\t\tc: ['AQ'],\n\t},\n\t'Antarctica/DumontDUrville': {\n\t\ta: 'Pacific/Port_Moresby',\n\t\tc: ['AQ'],\n\t\tr: 1,\n\t},\n\t'Antarctica/Macquarie': {\n\t\tu: 600,\n\t\td: 660,\n\t\tc: ['AU'],\n\t},\n\t'Antarctica/Mawson': {\n\t\tu: 300,\n\t\tc: ['AQ'],\n\t},\n\t'Antarctica/McMurdo': {\n\t\ta: 'Pacific/Auckland',\n\t\tc: ['AQ'],\n\t\tr: 1,\n\t},\n\t'Antarctica/Palmer': {\n\t\tu: -180,\n\t\tc: ['AQ'],\n\t},\n\t'Antarctica/Rothera': {\n\t\tu: -180,\n\t\tc: ['AQ'],\n\t},\n\t'Antarctica/South_Pole': {\n\t\ta: 'Pacific/Auckland',\n\t\tc: ['AQ'],\n\t\tr: 1,\n\t},\n\t'Antarctica/Syowa': {\n\t\ta: 'Asia/Riyadh',\n\t\tc: ['AQ'],\n\t\tr: 1,\n\t},\n\t'Antarctica/Troll': {\n\t\tu: 0,\n\t\td: 120,\n\t\tc: ['AQ'],\n\t},\n\t'Antarctica/Vostok': {\n\t\tu: 360,\n\t\tc: ['AQ'],\n\t},\n\t'Arctic/Longyearbyen': {\n\t\ta: 'Europe/Oslo',\n\t\tc: ['SJ'],\n\t\tr: 1,\n\t},\n\t'Asia/Aden': {\n\t\ta: 'Asia/Riyadh',\n\t\tc: ['YE'],\n\t\tr: 1,\n\t},\n\t'Asia/Almaty': {\n\t\tu: 360,\n\t\tc: ['KZ'],\n\t},\n\t'Asia/Amman': {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: ['JO'],\n\t},\n\t'Asia/Anadyr': {\n\t\tu: 720,\n\t\tc: ['RU'],\n\t},\n\t'Asia/Aqtau': {\n\t\tu: 300,\n\t\tc: ['KZ'],\n\t},\n\t'Asia/Aqtobe': {\n\t\tu: 300,\n\t\tc: ['KZ'],\n\t},\n\t'Asia/Ashgabat': {\n\t\tu: 300,\n\t\tc: ['TM'],\n\t},\n\t'Asia/Ashkhabad': {\n\t\ta: 'Asia/Ashgabat',\n\t\tr: 1,\n\t},\n\t'Asia/Atyrau': {\n\t\tu: 300,\n\t\tc: ['KZ'],\n\t},\n\t'Asia/Baghdad': {\n\t\tu: 180,\n\t\tc: ['IQ'],\n\t},\n\t'Asia/Bahrain': {\n\t\ta: 'Asia/Qatar',\n\t\tc: ['BH'],\n\t\tr: 1,\n\t},\n\t'Asia/Baku': {\n\t\tu: 240,\n\t\tc: ['AZ'],\n\t},\n\t'Asia/Bangkok': {\n\t\tu: 420,\n\t\tc: ['TH', 'KH', 'LA', 'VN'],\n\t},\n\t'Asia/Barnaul': {\n\t\tu: 420,\n\t\tc: ['RU'],\n\t},\n\t'Asia/Beirut': {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: ['LB'],\n\t},\n\t'Asia/Bishkek': {\n\t\tu: 360,\n\t\tc: ['KG'],\n\t},\n\t'Asia/Brunei': {\n\t\tu: 480,\n\t\tc: ['BN'],\n\t},\n\t'Asia/Calcutta': {\n\t\ta: 'Asia/Kolkata',\n\t\tr: 1,\n\t},\n\t'Asia/Chita': {\n\t\tu: 540,\n\t\tc: ['RU'],\n\t},\n\t'Asia/Choibalsan': {\n\t\tu: 480,\n\t\tc: ['MN'],\n\t},\n\t'Asia/Chongqing': {\n\t\ta: 'Asia/Shanghai',\n\t\tr: 1,\n\t},\n\t'Asia/Chungking': {\n\t\ta: 'Asia/Shanghai',\n\t\tr: 1,\n\t},\n\t'Asia/Colombo': {\n\t\tu: 330,\n\t\tc: ['LK'],\n\t},\n\t'Asia/Dacca': {\n\t\ta: 'Asia/Dhaka',\n\t\tr: 1,\n\t},\n\t'Asia/Damascus': {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: ['SY'],\n\t},\n\t'Asia/Dhaka': {\n\t\tu: 360,\n\t\tc: ['BD'],\n\t},\n\t'Asia/Dili': {\n\t\tu: 540,\n\t\tc: ['TL'],\n\t},\n\t'Asia/Dubai': {\n\t\tu: 240,\n\t\tc: ['AE', 'OM'],\n\t},\n\t'Asia/Dushanbe': {\n\t\tu: 300,\n\t\tc: ['TJ'],\n\t},\n\t'Asia/Famagusta': {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: ['CY'],\n\t},\n\t'Asia/Gaza': {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: ['PS'],\n\t},\n\t'Asia/Harbin': {\n\t\ta: 'Asia/Shanghai',\n\t\tr: 1,\n\t},\n\t'Asia/Hebron': {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: ['PS'],\n\t},\n\t'Asia/Ho_Chi_Minh': {\n\t\tu: 420,\n\t\tc: ['VN'],\n\t},\n\t'Asia/Hong_Kong': {\n\t\tu: 480,\n\t\tc: ['HK'],\n\t},\n\t'Asia/Hovd': {\n\t\tu: 420,\n\t\tc: ['MN'],\n\t},\n\t'Asia/Irkutsk': {\n\t\tu: 480,\n\t\tc: ['RU'],\n\t},\n\t'Asia/Istanbul': {\n\t\ta: 'Europe/Istanbul',\n\t\tr: 1,\n\t},\n\t'Asia/Jakarta': {\n\t\tu: 420,\n\t\tc: ['ID'],\n\t},\n\t'Asia/Jayapura': {\n\t\tu: 540,\n\t\tc: ['ID'],\n\t},\n\t'Asia/Jerusalem': {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: ['IL'],\n\t},\n\t'Asia/Kabul': {\n\t\tu: 270,\n\t\tc: ['AF'],\n\t},\n\t'Asia/Kamchatka': {\n\t\tu: 720,\n\t\tc: ['RU'],\n\t},\n\t'Asia/Karachi': {\n\t\tu: 300,\n\t\tc: ['PK'],\n\t},\n\t'Asia/Kashgar': {\n\t\ta: 'Asia/Urumqi',\n\t\tr: 1,\n\t},\n\t'Asia/Kathmandu': {\n\t\tu: 345,\n\t\tc: ['NP'],\n\t},\n\t'Asia/Katmandu': {\n\t\ta: 'Asia/Kathmandu',\n\t\tr: 1,\n\t},\n\t'Asia/Khandyga': {\n\t\tu: 540,\n\t\tc: ['RU'],\n\t},\n\t'Asia/Kolkata': {\n\t\tu: 330,\n\t\tc: ['IN'],\n\t},\n\t'Asia/Krasnoyarsk': {\n\t\tu: 420,\n\t\tc: ['RU'],\n\t},\n\t'Asia/Kuala_Lumpur': {\n\t\tu: 480,\n\t\tc: ['MY'],\n\t},\n\t'Asia/Kuching': {\n\t\tu: 480,\n\t\tc: ['MY'],\n\t},\n\t'Asia/Kuwait': {\n\t\ta: 'Asia/Riyadh',\n\t\tc: ['KW'],\n\t\tr: 1,\n\t},\n\t'Asia/Macao': {\n\t\ta: 'Asia/Macau',\n\t\tr: 1,\n\t},\n\t'Asia/Macau': {\n\t\tu: 480,\n\t\tc: ['MO'],\n\t},\n\t'Asia/Magadan': {\n\t\tu: 660,\n\t\tc: ['RU'],\n\t},\n\t'Asia/Makassar': {\n\t\tu: 480,\n\t\tc: ['ID'],\n\t},\n\t'Asia/Manila': {\n\t\tu: 480,\n\t\tc: ['PH'],\n\t},\n\t'Asia/Muscat': {\n\t\ta: 'Asia/Dubai',\n\t\tc: ['OM'],\n\t\tr: 1,\n\t},\n\t'Asia/Nicosia': {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: ['CY'],\n\t},\n\t'Asia/Novokuznetsk': {\n\t\tu: 420,\n\t\tc: ['RU'],\n\t},\n\t'Asia/Novosibirsk': {\n\t\tu: 420,\n\t\tc: ['RU'],\n\t},\n\t'Asia/Omsk': {\n\t\tu: 360,\n\t\tc: ['RU'],\n\t},\n\t'Asia/Oral': {\n\t\tu: 300,\n\t\tc: ['KZ'],\n\t},\n\t'Asia/Phnom_Penh': {\n\t\ta: 'Asia/Bangkok',\n\t\tc: ['KH'],\n\t\tr: 1,\n\t},\n\t'Asia/Pontianak': {\n\t\tu: 420,\n\t\tc: ['ID'],\n\t},\n\t'Asia/Pyongyang': {\n\t\tu: 540,\n\t\tc: ['KP'],\n\t},\n\t'Asia/Qatar': {\n\t\tu: 180,\n\t\tc: ['QA', 'BH'],\n\t},\n\t'Asia/Qostanay': {\n\t\tu: 360,\n\t\tc: ['KZ'],\n\t},\n\t'Asia/Qyzylorda': {\n\t\tu: 300,\n\t\tc: ['KZ'],\n\t},\n\t'Asia/Rangoon': {\n\t\ta: 'Asia/Yangon',\n\t\tr: 1,\n\t},\n\t'Asia/Riyadh': {\n\t\tu: 180,\n\t\tc: ['SA', 'AQ', 'KW', 'YE'],\n\t},\n\t'Asia/Saigon': {\n\t\ta: 'Asia/Ho_Chi_Minh',\n\t\tr: 1,\n\t},\n\t'Asia/Sakhalin': {\n\t\tu: 660,\n\t\tc: ['RU'],\n\t},\n\t'Asia/Samarkand': {\n\t\tu: 300,\n\t\tc: ['UZ'],\n\t},\n\t'Asia/Seoul': {\n\t\tu: 540,\n\t\tc: ['KR'],\n\t},\n\t'Asia/Shanghai': {\n\t\tu: 480,\n\t\tc: ['CN'],\n\t},\n\t'Asia/Singapore': {\n\t\tu: 480,\n\t\tc: ['SG', 'MY'],\n\t},\n\t'Asia/Srednekolymsk': {\n\t\tu: 660,\n\t\tc: ['RU'],\n\t},\n\t'Asia/Taipei': {\n\t\tu: 480,\n\t\tc: ['TW'],\n\t},\n\t'Asia/Tashkent': {\n\t\tu: 300,\n\t\tc: ['UZ'],\n\t},\n\t'Asia/Tbilisi': {\n\t\tu: 240,\n\t\tc: ['GE'],\n\t},\n\t'Asia/Tehran': {\n\t\tu: 210,\n\t\td: 270,\n\t\tc: ['IR'],\n\t},\n\t'Asia/Tel_Aviv': {\n\t\ta: 'Asia/Jerusalem',\n\t\tr: 1,\n\t},\n\t'Asia/Thimbu': {\n\t\ta: 'Asia/Thimphu',\n\t\tr: 1,\n\t},\n\t'Asia/Thimphu': {\n\t\tu: 360,\n\t\tc: ['BT'],\n\t},\n\t'Asia/Tokyo': {\n\t\tu: 540,\n\t\tc: ['JP'],\n\t},\n\t'Asia/Tomsk': {\n\t\tu: 420,\n\t\tc: ['RU'],\n\t},\n\t'Asia/Ujung_Pandang': {\n\t\ta: 'Asia/Makassar',\n\t\tr: 1,\n\t},\n\t'Asia/Ulaanbaatar': {\n\t\tu: 480,\n\t\tc: ['MN'],\n\t},\n\t'Asia/Ulan_Bator': {\n\t\ta: 'Asia/Ulaanbaatar',\n\t\tr: 1,\n\t},\n\t'Asia/Urumqi': {\n\t\tu: 360,\n\t\tc: ['CN'],\n\t},\n\t'Asia/Ust-Nera': {\n\t\tu: 600,\n\t\tc: ['RU'],\n\t},\n\t'Asia/Vientiane': {\n\t\ta: 'Asia/Bangkok',\n\t\tc: ['LA'],\n\t\tr: 1,\n\t},\n\t'Asia/Vladivostok': {\n\t\tu: 600,\n\t\tc: ['RU'],\n\t},\n\t'Asia/Yakutsk': {\n\t\tu: 540,\n\t\tc: ['RU'],\n\t},\n\t'Asia/Yangon': {\n\t\tu: 390,\n\t\tc: ['MM'],\n\t},\n\t'Asia/Yekaterinburg': {\n\t\tu: 300,\n\t\tc: ['RU'],\n\t},\n\t'Asia/Yerevan': {\n\t\tu: 240,\n\t\tc: ['AM'],\n\t},\n\t'Atlantic/Azores': {\n\t\tu: -60,\n\t\td: 0,\n\t\tc: ['PT'],\n\t},\n\t'Atlantic/Bermuda': {\n\t\tu: -240,\n\t\td: -180,\n\t\tc: ['BM'],\n\t},\n\t'Atlantic/Canary': {\n\t\tu: 0,\n\t\td: 60,\n\t\tc: ['ES'],\n\t},\n\t'Atlantic/Cape_Verde': {\n\t\tu: -60,\n\t\tc: ['CV'],\n\t},\n\t'Atlantic/Faeroe': {\n\t\ta: 'Atlantic/Faroe',\n\t\tr: 1,\n\t},\n\t'Atlantic/Faroe': {\n\t\tu: 0,\n\t\td: 60,\n\t\tc: ['FO'],\n\t},\n\t'Atlantic/Jan_Mayen': {\n\t\ta: 'Europe/Oslo',\n\t\tc: ['SJ'],\n\t\tr: 1,\n\t},\n\t'Atlantic/Madeira': {\n\t\tu: 0,\n\t\td: 60,\n\t\tc: ['PT'],\n\t},\n\t'Atlantic/Reykjavik': {\n\t\tu: 0,\n\t\tc: ['IS'],\n\t},\n\t'Atlantic/South_Georgia': {\n\t\tu: -120,\n\t\tc: ['GS'],\n\t},\n\t'Atlantic/St_Helena': {\n\t\ta: 'Africa/Abidjan',\n\t\tc: ['SH'],\n\t\tr: 1,\n\t},\n\t'Atlantic/Stanley': {\n\t\tu: -180,\n\t\tc: ['FK'],\n\t},\n\t'Australia/ACT': {\n\t\ta: 'Australia/Sydney',\n\t\tr: 1,\n\t},\n\t'Australia/Adelaide': {\n\t\tu: 570,\n\t\td: 630,\n\t\tc: ['AU'],\n\t},\n\t'Australia/Brisbane': {\n\t\tu: 600,\n\t\tc: ['AU'],\n\t},\n\t'Australia/Broken_Hill': {\n\t\tu: 570,\n\t\td: 630,\n\t\tc: ['AU'],\n\t},\n\t'Australia/Canberra': {\n\t\ta: 'Australia/Sydney',\n\t\tr: 1,\n\t},\n\t'Australia/Currie': {\n\t\ta: 'Australia/Hobart',\n\t\tr: 1,\n\t},\n\t'Australia/Darwin': {\n\t\tu: 570,\n\t\tc: ['AU'],\n\t},\n\t'Australia/Eucla': {\n\t\tu: 525,\n\t\tc: ['AU'],\n\t},\n\t'Australia/Hobart': {\n\t\tu: 600,\n\t\td: 660,\n\t\tc: ['AU'],\n\t},\n\t'Australia/LHI': {\n\t\ta: 'Australia/Lord_Howe',\n\t\tr: 1,\n\t},\n\t'Australia/Lindeman': {\n\t\tu: 600,\n\t\tc: ['AU'],\n\t},\n\t'Australia/Lord_Howe': {\n\t\tu: 630,\n\t\td: 660,\n\t\tc: ['AU'],\n\t},\n\t'Australia/Melbourne': {\n\t\tu: 600,\n\t\td: 660,\n\t\tc: ['AU'],\n\t},\n\t'Australia/NSW': {\n\t\ta: 'Australia/Sydney',\n\t\tr: 1,\n\t},\n\t'Australia/North': {\n\t\ta: 'Australia/Darwin',\n\t\tr: 1,\n\t},\n\t'Australia/Perth': {\n\t\tu: 480,\n\t\tc: ['AU'],\n\t},\n\t'Australia/Queensland': {\n\t\ta: 'Australia/Brisbane',\n\t\tr: 1,\n\t},\n\t'Australia/South': {\n\t\ta: 'Australia/Adelaide',\n\t\tr: 1,\n\t},\n\t'Australia/Sydney': {\n\t\tu: 600,\n\t\td: 660,\n\t\tc: ['AU'],\n\t},\n\t'Australia/Tasmania': {\n\t\ta: 'Australia/Hobart',\n\t\tr: 1,\n\t},\n\t'Australia/Victoria': {\n\t\ta: 'Australia/Melbourne',\n\t\tr: 1,\n\t},\n\t'Australia/West': {\n\t\ta: 'Australia/Perth',\n\t\tr: 1,\n\t},\n\t'Australia/Yancowinna': {\n\t\ta: 'Australia/Broken_Hill',\n\t\tr: 1,\n\t},\n\t'Brazil/Acre': {\n\t\ta: 'America/Rio_Branco',\n\t\tr: 1,\n\t},\n\t'Brazil/DeNoronha': {\n\t\ta: 'America/Noronha',\n\t\tr: 1,\n\t},\n\t'Brazil/East': {\n\t\ta: 'America/Sao_Paulo',\n\t\tr: 1,\n\t},\n\t'Brazil/West': {\n\t\ta: 'America/Manaus',\n\t\tr: 1,\n\t},\n\tCET: {\n\t\tu: 60,\n\t\td: 120,\n\t},\n\tCST6CDT: {\n\t\tu: -360,\n\t\td: -300,\n\t},\n\t'Canada/Atlantic': {\n\t\ta: 'America/Halifax',\n\t\tr: 1,\n\t},\n\t'Canada/Central': {\n\t\ta: 'America/Winnipeg',\n\t\tr: 1,\n\t},\n\t'Canada/Eastern': {\n\t\ta: 'America/Toronto',\n\t\tc: ['CA'],\n\t\tr: 1,\n\t},\n\t'Canada/Mountain': {\n\t\ta: 'America/Edmonton',\n\t\tr: 1,\n\t},\n\t'Canada/Newfoundland': {\n\t\ta: 'America/St_Johns',\n\t\tr: 1,\n\t},\n\t'Canada/Pacific': {\n\t\ta: 'America/Vancouver',\n\t\tr: 1,\n\t},\n\t'Canada/Saskatchewan': {\n\t\ta: 'America/Regina',\n\t\tr: 1,\n\t},\n\t'Canada/Yukon': {\n\t\ta: 'America/Whitehorse',\n\t\tr: 1,\n\t},\n\t'Chile/Continental': {\n\t\ta: 'America/Santiago',\n\t\tr: 1,\n\t},\n\t'Chile/EasterIsland': {\n\t\ta: 'Pacific/Easter',\n\t\tr: 1,\n\t},\n\tCuba: {\n\t\ta: 'America/Havana',\n\t\tr: 1,\n\t},\n\tEET: {\n\t\tu: 120,\n\t\td: 180,\n\t},\n\tEST: {\n\t\tu: -300,\n\t},\n\tEST5EDT: {\n\t\tu: -300,\n\t\td: -240,\n\t},\n\tEgypt: {\n\t\ta: 'Africa/Cairo',\n\t\tr: 1,\n\t},\n\tEire: {\n\t\ta: 'Europe/Dublin',\n\t\tr: 1,\n\t},\n\t'Etc/GMT': {\n\t\tu: 0,\n\t},\n\t'Etc/GMT+0': {\n\t\ta: 'Etc/GMT',\n\t\tr: 1,\n\t},\n\t'Etc/GMT+1': {\n\t\tu: -60,\n\t},\n\t'Etc/GMT+10': {\n\t\tu: -600,\n\t},\n\t'Etc/GMT+11': {\n\t\tu: -660,\n\t},\n\t'Etc/GMT+12': {\n\t\tu: -720,\n\t},\n\t'Etc/GMT+2': {\n\t\tu: -120,\n\t},\n\t'Etc/GMT+3': {\n\t\tu: -180,\n\t},\n\t'Etc/GMT+4': {\n\t\tu: -240,\n\t},\n\t'Etc/GMT+5': {\n\t\tu: -300,\n\t},\n\t'Etc/GMT+6': {\n\t\tu: -360,\n\t},\n\t'Etc/GMT+7': {\n\t\tu: -420,\n\t},\n\t'Etc/GMT+8': {\n\t\tu: -480,\n\t},\n\t'Etc/GMT+9': {\n\t\tu: -540,\n\t},\n\t'Etc/GMT-0': {\n\t\ta: 'Etc/GMT',\n\t\tr: 1,\n\t},\n\t'Etc/GMT-1': {\n\t\tu: 60,\n\t},\n\t'Etc/GMT-10': {\n\t\tu: 600,\n\t},\n\t'Etc/GMT-11': {\n\t\tu: 660,\n\t},\n\t'Etc/GMT-12': {\n\t\tu: 720,\n\t},\n\t'Etc/GMT-13': {\n\t\tu: 780,\n\t},\n\t'Etc/GMT-14': {\n\t\tu: 840,\n\t},\n\t'Etc/GMT-2': {\n\t\tu: 120,\n\t},\n\t'Etc/GMT-3': {\n\t\tu: 180,\n\t},\n\t'Etc/GMT-4': {\n\t\tu: 240,\n\t},\n\t'Etc/GMT-5': {\n\t\tu: 300,\n\t},\n\t'Etc/GMT-6': {\n\t\tu: 360,\n\t},\n\t'Etc/GMT-7': {\n\t\tu: 420,\n\t},\n\t'Etc/GMT-8': {\n\t\tu: 480,\n\t},\n\t'Etc/GMT-9': {\n\t\tu: 540,\n\t},\n\t'Etc/GMT0': {\n\t\ta: 'Etc/GMT',\n\t\tr: 1,\n\t},\n\t'Etc/Greenwich': {\n\t\ta: 'Etc/GMT',\n\t\tr: 1,\n\t},\n\t'Etc/UCT': {\n\t\ta: 'Etc/UTC',\n\t\tr: 1,\n\t},\n\t'Etc/UTC': {\n\t\tu: 0,\n\t},\n\t'Etc/Universal': {\n\t\ta: 'Etc/UTC',\n\t\tr: 1,\n\t},\n\t'Etc/Zulu': {\n\t\ta: 'Etc/UTC',\n\t\tr: 1,\n\t},\n\t'Europe/Amsterdam': {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: ['NL'],\n\t},\n\t'Europe/Andorra': {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: ['AD'],\n\t},\n\t'Europe/Astrakhan': {\n\t\tu: 240,\n\t\tc: ['RU'],\n\t},\n\t'Europe/Athens': {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: ['GR'],\n\t},\n\t'Europe/Belfast': {\n\t\ta: 'Europe/London',\n\t\tc: ['GB'],\n\t\tr: 1,\n\t},\n\t'Europe/Belgrade': {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: ['RS', 'BA', 'HR', 'ME', 'MK', 'SI'],\n\t},\n\t'Europe/Berlin': {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: ['DE'],\n\t},\n\t'Europe/Bratislava': {\n\t\ta: 'Europe/Prague',\n\t\tc: ['SK'],\n\t\tr: 1,\n\t},\n\t'Europe/Brussels': {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: ['BE'],\n\t},\n\t'Europe/Bucharest': {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: ['RO'],\n\t},\n\t'Europe/Budapest': {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: ['HU'],\n\t},\n\t'Europe/Busingen': {\n\t\ta: 'Europe/Zurich',\n\t\tc: ['DE'],\n\t\tr: 1,\n\t},\n\t'Europe/Chisinau': {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: ['MD'],\n\t},\n\t'Europe/Copenhagen': {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: ['DK'],\n\t},\n\t'Europe/Dublin': {\n\t\tu: 60,\n\t\td: 0,\n\t\tc: ['IE'],\n\t},\n\t'Europe/Gibraltar': {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: ['GI'],\n\t},\n\t'Europe/Guernsey': {\n\t\ta: 'Europe/London',\n\t\tc: ['GG'],\n\t\tr: 1,\n\t},\n\t'Europe/Helsinki': {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: ['FI', 'AX'],\n\t},\n\t'Europe/Isle_of_Man': {\n\t\ta: 'Europe/London',\n\t\tc: ['IM'],\n\t\tr: 1,\n\t},\n\t'Europe/Istanbul': {\n\t\tu: 180,\n\t\tc: ['TR'],\n\t},\n\t'Europe/Jersey': {\n\t\ta: 'Europe/London',\n\t\tc: ['JE'],\n\t\tr: 1,\n\t},\n\t'Europe/Kaliningrad': {\n\t\tu: 120,\n\t\tc: ['RU'],\n\t},\n\t'Europe/Kiev': {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: ['UA'],\n\t},\n\t'Europe/Kirov': {\n\t\tu: 180,\n\t\tc: ['RU'],\n\t},\n\t'Europe/Lisbon': {\n\t\tu: 0,\n\t\td: 60,\n\t\tc: ['PT'],\n\t},\n\t'Europe/Ljubljana': {\n\t\ta: 'Europe/Belgrade',\n\t\tc: ['SI'],\n\t\tr: 1,\n\t},\n\t'Europe/London': {\n\t\tu: 0,\n\t\td: 60,\n\t\tc: ['GB', 'GG', 'IM', 'JE'],\n\t},\n\t'Europe/Luxembourg': {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: ['LU'],\n\t},\n\t'Europe/Madrid': {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: ['ES'],\n\t},\n\t'Europe/Malta': {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: ['MT'],\n\t},\n\t'Europe/Mariehamn': {\n\t\ta: 'Europe/Helsinki',\n\t\tc: ['AX'],\n\t\tr: 1,\n\t},\n\t'Europe/Minsk': {\n\t\tu: 180,\n\t\tc: ['BY'],\n\t},\n\t'Europe/Monaco': {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: ['MC'],\n\t},\n\t'Europe/Moscow': {\n\t\tu: 180,\n\t\tc: ['RU'],\n\t},\n\t'Europe/Nicosia': {\n\t\ta: 'Asia/Nicosia',\n\t\tr: 1,\n\t},\n\t'Europe/Oslo': {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: ['NO', 'SJ', 'BV'],\n\t},\n\t'Europe/Paris': {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: ['FR'],\n\t},\n\t'Europe/Podgorica': {\n\t\ta: 'Europe/Belgrade',\n\t\tc: ['ME'],\n\t\tr: 1,\n\t},\n\t'Europe/Prague': {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: ['CZ', 'SK'],\n\t},\n\t'Europe/Riga': {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: ['LV'],\n\t},\n\t'Europe/Rome': {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: ['IT', 'SM', 'VA'],\n\t},\n\t'Europe/Samara': {\n\t\tu: 240,\n\t\tc: ['RU'],\n\t},\n\t'Europe/San_Marino': {\n\t\ta: 'Europe/Rome',\n\t\tc: ['SM'],\n\t\tr: 1,\n\t},\n\t'Europe/Sarajevo': {\n\t\ta: 'Europe/Belgrade',\n\t\tc: ['BA'],\n\t\tr: 1,\n\t},\n\t'Europe/Saratov': {\n\t\tu: 240,\n\t\tc: ['RU'],\n\t},\n\t'Europe/Simferopol': {\n\t\tu: 180,\n\t\tc: ['RU', 'UA'],\n\t},\n\t'Europe/Skopje': {\n\t\ta: 'Europe/Belgrade',\n\t\tc: ['MK'],\n\t\tr: 1,\n\t},\n\t'Europe/Sofia': {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: ['BG'],\n\t},\n\t'Europe/Stockholm': {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: ['SE'],\n\t},\n\t'Europe/Tallinn': {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: ['EE'],\n\t},\n\t'Europe/Tirane': {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: ['AL'],\n\t},\n\t'Europe/Tiraspol': {\n\t\ta: 'Europe/Chisinau',\n\t\tr: 1,\n\t},\n\t'Europe/Ulyanovsk': {\n\t\tu: 240,\n\t\tc: ['RU'],\n\t},\n\t'Europe/Uzhgorod': {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: ['UA'],\n\t},\n\t'Europe/Vaduz': {\n\t\ta: 'Europe/Zurich',\n\t\tc: ['LI'],\n\t\tr: 1,\n\t},\n\t'Europe/Vatican': {\n\t\ta: 'Europe/Rome',\n\t\tc: ['VA'],\n\t\tr: 1,\n\t},\n\t'Europe/Vienna': {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: ['AT'],\n\t},\n\t'Europe/Vilnius': {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: ['LT'],\n\t},\n\t'Europe/Volgograd': {\n\t\tu: 180,\n\t\tc: ['RU'],\n\t},\n\t'Europe/Warsaw': {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: ['PL'],\n\t},\n\t'Europe/Zagreb': {\n\t\ta: 'Europe/Belgrade',\n\t\tc: ['HR'],\n\t\tr: 1,\n\t},\n\t'Europe/Zaporozhye': {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: ['UA'],\n\t},\n\t'Europe/Zurich': {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: ['CH', 'DE', 'LI'],\n\t},\n\tFactory: {\n\t\tu: 0,\n\t},\n\tGB: {\n\t\ta: 'Europe/London',\n\t\tc: ['GB'],\n\t\tr: 1,\n\t},\n\t'GB-Eire': {\n\t\ta: 'Europe/London',\n\t\tc: ['GB'],\n\t\tr: 1,\n\t},\n\tGMT: {\n\t\ta: 'Etc/GMT',\n\t\tr: 1,\n\t},\n\t'GMT+0': {\n\t\ta: 'Etc/GMT',\n\t\tr: 1,\n\t},\n\t'GMT-0': {\n\t\ta: 'Etc/GMT',\n\t\tr: 1,\n\t},\n\tGMT0: {\n\t\ta: 'Etc/GMT',\n\t\tr: 1,\n\t},\n\tGreenwich: {\n\t\ta: 'Etc/GMT',\n\t\tr: 1,\n\t},\n\tHST: {\n\t\tu: -600,\n\t},\n\tHongkong: {\n\t\ta: 'Asia/Hong_Kong',\n\t\tr: 1,\n\t},\n\tIceland: {\n\t\ta: 'Atlantic/Reykjavik',\n\t\tr: 1,\n\t},\n\t'Indian/Antananarivo': {\n\t\ta: 'Africa/Nairobi',\n\t\tc: ['MG'],\n\t\tr: 1,\n\t},\n\t'Indian/Chagos': {\n\t\tu: 360,\n\t\tc: ['IO'],\n\t},\n\t'Indian/Christmas': {\n\t\tu: 420,\n\t\tc: ['CX'],\n\t},\n\t'Indian/Cocos': {\n\t\tu: 390,\n\t\tc: ['CC'],\n\t},\n\t'Indian/Comoro': {\n\t\ta: 'Africa/Nairobi',\n\t\tc: ['KM'],\n\t\tr: 1,\n\t},\n\t'Indian/Kerguelen': {\n\t\tu: 300,\n\t\tc: ['TF', 'HM'],\n\t},\n\t'Indian/Mahe': {\n\t\tu: 240,\n\t\tc: ['SC'],\n\t},\n\t'Indian/Maldives': {\n\t\tu: 300,\n\t\tc: ['MV'],\n\t},\n\t'Indian/Mauritius': {\n\t\tu: 240,\n\t\tc: ['MU'],\n\t},\n\t'Indian/Mayotte': {\n\t\ta: 'Africa/Nairobi',\n\t\tc: ['YT'],\n\t\tr: 1,\n\t},\n\t'Indian/Reunion': {\n\t\tu: 240,\n\t\tc: ['RE', 'TF'],\n\t},\n\tIran: {\n\t\ta: 'Asia/Tehran',\n\t\tr: 1,\n\t},\n\tIsrael: {\n\t\ta: 'Asia/Jerusalem',\n\t\tr: 1,\n\t},\n\tJamaica: {\n\t\ta: 'America/Jamaica',\n\t\tr: 1,\n\t},\n\tJapan: {\n\t\ta: 'Asia/Tokyo',\n\t\tr: 1,\n\t},\n\tKwajalein: {\n\t\ta: 'Pacific/Kwajalein',\n\t\tr: 1,\n\t},\n\tLibya: {\n\t\ta: 'Africa/Tripoli',\n\t\tr: 1,\n\t},\n\tMET: {\n\t\tu: 60,\n\t\td: 120,\n\t},\n\tMST: {\n\t\tu: -420,\n\t},\n\tMST7MDT: {\n\t\tu: -420,\n\t\td: -360,\n\t},\n\t'Mexico/BajaNorte': {\n\t\ta: 'America/Tijuana',\n\t\tr: 1,\n\t},\n\t'Mexico/BajaSur': {\n\t\ta: 'America/Mazatlan',\n\t\tr: 1,\n\t},\n\t'Mexico/General': {\n\t\ta: 'America/Mexico_City',\n\t\tr: 1,\n\t},\n\tNZ: {\n\t\ta: 'Pacific/Auckland',\n\t\tc: ['NZ'],\n\t\tr: 1,\n\t},\n\t'NZ-CHAT': {\n\t\ta: 'Pacific/Chatham',\n\t\tr: 1,\n\t},\n\tNavajo: {\n\t\ta: 'America/Denver',\n\t\tr: 1,\n\t},\n\tPRC: {\n\t\ta: 'Asia/Shanghai',\n\t\tr: 1,\n\t},\n\tPST8PDT: {\n\t\tu: -480,\n\t\td: -420,\n\t},\n\t'Pacific/Apia': {\n\t\tu: 780,\n\t\tc: ['WS'],\n\t},\n\t'Pacific/Auckland': {\n\t\tu: 720,\n\t\td: 780,\n\t\tc: ['NZ', 'AQ'],\n\t},\n\t'Pacific/Bougainville': {\n\t\tu: 660,\n\t\tc: ['PG'],\n\t},\n\t'Pacific/Chatham': {\n\t\tu: 765,\n\t\td: 825,\n\t\tc: ['NZ'],\n\t},\n\t'Pacific/Chuuk': {\n\t\tu: 600,\n\t\tc: ['FM'],\n\t},\n\t'Pacific/Easter': {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: ['CL'],\n\t},\n\t'Pacific/Efate': {\n\t\tu: 660,\n\t\tc: ['VU'],\n\t},\n\t'Pacific/Enderbury': {\n\t\ta: 'Pacific/Kanton',\n\t\tr: 1,\n\t},\n\t'Pacific/Fakaofo': {\n\t\tu: 780,\n\t\tc: ['TK'],\n\t},\n\t'Pacific/Fiji': {\n\t\tu: 720,\n\t\td: 780,\n\t\tc: ['FJ'],\n\t},\n\t'Pacific/Funafuti': {\n\t\tu: 720,\n\t\tc: ['TV'],\n\t},\n\t'Pacific/Galapagos': {\n\t\tu: -360,\n\t\tc: ['EC'],\n\t},\n\t'Pacific/Gambier': {\n\t\tu: -540,\n\t\tc: ['PF'],\n\t},\n\t'Pacific/Guadalcanal': {\n\t\tu: 660,\n\t\tc: ['SB'],\n\t},\n\t'Pacific/Guam': {\n\t\tu: 600,\n\t\tc: ['GU', 'MP'],\n\t},\n\t'Pacific/Honolulu': {\n\t\tu: -600,\n\t\tc: ['US', 'UM'],\n\t},\n\t'Pacific/Johnston': {\n\t\ta: 'Pacific/Honolulu',\n\t\tc: ['UM'],\n\t\tr: 1,\n\t},\n\t'Pacific/Kanton': {\n\t\tu: 780,\n\t\tc: ['KI'],\n\t},\n\t'Pacific/Kiritimati': {\n\t\tu: 840,\n\t\tc: ['KI'],\n\t},\n\t'Pacific/Kosrae': {\n\t\tu: 660,\n\t\tc: ['FM'],\n\t},\n\t'Pacific/Kwajalein': {\n\t\tu: 720,\n\t\tc: ['MH'],\n\t},\n\t'Pacific/Majuro': {\n\t\tu: 720,\n\t\tc: ['MH'],\n\t},\n\t'Pacific/Marquesas': {\n\t\tu: -510,\n\t\tc: ['PF'],\n\t},\n\t'Pacific/Midway': {\n\t\ta: 'Pacific/Pago_Pago',\n\t\tc: ['UM'],\n\t\tr: 1,\n\t},\n\t'Pacific/Nauru': {\n\t\tu: 720,\n\t\tc: ['NR'],\n\t},\n\t'Pacific/Niue': {\n\t\tu: -660,\n\t\tc: ['NU'],\n\t},\n\t'Pacific/Norfolk': {\n\t\tu: 660,\n\t\td: 720,\n\t\tc: ['NF'],\n\t},\n\t'Pacific/Noumea': {\n\t\tu: 660,\n\t\tc: ['NC'],\n\t},\n\t'Pacific/Pago_Pago': {\n\t\tu: -660,\n\t\tc: ['AS', 'UM'],\n\t},\n\t'Pacific/Palau': {\n\t\tu: 540,\n\t\tc: ['PW'],\n\t},\n\t'Pacific/Pitcairn': {\n\t\tu: -480,\n\t\tc: ['PN'],\n\t},\n\t'Pacific/Pohnpei': {\n\t\tu: 660,\n\t\tc: ['FM'],\n\t},\n\t'Pacific/Ponape': {\n\t\ta: 'Pacific/Pohnpei',\n\t\tr: 1,\n\t},\n\t'Pacific/Port_Moresby': {\n\t\tu: 600,\n\t\tc: ['PG', 'AQ'],\n\t},\n\t'Pacific/Rarotonga': {\n\t\tu: -600,\n\t\tc: ['CK'],\n\t},\n\t'Pacific/Saipan': {\n\t\ta: 'Pacific/Guam',\n\t\tc: ['MP'],\n\t\tr: 1,\n\t},\n\t'Pacific/Samoa': {\n\t\ta: 'Pacific/Pago_Pago',\n\t\tc: ['WS'],\n\t\tr: 1,\n\t},\n\t'Pacific/Tahiti': {\n\t\tu: -600,\n\t\tc: ['PF'],\n\t},\n\t'Pacific/Tarawa': {\n\t\tu: 720,\n\t\tc: ['KI'],\n\t},\n\t'Pacific/Tongatapu': {\n\t\tu: 780,\n\t\tc: ['TO'],\n\t},\n\t'Pacific/Truk': {\n\t\ta: 'Pacific/Chuuk',\n\t\tr: 1,\n\t},\n\t'Pacific/Wake': {\n\t\tu: 720,\n\t\tc: ['UM'],\n\t},\n\t'Pacific/Wallis': {\n\t\tu: 720,\n\t\tc: ['WF'],\n\t},\n\t'Pacific/Yap': {\n\t\ta: 'Pacific/Chuuk',\n\t\tr: 1,\n\t},\n\tPoland: {\n\t\ta: 'Europe/Warsaw',\n\t\tr: 1,\n\t},\n\tPortugal: {\n\t\ta: 'Europe/Lisbon',\n\t\tr: 1,\n\t},\n\tROC: {\n\t\ta: 'Asia/Taipei',\n\t\tr: 1,\n\t},\n\tROK: {\n\t\ta: 'Asia/Seoul',\n\t\tr: 1,\n\t},\n\tSingapore: {\n\t\ta: 'Asia/Singapore',\n\t\tc: ['SG'],\n\t\tr: 1,\n\t},\n\tTurkey: {\n\t\ta: 'Europe/Istanbul',\n\t\tr: 1,\n\t},\n\tUCT: {\n\t\ta: 'Etc/UTC',\n\t\tr: 1,\n\t},\n\t'US/Alaska': {\n\t\ta: 'America/Anchorage',\n\t\tr: 1,\n\t},\n\t'US/Aleutian': {\n\t\ta: 'America/Adak',\n\t\tr: 1,\n\t},\n\t'US/Arizona': {\n\t\ta: 'America/Phoenix',\n\t\tc: ['US'],\n\t\tr: 1,\n\t},\n\t'US/Central': {\n\t\ta: 'America/Chicago',\n\t\tr: 1,\n\t},\n\t'US/East-Indiana': {\n\t\ta: 'America/Indiana/Indianapolis',\n\t\tr: 1,\n\t},\n\t'US/Eastern': {\n\t\ta: 'America/New_York',\n\t\tr: 1,\n\t},\n\t'US/Hawaii': {\n\t\ta: 'Pacific/Honolulu',\n\t\tc: ['US'],\n\t\tr: 1,\n\t},\n\t'US/Indiana-Starke': {\n\t\ta: 'America/Indiana/Knox',\n\t\tr: 1,\n\t},\n\t'US/Michigan': {\n\t\ta: 'America/Detroit',\n\t\tr: 1,\n\t},\n\t'US/Mountain': {\n\t\ta: 'America/Denver',\n\t\tr: 1,\n\t},\n\t'US/Pacific': {\n\t\ta: 'America/Los_Angeles',\n\t\tr: 1,\n\t},\n\t'US/Samoa': {\n\t\ta: 'Pacific/Pago_Pago',\n\t\tc: ['WS'],\n\t\tr: 1,\n\t},\n\tUTC: {\n\t\ta: 'Etc/UTC',\n\t\tr: 1,\n\t},\n\tUniversal: {\n\t\ta: 'Etc/UTC',\n\t\tr: 1,\n\t},\n\t'W-SU': {\n\t\ta: 'Europe/Moscow',\n\t\tr: 1,\n\t},\n\tWET: {\n\t\tu: 0,\n\t\td: 60,\n\t},\n\tZulu: {\n\t\ta: 'Etc/UTC',\n\t\tr: 1,\n\t},\n};\nconst COUNTRY_ID = {\n\tAF:1311,\n\tAL:1312,\n\tDZ:1313,\n\tAS:1314,\n\tAO:1317,\n\tAI:1318,\n\tAG:1319,\n\tAR:1320,\n\tAM:1321,\n\tAW:1322,\n\tAU:1323,\n\tAT:1324,\n\tAZ:1325,\n\tBH:1328,\n\tBB:1330,\n\tBY:1332,\n\tBE:1333,\n\tBZ:1334,\n\tBJ:1335,\n\tBM:1336,\n\tBT:1337,\n\tBO:1338,\n\tBA:1340,\n\tBW:1341,\n\tBR:1343,\n\tBG:1347,\n\tBF:1348,\n\tBI:1349,\n\tKH:1351,\n\tCM:1352,\n\tCA:1353,\n\tCV:1355,\n\tKY:1356,\n\tCF:1357,\n\tTD:1358,\n\tCL:1359,\n\tCN:1360,\n\tCX:1361,\n\tCO:1362,\n\tKM:1363,\n\tCK:1364,\n\tCR:1365,\n\tHR:1366,\n\tCU:1367,\n\tCY:1368,\n\tCZ:1369,\n\tDK:1370,\n\tDJ:1371,\n\tDM:1372,\n\tDO:1373,\n\tTP:1374,\n\tEC:1375,\n\tEG:1376,\n\tSV:1377,\n\tGQ:1378,\n\tER:1379,\n\tEE:1380,\n\tET:1381,\n\tFO:1383,\n\tFJ:1384,\n\tFI:1385,\n\tFR:1386,\n\tGF:1387,\n\tGA:1390,\n\tGM:1391,\n\tGE:1392,\n\tDE:1393,\n\tGH:1394,\n\tGI:1395,\n\tGR:1397,\n\tGL:1398,\n\tGD:1399,\n\tGP:1400,\n\tGU:1401,\n\tGT:1402,\n\tGN:1404,\n\tGW:1405,\n\tGY:1406,\n\tHT:1407,\n\tHN:1411,\n\tHK:1412,\n\tHU:1413,\n\tIS:1414,\n\tIN:1415,\n\tID:1416,\n\tIR:1417,\n\tIQ:1418,\n\tIL:1420,\n\tIT:1421,\n\tJM:1422,\n\tJP:1424,\n\tJO:1426,\n\tKE:1428,\n\tKI:1429,\n\tKW:1430,\n\tKG:1431,\n\tLA:1432,\n\tLV:1433,\n\tLB:1434,\n\tLS:1435,\n\tLR:1436,\n\tLY:1437,\n\tLI:1438,\n\tLT:1439,\n\tLU:1440,\n\tMO:1441,\n\tMK:1442,\n\tMG:1443,\n\tMW:1445,\n\tMY:1446,\n\tML:1447,\n\tMT:1448,\n\tMH:1449,\n\tMQ:1450,\n\tMR:1451,\n\tMU:1452,\n\tYT:1453,\n\tMX:1455,\n\tMD:1458,\n\tMC:1459,\n\tMN:1460,\n\tME:1461,\n\tMS:1462,\n\tMA:1463,\n\tMZ:1464,\n\tNA:1465,\n\tNR:1466,\n\tNP:1467,\n\tAN:1468,\n\tNL:1469,\n\tNC:1471,\n\tNZ:1472,\n\tNI:1473,\n\tNE:1474,\n\tNG:1475,\n\tNU:1476,\n\tNF:1477,\n\tMP:1478,\n\tNO:1479,\n\tOM:1480,\n\tPK:1481,\n\tPW:1482,\n\tPA:1484,\n\tPG:1485,\n\tPY:1486,\n\tPE:1487,\n\tPH:1488,\n\tPL:1491,\n\tPT:1492,\n\tQA:1494,\n\tRO:1495,\n\tRU:1496,\n\tRW:1497,\n\tSH:1500,\n\tKN:1501,\n\tLC:1502,\n\tPM:1503,\n\tWS:1506,\n\tSM:1507,\n\tSA:1508,\n\tSN:1510,\n\tRS:1511,\n\tSC:1512,\n\tSL:1513,\n\tSG:1515,\n\tSK:1518,\n\tSI:1519,\n\tSB:1520,\n\tSO:1521,\n\tZA:1522,\n\tES:1525,\n\tLK:1526,\n\tSD:1527,\n\tSR:1528,\n\tSZ:1530,\n\tSE:1531,\n\tCH:1532,\n\tSY:1533,\n\tTW:1534,\n\tTJ:1535,\n\tTZ:1536,\n\tTH:1537,\n\tTK:1540,\n\tTO:1541,\n\tTT:1542,\n\tTN:1543,\n\tTR:1544,\n\tTM:1545,\n\tTC:1546,\n\tTV:1547,\n\tUG:1548,\n\tUA:1549,\n\tAE:1550,\n\tGB:1551,\n\tUS:1553,\n\tUY:1554,\n\tUZ:1556,\n\tVU:1557,\n\tVE:1558,\n\tWF:1561,\n\tYE:1563,\n\tZM:1565,\n\tZW:1566,\n\tIE:1567\n};\n\nexport class UserPosition {\n\t\n\tstatic get location () {\n\t\tconst timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\t\t\n\t\tif (timezone === '' || !timezone) {\n\t\t\treturn {long: null, short: null};\n\t\t}\n\t\t\n\t\tconst country = TIME_ZONES[timezone].c[0];\n\t\t\n\t\treturn {\n\t\t\tlong: COUNTRIES[country],\n\t\t\tshort: country.toLowerCase(),\n\t\t\tcountryId: COUNTRY_ID[country]\n\t\t};\n\t}\n\t\n}\n","'use strict';\n\nimport {\n getUrlParam,\n getUrlSearchQuery, isMapOpened,\n isNumeric,\n isOptionsCardOpened,\n isUrlHasParam, lockScreenOrientation, removeActiveGalleryItem,\n userPrevent\n} from \"../../../functions\";\nimport {cardsData, settingsData} from \"../../../settings\";\nimport {PagesForPagination} from \"../../../common\";\nimport {menuHandler} from \"../../menu/menu\";\nimport {createModal} from \"../../cards/urlParamModal\";\nimport {closeHandler, openOptionsCard} from \"../../cards/optionsCards\";\nimport {closeOptionsCard} from \"../../cards/cardsFunctions\";\nimport { getCurrentLang } from '../langSwitcher/langSwitcher';\n\nexport class Pagination {\n static #prevent = false;\n static #history = [];\n\n constructor() {\n this.#addOnPopStateListener();\n }\n\n paginate(args) {\n if (window.history.state?.page === undefined && args.source !== 'widgetsInit' && args.source !== 'flatCloseButtonHandler')\n return;\n const pValue = getUrlParam('p');\n switch (args.source) {\n case 'widget-close-button':\n if (isMapOpened()) {\n Pagination.#winHistPushState('map');\n break;\n }\n if (isOptionsCardOpened())\n break;\n switch (settingsData.activeViewMode) {\n case 'cylinder':\n Pagination.#winHistPushState('search');\n break;\n case 'orbit':\n Pagination.#winHistPushState('3dModel');\n break;\n }\n break;\n case 'viewModesSwitching':\n case 'logoHandler':\n Pagination.#winHistPushState('3dModel');\n break;\n case 'flatCloseButtonHandler':\n case 'cardsBackButton':\n switch (settingsData.activeViewMode) {\n case 'orbit':\n Pagination.#winHistPushState('3dModel');\n break;\n case 'cylinder':\n Pagination.#winHistPushState('search');\n break;\n default:\n Pagination.#winHistPushState('search');\n break;\n }\n break;\n case 'urlModalCloseButton':\n case 'searchBackNavButton':\n case 'appModal':\n Pagination.#winHistPushState('3dModel');\n menuHandler({target:{dataset:{menuItem:pValue}}});\n break;\n case 'widgetsInit':\n if (isNumeric(pValue) || config.features.amenities.some(amenity => amenity.engineId === pValue)) {\n Pagination.#winHistPushState('3dModel');\n createModal(pValue);\n break;\n } else if ( /* !config.contactWidget.active && */ Object.values(PagesForPagination).includes(pValue)) {\n const interval = setInterval(() => {\n if (settingsData.allCrmData) {\n clearInterval(interval);\n Pagination.#winHistPushState(pValue);\n menuHandler({target: {dataset: {menuItem: pValue}}});\n }\n }, 100);\n setTimeout(() => {\n clearInterval(interval);\n }, 5000);\n break;\n }\n\n Pagination.#winHistPushState('3dModel');\n break;\n case 'menuHandler':\n const menuItem = args.menuItem;\n if (Object.values(PagesForPagination).includes(menuItem))\n if (isOptionsCardOpened()) {\n setTimeout(() => {\n Pagination.#winHistPushState(menuItem);\n }, 500);\n } else {\n Pagination.#winHistPushState(menuItem);\n }\n\n break;\n case 'openOptionsCard':\n Pagination.#winHistPushState(args.flatId, args.isSimilarApartment);\n break;\n default:\n console.log('paginationHandler: default case');\n break;\n }\n }\n \n query(key,value) {\n const url = new URL(window.location.href);\n url.searchParams.set(key,value);\n let p = url.searchParams.get('p');\n if (!p) {\n p = url.origin;\n }\n \n Pagination.#history.push({page: p}, document.title, `/${url.search}`);\n window.history.pushState({page: p}, document.title, `/${url.search}`);\n }\n\n #addOnPopStateListener() {\n window.onpopstate = (e) => {\n if (userPrevent() ||\n !settingsData.slideShowed) {\n e.preventDefault();\n\n return;\n }\n\n if (!window.history.state)\n location.reload();\n\n removeActiveGalleryItem();\n\n const pValue = getUrlParam('p');\n const lang = getUrlParam('lang');\n if (isNumeric(pValue)) {\n const crmApartmentData = settingsData?.allCrmData.find(item => item.bmbyPropID === parseInt(pValue));\n openOptionsCard({object: crmApartmentData});\n } else if (Object.values(PagesForPagination).includes(getUrlParam('p'))) {\n menuHandler({target: {dataset: {menuItem: getUrlParam('p')}}});\n if (isOptionsCardOpened())\n closeHandler();\n }\n \n if (lang) {\n const current = getCurrentLang();\n if (lang !== current) {\n const langItem = document.querySelector(`.lang__item[data-lang=\"${lang}\"`);\n langItem && langItem.click();\n }\n }\n \n\n lockScreenOrientation();\n };\n }\n\n static set prevent(value) {\n Pagination.#prevent = value;\n }\n\n static get prevent() {\n return Pagination.#prevent;\n }\n\n static #winHistPushState(page, isSimilarApartment) {\n if (window.history.state?.page === page.toString()\n || isNumeric(window.history.state?.page) && isNumeric(page) && !isSimilarApartment\n || isNumeric(window.history.state?.page) && cardsData.cardMode.isAmenities\n || config.features.amenities.some(amenity => amenity.engineId === page))\n return;\n\n const modifiedSearchQuery = getModifiedSearchQuery(page);\n Pagination.#history.push({page: page.toString()}, document.title, `/?${modifiedSearchQuery}`)\n window.history.pushState({page: page.toString()}, document.title, `/?${modifiedSearchQuery}`);\n\n function getModifiedSearchQuery(pageToPush) {\n let splitQuery = getUrlSearchQuery().split('&');\n splitQuery[0] = splitQuery[0].replace('?', '');\n const paramToPush = `p=${pageToPush}`;\n if (!isUrlHasParam('p') && splitQuery[0] !== '') {\n splitQuery.unshift(paramToPush);\n } else {\n splitQuery[0] = paramToPush;\n }\n\n if (splitQuery.length <= 1)\n return splitQuery;\n return splitQuery.join('&');\n }\n }\n\n static get history() {\n return Pagination.#history;\n }\n}\n","'use strict';\n\nimport { BaseElement } from '../../interfaces/BaseElement';\nimport {isMobile} from \"../../../settings\";\n\nexport class RenderingLogo {\n #active = config.features.renderingBy?.active || false;\n #type = config.features.renderingBy?.type || '';\n\n constructor () {\n if (!this.active) return;\n\n const parent =\n isMobile\n ? document.querySelector('.aside__top__container')\n : document.querySelector('.aside__bottom__container')\n this.container = new BaseElement()\n .addClass('rendering-logo')\n .appendTo(parent);\n\n new BaseElement('span')\n .addClass('rendering-text')\n .innerHtml('renderings by ')\n .appendTo(this.container.DOMElement);\n\n this.logo = new BaseElement()\n .addClass('rendering-img')\n .appendTo(this.container.DOMElement);\n\n switch (this.#type) {\n case 'viewpoint':\n this.logo.DOMElement.style.backgroundImage = `url(../img/logo/viewpoint_logo.png)`;\n break;\n default:\n console.log('Default rendering logo case');\n break;\n }\n }\n\n get active() {\n return this.#active;\n }\n\n}\n","'use strict';\n\nimport {isMobile} from \"../../../settings\";\nimport {BaseElement} from \"../../interfaces/BaseElement\";\n\nexport function addPoweredLogo (container) {\n const {active} = config.features.bmbyLogo;\n if (!active)\n return;\n\n const parent = container ? container :\n isMobile\n ? document.querySelector('.aside__top__container')\n : document.querySelector('.aside__bottom__container');\n\n new BaseElement()\n .addClass('powered__logo')\n .appendTo(parent);\n}\n","'use strict';\n\nimport { BaseElement } from '../../interfaces/BaseElement';\n\nexport class DreamsPreloader {\n\tconstructor (parent,additionalClass) {\n\t\tthis.parent = parent;\n\t\tthis.container = new BaseElement()\n\t\t\t.addClass('dreams-preloader','hidden')\n\t\t\t.appendTo(this.parent);\n\t\t\n\t\tif (additionalClass) {\n\t\t\tthis.addClass(additionalClass);\n\t\t}\n\t\t\n\t\tconst wrapper = new BaseElement()\n\t\t\t.addClass('dreams-preloader__wrapper')\n\t\t\t.appendTo(this.container.DOMElement)\n\t\t\t.DOMElement;\n\t\t\n\t\tnew BaseElement()\n\t\t\t.addClass('dreams-preloader__loader')\n\t\t\t.appendTo(wrapper);\n\t}\n\t\n\tabsolute() {\n\t\tthis.addClass('dreams-preloader--absolute');\n\t\treturn this;\n\t}\n\t\n\tblur() {\n\t\tthis.addClass('dreams-preloader--blur');\n\t\treturn this;\n\t}\n\n\tsubstrate() {\n\t\tthis.addClass('dreams-preloader--substrate');\n\t\treturn this;\n\t}\n\t\n\tscale(value) {\n\t\tthis.container.addStyle('scale',value);\n\t\treturn this;\n\t}\n\t\n\tshow() {\n\t\tthis.container.removeClass('hidden');\n\t\treturn this;\n\t}\n\t\n\tremove() {\n\t\tthis.container.remove();\n\t}\n\t\n\thide() {\n\t\tthis.container.addClass('hidden');\n\t\treturn this;\n\t}\n\t\n\taddClass(name) {\n\t\tthis.container.addClass(name);\n\t\treturn this;\n\t}\n\t\n\tget element() {\n\t\treturn this.container.DOMElement;\n\t}\n}\n","'use strict';\n\nimport { Viewer } from '../Viewer/Viewer';\nimport ObjectAssignDeep from 'object-assign-deep';\nimport Worker from '../Worker/offscreen.worker';\nimport { preloadFont } from '../Text/Troika';\nimport {isIOS, isSafari} from \"../../../../../settings\";\nimport {getCurrentLang} from \"../../../langSwitcher/langSwitcher\";\n\nconst DEFAULT_PARAMS = {\n imageSize: 4096,\n slideDuration: 4,\n zoomDuration: 0.3,\n fadeDuration: 1,\n text: {\n settings: {\n font: '',\n fontSize: 0.1,\n anchorX: '50%',\n anchorY: '50%',\n color: '#ffffff',\n lineHeight: 'normal',\n maxWidth: Infinity,\n letterSpacing: 0,\n outlineBlur: 0,\n outlineColor: '#000000',\n outlineOffsetY: 0,\n textAlign: 'center',\n position: 0\n },\n animation: {\n textDuration: 0.4,\n }\n }\n};\n\nexport class DreamsSlider {\n constructor (canvas,params,callbacks) {\n this.canvas = canvas;\n this.width = canvas.clientWidth;\n this.height = canvas.clientHeight;\n this.params = ObjectAssignDeep(DEFAULT_PARAMS,params,{});\n this.callbacks = callbacks;\n this.pixelRatio = Math.min(window.devicePixelRatio,1);\n this.params.isOffscreen = false;\n\n if (this.params.text.settings.font.length) {\n preloadFont(\n {\n font: this.params.text.settings.font,\n },() => {});\n }\n\n if (isIOS || isSafari) {\n this.params.callbacks = this.callbacks;\n this.viewer = new Viewer(this.canvas,this.width,this.height,this.pixelRatio,this.params);\n this.viewer.initScene();\n this.viewer.start();\n } else {\n this.params.isOffscreen = true;\n this.worker = new Worker();\n this.worker.addEventListener('message',this.messageHandler.bind(this));\n const offscreen = canvas.transferControlToOffscreen();\n this.worker.postMessage({\n type: 'init',\n canvas: offscreen,\n width: this.width,\n height: this.height,\n pixelRatio: this.pixelRatio,\n params: this.params\n },[offscreen]);\n }\n\n this.resizeEvent = this.resizeHandler.bind(this);\n window.addEventListener('resize', this.resizeEvent);\n }\n\n post(type, data) {\n this.worker.postMessage({\n type,\n data: data\n });\n }\n\n launch(dataArray) {\n dataArray.sort((prev,next) => prev.order - next.order);\n const userLanguage = getCurrentLang();\n\n dataArray.forEach(data => {\n const url = new URL(data.imageUrl);\n data.imageUrl = `${url.origin}/resize/image/width=${this.params.imageSize}${url.pathname}`;\n\n if (data.slogans) {\n data.slogans.forEach(slogan => {\n if (slogan.lang === userLanguage && slogan.value) {\n data.slogan = slogan.value;\n }\n });\n }\n });\n\n\n if (this.params.isOffscreen) {\n this.post('loadSlides',dataArray);\n } else {\n this.viewer.loadSlides(dataArray);\n }\n }\n\n dispose(duration) {\n window.removeEventListener('resize',this.resizeEvent);\n if (this.params.isOffscreen) {\n this.post('dispose',{});\n this.worker.terminate();\n } else {\n this.viewer.dispose();\n }\n return new Promise(resolve => {\n this.canvas.addEventListener('animationend',() => {\n resolve();\n },{once: true});\n this.canvas.style.animation = `fade-out ${duration}s linear forwards`;\n });\n }\n\n messageHandler({data}) {\n if (this.callbacks[data]) {\n this.callbacks[data]();\n }\n }\n\n resizeHandler() {\n if (this.params.isOffscreen) {\n this.post('resize',{\n width: this.canvas.clientWidth,\n height: this.canvas.clientHeight\n });\n } else {\n this.viewer.resize(this.canvas.clientWidth,this.canvas.clientHeight);\n }\n }\n}\n\nfunction getCookie(name) {\n let matches = document.cookie.match(new RegExp(\n \"(?:^|; )\" + name.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + \"=([^;]*)\"\n ));\n return matches ? decodeURIComponent(matches[1]) : undefined;\n}\n","'use strict';\n\nimport {\n CanvasTexture, Group,\n ImageBitmapLoader,\n ImageLoader,\n Mesh,\n PlaneGeometry,\n ShaderMaterial,\n Vector2,\n} from 'three';\nimport vertex from '../Viewer/Shaders/vertex.glsl';\nimport fragment from '../Viewer/Shaders/fragment.glsl';\nimport gsap from 'gsap';\nimport {Text} from '../Text/Troika';\n\nconst kenburns = [\n new Vector2(1.0,0.0),\n new Vector2(0.0,1.0),\n new Vector2(-1.0,0.0),\n new Vector2(0.0,-1.0)\n];\n\nlet loader;\nif (typeof createImageBitmap !== 'undefined') {\n loader = new ImageBitmapLoader();\n loader.setOptions({imageOrientation: 'flipY'});\n} else {\n // some ios browser still don't support ImageBitmaps.\n loader = new ImageLoader();\n}\n\nexport class Slide {\n constructor (data,viewerWidth,viewerHeight,params) {\n this.url = data.imageUrl;\n this.viewerWidth = viewerWidth;\n this.viewerHeight = viewerHeight;\n this.params = params;\n this.group = new Group();\n this.slideWidth = null;\n this.slideHeight = null;\n this.aspect = new Vector2(1.0,1.0);\n\n const geometry = new PlaneGeometry(2, 2, 1, 1);\n this.material = new ShaderMaterial({\n vertexShader: vertex,\n fragmentShader: fragment,\n transparent: true,\n uniforms: {\n currentSlide: {\n value: null\n },\n uKenburns: {\n value: getRandomKenbruns()\n },\n uKenburnsDirection: {\n value: -1.0\n },\n uKenburnsValue: {\n value: 0.0\n },\n uAlpha: {\n value: 0.0\n },\n forceAnimation: {\n value: this.params.forceAnimation\n }\n }\n });\n this.layer = new Mesh(geometry,this.material);\n this.group.add(this.layer);\n\n //Text\n const tag = data.slogan.match(/<\\/?[a-z]{1,}>/g);\n if (Array.isArray(tag)) {\n const replaced = replace(tag[0]);\n this.slogan = data.slogan.replace(/<\\/?[a-z]{1,}>/g,replaced);\n } else {\n this.slogan = data.slogan;\n }\n\n if (this.slogan.length) {\n this.sloganText = new Text();\n this.sloganText.material.depthWrite = false;\n this.sloganText.material.depthTest = false;\n this.sloganText.material.transparent = true;\n this.sloganText.isOffscreen = this.params.isOffscreen;\n this.sloganText.text = this.slogan;\n Object.entries(this.params.text.settings).forEach(([key, value]) => {\n if (key !== 'position') {\n this.sloganText[key] = value;\n } else {\n this.sloganText.position.z = value;\n }\n });\n this.sloganText.fillOpacity = 0;\n if (this.params.forceAnimation)\n this.sloganText.outlineOpacity = 0;\n this.group.add(this.sloganText);\n this.sloganText.sync();\n this.resizeText();\n }\n }\n\n load() {\n return new Promise(resolve => {\n loader.load(this.url,img => {\n\n this.slideWidth = img.width;\n this.slideHeight = img.height;\n this.calculateAspect();\n this.layer.scale.set(1 / this.aspect.x, 1 / this.aspect.y, 1);\n this.texture = new CanvasTexture(img);\n resolve(this);\n });\n });\n }\n\n calculateAspect() {\n const imageAspect = this.slideWidth / this.slideHeight;\n const viewerAspect = this.viewerWidth / this.viewerHeight;\n\n if (viewerAspect < imageAspect) {\n this.aspect.set(viewerAspect / imageAspect, 1.0);\n } else {\n this.aspect.set(1.0, imageAspect / viewerAspect);\n }\n }\n\n resize(width,height) {\n this.viewerWidth = width;\n this.viewerHeight = height;\n this.calculateAspect();\n this.layer.scale.set(1 / this.aspect.x, 1 / this.aspect.y, 1);\n this.resizeText();\n }\n\n resizeText() {\n if (this.sloganText) {\n const viewerAspect = this.viewerWidth / this.viewerHeight;\n this.sloganText.scale.set(1,viewerAspect,1);\n }\n }\n\n dispose() {\n this.group.removeFromParent();\n this.layer.geometry.dispose();\n this.material.uniforms.currentSlide.value.dispose();\n this.material.dispose();\n if (this.sloganText) {\n this.sloganText.dispose();\n }\n }\n\n play() {\n const timeLine = gsap.timeline();\n const time = {value: 0};\n const timeFadeIn = {value: 0};\n const timeFadeOut = {value: 1};\n\n const zoomAnimation = this.params.forceAnimation ?\n gsap.to(time,{\n value: this.params.zoomDuration,\n duration: this.params.slideDuration,\n ease: 'linear',\n onUpdate: () => {\n this.sliderZoom = time.value;\n }\n }) : null;\n\n const fadeIn = gsap.to(timeFadeIn,{\n value: 1,\n ease: 'linear',\n duration: this.params.fadeDuration,\n onUpdate: () => {\n this.alpha = timeFadeIn.value;\n }\n });\n\n const fadeOut = gsap.to(timeFadeOut,{\n value: 0,\n ease: 'linear',\n duration: this.params.fadeDuration,\n onUpdate: () => {\n this.alpha = timeFadeOut.value;\n }\n });\n\n if (this.sloganText) {\n const textDuration = this.params.text.animation.textDuration;\n const textFadeValue = {value: 0};\n const letterSpacingValue = {value: 0};\n const textFadeIn = gsap.to(textFadeValue,{\n value: 1,\n ease: 'linear',\n duration: textDuration,\n onUpdate: () => {\n this.sloganText.fillOpacity = textFadeValue.value;\n this.sloganText.outlineOpacity = textFadeValue.value;\n this.sloganText.sync()\n },\n onStart: () => {\n if (!this.params.forceAnimation) {\n this.sloganText.curveRadius = 1.57;\n this.sloganText.sync();\n }\n }\n });\n\n const letterSpacing = this.params.forceAnimation ?\n gsap.to(letterSpacingValue,{\n value: 1.57,\n ease: 'linear',\n duration: textDuration,\n onUpdate: () => {\n this.sloganText.curveRadius = letterSpacingValue.value;\n this.sloganText.sync();\n }\n }) : null;\n\n const textFadeOut = gsap.to(textFadeValue,{\n value: 0,\n ease: 'linear',\n duration: textDuration,\n onUpdate: () => {\n this.sloganText.fillOpacity = textFadeValue.value;\n this.sloganText.outlineOpacity = textFadeValue.value;\n this.sloganText.sync();\n },\n onComplete: () => {\n this.sloganText.curveRadius = 0;\n this.sloganText.sync();\n }\n });\n timeLine.add(textFadeIn,this.params.fadeDuration);\n if (this.params.forceAnimation)\n timeLine.add(letterSpacing,this.params.fadeDuration);\n timeLine.add(textFadeOut,this.params.slideDuration - textDuration);\n }\n\n timeLine.add(fadeIn,0);\n if (this.params.forceAnimation)\n timeLine.add(zoomAnimation,0);\n timeLine.add(fadeOut,this.params.slideDuration);\n\n return timeLine;\n }\n\n set sliderZoom(value) {\n this.material.uniforms.uKenburnsValue.value = value;\n }\n\n set texture(texture) {\n this.material.uniforms.currentSlide.value = texture;\n }\n\n set slideDirection(number) {\n this.material.uniforms.uKenburnsDirection.value = number;\n }\n\n set alpha(value) {\n this.material.uniforms.uAlpha.value = value;\n }\n\n set position(value) {\n this.group.position.z = value;\n }\n\n set textFade(value) {\n // this.sloganText.\n }\n\n get slideGroup() {\n return this.group;\n }\n}\n\n\nfunction getRandomKenbruns () {\n const random = Math.floor(Math.random() * kenburns.length);\n return kenburns[random];\n}\n\nfunction replace (tag){\n const dictionary = {\n '
': '\\n',\n '': '',\n '': ''\n };\n\n if (dictionary[tag]) {\n return dictionary[tag];\n } else {\n return '';\n }\n}\n","'use strict';\n\nimport { BaseElement } from '../../../../interfaces/BaseElement';\nimport { changeLangToCurrent } from '../../../langSwitcher/langSwitcher';\nimport ObjectAssignDeep from 'object-assign-deep';\nimport gsap from 'gsap';\nimport { DreamsPreloader } from '../../DreamsPreloader';\n\nconst DEFAULT_PARAMS = {\n textDuration: 3,\n textFadeDuration: 0.5,\n textCount: 0\n};\n\n\nexport class SubPreloader {\n constructor (parent) {\n this.parent = parent;\n this.settings = ObjectAssignDeep(DEFAULT_PARAMS,config.features.subPreloader,{});\n this.container = new BaseElement('span')\n .addClass('sub-preloader')\n .appendTo(this.parent)\n .DOMElement;\n\n new DreamsPreloader(this.container).show();\n\n this.subTexts = new BaseElement('span')\n .addClass('sub-preloader__texts')\n .appendTo(this.container)\n .DOMElement;\n }\n\n createSubTexts() {\n if (this.settings.textCount === 0) return;\n\n const duration = this.settings.textDuration;\n const fadeDuration = this.settings.textFadeDuration;\n const textCount = this.settings.textCount;\n\n this.tl = gsap.timeline({\n paused: true,\n onComplete: () => this.subTexts.remove()});\n\n for (let i = 1; i <= textCount; i++) {\n const childTl = gsap.timeline();\n const text = new BaseElement('span')\n .addClass('sub-preloader__text')\n .innerHtml(changeLangToCurrent(`subLoaderTxt${i}`))\n .appendTo(this.subTexts)\n .DOMElement;\n\n const animationIn = gsap.to(text,{\n opacity: 1,\n duration: fadeDuration\n });\n\n const animationOut = gsap.to(text,{\n opacity: 0,\n duration: fadeDuration\n });\n\n childTl.add(animationIn,0);\n childTl.add(animationOut,duration - fadeDuration);\n this.tl.add(childTl,duration * (i-1));\n }\n this.tl.play(0);\n }\n\n remove() {\n this.tl?.kill();\n this.tl = null;\n this.container.remove();\n }\n}\n","import { Texture, LinearFilter, Color, InstancedBufferGeometry, Sphere, Box3, BackSide, DoubleSide, InstancedBufferAttribute, PlaneGeometry, BufferGeometry, Float32BufferAttribute, Vector2, Vector4, Matrix3, Mesh, FrontSide, MeshBasicMaterial, Matrix4, Vector3 } from 'three';\nimport { terminateWorker, defineWorkerModule } from 'troika-worker-utils';\nimport createSDFGenerator from 'webgl-sdf-generator';\nimport bidiFactory from 'bidi-js';\nimport { createDerivedMaterial, voidMainRegExp } from 'troika-three-utils';\n\n/**\n * Factory function that creates a self-contained environment for processing text typesetting requests.\n *\n * It is important that this function has no closure dependencies, so that it can be easily injected\n * into the source for a Worker without requiring a build step or complex dependency loading. All its\n * dependencies must be passed in at initialization.\n *\n * @param {function} fontParser - a function that accepts an ArrayBuffer of the font data and returns\n * a standardized structure giving access to the font and its glyphs:\n * {\n * unitsPerEm: number,\n * ascender: number,\n * descender: number,\n * capHeight: number,\n * xHeight: number,\n * lineGap: number,\n * forEachGlyph(string, fontSize, letterSpacing, callback) {\n * //invokes callback for each glyph to render, passing it an object:\n * callback({\n * index: number,\n * advanceWidth: number,\n * xMin: number,\n * yMin: number,\n * xMax: number,\n * yMax: number,\n * path: string,\n * pathCommandCount: number\n * })\n * }\n * }\n * @param {object} bidi - the bidi.js implementation object\n * @param {Object} config\n * @return {Object}\n */\nfunction createTypesetter(fontParser, bidi, config) {\n\n const {\n defaultFontURL\n } = config;\n\n /**\n * Holds parsed font objects by url\n */\n const fonts = Object.create(null);\n\n const INF = Infinity;\n\n // Set of Unicode Default_Ignorable_Code_Point characters, these will not produce visible glyphs\n const DEFAULT_IGNORABLE_CHARS = /[\\u00AD\\u034F\\u061C\\u115F-\\u1160\\u17B4-\\u17B5\\u180B-\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u3164\\uFE00-\\uFE0F\\uFEFF\\uFFA0\\uFFF0-\\uFFF8]/;\n\n // This regex (instead of /\\s/) allows us to select all whitespace EXCEPT for non-breaking white spaces\n const lineBreakingWhiteSpace = `[^\\\\S\\\\u00A0]`;\n\n // Incomplete set of characters that allow line breaking after them\n // In the future we may consider a full Unicode line breaking algorithm impl: https://www.unicode.org/reports/tr14\n const BREAK_AFTER_CHARS = new RegExp(`${lineBreakingWhiteSpace}|[\\\\-\\\\u007C\\\\u00AD\\\\u2010\\\\u2012-\\\\u2014\\\\u2027\\\\u2056\\\\u2E17\\\\u2E40]`);\n\n /**\n * Load a given font url\n */\n function doLoadFont(url, callback) {\n function tryLoad() {\n const onError = err => {\n console.error(`Failure loading font ${url}${url === defaultFontURL ? '' : '; trying fallback'}`, err);\n if (url !== defaultFontURL) {\n url = defaultFontURL;\n tryLoad();\n }\n };\n try {\n const request = new XMLHttpRequest();\n request.open('get', url, true);\n request.responseType = 'arraybuffer';\n request.onload = function () {\n if (request.status >= 400) {\n onError(new Error(request.statusText));\n }\n else if (request.status > 0) {\n try {\n const fontObj = fontParser(request.response);\n callback(fontObj);\n } catch (e) {\n onError(e);\n }\n }\n };\n request.onerror = onError;\n request.send();\n } catch(err) {\n onError(err);\n }\n }\n tryLoad();\n }\n\n\n /**\n * Load a given font url if needed, invoking a callback when it's loaded. If already\n * loaded, the callback will be called synchronously.\n */\n function loadFont(fontUrl, callback) {\n if (!fontUrl) fontUrl = defaultFontURL;\n let font = fonts[fontUrl];\n if (font) {\n // if currently loading font, add to callbacks, otherwise execute immediately\n if (font.pending) {\n font.pending.push(callback);\n } else {\n callback(font);\n }\n } else {\n fonts[fontUrl] = {pending: [callback]};\n doLoadFont(fontUrl, fontObj => {\n let callbacks = fonts[fontUrl].pending;\n fonts[fontUrl] = fontObj;\n callbacks.forEach(cb => cb(fontObj));\n });\n }\n }\n\n\n /**\n * Main entry point.\n * Process a text string with given font and formatting parameters, and return all info\n * necessary to render all its glyphs.\n */\n function typeset(\n {\n text='',\n font=defaultFontURL,\n sdfGlyphSize=64,\n fontSize=1,\n letterSpacing=0,\n lineHeight='normal',\n maxWidth=INF,\n direction,\n textAlign='left',\n textIndent=0,\n whiteSpace='normal',\n overflowWrap='normal',\n anchorX = 0,\n anchorY = 0,\n includeCaretPositions=false,\n chunkedBoundsSize=8192,\n colorRanges=null\n },\n callback,\n metricsOnly=false\n ) {\n const mainStart = now();\n const timings = {fontLoad: 0, typesetting: 0};\n\n // Ensure newlines are normalized\n if (text.indexOf('\\r') > -1) {\n console.info('Typesetter: got text with \\\\r chars; normalizing to \\\\n');\n text = text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n }\n\n // Ensure we've got numbers not strings\n fontSize = +fontSize;\n letterSpacing = +letterSpacing;\n maxWidth = +maxWidth;\n lineHeight = lineHeight || 'normal';\n textIndent = +textIndent;\n\n loadFont(font, fontObj => {\n const hasMaxWidth = isFinite(maxWidth);\n let glyphIds = null;\n let glyphPositions = null;\n let glyphData = null;\n let glyphColors = null;\n let caretPositions = null;\n let visibleBounds = null;\n let chunkedBounds = null;\n let maxLineWidth = 0;\n let renderableGlyphCount = 0;\n let canWrap = whiteSpace !== 'nowrap';\n const {ascender, descender, unitsPerEm, lineGap, capHeight, xHeight} = fontObj;\n timings.fontLoad = now() - mainStart;\n const typesetStart = now();\n\n // Find conversion between native font units and fontSize units; this will already be done\n // for the gx/gy values below but everything else we'll need to convert\n const fontSizeMult = fontSize / unitsPerEm;\n\n // Determine appropriate value for 'normal' line height based on the font's actual metrics\n // TODO this does not guarantee individual glyphs won't exceed the line height, e.g. Roboto; should we use yMin/Max instead?\n if (lineHeight === 'normal') {\n lineHeight = (ascender - descender + lineGap) / unitsPerEm;\n }\n\n // Determine line height and leading adjustments\n lineHeight = lineHeight * fontSize;\n const halfLeading = (lineHeight - (ascender - descender) * fontSizeMult) / 2;\n const topBaseline = -(ascender * fontSizeMult + halfLeading);\n const caretHeight = Math.min(lineHeight, (ascender - descender) * fontSizeMult);\n const caretBottomOffset = (ascender + descender) / 2 * fontSizeMult - caretHeight / 2;\n\n // Distribute glyphs into lines based on wrapping\n let lineXOffset = textIndent;\n let currentLine = new TextLine();\n const lines = [currentLine];\n\n fontObj.forEachGlyph(text, fontSize, letterSpacing, (glyphObj, glyphX, charIndex) => {\n const char = text.charAt(charIndex);\n const glyphWidth = glyphObj.advanceWidth * fontSizeMult;\n const curLineCount = currentLine.count;\n let nextLine;\n\n // Calc isWhitespace and isEmpty once per glyphObj\n if (!('isEmpty' in glyphObj)) {\n glyphObj.isWhitespace = !!char && new RegExp(lineBreakingWhiteSpace).test(char);\n glyphObj.canBreakAfter = !!char && BREAK_AFTER_CHARS.test(char);\n glyphObj.isEmpty = glyphObj.xMin === glyphObj.xMax || glyphObj.yMin === glyphObj.yMax || DEFAULT_IGNORABLE_CHARS.test(char);\n }\n if (!glyphObj.isWhitespace && !glyphObj.isEmpty) {\n renderableGlyphCount++;\n }\n\n // If a non-whitespace character overflows the max width, we need to soft-wrap\n if (canWrap && hasMaxWidth && !glyphObj.isWhitespace && glyphX + glyphWidth + lineXOffset > maxWidth && curLineCount) {\n // If it's the first char after a whitespace, start a new line\n if (currentLine.glyphAt(curLineCount - 1).glyphObj.canBreakAfter) {\n nextLine = new TextLine();\n lineXOffset = -glyphX;\n } else {\n // Back up looking for a whitespace character to wrap at\n for (let i = curLineCount; i--;) {\n // If we got the start of the line there's no soft break point; make hard break if overflowWrap='break-word'\n if (i === 0 && overflowWrap === 'break-word') {\n nextLine = new TextLine();\n lineXOffset = -glyphX;\n break\n }\n // Found a soft break point; move all chars since it to a new line\n else if (currentLine.glyphAt(i).glyphObj.canBreakAfter) {\n nextLine = currentLine.splitAt(i + 1);\n const adjustX = nextLine.glyphAt(0).x;\n lineXOffset -= adjustX;\n for (let j = nextLine.count; j--;) {\n nextLine.glyphAt(j).x -= adjustX;\n }\n break\n }\n }\n }\n if (nextLine) {\n currentLine.isSoftWrapped = true;\n currentLine = nextLine;\n lines.push(currentLine);\n maxLineWidth = maxWidth; //after soft wrapping use maxWidth as calculated width\n }\n }\n\n let fly = currentLine.glyphAt(currentLine.count);\n fly.glyphObj = glyphObj;\n fly.x = glyphX + lineXOffset;\n fly.width = glyphWidth;\n fly.charIndex = charIndex;\n\n // Handle hard line breaks\n if (char === '\\n') {\n currentLine = new TextLine();\n lines.push(currentLine);\n lineXOffset = -(glyphX + glyphWidth + (letterSpacing * fontSize)) + textIndent;\n }\n });\n\n // Calculate width of each line (excluding trailing whitespace) and maximum block width\n lines.forEach(line => {\n for (let i = line.count; i--;) {\n let {glyphObj, x, width} = line.glyphAt(i);\n if (!glyphObj.isWhitespace) {\n line.width = x + width;\n if (line.width > maxLineWidth) {\n maxLineWidth = line.width;\n }\n return\n }\n }\n });\n\n // Find overall position adjustments for anchoring\n let anchorXOffset = 0;\n let anchorYOffset = 0;\n if (anchorX) {\n if (typeof anchorX === 'number') {\n anchorXOffset = -anchorX;\n }\n else if (typeof anchorX === 'string') {\n anchorXOffset = -maxLineWidth * (\n anchorX === 'left' ? 0 :\n anchorX === 'center' ? 0.5 :\n anchorX === 'right' ? 1 :\n parsePercent(anchorX)\n );\n }\n }\n if (anchorY) {\n if (typeof anchorY === 'number') {\n anchorYOffset = -anchorY;\n }\n else if (typeof anchorY === 'string') {\n let height = lines.length * lineHeight;\n anchorYOffset = anchorY === 'top' ? 0 :\n anchorY === 'top-baseline' ? -topBaseline :\n anchorY === 'top-cap' ? -topBaseline - capHeight * fontSizeMult :\n anchorY === 'top-ex' ? -topBaseline - xHeight * fontSizeMult :\n anchorY === 'middle' ? height / 2 :\n anchorY === 'bottom' ? height :\n anchorY === 'bottom-baseline' ? height - halfLeading + descender * fontSizeMult :\n parsePercent(anchorY) * height;\n }\n }\n\n if (!metricsOnly) {\n // Resolve bidi levels\n const bidiLevelsResult = bidi.getEmbeddingLevels(text, direction);\n\n // Process each line, applying alignment offsets, adding each glyph to the atlas, and\n // collecting all renderable glyphs into a single collection.\n glyphIds = new Uint16Array(renderableGlyphCount);\n glyphPositions = new Float32Array(renderableGlyphCount * 2);\n glyphData = {};\n visibleBounds = [INF, INF, -INF, -INF];\n chunkedBounds = [];\n let lineYOffset = topBaseline;\n if (includeCaretPositions) {\n caretPositions = new Float32Array(text.length * 3);\n }\n if (colorRanges) {\n glyphColors = new Uint8Array(renderableGlyphCount * 3);\n }\n let renderableGlyphIndex = 0;\n let prevCharIndex = -1;\n let colorCharIndex = -1;\n let chunk;\n let currentColor;\n lines.forEach((line, lineIndex) => {\n let {count:lineGlyphCount, width:lineWidth} = line;\n\n // Ignore empty lines\n if (lineGlyphCount > 0) {\n // Count trailing whitespaces, we want to ignore these for certain things\n let trailingWhitespaceCount = 0;\n for (let i = lineGlyphCount; i-- && line.glyphAt(i).glyphObj.isWhitespace;) {\n trailingWhitespaceCount++;\n }\n\n // Apply horizontal alignment adjustments\n let lineXOffset = 0;\n let justifyAdjust = 0;\n if (textAlign === 'center') {\n lineXOffset = (maxLineWidth - lineWidth) / 2;\n } else if (textAlign === 'right') {\n lineXOffset = maxLineWidth - lineWidth;\n } else if (textAlign === 'justify' && line.isSoftWrapped) {\n // count non-trailing whitespace characters, and we'll adjust the offsets per character in the next loop\n let whitespaceCount = 0;\n for (let i = lineGlyphCount - trailingWhitespaceCount; i--;) {\n if (line.glyphAt(i).glyphObj.isWhitespace) {\n whitespaceCount++;\n }\n }\n justifyAdjust = (maxLineWidth - lineWidth) / whitespaceCount;\n }\n if (justifyAdjust || lineXOffset) {\n let justifyOffset = 0;\n for (let i = 0; i < lineGlyphCount; i++) {\n let glyphInfo = line.glyphAt(i);\n const glyphObj = glyphInfo.glyphObj;\n glyphInfo.x += lineXOffset + justifyOffset;\n // Expand non-trailing whitespaces for justify alignment\n if (justifyAdjust !== 0 && glyphObj.isWhitespace && i < lineGlyphCount - trailingWhitespaceCount) {\n justifyOffset += justifyAdjust;\n glyphInfo.width += justifyAdjust;\n }\n }\n }\n\n // Perform bidi range flipping\n const flips = bidi.getReorderSegments(\n text, bidiLevelsResult, line.glyphAt(0).charIndex, line.glyphAt(line.count - 1).charIndex\n );\n for (let fi = 0; fi < flips.length; fi++) {\n const [start, end] = flips[fi];\n // Map start/end string indices to indices in the line\n let left = Infinity, right = -Infinity;\n for (let i = 0; i < lineGlyphCount; i++) {\n if (line.glyphAt(i).charIndex >= start) { // gte to handle removed characters\n let startInLine = i, endInLine = i;\n for (; endInLine < lineGlyphCount; endInLine++) {\n let info = line.glyphAt(endInLine);\n if (info.charIndex > end) {\n break\n }\n if (endInLine < lineGlyphCount - trailingWhitespaceCount) { //don't include trailing ws in flip width\n left = Math.min(left, info.x);\n right = Math.max(right, info.x + info.width);\n }\n }\n for (let j = startInLine; j < endInLine; j++) {\n const glyphInfo = line.glyphAt(j);\n glyphInfo.x = right - (glyphInfo.x + glyphInfo.width - left);\n }\n break\n }\n }\n }\n\n // Assemble final data arrays\n let glyphObj;\n const setGlyphObj = g => glyphObj = g;\n for (let i = 0; i < lineGlyphCount; i++) {\n let glyphInfo = line.glyphAt(i);\n glyphObj = glyphInfo.glyphObj;\n const glyphId = glyphObj.index;\n\n // Replace mirrored characters in rtl\n const rtl = bidiLevelsResult.levels[glyphInfo.charIndex] & 1; //odd level means rtl\n if (rtl) {\n const mirrored = bidi.getMirroredCharacter(text[glyphInfo.charIndex]);\n if (mirrored) {\n fontObj.forEachGlyph(mirrored, 0, 0, setGlyphObj);\n }\n }\n\n // Add caret positions\n if (includeCaretPositions) {\n const {charIndex} = glyphInfo;\n const caretLeft = glyphInfo.x + anchorXOffset;\n const caretRight = glyphInfo.x + glyphInfo.width + anchorXOffset;\n caretPositions[charIndex * 3] = rtl ? caretRight : caretLeft; //start edge x\n caretPositions[charIndex * 3 + 1] = rtl ? caretLeft : caretRight; //end edge x\n caretPositions[charIndex * 3 + 2] = lineYOffset + caretBottomOffset + anchorYOffset; //common bottom y\n\n // If we skipped any chars from the previous glyph (due to ligature subs), fill in caret\n // positions for those missing char indices; currently this uses a best-guess by dividing\n // the ligature's width evenly. In the future we may try to use the font's LigatureCaretList\n // table to get better interior caret positions.\n const ligCount = charIndex - prevCharIndex;\n if (ligCount > 1) {\n fillLigatureCaretPositions(caretPositions, prevCharIndex, ligCount);\n }\n prevCharIndex = charIndex;\n }\n\n // Track current color range\n if (colorRanges) {\n const {charIndex} = glyphInfo;\n while(charIndex > colorCharIndex) {\n colorCharIndex++;\n if (colorRanges.hasOwnProperty(colorCharIndex)) {\n currentColor = colorRanges[colorCharIndex];\n }\n }\n }\n\n // Get atlas data for renderable glyphs\n if (!glyphObj.isWhitespace && !glyphObj.isEmpty) {\n const idx = renderableGlyphIndex++;\n\n // Add this glyph's path data\n if (!glyphData[glyphId]) {\n glyphData[glyphId] = {\n path: glyphObj.path,\n pathBounds: [glyphObj.xMin, glyphObj.yMin, glyphObj.xMax, glyphObj.yMax]\n };\n }\n\n // Determine final glyph position and add to glyphPositions array\n const glyphX = glyphInfo.x + anchorXOffset;\n const glyphY = lineYOffset + anchorYOffset;\n glyphPositions[idx * 2] = glyphX;\n glyphPositions[idx * 2 + 1] = glyphY;\n\n // Track total visible bounds\n const visX0 = glyphX + glyphObj.xMin * fontSizeMult;\n const visY0 = glyphY + glyphObj.yMin * fontSizeMult;\n const visX1 = glyphX + glyphObj.xMax * fontSizeMult;\n const visY1 = glyphY + glyphObj.yMax * fontSizeMult;\n if (visX0 < visibleBounds[0]) visibleBounds[0] = visX0;\n if (visY0 < visibleBounds[1]) visibleBounds[1] = visY0;\n if (visX1 > visibleBounds[2]) visibleBounds[2] = visX1;\n if (visY1 > visibleBounds[3]) visibleBounds[3] = visY1;\n\n // Track bounding rects for each chunk of N glyphs\n if (idx % chunkedBoundsSize === 0) {\n chunk = {start: idx, end: idx, rect: [INF, INF, -INF, -INF]};\n chunkedBounds.push(chunk);\n }\n chunk.end++;\n const chunkRect = chunk.rect;\n if (visX0 < chunkRect[0]) chunkRect[0] = visX0;\n if (visY0 < chunkRect[1]) chunkRect[1] = visY0;\n if (visX1 > chunkRect[2]) chunkRect[2] = visX1;\n if (visY1 > chunkRect[3]) chunkRect[3] = visY1;\n\n // Add to glyph ids array\n glyphIds[idx] = glyphId;\n\n // Add colors\n if (colorRanges) {\n const start = idx * 3;\n glyphColors[start] = currentColor >> 16 & 255;\n glyphColors[start + 1] = currentColor >> 8 & 255;\n glyphColors[start + 2] = currentColor & 255;\n }\n }\n }\n }\n\n // Increment y offset for next line\n lineYOffset -= lineHeight;\n });\n\n // Fill in remaining caret positions in case the final character was a ligature\n if (caretPositions) {\n const ligCount = text.length - prevCharIndex;\n if (ligCount > 1) {\n fillLigatureCaretPositions(caretPositions, prevCharIndex, ligCount);\n }\n }\n }\n\n // Timing stats\n timings.typesetting = now() - typesetStart;\n\n callback({\n glyphIds, //font indices for each glyph\n glyphPositions, //x,y of each glyph's origin in layout\n glyphData, //dict holding data about each glyph appearing in the text\n caretPositions, //startX,endX,bottomY caret positions for each char\n caretHeight, //height of cursor from bottom to top\n glyphColors, //color for each glyph, if color ranges supplied\n chunkedBounds, //total rects per (n=chunkedBoundsSize) consecutive glyphs\n fontSize, //calculated em height\n unitsPerEm, //font units per em\n ascender: ascender * fontSizeMult, //font ascender\n descender: descender * fontSizeMult, //font descender\n capHeight: capHeight * fontSizeMult, //font cap-height\n xHeight: xHeight * fontSizeMult, //font x-height\n lineHeight, //computed line height\n topBaseline, //y coordinate of the top line's baseline\n blockBounds: [ //bounds for the whole block of text, including vertical padding for lineHeight\n anchorXOffset,\n anchorYOffset - lines.length * lineHeight,\n anchorXOffset + maxLineWidth,\n anchorYOffset\n ],\n visibleBounds, //total bounds of visible text paths, may be larger or smaller than blockBounds\n timings\n });\n });\n }\n\n\n /**\n * For a given text string and font parameters, determine the resulting block dimensions\n * after wrapping for the given maxWidth.\n * @param args\n * @param callback\n */\n function measure(args, callback) {\n typeset(args, (result) => {\n const [x0, y0, x1, y1] = result.blockBounds;\n callback({\n width: x1 - x0,\n height: y1 - y0\n });\n }, {metricsOnly: true});\n }\n\n function parsePercent(str) {\n let match = str.match(/^([\\d.]+)%$/);\n let pct = match ? parseFloat(match[1]) : NaN;\n return isNaN(pct) ? 0 : pct / 100\n }\n\n function fillLigatureCaretPositions(caretPositions, ligStartIndex, ligCount) {\n const ligStartX = caretPositions[ligStartIndex * 3];\n const ligEndX = caretPositions[ligStartIndex * 3 + 1];\n const ligY = caretPositions[ligStartIndex * 3 + 2];\n const guessedAdvanceX = (ligEndX - ligStartX) / ligCount;\n for (let i = 0; i < ligCount; i++) {\n const startIndex = (ligStartIndex + i) * 3;\n caretPositions[startIndex] = ligStartX + guessedAdvanceX * i;\n caretPositions[startIndex + 1] = ligStartX + guessedAdvanceX * (i + 1);\n caretPositions[startIndex + 2] = ligY;\n }\n }\n\n function now() {\n return (self.performance || Date).now()\n }\n\n // Array-backed structure for a single line's glyphs data\n function TextLine() {\n this.data = [];\n }\n const textLineProps = ['glyphObj', 'x', 'width', 'charIndex'];\n TextLine.prototype = {\n width: 0,\n isSoftWrapped: false,\n get count() {\n return Math.ceil(this.data.length / textLineProps.length)\n },\n glyphAt(i) {\n let fly = TextLine.flyweight;\n fly.data = this.data;\n fly.index = i;\n return fly\n },\n splitAt(i) {\n let newLine = new TextLine();\n newLine.data = this.data.splice(i * textLineProps.length);\n return newLine\n }\n };\n TextLine.flyweight = textLineProps.reduce((obj, prop, i, all) => {\n Object.defineProperty(obj, prop, {\n get() {\n return this.data[this.index * textLineProps.length + i]\n },\n set(val) {\n this.data[this.index * textLineProps.length + i] = val;\n }\n });\n return obj\n }, {data: null, index: 0});\n\n\n return {\n typeset,\n measure,\n loadFont\n }\n}\n\nconst now = () => (self.performance || Date).now();\n\nconst mainThreadGenerator = /*#__PURE__*/ createSDFGenerator();\n\nlet warned;\n\n/**\n * Generate an SDF texture image for a single glyph path, placing the result into a webgl canvas at a\n * given location and channel. Utilizes the webgl-sdf-generator external package for GPU-accelerated SDF\n * generation when supported.\n */\nfunction generateSDF(width, height, path, viewBox, distance, exponent, canvas, x, y, channel, useWebGL = true) {\n // Allow opt-out\n if (!useWebGL) {\n return generateSDF_JS_Worker(width, height, path, viewBox, distance, exponent, canvas, x, y, channel)\n }\n\n // Attempt GPU-accelerated generation first\n return generateSDF_GL(width, height, path, viewBox, distance, exponent, canvas, x, y, channel).then(\n null,\n err => {\n // WebGL failed either due to a hard error or unexpected results; fall back to JS in workers\n if (!warned) {\n console.warn(`WebGL SDF generation failed, falling back to JS`, err);\n warned = true;\n }\n return generateSDF_JS_Worker(width, height, path, viewBox, distance, exponent, canvas, x, y, channel)\n }\n )\n}\n\nconst queue = [];\nconst chunkTimeBudget = 5; // ms\nlet timer = 0;\n\nfunction nextChunk() {\n const start = now();\n while (queue.length && now() - start < chunkTimeBudget) {\n queue.shift()();\n }\n timer = queue.length ? setTimeout(nextChunk, 0) : 0;\n}\n\n/**\n * WebGL-based implementation executed on the main thread. Requests are executed in time-bounded\n * macrotask chunks to allow render frames to execute in between.\n */\nconst generateSDF_GL = (...args) => {\n return new Promise((resolve, reject) => {\n queue.push(() => {\n const start = now();\n try {\n mainThreadGenerator.webgl.generateIntoCanvas(...args);\n resolve({ timing: now() - start });\n } catch (err) {\n reject(err);\n }\n });\n if (!timer) {\n timer = setTimeout(nextChunk, 0);\n }\n })\n};\n\nconst threadCount = 4; // how many workers to spawn\nconst idleTimeout = 2000; // workers will be terminated after being idle this many milliseconds\nconst threads = {};\nlet callNum = 0;\n\n/**\n * Fallback JS-based implementation, fanned out to a number of worker threads for parallelism\n */\nfunction generateSDF_JS_Worker(width, height, path, viewBox, distance, exponent, canvas, x, y, channel) {\n const workerId = 'TroikaTextSDFGenerator_JS_' + ((callNum++) % threadCount);\n let thread = threads[workerId];\n if (!thread) {\n thread = threads[workerId] = {\n workerModule: defineWorkerModule({\n name: workerId,\n workerId,\n dependencies: [\n createSDFGenerator,\n now\n ],\n init(_createSDFGenerator, now) {\n const generate = _createSDFGenerator().javascript.generate;\n return function (...args) {\n const start = now();\n const textureData = generate(...args);\n return {\n textureData,\n timing: now() - start\n }\n }\n },\n getTransferables(result) {\n return [result.textureData.buffer]\n }\n }),\n requests: 0,\n idleTimer: null\n };\n }\n\n thread.requests++;\n clearTimeout(thread.idleTimer);\n return thread.workerModule(width, height, path, viewBox, distance, exponent)\n .then(({ textureData, timing }) => {\n // copy result data into the canvas\n const start = now();\n // expand single-channel data into rgba\n const imageData = new Uint8Array(textureData.length * 4);\n for (let i = 0; i < textureData.length; i++) {\n imageData[i * 4 + channel] = textureData[i];\n }\n mainThreadGenerator.webglUtils.renderImageData(canvas, imageData, x, y, width, height, 1 << (3 - channel));\n timing += now() - start;\n\n // clean up workers after a while\n if (--thread.requests === 0) {\n thread.idleTimer = setTimeout(() => { terminateWorker(workerId); }, idleTimeout);\n }\n return { timing }\n })\n}\n\nfunction warmUpSDFCanvas(canvas) {\n if (!canvas._warm) {\n mainThreadGenerator.webgl.isSupported(canvas);\n canvas._warm = true;\n }\n}\n\nconst resizeWebGLCanvasWithoutClearing = mainThreadGenerator.webglUtils.resizeWebGLCanvasWithoutClearing;\n\n/*!\nCustom build of Typr.ts (https://github.com/fredli74/Typr.ts) for use in Troika text rendering.\nOriginal MIT license applies: https://github.com/fredli74/Typr.ts/blob/master/LICENSE\n*/\nfunction typrFactory(){return \"undefined\"==typeof window&&(self.window=self),function(r){var e={parse:function(r){var t=e._bin,a=new Uint8Array(r);if(\"ttcf\"==t.readASCII(a,0,4)){var n=4;t.readUshort(a,n),n+=2,t.readUshort(a,n),n+=2;var o=t.readUint(a,n);n+=4;for(var s=[],i=0;i>>t&1)&&e++;return e},e._lctf.readClassDef=function(r,t){var a=e._bin,n=[],o=a.readUshort(r,t);if(t+=2,1==o){var s=a.readUshort(r,t);t+=2;var i=a.readUshort(r,t);t+=2;for(var h=0;h0&&(o.featureParams=n+s);var i=a.readUshort(r,t);t+=2,o.tab=[];for(var h=0;h255?-1:e.CFF.glyphByUnicode(r,e.CFF.tableSE[t])},e.CFF.readEncoding=function(r,t,a){e._bin;var n=[\".notdef\"],o=r[t];if(t++,0!=o)throw \"error: unknown encoding format: \"+o;var s=r[t];t++;for(var i=0;i>4,p=15&v;if(15!=c&&l.push(c),15!=p&&l.push(p),15==p)break}for(var U=\"\",g=[0,1,2,3,4,5,6,7,8,9,\".\",\"e\",\"e-\",\"reserved\",\"-\",\"endOfNumber\"],S=0;S=s.xMax||s.yMin>=s.yMax)return null;if(s.noc>0){s.endPts=[];for(var i=0;i=1&&i.fmt<=2){f=o.readUshort(r,a);a+=2;var u=o.readUshort(r,a);a+=2;d=e._lctf.numOfOnes(f);var l=e._lctf.numOfOnes(u);if(1==i.fmt){i.pairsets=[];var v=o.readUshort(r,a);a+=2;for(var c=0;c=1&&i.fmt<=2){if(1==i.fmt)i.delta=o.readShort(r,a),a+=2;else if(2==i.fmt){var f=o.readUshort(r,a);a+=2,i.newg=o.readUshorts(r,a,f),a+=2*i.newg.length;}}else if(4==t){i.vals=[];f=o.readUshort(r,a);a+=2;for(var d=0;d>>8;if(0!=(u&=15))throw \"unknown kern table format: \"+u;t=e.kern.readFormat0(r,t,h);}return h},e.kern.parseV1=function(r,t,a,n){var o=e._bin;o.readFixed(r,t),t+=4;var s=o.readUint(r,t);t+=4;for(var i={glyph1:[],rval:[]},h=0;h>>8;if(0!=(d&=15))throw \"unknown kern table format: \"+d;t=e.kern.readFormat0(r,t,i);}return i},e.kern.readFormat0=function(r,t,a){var n=e._bin,o=-1,s=n.readUshort(r,t);t+=2,n.readUshort(r,t),t+=2,n.readUshort(r,t),t+=2,n.readUshort(r,t),t+=2;for(var i=0;i=n.map.length?0:n.map[e];if(4==n.format){for(var o=-1,s=0;se)return 0;return 65535&(0!=n.idRangeOffset[o]?n.glyphIdArray[e-n.startCount[o]+(n.idRangeOffset[o]>>1)-(n.idRangeOffset.length-o)]:e+n.idDelta[o])}if(12==n.format){if(e>n.groups[n.groups.length-1][1])return 0;for(s=0;s-1?e.U._simpleGlyph(n,a):e.U._compoGlyph(n,t,a));},e.U._simpleGlyph=function(r,t){for(var a=0;ao)){for(var v=!0,c=0,p=0;po)){for(v=!0,p=0;p>1,s.length=0,h=!0;else if(\"o3\"==x||\"o23\"==x){s.length%2!=0&&!h&&(f=s.shift()+n.nominalWidthX),i+=s.length>>1,s.length=0,h=!0;}else if(\"o4\"==x)s.length>1&&!h&&(f=s.shift()+n.nominalWidthX,h=!0),d&&e.U.P.closePath(o),v+=s.pop(),e.U.P.moveTo(o,l,v),d=!0;else if(\"o5\"==x)for(;s.length>0;)l+=s.shift(),v+=s.shift(),e.U.P.lineTo(o,l,v);else if(\"o6\"==x||\"o7\"==x)for(var P=s.length,I=\"o6\"==x,w=0;wMath.abs(y-v)?l=b+s.shift():v=y+s.shift(),e.U.P.curveTo(o,c,p,U,g,F,_),e.U.P.curveTo(o,S,m,b,y,l,v));else if(\"o14\"==x){if(s.length>0&&!h&&(f=s.shift()+a.nominalWidthX,h=!0),4==s.length){var k=s.shift(),G=s.shift(),D=s.shift(),B=s.shift(),L=e.CFF.glyphBySE(a,D),R=e.CFF.glyphBySE(a,B);e.U._drawCFF(a.CharStrings[L],t,a,n,o),t.x=k,t.y=G,e.U._drawCFF(a.CharStrings[R],t,a,n,o);}d&&(e.U.P.closePath(o),d=!1);}else if(\"o19\"==x||\"o20\"==x){s.length%2!=0&&!h&&(f=s.shift()+n.nominalWidthX),i+=s.length>>1,s.length=0,h=!0,u+=i+7>>3;}else if(\"o21\"==x)s.length>2&&!h&&(f=s.shift()+n.nominalWidthX,h=!0),v+=s.pop(),l+=s.pop(),d&&e.U.P.closePath(o),e.U.P.moveTo(o,l,v),d=!0;else if(\"o22\"==x)s.length>1&&!h&&(f=s.shift()+n.nominalWidthX,h=!0),l+=s.pop(),d&&e.U.P.closePath(o),e.U.P.moveTo(o,l,v),d=!0;else if(\"o25\"==x){for(;s.length>6;)l+=s.shift(),v+=s.shift(),e.U.P.lineTo(o,l,v);c=l+s.shift(),p=v+s.shift(),U=c+s.shift(),g=p+s.shift(),l=U+s.shift(),v=g+s.shift(),e.U.P.curveTo(o,c,p,U,g,l,v);}else if(\"o26\"==x)for(s.length%2&&(l+=s.shift());s.length>0;)c=l,p=v+s.shift(),l=U=c+s.shift(),v=(g=p+s.shift())+s.shift(),e.U.P.curveTo(o,c,p,U,g,l,v);else if(\"o27\"==x)for(s.length%2&&(v+=s.shift());s.length>0;)p=v,U=(c=l+s.shift())+s.shift(),g=p+s.shift(),l=U+s.shift(),v=g,e.U.P.curveTo(o,c,p,U,g,l,v);else if(\"o10\"==x||\"o29\"==x){var A=\"o10\"==x?n:a;if(0==s.length)console.debug(\"error: empty stack\");else {var W=s.pop(),M=A.Subrs[W+A.Bias];t.x=l,t.y=v,t.nStems=i,t.haveWidth=h,t.width=f,t.open=d,e.U._drawCFF(M,t,a,n,o),l=t.x,v=t.y,i=t.nStems,h=t.haveWidth,f=t.width,d=t.open;}}else if(\"o30\"==x||\"o31\"==x){var V=s.length,N=(T=0,\"o31\"==x);for(T+=V-(P=-3&V);T>>1|(21845&g)<<1;h=(61680&(h=(52428&h)>>>2|(13107&h)<<2))>>>4|(3855&h)<<4,c[g]=((65280&h)>>>8|(255&h)<<8)>>>1;}var w=function(r,e,t){for(var a=r.length,i=0,o=new n(e);i>>v]=s;}else for(f=new n(a),i=0;i>>15-r[i]);return f},d=new e(288);for(g=0;g<144;++g)d[g]=8;for(g=144;g<256;++g)d[g]=9;for(g=256;g<280;++g)d[g]=7;for(g=280;g<288;++g)d[g]=8;var m=new e(32);for(g=0;g<32;++g)m[g]=5;var b=w(d,9,1),p=w(m,5,1),y=function(r){for(var e=r[0],n=1;ne&&(e=r[n]);return e},L=function(r,e,n){var t=e/8|0;return (r[t]|r[t+1]<<8)>>(7&e)&n},U=function(r,e){var n=e/8|0;return (r[n]|r[n+1]<<8|r[n+2]<<16)>>(7&e)},k=[\"unexpected EOF\",\"invalid block type\",\"invalid length/literal\",\"invalid distance\",\"stream finished\",\"no stream handler\",,\"no callback\",\"invalid UTF-8 data\",\"extra field too long\",\"date not in range 1980-2099\",\"filename too long\",\"stream finishing\",\"invalid zip data\"],T=function(r,e,n){var t=new Error(e||k[r]);if(t.code=r,Error.captureStackTrace&&Error.captureStackTrace(t,T),!n)throw t;return t},O=function(r,f,u){var s=r.length;if(!s||u&&!u.l&&s<5)return f||new e(0);var c=!f||u,g=!u||u.i;u||(u={}),f||(f=new e(3*s));var h,d=function(r){var n=f.length;if(r>n){var t=new e(Math.max(2*n,r));t.set(f),f=t;}},m=u.f||0,k=u.p||0,O=u.b||0,A=u.l,x=u.d,E=u.m,D=u.n,M=8*s;do{if(!A){u.f=m=L(r,k,1);var S=L(r,k+1,3);if(k+=3,!S){var V=r[(I=((h=k)/8|0)+(7&h&&1)+4)-4]|r[I-3]<<8,_=I+V;if(_>s){g&&T(0);break}c&&d(O+V),f.set(r.subarray(I,_),O),u.b=O+=V,u.p=k=8*_;continue}if(1==S)A=b,x=p,E=9,D=5;else if(2==S){var j=L(r,k,31)+257,z=L(r,k+10,15)+4,C=j+L(r,k+5,31)+1;k+=14;for(var F=new e(C),P=new e(19),q=0;q>>4)<16)F[q++]=I;else {var K=0,N=0;for(16==I?(N=3+L(r,k,3),k+=2,K=F[q-1]):17==I?(N=3+L(r,k,7),k+=3):18==I&&(N=11+L(r,k,127),k+=7);N--;)F[q++]=K;}}var Q=F.subarray(0,j),R=F.subarray(j);E=y(Q),D=y(R),A=w(Q,E,1),x=w(R,D,1);}else T(1);if(k>M){g&&T(0);break}}c&&d(O+131072);for(var W=(1<>>4;if((k+=15&K)>M){g&&T(0);break}if(K||T(2),Z<256)f[O++]=Z;else {if(256==Z){Y=k,A=null;break}var $=Z-254;if(Z>264){var rr=a[q=Z-257];$=L(r,k,(1<>>4;er||T(3),k+=15&er;R=l[nr];if(nr>3){rr=i[nr];R+=U(r,k)&(1<M){g&&T(0);break}c&&d(O+131072);for(var tr=O+$;Or.length)&&(i=r.length);var o=new(r instanceof n?n:r instanceof t?t:e)(i-a);return o.set(r.subarray(a,i)),o}(f,0,O)},A=new e(0);var x=\"undefined\"!=typeof TextDecoder&&new TextDecoder;try{x.decode(A,{stream:!0}),1;}catch(r){}return r.convert_streams=function(r){var e=new DataView(r),n=0;function t(){var r=e.getUint16(n);return n+=2,r}function a(){var r=e.getUint32(n);return n+=4,r}function i(r){m.setUint16(b,r),b+=2;}function o(r){m.setUint32(b,r),b+=4;}for(var f={signature:a(),flavor:a(),length:a(),numTables:t(),reserved:t(),totalSfntSize:a(),majorVersion:t(),minorVersion:t(),metaOffset:a(),metaLength:a(),metaOrigLength:a(),privOffset:a(),privLength:a()},u=0;Math.pow(2,u)<=f.numTables;)u++;u--;for(var v=16*Math.pow(2,u),s=16*f.numTables-v,l=12,c=[],g=0;g {\n let [skip, step] = range.split('+');\n skip = parseInt(skip,36);\n step = step ? parseInt(step, 36) : 0;\n joiningTypeMap.set(lastCode += skip, m[type]);\n for (let i = step; i--;) {\n joiningTypeMap.set(++lastCode, m[type]);\n }\n });\n }\n }\n return joiningTypeMap.get(ch) || JT_NON_JOINING\n }\n\n const ISOL = 1, INIT = 2, FINA = 3, MEDI = 4;\n const formsToFeatures = [null, 'isol', 'init', 'fina', 'medi'];\n\n function detectJoiningForms(str) {\n // This implements the algorithm described here:\n // https://github.com/n8willis/opentype-shaping-documents/blob/master/opentype-shaping-arabic-general.md\n const joiningForms = new Uint8Array(str.length);\n let prevJoiningType = JT_NON_JOINING;\n let prevForm = ISOL;\n let prevIndex = -1;\n for (let i = 0; i < str.length; i++) {\n const code = str.codePointAt(i);\n let joiningType = getCharJoiningType(code) | 0;\n let form = ISOL;\n if (joiningType & JT_TRANSPARENT) {\n continue\n }\n if (prevJoiningType & (JT_LEFT | JT_DUAL | JT_JOIN_CAUSING)) {\n if (joiningType & (JT_RIGHT | JT_DUAL | JT_JOIN_CAUSING)) {\n form = FINA;\n // isol->init, fina->medi\n if (prevForm === ISOL || prevForm === FINA) {\n joiningForms[prevIndex]++;\n }\n }\n else if (joiningType & (JT_LEFT | JT_NON_JOINING)) {\n // medi->fina, init->isol\n if (prevForm === INIT || prevForm === MEDI) {\n joiningForms[prevIndex]--;\n }\n }\n }\n else if (prevJoiningType & (JT_RIGHT | JT_NON_JOINING)) {\n // medi->fina, init->isol\n if (prevForm === INIT || prevForm === MEDI) {\n joiningForms[prevIndex]--;\n }\n }\n prevForm = joiningForms[i] = form;\n prevJoiningType = joiningType;\n prevIndex = i;\n if (code > 0xffff) i++;\n }\n // console.log(str.split('').map(ch => ch.codePointAt(0).toString(16)))\n // console.log(str.split('').map(ch => getCharJoiningType(ch.codePointAt(0))))\n // console.log(Array.from(joiningForms).map(f => formsToFeatures[f] || 'none'))\n return joiningForms\n }\n\n function stringToGlyphs (font, str) {\n const glyphIds = [];\n for (let i = 0; i < str.length; i++) {\n const cc = str.codePointAt(i);\n if (cc > 0xffff) i++;\n glyphIds.push(Typr.U.codeToGlyph(font, cc));\n }\n\n const gsub = font['GSUB'];\n if (gsub) {\n const {lookupList, featureList} = gsub;\n let joiningForms;\n const supportedFeatures = /^(rlig|liga|mset|isol|init|fina|medi|half|pres|blws)$/;\n const usedLookups = [];\n featureList.forEach(feature => {\n if (supportedFeatures.test(feature.tag)) {\n for (let ti = 0; ti < feature.tab.length; ti++) {\n if (usedLookups[feature.tab[ti]]) continue\n usedLookups[feature.tab[ti]] = true;\n const tab = lookupList[feature.tab[ti]];\n const isJoiningFeature = /^(isol|init|fina|medi)$/.test(feature.tag);\n if (isJoiningFeature && !joiningForms) { //lazy\n joiningForms = detectJoiningForms(str);\n }\n for (let ci = 0; ci < glyphIds.length; ci++) {\n if (!joiningForms || !isJoiningFeature || formsToFeatures[joiningForms[ci]] === feature.tag) {\n Typr.U._applySubs(glyphIds, ci, tab, lookupList);\n }\n }\n }\n }\n });\n }\n\n return glyphIds\n }\n\n function firstNum(...args) {\n for (let i = 0; i < args.length; i++) {\n if (typeof args[i] === 'number') {\n return args[i]\n }\n }\n }\n\n function wrapFontObj(typrFont) {\n const glyphMap = Object.create(null);\n\n const os2 = typrFont['OS/2'];\n const hhea = typrFont.hhea;\n const unitsPerEm = typrFont.head.unitsPerEm;\n const ascender = firstNum(os2 && os2.sTypoAscender, hhea && hhea.ascender, unitsPerEm);\n\n const fontObj = {\n unitsPerEm,\n ascender,\n descender: firstNum(os2 && os2.sTypoDescender, hhea && hhea.descender, 0),\n capHeight: firstNum(os2 && os2.sCapHeight, ascender),\n xHeight: firstNum(os2 && os2.sxHeight, ascender),\n lineGap: firstNum(os2 && os2.sTypoLineGap, hhea && hhea.lineGap),\n forEachGlyph(text, fontSize, letterSpacing, callback) {\n let glyphX = 0;\n const fontScale = 1 / fontObj.unitsPerEm * fontSize;\n\n const glyphIndices = stringToGlyphs(typrFont, text);\n let charIndex = 0;\n let prevGlyphIndex = -1;\n glyphIndices.forEach((glyphIndex, i) => {\n // Typr returns a glyph index per string codepoint, with -1s in place of those that\n // were omitted due to ligature substitution. So we can track original index in the\n // string via simple increment, and skip everything else when seeing a -1.\n if (glyphIndex !== -1) {\n let glyphObj = glyphMap[glyphIndex];\n if (!glyphObj) {\n const {cmds, crds} = Typr.U.glyphToPath(typrFont, glyphIndex);\n\n // Build path string\n let path = '';\n let crdsIdx = 0;\n for (let i = 0, len = cmds.length; i < len; i++) {\n const numArgs = cmdArgLengths[cmds[i]];\n path += cmds[i];\n for (let j = 1; j <= numArgs; j++) {\n path += (j > 1 ? ',' : '') + crds[crdsIdx++];\n }\n }\n\n // Find extents - Glyf gives this in metadata but not CFF, and Typr doesn't\n // normalize the two, so it's simplest just to iterate ourselves.\n let xMin, yMin, xMax, yMax;\n if (crds.length) {\n xMin = yMin = Infinity;\n xMax = yMax = -Infinity;\n for (let i = 0, len = crds.length; i < len; i += 2) {\n let x = crds[i];\n let y = crds[i + 1];\n if (x < xMin) xMin = x;\n if (y < yMin) yMin = y;\n if (x > xMax) xMax = x;\n if (y > yMax) yMax = y;\n }\n } else {\n xMin = xMax = yMin = yMax = 0;\n }\n\n glyphObj = glyphMap[glyphIndex] = {\n index: glyphIndex,\n advanceWidth: typrFont.hmtx.aWidth[glyphIndex],\n xMin,\n yMin,\n xMax,\n yMax,\n path,\n pathCommandCount: cmds.length,\n // forEachPathCommand(callback) {\n // let argsIndex = 0\n // const argsArray = []\n // for (let i = 0, len = cmds.length; i < len; i++) {\n // const numArgs = cmdArgLengths[cmds[i]]\n // argsArray.length = 1 + numArgs\n // argsArray[0] = cmds[i]\n // for (let j = 1; j <= numArgs; j++) {\n // argsArray[j] = crds[argsIndex++]\n // }\n // callback.apply(null, argsArray)\n // }\n // }\n };\n }\n\n // Kerning\n if (prevGlyphIndex !== -1) {\n glyphX += Typr.U.getPairAdjustment(typrFont, prevGlyphIndex, glyphIndex) * fontScale;\n }\n\n callback.call(null, glyphObj, glyphX, charIndex);\n\n if (glyphObj.advanceWidth) {\n glyphX += glyphObj.advanceWidth * fontScale;\n }\n if (letterSpacing) {\n glyphX += letterSpacing * fontSize;\n }\n\n prevGlyphIndex = glyphIndex;\n }\n charIndex += (text.codePointAt(charIndex) > 0xffff ? 2 : 1);\n });\n return glyphX\n }\n };\n\n return fontObj\n }\n\n return function parse(buffer) {\n // Look to see if we have a WOFF file and convert it if so:\n const peek = new Uint8Array(buffer, 0, 4);\n const tag = Typr._bin.readASCII(peek, 0, 4);\n if (tag === 'wOFF') {\n buffer = woff2otf(buffer);\n } else if (tag === 'wOF2') {\n throw new Error('woff2 fonts not supported')\n }\n return wrapFontObj(Typr.parse(buffer)[0])\n }\n}\n\n\nconst workerModule = /*#__PURE__*/defineWorkerModule({\n name: 'Typr Font Parser',\n dependencies: [typrFactory, woff2otfFactory, parserFactory],\n init(typrFactory, woff2otfFactory, parserFactory) {\n const Typr = typrFactory();\n const woff2otf = woff2otfFactory();\n return parserFactory(Typr, woff2otf)\n }\n});\n\nconst CONFIG = {\n defaultFontURL: 'https://fonts.gstatic.com/s/roboto/v18/KFOmCnqEu92Fr1Mu4mxM.woff', //Roboto Regular\n sdfGlyphSize: 64,\n sdfMargin: 1 / 16,\n sdfExponent: 9,\n textureWidth: 2048\n};\nconst tempColor = /*#__PURE__*/new Color();\nlet hasRequested = false;\n\nfunction now$1() {\n return (self.performance || Date).now()\n}\n\n/**\n * Customizes the text builder configuration. This must be called prior to the first font processing\n * request, and applies to all fonts.\n *\n * @param {String} config.defaultFontURL - The URL of the default font to use for text processing\n * requests, in case none is specified or the specifiede font fails to load or parse.\n * Defaults to \"Roboto Regular\" from Google Fonts.\n * @param {Number} config.sdfGlyphSize - The default size of each glyph's SDF (signed distance field)\n * texture used for rendering. Must be a power-of-two number, and applies to all fonts,\n * but note that this can also be overridden per call to `getTextRenderInfo()`.\n * Larger sizes can improve the quality of glyph rendering by increasing the sharpness\n * of corners and preventing loss of very thin lines, at the expense of memory. Defaults\n * to 64 which is generally a good balance of size and quality.\n * @param {Number} config.sdfExponent - The exponent used when encoding the SDF values. A higher exponent\n * shifts the encoded 8-bit values to achieve higher precision/accuracy at texels nearer\n * the glyph's path, with lower precision further away. Defaults to 9.\n * @param {Number} config.sdfMargin - How much space to reserve in the SDF as margin outside the glyph's\n * path, as a percentage of the SDF width. A larger margin increases the quality of\n * extruded glyph outlines, but decreases the precision available for the glyph itself.\n * Defaults to 1/16th of the glyph size.\n * @param {Number} config.textureWidth - The width of the SDF texture; must be a power of 2. Defaults to\n * 2048 which is a safe maximum texture dimension according to the stats at\n * https://webglstats.com/webgl/parameter/MAX_TEXTURE_SIZE and should allow for a\n * reasonably large number of glyphs (default glyph size of 64^2 and safe texture size of\n * 2048^2, times 4 channels, allows for 4096 glyphs.) This can be increased if you need to\n * increase the glyph size and/or have an extraordinary number of glyphs.\n */\nfunction configureTextBuilder(config) {\n if (hasRequested) {\n console.warn('configureTextBuilder called after first font request; will be ignored.');\n } else {\n assign(CONFIG, config);\n }\n}\n\n/**\n * Repository for all font SDF atlas textures and their glyph mappings. There is a separate atlas for\n * each sdfGlyphSize. Each atlas has a single Texture that holds all glyphs for all fonts.\n *\n * {\n * [sdfGlyphSize]: {\n * glyphCount: number,\n * sdfGlyphSize: number,\n * sdfTexture: Texture,\n * sdfCanvas: HTMLCanvasElement,\n * contextLost: boolean,\n * glyphsByFont: Map>\n * }\n * }\n */\nconst atlases = Object.create(null);\n\n/**\n * @typedef {object} TroikaTextRenderInfo - Format of the result from `getTextRenderInfo`.\n * @property {object} parameters - The normalized input arguments to the render call.\n * @property {Texture} sdfTexture - The SDF atlas texture.\n * @property {number} sdfGlyphSize - The size of each glyph's SDF; see `configureTextBuilder`.\n * @property {number} sdfExponent - The exponent used in encoding the SDF's values; see `configureTextBuilder`.\n * @property {Float32Array} glyphBounds - List of [minX, minY, maxX, maxY] quad bounds for each glyph.\n * @property {Float32Array} glyphAtlasIndices - List holding each glyph's index in the SDF atlas.\n * @property {Uint8Array} [glyphColors] - List holding each glyph's [r, g, b] color, if `colorRanges` was supplied.\n * @property {Float32Array} [caretPositions] - A list of caret positions for all characters in the string; each is\n * three elements: the starting X, the ending X, and the bottom Y for the caret.\n * @property {number} [caretHeight] - An appropriate height for all selection carets.\n * @property {number} ascender - The font's ascender metric.\n * @property {number} descender - The font's descender metric.\n * @property {number} capHeight - The font's cap height metric, based on the height of Latin capital letters.\n * @property {number} xHeight - The font's x height metric, based on the height of Latin lowercase letters.\n * @property {number} lineHeight - The final computed lineHeight measurement.\n * @property {number} topBaseline - The y position of the top line's baseline.\n * @property {Array} blockBounds - The total [minX, minY, maxX, maxY] rect of the whole text block;\n * this can include extra vertical space beyond the visible glyphs due to lineHeight, and is\n * equivalent to the dimensions of a block-level text element in CSS.\n * @property {Array} visibleBounds - The total [minX, minY, maxX, maxY] rect of the whole text block;\n * unlike `blockBounds` this is tightly wrapped to the visible glyph paths.\n * @property {Array} chunkedBounds - List of bounding rects for each consecutive set of N glyphs,\n * in the format `{start:N, end:N, rect:[minX, minY, maxX, maxY]}`.\n * @property {object} timings - Timing info for various parts of the rendering logic including SDF\n * generation, typesetting, etc.\n * @frozen\n */\n\n/**\n * @callback getTextRenderInfo~callback\n * @param {TroikaTextRenderInfo} textRenderInfo\n */\n\n/**\n * Main entry point for requesting the data needed to render a text string with given font parameters.\n * This is an asynchronous call, performing most of the logic in a web worker thread.\n * @param {object} args\n * @param {getTextRenderInfo~callback} callback\n */\nfunction getTextRenderInfo(args, callback) {\n hasRequested = true;\n args = assign({}, args);\n const totalStart = now$1();\n\n // Apply default font here to avoid a 'null' atlas, and convert relative\n // URLs to absolute so they can be resolved in the worker\n args.font = toAbsoluteURL(args.font || CONFIG.defaultFontURL);\n\n // Normalize text to a string\n args.text = '' + args.text;\n\n args.sdfGlyphSize = args.sdfGlyphSize || CONFIG.sdfGlyphSize;\n\n // Normalize colors\n if (args.colorRanges != null) {\n let colors = {};\n for (let key in args.colorRanges) {\n if (args.colorRanges.hasOwnProperty(key)) {\n let val = args.colorRanges[key];\n if (typeof val !== 'number') {\n val = tempColor.set(val).getHex();\n }\n colors[key] = val;\n }\n }\n args.colorRanges = colors;\n }\n\n Object.freeze(args);\n\n // Init the atlas if needed\n const {textureWidth, sdfExponent} = CONFIG;\n const {sdfGlyphSize} = args;\n const glyphsPerRow = (textureWidth / sdfGlyphSize * 4);\n let atlas = atlases[sdfGlyphSize];\n if (!atlas) {\n\n let canvas;\n\n if (args.isOffscreen) {\n canvas = new OffscreenCanvas(textureWidth,sdfGlyphSize * 256 / glyphsPerRow);\n } else {\n canvas = document.createElement('canvas');\n }\n\n canvas.width = textureWidth;\n canvas.height = sdfGlyphSize * 256 / glyphsPerRow; // start tall enough to fit 256 glyphs\n atlas = atlases[sdfGlyphSize] = {\n glyphCount: 0,\n sdfGlyphSize,\n sdfCanvas: canvas,\n sdfTexture: new Texture(\n canvas,\n undefined,\n undefined,\n undefined,\n LinearFilter,\n LinearFilter\n ),\n contextLost: false,\n glyphsByFont: new Map()\n };\n atlas.sdfTexture.generateMipmaps = false;\n initContextLossHandling(atlas);\n }\n\n const {sdfTexture, sdfCanvas} = atlas;\n let fontGlyphs = atlas.glyphsByFont.get(args.font);\n if (!fontGlyphs) {\n atlas.glyphsByFont.set(args.font, fontGlyphs = new Map());\n }\n\n // Issue request to the typesetting engine in the worker\n typesetInWorker(args).then(result => {\n const {glyphIds, glyphPositions, fontSize, unitsPerEm, timings} = result;\n const neededSDFs = [];\n const glyphBounds = new Float32Array(glyphIds.length * 4);\n const fontSizeMult = fontSize / unitsPerEm;\n let boundsIdx = 0;\n let positionsIdx = 0;\n const quadsStart = now$1();\n glyphIds.forEach((glyphId, i) => {\n let glyphInfo = fontGlyphs.get(glyphId);\n\n // If this is a glyphId not seen before, add it to the atlas\n if (!glyphInfo) {\n const {path, pathBounds} = result.glyphData[glyphId];\n\n // Margin around path edges in SDF, based on a percentage of the glyph's max dimension.\n // Note we add an extra 0.5 px over the configured value because the outer 0.5 doesn't contain\n // useful interpolated values and will be ignored anyway.\n const fontUnitsMargin = Math.max(pathBounds[2] - pathBounds[0], pathBounds[3] - pathBounds[1])\n / sdfGlyphSize * (CONFIG.sdfMargin * sdfGlyphSize + 0.5);\n\n const atlasIndex = atlas.glyphCount++;\n const sdfViewBox = [\n pathBounds[0] - fontUnitsMargin,\n pathBounds[1] - fontUnitsMargin,\n pathBounds[2] + fontUnitsMargin,\n pathBounds[3] + fontUnitsMargin,\n ];\n fontGlyphs.set(glyphId, (glyphInfo = { path, atlasIndex, sdfViewBox }));\n\n // Collect those that need SDF generation\n neededSDFs.push(glyphInfo);\n }\n\n // Calculate bounds for renderable quads\n // TODO can we get this back off the main thread?\n const {sdfViewBox} = glyphInfo;\n const posX = glyphPositions[positionsIdx++];\n const posY = glyphPositions[positionsIdx++];\n glyphBounds[boundsIdx++] = posX + sdfViewBox[0] * fontSizeMult;\n glyphBounds[boundsIdx++] = posY + sdfViewBox[1] * fontSizeMult;\n glyphBounds[boundsIdx++] = posX + sdfViewBox[2] * fontSizeMult;\n glyphBounds[boundsIdx++] = posY + sdfViewBox[3] * fontSizeMult;\n\n // Convert glyphId to SDF index for the shader\n glyphIds[i] = glyphInfo.atlasIndex;\n });\n timings.quads = (timings.quads || 0) + (now$1() - quadsStart);\n\n const sdfStart = now$1();\n timings.sdf = {};\n\n // Grow the texture height by power of 2 if needed\n const currentHeight = sdfCanvas.height;\n const neededRows = Math.ceil(atlas.glyphCount / glyphsPerRow);\n const neededHeight = Math.pow(2, Math.ceil(Math.log2(neededRows * sdfGlyphSize)));\n if (neededHeight > currentHeight) {\n // Since resizing the canvas clears its render buffer, it needs special handling to copy the old contents over\n console.info(`Increasing SDF texture size ${currentHeight}->${neededHeight}`);\n resizeWebGLCanvasWithoutClearing(sdfCanvas, textureWidth, neededHeight);\n // As of Three r136 textures cannot be resized once they're allocated on the GPU, we must dispose to reallocate it\n sdfTexture.dispose();\n }\n\n Promise.all(neededSDFs.map(glyphInfo =>\n generateGlyphSDF(glyphInfo, atlas, args.gpuAccelerateSDF).then(({timing}) => {\n timings.sdf[glyphInfo.atlasIndex] = timing;\n })\n )).then(() => {\n if (neededSDFs.length && !atlas.contextLost) {\n safariPre15Workaround(atlas);\n sdfTexture.needsUpdate = true;\n }\n timings.sdfTotal = now$1() - sdfStart;\n timings.total = now$1() - totalStart;\n // console.log(`SDF - ${timings.sdfTotal}, Total - ${timings.total - timings.fontLoad}`)\n\n // Invoke callback with the text layout arrays and updated texture\n callback(Object.freeze({\n parameters: args,\n sdfTexture,\n sdfGlyphSize,\n sdfExponent,\n glyphBounds,\n glyphAtlasIndices: glyphIds,\n glyphColors: result.glyphColors,\n caretPositions: result.caretPositions,\n caretHeight: result.caretHeight,\n chunkedBounds: result.chunkedBounds,\n ascender: result.ascender,\n descender: result.descender,\n lineHeight: result.lineHeight,\n capHeight: result.capHeight,\n xHeight: result.xHeight,\n topBaseline: result.topBaseline,\n blockBounds: result.blockBounds,\n visibleBounds: result.visibleBounds,\n timings: result.timings,\n }));\n });\n });\n\n // While the typesetting request is being handled, go ahead and make sure the atlas canvas context is\n // \"warmed up\"; the first request will be the longest due to shader program compilation so this gets\n // a head start on that process before SDFs actually start getting processed.\n Promise.resolve().then(() => {\n if (!atlas.contextLost) {\n warmUpSDFCanvas(sdfCanvas);\n }\n });\n}\n\nfunction generateGlyphSDF({path, atlasIndex, sdfViewBox}, {sdfGlyphSize, sdfCanvas, contextLost}, useGPU) {\n if (contextLost) {\n // If the context is lost there's nothing we can do, just quit silently and let it\n // get regenerated when the context is restored\n return Promise.resolve({timing: -1})\n }\n const {textureWidth, sdfExponent} = CONFIG;\n const maxDist = Math.max(sdfViewBox[2] - sdfViewBox[0], sdfViewBox[3] - sdfViewBox[1]);\n const squareIndex = Math.floor(atlasIndex / 4);\n const x = squareIndex % (textureWidth / sdfGlyphSize) * sdfGlyphSize;\n const y = Math.floor(squareIndex / (textureWidth / sdfGlyphSize)) * sdfGlyphSize;\n const channel = atlasIndex % 4;\n return generateSDF(sdfGlyphSize, sdfGlyphSize, path, sdfViewBox, maxDist, sdfExponent, sdfCanvas, x, y, channel, useGPU)\n}\n\nfunction initContextLossHandling(atlas) {\n const canvas = atlas.sdfCanvas;\n\n /*\n // Begin context loss simulation\n if (!window.WebGLDebugUtils) {\n let script = document.getElementById('WebGLDebugUtilsScript')\n if (!script) {\n script = document.createElement('script')\n script.id = 'WebGLDebugUtils'\n document.head.appendChild(script)\n script.src = 'https://cdn.jsdelivr.net/gh/KhronosGroup/WebGLDeveloperTools@b42e702/src/debug/webgl-debug.js'\n }\n script.addEventListener('load', () => {\n initContextLossHandling(atlas)\n })\n return\n }\n window.WebGLDebugUtils.makeLostContextSimulatingCanvas(canvas)\n canvas.loseContextInNCalls(500)\n canvas.addEventListener('webglcontextrestored', (event) => {\n canvas.loseContextInNCalls(5000)\n })\n // End context loss simulation\n */\n\n canvas.addEventListener('webglcontextlost', (event) => {\n console.log('Context Lost', event);\n event.preventDefault();\n atlas.contextLost = true;\n });\n canvas.addEventListener('webglcontextrestored', (event) => {\n console.log('Context Restored', event);\n atlas.contextLost = false;\n // Regenerate all glyphs into the restored canvas:\n const promises = [];\n atlas.glyphsByFont.forEach(glyphMap => {\n glyphMap.forEach(glyph => {\n promises.push(generateGlyphSDF(glyph, atlas, true));\n });\n });\n Promise.all(promises).then(() => {\n safariPre15Workaround(atlas);\n atlas.sdfTexture.needsUpdate = true;\n });\n });\n}\n\n/**\n * Preload a given font and optionally pre-generate glyph SDFs for one or more character sequences.\n * This can be useful to avoid long pauses when first showing text in a scene, by preloading the\n * needed fonts and glyphs up front along with other assets.\n *\n * @param {object} options\n * @param {string} options.font - URL of the font file to preload. If not given, the default font will\n * be loaded.\n * @param {string|string[]} options.characters - One or more character sequences for which to pre-\n * generate glyph SDFs. Note that this will honor ligature substitution, so you may need\n * to specify ligature sequences in addition to their individual characters to get all\n * possible glyphs, e.g. `[\"t\", \"h\", \"th\"]` to get the \"t\" and \"h\" glyphs plus the \"th\" ligature.\n * @param {number} options.sdfGlyphSize - The size at which to prerender the SDF textures for the\n * specified `characters`.\n * @param {function} callback - A function that will be called when the preloading is complete.\n */\nfunction preloadFont({font, characters, sdfGlyphSize}, callback) {\n let text = Array.isArray(characters) ? characters.join('\\n') : '' + characters;\n getTextRenderInfo({ font, sdfGlyphSize, text }, callback);\n}\n\n\n// Local assign impl so we don't have to import troika-core\nfunction assign(toObj, fromObj) {\n for (let key in fromObj) {\n if (fromObj.hasOwnProperty(key)) {\n toObj[key] = fromObj[key];\n }\n }\n return toObj\n}\n\n// Utility for making URLs absolute\nlet linkEl;\nfunction toAbsoluteURL(path) {\n if (!linkEl) {\n linkEl = typeof document === 'undefined' ? {} : document.createElement('a');\n }\n linkEl.href = path;\n return linkEl.href\n}\n\n/**\n * Safari < v15 seems unable to use the SDF webgl canvas as a texture. This applies a workaround\n * where it reads the pixels out of that canvas and uploads them as a data texture instead, at\n * a slight performance cost.\n */\nfunction safariPre15Workaround(atlas) {\n // Use createImageBitmap support as a proxy for Safari<15, all other mainstream browsers\n // have supported it for a long while so any false positives should be minimal.\n if (typeof createImageBitmap !== 'function') {\n console.info('Safari<15: applying SDF canvas workaround');\n const {sdfCanvas, sdfTexture} = atlas;\n const {width, height} = sdfCanvas;\n const gl = atlas.sdfCanvas.getContext('webgl');\n let pixels = sdfTexture.image.data;\n if (!pixels || pixels.length !== width * height * 4) {\n pixels = new Uint8Array(width * height * 4);\n sdfTexture.image = {width, height, data: pixels};\n sdfTexture.flipY = false;\n sdfTexture.isDataTexture = true;\n }\n gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\n }\n}\n\n\nconst typesetterWorkerModule = /*#__PURE__*/defineWorkerModule({\n name: 'Typesetter',\n dependencies: [\n CONFIG,\n workerModule,\n createTypesetter,\n bidiFactory\n ],\n init(config, fontParser, createTypesetter, bidiFactory) {\n const {defaultFontURL} = config;\n return createTypesetter(fontParser, bidiFactory(), { defaultFontURL })\n }\n});\n\nconst typesetInWorker = /*#__PURE__*/defineWorkerModule({\n name: 'Typesetter',\n dependencies: [\n typesetterWorkerModule,\n ],\n init(typesetter) {\n return function(args) {\n return new Promise(resolve => {\n typesetter.typeset(args, resolve);\n })\n }\n },\n getTransferables(result) {\n // Mark array buffers as transferable to avoid cloning during postMessage\n const transferables = [\n result.glyphPositions.buffer,\n result.glyphIds.buffer\n ];\n if (result.caretPositions) {\n transferables.push(result.caretPositions.buffer);\n }\n if (result.glyphColors) {\n transferables.push(result.glyphColors.buffer);\n }\n return transferables\n }\n});\n\nfunction dumpSDFTextures() {\n Object.keys(atlases).forEach(size => {\n const canvas = atlases[size].sdfCanvas;\n const {width, height} = canvas;\n console.log(\"%c.\", `\n background: url(${canvas.toDataURL()});\n background-size: ${width}px ${height}px;\n color: transparent;\n font-size: 0;\n line-height: ${height}px;\n padding-left: ${width}px;\n `);\n });\n}\n\nconst templateGeometries = {};\n\nfunction getTemplateGeometry(detail) {\n let geom = templateGeometries[detail];\n if (!geom) {\n // Geometry is two planes back-to-back, which will always be rendered FrontSide only but\n // appear as DoubleSide by default. FrontSide/BackSide are emulated using drawRange.\n // We do it this way to avoid the performance hit of two draw calls for DoubleSide materials\n // introduced by Three.js in r130 - see https://github.com/mrdoob/three.js/pull/21967\n const front = new PlaneGeometry(1, 1, detail, detail);\n const back = front.clone();\n const frontAttrs = front.attributes;\n const backAttrs = back.attributes;\n const combined = new BufferGeometry();\n const vertCount = frontAttrs.uv.count;\n for (let i = 0; i < vertCount; i++) {\n backAttrs.position.array[i * 3] *= -1; // flip position x\n backAttrs.normal.array[i * 3 + 2] *= -1; // flip normal z\n }\n ['position', 'normal', 'uv'].forEach(name => {\n combined.setAttribute(name, new Float32BufferAttribute(\n [...frontAttrs[name].array, ...backAttrs[name].array],\n frontAttrs[name].itemSize)\n );\n });\n combined.setIndex([...front.index.array, ...back.index.array.map(n => n + vertCount)]);\n combined.translate(0.5, 0.5, 0);\n geom = templateGeometries[detail] = combined;\n }\n return geom\n}\n\nconst glyphBoundsAttrName = 'aTroikaGlyphBounds';\nconst glyphIndexAttrName = 'aTroikaGlyphIndex';\nconst glyphColorAttrName = 'aTroikaGlyphColor';\n\n/**\n @class GlyphsGeometry\n\n A specialized Geometry for rendering a set of text glyphs. Uses InstancedBufferGeometry to\n render the glyphs using GPU instancing of a single quad, rather than constructing a whole\n geometry with vertices, for much smaller attribute arraybuffers according to this math:\n\n Where N = number of glyphs...\n\n Instanced:\n - position: 4 * 3\n - index: 2 * 3\n - normal: 4 * 3\n - uv: 4 * 2\n - glyph x/y bounds: N * 4\n - glyph indices: N * 1\n = 5N + 38\n\n Non-instanced:\n - position: N * 4 * 3\n - index: N * 2 * 3\n - normal: N * 4 * 3\n - uv: N * 4 * 2\n - glyph indices: N * 1\n = 39N\n\n A downside of this is the rare-but-possible lack of the instanced arrays extension,\n which we could potentially work around with a fallback non-instanced implementation.\n\n */\nclass GlyphsGeometry extends InstancedBufferGeometry {\n constructor() {\n super();\n\n this.detail = 1;\n this.curveRadius = 0;\n\n // Define groups for rendering text outline as a separate pass; these will only\n // be used when the `material` getter returns an array, i.e. outlineWidth > 0.\n this.groups = [\n {start: 0, count: Infinity, materialIndex: 0},\n {start: 0, count: Infinity, materialIndex: 1}\n ];\n\n // Preallocate empty bounding objects\n this.boundingSphere = new Sphere();\n this.boundingBox = new Box3();\n }\n\n computeBoundingSphere () {\n // No-op; we'll sync the boundingSphere proactively when needed.\n }\n\n computeBoundingBox() {\n // No-op; we'll sync the boundingBox proactively when needed.\n }\n\n // Since our base geometry contains triangles for both front and back sides, we can emulate\n // the \"side\" by restricting the draw range.\n setSide(side) {\n const verts = this.getIndex().count;\n this.setDrawRange(side === BackSide ? verts / 2 : 0, side === DoubleSide ? verts : verts / 2);\n }\n\n set detail(detail) {\n if (detail !== this._detail) {\n this._detail = detail;\n if (typeof detail !== 'number' || detail < 1) {\n detail = 1;\n }\n let tpl = getTemplateGeometry(detail)\n ;['position', 'normal', 'uv'].forEach(attr => {\n this.attributes[attr] = tpl.attributes[attr].clone();\n });\n this.setIndex(tpl.getIndex().clone());\n }\n }\n get detail() {\n return this._detail\n }\n\n set curveRadius(r) {\n if (r !== this._curveRadius) {\n this._curveRadius = r;\n this._updateBounds();\n }\n }\n get curveRadius() {\n return this._curveRadius\n }\n\n /**\n * Update the geometry for a new set of glyphs.\n * @param {Float32Array} glyphBounds - An array holding the planar bounds for all glyphs\n * to be rendered, 4 entries for each glyph: x1,x2,y1,y1\n * @param {Float32Array} glyphAtlasIndices - An array holding the index of each glyph within\n * the SDF atlas texture.\n * @param {Array} blockBounds - An array holding the [minX, minY, maxX, maxY] across all glyphs\n * @param {Array} [chunkedBounds] - An array of objects describing bounds for each chunk of N\n * consecutive glyphs: `{start:N, end:N, rect:[minX, minY, maxX, maxY]}`. This can be\n * used with `applyClipRect` to choose an optimized `instanceCount`.\n * @param {Uint8Array} [glyphColors] - An array holding r,g,b values for each glyph.\n */\n updateGlyphs(glyphBounds, glyphAtlasIndices, blockBounds, chunkedBounds, glyphColors) {\n // Update the instance attributes\n updateBufferAttr(this, glyphBoundsAttrName, glyphBounds, 4);\n updateBufferAttr(this, glyphIndexAttrName, glyphAtlasIndices, 1);\n updateBufferAttr(this, glyphColorAttrName, glyphColors, 3);\n this._blockBounds = blockBounds;\n this._chunkedBounds = chunkedBounds;\n this.instanceCount = glyphAtlasIndices.length;\n this._updateBounds();\n }\n\n _updateBounds() {\n const bounds = this._blockBounds;\n if (bounds) {\n const { curveRadius, boundingBox: bbox } = this;\n if (curveRadius) {\n const { PI, floor, min, max, sin, cos } = Math;\n const halfPi = PI / 2;\n const twoPi = PI * 2;\n const absR = Math.abs(curveRadius);\n const leftAngle = bounds[0] / absR;\n const rightAngle = bounds[2] / absR;\n const minX = floor((leftAngle + halfPi) / twoPi) !== floor((rightAngle + halfPi) / twoPi)\n ? -absR : min(sin(leftAngle) * absR, sin(rightAngle) * absR);\n const maxX = floor((leftAngle - halfPi) / twoPi) !== floor((rightAngle - halfPi) / twoPi)\n ? absR : max(sin(leftAngle) * absR, sin(rightAngle) * absR);\n const maxZ = floor((leftAngle + PI) / twoPi) !== floor((rightAngle + PI) / twoPi)\n ? absR * 2 : max(absR - cos(leftAngle) * absR, absR - cos(rightAngle) * absR);\n bbox.min.set(minX, bounds[1], curveRadius < 0 ? -maxZ : 0);\n bbox.max.set(maxX, bounds[3], curveRadius < 0 ? 0 : maxZ);\n } else {\n bbox.min.set(bounds[0], bounds[1], 0);\n bbox.max.set(bounds[2], bounds[3], 0);\n }\n bbox.getBoundingSphere(this.boundingSphere);\n }\n }\n\n /**\n * Given a clipping rect, and the chunkedBounds from the last updateGlyphs call, choose the lowest\n * `instanceCount` that will show all glyphs within the clipped view. This is an optimization\n * for long blocks of text that are clipped, to skip vertex shader evaluation for glyphs that would\n * be clipped anyway.\n *\n * Note that since `drawElementsInstanced[ANGLE]` only accepts an instance count and not a starting\n * offset, this optimization becomes less effective as the clipRect moves closer to the end of the\n * text block. We could fix that by switching from instancing to a full geometry with a drawRange,\n * but at the expense of much larger attribute buffers (see classdoc above.)\n *\n * @param {Vector4} clipRect\n */\n applyClipRect(clipRect) {\n let count = this.getAttribute(glyphIndexAttrName).count;\n let chunks = this._chunkedBounds;\n if (chunks) {\n for (let i = chunks.length; i--;) {\n count = chunks[i].end;\n let rect = chunks[i].rect;\n // note: both rects are l-b-r-t\n if (rect[1] < clipRect.w && rect[3] > clipRect.y && rect[0] < clipRect.z && rect[2] > clipRect.x) {\n break\n }\n }\n }\n this.instanceCount = count;\n }\n}\n\n\nfunction updateBufferAttr(geom, attrName, newArray, itemSize) {\n const attr = geom.getAttribute(attrName);\n if (newArray) {\n // If length isn't changing, just update the attribute's array data\n if (attr && attr.array.length === newArray.length) {\n attr.array.set(newArray);\n attr.needsUpdate = true;\n } else {\n geom.setAttribute(attrName, new InstancedBufferAttribute(newArray, itemSize));\n // If the new attribute has a different size, we also have to (as of r117) manually clear the\n // internal cached max instance count. See https://github.com/mrdoob/three.js/issues/19706\n // It's unclear if this is a threejs bug or a truly unsupported scenario; discussion in\n // that ticket is ambiguous as to whether replacing a BufferAttribute with one of a\n // different size is supported, but https://github.com/mrdoob/three.js/pull/17418 strongly\n // implies it should be supported. It's possible we need to\n delete geom._maxInstanceCount; //for r117+, could be fragile\n geom.dispose(); //for r118+, more robust feeling, but more heavy-handed than I'd like\n }\n } else if (attr) {\n geom.deleteAttribute(attrName);\n }\n}\n\n// language=GLSL\nconst VERTEX_DEFS = `\nuniform vec2 uTroikaSDFTextureSize;\nuniform float uTroikaSDFGlyphSize;\nuniform vec4 uTroikaTotalBounds;\nuniform vec4 uTroikaClipRect;\nuniform mat3 uTroikaOrient;\nuniform bool uTroikaUseGlyphColors;\nuniform float uTroikaDistanceOffset;\nuniform float uTroikaBlurRadius;\nuniform vec2 uTroikaPositionOffset;\nuniform float uTroikaCurveRadius;\nattribute vec4 aTroikaGlyphBounds;\nattribute float aTroikaGlyphIndex;\nattribute vec3 aTroikaGlyphColor;\nvarying vec2 vTroikaGlyphUV;\nvarying vec4 vTroikaTextureUVBounds;\nvarying float vTroikaTextureChannel;\nvarying vec3 vTroikaGlyphColor;\nvarying vec2 vTroikaGlyphDimensions;\n`;\n\n// language=GLSL prefix=\"void main() {\" suffix=\"}\"\nconst VERTEX_TRANSFORM = `\nvec4 bounds = aTroikaGlyphBounds;\nbounds.xz += uTroikaPositionOffset.x;\nbounds.yw -= uTroikaPositionOffset.y;\n\nvec4 outlineBounds = vec4(\n bounds.xy - uTroikaDistanceOffset - uTroikaBlurRadius,\n bounds.zw + uTroikaDistanceOffset + uTroikaBlurRadius\n);\nvec4 clippedBounds = vec4(\n clamp(outlineBounds.xy, uTroikaClipRect.xy, uTroikaClipRect.zw),\n clamp(outlineBounds.zw, uTroikaClipRect.xy, uTroikaClipRect.zw)\n);\n\nvec2 clippedXY = (mix(clippedBounds.xy, clippedBounds.zw, position.xy) - bounds.xy) / (bounds.zw - bounds.xy);\n\nposition.xy = mix(bounds.xy, bounds.zw, clippedXY);\n\nuv = (position.xy - uTroikaTotalBounds.xy) / (uTroikaTotalBounds.zw - uTroikaTotalBounds.xy);\n\nfloat rad = uTroikaCurveRadius;\nif (rad != 0.0) {\n float angle = position.x / rad;\n position.xz = vec2(sin(angle) * rad, rad - cos(angle) * rad);\n normal.xz = vec2(sin(angle), cos(angle));\n}\n \nposition = uTroikaOrient * position;\nnormal = uTroikaOrient * normal;\n\nvTroikaGlyphUV = clippedXY.xy;\nvTroikaGlyphDimensions = vec2(bounds[2] - bounds[0], bounds[3] - bounds[1]);\n\n${''/* NOTE: it seems important to calculate the glyph's bounding texture UVs here in the\n vertex shader, rather than in the fragment shader, as the latter gives strange artifacts\n on some glyphs (those in the leftmost texture column) on some systems. The exact reason\n isn't understood but doing this here, then mix()-ing in the fragment shader, seems to work. */}\nfloat txCols = uTroikaSDFTextureSize.x / uTroikaSDFGlyphSize;\nvec2 txUvPerSquare = uTroikaSDFGlyphSize / uTroikaSDFTextureSize;\nvec2 txStartUV = txUvPerSquare * vec2(\n mod(floor(aTroikaGlyphIndex / 4.0), txCols),\n floor(floor(aTroikaGlyphIndex / 4.0) / txCols)\n);\nvTroikaTextureUVBounds = vec4(txStartUV, vec2(txStartUV) + txUvPerSquare);\nvTroikaTextureChannel = mod(aTroikaGlyphIndex, 4.0);\n`;\n\n// language=GLSL\nconst FRAGMENT_DEFS = `\nuniform sampler2D uTroikaSDFTexture;\nuniform vec2 uTroikaSDFTextureSize;\nuniform float uTroikaSDFGlyphSize;\nuniform float uTroikaSDFExponent;\nuniform float uTroikaDistanceOffset;\nuniform float uTroikaFillOpacity;\nuniform float uTroikaOutlineOpacity;\nuniform float uTroikaBlurRadius;\nuniform vec3 uTroikaStrokeColor;\nuniform float uTroikaStrokeWidth;\nuniform float uTroikaStrokeOpacity;\nuniform bool uTroikaSDFDebug;\nvarying vec2 vTroikaGlyphUV;\nvarying vec4 vTroikaTextureUVBounds;\nvarying float vTroikaTextureChannel;\nvarying vec2 vTroikaGlyphDimensions;\n\nfloat troikaSdfValueToSignedDistance(float alpha) {\n // Inverse of exponential encoding in webgl-sdf-generator\n ${''/* TODO - there's some slight inaccuracy here when dealing with interpolated alpha values; those\n are linearly interpolated where the encoding is exponential. Look into improving this by rounding\n to nearest 2 whole texels, decoding those exponential values, and linearly interpolating the result.\n */}\n float maxDimension = max(vTroikaGlyphDimensions.x, vTroikaGlyphDimensions.y);\n float absDist = (1.0 - pow(2.0 * (alpha > 0.5 ? 1.0 - alpha : alpha), 1.0 / uTroikaSDFExponent)) * maxDimension;\n float signedDist = absDist * (alpha > 0.5 ? -1.0 : 1.0);\n return signedDist;\n}\n\nfloat troikaGlyphUvToSdfValue(vec2 glyphUV) {\n vec2 textureUV = mix(vTroikaTextureUVBounds.xy, vTroikaTextureUVBounds.zw, glyphUV);\n vec4 rgba = texture2D(uTroikaSDFTexture, textureUV);\n float ch = floor(vTroikaTextureChannel + 0.5); //NOTE: can't use round() in WebGL1\n return ch == 0.0 ? rgba.r : ch == 1.0 ? rgba.g : ch == 2.0 ? rgba.b : rgba.a;\n}\n\nfloat troikaGlyphUvToDistance(vec2 uv) {\n return troikaSdfValueToSignedDistance(troikaGlyphUvToSdfValue(uv));\n}\n\nfloat troikaGetAADist() {\n ${''/*\n When the standard derivatives extension is available, we choose an antialiasing alpha threshold based\n on the potential change in the SDF's alpha from this fragment to its neighbor. This strategy maximizes \n readability and edge crispness at all sizes and screen resolutions.\n */}\n #if defined(GL_OES_standard_derivatives) || __VERSION__ >= 300\n return length(fwidth(vTroikaGlyphUV * vTroikaGlyphDimensions)) * 0.5;\n #else\n return vTroikaGlyphDimensions.x / 64.0;\n #endif\n}\n\nfloat troikaGetFragDistValue() {\n vec2 clampedGlyphUV = clamp(vTroikaGlyphUV, 0.5 / uTroikaSDFGlyphSize, 1.0 - 0.5 / uTroikaSDFGlyphSize);\n float distance = troikaGlyphUvToDistance(clampedGlyphUV);\n \n // Extrapolate distance when outside bounds:\n distance += clampedGlyphUV == vTroikaGlyphUV ? 0.0 : \n length((vTroikaGlyphUV - clampedGlyphUV) * vTroikaGlyphDimensions);\n\n ${''/* \n // TODO more refined extrapolated distance by adjusting for angle of gradient at edge...\n // This has potential but currently gives very jagged extensions, maybe due to precision issues?\n float uvStep = 1.0 / uTroikaSDFGlyphSize;\n vec2 neighbor1UV = clampedGlyphUV + (\n vTroikaGlyphUV.x != clampedGlyphUV.x ? vec2(0.0, uvStep * sign(0.5 - vTroikaGlyphUV.y)) :\n vTroikaGlyphUV.y != clampedGlyphUV.y ? vec2(uvStep * sign(0.5 - vTroikaGlyphUV.x), 0.0) :\n vec2(0.0)\n );\n vec2 neighbor2UV = clampedGlyphUV + (\n vTroikaGlyphUV.x != clampedGlyphUV.x ? vec2(0.0, uvStep * -sign(0.5 - vTroikaGlyphUV.y)) :\n vTroikaGlyphUV.y != clampedGlyphUV.y ? vec2(uvStep * -sign(0.5 - vTroikaGlyphUV.x), 0.0) :\n vec2(0.0)\n );\n float neighbor1Distance = troikaGlyphUvToDistance(neighbor1UV);\n float neighbor2Distance = troikaGlyphUvToDistance(neighbor2UV);\n float distToUnclamped = length((vTroikaGlyphUV - clampedGlyphUV) * vTroikaGlyphDimensions);\n float distToNeighbor = length((clampedGlyphUV - neighbor1UV) * vTroikaGlyphDimensions);\n float gradientAngle1 = min(asin(abs(neighbor1Distance - distance) / distToNeighbor), PI / 2.0);\n float gradientAngle2 = min(asin(abs(neighbor2Distance - distance) / distToNeighbor), PI / 2.0);\n distance += (cos(gradientAngle1) + cos(gradientAngle2)) / 2.0 * distToUnclamped;\n */}\n\n return distance;\n}\n\nfloat troikaGetEdgeAlpha(float distance, float distanceOffset, float aaDist) {\n #if defined(IS_DEPTH_MATERIAL) || defined(IS_DISTANCE_MATERIAL)\n float alpha = step(-distanceOffset, -distance);\n #else\n\n float alpha = smoothstep(\n distanceOffset + aaDist,\n distanceOffset - aaDist,\n distance\n );\n #endif\n\n return alpha;\n}\n`;\n\n// language=GLSL prefix=\"void main() {\" suffix=\"}\"\nconst FRAGMENT_TRANSFORM = `\nfloat aaDist = troikaGetAADist();\nfloat fragDistance = troikaGetFragDistValue();\nfloat edgeAlpha = uTroikaSDFDebug ?\n troikaGlyphUvToSdfValue(vTroikaGlyphUV) :\n troikaGetEdgeAlpha(fragDistance, uTroikaDistanceOffset, max(aaDist, uTroikaBlurRadius));\n\n#if !defined(IS_DEPTH_MATERIAL) && !defined(IS_DISTANCE_MATERIAL)\nvec4 fillRGBA = gl_FragColor;\nfillRGBA.a *= uTroikaFillOpacity;\nvec4 strokeRGBA = uTroikaStrokeWidth == 0.0 ? fillRGBA : vec4(uTroikaStrokeColor, uTroikaStrokeOpacity);\nif (fillRGBA.a == 0.0) fillRGBA.rgb = strokeRGBA.rgb;\ngl_FragColor = mix(fillRGBA, strokeRGBA, smoothstep(\n -uTroikaStrokeWidth - aaDist,\n -uTroikaStrokeWidth + aaDist,\n fragDistance\n));\ngl_FragColor.a *= edgeAlpha;\n#endif\n\nif (edgeAlpha == 0.0) {\n discard;\n}\n`;\n\n\n/**\n * Create a material for rendering text, derived from a baseMaterial\n */\nfunction createTextDerivedMaterial(baseMaterial) {\n const textMaterial = createDerivedMaterial(baseMaterial, {\n chained: true,\n extensions: {\n derivatives: true\n },\n uniforms: {\n uTroikaSDFTexture: {value: null},\n uTroikaSDFTextureSize: {value: new Vector2()},\n uTroikaSDFGlyphSize: {value: 0},\n uTroikaSDFExponent: {value: 0},\n uTroikaTotalBounds: {value: new Vector4(0,0,0,0)},\n uTroikaClipRect: {value: new Vector4(0,0,0,0)},\n uTroikaDistanceOffset: {value: 0},\n uTroikaOutlineOpacity: {value: 0},\n uTroikaFillOpacity: {value: 1},\n uTroikaPositionOffset: {value: new Vector2()},\n uTroikaCurveRadius: {value: 0},\n uTroikaBlurRadius: {value: 0},\n uTroikaStrokeWidth: {value: 0},\n uTroikaStrokeColor: {value: new Color()},\n uTroikaStrokeOpacity: {value: 1},\n uTroikaOrient: {value: new Matrix3()},\n uTroikaUseGlyphColors: {value: true},\n uTroikaSDFDebug: {value: false}\n },\n vertexDefs: VERTEX_DEFS,\n vertexTransform: VERTEX_TRANSFORM,\n fragmentDefs: FRAGMENT_DEFS,\n fragmentColorTransform: FRAGMENT_TRANSFORM,\n customRewriter({vertexShader, fragmentShader}) {\n let uDiffuseRE = /\\buniform\\s+vec3\\s+diffuse\\b/;\n if (uDiffuseRE.test(fragmentShader)) {\n // Replace all instances of `diffuse` with our varying\n fragmentShader = fragmentShader\n .replace(uDiffuseRE, 'varying vec3 vTroikaGlyphColor')\n .replace(/\\bdiffuse\\b/g, 'vTroikaGlyphColor');\n // Make sure the vertex shader declares the uniform so we can grab it as a fallback\n if (!uDiffuseRE.test(vertexShader)) {\n vertexShader = vertexShader.replace(\n voidMainRegExp,\n 'uniform vec3 diffuse;\\n$&\\nvTroikaGlyphColor = uTroikaUseGlyphColors ? aTroikaGlyphColor / 255.0 : diffuse;\\n'\n );\n }\n }\n return { vertexShader, fragmentShader }\n }\n });\n\n // Force transparency - TODO is this reasonable?\n textMaterial.transparent = true;\n\n Object.defineProperties(textMaterial, {\n isTroikaTextMaterial: {value: true},\n\n // WebGLShadowMap reverses the side of the shadow material by default, which fails\n // for planes, so here we force the `shadowSide` to always match the main side.\n shadowSide: {\n get() {\n return this.side\n },\n set() {\n //no-op\n }\n }\n });\n\n return textMaterial\n}\n\nconst defaultMaterial = /*#__PURE__*/ new MeshBasicMaterial({\n color: 0xffffff,\n side: DoubleSide,\n transparent: true\n});\nconst defaultStrokeColor = 0x808080;\n\nconst tempMat4 = /*#__PURE__*/ new Matrix4();\nconst tempVec3a = /*#__PURE__*/ new Vector3();\nconst tempVec3b = /*#__PURE__*/ new Vector3();\nconst tempArray = [];\nconst origin = /*#__PURE__*/ new Vector3();\nconst defaultOrient = '+x+y';\n\nfunction first(o) {\n return Array.isArray(o) ? o[0] : o\n}\n\nlet getFlatRaycastMesh = () => {\n const mesh = new Mesh(\n new PlaneGeometry(1, 1),\n defaultMaterial\n );\n getFlatRaycastMesh = () => mesh;\n return mesh\n};\nlet getCurvedRaycastMesh = () => {\n const mesh = new Mesh(\n new PlaneGeometry(1, 1, 32, 1),\n defaultMaterial\n );\n getCurvedRaycastMesh = () => mesh;\n return mesh\n};\n\nconst syncStartEvent = { type: 'syncstart' };\nconst syncCompleteEvent = { type: 'synccomplete' };\n\nconst SYNCABLE_PROPS = [\n 'font',\n 'fontSize',\n 'letterSpacing',\n 'lineHeight',\n 'maxWidth',\n 'overflowWrap',\n 'text',\n 'direction',\n 'textAlign',\n 'textIndent',\n 'whiteSpace',\n 'anchorX',\n 'anchorY',\n 'colorRanges',\n 'sdfGlyphSize'\n];\n\nconst COPYABLE_PROPS = SYNCABLE_PROPS.concat(\n 'material',\n 'color',\n 'depthOffset',\n 'clipRect',\n 'curveRadius',\n 'orientation',\n 'glyphGeometryDetail'\n);\n\n/**\n * @class Text\n *\n * A ThreeJS Mesh that renders a string of text on a plane in 3D space using signed distance\n * fields (SDF).\n */\nclass Text extends Mesh {\n constructor() {\n const geometry = new GlyphsGeometry();\n super(geometry, null);\n\n this.isOffscreen = false;\n\n // === Text layout properties: === //\n\n /**\n * @member {string} text\n * The string of text to be rendered.\n */\n this.text = '';\n\n /**\n * @member {number|string} anchorX\n * Defines the horizontal position in the text block that should line up with the local origin.\n * Can be specified as a numeric x position in local units, a string percentage of the total\n * text block width e.g. `'25%'`, or one of the following keyword strings: 'left', 'center',\n * or 'right'.\n */\n this.anchorX = 0;\n\n /**\n * @member {number|string} anchorX\n * Defines the vertical position in the text block that should line up with the local origin.\n * Can be specified as a numeric y position in local units (note: down is negative y), a string\n * percentage of the total text block height e.g. `'25%'`, or one of the following keyword strings:\n * 'top', 'top-baseline', 'top-cap', 'top-ex', 'middle', 'bottom-baseline', or 'bottom'.\n */\n this.anchorY = 0;\n\n /**\n * @member {number} curveRadius\n * Defines a cylindrical radius along which the text's plane will be curved. Positive numbers put\n * the cylinder's centerline (oriented vertically) that distance in front of the text, for a concave\n * curvature, while negative numbers put it behind the text for a convex curvature. The centerline\n * will be aligned with the text's local origin; you can use `anchorX` to offset it.\n *\n * Since each glyph is by default rendered with a simple quad, each glyph remains a flat plane\n * internally. You can use `glyphGeometryDetail` to add more vertices for curvature inside glyphs.\n */\n this.curveRadius = 0;\n\n /**\n * @member {string} direction\n * Sets the base direction for the text. The default value of \"auto\" will choose a direction based\n * on the text's content according to the bidi spec. A value of \"ltr\" or \"rtl\" will force the direction.\n */\n this.direction = 'auto';\n\n /**\n * @member {string} font\n * URL of a custom font to be used. Font files can be in .ttf, .otf, or .woff (not .woff2) formats.\n * Defaults to the Roboto font loaded from Google Fonts.\n */\n this.font = null; //will use default from TextBuilder\n\n /**\n * @member {number} fontSize\n * The size at which to render the font in local units; corresponds to the em-box height\n * of the chosen `font`.\n */\n this.fontSize = 0.1;\n\n /**\n * @member {number} letterSpacing\n * Sets a uniform adjustment to spacing between letters after kerning is applied. Positive\n * numbers increase spacing and negative numbers decrease it.\n */\n this.letterSpacing = 0;\n\n /**\n * @member {number|string} lineHeight\n * Sets the height of each line of text, as a multiple of the `fontSize`. Defaults to 'normal'\n * which chooses a reasonable height based on the chosen font's ascender/descender metrics.\n */\n this.lineHeight = 'normal';\n\n /**\n * @member {number} maxWidth\n * The maximum width of the text block, above which text may start wrapping according to the\n * `whiteSpace` and `overflowWrap` properties.\n */\n this.maxWidth = Infinity;\n\n /**\n * @member {string} overflowWrap\n * Defines how text wraps if the `whiteSpace` property is `normal`. Can be either `'normal'`\n * to break at whitespace characters, or `'break-word'` to allow breaking within words.\n * Defaults to `'normal'`.\n */\n this.overflowWrap = 'normal';\n\n /**\n * @member {string} textAlign\n * The horizontal alignment of each line of text within the overall text bounding box.\n */\n this.textAlign = 'left';\n\n /**\n * @member {number} textIndent\n * Indentation for the first character of a line; see CSS `text-indent`.\n */\n this.textIndent = 0;\n\n /**\n * @member {string} whiteSpace\n * Defines whether text should wrap when a line reaches the `maxWidth`. Can\n * be either `'normal'` (the default), to allow wrapping according to the `overflowWrap` property,\n * or `'nowrap'` to prevent wrapping. Note that `'normal'` here honors newline characters to\n * manually break lines, making it behave more like `'pre-wrap'` does in CSS.\n */\n this.whiteSpace = 'normal';\n\n\n // === Presentation properties: === //\n\n /**\n * @member {THREE.Material} material\n * Defines a _base_ material to be used when rendering the text. This material will be\n * automatically replaced with a material derived from it, that adds shader code to\n * decrease the alpha for each fragment (pixel) outside the text glyphs, with antialiasing.\n * By default it will derive from a simple white MeshBasicMaterial, but you can use any\n * of the other mesh materials to gain other features like lighting, texture maps, etc.\n *\n * Also see the `color` shortcut property.\n */\n this.material = null;\n\n /**\n * @member {string|number|THREE.Color} color\n * This is a shortcut for setting the `color` of the text's material. You can use this\n * if you don't want to specify a whole custom `material`. Also, if you do use a custom\n * `material`, this color will only be used for this particuar Text instance, even if\n * that same material instance is shared across multiple Text objects.\n */\n this.color = null;\n\n /**\n * @member {object|null} colorRanges\n * WARNING: This API is experimental and may change.\n * This allows more fine-grained control of colors for individual or ranges of characters,\n * taking precedence over the material's `color`. Its format is an Object whose keys each\n * define a starting character index for a range, and whose values are the color for each\n * range. The color value can be a numeric hex color value, a `THREE.Color` object, or\n * any of the strings accepted by `THREE.Color`.\n */\n this.colorRanges = null;\n\n /**\n * @member {number|string} outlineWidth\n * WARNING: This API is experimental and may change.\n * The width of an outline/halo to be drawn around each text glyph using the `outlineColor` and `outlineOpacity`.\n * Can be specified as either an absolute number in local units, or as a percentage string e.g.\n * `\"12%\"` which is treated as a percentage of the `fontSize`. Defaults to `0`, which means\n * no outline will be drawn unless an `outlineOffsetX/Y` or `outlineBlur` is set.\n */\n this.outlineWidth = 0;\n\n /**\n * @member {string|number|THREE.Color} outlineColor\n * WARNING: This API is experimental and may change.\n * The color of the text outline, if `outlineWidth`/`outlineBlur`/`outlineOffsetX/Y` are set.\n * Defaults to black.\n */\n this.outlineColor = 0x000000;\n\n /**\n * @member {number} outlineOpacity\n * WARNING: This API is experimental and may change.\n * The opacity of the outline, if `outlineWidth`/`outlineBlur`/`outlineOffsetX/Y` are set.\n * Defaults to `1`.\n */\n this.outlineOpacity = 1;\n\n /**\n * @member {number|string} outlineBlur\n * WARNING: This API is experimental and may change.\n * A blur radius applied to the outer edge of the text's outline. If the `outlineWidth` is\n * zero, the blur will be applied at the glyph edge, like CSS's `text-shadow` blur radius.\n * Can be specified as either an absolute number in local units, or as a percentage string e.g.\n * `\"12%\"` which is treated as a percentage of the `fontSize`. Defaults to `0`.\n */\n this.outlineBlur = 0;\n\n /**\n * @member {number|string} outlineOffsetX\n * WARNING: This API is experimental and may change.\n * A horizontal offset for the text outline.\n * Can be specified as either an absolute number in local units, or as a percentage string e.g. `\"12%\"`\n * which is treated as a percentage of the `fontSize`. Defaults to `0`.\n */\n this.outlineOffsetX = 0;\n\n /**\n * @member {number|string} outlineOffsetY\n * WARNING: This API is experimental and may change.\n * A vertical offset for the text outline.\n * Can be specified as either an absolute number in local units, or as a percentage string e.g. `\"12%\"`\n * which is treated as a percentage of the `fontSize`. Defaults to `0`.\n */\n this.outlineOffsetY = 0;\n\n /**\n * @member {number|string} strokeWidth\n * WARNING: This API is experimental and may change.\n * The width of an inner stroke drawn inside each text glyph using the `strokeColor` and `strokeOpacity`.\n * Can be specified as either an absolute number in local units, or as a percentage string e.g. `\"12%\"`\n * which is treated as a percentage of the `fontSize`. Defaults to `0`.\n */\n this.strokeWidth = 0;\n\n /**\n * @member {string|number|THREE.Color} strokeColor\n * WARNING: This API is experimental and may change.\n * The color of the text stroke, if `strokeWidth` is greater than zero. Defaults to gray.\n */\n this.strokeColor = defaultStrokeColor;\n\n /**\n * @member {number} strokeOpacity\n * WARNING: This API is experimental and may change.\n * The opacity of the stroke, if `strokeWidth` is greater than zero. Defaults to `1`.\n */\n this.strokeOpacity = 1;\n\n /**\n * @member {number} fillOpacity\n * WARNING: This API is experimental and may change.\n * The opacity of the glyph's fill from 0 to 1. This behaves like the material's `opacity` but allows\n * giving the fill a different opacity than the `strokeOpacity`. A fillOpacity of `0` makes the\n * interior of the glyph invisible, leaving just the `strokeWidth`. Defaults to `1`.\n */\n this.fillOpacity = 1;\n\n /**\n * @member {number} depthOffset\n * This is a shortcut for setting the material's `polygonOffset` and related properties,\n * which can be useful in preventing z-fighting when this text is laid on top of another\n * plane in the scene. Positive numbers are further from the camera, negatives closer.\n */\n this.depthOffset = 0;\n\n /**\n * @member {Array} clipRect\n * If specified, defines a `[minX, minY, maxX, maxY]` of a rectangle outside of which all\n * pixels will be discarded. This can be used for example to clip overflowing text when\n * `whiteSpace='nowrap'`.\n */\n this.clipRect = null;\n\n /**\n * @member {string} orientation\n * Defines the axis plane on which the text should be laid out when the mesh has no extra\n * rotation transform. It is specified as a string with two axes: the horizontal axis with\n * positive pointing right, and the vertical axis with positive pointing up. By default this\n * is '+x+y', meaning the text sits on the xy plane with the text's top toward positive y\n * and facing positive z. A value of '+x-z' would place it on the xz plane with the text's\n * top toward negative z and facing positive y.\n */\n this.orientation = defaultOrient;\n\n /**\n * @member {number} glyphGeometryDetail\n * Controls number of vertical/horizontal segments that make up each glyph's rectangular\n * plane. Defaults to 1. This can be increased to provide more geometrical detail for custom\n * vertex shader effects, for example.\n */\n this.glyphGeometryDetail = 1;\n\n /**\n * @member {number|null} sdfGlyphSize\n * The size of each glyph's SDF (signed distance field) used for rendering. This must be a\n * power-of-two number. Defaults to 64 which is generally a good balance of size and quality\n * for most fonts. Larger sizes can improve the quality of glyph rendering by increasing\n * the sharpness of corners and preventing loss of very thin lines, at the expense of\n * increased memory footprint and longer SDF generation time.\n */\n this.sdfGlyphSize = null;\n\n /**\n * @member {boolean} gpuAccelerateSDF\n * When `true`, the SDF generation process will be GPU-accelerated with WebGL when possible,\n * making it much faster especially for complex glyphs, and falling back to a JavaScript version\n * executed in web workers when support isn't available. It should automatically detect support,\n * but it's still somewhat experimental, so you can set it to `false` to force it to use the JS\n * version if you encounter issues with it.\n */\n this.gpuAccelerateSDF = true;\n\n this.debugSDF = false;\n }\n\n /**\n * Updates the text rendering according to the current text-related configuration properties.\n * This is an async process, so you can pass in a callback function to be executed when it\n * finishes.\n * @param {function} [callback]\n */\n sync(callback) {\n if (this._needsSync) {\n this._needsSync = false;\n\n // If there's another sync still in progress, queue\n if (this._isSyncing) {\n (this._queuedSyncs || (this._queuedSyncs = [])).push(callback);\n } else {\n this._isSyncing = true;\n this.dispatchEvent(syncStartEvent);\n\n getTextRenderInfo({\n isOffscreen: this.isOffscreen,\n text: this.text,\n font: this.font,\n fontSize: this.fontSize || 0.1,\n letterSpacing: this.letterSpacing || 0,\n lineHeight: this.lineHeight || 'normal',\n maxWidth: this.maxWidth,\n direction: this.direction || 'auto',\n textAlign: this.textAlign,\n textIndent: this.textIndent,\n whiteSpace: this.whiteSpace,\n overflowWrap: this.overflowWrap,\n anchorX: this.anchorX,\n anchorY: this.anchorY,\n colorRanges: this.colorRanges,\n includeCaretPositions: true, //TODO parameterize\n sdfGlyphSize: this.sdfGlyphSize,\n gpuAccelerateSDF: this.gpuAccelerateSDF,\n }, textRenderInfo => {\n this._isSyncing = false;\n\n // Save result for later use in onBeforeRender\n this._textRenderInfo = textRenderInfo;\n\n // Update the geometry attributes\n this.geometry.updateGlyphs(\n textRenderInfo.glyphBounds,\n textRenderInfo.glyphAtlasIndices,\n textRenderInfo.blockBounds,\n textRenderInfo.chunkedBounds,\n textRenderInfo.glyphColors\n );\n\n // If we had extra sync requests queued up, kick it off\n const queued = this._queuedSyncs;\n if (queued) {\n this._queuedSyncs = null;\n this._needsSync = true;\n this.sync(() => {\n queued.forEach(fn => fn && fn());\n });\n }\n\n this.dispatchEvent(syncCompleteEvent);\n if (callback) {\n callback();\n }\n });\n }\n }\n }\n\n /**\n * Initiate a sync if needed - note it won't complete until next frame at the\n * earliest so if possible it's a good idea to call sync() manually as soon as\n * all the properties have been set.\n * @override\n */\n onBeforeRender(renderer, scene, camera, geometry, material, group) {\n this.sync();\n\n // This may not always be a text material, e.g. if there's a scene.overrideMaterial present\n if (material.isTroikaTextMaterial) {\n this._prepareForRender(material);\n }\n\n // We need to force the material to FrontSide to avoid the double-draw-call performance hit\n // introduced in Three.js r130: https://github.com/mrdoob/three.js/pull/21967 - The sidedness\n // is instead applied via drawRange in the GlyphsGeometry.\n material._hadOwnSide = material.hasOwnProperty('side');\n this.geometry.setSide(material._actualSide = material.side);\n material.side = FrontSide;\n }\n\n onAfterRender(renderer, scene, camera, geometry, material, group) {\n // Restore original material side\n if (material._hadOwnSide) {\n material.side = material._actualSide;\n } else {\n delete material.side; // back to inheriting from base material\n }\n }\n\n /**\n * Shortcut to dispose the geometry specific to this instance.\n * Note: we don't also dispose the derived material here because if anything else is\n * sharing the same base material it will result in a pause next frame as the program\n * is recompiled. Instead users can dispose the base material manually, like normal,\n * and we'll also dispose the derived material at that time.\n */\n dispose() {\n this.geometry.dispose();\n }\n\n /**\n * @property {TroikaTextRenderInfo|null} textRenderInfo\n * @readonly\n * The current processed rendering data for this TextMesh, returned by the TextBuilder after\n * a `sync()` call. This will be `null` initially, and may be stale for a short period until\n * the asynchrous `sync()` process completes.\n */\n get textRenderInfo() {\n return this._textRenderInfo || null\n }\n\n // Handler for automatically wrapping the base material with our upgrades. We do the wrapping\n // lazily on _read_ rather than write to avoid unnecessary wrapping on transient values.\n get material() {\n let derivedMaterial = this._derivedMaterial;\n const baseMaterial = this._baseMaterial || this._defaultMaterial || (this._defaultMaterial = defaultMaterial.clone());\n if (!derivedMaterial || derivedMaterial.baseMaterial !== baseMaterial) {\n derivedMaterial = this._derivedMaterial = createTextDerivedMaterial(baseMaterial);\n // dispose the derived material when its base material is disposed:\n baseMaterial.addEventListener('dispose', function onDispose() {\n baseMaterial.removeEventListener('dispose', onDispose);\n derivedMaterial.dispose();\n });\n }\n // If text outline is configured, render it as a preliminary draw using Three's multi-material\n // feature (see GlyphsGeometry which sets up `groups` for this purpose) Doing it with multi\n // materials ensures the layers are always rendered consecutively in a consistent order.\n // Each layer will trigger onBeforeRender with the appropriate material.\n if (this.outlineWidth || this.outlineBlur || this.outlineOffsetX || this.outlineOffsetY) {\n let outlineMaterial = derivedMaterial._outlineMtl;\n if (!outlineMaterial) {\n outlineMaterial = derivedMaterial._outlineMtl = Object.create(derivedMaterial, {\n id: {value: derivedMaterial.id + 0.1}\n });\n outlineMaterial.isTextOutlineMaterial = true;\n outlineMaterial.depthWrite = false;\n outlineMaterial.map = null; //???\n derivedMaterial.addEventListener('dispose', function onDispose() {\n derivedMaterial.removeEventListener('dispose', onDispose);\n outlineMaterial.dispose();\n });\n }\n return [\n outlineMaterial,\n derivedMaterial\n ]\n } else {\n return derivedMaterial\n }\n }\n set material(baseMaterial) {\n if (baseMaterial && baseMaterial.isTroikaTextMaterial) { //prevent double-derivation\n this._derivedMaterial = baseMaterial;\n this._baseMaterial = baseMaterial.baseMaterial;\n } else {\n this._baseMaterial = baseMaterial;\n }\n }\n\n get glyphGeometryDetail() {\n return this.geometry.detail\n }\n set glyphGeometryDetail(detail) {\n this.geometry.detail = detail;\n }\n\n get curveRadius() {\n return this.geometry.curveRadius\n }\n set curveRadius(r) {\n this.geometry.curveRadius = r;\n }\n\n // Create and update material for shadows upon request:\n get customDepthMaterial() {\n return first(this.material).getDepthMaterial()\n }\n get customDistanceMaterial() {\n return first(this.material).getDistanceMaterial()\n }\n\n _prepareForRender(material) {\n const isOutline = material.isTextOutlineMaterial;\n const uniforms = material.uniforms;\n const textInfo = this.textRenderInfo;\n if (textInfo) {\n const {sdfTexture, blockBounds} = textInfo;\n uniforms.uTroikaSDFTexture.value = sdfTexture;\n uniforms.uTroikaSDFTextureSize.value.set(sdfTexture.image.width, sdfTexture.image.height);\n uniforms.uTroikaSDFGlyphSize.value = textInfo.sdfGlyphSize;\n uniforms.uTroikaSDFExponent.value = textInfo.sdfExponent;\n uniforms.uTroikaTotalBounds.value.fromArray(blockBounds);\n uniforms.uTroikaUseGlyphColors.value = !isOutline && !!textInfo.glyphColors;\n\n let distanceOffset = 0;\n let blurRadius = 0;\n let strokeWidth = 0;\n let fillOpacity;\n let strokeOpacity;\n let strokeColor;\n let offsetX = 0;\n let offsetY = 0;\n\n if (isOutline) {\n let {outlineWidth, outlineOffsetX, outlineOffsetY, outlineBlur, outlineOpacity} = this;\n distanceOffset = this._parsePercent(outlineWidth) || 0;\n blurRadius = Math.max(0, this._parsePercent(outlineBlur) || 0);\n fillOpacity = outlineOpacity;\n offsetX = this._parsePercent(outlineOffsetX) || 0;\n offsetY = this._parsePercent(outlineOffsetY) || 0;\n } else {\n strokeWidth = Math.max(0, this._parsePercent(this.strokeWidth) || 0);\n if (strokeWidth) {\n strokeColor = this.strokeColor;\n uniforms.uTroikaStrokeColor.value.set(strokeColor == null ? defaultStrokeColor : strokeColor);\n strokeOpacity = this.strokeOpacity;\n if (strokeOpacity == null) strokeOpacity = 1;\n }\n fillOpacity = this.fillOpacity;\n }\n\n uniforms.uTroikaDistanceOffset.value = distanceOffset;\n uniforms.uTroikaPositionOffset.value.set(offsetX, offsetY);\n uniforms.uTroikaBlurRadius.value = blurRadius;\n uniforms.uTroikaStrokeWidth.value = strokeWidth;\n uniforms.uTroikaStrokeOpacity.value = strokeOpacity;\n uniforms.uTroikaFillOpacity.value = fillOpacity == null ? 1 : fillOpacity;\n uniforms.uTroikaCurveRadius.value = this.curveRadius || 0;\n\n let clipRect = this.clipRect;\n if (clipRect && Array.isArray(clipRect) && clipRect.length === 4) {\n uniforms.uTroikaClipRect.value.fromArray(clipRect);\n } else {\n // no clipping - choose a finite rect that shouldn't ever be reached by overflowing glyphs or outlines\n const pad = (this.fontSize || 0.1) * 100;\n uniforms.uTroikaClipRect.value.set(\n blockBounds[0] - pad,\n blockBounds[1] - pad,\n blockBounds[2] + pad,\n blockBounds[3] + pad\n );\n }\n this.geometry.applyClipRect(uniforms.uTroikaClipRect.value);\n }\n uniforms.uTroikaSDFDebug.value = !!this.debugSDF;\n material.polygonOffset = !!this.depthOffset;\n material.polygonOffsetFactor = material.polygonOffsetUnits = this.depthOffset || 0;\n\n // Shortcut for setting material color via `color` prop on the mesh; this is\n // applied only to the derived material to avoid mutating a shared base material.\n const color = isOutline ? (this.outlineColor || 0) : this.color;\n\n if (color == null) {\n delete material.color; //inherit from base\n } else {\n const colorObj = material.hasOwnProperty('color') ? material.color : (material.color = new Color());\n if (color !== colorObj._input || typeof color === 'object') {\n colorObj.set(colorObj._input = color);\n }\n }\n\n // base orientation\n let orient = this.orientation || defaultOrient;\n if (orient !== material._orientation) {\n let rotMat = uniforms.uTroikaOrient.value;\n orient = orient.replace(/[^-+xyz]/g, '');\n let match = orient !== defaultOrient && orient.match(/^([-+])([xyz])([-+])([xyz])$/);\n if (match) {\n let [, hSign, hAxis, vSign, vAxis] = match;\n tempVec3a.set(0, 0, 0)[hAxis] = hSign === '-' ? 1 : -1;\n tempVec3b.set(0, 0, 0)[vAxis] = vSign === '-' ? -1 : 1;\n tempMat4.lookAt(origin, tempVec3a.cross(tempVec3b), tempVec3b);\n rotMat.setFromMatrix4(tempMat4);\n } else {\n rotMat.identity();\n }\n material._orientation = orient;\n }\n }\n\n _parsePercent(value) {\n if (typeof value === 'string') {\n let match = value.match(/^(-?[\\d.]+)%$/);\n let pct = match ? parseFloat(match[1]) : NaN;\n value = (isNaN(pct) ? 0 : pct / 100) * this.fontSize;\n }\n return value\n }\n\n /**\n * Translate a point in local space to an x/y in the text plane.\n */\n localPositionToTextCoords(position, target = new Vector2()) {\n target.copy(position); //simple non-curved case is 1:1\n const r = this.curveRadius;\n if (r) { //flatten the curve\n target.x = Math.atan2(position.x, Math.abs(r) - Math.abs(position.z)) * Math.abs(r);\n }\n return target\n }\n\n /**\n * Translate a point in world space to an x/y in the text plane.\n */\n worldPositionToTextCoords(position, target = new Vector2()) {\n tempVec3a.copy(position);\n return this.localPositionToTextCoords(this.worldToLocal(tempVec3a), target)\n }\n\n /**\n * @override Custom raycasting to test against the whole text block's max rectangular bounds\n * TODO is there any reason to make this more granular, like within individual line or glyph rects?\n */\n raycast(raycaster, intersects) {\n const {textRenderInfo, curveRadius} = this;\n if (textRenderInfo) {\n const bounds = textRenderInfo.blockBounds;\n const raycastMesh = curveRadius ? getCurvedRaycastMesh() : getFlatRaycastMesh();\n const geom = raycastMesh.geometry;\n const {position, uv} = geom.attributes;\n for (let i = 0; i < uv.count; i++) {\n let x = bounds[0] + (uv.getX(i) * (bounds[2] - bounds[0]));\n const y = bounds[1] + (uv.getY(i) * (bounds[3] - bounds[1]));\n let z = 0;\n if (curveRadius) {\n z = curveRadius - Math.cos(x / curveRadius) * curveRadius;\n x = Math.sin(x / curveRadius) * curveRadius;\n }\n position.setXYZ(i, x, y, z);\n }\n geom.boundingSphere = this.geometry.boundingSphere;\n geom.boundingBox = this.geometry.boundingBox;\n raycastMesh.matrixWorld = this.matrixWorld;\n raycastMesh.material.side = this.material.side;\n tempArray.length = 0;\n raycastMesh.raycast(raycaster, tempArray);\n for (let i = 0; i < tempArray.length; i++) {\n tempArray[i].object = this;\n intersects.push(tempArray[i]);\n }\n }\n }\n\n copy(source) {\n // Prevent copying the geometry reference so we don't end up sharing attributes between instances\n const geom = this.geometry;\n super.copy(source);\n this.geometry = geom;\n\n COPYABLE_PROPS.forEach(prop => {\n this[prop] = source[prop];\n });\n return this\n }\n\n clone() {\n return new this.constructor().copy(this)\n }\n}\n\n\n// Create setters for properties that affect text layout:\nSYNCABLE_PROPS.forEach(prop => {\n const privateKey = '_private_' + prop;\n Object.defineProperty(Text.prototype, prop, {\n get() {\n return this[privateKey]\n },\n set(value) {\n if (value !== this[privateKey]) {\n this[privateKey] = value;\n this._needsSync = true;\n }\n }\n });\n});\n\n//=== Utility functions for dealing with carets and selection ranges ===//\n\n/**\n * @typedef {object} TextCaret\n * @property {number} x - x position of the caret\n * @property {number} y - y position of the caret's bottom\n * @property {number} height - height of the caret\n * @property {number} charIndex - the index in the original input string of this caret's target\n * character; the caret will be for the position _before_ that character.\n */\n\n/**\n * Given a local x/y coordinate in the text block plane, find the nearest caret position.\n * @param {TroikaTextRenderInfo} textRenderInfo - a result object from TextBuilder#getTextRenderInfo\n * @param {number} x\n * @param {number} y\n * @return {TextCaret | null}\n */\nfunction getCaretAtPoint(textRenderInfo, x, y) {\n let closestCaret = null;\n const {caretHeight} = textRenderInfo;\n const caretsByRow = groupCaretsByRow(textRenderInfo);\n\n // Find nearest row by y first\n let closestRowY = Infinity;\n caretsByRow.forEach((carets, rowY) => {\n if (Math.abs(y - (rowY + caretHeight / 2)) < Math.abs(y - (closestRowY + caretHeight / 2))) {\n closestRowY = rowY;\n }\n });\n\n // Then find closest caret by x within that row\n caretsByRow.get(closestRowY).forEach(caret => {\n if (!closestCaret || Math.abs(x - caret.x) < Math.abs(x - closestCaret.x)) {\n closestCaret = caret;\n }\n });\n return closestCaret\n}\n\n\nconst _rectsCache = new WeakMap();\n\n/**\n * Given start and end character indexes, return a list of rectangles covering all the\n * characters within that selection.\n * @param {TroikaTextRenderInfo} textRenderInfo\n * @param {number} start - index of the first char in the selection\n * @param {number} end - index of the first char after the selection\n * @return {Array<{left, top, right, bottom}> | null}\n */\nfunction getSelectionRects(textRenderInfo, start, end) {\n let rects;\n if (textRenderInfo) {\n // Check cache - textRenderInfo is frozen so it's safe to cache based on it\n let prevResult = _rectsCache.get(textRenderInfo);\n if (prevResult && prevResult.start === start && prevResult.end === end) {\n return prevResult.rects\n }\n\n const {caretPositions, caretHeight} = textRenderInfo;\n\n // Normalize\n if (end < start) {\n const s = start;\n start = end;\n end = s;\n }\n start = Math.max(start, 0);\n end = Math.min(end, caretPositions.length + 1);\n\n // Build list of rects, expanding the current rect for all characters in a run and starting\n // a new rect whenever reaching a new line or a new bidi direction\n rects = [];\n let currentRect = null;\n for (let i = start; i < end; i++) {\n const x1 = caretPositions[i * 3];\n const x2 = caretPositions[i * 3 + 1];\n const left = Math.min(x1, x2);\n const right = Math.max(x1, x2);\n const bottom = caretPositions[i * 3 + 2];\n if (!currentRect || bottom !== currentRect.bottom || left > currentRect.right || right < currentRect.left) {\n currentRect = {\n left: Infinity,\n right: -Infinity,\n bottom: bottom,\n top: bottom + caretHeight\n };\n rects.push(currentRect);\n }\n currentRect.left = Math.min(left, currentRect.left);\n currentRect.right = Math.max(right, currentRect.right);\n }\n\n // Merge any overlapping rects, e.g. those formed by adjacent bidi runs\n rects.sort((a, b) => b.bottom - a.bottom || a.left - b.left);\n for (let i = rects.length - 1; i-- > 0;) {\n const rectA = rects[i];\n const rectB = rects[i + 1];\n if (rectA.bottom === rectB.bottom && rectA.left <= rectB.right && rectA.right >= rectB.left) {\n rectB.left = Math.min(rectB.left, rectA.left);\n rectB.right = Math.max(rectB.right, rectA.right);\n rects.splice(i, 1);\n }\n }\n\n _rectsCache.set(textRenderInfo, {start, end, rects});\n }\n return rects\n}\n\nconst _caretsByRowCache = new WeakMap();\n\nfunction groupCaretsByRow(textRenderInfo) {\n // textRenderInfo is frozen so it's safe to cache based on it\n let caretsByRow = _caretsByRowCache.get(textRenderInfo);\n if (!caretsByRow) {\n const {caretPositions, caretHeight} = textRenderInfo;\n caretsByRow = new Map();\n for (let i = 0; i < caretPositions.length; i += 3) {\n const rowY = caretPositions[i + 2];\n let rowCarets = caretsByRow.get(rowY);\n if (!rowCarets) {\n caretsByRow.set(rowY, rowCarets = []);\n }\n rowCarets.push({\n x: caretPositions[i],\n y: rowY,\n height: caretHeight,\n charIndex: i / 3\n });\n // Add one more caret after the final char\n if (i + 3 >= caretPositions.length) {\n rowCarets.push({\n x: caretPositions[i + 1],\n y: rowY,\n height: caretHeight,\n charIndex: i / 3 + 1\n });\n }\n }\n }\n _caretsByRowCache.set(textRenderInfo, caretsByRow);\n return caretsByRow\n}\n\nexport { GlyphsGeometry, Text, configureTextBuilder, createTextDerivedMaterial, dumpSDFTextures, getCaretAtPoint, getSelectionRects, preloadFont, typesetterWorkerModule };\n","'use strict';\n\nimport { World } from '../World/World';\nimport { Slide } from '../Slider/Slide';\nimport gsap from 'gsap';\n\nexport class Viewer extends World {\n constructor (canvas,width,height,pixelRatio,params) {\n super(canvas,width,height,pixelRatio);\n\n this.params = params;\n this.slides = [];\n }\n\n loadSlides(dataArray) {\n const slides = [];\n\n dataArray.forEach(data => {\n const slide = new Slide(data,this.width,this.height,this.params).load();\n slides.push(slide);\n });\n\n Promise.all(slides).then(response => {\n this.slides = response;\n if (this.params.isOffscreen) {\n self.postMessage('launch');\n } else if (this.params.callbacks && this.params.callbacks.launch) {\n this.params.callbacks.launch();\n }\n this.run();\n });\n }\n\n run() {\n this.sliderTimeLine = gsap.timeline({paused: true, repeat: -1,\n onUpdate: () => {\n if (this.sliderTimeLine.time() > this.sliderTimeLine.duration() - this.params.fadeDuration) {\n this.sliderTimeLine.timeScale(15);\n } else {\n this.sliderTimeLine.timeScale(1);\n }\n },\n onRepeat: () => {\n if (this.params.isOffscreen) {\n self.postMessage('repeat');\n } else if (this.params.callbacks && this.params.callbacks.repeat) {\n this.params.callbacks.repeat();\n }\n }});\n\n this.slides.forEach((slide,index) => {\n slide.position = - index / 1000;\n this.addToScene(slide.slideGroup);\n slide.slideDirection = index % 2 === 0 ? -1 : 1;\n const slideTimeLineFirst = slide.play();\n this.sliderTimeLine.add(slideTimeLineFirst,this.params.slideDuration * index);\n });\n this.sliderTimeLine.play(0);\n }\n\n resize(width,height) {\n this.setSize(width,height);\n this.slides.forEach(slide => slide.resize(width,height));\n }\n\n dispose() {\n this.loop.stop();\n this.sliderTimeLine.kill();\n this.sliderTimeLine = null;\n this.slides.forEach(slide => slide.dispose());\n this.slides = null;\n this.renderer.dispose();\n this.scene = null;\n this.renderer = null;\n this.camera = null;\n }\n}\n\n\n\n","'use strict';\n\nimport { Clock } from 'three';\n\nexport class Loop {\n constructor (scope) {\n this.camera = scope.camera;\n this.scene = scope.scene;\n this.renderer = scope.renderer;\n this.updatables = [];\n this.clock = new Clock();\n }\n\n start() {\n this.renderer.setAnimationLoop(() => {\n this.tick();\n this.renderer.render(this.scene,this.camera);\n });\n }\n\n tick() {\n this.updatables.forEach(element => {\n const delta = this.clock.getDelta();\n element.tick(delta);\n })\n }\n\n stop() {\n this.renderer.setAnimationLoop(null);\n }\n\n add(el) {\n this.updatables.push(el);\n }\n\n remove(el) {\n this.updatables = this.updatables.filter(loop => loop !== el);\n }\n\n}\n","'use strict';\n\nimport { Color, LinearSRGBColorSpace, OrthographicCamera, Scene, WebGLRenderer } from 'three';\nimport { Loop } from './Loop';\n\nexport class World {\n constructor (canvas,width,height,pixelRatio) {\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this.pixelRatio = pixelRatio;\n }\n\n initScene() {\n this.scene = new Scene();\n this.scene.background = new Color().setStyle('#ffffff',LinearSRGBColorSpace);\n this.camera = new OrthographicCamera(-1, 1, 1, -1, 0, 100);\n this.camera.position.z = 1;\n this.renderer = new WebGLRenderer({\n antialias: false,\n canvas: this.canvas,\n stencil: false\n });\n this.renderer.sortObjects = true;\n this.renderer.shadowMap.enabled = false;\n this.renderer.setSize(this.width,this.height,false);\n this.renderer.setPixelRatio(this.pixelRatio);\n this.loop = new Loop(this);\n }\n\n render() {\n this.renderer.render(this.scene, this.camera);\n }\n\n start() {\n this.loop.start();\n }\n\n stop() {\n this.loop.stop();\n }\n\n addToScene(obj) {\n this.scene.add(obj);\n }\n\n setSize(width,height) {\n this.width = width;\n this.height = height;\n this.renderer.setSize(this.width,this.height,false);\n this.camera.updateProjectionMatrix();\n this.renderer.render(this.scene,this.camera);\n }\n}\n","'use strict';\n\nimport { BaseElement } from '../../interfaces/BaseElement';\nimport { setLordIcon } from '../../../lordicon';\nimport { changeLangToCurrent } from '../langSwitcher/langSwitcher';\nimport { isMobile } from '../../../settings';\n\nexport class Sound {\n\tstatic music = null;\n\tstatic active = 'off';\n\t\n\tconstructor () {\n\t\tthis.enabled = Boolean(config.features.sound && !isMobile);\n\t\tif (!this.enabled) return;\n\t\t\n\t\tif (!Sound.music) {\n\t\t\tSound.music = new BaseElement('audio')\n\t\t\t\t.appendTo(document.body)\n\t\t\t\t.addClass('background-music')\n\t\t\t\t.DOMElement;\n\t\t\tSound.music.muted = true;\n\t\t\tSound.music.loop = true;\n\t\t\tSound.music.src = config.features.sound;\n\t\t}\n\t}\n\t\n\taddButton (parent, addText = true, addClass = null) {\n\t\tif (!this.enabled) return;\n\t\t\n\t\tthis.btn = new BaseElement('button')\n\t\t\t.addClass('control-panel__button', 'mute', 'preloader-skip-text', 'slider-sound-btn','sound-btn',addClass)\n\t\t\t.event('click', this.soundHandler.bind(this))\n\t\t\t.appendTo(parent)\n\t\t\t.DOMElement;\n\t\t\n\t\tthis.text = null;\n\t\t\n\t\tif (addText) {\n\t\t\tthis.text = new BaseElement('span')\n\t\t\t\t.addClass('text', 'language-string')\n\t\t\t\t.innerHtml(changeLangToCurrent('Unmute'))\n\t\t\t\t.appendTo(this.btn)\n\t\t\t\t.DOMElement;\n\t\t}\n\t\t\n\t\tthis.icon = new BaseElement('span')\n\t\t\t.addClass('mute__icon')\n\t\t\t.appendTo(this.btn)\n\t\t\t.DOMElement;\n\t\t\n\t\tsetLordIcon('soundOn', this.icon, {\n\t\t\ttrigger: 'morph',\n\t\t\tdelay: '0',\n\t\t\tprimaryColor: '#ffffff',\n\t\t\tsecondaryColor: '#ffffff',\n\t\t});\n\t\tsetLordIcon('soundOff', this.icon, {\n\t\t\ttrigger: 'morph',\n\t\t\tdelay: '0',\n\t\t\tprimaryColor: '#ffffff',\n\t\t\tsecondaryColor: '#ffffff',\n\t\t});\n\t\t\n\t\tthis.icon.dataset.active = Sound.active;\n\t}\n\t\n\tsoundHandler () {\n\t\tSound.music.muted = !Sound.music.muted;\n\t\tSound.music.muted ?\n\t\t\tSound.music.pause() :\n\t\t\tSound.music.play();\n\t\tthis.#toggleIcon();\n\t\tthis.#toggleText();\n\t}\n\t\n\t#toggleIcon () {\n\t\tlet action;\n\t\t\n\t\tthis.icon.dataset.active === 'on' ?\n\t\t\taction = 'off' :\n\t\t\taction = 'on';\n\t\t\n\t\tthis.icon.dataset.active = action;\n\t\tSound.active = action;\n\t}\n\t\n\t#toggleText () {\n\t\tif (this.text) {\n\t\t\tSound.music.muted ? this.text.innerHTML = changeLangToCurrent('Unmute') : this.text.innerHTML = changeLangToCurrent('Mute');\n\t\t}\n\t}\n\t\n\tdispose () {\n\t\tif (this.btn) {\n\t\t\tthis.btn.remove();\n\t\t\tthis.btn = null;\n\t\t\tthis.icon = null;\n\t\t\tthis.text = null;\n\t\t}\n\t}\n\t\n\tstatic disposeMusic () {\n\t\tif (Sound.music) {\n\t\t\tSound.music.remove();\n\t\t\tSound.music = null;\n\t\t}\n\t}\n\t\n}\n","import {createHtmlElement, getUrlParam} from '../../../functions';\nimport gsap from 'gsap';\nimport { isMobile, isSafari, projectMode, settingsData, threeJsVariables } from '../../../settings';\nimport { getDictionary, getLoaderData } from '../../crm/crm-requests';\nimport { setProjectSettings } from '../../threejs/autoSelectionBoxes';\nimport { intro } from '../../threejs/camera';\nimport { Loader } from '../../threejs/loader/Loader';\nimport { initProjectMainScript } from '../../threejs/autoProjectScript';\nimport { renderUpdateValuesOnDemand } from '../../../app';\nimport { BaseElement } from '../../interfaces/BaseElement';\nimport { DreamsSlider } from './DreamsSlider/Slider/DreamsSlider';\nimport { Button } from '../../interfaces/buttons/Button';\nimport { Fullscreen } from '../Fullscreen/Fullscreen';\nimport { changeLangToCurrent } from '../langSwitcher/langSwitcher';\nimport { SubPreloader } from './DreamsSlider/SubPreloader/SubPreloader';\nimport { Cloudflare } from '../../api/Cloudflare';\nimport {ProjectLogs} from \"../ProjectLogs\";\nimport { Cookie } from '../../Cookie/Cookie';\nimport { Sound } from './Sound';\nimport { BmbyMode } from '../../mode/BmbyMode';\nimport { DreamsPreloader } from './DreamsPreloader';\nimport { ViewMode } from '../../../common';\n\n\nlet dreamsSlider = null;\n\nexport function preloaderSliderInit() {\n document.addEventListener('gesturestart', function (e) {\n e.preventDefault();\n });\n\n const tl = gsap.timeline({repeat: -1, repeatDelay: 0.4});\n\n const {cdnRepository,projectFolder, features} = config;\n const url = Cloudflare.resize(`${cdnRepository}/${projectFolder}/resources/img/logo.png`,{\n width: 500\n });\n const mainContainer = new BaseElement()\n .addClass('preloader__main__container')\n .appendTo(document.body);\n new BaseElement()\n .addClass('preloader__top__container')\n .appendTo(mainContainer.DOMElement);\n new BaseElement()\n .addClass('preloader__bottom__container')\n .appendTo(mainContainer.DOMElement);\n const centerContainer = new BaseElement()\n .addClass('preloader__info__container')\n .appendTo(mainContainer.DOMElement);\n new BaseElement()\n .addClass('preloader__logo')\n .addStyle('background-image', `url(${url})`)\n .appendTo(centerContainer.DOMElement);\n new BaseElement()\n .addClass('preloader__progressbar')\n .appendTo(centerContainer.DOMElement);\n\n launchPreloaderSlider();\n}\n\nexport function removePreloader () {\n const preloader = document.querySelector('.preloader__main__container');\n if (!preloader)\n return;\n const preloaderCenterBlock = preloader.querySelector('.preloader__info__container');\n const topBox = preloader.querySelector('.preloader__top__container');\n const bottomBox = preloader.querySelector('.preloader__bottom__container');\n\n preloader.classList.add('isFinish');\n\n return new Promise(resolve => {\n const tl = gsap.timeline();\n\n tl.to(preloaderCenterBlock,{ duration: 0.8, delay: 1, opacity:0}).addLabel('removeCenterBlockAnimation');\n tl.to(topBox,{duration: 1, ease: 'power3.inOut', height:0}, 'removeCenterBlockAnimation-=0.4');\n tl.to(bottomBox,{duration: 1, ease: 'power3.inOut', height:0},'removeCenterBlockAnimation-=0.4').then(()=>{\n preloader.remove();\n settingsData.preloaderRemoved = true;\n resolve();\n })\n\n });\n}\n\nlet actualPercent = 0;\nexport function loaderLineProgress() {\n const percent = Loader.totalProgress();\n if (percent === 100) {\n renderUpdateValuesOnDemand(false);\n settingsData.slideShowed = true;\n return;\n }\n\n if (percent > actualPercent) {\n actualPercent = percent;\n }\n\n const progressBar = document.querySelector('.preloader__progressbar');\n if (progressBar){\n progressBar.style.width = `${actualPercent}%`;\n }\n requestAnimationFrame(loaderLineProgress);\n}\n\nasync function launchPreloaderSlider() {\n const dictionary = await getDictionary();\n setProjectSettings(undefined, dictionary);\n let defaultLanguage = null;\n let loaderData = null;\n \n if (BmbyMode.active) {\n defaultLanguage = 'en';\n } else {\n ProjectLogs.timerStartFor('api_loader');\n const loaderResponse = await getLoaderData();\n loaderData = await loaderResponse.data;\n window.ld = loaderData;\n \n if (!Array.isArray(loaderData)) {\n skipSlider();\n return;\n }\n \n if (isMobile) {\n loaderData = loaderData.filter(slide => slide.type === 'mobile' || slide.type === 'all')\n } else {\n loaderData = loaderData.filter(slide => slide.type === 'web' || slide.type === 'all');\n }\n \n if (loaderData.length === 0) {\n skipSlider();\n return;\n }\n \n defaultLanguage = loaderData[0]?.defaultLanguage;\n }\n \n \n const lang = getUrlParam('lang')?.toLowerCase() || Cookie.getCookie('language') || defaultLanguage;\n\n document.querySelector('html')\n .setAttribute('lang', lang ? lang : 'en');\n\n initProjectMainScript();\n\n const wrapper = new BaseElement()\n .addClass('dreams-slider')\n .addAttribute('id', 'preloader_slider')\n .appendTo(document.body)\n .DOMElement;\n\n if (BmbyMode.active) {\n wrapper.style.zIndex = 99999999999;\n wrapper.style.backgroundColor = 'var(--primaryBgNoAlpha)';\n const dreamsPreloader = new DreamsPreloader(wrapper).show();\n removePreloader();\n dreamsSlider = {\n callbacks: {\n createSkipBtn: () => {\n settingsData.slideShowed = true;\n intro();\n const awaitSearch = setInterval(() => {\n if (settingsData.activeViewMode === ViewMode.Cylinder) {\n clearInterval(awaitSearch);\n dreamsPreloader.remove();\n wrapper.remove();\n }\n },200);\n }\n }\n };\n return;\n }\n\n const canvas = new BaseElement('canvas')\n .appendTo(wrapper)\n .DOMElement;\n\n let skipPressed = false;\n const control = createControlPanel(wrapper);\n const subPreloader = new SubPreloader(control);\n let sound = null;\n const skipBtn = createSkipButton();\n skipBtn.event('click', () => {\n projectMode.LiteMode.iosGyroscopePermission();\n callbacks.removeSlider();\n });\n\n const callbacks = {\n launch: () => {\n removePreloader().then(() => {\n subPreloader.createSubTexts();\n })\n },\n repeat: () => {\n if (skipBtn.DOMElement.parentElement)\n callbacks.removeSlider();\n },\n removeSlider: () => {\n if (skipPressed)\n return;\n skipPressed = true;\n\n skipBtn.addClass('hidden');\n sound && sound.dispose();\n setTimeout(() => {\n settingsData.slideShowed = true;\n intro();\n dreamsSlider.dispose(0.1).then(() => wrapper.remove());\n if (projectMode.LiteMode.isActive())\n projectMode.LiteMode.resizeContainer();\n }, 200);\n },\n createSkipBtn: () => {\n subPreloader.remove();\n control.appendChild(skipBtn.DOMElement);\n sound = new Sound();\n sound.addButton(control,true,'sound-btn--preloader');\n threeJsVariables.slicer.setInitialIntroHeight();\n }\n };\n\n dreamsSlider = new DreamsSlider(canvas, {\n imageSize: isMobile ? 1024 : 2048,\n slideDuration: 4.5,\n forceAnimation: getUrlParam('force_animation') === '1',\n zoomDuration: 0.3,\n fadeDuration: 0.7,\n text: {\n settings: {\n font: 'https://dreamsimages.bmby.com/DreamsGeneralStorage/fonts/openSans/OpenSans-Bold.ttf',\n fontSize: isMobile ? 0.13 : 0.08,\n letterSpacing: -0.02,\n lineHeight: 1,\n outlineWidth: 0,\n outlineBlur: 0,\n outlineColor: '#2a2b2e',\n outlineOffsetX: 0.005,\n outlineOffsetY: 0.005,\n outlineOpacity: 0,\n maxWidth: 2.1,\n position: 0.001\n },\n animation: {\n textDuration: 0.8,\n }\n }\n }, callbacks);\n\n dreamsSlider.launch(loaderData);\n}\n\n\nfunction createControlPanel (parent) {\n const controlPanel = document.createElement('div');\n controlPanel.classList.add('control-panel');\n isSafari && controlPanel.classList.add('control-panel__safari-styles');\n parent.appendChild(controlPanel);\n return controlPanel;\n}\n\nfunction createSkipButton () {\n const skipBtn = new Button(changeLangToCurrent('Skip intro'))\n .addClass('control-panel__button', 'preloader-skip-text');\n\n const fullscreenBtn = new Fullscreen().addBtn(skipBtn.DOMElement,'skip-btn');\n if (fullscreenBtn?.btn) {\n const lang = Cookie.getCookie('language') || 'en';\n skipBtn.DOMElement.classList.add('fullscreen-btn__skip-btn-parent');\n skipBtn.DOMElement.setAttribute('data-lang',lang);\n }\n\n return skipBtn;\n}\n\nexport function getDreamsSliderScope () {\n return dreamsSlider;\n}\n\nfunction skipSlider() {\n initProjectMainScript();\n loaderLineProgress();\n settingsData.slideShowed = true;\n}\n\n","'use strict';\n\nimport { PopUp } from '../../interfaces/pages/PopUp';\nimport { BaseElement } from '../../interfaces/BaseElement';\n\nexport class Preview {\n\t\n\tconstructor (url) {\n\t\tthis.popUp = new PopUp({\n\t\t\tid: 'preview',\n\t\t\tdestroy: true\n\t\t});\n\t\t\n\t\tnew BaseElement('iframe')\n\t\t\t.addClass('preview__iframe')\n\t\t\t.addAttribute('src','https://docs.google.com/viewer?url=' + window.location.origin + url + '&embedded=true' )\n\t\t\t.appendTo(this.popUp.content)\n\t\t\t.DOMElement;\n\t\t\n\t\tthis.popUp.show();\n\t}\n}\n","'use strict';\n\n\nimport { createDealLabel, latLngAltToVector3, Layer } from './Layer';\nimport { Vector3 } from 'three';\n\nexport class Deals extends Layer{\n\n constructor (parent, data) {\n super(parent, data);\n\n return this.createLayer();\n }\n\n async createLayer() {\n\n this.data = await this.response;\n\n if (!this.data) {\n this.btn?.remove();\n return;\n }\n\n const labels = [];\n\n const center = {lat: Number(config.localization.latitude), lng: Number(config.localization.longitude)};\n this.data.forEach(el => {\n const splitedCoords = el.coords.split(',');\n const coords = {lat: splitedCoords[0], lng: splitedCoords[1]};\n const vector = latLngAltToVector3(coords,center);\n\n const label = createDealLabel(el);\n label.position.copy(vector);\n this.routeGroup.add(label);\n \n this.labels.push({\n label,\n distance: vector.distanceTo(new Vector3())\n });\n\n labels.push(label);\n });\n\n return labels;\n\n }\n\n}\n","'use strict';\n\nimport { createLabel, latLngAltToVector3, Layer } from './Layer';\nimport { BufferGeometry, Line, LineBasicMaterial, Vector3 } from 'three';\n\nexport class Education extends Layer {\n\n constructor (parent, data) {\n super(parent, data);\n\n this.createLayer();\n }\n\n async createLayer() {\n\n this.data = await this.response;\n\n if (!this.data) {\n this.btn?.remove();\n return;\n }\n\n const center = {lat: Number(config.localization.latitude), lng: Number(config.localization.longitude)};\n const lineMaterial = new LineBasicMaterial({color: '#ffffff', transparent: true});\n const tempVector = new Vector3();\n const intersectedVector = new Vector3();\n\n this.data.forEach((obj,index) => {\n const names = {};\n const amenity = obj.tags.amenity;\n\n config.languages.forEach(lang => {\n if (obj.tags.hasOwnProperty(`name:${lang}`)) {\n names[lang] = obj.tags[`name:${lang}`];\n } else if (obj.tags.hasOwnProperty('name')) {\n names[lang] = config.dictionary[obj.tags.name] ? config.dictionary[obj.tags.name][lang] : obj.tags.name;\n } else {\n const dKey = amenity.charAt(0).toUpperCase() + amenity.slice(1).replace('_',' ');\n names[lang] = config.dictionary[dKey] ? config.dictionary[dKey][lang] : dKey;\n }\n });\n\n let point;\n\n switch (obj.type) {\n case 'node':\n point = {lat: obj.lat, lng: obj.lon};\n break;\n case 'way':\n point = {lat: obj.center.lat, lng: obj.center.lon};\n break;\n\n }\n\n let icon;\n let color;\n\n const pointOfInterest = this.layer.pointsOfInterest[amenity];\n\n if (pointOfInterest) {\n color = pointOfInterest.color ? pointOfInterest.color : '#bfbfbf';\n icon = pointOfInterest.icon ? pointOfInterest.icon : amenity.charAt(0).toUpperCase();\n } else {\n color = '#bfbfbf';\n icon = amenity.charAt(0).toUpperCase();\n }\n\n const vector = latLngAltToVector3(point,center);\n intersectedVector.copy(vector);\n intersectedVector.applyQuaternion(this.routeGroup.quaternion);\n intersectedVector.add(this.routeGroup.position);\n const altitude = this.intersectHeightFromVector3(intersectedVector);\n const distance = Math.floor(new Vector3().distanceTo(vector));\n vector.y = altitude + distance / 5;\n\n const label = createLabel(names,icon,color,distance);\n label.position.copy(vector);\n tempVector.copy(vector);\n tempVector.y = -500;\n const lineGeometry = new BufferGeometry().setFromPoints([\n tempVector,\n vector\n ]);\n const line = new Line(lineGeometry,lineMaterial);\n line.name = 'poi_line';\n\n const poiData = {\n id: index,\n to: point,\n from: center,\n route: null\n };\n\n label.element.onclick = () => this.poiHandler(poiData);\n \n this.labels.push({\n line,\n label,\n distance\n });\n\n this.routeGroup.add(label,line);\n // poiHeight += poiHeightStep;\n });\n\n }\n\n}\n","'use strict';\n\n\nimport { createLabel, latLngAltToVector3, Layer } from './Layer';\nimport { BufferGeometry, Line, LineBasicMaterial, Vector3 } from 'three';\n\nexport class Fun extends Layer {\n\n constructor (parent, data) {\n super(parent, data);\n\n this.createLayer();\n }\n\n async createLayer() {\n\n this.data = await this.response;\n\n if (!this.data) {\n this.btn?.remove();\n return;\n }\n\n\n const center = {lat: Number(config.localization.latitude), lng: Number(config.localization.longitude)};\n const lineMaterial = new LineBasicMaterial({color: '#ffffff',transparent: true});\n const tempVector = new Vector3();\n const intersectedVector = new Vector3();\n\n this.data.forEach((obj,index) => {\n const amenity = obj.tags.amenity;\n const names = {};\n\n config.languages.forEach(lang => {\n if (obj.tags.hasOwnProperty(`name:${lang}`)) {\n names[lang] = obj.tags[`name:${lang}`];\n } else if (obj.tags.hasOwnProperty('name')) {\n names[lang] = config.dictionary[obj.tags.name] ? config.dictionary[obj.tags.name][lang] : obj.tags.name;\n } else {\n const dKey = amenity.charAt(0).toUpperCase() + amenity.slice(1).replace('_',' ');\n names[lang] = config.dictionary[dKey] ? config.dictionary[dKey][lang] : dKey;\n }\n });\n\n let point;\n\n switch (obj.type) {\n case 'node':\n point = {lat: obj.lat, lng: obj.lon};\n break;\n case 'way':\n point = {lat: obj.center.lat, lng: obj.center.lon};\n break;\n\n }\n\n let icon;\n let color;\n\n const pointOfInterest = this.layer.pointsOfInterest[amenity];\n\n if (pointOfInterest) {\n color = pointOfInterest.color ? pointOfInterest.color : '#bfbfbf';\n icon = pointOfInterest.icon ? pointOfInterest.icon : amenity.charAt(0).toUpperCase();\n } else {\n color = '#bfbfbf';\n icon = amenity.charAt(0).toUpperCase();\n }\n\n const vector = latLngAltToVector3(point,center);\n intersectedVector.copy(vector);\n intersectedVector.applyQuaternion(this.routeGroup.quaternion);\n intersectedVector.add(this.routeGroup.position);\n const altitude = this.intersectHeightFromVector3(intersectedVector);\n const distance = Math.floor(new Vector3().distanceTo(vector));\n vector.y = altitude + distance / 5;\n\n // const name = obj.tags.name ? obj.tags.name : amenity.charAt(0).toUpperCase() + amenity.slice(1).replace('_',' ');\n\n const label = createLabel(names,icon,color,distance);\n label.position.copy(vector);\n tempVector.copy(vector);\n tempVector.y = -500;\n const lineGeometry = new BufferGeometry().setFromPoints([\n tempVector,\n vector\n ]);\n const line = new Line(lineGeometry,lineMaterial);\n line.name = 'poi_line';\n\n const poiData = {\n id: index,\n to: point,\n from: center,\n route: null\n };\n\n label.element.onclick = () => this.poiHandler(poiData);\n \n this.labels.push({\n line,\n label,\n distance\n });\n\n this.routeGroup.add(label,line);\n // poiHeight += poiHeightStep;\n });\n }\n}\n","'use strict';\n\nimport { latLngAltToVector3, Layer } from './Layer';\nimport { BufferGeometry, CatmullRomCurve3, LinearSRGBColorSpace, Color } from 'three';\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\nimport { LineMaterial } from 'three/examples/jsm/lines/LineMaterial';\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\nimport { EnvironmentLayer } from '../Environment/EnvironmentLayers/EnvironmentLayer';\n// import { settingsData, threeJsVariables } from '../../../settings';\n// import {\n// addBuildingsIntersections,\n// addPoiToIntersection,\n// isBuildingIntersectionsSet,\n// poiIntersection, removePoiFromIntersection,\n// } from '../../poi/poiCss';\n// import { getCurrentLang } from '../langSwitcher/langSwitcher';\n// import { SelectedObjectType } from '../../../common';\n// import { PublicLayers } from './PublicLayers';\n// import { RoadsAdditionalEffect } from '../Environment/EnvironmentLayers/RoadsEnvironment';\n\nexport class Highway extends Layer {\n\n constructor (parent, data) {\n super(parent, data);\n\n this.createLayer();\n // this.roadsEffect = new RoadsAdditionalEffect();\n this.animateCamera = true;\n }\n\n show() {\n super.show();\n EnvironmentLayer.animateCameraShow();\n }\n\n hide() {\n super.hide();\n EnvironmentLayer.animateCameraHide();\n }\n\n async createLayer() {\n\n this.data = await this.response;\n\n if (!this.data) {\n this.btn?.remove();\n return ;\n }\n\n const center = {lat: Number(config.localization.latitude), lng: Number(config.localization.longitude)};\n\n this.data.forEach(el => {\n const points = [];\n const names = {};\n config.languages.forEach(lang => {\n if (el.tags.hasOwnProperty(`name:${lang}`)) {\n names[lang] = el.tags[`name:${lang}`];\n } else if (el.tags.hasOwnProperty('name')) {\n names[lang] = config.dictionary[el.tags.name] ? config.dictionary[el.tags.name][lang] : el.tags.name;\n }\n });\n\n el.geometry.forEach(coords => {\n\n const point = {lat: coords.lat, lng: coords.lon};\n const vector = latLngAltToVector3(point,center);\n\n if (coords.elevation) {\n vector.y = coords.elevation;\n }\n\n points.push(vector);\n\n });\n\n // const curve = new CatmullRomCurve3(points);\n // curve.curveType = 'centripetal';\n // curve.tension = 0.5;\n // const curvedPoint = curve.getPoints(10);\n const geometry = new BufferGeometry().setFromPoints(points);\n const lineGeometry = new LineGeometry().setPositions(geometry.getAttribute('position').array);\n let lineWidth = 0;\n\n if (el.tags.highway === 'motorway') {\n lineWidth = 6;\n } else {\n lineWidth = 5;\n }\n\n const lineMaterial = new LineMaterial({\n color: new Color().setStyle(this.layer.colors[el.tags.highway] || '#ffd000',LinearSRGBColorSpace),\n linewidth: lineWidth,\n dashed: false,\n opacity: 0.9,\n alphaToCoverage: true\n });\n\n lineMaterial.resolution.set( window.innerWidth / 4, window.innerHeight / 4 );\n let line = new Line2(lineGeometry,lineMaterial);\n line.name = 'route';\n line.userData.type = 'route';\n line.userData.routeData = {};\n\n if (Object.keys(names).length) {\n line.userData.routeData.name = names;\n }\n\n line.computeLineDistances();\n line.scale.set(1,1,1);\n\n const dashMaterial = new LineMaterial({\n color: new Color().setStyle(this.layer.colors.dash,LinearSRGBColorSpace),\n linewidth: lineWidth,\n dashed: true,\n dashOffset: 1,\n opacity: 0.6,\n gapSize: 20,\n dashSize: 10,\n alphaToCoverage: true\n });\n\n dashMaterial.resolution.set( window.innerWidth / 4, window.innerHeight / 4 );\n\n const dashLine = new Line2(lineGeometry,dashMaterial);\n dashLine.computeLineDistances();\n dashLine.scale.set(1,1,1);\n\n const direction = this.layer.direction === 'counterclockwise' ? -1 : 1;\n\n\n dashMaterial.tick = () => {\n dashMaterial.dashOffset += direction;\n };\n\n this.animations.push(dashMaterial);\n\n this.routeGroup.add(line);\n this.routeGroup.add(dashLine);\n });\n }\n \n // show() {\n // if (this.active) return;\n //\n // this.roadsEffect.enable().then(() => {\n // threeJsVariables.scene.add(this.routeGroup);\n // threeJsVariables.renderList.reorder();\n // });\n //\n // !isBuildingIntersectionsSet() && addBuildingsIntersections();\n //\n // this.routeGroup.traverse(el => {\n // if (el.type === 'Object3D' && el.name.startsWith('layer-poi')) {\n // const text = el.element.querySelector('.public-label__text') || el.element.querySelector('.public-label__name') ;\n // if (text) {\n // text.innerText = text.getAttribute(`data-lang-${getCurrentLang()}`);\n // }\n // addPoiToIntersection(el);\n // poiIntersection();\n // } else if (el.isMesh && el.userData.type === SelectedObjectType.Route) {\n // settingsData.objects_to_intersection.push(el);\n // }\n // });\n //\n //\n // this.active = true;\n // this.enable();\n // }\n //\n // hide() {\n // this.roadsEffect.disable();\n // this.routeGroup.removeFromParent();\n //\n // this.routeGroup.traverse(el => {\n // if (!el.isGroup) {\n //\n // if (el.type === 'Object3D' && el.name.startsWith('layer-poi')){\n // el.element.remove();\n // removePoiFromIntersection(el);\n // } else {\n // el.geometry.dispose();\n // el.material.dispose();\n // settingsData.objects_to_intersection = settingsData.objects_to_intersection.filter(intersectedObject => intersectedObject !== el);\n // }\n // }\n // });\n // this.animations = this.animations.filter(material => material.name !== 'route_dash');\n // this.removeRoute();\n // this.active = false;\n // this.disable();\n // PublicLayers.scope.hidePopup();\n // }\n\n}\n","'use strict';\n\nimport axios from 'axios';\nimport {\n Group,\n MathUtils,\n Vector3,\n} from 'three';\nimport {isMobile, resourcesFolder, settingsData, threeJsVariables} from '../../../settings';\nimport { createHtmlElement, labelVisibility } from '../../../functions';\nimport {lordIconColors, setLordIcon} from '../../../lordicon';\nimport { CSS2DObject } from '../../../libs/CSS2DRenderer';\nimport {\n addBuildingsIntersections,\n addPoiToIntersection,\n isBuildingIntersectionsSet,\n poiIntersection,\n removePoiFromIntersection,\n} from '../../poi/poiCss';\nimport { Route } from '../../poi/Route';\nimport { GoogleMaps } from '../../api/GoogleMaps';\nimport { changeLangToCurrent, getCurrentLang } from '../langSwitcher/langSwitcher';\nimport { SelectedObjectType } from '../../../common';\nimport { PublicLayers } from './PublicLayers';\nimport {Cloudflare} from \"../../api/Cloudflare\";\nimport {BaseElement} from \"../../interfaces/BaseElement\";\nimport { OrbitDayAndNight } from '../../liveAnimations/DayNight/OrbitDayAndNight';\n\n\nexport class Layer extends Route {\n constructor (parent,layer) {\n super();\n\n if (!layer.active) return;\n\n this.parent = parent;\n this.layer = layer;\n this.type = this.layer.type;\n this.active = false;\n this.url = `${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/points/${this.layer.file}?v=${Cloudflare.version}`;\n this.animations = [];\n this.labels = [];\n this.iconColors = {};\n\n this.btn = createHtmlElement(this.parent,'','button',['public-layer__btn',`${this.layer.type}`]);\n this.btn.setAttribute('data-public-layer',this.layer.type);\n\n this.#getIconColors();\n setLordIcon(this.layer.type,this.btn,{\n trigger: 'hover',\n stroke: 70\n });\n\n this.btnText = createHtmlElement(this.btn,'','span',['public-layer__btn-text', 'language-string']);\n this.btnText.setAttribute('data-dictionary', this.type.charAt(0).toUpperCase() + this.type.slice(1));\n this.btnText.innerHTML = changeLangToCurrent(this.type.charAt(0).toUpperCase() + this.type.slice(1));\n\n this.btn.addEventListener('mouseover', this.mouseOverHandler.bind(this));\n this.btn.addEventListener('mouseout', this.mouseOutHandler.bind(this));\n\n this.routeGroup = new Group();\n this.routeGroup.name = this.layer.type;\n\n const { position,rotation,scale } = this.layer;\n\n this.routeGroup.position.set(position.x,position.y,position.z);\n this.routeGroup.rotation.set(rotation.x,rotation.y,rotation.z);\n this.routeGroup.scale.set(scale.x,scale.y,scale.z);\n\n this.response = this.#getRouteData();\n\n this.animateCamera = false;\n\n return this;\n }\n\n #getIconColors() {\n // const { primaryColor, secondaryColor, activeColor } = getLordIconColor();\n\n this.iconColors.primaryColor = lordIconColors.primary;\n this.iconColors.secondaryColor = lordIconColors.secondary;\n this.iconColors.activeColor = lordIconColors.active;\n }\n\n #getRouteData() {\n\n return new Promise(async (resolve) => {\n\n let data;\n\n try {\n const response = await axios.get(this.url);\n data = response.data.elements;\n }catch (e) {\n data = null;\n }\n\n resolve(data);\n });\n }\n\n mouseOverHandler() {\n !this.active && this.enable();\n }\n\n mouseOutHandler() {\n !this.active && this.disable();\n }\n\n update(delta) {\n this.active && this.animations.forEach(el => el.tick(delta));\n }\n\n show() {\n if (this.active) return;\n\n threeJsVariables.scene.add(this.routeGroup);\n threeJsVariables.renderList.reorder();\n\n !isBuildingIntersectionsSet() && addBuildingsIntersections();\n \n if (!OrbitDayAndNight.isActiveAndSelected) {\n this.hideLabelsByDistance(true);\n }\n\n this.routeGroup.traverse(el => {\n if (el.type === 'Object3D' && el.name.startsWith('layer-poi')) {\n const text = el.element.querySelector('.public-label__text') || el.element.querySelector('.public-label__name') ;\n if (text) {\n text.innerText = text.getAttribute(`data-lang-${getCurrentLang()}`);\n }\n addPoiToIntersection(el);\n poiIntersection();\n } else if (el.isMesh && el.userData.type === SelectedObjectType.Route) {\n settingsData.objects_to_intersection.push(el);\n }\n });\n\n\n this.active = true;\n this.enable();\n }\n \n hideLabelsByDistance(state) {\n const labels = this.labels.filter(label => label.distance > 400);\n labels.forEach(data => labelVisibility(data,state));\n }\n\n hide() {\n this.routeGroup.removeFromParent();\n\n this.routeGroup.traverse(el => {\n if (!el.isGroup) {\n\n if (el.type === 'Object3D' && el.name.startsWith('layer-poi')){\n el.element.remove();\n removePoiFromIntersection(el);\n } else {\n el.geometry.dispose();\n el.material.dispose();\n settingsData.objects_to_intersection = settingsData.objects_to_intersection.filter(intersectedObject => intersectedObject !== el);\n }\n }\n });\n this.animations = this.animations.filter(material => material.name !== 'route_dash');\n this.removeRoute();\n this.active = false;\n this.disable();\n PublicLayers.scope.hidePopup();\n }\n\n disable() {\n if (this.btn.classList.contains('deals'))\n return;\n\n const icon = this.btn.querySelector('.lord__icon');\n icon.setAttribute('colors',`primary:${this.iconColors.primaryColor},secondary:${this.iconColors.secondaryColor}`);\n this.btn.style.color = '';\n }\n\n enable() {\n if (this.btn.classList.contains('deals'))\n return;\n\n const icon = this.btn.querySelector('.lord__icon');\n icon.setAttribute('colors',`primary:${this.iconColors.activeColor},secondary:${this.iconColors.activeColor}`);\n this.btn.style.color = this.iconColors.activeColor;\n }\n\n async poiHandler(poiData) {\n let route;\n\n if (poiData.route) {\n route = poiData.route;\n } else {\n route = await GoogleMaps.getRoute(poiData.from,poiData.to,'WALKING');\n poiData.route = route;\n }\n\n if (isMobile || config.features?.publicLayers?.buildRoutes === false)\n return;\n\n const dashLine = this.drawRoute(route,poiData.id);\n this.animations.push(dashLine);\n\n }\n\n}\n\nexport function createLabel (names, icon, color,distance) {\n // const labelContainer = createHtmlElement('','','div',['public-label']);\n const labelContainer = new BaseElement()\n .addClass('public-label');\n\n let iconLabel;\n if (icon.length === 1) {\n // iconLabel = createHtmlElement(labelContainer.DOMElement,icon,'div',['public-label__type']);\n iconLabel = new BaseElement()\n .addClass('public-label__type')\n .innerHtml(icon)\n .appendTo(labelContainer.DOMElement);\n } else {\n // iconLabel = createHtmlElement(labelContainer.DOMElement,'','div',['public-label__type',`${icon}`]);\n iconLabel = new BaseElement()\n .addClass('public-label__type',`${icon}`)\n .appendTo(labelContainer.DOMElement);\n }\n\n // const textBlock = createHtmlElement(labelContainer.DOMElement,'','div',['public-label__text-block']);\n const textBlock = new BaseElement()\n .addClass('public-label__text-block')\n .appendTo(labelContainer.DOMElement);\n // const text = createHtmlElement(textBlock.DOMElement,`${names[getCurrentLang()]}`,'span',['public-label__text','language-string']);\n const text = new BaseElement('span')\n .addClass('public-label__text','language-string')\n .innerHtml(`${names[getCurrentLang()]}`)\n .appendTo(textBlock.DOMElement);\n Object.entries(names).forEach(([key,value]) => {\n text.addAttribute(`data-lang-${key}`,value);\n });\n\n // createHtmlElement(textBlock.DOMElement,'|','span',['public-label-text__separator']);\n new BaseElement('span')\n .addClass('public-label-text__separator')\n .innerHtml('|')\n .appendTo(textBlock.DOMElement);\n // createHtmlElement(textBlock.DOMElement,`${distance}m`,'span',['public-label__distance']);\n new BaseElement('span')\n .addClass('public-label__distance')\n .appendTo(textBlock.DOMElement)\n .innerHtml(`${distance}m`)\n .appendTo(textBlock.DOMElement);\n\n if (color)\n iconLabel.addStyle('background', color);\n\n const label = new CSS2DObject(labelContainer.DOMElement);\n label.userData.zoom = 1;\n label.name = `layer-poi__${name}`;\n\n return label;\n}\n\nexport function createDealLabel (data) {\n const point = createHtmlElement('','','div',['deals-point', 'hidden']);\n const labelContainer = createHtmlElement(point,'','div',['deals-label']);\n const content = createHtmlElement(labelContainer,'','div',['deals-content']);\n const top = createHtmlElement(content,'','div',['deals-content-top']);\n const bottom = createHtmlElement(content,'','div',['deals-content-bottom']);\n let currency;\n switch (config.localization.currencyLabel) {\n case 'EUR':\n currency = '€';\n break;\n case 'USD':\n currency = '$';\n break;\n case 'UAH':\n currency = '₴';\n break;\n case 'NIS':\n currency = '₪';\n break;\n }\n // const price = createHtmlElement(top,numberWithCommas(data.price,'.') + ` ${currency}`,'span',['deals-currency']);\n new BaseElement('span')\n .addClass('deals-currency')\n .innerHtml(changeLangToCurrent(data.price) + ` ${currency}`)\n .appendTo(top);\n\n Object.entries(data).forEach(([key,value]) => {\n if (key !== 'coords' && key !=='price') {\n // const item = createHtmlElement(bottom,'','div',['deals-item']);\n // const textValue = createHtmlElement(item,value,'span',['deals-item-value']);\n // const subText = createHtmlElement(item,changeLangToCurrent(key),'span',['deals-item-sub-text','language-string']);\n // subText.setAttribute('data-dictionary',key);\n\n const item = new BaseElement()\n .addClass('deals-item')\n .appendTo(bottom);\n new BaseElement('span')\n .addClass('deals-item-value')\n .innerHtml(value)\n .appendTo(item.DOMElement);\n new BaseElement('span')\n .addClass('deals-item-sub-text','language-string')\n .innerHtml(changeLangToCurrent(key))\n .addAttribute('data-dictionary', key)\n .appendTo(item.DOMElement);\n }\n });\n\n const label = new CSS2DObject(point);\n label.userData.zoom = 1;\n label.name = `layer-poi__deals`;\n\n return label;\n}\n\nexport function createNameLabel (names) {\n\n const labelContainer = createHtmlElement('','','div',['public-label']);\n const text = createHtmlElement(labelContainer,`${names[getCurrentLang()]}`,'span',['public-label__name','language-string']);\n\n Object.entries(names).forEach(([key,value]) => {\n text.setAttribute(`data-lang-${key}`,value);\n });\n\n const label = new CSS2DObject(labelContainer);\n label.userData.zoom = 1;\n label.name = `layer-poi__${names[getCurrentLang()]}`;\n\n return label;\n}\n\n\n\n// Calculate vector 3 from lat lng\n\n// const EARTH_RADIUS_METERS = 6378137; // Previously radius\nconst EARTH_RADIUS_METERS = 6270000; // Set custom earth radius\n\nconst {sin, cos, pow, sqrt, atan2,sign} = Math;\nconst {degToRad } = MathUtils;\n\n\nexport function latLngAltToVector3(point, reference, axis = new Vector3(0,1,0).normalize()) {\n const dz = distance(reference, {lng: point.lng, lat: reference.lat});\n const dx = distance(reference, {lng: reference.lng, lat: point.lat});\n\n const sz = sign(point.lng - reference.lng);\n const sx = sign(point.lat - reference.lat);\n const v = new Vector3(sx * dx, 0, sz * dz);\n v.applyAxisAngle(axis,Math.PI);\n\n return v;\n}\n\nfunction distance(from, to){\n const {lat: latFrom, lng: lngFrom} = from;\n const {lat: latTo, lng: lngTo} = to;\n\n const dLat = degToRad(latTo - latFrom);\n const dLon = degToRad(lngTo - lngFrom);\n const lat1 = degToRad(latFrom);\n const lat2 = degToRad(latTo);\n\n const a = pow(sin(dLat / 2), 2) + pow(sin(dLon / 2), 2) * cos(lat1) * cos(lat2);\n\n return 2 * atan2(sqrt(a), sqrt(1 - a)) * EARTH_RADIUS_METERS;\n}\n","'use strict';\n\nimport { createLabel, latLngAltToVector3, Layer } from './Layer';\nimport { BufferGeometry, Line, LineBasicMaterial, Vector3 } from 'three';\n\nexport class Leisure extends Layer {\n\n constructor (parent, data) {\n super(parent, data);\n\n this.createLayer();\n }\n\n async createLayer() {\n\n this.data = await this.response;\n\n if (!this.data) {\n this.btn?.remove();\n return;\n }\n\n const center = {lat: Number(config.localization.latitude), lng: Number(config.localization.longitude)};\n const lineMaterial = new LineBasicMaterial({color: '#ffffff',transparent: true});\n const tempVector = new Vector3();\n const intersectedVector = new Vector3();\n\n this.data.forEach((obj,index) => {\n const leisure = obj.tags.leisure || obj.tags.amenity;\n const names = {};\n config.languages.forEach(lang => {\n if (obj.tags.hasOwnProperty(`name:${lang}`)) {\n names[lang] = obj.tags[`name:${lang}`];\n } else if (obj.tags.hasOwnProperty('name')) {\n names[lang] = config.dictionary[obj.tags.name] ? config.dictionary[obj.tags.name][lang] : obj.tags.name;\n } else {\n const dKey = leisure.charAt(0).toUpperCase() + leisure.slice(1).replace('_',' ');\n names[lang] = config.dictionary[dKey] ? config.dictionary[dKey][lang] : dKey;\n }\n });\n\n let point;\n\n switch (obj.type) {\n case 'node':\n point = {lat: obj.lat, lng: obj.lon};\n break;\n case 'way':\n point = {lat: obj.center.lat, lng: obj.center.lon};\n break;\n\n }\n\n let icon;\n let color;\n\n const pointOfInterest = this.layer.pointsOfInterest[leisure];\n\n if (pointOfInterest) {\n color = pointOfInterest.color ? pointOfInterest.color : '#bfbfbf';\n icon = pointOfInterest.icon ? pointOfInterest.icon : leisure.charAt(0).toUpperCase();\n } else {\n color = '#bfbfbf';\n icon = leisure.charAt(0).toUpperCase();\n }\n\n const vector = latLngAltToVector3(point,center);\n intersectedVector.copy(vector);\n intersectedVector.applyQuaternion(this.routeGroup.quaternion);\n intersectedVector.add(this.routeGroup.position);\n const altitude = this.intersectHeightFromVector3(intersectedVector);\n const distance = Math.floor(new Vector3().distanceTo(vector));\n vector.y = altitude + distance / 5;\n\n // const name = obj.tags.name ? obj.tags.name : leisure.charAt(0).toUpperCase() + leisure.slice(1).replace('_',' ');\n\n const label = createLabel(names,icon,color,distance);\n label.position.copy(vector);\n tempVector.copy(vector);\n tempVector.y = -500;\n const lineGeometry = new BufferGeometry().setFromPoints([\n tempVector,\n vector\n ]);\n const line = new Line(lineGeometry,lineMaterial);\n line.name = 'poi_line';\n\n const poiData = {\n id: index,\n to: point,\n from: center,\n route: null\n };\n\n label.element.onclick = () => this.poiHandler(poiData);\n \n this.labels.push({\n line,\n label,\n distance\n });\n\n this.routeGroup.add(label,line);\n });\n\n }\n\n}\n","'use strict';\n\nimport { latLngAltToVector3, Layer } from './Layer';\nimport {Vector3} from \"three\";\nimport { Orbit360Viewer } from './Orbit360Viewer';\n\nexport class Orbit360 extends Layer {\n constructor (parent, data) {\n super(parent, data);\n\n return this.createLayer();\n }\n\n async createLayer() {\n this.data = await this.response;\n this.btn?.remove();\n const labels = [];\n\n const center = {lat: Number(config.localization.latitude), lng: Number(config.localization.longitude)};\n this.data.forEach(el => {\n if (el?.x && el?.z) {\n const vector = new Vector3(el.x, 0, el.z);\n vector.y = el.altitude;\n const labelScope = new Orbit360Viewer(el);\n labelScope.label.position.copy(vector);\n labels.push(labelScope.label);\n } else {\n const coords = {lat: el.lat, lng: el.lng};\n const vector = latLngAltToVector3(coords,center);\n vector.y = el.altitude;\n const labelScope = new Orbit360Viewer(el);\n labelScope.label.position.copy(vector);\n labels.push(labelScope.label);\n }\n });\n\n return labels;\n }\n\n}\n\n\n","'use strict';\n\nimport { BaseElement } from '../../interfaces/BaseElement';\nimport { getCurrentLang } from '../langSwitcher/langSwitcher';\nimport { CSS2DObject } from '../../../libs/CSS2DRenderer';\nimport { Cloudflare } from '../../api/Cloudflare';\nimport { isMobile, settingsData } from '../../../settings';\nimport { Button } from '../../interfaces/buttons/Button';\nimport { DreamsPreloader } from '../preloader/DreamsPreloader';\nimport { PhotoSwiperGallery } from '../../menu/gallery/galleryDesktop';\n\nexport class Orbit360Viewer {\n\n constructor (data) {\n if (!data.url.length) return;\n this.data = data;\n this.url = new URL(data.url);\n this.objectType = 'CSSLabel';\n this.type = this.url.pathname.match(/\\.(htm|html)/g) ? '360' : 'img';\n this.preview360Url = data?.preview360;\n this.gallery = data?.gallery && data?.gallery.length > 0 ? data.gallery : null;\n this.label = this.createLabel();\n }\n\n createLabel() {\n const container = new BaseElement()\n .addClass('orbit-360-label');\n const titles = this.data.title;\n if (titles && Object.keys(titles).length) {\n const translation = titles[getCurrentLang()] || '';\n const title = new BaseElement('span')\n .addClass('poi__title','orbit-360__title','language-string')\n .innerHtml(translation)\n .appendTo(container.DOMElement);\n Object.entries(titles).forEach(([lang,text]) => {\n title.addAttribute(`data-lang-${lang}`,text);\n });\n }\n const icon = new BaseElement()\n .appendTo(container.DOMElement);\n\n if (this.type === '360') {\n if (Boolean(this.preview360Url)) {\n this.#addPreviewImageToLabel(container, this.preview360Url);\n } else {\n icon.addClass('icon-360');\n }\n } else {\n this.#addPreviewImageToLabel(container, this.url);\n }\n\n const label = new CSS2DObject(container.DOMElement);\n label.userData.zoom = 1;\n if (!this.data.hasOwnProperty('event') || (this.data.hasOwnProperty('event') && this.data.event)) {\n label.element.addEventListener('click',this.clickHandler.bind(this));\n }\n label.name =`layer-poi__orbit-360`;\n return label;\n }\n\n #addPreviewImageToLabel(container, imageUrl) {\n container.addClass('image-icon');\n const labelDOM = container.DOMElement;\n const previewIconImage = Cloudflare.resize(imageUrl,{\n width: 200,\n quality: 60\n });\n labelDOM.style.backgroundImage = `url(${previewIconImage})`;\n }\n\n clickHandler() {\n settingsData.stopRender = true;\n this.mainContainer = new BaseElement()\n .addClass('orbit-360-viewer')\n .appendTo(document.body);\n const content = new BaseElement()\n .addClass('orbit-360-viewer__content')\n .appendTo(this.mainContainer.DOMElement);\n\n let viewer;\n\n if (this.type === '360') {\n new Button()\n .addClass('icon-close')\n .event('click', this.closeHandler.bind(this))\n .appendTo(content.DOMElement);\n this.preloader = new BaseElement()\n .addClass('orbit-360-preloader')\n .appendTo(content.DOMElement);\n new DreamsPreloader(this.preloader.DOMElement,'orbit-360-pr').show();\n viewer = new BaseElement('iframe')\n .addClass('orbit-360-viewer__player','player-iframe')\n .addAttribute('src',this.url.href)\n .appendTo(content.DOMElement);\n viewer.DOMElement.onload = () => this.preloader.remove();\n } else {\n viewer = new BaseElement('div')\n .addClass('orbit-360-viewer__player','player-img')\n .appendTo(content.DOMElement);\n\n let data = this.gallery && this.gallery.length ? this.gallery : [this.url.href];\n data = data.map(url => Cloudflare.resize(url,{width: isMobile ? 1024 : 2880}));\n const gallery = new PhotoSwiperGallery(data,0,viewer.DOMElement);\n gallery.onClose = () => this.closeHandler();\n gallery.open();\n }\n }\n\n closeHandler() {\n this.mainContainer.remove();\n settingsData.stopRender = false;\n }\n\n visibilityToggle(state) {\n this.label.visible = state;\n }\n}\n","'use strict';\n\nimport { createLabel, latLngAltToVector3, Layer } from './Layer';\nimport {\n BufferGeometry,\n Line,\n LineBasicMaterial,\n Vector3,\n} from 'three';\n\nexport class Parks extends Layer {\n constructor (parent, data) {\n super(parent, data);\n\n this.createLayer();\n }\n\n async createLayer() {\n\n this.data = await this.response;\n\n if (!this.data) {\n this.btn?.remove();\n return ;\n }\n\n const center = {lat: Number(config.localization.latitude), lng: Number(config.localization.longitude)};\n const lineMaterial = new LineBasicMaterial({color: '#ffffff',transparent: true});\n const tempVector = new Vector3();\n const intersectedVector = new Vector3();\n\n this.data.forEach((obj,index) => {\n const leisure = obj.tags.leisure;\n const names = {};\n config.languages.forEach(lang => {\n if (obj.tags.hasOwnProperty(`name:${lang}`)) {\n names[lang] = obj.tags[`name:${lang}`];\n } else if (obj.tags.hasOwnProperty('name')) {\n names[lang] = config.dictionary[obj.tags.name] ? config.dictionary[obj.tags.name][lang] : obj.tags.name;\n } else {\n const dKey = leisure.charAt(0).toUpperCase() + leisure.slice(1).replace('_',' ');\n names[lang] = config.dictionary[dKey] ? config.dictionary[dKey][lang] : dKey;\n }\n });\n let point;\n\n switch (obj.type) {\n case 'node':\n point = {lat: obj.lat, lng: obj.lon};\n break;\n case 'way':\n point = {lat: obj.center.lat, lng: obj.center.lon};\n break;\n\n }\n\n let icon;\n let color;\n\n const pointOfInterest = this.layer.pointsOfInterest[leisure];\n\n if (pointOfInterest) {\n color = pointOfInterest.color ? pointOfInterest.color : '#bfbfbf';\n icon = pointOfInterest.icon ? pointOfInterest.icon : leisure.charAt(0).toUpperCase();\n } else {\n color = '#bfbfbf';\n icon = leisure.charAt(0).toUpperCase();\n }\n\n if (!Boolean(point))\n return;\n const vector = latLngAltToVector3(point,center);\n intersectedVector.copy(vector);\n intersectedVector.applyQuaternion(this.routeGroup.quaternion);\n intersectedVector.add(this.routeGroup.position);\n const altitude = this.intersectHeightFromVector3(intersectedVector);\n const distance = Math.floor(new Vector3().distanceTo(vector));\n vector.y = altitude + distance / 5;\n\n const label = createLabel(names,icon,color,distance);\n label.position.copy(vector);\n tempVector.copy(vector);\n tempVector.y = -500;\n const lineGeometry = new BufferGeometry().setFromPoints([\n tempVector,\n vector\n ]);\n const line = new Line(lineGeometry,lineMaterial);\n line.name = 'poi_line';\n\n const poiData = {\n id: index,\n to: point,\n from: center,\n route: null\n };\n\n label.element.onclick = () => this.poiHandler(poiData);\n \n this.labels.push({\n line,\n label,\n distance\n });\n\n this.routeGroup.add(label,line);\n });\n }\n\n}\n","'use strict';\n\nimport { addPoiToIntersection, hidePOILabelsByDistance, poiIntersection, poiToggle } from '../../poi/poiCss';\nimport { createHtmlElement, rgbaToHexA } from '../../../functions';\nimport { setLordIcon } from '../../../lordicon';\nimport {changeLangToCurrent} from \"../langSwitcher/langSwitcher\";\nimport { GoogleMaps } from '../../api/GoogleMaps';\nimport { Route } from '../../poi/Route';\nimport { settingsData, threeJsVariables } from '../../../settings';\nimport { Orbit360 } from './Orbit360';\nimport {Group, Vector3} from \"three\";\nimport {Deals} from \"./Deals\";\nimport { Objects } from '../../threejs/Objects/Objects';\nimport { ViewMode } from '../../../common';\nimport { OrbitDayAndNight } from '../../liveAnimations/DayNight/OrbitDayAndNight';\n\n\nexport class PoiLayer extends Route{\n\n constructor (parent) {\n super();\n this.active = false;\n this.type = 'poi';\n this.id = 'poi';\n this.iconColors = {};\n this.route = null;\n this.btn = createHtmlElement('','','button',['public-layer__btn',`poi`]);\n this.btn.setAttribute('data-public-layer','poi');\n parent.insertAdjacentElement('afterbegin', this.btn);\n\n this.#getIconColors();\n setLordIcon('map',this.btn,{\n trigger: 'hover',\n stroke: 70\n });\n\n this.btnText = createHtmlElement(this.btn,'','span',['public-layer__btn-text', 'language-string']);\n this.btnText.setAttribute('data-dictionary', 'Popular');\n this.btnText.innerHTML = changeLangToCurrent('Popular');\n this.btn.addEventListener('mouseover', this.mouseOverHandler.bind(this));\n this.btn.addEventListener('mouseout', this.mouseOutHandler.bind(this));\n\n const orbit360Data = config.features.publicLayers.layers.find(layer => layer.type === '360');\n if (orbit360Data && !Objects.useLabelsFromBundle) {\n this.orbit360Points = new Orbit360(document.querySelector('.public-layers__elements'),orbit360Data);\n this.orbit360Points.then(labels => {\n const group = threeJsVariables.scene.getObjectByName('Poi group');\n group.add(...labels);\n labels.forEach(label => addPoiToIntersection(label));\n poiIntersection();\n });\n }\n\n const dealsData = config.features.publicLayers.layers.find(layer => layer.type === 'deals');\n if (dealsData && dealsData.active) {\n const deals = new Deals(document.querySelector('.public-layers__elements'), dealsData);\n deals.then(labels => {\n const rotation = new Vector3();\n if (config.features.poi.rotation) {\n rotation.set(\n config.features.poi.rotation.x,\n config.features.poi.rotation.y,\n config.features.poi.rotation.z\n )\n } else {\n rotation.y = config.threejs.compass.correction - Math.PI / 2;\n }\n\n const position = config.features.poi.position || {x: 0, y: 0, z: 0};\n const dealsGroup = new Group();\n dealsGroup.name = 'Deals group';\n dealsGroup.rotation.setFromVector3(rotation);\n dealsGroup.position.set(position.x, 0, position.z);\n\n threeJsVariables.scene.add(dealsGroup);\n threeJsVariables.renderList.reorder();\n\n dealsGroup.add(...labels);\n labels.forEach(label => addPoiToIntersection(label));\n poiIntersection();\n });\n\n const {primary,secondary} = config.features.icons.color;\n\n const primaryRgba = config.style.colors.find(color => color.key === primary) || { value: '255,255,255,1' };\n const secondaryRgba = config.style.colors.find(color => color.key === secondary) || { value: '255,255,255,1' };\n const activeRgba = config.style.colors.find(color => color.key === 'brand2');\n\n const primaryColor = rgbaToHexA(primaryRgba.value.split(','),false);\n const secondaryColor = rgbaToHexA(secondaryRgba.value.split(','),false);\n const activeColor = rgbaToHexA(activeRgba.value.split(','), false);\n\n const dealsButtonElement = document.querySelector('.public-layer__btn.deals');\n dealsButtonElement.setAttribute('state', 'non-pressed');\n dealsButtonElement.addEventListener('mouseover', () => {\n const state = dealsButtonElement.getAttribute('state');\n if (state === 'pressed')\n return;\n\n const icon = dealsButtonElement.querySelector('.lord__icon');\n icon.setAttribute('colors',`primary:${activeColor},secondary:${activeColor}`);\n dealsButtonElement.style.color = activeColor;\n });\n dealsButtonElement.addEventListener('mouseout', () => {\n const state = dealsButtonElement.getAttribute('state');\n if (state === 'pressed')\n return;\n\n const icon = dealsButtonElement.querySelector('.lord__icon');\n icon.setAttribute('colors',`primary:${primaryColor},secondary:${secondaryColor}`);\n dealsButtonElement.style.color = '';\n });\n }\n }\n\n mouseOverHandler() {\n !this.active && this.enable();\n }\n\n mouseOutHandler() {\n !this.active && this.disable();\n }\n\n publicButtonHandler() {\n if (this.active) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n #getIconColors() {\n const {primary,secondary} = config.features.icons.color;\n\n const primaryRgba = config.style.colors.find(color => color.key === primary) || { value: '255,255,255,1' };\n const secondaryRgba = config.style.colors.find(color => color.key === secondary) || { value: '255,255,255,1' };\n const activeRgba = config.style.colors.find(color => color.key === 'brand2');\n\n this.iconColors.primaryColor = rgbaToHexA(primaryRgba.value.split(','),false);\n this.iconColors.secondaryColor = rgbaToHexA(secondaryRgba.value.split(','),false);\n this.iconColors.activeColor = rgbaToHexA(activeRgba.value.split(','), false);\n }\n\n show() {\n if (settingsData.activeViewMode === ViewMode.Orbit) {\n this.active = true;\n poiToggle(true,true);\n Objects.visibilityCSSLabels(true);\n this.enable();\n if (!OrbitDayAndNight.isActiveAndSelected) {\n this.hideLabelsByDistance(true);\n }\n }\n }\n \n hideLabelsByDistance(state) {\n // hidePOILabelsByDistance(state);\n }\n\n hide() {\n this.active = false;\n poiToggle(false,false);\n Objects.visibilityCSSLabels(false);\n this.removeRoute();\n this.disable();\n }\n\n removeRoute(){\n super.removeRoute();\n this.route = null;\n }\n\n disable() {\n if (this.btn) {\n const icon = this.btn.querySelector('.lord__icon');\n icon.setAttribute('colors',`primary:${this.iconColors.primaryColor},secondary:${this.iconColors.secondaryColor}`);\n this.btn.style.color = '';\n }\n }\n\n enable() {\n if (this.btn) {\n const icon = this.btn.querySelector('.lord__icon');\n icon.setAttribute('colors',`primary:${this.iconColors.activeColor},secondary:${this.iconColors.activeColor}`);\n this.btn.style.color = this.iconColors.activeColor;\n }\n }\n\n tick(delta) {\n this.route && this.route.tick(delta);\n }\n\n update(delta) {\n this.route && this.route.tick(delta);\n }\n\n async drawRoute(poiMarker,order) {\n\n this.removeRoute();\n\n let route;\n\n if (poiMarker.data.routeResponce.DRIVING) {\n route = poiMarker.data.routeResponce.DRIVING;\n } else {\n\n const from = {\n lat: Number(config.localization.latitude),\n lng: Number(config.localization.longitude)\n };\n\n const to = {\n lat: poiMarker.position.lat(),\n lng: poiMarker.position.lng()\n };\n\n route = await GoogleMaps.getRoute(from,to);\n poiMarker.data.routeResponce.DRIVING = route;\n }\n\n this.route = super.drawRoute(route,order);\n }\n\n}\n","'use strict';\n\n\nimport {threeJsVariables, UIRoot} from '../../../settings';\nimport {BaseElement} from \"../../interfaces/BaseElement\";\n\n// const popup = createHtmlElement(UIRoot,'','div',['public-layer-popup','hidden']);\n\nexport class Popup {\n\n constructor () {\n this.popup = new BaseElement()\n .addClass('public-layer-popup','hidden')\n .appendTo(UIRoot);\n }\n\n showPopup() {\n // this.popup.style.left = threeJsVariables.mouse.winX + 'px';\n // this.popup.style.top = threeJsVariables.mouse.winY + 'px';\n // this.popup.classList.remove('hidden');\n this.popup\n .addStyle('left', threeJsVariables.mouse.winX + 'px')\n .addStyle('top', threeJsVariables.mouse.winY + 'px')\n .removeClass('hidden');\n }\n\n hidePopup() {\n // this.popup.style.left = '';\n // this.popup.style.top = '';\n // this.popup.classList.add('hidden');\n this.popup\n .addStyle('left', '')\n .addStyle('top', '')\n .addClass('hidden');\n }\n\n updatePopupPosition() {\n if (!this.popup.DOMElement.classList.contains('hidden')){\n // this.popup.style.left = threeJsVariables.mouse.winX + 'px';\n // this.popup.style.top = threeJsVariables.mouse.winY + 'px';\n this.popup\n .addStyle('left', threeJsVariables.mouse.winX + 'px')\n .addStyle('top', threeJsVariables.mouse.winY + 'px');\n }\n }\n\n set popupContent(content) {\n while (this.popup.DOMElement.firstElementChild) {\n this.popup.DOMElement.firstElementChild.remove();\n }\n this.popup.innerHtml(content);\n }\n}","'use strict';\n\n\nimport { projectMode } from '../../../settings';\nimport { createHtmlElement } from '../../../functions';\nimport { changeLangToCurrent, getCurrentLang } from '../langSwitcher/langSwitcher';\nimport { Highway } from './Highway';\nimport { Railway } from './Railway';\nimport { Education } from './Education';\nimport { Leisure } from './Leisure';\nimport { Fun } from './Fun';\nimport { closePoiInfoWindowCardInOrbit } from '../../poi/poiCss';\nimport { buildingHoverOut } from '../../threejs/raycast';\nimport { Parks } from './Parks';\nimport { Deals } from './Deals';\nimport { Popup } from './Popup';\n\nexport class PublicLayers extends Popup{\n static layerScopes = [];\n static activeLayer = null;\n static active = false;\n static scope = null;\n \n constructor (parent) {\n super();\n if (projectMode.LiteMode.isActive() || !config.features.publicLayers) return;\n\n PublicLayers.active = config.features.publicLayers?.active || false;\n this.layers = config.features.publicLayers?.layers || [];\n this.checked = config.features.publicLayers?.checked || false;\n\n if (!PublicLayers.active) return;\n\n this.parent = parent;\n\n createDisplayOption.apply(this);\n PublicLayers.scope = this;\n }\n\n clickHandler({ target }) {\n\n if (target.classList.contains('lord__icon') || target.classList.contains('public-layer__btn') || target.classList.contains('public-layer__btn-text')){\n\n let layerType;\n\n if (target.classList.contains('lord__icon') || target.classList.contains('public-layer__btn-text')) {\n layerType = target.parentElement.getAttribute('data-public-layer');\n } else if (target.classList.contains('public-layer__btn')) {\n layerType = target.getAttribute('data-public-layer');\n }\n\n const scope = PublicLayers.layerScopes.find(layer => layer.type === layerType);\n\n if (PublicLayers.activeLayer) {\n\n if (PublicLayers.activeLayer.type === scope.type){\n PublicLayers.activeLayer.hide();\n PublicLayers.activeLayer = null;\n } else {\n PublicLayers.activeLayer.hide();\n PublicLayers.activeLayer = scope;\n scope.show();\n }\n\n } else {\n PublicLayers.activeLayer = scope;\n scope.show();\n }\n closePoiInfoWindowCardInOrbit();\n\n // if (PublicLayers.activeLayers.length > 1) {\n // this.clearBtnToggle('show');\n // } else {\n // this.clearBtnToggle('hide');\n // }\n }\n }\n\n // clearHandler() {\n // PublicLayers.hide();\n // PublicLayers.activeLayers = [];\n // this.clearBtnToggle('hide');\n // }\n\n clearBtnToggle(action) {\n switch (action) {\n case 'show':\n this.clearAllBtn?.classList.remove('hidden');\n break;\n case 'hide':\n this.clearAllBtn?.classList.add('hidden');\n break;\n }\n }\n\n static animate(delta) {\n if (PublicLayers.isActive) {\n PublicLayers.layerScopes.forEach(el => el.update(delta));\n }\n }\n\n static addLayer(scope) {\n PublicLayers.layerScopes.push(scope);\n }\n\n static getLayer(type) {\n return PublicLayers.layerScopes.find(layer => layer.type === type);\n }\n \n static hideLabelsByDistance(state) {\n PublicLayers.layerScopes.forEach(scope => scope.hideLabelsByDistance(state));\n }\n\n static hide() {\n if (PublicLayers.activeLayer) {\n PublicLayers.activeLayer.hide();\n }\n }\n\n static show() {\n if (PublicLayers.activeLayer) {\n PublicLayers.activeLayer.show();\n }\n }\n\n static intersect(el) {\n if (!PublicLayers.isActive) return;\n\n const highwayLayer = PublicLayers.getLayer('highway');\n if (!highwayLayer || highwayLayer && !highwayLayer.active) return;\n switch (typeof el) {\n case 'object':\n if (el.userData.routeData.name) {\n PublicLayers.scope.popupContent = el.userData.routeData.name[getCurrentLang()];\n PublicLayers.scope.showPopup();\n buildingHoverOut();\n } else {\n PublicLayers.scope.hidePopup();\n }\n break;\n case 'string':\n PublicLayers.scope.updatePopupPosition();\n break;\n\n case 'undefined':\n PublicLayers.scope.hidePopup();\n break;\n\n }\n }\n\n static get isActive() {\n return PublicLayers.active;\n }\n}\n\nfunction createDisplayOption () {\n this.routsContainer = createHtmlElement(this.parent,'','div',['public-layers','display-option']);\n createHtmlElement(this.routsContainer,'','div',['public-layers__toggle-block']);\n // const title = createHtmlElement(toggleBlock,changeLangToCurrent('Public layers'),'span',['public-layers__title','language-string']);\n // title.setAttribute('data-dictionary','Public layers');\n // this.clearAllBtn = createHtmlElement(toggleBlock,changeLangToCurrent('clear layers'),'button',['public-layers-clear-btn','language-string','hidden']);\n // this.clearAllBtn.setAttribute('data-dictionary','clear layers');\n // this.clearAllBtn.addEventListener('click', this.clearHandler.bind(this));\n\n // const checkedSwitcher = config.features.publicLayers.checked;\n\n // this.toggle = new Switch(toggleBlock);\n // this.toggle.checked = checkedSwitcher;\n // this.toggle.listener = this.toggleHandler.bind(this);\n\n this.publicRoutsContainer = createHtmlElement(this.routsContainer,'','div',['public-layers__elements']);\n\n // !checkedSwitcher && this.publicRoutsContainer.classList.add('disabled');\n\n this.layers.forEach(layerData => {\n if (!layerData.active)\n return;\n\n let layer;\n\n switch (layerData.type) {\n case 'highway':\n layer = new Highway(this.publicRoutsContainer,layerData);\n break;\n\n case 'parks':\n layer = new Parks(this.publicRoutsContainer,layerData);\n break;\n\n case 'railway':\n layer = new Railway(this.publicRoutsContainer,layerData);\n break;\n\n case 'education':\n layer = new Education(this.publicRoutsContainer,layerData);\n break;\n\n case 'leisure':\n layer = new Leisure(this.publicRoutsContainer,layerData);\n break;\n\n case 'fun':\n layer = new Fun(this.publicRoutsContainer,layerData);\n break;\n case 'deals':\n layer = new Deals(this.publicRoutsContainer,layerData);\n break;\n // case '360':\n // layer = new Orbit360(this.publicRoutsContainer,layerData);\n // break;\n\n }\n\n if (layer) {\n PublicLayers.addLayer(layer);\n }\n });\n\n this.publicRoutsContainer.addEventListener('click', this.clickHandler.bind(this));\n\n // const event = new Event('change');\n // this.toggle.checkbox.dispatchEvent(event);\n}\n\nwindow.pl = PublicLayers;\n","'use strict';\n\n\nimport { createLabel, createNameLabel, latLngAltToVector3, Layer } from './Layer';\nimport {\n Box2,\n BufferGeometry, LinearSRGBColorSpace,\n Vector2,\n Vector3,\n Color\n} from 'three';\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\nimport { LineMaterial } from 'three/examples/jsm/lines/LineMaterial';\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\nimport { EnvironmentLayer } from '../Environment/EnvironmentLayers/EnvironmentLayer';\n\nexport class Railway extends Layer {\n\n constructor (parent, data) {\n super(parent, data);\n\n this.createLayer();\n this.animateCamera = true;\n }\n\n show() {\n super.show();\n EnvironmentLayer.animateCameraShow();\n }\n\n hide() {\n super.hide();\n EnvironmentLayer.animateCameraHide();\n }\n\n async createLayer() {\n\n this.data = await this.response;\n\n if (!this.data) {\n this.btn?.remove();\n return ;\n }\n\n const center = {lat: Number(config.localization.latitude), lng: Number(config.localization.longitude)};\n const zeroVector = new Vector3();\n const box = new Box2();\n const minV2 = new Vector2();\n const maxV2 = new Vector2();\n const platformCenter = new Vector2();\n\n const platforms = this.data.filter(el => el.type === 'way');\n platforms.forEach((platform,index) => {\n minV2.set(platform.bounds.minlat,platform.bounds.minlon);\n maxV2.set(platform.bounds.maxlat,platform.bounds.maxlon);\n box.set(minV2,maxV2).getCenter(platformCenter);\n const point = {lat: platformCenter.x, lng: platformCenter.y};\n const vector = latLngAltToVector3(point,center);\n const distance = Math.floor(zeroVector.distanceTo(vector));\n\n if (distance < this.layer.distance) {\n const color = platform.tags.building ? '#0814ff' : '#f50202';\n const names = {};\n config.languages.forEach(lang => {\n if (platform.tags.building) {\n names[lang] = config.dictionary['Station'] ? config.dictionary['Station'][lang] : 'Station';\n } else {\n names[lang] = config.dictionary['Platform'] ? config.dictionary['Platform'][lang] : 'Platform';\n }\n });\n\n const label = createLabel(names,'icon-subway2',color,distance);\n label.position.copy(vector);\n\n const poiData = {\n id: index,\n to: point,\n from: center,\n route: null\n };\n\n label.element.onclick = () => this.poiHandler(poiData);\n \n this.labels.push({\n label,\n distance\n });\n this.routeGroup.add(label);\n }\n });\n\n this.data = this.data.filter(el => el.type === 'relation');\n\n this.data.forEach(relation => {\n const routeType = relation.tags.route;\n const proposedState = relation.tags.state === 'proposed';\n const constructionState = relation.tags.state === 'construction';\n const relationNames = {};\n\n config.languages.forEach(lang => {\n if (relation.tags.hasOwnProperty(`name:${lang}`)) {\n relationNames[lang] = relation.tags[`name:${lang}`];\n } else {\n relationNames[lang] = relation.tags.name;\n relationNames[lang] = config.dictionary[relation.tags.name] ? config.dictionary[relation.tags.name][lang] : relation.tags.name;\n }\n });\n\n const ways = relation.members.filter(el => el.type === 'way');\n let reverse = 0;\n const relationPoints = [];\n\n ways.forEach((way,index) => {\n const points = [];\n\n way.geometry.forEach(coords => {\n const point = {lat: coords.lat, lng: coords.lon};\n const vector = latLngAltToVector3(point,center);\n const distance = vector.distanceTo(zeroVector);\n\n if (distance < this.layer.distance) {\n\n if (coords.elevation) {\n vector.y = coords.elevation;\n }\n\n points.push(vector);\n }\n });\n\n if (!points.length) return;\n relationPoints.push(...points);\n\n let direction = this.layer.direction === 'counterclockwise' ? -1 : 1;\n\n if (reverse % 2 !== 0) {\n direction *= -1;\n }\n\n reverse++;\n\n const geometry = new BufferGeometry().setFromPoints(points);\n const lineGeometry = new LineGeometry().setPositions(geometry.getAttribute('position').array);\n const lineMaterial = new LineMaterial({\n color: new Color().setStyle(proposedState ? this.layer.colors['proposed'] : constructionState ? this.layer.colors['construction'] : this.layer.colors[routeType],LinearSRGBColorSpace),\n linewidth: 5,\n dashed: false,\n opacity: 0.9,\n alphaToCoverage: true\n });\n\n lineMaterial.resolution.set( window.innerWidth / 4, window.innerHeight / 4 );\n\n const line = new Line2(lineGeometry,lineMaterial);\n line.computeLineDistances();\n line.scale.set(1,1,1);\n\n\n const dashMaterial = new LineMaterial({\n color: new Color().setStyle('#ffffff',LinearSRGBColorSpace),\n linewidth: 5,\n dashed: true,\n dashOffset: 1,\n opacity: 0.6,\n gapSize: 20,\n dashSize: 10,\n alphaToCoverage: true\n });\n\n dashMaterial.resolution.set( window.innerWidth / 4, window.innerHeight / 4 );\n\n const dashLine = new Line2(lineGeometry,dashMaterial);\n dashLine.computeLineDistances();\n dashLine.scale.set(1,1,1);\n\n dashMaterial.tick = () => {\n dashMaterial.dashOffset += direction;\n };\n\n this.animations.push(dashMaterial);\n this.routeGroup.add(line);\n this.routeGroup.add(dashLine);\n });\n\n //Relation name\n\n if (relationPoints.length) {\n if (relation.tags.hasOwnProperty('from')) {\n const relationStart = relationPoints[0];\n const relationName = createNameLabel(relationNames);\n relationName.position.copy(relationStart);\n this.routeGroup.add(relationName);\n\n } else {\n const max = Math.max(...relationPoints.map(point => point.distanceTo(zeroVector)));\n const relationStart = relationPoints[0];\n const relationEnd = relationPoints.find(el => el.length() === max);\n\n [relationStart,relationEnd].forEach(point => {\n const relationName = createNameLabel(relationNames);\n relationName.position.copy(point);\n this.routeGroup.add(relationName);\n });\n }\n }\n\n });\n\n }\n\n}\n","'use strict';\n\nimport { clamp, createHtmlElement } from '../../../functions';\nimport JSShare from \"../../../libs/share/jsshare\";\nimport { isDesktop, isMobile, isTablet, settingsData } from '../../../settings';\nimport {BaseElement} from \"../../interfaces/BaseElement\";\nimport { DropDown } from '../../interfaces/DropDown';\nimport { changeLangToCurrent, getCurrentLangDirection } from '../langSwitcher/langSwitcher';\nimport Notiflix from 'notiflix';\nimport Hammer from 'hammerjs';\n\n\nexport class SocialMedia {\n\n constructor (parent, urlType) {\n if (!config.features.socialMedia?.active) return;\n\n this.parent = parent;\n // this.btn = createHtmlElement(this.parent,'','div',['social-media-btn','icon-share']);\n this.btn = new BaseElement()\n .addClass('social-media-btn','icon-share')\n .appendTo(this.parent);\n\n switch (urlType) {\n case 'domain':\n this.url = new URL(window.location.href).origin;\n break;\n case 'apt':\n if (!settingsData.lastClickedFlat.userData?.crm_data.bmbyPropID) {\n setTimeout(() => {\n this.url = new URL(window.location.href).origin + `/?card=${settingsData.lastClickedFlat.userData.crm_data.bmbyPropID}`;\n }, 1000);\n } else {\n this.url = new URL(window.location.href).origin + `/?card=${settingsData.lastClickedFlat.userData.crm_data.bmbyPropID}`;\n }\n break;\n }\n\n // this.closeHandler = this.#closeHandler.bind(this);\n this.btn.event('click', this.#openHandler.bind(this));\n\n this.dropDown = new DropDown(this.btn.DOMElement,'share-dropdown',{note: true});\n // if (!isMobile) {\n this.dropDown.overflow = true;\n this.dropDown.overflowStopSelector = isMobile ? '#app' : '#ui';\n // }\n\n this.dropDown.setCustomHandler(() => {});\n this.dropDown.create();\n const socialMedia = [\n {\n \"type\": \"copy\",\n \"title\": \"Copy\",\n \"icon\": \"icon-copy-regular\"\n },\n {\n \"type\": \"whatsapp\",\n \"title\": \"whatsApp\",\n \"icon\": \"icon-whatsapp\"\n },\n {\n \"type\": \"fb\",\n \"title\": \"Facebook\",\n \"icon\": \"icon-FACEBOOK\"\n },\n {\n \"type\": \"email\",\n \"title\": \"Email\",\n \"icon\": \"icon-email\"\n }\n ];\n\n socialMedia.forEach(social => {\n const scope = new ShareBtn(null,{\n type: social.type,\n url: this.url\n },social.icon,social.title,social.type === 'copy' ? this.#copyToClipboard.bind(this) : null,\n this.dropDown);\n\n this.dropDown.add(scope.btn.DOMElement);\n });\n\n this.dropDown.arrowBlock.classList.add('hidden');\n\n isMobile && this.#addSwipe(this.dropDown.curtain,this.dropDown);\n\n }\n\n #addSwipe(element,scope) {\n let dragStarted = false;\n let panDirection = null;\n let state;\n\n const swipe = new Hammer.Manager(element);\n swipe.add(new Hammer.Pan({\n threshold: 10\n }));\n\n const panHandler = (direction) => {\n switch (direction) {\n case 'panup':\n element.parentElement.style.bottom = '';\n break;\n case 'pandown':\n scope.hide();\n break;\n }\n dragStarted = false;\n panDirection = null;\n setTimeout(() => {\n if (!dragStarted) {\n element.parentElement.style.bottom = '';\n }\n },400);\n };\n\n swipe.on('panstart',() => {\n state = element.parentElement.getBoundingClientRect();\n });\n\n\n swipe.on('panup pandown', (e) => {\n const position = clamp(e.deltaY * -1,state.height * -1,0);\n element.parentElement.style.bottom = `${position}px`;\n panDirection = e.additionalEvent;\n dragStarted = true;\n if (e.isFinal) {\n panHandler(panDirection);\n }\n });\n\n swipe.on('panend', () => {\n if (dragStarted && panDirection) {\n panHandler(panDirection);\n }\n });\n }\n\n #copyToClipboard() {\n const dir = getCurrentLangDirection();\n Notiflix.Notify.merge({\n position: isDesktop ? 'left-top' : (dir === 'ltr') ? 'right-top' : 'left-top',\n timeout: 1000,\n rtl: (dir !== 'ltr')\n });\n \n function oldCopy (url) {\n const textArea = document.createElement('textarea');\n textArea.value = url;\n textArea.style.position = 'fixed';\n \n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n \n try {\n const successful = document.execCommand('copy');\n if (successful) {\n Notiflix.Notify.success(changeLangToCurrent('Link Copied'));\n } else {\n Notiflix.Notify.failure('Oops, unable to copy');\n }\n } catch (err) {\n Notiflix.Notify.failure('Oops, unable to copy');\n }\n \n document.body.removeChild(textArea);\n }\n\n if (!navigator.clipboard) {\n oldCopy(this.url);\n return;\n }\n\n navigator.clipboard.writeText(this.url)\n .then(() => Notiflix.Notify.success(changeLangToCurrent('Link Copied')))\n .catch(() => oldCopy(this.url));\n this.dropDown.hide();\n }\n\n #openHandler(e) {\n e.stopPropagation();\n this.dropDown.findParent();\n !isMobile && this.dropDown.setOpenPosition('auto');\n this.dropDown.show();\n\n // this.mediaContainer = createHtmlElement(document.body,'','div',['social-media']);\n // const content = createHtmlElement(this.mediaContainer,'','div',['social-media__content']);\n // this.closeBtn = createHtmlElement(this.mediaContainer,'','button',['social-media__close-btn','icon-close']);\n\n // const media = config.features.socialMedia.media;\n // media.forEach(social => new ShareBtn(content,{\n // type: social.type,\n // url: this.url\n // },social.icon));\n\n // this.closeBtn.addEventListener('click', this.closeHandler);\n // this.mediaContainer.addEventListener('click', this.closeHandler);\n }\n\n // #closeHandler() {\n // this.closeBtn.removeEventListener('click',this.closeHandler);\n // this.mediaContainer.removeEventListener('click', this.closeHandler);\n // this.mediaContainer.remove();\n // }\n\n addClass(...value) {\n if (!Boolean(this.btn))\n return;\n\n this.btn.addClass(...value);\n }\n\n // #closeHandler() {\n // this.closeBtn.removeEventListener('click',this.closeHandler);\n // this.mediaContainer.removeEventListener('click', this.closeHandler);\n // this.mediaContainer.remove();\n // }\n\n addClass(...value) {\n if (!Boolean(this.btn))\n return;\n\n this.btn.addClass(...value);\n }\n}\n\nexport class ShareBtn {\n constructor (parent, attributes, icon, text,handler,dropdownScope) {\n this.parent = parent;\n this.dropdownScope = dropdownScope;\n this.text = text;\n this.attributes = attributes;\n this.icon = icon;\n this.handler = handler || this.#share.bind(this);\n this.#addButton();\n }\n\n #addButton() {\n this.btn = new BaseElement()\n .addClass('social-btn',this.attributes.type);\n\n if (this.icon) {\n new BaseElement()\n .addClass('social-btn__icon',this.icon)\n .appendTo(this.btn.DOMElement);\n }\n\n if (this.text) {\n new BaseElement('span')\n .addClass('social-btn__text','language-string')\n .addAttribute('data-dictionary',this.text)\n .innerHtml(changeLangToCurrent(this.text))\n .appendTo(this.btn.DOMElement);\n }\n\n if (this.parent) {\n this.btn.appendTo(this.parent);\n }\n\n Object.entries(this.attributes).forEach(([key,value]) => {\n this.btn.addAttribute(`data-${key}`,value);\n });\n\n this.btn.event('click', this.handler);\n }\n\n #share(e) {\n e.stopPropagation();\n\n if (isMobile || isTablet) {\n\n const shareData = {\n url: this.btn.getAttribute('data-url'),\n text: '',\n title: config.projectTitle\n };\n\n navigator.share(shareData);\n\n } else {\n JSShare.go(this.btn.DOMElement);\n }\n\n if (this.dropdownScope) {\n this.dropdownScope.hide();\n }\n }\n\n}\n","'use strict'\n\nimport { projectMode, settingsData, threeJsVariables } from '../../../settings';\nimport { rotateToCamera} from \"../../controls/orbitControls\";\nimport { ViewMode } from '../../../common';\nimport { FontLoader } from 'three/examples/jsm/loaders/FontLoader'\nimport { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry.js'\nimport { Euler, Group, InstancedMesh, Matrix4, Mesh, MeshBasicMaterial, Quaternion, Vector3 } from 'three';\nimport { DoubleSide } from 'three';\n\nlet fontLoader = null;\nlet group = null;\nlet loadedFont = null;\n\nexport const createStreetNames = () => {\n\n if (projectMode.LiteMode.isActive()) return;\n\n const rtl = document.documentElement.getAttribute('dir') === 'rtl';\n if (!fontLoader) {\n fontLoader = new FontLoader();\n }\n \n if (!group) {\n group = new Group();\n group.name = 'streetsGroup';\n } else if (group && group.children.length) {\n group.traverse(el => {\n if (el.isMesh) {\n el.geometry.dispose();\n el.material.dispose();\n Promise.resolve().then(() => {\n el.removeFromParent();\n })\n }\n });\n }\n \n const createText = (font) => {\n config.features.streets.forEach(street => {\n let message;\n if (rtl) {\n message = street.name.he;\n let messageArray = street.name.he.split('');\n message = '';\n messageArray.reverse().forEach(letter => message += letter);\n } else {\n message = street.name.en;\n }\n \n \n const textGeometry = new TextGeometry(\n message,\n {\n font: font,\n size: street?.size || 0.5,\n depth: street?.height || 0.2,\n curveSegments: 1,\n bevelEnabled: true,\n bevelThickness: 0.03,\n bevelSize: 0.02,\n bevelOffset: 0,\n bevelSegments: 1,\n }\n );\n \n textGeometry.center();\n // const material = new THREE.MeshMatcapMaterial();\n const material = new MeshBasicMaterial({\n color: 0xffffff,\n side: DoubleSide\n });\n const text = new Mesh(textGeometry, material);\n \n text.name = `Street-${street.name.en}`;\n text.position.set(0, 0, 0);\n text.rotation.set(0, 0, 0);\n text.scale.set(street.scale.x, street.scale.y, street.scale.z);\n \n // streetsGroup.add(text);\n \n makeInstanceTextMesh(text, street.instances.length, street.instances, group);\n \n if (settingsData.activeModeSwitching){\n group.visible = false;\n }\n \n });\n };\n \n if (!loadedFont) {\n fontLoader.load('fonts/assistant/Assistant_Regular.json',(font) => {\n loadedFont = font;\n createText(font)\n });\n } else {\n createText(loadedFont);\n }\n \n threeJsVariables.scene.add(group);\n threeJsVariables.renderList.reorder();\n \n if (settingsData.activeViewMode !== ViewMode.Orbit){\n group.visible = false;\n }\n}\n\n\nfunction makeInstanceTextMesh(baseMesh, count, instanceConfig, streetsGroup) {\n const matrix = new Matrix4();\n const scale = new Vector3(baseMesh.scale.x, baseMesh.scale.y, baseMesh.scale.z);\n const textInstance = new InstancedMesh(baseMesh.geometry, baseMesh.material, count);\n //textInstance.instanceMatrix.setUsage(THREE.DynamicDrawUsage);\n\n instanceConfig.forEach((element, index) => {\n let rotation = new Euler(element.rotation.x, element.rotation.y, element.rotation.z, 'XYZ');\n let rotationQ = new Quaternion().setFromEuler(rotation);\n let position = new Vector3(element.position.x, element.position.y, element.position.z);\n matrix.compose(position, rotationQ, scale);\n textInstance.name = `${baseMesh.name}-${index}_instance`;\n textInstance.setMatrixAt(index, matrix);\n\n streetsGroup.add(textInstance);\n\n })\n\n return streetsGroup;\n}\n\nexport const toggleStreetNames = (show) => {\n const group = threeJsVariables.scene.getObjectByName('streetsGroup');\n\n if (!group) return;\n\n group.visible = show;\n}\n\nexport const rotateStreetNames = () => {\n const group = threeJsVariables.scene.getObjectByName('streetsGroup');\n if (!group) return;\n\n const indicator = rotateToCamera();\n\n group.traverse(child => {\n\n if (child.type === 'Group') return;\n\n if (indicator > 1.5) {\n child.rotation.z = 1.2;\n } else if (indicator < 1.5) {\n child.rotation.z = -2;\n }\n\n })\n}\n","'use strict';\n\n\nimport { GSAPAnimationMixer, isMobile, threeJsVariables } from '../../../settings';\nimport {\n\tCubeCamera,\n\tGroup,\n\tLoadingManager,\n\tMathUtils,\n\tMatrix4,\n\tScene,\n\tTextureLoader,\n\tVector3,\n\tWebGLCubeRenderTarget,\n} from 'three';\nimport { BaseElement } from '../../interfaces/BaseElement';\nimport { OrbitControls } from '../../../libs/OrbitControls';\nimport { renderUpdateValuesOnDemand } from '../../../app';\nimport { isBetaResourcesFolder, isPortraitMode } from '../../../functions';\nimport { ResizeObserver } from 'resize-observer';\nimport { generateRegion } from '../../threejs/sceneBackground';\nimport { Cloudflare } from '../../api/Cloudflare';\nimport { updateComponentsOnCanvasResize } from '../../menu/search/search';\nimport { CubemapToEquirectangular } from '../../../libs/CubemapToEquirectangular';\nimport { changeLangToCurrent, getCurrentLangDirection } from '../langSwitcher/langSwitcher';\nimport { DreamsPreloader } from '../preloader/DreamsPreloader';\nimport { Compass } from '../compass/compass';\nimport { Switch } from '../../interfaces/switchers/Switch';\nimport gsap from 'gsap';\n\nlet firstScene = null;\nlet secondScene = null;\nconst manager = new LoadingManager();\nconst textureLoader = new TextureLoader(manager);\nlet preloader = null;\n\nexport class PhotographicViewer {\n\tconstructor (card,data,vantage) {\n\t\tif (firstScene === null && secondScene === null) {\n\t\t\tfirstScene = new Scene();\n\t\t\tsecondScene = new Scene();\n\t\t}\n\t\t\n\t\tthis.card = card;\n\t\tthis.planBox = this.card.querySelector('.options-card__plans-box');\n\t\tthis.data = data;\n\t\tthis.vantage = vantage;\n\t\tthis.element = new BaseElement()\n\t\t\t.addClass('vantage-viewer', isMobile ? 'invisible' : null)\n\t\t\t.appendTo(this.planBox)\n\t\t\t.DOMElement;\n\n\t\tthis.fdSwitcherContainer = null;\n\t\tthis.fdSwitcher = null;\n\t\t\n\t\tthis.viewport = {};\n\t\tthis.params = {\n\t\t\tmatrix: new Matrix4().fromArray(this.vantage.matrix),\n\t\t\tfrom: new Vector3().fromArray(this.vantage.pointFrom),\n\t\t\tto: new Vector3().fromArray(this.vantage.pointTo),\n\t\t\tparts: ['nz','pz','px','nx','py','ny'],\n\t\t\turl: `${config.cdnRepository}/${config.projectFolder}/`\n\t\t};\n\t\t\n\t\tthis.params.from.applyMatrix4(this.params.matrix);\n\t\tthis.params.to.applyMatrix4(this.params.matrix);\n\t\t\n\t\tthis.camera = threeJsVariables.perspectiveCamera.clone();\n\t\tthis.camera.fov = this.vantage.fov ? this.vantage.fov : config.features.vantage.fov ? config.features.vantage.fov : 90;\n\t\tthis.camera.updateProjectionMatrix();\n\t\tthis.camera.position.copy(this.params.from);\n\t\tthis.controls = new OrbitControls(this.camera,this.element);\n\t\tthis.controls.target.copy(this.params.to);\n\t\tthis.controls.addEventListener('end', () => renderUpdateValuesOnDemand(false));\n\t\tthis.controls.enablePan = false;\n\t\tthis.controls.enableZoom = false;\n\t\tthis.controls.reverseControls = true;\n\t\tthis.controls.rotateSpeed = 0.15;\n\t\tthis.controls.update();\n\t\t\n\t\tconst limit = MathUtils.degToRad(this.vantage.limit);\n\t\tconst currentAzimuth = this.controls.getAzimuthalAngle();\n\t\tthis.controls.minAzimuthAngle = currentAzimuth - limit / 2;\n\t\tthis.controls.maxAzimuthAngle = currentAzimuth + limit / 2;\n\t\tconst polar = config.features.vantage.polarAngle || {max: 1.85, min: 0.75};\n\t\tthis.controls.minPolarAngle = polar.min;\n\t\tthis.controls.maxPolarAngle = polar.max;\n\t\t\n\t\tthis.scene = firstScene.children.length ? secondScene : firstScene;\n\t\tthis.renderer = threeJsVariables.renderer;\n\t\tthis.canvas = this.renderer.domElement;\n\t\tthis.calculateViewport();\n\t\tthis.observer = new ResizeObserver(() => {\n\t\t\tthis.calculateViewport();\n\t\t\tsetTimeout(() => this.calculateViewport(), 100);\n\t\t});\n\t\t\n\t\tmanager.onStart = () => {\n\t\t\tpreloader = new BaseElement()\n\t\t\t\t.addClass('vantage-preloader')\n\t\t\t\t.DOMElement;\n\t\t\tthis.card.querySelector('.options-card__plans-box').appendChild(preloader);\n\t\t\tnew DreamsPreloader(preloader,'vantage-preloader').show();\n\t\t};\n\t\t\n\t\tmanager.onLoad = () => {\n\t\t\tthis.element.classList.remove('invisible');\n\t\t\trenderUpdateValuesOnDemand(false);\n\t\t\tpreloader?.remove();\n\t\t};\n\t\t\n\t\tthis.observer.observe(this.element);\n\t\tthis.addSphere();\n\t\tthis.addFutureDevelopmentSwitcher();\n\t\tthis.compass = new Compass(this.element,'vantage',this.camera,this.controls);\n\t\tthis.compass.addClass('vantage-compass');\n\t\tthis.compass.rotate();\n\t\t\n\t\tthis.controlsOnChange = () => {\n\t\t\tthis.compass.rotate();\n\t\t};\n\t\t\n\t\tthis.controls.addEventListener('change',this.controlsOnChange);\n\t}\n\t\n\tupdate(data) {\n\t\trenderUpdateValuesOnDemand(false);\n\t\tthis.vantage = data;\n\t\tconst vantageURL = isBetaResourcesFolder() ?\n\t\t\tthis.vantage.url.replace(/vantages3D/g,'vantages3D_beta') :\n\t\t\tthis.vantage.url;\n\t\tconst url = `${this.params.url}/${vantageURL}/`;\n\t\tthis.controls.minAzimuthAngle = -Infinity;\n\t\tthis.controls.maxAzimuthAngle = Infinity;\n\t\tthis.controls.update();\n\t\t\n\t\tthis.sphere.traverse(el => {\n\t\t\tif (el.isMesh){\n\t\t\t\tlet modifiedUrl = url + el.name + '.jpg';\n\t\t\t\tmodifiedUrl = Cloudflare.resize(modifiedUrl);\n\t\t\t\tel.material.uniforms.t.value = 0;\n\t\t\t\tel.material.uniforms.map1.value = textureLoader.load(modifiedUrl);\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.addFutureDevelopmentSwitcher();\n\t\tthis.params.matrix = new Matrix4().fromArray(this.vantage.matrix);\n\t\tthis.params.from = new Vector3().fromArray(this.vantage.pointFrom);\n\t\tthis.params.to = new Vector3().fromArray(this.vantage.pointTo);\n\t\tthis.params.from.applyMatrix4(this.params.matrix);\n\t\tthis.params.to.applyMatrix4(this.params.matrix);\n\t\tthis.camera.position.copy(this.params.from);\n\t\tthis.controls.target.copy(this.params.to);\n\t\tthis.controls.update();\n\t\tthis.compass.rotate();\n\t\t\n\t\tthis.sphere.position.copy(this.params.from);\n\t\tconst limit = MathUtils.degToRad(this.vantage.limit);\n\t\t\n\t\tif (limit === Math.PI * 2) {\n\t\t\tthis.controls.minAzimuthAngle = - Infinity;\n\t\t\tthis.controls.maxAzimuthAngle = Infinity;\n\t\t} else {\n\t\t\tconst currentAzimuth = this.controls.getAzimuthalAngle();\n\t\t\tthis.controls.minAzimuthAngle = currentAzimuth - limit / 2;\n\t\t\tthis.controls.maxAzimuthAngle = currentAzimuth + limit / 2;\n\t\t}\n\t\t\n\t}\n\t\n\taddFutureDevelopmentSwitcher() {\n\t\tif (!this.vantage.futureDevelopment){\n\t\t\tif (this.fdSwitcherContainer) {\n\t\t\t\tthis.fdSwitcherContainer.remove();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tconst vantageURL = isBetaResourcesFolder() ?\n\t\t\tthis.vantage.url.replace(/vantages3D/g,'vantages3D_beta') :\n\t\t\tthis.vantage.url;\n\t\tconst url = `${this.params.url}/${vantageURL}/`;\n\n\t\tthis.sphere.traverse(el => {\n\t\t\tif (el.isMesh){\n\t\t\t\tlet modifiedUrl = url + el.name + '_fd.jpg';\n\t\t\t\tmodifiedUrl = Cloudflare.resize(modifiedUrl);\n\t\t\t\tel.material.uniforms.map2.value = textureLoader.load(modifiedUrl);\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.fdSwitcherContainer = new BaseElement()\n\t\t\t.addClass('vantage__future-development','background-backdrop-filter')\n\t\t\t.appendTo(this.planBox)\n\t\t\t.DOMElement;\n\t\t\n\t\tthis.fdSwitcher = new BaseElement('button')\n\t\t\t.addClass('icon-construction-site','vantage__future-development-btn')\n\t\t\t.event('click',this.futureDevelopmentHandler.bind(this))\n\t\t\t.appendTo(this.fdSwitcherContainer)\n\t\t\t.DOMElement;\n\t\t\n\t\tnew BaseElement('span')\n\t\t\t.addClass('vantage__future-development__title','language-string','background-backdrop-filter')\n\t\t\t.addAttribute('data-dictionary','Future development')\n\t\t\t.innerHtml(changeLangToCurrent('Future development'))\n\t\t\t.appendTo(this.fdSwitcherContainer);\n\t\t\n\t}\n\t\n\tfutureDevelopmentHandler(e) {\n\t\tthis.fdSwitcher.classList.toggle('show_future-development');\n\t\t\n\t\tconst materials = [];\n\t\tthis.sphere.traverse(el => {\n\t\t\tif (el.isMesh){\n\t\t\t\tmaterials.push(el.material);\n\t\t\t}\n\t\t});\n\t\t\n\t\tconst state = this.fdSwitcher.classList.contains('show_future-development');\n\t\tconst from = {value: state ? 0 : 1};\n\t\tconst to = state ? 1 : 0;\n\t\t\n\t\tgsap.to(from,{\n\t\t\tvalue: to,\n\t\t\tduration: GSAPAnimationMixer.duration,\n\t\t\tease: GSAPAnimationMixer.ease,\n\t\t\tonUpdate: () => {\n\t\t\t\tmaterials.forEach(material => material.uniforms.t.value = from.value);\n\t\t\t}\n\t\t});\n\t}\n\t\n\taddSphere() {\n\t\tthis.sphere = new Group();\n\t\tthis.sphere.name = 'Vantage';\n\t\tconst vantageURL = isBetaResourcesFolder() ?\n\t\t\tthis.vantage.url.replace(/vantages3D/g,'vantages3D_beta') :\n\t\t\tthis.vantage.url;\n\t\tconst url = `${this.params.url}/${vantageURL}/`;\n\t\t\n\t\tthis.params.parts.forEach(name => {\n\t\t\tlet mesh;\n\t\t\tlet modifiedUrl;\n\t\t\t\n\t\t\tswitch (name) {\n\t\t\t\tcase 'nz':\n\t\t\t\t\tmesh = generateRegion([0,0,-1],[0,1,0],[ 1,0,0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'pz':\n\t\t\t\t\tmesh = generateRegion([0,0, 1],[0,1,0],[-1,0,0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'px':\n\t\t\t\t\tmesh = generateRegion([ 1,0,0],[0,1,0],[0,0, 1]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'nx':\n\t\t\t\t\tmesh = generateRegion([-1,0,0],[0,1,0],[0,0,-1]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'py':\n\t\t\t\t\tmesh = generateRegion([0,0, 1],[1,0,0],[0, 1,0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ny':\n\t\t\t\t\tmesh = generateRegion([0,0,-1],[1,0,0],[0,-1,0]);\n\t\t\t\t\tmesh.rotation.y = Math.PI;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tmodifiedUrl = url + name + '.jpg';\n\t\t\tmodifiedUrl = Cloudflare.resize(modifiedUrl);\n\t\t\tmesh.material.uniforms.map1.value = textureLoader.load(modifiedUrl);\n\t\t\tmesh.name = name;\n\t\t\tthis.sphere.position.copy(this.params.from);\n\t\t\tthis.sphere.add(mesh);\n\t\t});\n\t\tthis.scene.add(this.sphere);\n\t}\n\t\n\tcalculateViewport() {\n\t\tconst rect = this.element.getBoundingClientRect();\n\t\tif (isMobile) {\n\t\t\tif (isPortraitMode()) {\n\t\t\t\tthis.viewport.width = rect.right - rect.left;\n\t\t\t\tthis.viewport.height = rect.bottom - rect.top;\n\t\t\t\tthis.viewport.left = rect.left;\n\t\t\t\tthis.viewport.bottom = this.renderer.domElement.clientHeight - rect.height;\n\t\t\t} else {\n\t\t\t\tthis.viewport.width = rect.right - rect.left;\n\t\t\t\tthis.viewport.height = rect.bottom - rect.top;\n\t\t\t\tthis.viewport.left = 0;\n\t\t\t\tthis.viewport.bottom = 0;\n\t\t\t}\n\t\t} else {\n\t\t\t// const offset = getCurrentLangDirection() === 'ltr' ? 56 : 0;\n\t\t\tconst offset = 0;\n\t\t\tthis.viewport.width = rect.right - rect.left;\n\t\t\tthis.viewport.height = rect.bottom - rect.top;\n\t\t\tthis.viewport.left = rect.left - offset;\n\t\t\tthis.viewport.bottom = this.renderer.domElement.clientHeight - rect.bottom;\n\t\t}\n\t\t\n\t\tthis.resize();\n\t\tthis.draw();\n\t}\n\t\n\tresize() {\n\t\tthis.camera.aspect = this.viewport.width / this.viewport.height;\n\t\tthis.camera.updateProjectionMatrix();\n\t}\n\t\n\tdraw() {\n\t\tthis.canvas.style.transform = `translateY(${-this.card.scrollTop}px)`;\n\t\tthis.canvas.style.transition = 'transform .1s';\n\t\tthis.renderer.setViewport( this.viewport.left, this.viewport.bottom, this.viewport.width, this.viewport.height );\n\t\tthis.renderer.setScissor( this.viewport.left, this.viewport.bottom, this.viewport.width, this.viewport.height );\n\t\tthis.renderer.render(this.scene,this.camera);\n\t}\n\t\n\tdispose() {\n\t\tthis.sphere.removeFromParent();\n\t\tthis.sphere.traverse(el => {\n\t\t\tif (el.isMesh) {\n\t\t\t\tel.geometry.dispose();\n\t\t\t\tel.material.uniforms.map1.value.dispose();\n\t\t\t\tel.material.dispose();\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.canvas.style.transform = '';\n\t\tthis.canvas.style.transition = '';\n\t\tthis.controls.removeEventListener('change',this.controlsOnChange);\n\t\tthis.controlsOnChange = null;\n\t\tthis.controls.dispose();\n\t\tthis.element.remove();\n\t\tthis.observer.disconnect();\n\t\tthis.compass.dispose();\n\t\tthis.compass = null;\n\t\tthis.element = null;\n\t\tthis.observer = null;\n\t\tthis.controls = null;\n\t\tthis.sphere = null;\n\t\tthis.scene = null;\n\t\tthis.camera = null;\n\t\tupdateComponentsOnCanvasResize();\n\t}\n\t\n\tgetEquirectangular(size,rotation = -90, flip = false) {\n\t\tconst cubeRenderTarget = new WebGLCubeRenderTarget(size);\n\t\tconst cubeCamera = new CubeCamera(0.1,8000,cubeRenderTarget);\n\t\t\n\t\tcubeCamera.position.copy(this.camera.position);\n\t\tcubeCamera.rotation.y = MathUtils.degToRad(rotation);\n\t\tcubeCamera.updateMatrixWorld(true);\n\t\tcubeCamera.update(this.renderer,this.scene);\n\t\t\n\t\tconst equirectangular = new CubemapToEquirectangular(this.renderer,size,false,flip);\n\t\tequirectangular.convert(cubeCamera);\n\t}\n\t\n}\n","'use strict';\n\nimport {\n CubeCamera, EquirectangularReflectionMapping, Euler,\n Group, LinearFilter, LinearMipmapLinearFilter, LinearSRGBColorSpace,\n LoadingManager, Matrix4, MeshStandardMaterial, NoToneMapping, RepeatWrapping, Scene, Spherical,\n TextureLoader,\n Vector3,\n WebGLCubeRenderTarget,\n} from 'three';\nimport { Buildings, components, GSAPAnimationMixer, isMobile, settingsData, threeJsVariables } from '../../../settings';\nimport { generateRegion } from '../../threejs/sceneBackground';\nimport { Cloudflare } from '../../api/Cloudflare';\nimport gsap from \"gsap\";\nimport {CardTypes, ViewMode} from '../../../common';\nimport {\n findSelectionAndCrmData, freezingCanvas,\n isCompareMode, isFlatHas360Observation,\n isPortraitMode,\n userPrevent,\n} from '../../../functions';\nimport { UnitCardClass } from '../../cards/unitCards/UnitCardClass';\nimport { BaseElement } from '../../interfaces/BaseElement';\nimport { renderUpdateValuesOnDemand } from '../../../app';\nimport { setActiveLordIcon, setLordIcon } from '../../../lordicon';\nimport { CubemapToEquirectangular } from '../../../libs/CubemapToEquirectangular';\nimport { TraverseSwitcher } from '../TraverseSwitcher/TraverseSwitcher';\nimport { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader';\nimport { OrbitControls } from '../../../libs/OrbitControls';\nimport { ResizeObserver } from 'resize-observer';\nimport { Composer } from '../../post-processing/Composer';\nimport { CylinderBase } from '../../cylinderGrid/CylinderBase';\nimport { hideBuildings, showAllBuildings } from '../building-switch/building_switch';\nimport {hideSceneObjects, sceneObjectsGroup, showSceneObjects} from '../../points/points';\nimport { updateComponentsOnCanvasResize } from '../../menu/search/search';\nimport { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass';\nimport { floorMoveAnimation } from '../../controls/destroyBuilding';\nimport { PhotographicViewer } from './PhotographicViewer';\nimport {getCurrentLangDirection} from \"../langSwitcher/langSwitcher\";\nimport { DreamsPreloader } from '../preloader/DreamsPreloader';\nimport { addCardButtonTooltip, addDisclaimer } from '../../cards/optionsCards';\nimport { OptionsCardViewer } from '../../cards/OptionsCardViewer';\nimport {IntersectionLegenda} from \"../IntersectionLegenda\";\n\n\nlet firstScene = null;\nlet secondScene = null;\nconst tempVector = new Vector3();\nconst spherical = new Spherical();\nconst pointFrom = new Vector3();\nconst pointTo = new Vector3();\n\nexport class Vantages {\n static #objectToIntersection;\n static textures = {};\n static scopes = [];\n static sphere = null;\n static startRendering = false;\n static type = config.features.vantage?.type || '';\n static active = config.features.vantage?.active || false;\n #buildings = config.features.vantage?.buildings || threeJsVariables.bundleConfig?.vantage || {};\n\n constructor (buildingEngineId) {\n this.buildingEngineId = buildingEngineId;\n this.engineId = null;\n this.floors = this.#buildings[this.buildingEngineId];\n }\n\n addButton(parent) {\n if ((OptionsCardViewer.active && !Vantages.isPhotographic())) return;\n\n const engineId = parent.closest('.options-card').getAttribute('data-engineid');\n const crm = settingsData.allCrmData.find(el => el.engineId === engineId);\n const valid = this.validate(crm);\n if (!valid) return;\n\n this.engineId = engineId;\n const btn = new BaseElement('button')\n .addClass('vantage', `${CardTypes.Options}-card__plans-box_buttons-btn`,'vantage-mode-btn', isMobile ? 'icon-vantage' : null)\n .addAttribute('data-type', 'vantage')\n .event('click', this.enter.bind(this,parent))\n .appendTo(parent);\n !isMobile && setLordIcon('vantage', btn.DOMElement, {\n stroke: 90,\n trigger: 'hover'\n });\n\n addCardButtonTooltip(btn.DOMElement,'vantage');\n }\n\n validate(crm) {\n return Boolean(this.floors && this.floors.find(el => crm.floorNum >= el.from && crm.floorNum <= el.to)?.url?.length) ||\n Boolean(this.floors && this.floors.find(el => crm.floorNum >= el.from && crm.floorNum <= el.to)?.folder?.length);\n }\n\n findClosestVantage(selectedMesh) {\n let vantage = this.floors.find(el => el.name === selectedMesh.name);\n\n if (!vantage.url) {\n const tempMatrix = new Matrix4();\n const tempPosition = new Vector3();\n const currentMatrix = new Matrix4().fromArray(vantage.matrix);\n const currentVector = new Vector3().fromArray(vantage.pointFrom).applyMatrix4(currentMatrix);\n const distances = this.floors.map(data => {\n if (data.url) {\n tempMatrix.fromArray(data.matrix);\n tempPosition.fromArray(data.pointFrom);\n tempPosition.applyMatrix4(tempMatrix);\n return tempPosition.distanceTo(currentVector);\n } else {\n return Infinity;\n }\n });\n\n const minDistance = Math.min(...distances);\n const minIndex = distances.indexOf(minDistance);\n vantage = this.floors[minIndex];\n }\n\n return vantage;\n }\n\n async enter(parent,e) {\n const asideContainer = document.querySelector('.aside__container');\n if (asideContainer) {\n asideContainer.style.position = 'fixed';\n }\n \n if (isMobile){\n freezingCanvas(false);\n components.mobileSearch?.hide();\n }\n\n if (Vantages.isPhotographic()) {\n this.card = parent.closest('.options-card');\n const planBlock = this.card.querySelector('.options-card__plans-box');\n this.setButtonActive(e);\n addDisclaimer(this.card,parent.querySelector('.vantage-mode-btn'));\n this.data = findSelectionAndCrmData(this.card.getAttribute('data-engineid'));\n threeJsVariables.renderer.setScissorTest(true);\n renderUpdateValuesOnDemand(false);\n let floorVantage = this.findClosestVantage(this.data.selectedMesh);\n\n this.viewer = new PhotographicViewer(this.card,this.data,floorVantage);\n\n if (!isCompareMode()) {\n let uniqueFloors = this.floors.map(data => data.from);\n uniqueFloors = [...new Set(uniqueFloors)];\n uniqueFloors = uniqueFloors.map(number => {\n return {\n from: number,\n to: number\n }\n });\n\n this.switcher = new VantageSwitcher(planBlock,this.data.selectedMesh,floorVantage,uniqueFloors,this);\n this.switcher.show();\n }\n\n Vantages.generalElementsVisibility('hide');\n this.setElementsVisibility('hide');\n Vantages.scopes.push(this);\n Vantages.startRendering = true;\n\n } else {\n if (!Vantages.sphere) {\n Vantages.sphere = Vantages.createSphere();\n }\n Vantages.setBuildingsStateOn('enter');\n Vantages.#objectToIntersection = settingsData.objects_to_intersection.slice();\n if (threeJsVariables.background) {\n threeJsVariables.background.visible = false;\n }\n // threeJsVariables.background.children.forEach(child => {\n // child.visible = false;\n // })\n\n // const isFloorPlanActive = settingsData.activeViewMode === ViewMode.FloorPlan\n // isFloorPlanActive && projectMode.FloorPlan.exitFromMode();\n // if (threeJsVariables.slicer.active) {\n // const mixer = GSAPAnimationMixer.registerNewMixer('enterToVantage');\n // const slicerAnimation = threeJsVariables.slicer.restoreXZ();\n // mixer.addAnimation(slicerAnimation);\n // mixer.play();\n // }\n\n this.manager = new LoadingManager();\n this.textureLoader = new TextureLoader(this.manager);\n\n threeJsVariables.renderer.setScissorTest(true);\n renderUpdateValuesOnDemand(false);\n // threeJsVariables.renderer.shadowMap.autoUpdate = true;\n\n this.card = parent.closest('.options-card');\n const planBlock = this.card.querySelector('.options-card__plans-box');\n addDisclaimer(this.card,parent.querySelector('.vantage-mode-btn'));\n this.setButtonActive(e);\n let preloader = null;\n\n this.manager.onStart = () => {\n preloader = new BaseElement()\n .addClass('vantage-preloader')\n .DOMElement;\n planBlock.appendChild(preloader);\n new DreamsPreloader(preloader,'vantage-preloader').show();\n };\n\n this.manager.onLoad = () => {\n this.viewer.element.classList.remove('invisible');\n renderUpdateValuesOnDemand(false);\n preloader?.remove();\n // threeJsVariables.renderer.shadowMap.autoUpdate = false;\n };\n\n this.data = findSelectionAndCrmData(this.card.getAttribute('data-engineid'));\n const floorVantage = this.floors.find(el => this.data.crmDataOfFlat.floorNum >= el.from && this.data.crmDataOfFlat.floorNum <= el.to);\n const textures = this.getTextures(floorVantage);\n const vectors = this.calculateVectors(this.data.selectedMesh);\n const is360Observation = isFlatHas360Observation(this.data.selectedMesh);\n\n this.viewer = new VantageViewer(planBlock,floorVantage,this.data.selectedMesh);\n this.viewer.updateVisibility('show');\n this.viewer.calculateViewport();\n this.viewer.addSphere(Vantages.sphere,textures);\n // this.viewer.toggleSceneObjects('hide');\n\n // this.transferObjectsToViewer(vectors.realBalcony);\n this.viewer.setCameraPosition(vectors.orbitVector,vectors.cameraVector);\n this.viewer.applySphereAndCameraSettings();\n this.setObservationType(vectors, is360Observation);\n this.viewer.setPolarAngleLimit(vectors.orbitVector);\n // this.viewer.spherePosition = vectors.meshPosition;\n\n this.balcony = new Balcony(this.manager);\n this.balcony\n .load()\n .then((model) => {\n if (model === null) return;\n\n const lightGroup = threeJsVariables.scene.getObjectByName('light_group');\n this.viewer.addToScene(lightGroup);\n this.viewer.addToScene(this.balcony.model,false);\n\n this.balcony.furnitureType = null;\n this.balcony.position = vectors.orbitVector;\n this.balcony.type(vectors.balconyVector,this.balcony.parseBalconyType(this.data.selectedMesh));\n\n if (is360Observation)\n this.balcony.visibility = false;\n });\n\n if (!isCompareMode()) {\n this.switcher = new VantageSwitcher(planBlock,this.data.selectedMesh,floorVantage,this.floors,this);\n this.switcher.show();\n }\n\n Vantages.generalElementsVisibility('hide');\n this.setElementsVisibility('hide');\n Vantages.scopes.push(this);\n Vantages.startRendering = true;\n }\n }\n\n setObservationType(vectors, is360Observation) {\n if (is360Observation) {\n this.viewer.set360Rotation();\n } else {\n this.viewer.setRotationLimits(vectors.balconyVector);\n }\n }\n\n setButtonActive(e) {\n let target;\n\n e.target.tagName === 'LORD-ICON' ?\n target = e.target.parentElement:\n target = e.target;\n const btnList = this.card.querySelectorAll(`.${CardTypes.Options}-card__plans-box_buttons-btn`);\n btnList.forEach(btn => {\n if (btn.classList.contains('active')) {\n btn.classList.remove('active');\n if (!isMobile) {\n btn.removeAttribute('disabled');\n setActiveLordIcon(undefined, this.card.querySelector(`.${CardTypes.Options}-card__plans-box_buttons`));\n }\n }\n });\n if (!isMobile) {\n target.setAttribute('disabled', 'disabled');\n setActiveLordIcon(target.getAttribute('lord-icon-name'), this.card.querySelector(`.${CardTypes.Options}-card__plans-box_buttons`));\n }\n target.classList.add('active');\n }\n\n changeFloor(mesh) {\n if (Vantages.isPhotographic()) {\n const floorVantage = this.findClosestVantage(mesh);\n this.viewer.update(floorVantage);\n } else {\n const is360Observation = isFlatHas360Observation(mesh);\n const floorVantage = this.floors.find(el => mesh.userData.crm_data.floorNum >= el.from && mesh.userData.crm_data.floorNum <= el.to);\n if (!floorVantage) return;\n const textures = this.getTextures(floorVantage);\n const vectors = this.calculateVectors(mesh);\n this.viewer.setData(floorVantage);\n this.viewer.setApartment(mesh);\n this.viewer.updateSphereTextures(textures);\n this.viewer.setPolarAngleLimit(vectors.orbitVector);\n this.setObservationType(vectors, is360Observation);\n this.viewer.setCameraPosition(vectors.orbitVector,vectors.cameraVector);\n this.viewer.applySphereAndCameraSettings();\n // this.viewer.spherePosition = vectors.meshPosition;\n this.balcony.furnitureType = null;\n this.balcony.position = vectors.orbitVector;\n this.balcony.type(vectors.balconyVector,this.balcony.parseBalconyType(mesh));\n is360Observation\n ? this.balcony.visibility = false\n : this.balcony.visibility = true;\n }\n }\n\n getTextures(floorData) {\n let textures = Vantages.textures[this.buildingEngineId]?.[floorData.folder];\n\n if (!textures) {\n this.loadTextures(floorData.folder);\n textures = Vantages.textures[this.buildingEngineId][floorData.folder];\n }\n\n return textures;\n }\n\n transferObjectsToViewer(useRealBalcony) {\n // return;\n // const buildings = threeJsVariables.scene.getObjectByName('Project Buildings').clone(true);\n // if (!useRealBalcony) {\n // buildings.children = buildings.children.filter(building => building.name !== this.buildingEngineId);\n // }\n // if (buildings.children.length) {\n // this.viewer.addToScene(buildings,true,true,useRealBalcony);\n // }\n // const lightGroup = threeJsVariables.scene.getObjectByName('light_group');\n // this.viewer.addToScene(lightGroup,true,true);\n //\n // if (this.#objects.length) {\n // let sceneObjects = threeJsVariables.scene.getObjectByName('Scene objects');\n // if (!sceneObjects)\n // return;\n //\n // sceneObjects = sceneObjects.clone(true);\n // const objectsToVisibility = [];\n // this.#objects.forEach(obj => {\n // const object = sceneObjects.children.find(el => el.name === obj);\n // if (object) {\n // objectsToVisibility.push(object);\n // }\n // });\n //\n // if (objectsToVisibility.length) {\n // sceneObjects.children = objectsToVisibility;\n // this.viewer.addToScene(sceneObjects);\n // }\n // }\n }\n\n calculateVectors(mesh) {\n if (mesh.children.length) {\n const balconyPointFrom = mesh.children.find(el => el.name.startsWith('balconyFrom'));\n const balconyPointTo = mesh.children.find(el => el.name.startsWith('balconyTo'));\n if (balconyPointFrom && balconyPointTo) {\n balconyPointFrom.getWorldPosition(pointFrom);\n balconyPointTo.getWorldPosition(pointTo);\n } else {\n mesh.getWorldPosition(pointTo);\n mesh.parent.getWorldPosition(pointFrom);\n }\n } else {\n mesh.getWorldPosition(pointTo);\n mesh.parent.getWorldPosition(pointFrom);\n }\n\n\n const direction = new Vector3().subVectors(pointTo,pointFrom).normalize().setY(0);\n direction.multiplyScalar(0.1);\n const target = new Vector3().copy(pointFrom).add(direction);\n const directionNormalize = new Vector3().subVectors(pointTo, pointFrom).normalize();\n\n return {\n orbitVector: target,\n cameraVector: pointFrom,\n balconyVector: directionNormalize\n }\n }\n\n loadTextures(folder) {\n Vantages.sphere.traverse(el => {\n if (el.isMesh) {\n const url = Cloudflare.resize(\n `${config.cdnRepository}/${config.projectFolder}/panocontent/vantages3D/${this.buildingEngineId}/${folder}/${el.name}.jpg`,\n {\n quality: 75\n }\n );\n\n const texture = this.textureLoader.load(url);\n this.saveTexture(folder,el.name,texture);\n }\n });\n }\n\n saveTexture(folder,name,texture) {\n if (!Vantages.textures[this.buildingEngineId]) {\n Vantages.textures[this.buildingEngineId] = {};\n }\n\n if (!Vantages.textures[this.buildingEngineId][folder]) {\n Vantages.textures[this.buildingEngineId][folder] = {};\n }\n\n Vantages.textures[this.buildingEngineId][folder][name] = texture;\n }\n\n setElementsVisibility(action) {\n const printBtn = this.card.querySelector('.options-card__plans-box_buttons-btn.print');\n const paint = this.card.querySelector('.options-card__plans-box_buttons-btn.paint-2d');\n const contactWidget = document.querySelector('.contact-widget__main-container');\n\n switch (action) {\n case 'hide':\n this.card.classList.add('vantage-mode');\n UnitCardClass.cards.forEach(card => {\n card.html.classList.add('hidden');\n });\n printBtn?.classList.add('hidden');\n paint?.classList.add('hidden');\n contactWidget?.classList.add('hidden');\n break;\n case 'show':\n this.card.classList.remove('vantage-mode');\n UnitCardClass.cards.forEach(card => {\n if (!isCompareMode())\n card.html.classList.remove('hidden');\n });\n printBtn?.classList.remove('hidden');\n paint?.classList.remove('hidden');\n contactWidget?.classList.remove('hidden');\n break;\n }\n }\n\n async close() {\n this.setElementsVisibility('show');\n await this.viewer.dispose();\n this.switcher?.dispose();\n this.balcony = null;\n this.switcher = null;\n this.viewer = null;\n Vantages.scopes = Vantages.scopes.filter(scope => scope !== this);\n }\n\n static isPhotographic() {\n return Vantages.type === 'photographic';\n }\n\n static generalElementsVisibility(state) {\n const cylinderFloorNumbers = threeJsVariables.scene.getObjectByName('cylinderFloorNumbers');\n const compass = document.querySelector('.compass-container');\n const buildingSwitcher = document.querySelector('#building-switcher');\n const rightNavBar = document.querySelector('.right-nav-bar');\n const cssLayer = document.querySelector('#three_d_css');\n const search = document.querySelector('.search__container-main');\n // const intersectionLegenda = document.querySelector('.intersection-legenda');\n const compareBlock = document.querySelector('.compare-block');\n const compareBtn = document.querySelector('.compare-button');\n const flatTooltip = document.querySelector('.flat-tooltip');\n const amenitiesContainer = document.querySelector('.amenities__main__container');\n const googleMiniMap = document.querySelector('.google-mini-map');\n\n switch (state) {\n case 'hide':\n cssLayer?.classList.add('hidden');\n search?.classList.add('hidden');\n search?.classList.add('vantage-mode');\n compass.classList.add('hidden');\n flatTooltip?.classList.add('hidden');\n buildingSwitcher?.classList.add('hidden');\n rightNavBar?.classList.add('hidden');\n // intersectionLegenda?.classList.add('hidden');\n IntersectionLegenda.hide();\n compareBlock?.classList.add('vantage-mode');\n amenitiesContainer?.classList.add('hidden');\n googleMiniMap?.classList.add('hidden');\n if (cylinderFloorNumbers) {\n cylinderFloorNumbers.visible = false;\n }\n if (isCompareMode()) {\n UnitCardClass.cards.forEach(card => {\n card.html.classList.add('hidden');\n });\n }\n compareBtn?.classList.add('hidden');\n\n break;\n case 'show':\n cssLayer?.classList.remove('hidden');\n if (cylinderFloorNumbers) {\n cylinderFloorNumbers.visible = true;\n }\n if (isCompareMode()) {\n UnitCardClass.cards.forEach(card => {\n card.html.classList.remove('hidden');\n });\n }\n compareBtn?.classList.remove('hidden');\n search?.classList.remove('hidden');\n flatTooltip?.classList.remove('hidden');\n compass.classList.remove('hidden');\n buildingSwitcher?.classList.remove('hidden');\n rightNavBar?.classList.remove('hidden');\n // intersectionLegenda?.classList.remove('hidden');\n IntersectionLegenda.show();\n amenitiesContainer?.classList.remove('hidden');\n compareBlock?.classList.remove('vantage-mode');\n googleMiniMap?.classList.remove('hidden');\n setTimeout(() => search?.classList.remove('vantage-mode'),500);\n break;\n }\n }\n\n static createSphere() {\n const group = new Group();\n group.name = 'Vantage';\n const m1 = generateRegion([0,0,-1],[0,1,0],[ 1,0,0]);\n const m2 = generateRegion([0,0, 1],[0,1,0],[-1,0,0]);\n const m3 = generateRegion([ 1,0,0],[0,1,0],[0,0, 1]);\n const m4 = generateRegion([-1,0,0],[0,1,0],[0,0,-1]);\n const m5 = generateRegion([0,0, 1],[1,0,0],[0, 1,0]);\n const m6 = generateRegion([0,0,-1],[1,0,0],[0,-1,0]);\n m1.name = 'nz';\n m2.name = 'pz';\n m3.name = 'px';\n m4.name = 'nx';\n m5.name = 'py';\n m6.name = 'ny';\n m6.rotation.y = Math.PI;\n group.add(m1);\n group.add(m2);\n group.add(m3);\n group.add(m4);\n group.add(m5);\n group.add(m6);\n m1.material.transparent = false;\n m2.material.transparent = false;\n m3.material.transparent = false;\n m4.material.transparent = false;\n m5.material.transparent = false;\n m6.material.transparent = false;\n m1.material.depthWrite = true;\n m2.material.depthWrite = true;\n m3.material.depthWrite = true;\n m4.material.depthWrite = true;\n m5.material.depthWrite = true;\n m6.material.depthWrite = true;\n const rotationVector = new Vector3();\n const scaleVector = new Vector3();\n\n if (threeJsVariables.bundleConfig) {\n const bundleSphere = threeJsVariables.bundleConfig.sphere;\n\n if (config.features.vantage?.rotation) {\n rotationVector.set(0,config.features.vantage.rotation,0);\n } else {\n rotationVector.set(bundleSphere.rotation[0],bundleSphere.rotation[1],bundleSphere.rotation[2]);\n }\n\n scaleVector.set(bundleSphere.scale[0],bundleSphere.scale[1],bundleSphere.scale[2]);\n } else {\n const configSphere = config.resources.background;\n rotationVector.set(configSphere.rotation.x,configSphere.rotation.y,configSphere.rotation.z);\n scaleVector.set(configSphere.scale.x,configSphere.scale.y,configSphere.scale.z);\n }\n\n group.rotation.set(rotationVector.x,rotationVector.y,rotationVector.z);\n group.scale.copy(scaleVector);\n group.name = 'Vantage';\n\n return group;\n }\n\n static isActive() {\n return Vantages.startRendering;\n }\n\n static async close(callback = () => {},engineId) {\n if (engineId) {\n const scope = Vantages.scopes.find(scope => scope.engineId === engineId);\n scope && scope.close();\n if (!Vantages.isPhotographic()) {\n settingsData.objects_to_intersection = Vantages.#objectToIntersection.slice();\n if (config.resources.background.cylinderBg === 'sky')\n threeJsVariables.background.visible = true;\n }\n } else {\n\n // const isFloorPlanActive = settingsData.activeViewMode === ViewMode.FloorPlan\n // isFloorPlanActive && projectMode.FloorPlan.enter();\n // if (threeJsVariables.slicer.active) {\n // const mixer = GSAPAnimationMixer.registerNewMixer('exitFromVantage');\n // const slicerAnimation = threeJsVariables.slicer.cropXZ(0);\n // mixer.addAnimation(slicerAnimation);\n // mixer.play();\n // }\n\n if (!Vantages.isPhotographic()) {\n Vantages.setBuildingsStateOn('close');\n settingsData.objects_to_intersection = Vantages.#objectToIntersection.slice();\n if (config.resources.background.cylinderBg === 'sky')\n threeJsVariables.background.visible = true;\n }\n\n for (const scope of Vantages.scopes) {\n await scope.close();\n }\n }\n\n if (!Vantages.scopes.length) {\n Vantages.startRendering = false;\n threeJsVariables.renderer.setScissorTest(false);\n Vantages.generalElementsVisibility('show');\n }\n\n callback();\n }\n\n static setBuildingsStateOn(action) {\n const prevDuration = GSAPAnimationMixer.duration;\n GSAPAnimationMixer.duration = 0.1;\n\n const isFloorPlanActive = settingsData.activeViewMode === ViewMode.FloorPlan;\n const direction = action === 'close' ? 'destroy' : 'appear';\n const state = action === 'close' ? 'enter' : 'exit';\n\n if (isFloorPlanActive) {\n const mixer = GSAPAnimationMixer.registerNewMixer('floorPlan');\n floorMoveAnimation(settingsData.currentFloor, direction,undefined,state);\n mixer.play();\n }\n\n GSAPAnimationMixer.duration = prevDuration;\n }\n\n static render(delta) {\n if (Vantages.isActive()) {\n Vantages.scopes.forEach(scope => scope.viewer.draw(delta));\n }\n }\n\n static getEquirectangular(size) {\n Vantages.scopes[0]?.viewer.getEquirectangular(size);\n }\n}\n\nclass VantageSwitcher extends TraverseSwitcher {\n constructor (parent,currentMesh,currentFloor,floors,vantageScope) {\n super(parent);\n\n this.vantageFloors = floors.slice().sort((a, b) => a.from - b.from);\n this.currentFloor = currentFloor;\n this.mesh = currentMesh;\n this.element.style.opacity = '';\n this.realVantage = true;\n this.vantageScope = vantageScope;\n\n this.addFloorButtons();\n this.setCurrentFloorButtonInFocus();\n this.checkControlButtonsVisibility();\n }\n\n addFloorButtons() {\n if (!this.realVantage)\n return;\n\n this.vantageFloors.forEach((floors,index) => {\n if (floors.from === floors.to) {\n new BaseElement()\n .addClass('traverse-switcher__position')\n .innerHtml(`${floors.from}`)\n .addAttribute('data-floors',`${floors.from}-${floors.to}`)\n .addAttribute('data-index',index)\n .appendTo(this.floorButtons);\n } else {\n new BaseElement()\n .addClass('traverse-switcher__position')\n .innerHtml(`${floors.from}-${floors.to}`)\n .addAttribute('data-floors',`${floors.from}-${floors.to}`)\n .addAttribute('data-index',index)\n .appendTo(this.floorButtons);\n }\n });\n\n this.addControlButtons();\n }\n\n setCurrentFloorButtonInFocus() {\n if (!this.realVantage) return;\n\n this.getElementsStyleParams();\n\n let index = null;\n if (this.currentFloor) {\n const currentFloorElement = this.floorButtons.querySelector(`div[data-floors=\"${this.currentFloor.from}-${this.currentFloor.to}\"]`);\n index = [...this.floorButtons.childNodes].indexOf(currentFloorElement);\n } else {\n for (let i = 0; i < this.floorButtons.children.length; i ++) {\n const [from,to] = this.floorButtons.children[i].getAttribute('data-floors').split('-');\n if (this.mesh.userData.floor >= Number(from) && this.mesh.userData.floor <= Number(to)){\n index = i;\n }\n }\n }\n\n gsap.to(this.floorButtons, {top: (0 - this.buttonsWindowHeight) * index});\n this.currentActiveButtonIndex = index;\n }\n\n controlButtonsHandler(event) {\n if (userPrevent())\n return;\n\n this.getElementsStyleParams();\n\n if (event.target.classList.contains('traverse-switcher__control-button-up')) {\n userPrevent(true);\n this.moveItemsUp();\n } else if (event.target.classList.contains('traverse-switcher__control-button-down')) {\n userPrevent(true);\n this.moveItemsDown();\n }\n\n const activeFloor = this.floorButtons.childNodes[this.currentActiveButtonIndex].getAttribute('data-floors');\n const [from, to] = activeFloor.split('-');\n const activeBuilding = Buildings.getActiveBuilding();\n const {floorSelectionGroup} = activeBuilding.getFloors(Number(from) - 1,Number(to));\n\n const rangeApartments = floorSelectionGroup\n .reduce((acc,floor) => {\n const floorApartments = floor.children.filter(el => el.userData.crm_data);\n if (floorApartments.length) {\n acc.push(...floorApartments);\n }\n return acc;\n },[]);\n\n const currentMeshVector = this.mesh.getWorldPosition(new Vector3());\n const distances = {};\n rangeApartments.forEach(apt => {\n apt.getWorldPosition(tempVector);\n tempVector.y = currentMeshVector.y;\n const distance = tempVector.distanceTo(currentMeshVector);\n distances[distance] = apt;\n });\n\n const minimalDistance = Math.min(...Object.keys(distances));\n const mesh = distances[minimalDistance];\n this.vantageScope.changeFloor(mesh);\n this.checkControlButtonsVisibility();\n }\n\n dispose() {\n this.element?.remove();\n }\n}\n\nclass Balcony {\n static params = config.features.vantage?.balcony || {active: false};\n static url = Balcony.params.source === 'storage' ?\n `${config.cdnRepository}/DreamsGeneralStorage/balcony/`:\n `${config.cdnRepository}/${config.projectFolder}/panocontent/vantages3D/balcony/`;\n static model = null;\n\n constructor (manager) {\n if (!this.active) return;\n\n this.manager = manager;\n }\n\n async load() {\n if (!this.active) return new Promise(resolve => resolve(null));\n if (Balcony.model === null) {\n return new Promise(async resolve => {\n const group = await Balcony.load(this.manager);\n const balconyGroup = new Group();\n balconyGroup.name = 'Balcony';\n balconyGroup.add(...group);\n Balcony.model = balconyGroup;\n this.balconyModel = Balcony.model.clone(true);\n resolve(this.balconyModel);\n });\n } else {\n return new Promise(resolve => {\n this.balconyModel = Balcony.model.clone(true);\n resolve(this.balconyModel);\n });\n }\n }\n\n type(directionVec,type) {\n if (!this.active) return;\n const theta = spherical.setFromVector3(directionVec).theta;\n const balconyPositionCorrection = tempVector.copy(directionVec).negate();\n\n switch (type) {\n case 0:\n this.rotation = theta;\n // balconyPositionCorrection.setLength(1.5);\n break;\n case 1:\n this.rotation = theta + Math.PI / 4;\n // balconyPositionCorrection.setLength(1.5);\n break;\n case 2:\n this.rotation = theta + Math.PI / 2;\n // balconyPositionCorrection.setLength(2.2);\n break;\n case 3:\n this.rotation = theta - Math.PI / 4 + Math.PI;\n // balconyPositionCorrection.setLength(2);\n break;\n case 4:\n this.rotation = theta - Math.PI;\n // balconyPositionCorrection.setLength(1.5);\n break;\n case 5:\n this.rotation = theta - Math.PI + Math.PI / 4;\n // balconyPositionCorrection.setLength(2);\n break;\n case 6:\n this.rotation = theta - Math.PI / 2;\n // balconyPositionCorrection.setLength(2.2);\n break;\n case 7:\n this.rotation = theta - Math.PI / 4;\n // balconyPositionCorrection.setLength(1.5);\n break;\n default:\n this.rotation = theta;\n // balconyPositionCorrection.setX(0);\n // balconyPositionCorrection.setZ(0);\n break;\n }\n\n balconyPositionCorrection.setY(-1);\n this.balconyModel.position.add(balconyPositionCorrection);\n }\n\n remove() {\n if (!this.active || (this.balconyModel && !this.balconyModel.parent)) return;\n\n this.balconyModel.removeFromParent();\n this.balconyModel.traverse(el => {\n if (el.isMesh) {\n el.geometry.dispose();\n el.material.dispose();\n }\n });\n }\n\n parseBalconyType(mesh) {\n if (!this.active) return Balcony.params.defaultType;\n\n const text = mesh.name.match(/balcony\\d/);\n if (text) {\n return Number(text[0].replace('balcony',''));\n } else {\n return Balcony.params.defaultType;\n }\n }\n\n set visibility(state) {\n if (!this.active) return;\n this.balconyModel.visible = state;\n }\n\n set position(vector) {\n if (!this.active) return;\n this.balconyModel.position.copy(vector);\n }\n\n set rotation(angel) {\n if (!this.active) return;\n this.balconyModel.rotation.y = angel;\n }\n\n set furnitureType(number) {\n if (!this.active) return;\n if (!number) {\n number = Math.round(Math.random() * (Balcony.params.objects.length - 1));\n }\n\n this.balconyModel.children.forEach(el => {\n if (el.userData.type !== 'balcony') {\n el.visible = el.userData.type === `object-${number}`;\n }\n });\n }\n\n get active() {\n return Balcony.params.active;\n }\n\n get model() {\n return this.balconyModel;\n }\n\n static async load(manager) {\n const promises = [];\n const textureLoader = new TextureLoader(manager);\n const fbxLoader = new FBXLoader(manager);\n\n //Env texture\n const buildingMaterial = Buildings.getActiveBuilding().instances[0].material;\n\n //Load balcony\n const balconyMaterial = Balcony.#createMaterial(Balcony.params.material,textureLoader);\n balconyMaterial.envMap = buildingMaterial.envMap;\n const balconyModel = Balcony.#loadModel(Balcony.url + Balcony.params.path,'balcony',balconyMaterial,fbxLoader);\n promises.push(balconyModel);\n\n //Load objects\n Balcony.params.objects.forEach((obj,index) => {\n const objectMaterial = Balcony.#createMaterial(obj.material,textureLoader);\n objectMaterial.envMap = buildingMaterial.envMap;\n const objectModel = Balcony.#loadModel(Balcony.url + obj.path,`object-${index}`,objectMaterial,fbxLoader);\n promises.push(objectModel);\n });\n\n return Promise.all(promises);\n }\n\n static #createMaterial(settings,textureLoader) {\n const material = new MeshStandardMaterial();\n Object.entries(settings).forEach(([key,value]) => {\n if (typeof value === 'string') {\n\n const modifiedUrl = Cloudflare.resize(Balcony.url + value, {\n width: 1024,\n quality: 75\n });\n const texture = textureLoader.load(modifiedUrl);\n if (key === 'envMap') {\n texture.mapping = EquirectangularReflectionMapping;\n }\n texture.colorSpace = LinearSRGBColorSpace;\n texture.wrapS = RepeatWrapping;\n texture.wrapT = RepeatWrapping;\n texture.offset.set(0,0);\n texture.repeat.set(1,1);\n texture.anisotropy = 2;\n texture.magFilter = LinearFilter;\n texture.minFilter = LinearMipmapLinearFilter;\n\n material[key] = texture;\n } else {\n material[key] = value;\n }\n });\n\n return material;\n }\n\n static #loadModel(path,type,material,fbxLoader) {\n return new Promise((resolve, reject) => {\n fbxLoader.load(path, model => {\n model.traverse(el => {\n if (el.isMesh) {\n el.material = material;\n el.castShadow = true;\n el.receiveShadow = true;\n }\n });\n model.userData.type = type;\n resolve(model);\n },undefined,() => reject());\n });\n }\n}\n\nclass VantageViewer {\n\n constructor (parent,data,apartment) {\n if (firstScene === null && secondScene === null) {\n firstScene = new Scene();\n secondScene = new Scene();\n }\n\n this.data = data;\n this.apartment = apartment;\n this.sphereScene = firstScene.children.length ? secondScene : firstScene;\n this.scene = threeJsVariables.scene;\n this.camera = threeJsVariables.perspectiveCamera.clone();\n this.renderer = threeJsVariables.renderer;\n this.canvas = this.renderer.domElement;\n this.composer = new Composer(this.renderer,this.scene,this.camera);\n this.objectsToHide = config.features.vantage?.objectsToHide || [];\n\n //Apply effect settings\n Object.entries(threeJsVariables.bundleConfig.effects).forEach(([name,settings]) => {\n const effect = this.composer.getPass(name);\n if (effect) {\n effect.config = settings;\n }\n });\n\n this.card = parent.closest('.options-card');\n this.element = new BaseElement()\n .addClass('vantage-viewer', isMobile ? 'invisible' : null)\n .appendTo(parent)\n .DOMElement;\n\n this.sphere = null;\n this.controls = new OrbitControls(this.camera,this.element);\n this.controls.addEventListener('end', () => renderUpdateValuesOnDemand(false));\n this.viewport = {};\n this.observer = new ResizeObserver(() => {\n this.calculateViewport();\n setTimeout(() => this.calculateViewport(), 100);\n });\n\n this.observer.observe(this.element);\n this.controls.maxPolarAngle = 1.41371669411541;\n this.controls.rotateSpeed = 1;\n this.controls.enablePan = false;\n this.controls.enableZoom = false;\n this.controls.reverseControls = true;\n this.controls.rotateSpeed = 0.15;\n this.camera.near = 0.1;\n\n\n }\n\n setApartment(mesh) {\n this.apartment = mesh;\n }\n\n setData(data) {\n this.data = data;\n }\n\n applySphereAndCameraSettings() {\n let settings = null;\n\n if (this.data.exceptions && this.data.exceptions.length) {\n const findSettings = this.data.exceptions.find(obj => obj.name === this.apartment.name);\n if (findSettings) {\n settings = convertDataFromJSON(findSettings);\n }\n }\n\n if (!settings && this.data.settings) {\n settings = convertDataFromJSON(this.data.settings);\n }\n\n // Apply default settings from config\n if (!settings) {\n settings = this.getOldDefaultSphereSettings();\n settings.camera = config.features.vantage.fov ? config.features.vantage.fov : threeJsVariables.perspectiveCamera.fov;\n }\n\n Object.entries(settings).forEach(([key,value]) => {\n if (key === 'camera') {\n this.camera.fov = value;\n this.camera.updateProjectionMatrix();\n } else {\n this.sphere[key].copy(value);\n }\n });\n }\n\n getOldDefaultSphereSettings() {\n const settings = {\n position: this.apartment.getWorldPosition(new Vector3()),\n rotation: new Euler(),\n scale: new Vector3()\n };\n\n if (threeJsVariables.bundleConfig) {\n const bundleSphere = threeJsVariables.bundleConfig.sphere;\n\n if (config.features.vantage?.rotation) {\n settings.rotation.set(0,config.features.vantage.rotation,0);\n } else {\n settings.rotation.set(bundleSphere.rotation[0],bundleSphere.rotation[1],bundleSphere.rotation[2]);\n }\n\n settings.scale.set(bundleSphere.scale[0],bundleSphere.scale[1],bundleSphere.scale[2]);\n } else {\n const configSphere = config.resources.background;\n settings.rotation.set(configSphere.rotation.x,configSphere.rotation.y,configSphere.rotation.z);\n settings.scale.set(configSphere.scale.x,configSphere.scale.y,configSphere.scale.z);\n }\n\n return settings;\n }\n\n async updateVisibility(state) {\n if (Vantages.scopes.length === 2)\n return;\n\n return new Promise(resolve => {\n const prevDuration = GSAPAnimationMixer.duration;\n GSAPAnimationMixer.duration = 0.1;\n const activeBuilding = Buildings.getActiveBuilding();\n if (state === 'show') {\n if (!Vantages.scopes.length) {\n const mixer = GSAPAnimationMixer.registerNewMixer('exitToOrbit');\n mixer.addCallback('onComplete', () => {\n this.toggleSceneObjects('hide');\n resolve(true);\n });\n\n const cylinderPass = threeJsVariables.composer.getPass('cylinderPass');\n const fadeProgress = {\n value: 1\n };\n\n const fadeAnimation = gsap.to(fadeProgress, {\n value: 0,\n duration: GSAPAnimationMixer.duration,\n ease: GSAPAnimationMixer.ease,\n onStart: () => {\n cylinderPass.active = true;\n showAllBuildings();\n showSceneObjects();\n CylinderBase.hide();\n },\n onUpdate: () => cylinderPass.setProgress(fadeProgress.value),\n onComplete: () => cylinderPass.active = false\n });\n\n mixer.addAnimation(fadeAnimation);\n\n // CylinderBase.hide();\n // showAllBuildings();\n // showSceneObjects();\n mixer.play();\n activeBuilding.selectionsGroup.visible = false;\n if (config.features.vantage.balcony.active) {\n activeBuilding.modelGroup.visible = false;\n }\n }\n } else {\n activeBuilding.selectionsGroup.visible = true;\n if (config.features.vantage.balcony.active) {\n activeBuilding.modelGroup.visible = true;\n }\n this.sphere.removeFromParent();\n this.sphere.traverse(el => {\n if (el.isMesh) {\n el.geometry.dispose();\n el.material.dispose();\n }\n });\n const mixer = GSAPAnimationMixer.registerNewMixer('cylinderEnter');\n mixer.addCallback('onComplete', () => {\n // this.toggleSceneObjects('show');\n resolve(true);\n });\n // CylinderBase.show(activeBuilding);\n // this.toggleSceneObjects('show');\n // hideSceneObjects(activeBuilding);\n // hideBuildings();\n\n const cylinderPass = threeJsVariables.composer.getPass('cylinderPass');\n const fadeProgress = {\n value: 0\n };\n\n const fadeAnimation = gsap.to(fadeProgress, {\n value: 1,\n duration: GSAPAnimationMixer.duration,\n ease: GSAPAnimationMixer.ease,\n onStart: () => {\n this.toggleSceneObjects('show');\n cylinderPass.active = true\n },\n onUpdate: () => cylinderPass.setProgress(fadeProgress.value),\n onComplete: () => {\n hideSceneObjects(activeBuilding);\n hideBuildings();\n cylinderPass.active = false;\n }\n });\n\n mixer.addAnimation(fadeAnimation);\n CylinderBase.show(activeBuilding);\n // hideSceneObjects(activeBuilding);\n // hideBuildings();\n mixer.play();\n }\n GSAPAnimationMixer.duration = prevDuration;\n });\n }\n\n toggleSceneObjects(state) {\n if (Vantages.scopes.length === 2)\n return;\n\n switch(state) {\n case 'show':\n sceneObjectsGroup.traverse(sceneObject => {\n if (this.objectsToHide.includes(sceneObject.name)) {\n sceneObject.visible = true;\n }\n });\n break;\n case 'hide':\n sceneObjectsGroup.traverse(sceneObject => {\n if (this.objectsToHide.includes(sceneObject.name)) {\n sceneObject.visible = false;\n }\n });\n break;\n }\n }\n\n addToScene(obj,needClone = true) {\n if (needClone) {\n const clone = obj.clone(true);\n this.sphereScene.add(clone);\n } else {\n this.sphereScene.add(obj);\n }\n }\n\n addSphere(sphere,textures) {\n this.sphere = sphere.clone(true);\n this.sphere.traverse(el => {\n if (el.isMesh) {\n el.material = el.material.clone();\n el.material.uniforms.map1.value = textures[el.name];\n }\n });\n\n this.sphereScene.add(this.sphere);\n if (config.features.vantage.balcony.active) {\n const scenePass = new RenderPass(this.sphereScene,this.camera);\n scenePass.clear = false;\n this.composer.composer.insertPass(scenePass,1);\n } else {\n this.composer.composer.passes[0].clear = false;\n const scenePass = new RenderPass(this.sphereScene,this.camera);\n this.composer.composer.insertPass(scenePass,0);\n }\n\n }\n\n updateSphereTextures(textures) {\n this.sphere.traverse(el => {\n if (el.isMesh) {\n el.material.uniforms.map1.value = textures[el.name];\n }\n });\n }\n\n setCameraPosition(orbitControlsVector,cameraVector) {\n this.controls.target.copy(orbitControlsVector);\n this.camera.position.copy(cameraVector);\n\n // if (this.buildings) {\n // if (useRealBalcony instanceof Vector3) {\n // this.buildings.visible = true;\n // const direction = new Vector3()\n // .copy(this.controls.target)\n // .clamp(new Vector3(-1,-1,-1),new Vector3(1,1,1))\n // .multiply(useRealBalcony);\n // this.controls.target.add(direction);\n // this.camera.position.add(direction);\n // } else {\n // this.buildings.visible = false;\n // }\n //\n // // const activeBuildingName = Buildings.getActiveBuilding().name;\n // // this.activeBuilding = this.buildings.getObjectByName(activeBuildingName);\n // // this.reorder();\n // }\n\n this.controls.update();\n }\n\n reorder() {\n const currentOrder = ['Vantage', 'Scene objects', 'Project Buildings'];\n const parent = this.activeBuilding.parent;\n const activeBuildingIndex = parent.children.indexOf(this.activeBuilding);\n parent.children[activeBuildingIndex] = parent.children[parent.children.length - 1];\n parent.children[parent.children.length -1] = this.activeBuilding;\n\n currentOrder.forEach((name,index) => {\n const onScene = this.scene.getObjectByName(name);\n if (onScene) {\n const currentPosition = this.scene.children.indexOf(onScene);\n if (currentPosition !== -1 && currentPosition !== index){\n const target = this.scene.children[index];\n if (target) {\n this.scene.children[index] = onScene;\n this.scene.children[currentPosition] = target;\n }\n }\n }\n });\n }\n\n setRotationLimits(vec) {\n const theta = spherical.setFromVector3(vec).theta;\n const limit = Balcony.params.active ? Math.PI / 8 : Math.PI / 4;\n this.controls.minAzimuthAngle = theta - Math.PI - limit;\n this.controls.maxAzimuthAngle = theta - Math.PI + limit;\n }\n\n set360Rotation() {\n this.controls.minAzimuthAngle = -Infinity;\n this.controls.maxAzimuthAngle = Infinity;\n }\n\n setPolarAngleLimit(vec) {\n this.controls.minPolarAngle = this.controls.maxPolarAngle - vec.y / 100;\n }\n\n calculateViewport() {\n const rect = this.element.getBoundingClientRect();\n if (isMobile) {\n if (isPortraitMode()) {\n this.viewport.width = rect.right - rect.left;\n this.viewport.height = rect.bottom - rect.top;\n this.viewport.left = 0;\n this.viewport.bottom = this.renderer.domElement.clientHeight - rect.height;\n } else {\n this.viewport.width = rect.right - rect.left;\n this.viewport.height = rect.bottom - rect.top;\n this.viewport.left = 0;\n this.viewport.bottom = 0;\n }\n } else {\n // const offset = getCurrentLangDirection() === 'ltr' ? 56 : 0;\n const offset = 0;\n this.viewport.width = rect.right - rect.left;\n this.viewport.height = rect.bottom - rect.top;\n this.viewport.left = rect.left - offset;\n this.viewport.bottom = this.renderer.domElement.clientHeight - rect.bottom;\n }\n\n this.resize();\n this.draw();\n }\n\n resize() {\n this.camera.aspect = this.viewport.width / this.viewport.height;\n this.camera.updateProjectionMatrix();\n this.composer.setSize(this.viewport.width,this.viewport.height);\n }\n\n isVisible() {\n const rect = this.element.getBoundingClientRect();\n return !(rect.bottom < 0 || rect.top > this.renderer.domElement.clientHeight ||\n rect.right < 0 || rect.left > this.renderer.domElement.clientWidth);\n }\n\n draw(delta) {\n this.canvas.style.transform = `translateY(${-this.card.scrollTop}px)`;\n this.canvas.style.transition = 'transform .1s';\n this.renderer.setViewport( this.viewport.left, this.viewport.bottom, this.viewport.width, this.viewport.height );\n this.renderer.setScissor( this.viewport.left, this.viewport.bottom, this.viewport.width, this.viewport.height );\n this.composer.render(delta);\n }\n\n async dispose() {\n await this.updateVisibility('hide');\n if (settingsData.activeViewMode === ViewMode.FloorPlan && config.resources.sceneObjects.hideAttachedModelInKeyPlan) {\n hideSceneObjects();\n }\n // this.toggleSceneObjects('show');\n while (this.sphereScene.children.length) {\n this.sphereScene.children[0].removeFromParent();\n }\n this.sphereScene = null;\n this.composer.composer.dispose();\n this.canvas.style.transform = '';\n this.canvas.style.transition = '';\n this.controls.dispose();\n this.element.remove();\n this.observer.disconnect();\n this.element = null;\n this.observer = null;\n this.controls = null;\n this.scene = null;\n this.camera = null;\n this.renderer = null;\n this.viewport = null;\n this.buildings = null;\n this.composer = null;\n this.sphere = null;\n this.activeBuilding = null;\n updateComponentsOnCanvasResize();\n }\n\n set spherePosition(vec) {\n this.sphere.position.copy(vec);\n }\n\n getEquirectangular(size) {\n const cubeRenderTarget = new WebGLCubeRenderTarget(size);\n let cubeCamera;\n\n if (config.features.vantage.balcony.active) {\n cubeCamera = new CubeCamera2(0.1,8000,cubeRenderTarget,this.scene,this.sphereScene);\n } else {\n cubeCamera = new CubeCamera2(0.1,8000,cubeRenderTarget,this.sphereScene,this.scene);\n }\n\n cubeCamera.position.copy(this.camera.position);\n cubeCamera.update(this.renderer);\n\n const equirectangular = new CubemapToEquirectangular(this.renderer,size,false);\n equirectangular.convert(cubeCamera);\n }\n\n}\n\nclass CubeCamera2 extends CubeCamera{\n constructor (near,far,renderTarget,scene1,scene2) {\n super(near,far,renderTarget);\n\n this.scene1 = scene1;\n this.scene2 = scene2;\n\n this.coordinateSystem = 2000;\n this.updateCoordinateSystem();\n }\n\n update( renderer ) {\n\n if ( this.parent === null ) this.updateMatrixWorld();\n\n const renderTarget = this.renderTarget;\n\n const [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = this.children;\n\n const currentRenderTarget = renderer.getRenderTarget();\n\n const currentToneMapping = renderer.toneMapping;\n const currentXrEnabled = renderer.xr.enabled;\n const autoClear = renderer.autoClear;\n\n renderer.toneMapping = NoToneMapping;\n renderer.xr.enabled = false;\n renderer.autoClear = false;\n\n const generateMipmaps = renderTarget.texture.generateMipmaps;\n\n renderTarget.texture.generateMipmaps = false;\n\n renderer.setRenderTarget( renderTarget, 0 );\n renderer.render( this.scene1, cameraPX );\n renderer.render( this.scene2, cameraPX );\n\n renderer.setRenderTarget( renderTarget, 1 );\n renderer.render( this.scene1, cameraNX );\n renderer.render( this.scene2, cameraNX );\n\n renderer.setRenderTarget( renderTarget, 2 );\n renderer.render( this.scene1, cameraPY );\n renderer.render( this.scene2, cameraPY );\n\n renderer.setRenderTarget( renderTarget, 3 );\n renderer.render( this.scene1, cameraNY );\n renderer.render( this.scene2, cameraNY );\n\n renderer.setRenderTarget( renderTarget, 4 );\n renderer.render( this.scene1, cameraPZ );\n renderer.render( this.scene2, cameraPZ );\n\n renderTarget.texture.generateMipmaps = generateMipmaps;\n\n renderer.setRenderTarget( renderTarget, 5 );\n renderer.render( this.scene1, cameraNZ );\n renderer.render( this.scene2, cameraNZ );\n\n renderer.setRenderTarget( currentRenderTarget );\n\n renderer.toneMapping = currentToneMapping;\n renderer.xr.enabled = currentXrEnabled;\n renderer.autoClear = autoClear;\n\n renderTarget.texture.needsPMREMUpdate = true;\n\n }\n\n}\n\nfunction convertDataFromJSON (object) {\n const data = {};\n Object.entries(object).forEach(([key,value]) => {\n if (typeof value === 'string') return;\n if (typeof value === 'number') {\n data[key] = value;\n } else {\n if (key === 'rotation') {\n data[key] = new Euler().fromArray(value);\n } else {\n data[key] = new Vector3().fromArray(value);\n }\n }\n });\n\n return data;\n}\n\nwindow.vantage = Vantages;\n","'use strict';\n\n\nimport { projectMode } from '../../../settings';\nimport { Sky } from '../../liveAnimations/litemode/sky/Sky';\n\nexport class ClearSky {\n constructor () {\n this.active = false;\n }\n\n enable() {\n this.active = true;\n\n if (projectMode.LiteMode.isActive()) {\n Sky.setData({clouds: {preset: 0} });\n }\n }\n\n disable() {\n this.active = false;\n }\n\n}","'use strict';\n\nimport {\n BufferGeometry,\n Float32BufferAttribute,\n Group, Points,\n PointsMaterial,\n TextureLoader, Vector3, Color\n} from 'three';\n\nimport { assignDeep, projectMode, threeJsVariables } from '../../../settings';\nimport { Weather } from './Weather';\nimport { degToRad } from 'three/src/math/MathUtils';\nimport { OrbitDayAndNight } from '../../liveAnimations/DayNight/OrbitDayAndNight';\nimport { CLOUDS } from '../../liveAnimations/litemode/sky/Sky';\n\nconst DEFAULT_PARAMS = {\n uHorizon: 4.2,\n scale: 2.7,\n dark: 0.0,\n light: 0.111,\n cover: 0.5,\n alpha: -1.983,\n tint: 0.831,\n speed: 0.002\n};\n\n\nexport class Clouds {\n constructor (weatherData) {\n\n if (projectMode.LiteMode.isActive()){\n this.active = false;\n } else {\n\n this.active = false;\n this.weatherData = weatherData;\n this.background = null;\n this.params = assignDeep(DEFAULT_PARAMS,config.features.weather.settings.clouds);\n this.prepareBackgroundMaterials();\n }\n\n return this;\n }\n\n #getCloudsDensity() {\n const density = this.weatherData.clouds.all;\n let preset = null;\n \n if (density === 0){\n preset = 0;\n } else if (density > 0 && density <= 10) {\n preset = 10;\n } else if (density > 10 && density <= 20) {\n preset = 20;\n } else if (density > 20 && density <= 30) {\n preset = 30;\n } else if (density > 30 && density <= 40) {\n preset = 40;\n } else if (density > 40 && density <= 50) {\n preset = 50;\n } else if (density > 50 && density <= 60) {\n preset = 60;\n } else if (density > 60 && density <= 70) {\n preset = 70;\n } else if (density > 70 && density <= 80) {\n preset = 80;\n } else if (density > 80 && density <= 90) {\n preset = 90;\n } else {\n preset = 100;\n }\n \n return CLOUDS[preset];\n }\n\n enable() {\n\n if (projectMode.LiteMode.isActive()) {\n projectMode.LiteMode.cloudsToggle('enable');\n this.active = true;\n } else {\n if (!this.background) {\n this.prepareBackgroundMaterials();\n \n if (!this.background) return;\n }\n this.active = true;\n \n const currentWeather = Weather.checkedCurrentWeather();\n let cloudsCover = this.params.cover;\n let cloudsAlpha = this.params.alpha;\n let cloudsSpeed = this.params.speed;\n \n if (currentWeather) {\n const preset = this.#getCloudsDensity();\n cloudsCover = preset.cover;\n cloudsAlpha = preset.alpha;\n cloudsSpeed = this.weatherData.wind.speed / 1000;\n }\n \n this.background.traverse(el => {\n if (el.isMesh) {\n el.material.uniforms.cloudsCover.value = cloudsCover;\n el.material.uniforms.cloudsAlpha.value = cloudsAlpha;\n el.material.uniforms.uSpeed.value = cloudsSpeed;\n el.material.uniforms.cloudsActive.value = 1.0;\n }\n });\n }\n\n }\n\n disable() {\n\n if (projectMode.LiteMode.isActive()) {\n projectMode.LiteMode.cloudsToggle('disable');\n this.active = false;\n } else {\n\n this.active = false;\n this.background && this.background.traverse(el => {\n if (el.isMesh) {\n el.material.uniforms.cloudsActive.value = 0.0;\n }\n });\n }\n\n }\n\n update(time) {\n if (!projectMode.LiteMode.isActive()) {\n if (this.active && this.background) {\n this.background.traverse(el => {\n if (el.isMesh) {\n el.material.uniforms.uTime.value = time;\n }\n })\n // this.particles.forEach(particle => particle.tick());\n }\n }\n }\n \n prepareBackgroundMaterials() {\n this.background = threeJsVariables.background;\n this.background && this.background.traverse(el => {\n if (el.isMesh) {\n el.material.uniforms.cloudsScale.value = this.params.scale;\n el.material.uniforms.cloudsDark.value = this.params.dark;\n el.material.uniforms.cloudsLight.value = this.params.light;\n el.material.uniforms.cloudsCover.value = this.params.cover;\n el.material.uniforms.cloudsAlpha.value = this.params.alpha;\n el.material.uniforms.cloudsTint.value = this.params.tint;\n el.material.uniforms.horizon.value = this.params.uHorizon;\n el.material.uniforms.uSpeed.value = this.params.speed;\n }\n });\n }\n}\n","'use strict';\n\nimport { Weather } from './Weather';\nimport { CLOUDS } from '../../liveAnimations/litemode/sky/Sky';\nimport { OrbitDayAndNight } from '../../liveAnimations/DayNight/OrbitDayAndNight';\n\nexport class CloudsShader {\n\n constructor (weatherData) {\n this.weatherData = weatherData;\n this.active = false;\n }\n\n enable() {\n let preset;\n\n if (Weather.checkedCurrentWeather()) {\n preset = this.#getCloudsPreset();\n } else {\n preset = {clouds: {preset: 50 } };\n }\n\n const cloudsParams = CLOUDS[preset.clouds.preset];\n OrbitDayAndNight.sky.material.uniforms.cloudsCover.value = cloudsParams.cover;\n OrbitDayAndNight.sky.material.uniforms.cloudsAlpha.value = cloudsParams.alpha;\n OrbitDayAndNight.sky.material.uniforms.showClouds.value = true;\n this.active = true;\n }\n\n disable() {\n OrbitDayAndNight.sky.material.uniforms.showClouds.value = false;\n this.active = false;\n }\n\n #getCloudsPreset() {\n\n const data = {};\n\n if (this.weatherData.hasOwnProperty('clouds')) {\n const cloudsDensity = this.weatherData.clouds.all;\n data.clouds = {};\n\n if (cloudsDensity === 0){\n data.clouds.preset = 0;\n } else if (cloudsDensity > 0 && cloudsDensity <= 10) {\n data.clouds.preset = 10;\n } else if (cloudsDensity > 10 && cloudsDensity <= 20) {\n data.clouds.preset = 20;\n } else if (cloudsDensity > 20 && cloudsDensity <= 30) {\n data.clouds.preset = 30;\n } else if (cloudsDensity > 30 && cloudsDensity <= 40) {\n data.clouds.preset = 40;\n } else if (cloudsDensity > 40 && cloudsDensity <= 50) {\n data.clouds.preset = 50;\n } else if (cloudsDensity > 50 && cloudsDensity <= 60) {\n data.clouds.preset = 60;\n } else if (cloudsDensity > 60 && cloudsDensity <= 70) {\n data.clouds.preset = 70;\n } else if (cloudsDensity > 70 && cloudsDensity <= 80) {\n data.clouds.preset = 80;\n } else if (cloudsDensity > 80 && cloudsDensity < 100) {\n data.clouds.preset = 90;\n } else {\n data.clouds.preset = 100;\n }\n } else {\n data.clouds.preset = 0;\n }\n\n data.wind = this.weatherData.wind;\n\n return data;\n }\n\n update() {\n\n }\n\n}","'use strict';\n\n\nimport {\n Color,\n Group,\n Mesh,\n MeshBasicMaterial,\n ShaderMaterial,\n TextureLoader,\n} from 'three';\nimport drizzleVertex from '../../threejs/Shaders/weather/drizzle/vertex.glsl';\nimport drizzleFragment from '../../threejs/Shaders/weather/drizzle/fragment.glsl';\nimport { projectMode, threeJsVariables } from '../../../settings';\nimport { basic_tile } from '../../threejs/environment';\nimport { rotateToCamera } from '../../controls/orbitControls';\nimport { Weather } from './Weather';\nimport { Effect } from '../../post-processing/Passes/Effect';\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass';\n\nexport class Drizzle {\n\n static rainbow = null;\n static rainbowVisible = false;\n\n constructor () {\n\n this.fogColor = new Color(0.87,0.87,0.87);\n this.envFogDensity = 0.0005;\n this.bgFogDensity = 0.0005;\n this.params = {\n timeScale: 3.0,\n uvScale: 0.4,\n size: -540.0\n };\n\n if (!projectMode.LiteMode.isActive()) {\n const url = './assets/textures/rainbow/';\n const bg = threeJsVariables.scene.getObjectByName('Background');\n const textureLoader = new TextureLoader();\n\n Drizzle.rainbow = new Group();\n Drizzle.rainbow.name = 'rainbow';\n Drizzle.rainbow.position.copy(bg.position);\n Drizzle.rainbow.scale.copy(bg.scale);\n Drizzle.rainbow.rotation.copy(bg.rotation);\n\n Drizzle.rainbow.position.y = config.features.weather?.settings?.rainbow?.positionY || bg.position.y;\n\n bg.traverse(el => {\n if (el.isMesh){\n const g = el.geometry.clone();\n const m = new MeshBasicMaterial({\n map: textureLoader.load(url + el.name + '.png'),\n transparent: true\n });\n\n const mesh = new Mesh(g,m);\n mesh.name = el.name;\n Drizzle.rainbow.add(mesh);\n }\n });\n }\n\n this.material = new ShaderMaterial({\n vertexShader: drizzleVertex,\n fragmentShader: drizzleFragment,\n uniforms: {\n tDiffuse: {\n value: null\n },\n uTimeScale: {\n value: this.params.timeScale\n },\n uUvScale: {\n value: this.params.uvScale\n },\n uSize: {\n value: this.params.size\n },\n uTime: {\n value: 0\n }\n },\n depthWrite: false,\n depthTest: false\n });\n\n // this.effect = new PostFX('drizzle',threeJsVariables.renderer,this.material);\n this.effect = new DrizzleEffect(this.material);\n threeJsVariables.composer.addPass('drizzle',this.effect);\n this.#debug();\n\n return this;\n }\n\n enable() {\n if (!Weather.showed) return;\n this.effect.active = true;\n\n if (!projectMode.LiteMode.isActive()) {\n /* ENV FOG */\n basic_tile.uniforms.fogColor.value.copy(this.fogColor);\n basic_tile.uniforms.fogDensity.value = this.envFogDensity;\n\n if (threeJsVariables.tilesRenderer){\n threeJsVariables.tilesRenderer.forEachLoadedModel((scene,tile)=>{\n scene.traverse(obj => {\n if ( obj.material && obj.material.isShaderMaterial ) {\n obj.material.uniforms.fogColor.value.copy(this.fogColor);\n obj.material.uniforms.fogDensity.value = this.envFogDensity;\n }\n });\n });\n } else {\n let env = threeJsVariables.scene.getObjectByName('async env');\n env && env.traverse(obj => {\n if ( obj.material) {\n obj.material.uniforms.fogColor.value.copy(this.fogColor);\n obj.material.uniforms.fogDensity.value = this.envFogDensity;\n }\n });\n }\n\n /* BG FOG */\n const bg = threeJsVariables.scene.getObjectByName('Background');\n bg.traverse(obj => {\n if (obj.material) {\n obj.material.uniforms.fogColor.value.copy(this.fogColor);\n obj.material.uniforms.fogDensity.value = this.bgFogDensity;\n }\n });\n\n /* RAINBOW */\n threeJsVariables.scene.add(Drizzle.rainbow);\n threeJsVariables.renderList.reorder();\n Drizzle.rainbow.rotation.y = rotateToCamera();\n Drizzle.rainbowVisible = true;\n\n\n /* SCENE FOG */\n // threeJsVariables.scene.fog = new Fog(new Color().copy(this.fogColor),1.0,725);\n } else {\n projectMode.LiteMode.rainbowToggle('enable');\n }\n\n\n }\n\n #debug() {\n if (!projectMode.LiteMode.debug) return;\n\n const folder = projectMode.LiteMode.debugFolder.addFolder('Drizzle');\n\n folder.add(this.params,'timeScale', 0.0, 20.0, 0.001).onChange(value => {\n this.material.uniforms.uTimeScale.value = value;\n });\n\n folder.add(this.params,'uvScale', 0.0, 10.0, 0.001).onChange(value => {\n this.material.uniforms.uUvScale.value = value;\n });\n\n folder.add(this.params,'size', -2000.0, -20.0, 10.0).onChange(value => {\n this.material.uniforms.uSize.value = value;\n });\n\n }\n\n disable() {\n this.effect.active = false;\n\n if (!projectMode.LiteMode.isActive()) {\n /* ENV FOG */\n basic_tile.uniforms.fogDensity.value = 0.0;\n\n if (threeJsVariables.tilesRenderer){\n threeJsVariables.tilesRenderer.forEachLoadedModel((scene,tile)=>{\n scene.traverse(obj => {\n if ( obj.material) {\n obj.material.uniforms.fogDensity.value = 0.0;\n }\n });\n });\n } else {\n let env = threeJsVariables.scene.getObjectByName('async env');\n env && env.traverse(obj => {\n if ( obj.material && obj.material.isShaderMaterial ) {\n obj.material.uniforms.fogDensity.value = 0.0;\n }\n });\n }\n\n /* BG FOG */\n const bg = threeJsVariables.scene.getObjectByName('Background');\n bg.traverse(obj => {\n if (obj.material) {\n obj.material.uniforms.fogDensity.value = 0.0;\n }\n });\n\n\n /* RAINBOW */\n Drizzle.rainbowVisible = false;\n Drizzle.rainbow.removeFromParent();\n\n Drizzle.rainbow.traverse(el => {\n if (el.isMesh){\n el.material.map.dispose();\n el.material.dispose();\n el.geometry.dispose();\n }\n });\n\n /* SCENE FOG */\n // threeJsVariables.scene.fog = null;\n\n } else {\n projectMode.LiteMode.rainbowToggle('disable');\n }\n }\n\n update(time) {\n if (this.effect.active) {\n this.material.uniforms.uTime.value = time;\n }\n }\n\n static rotateRainbow() {\n if (Drizzle.rainbow && Drizzle.rainbowVisible) {\n Drizzle.rainbow.rotation.y = rotateToCamera();\n }\n }\n}\n\nclass DrizzleEffect extends Effect{\n constructor (material) {\n super();\n this.effect = new ShaderPass(material);\n this.active = false;\n }\n\n}\n","'use strict';\n\nimport { Color, Fog, ShaderMaterial } from 'three';\nimport { projectMode, threeJsVariables } from '../../../settings';\nimport rainVertex from '../../threejs/Shaders/weather/rain/vertexShader.glsl';\nimport rainFragment from '../../threejs/Shaders/weather/rain/fragmentShader.glsl';\nimport { basic_tile } from '../../threejs/environment';\nimport { OrbitDayAndNight } from '../../liveAnimations/DayNight/OrbitDayAndNight';\nimport { Weather } from './Weather';\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass';\nimport { Effect } from '../../post-processing/Passes/Effect';\nimport { resetFogToDefault, setFogParams } from '../../post-processing/Passes/Fog';\n\n\n\nexport class Rain {\n static #material = null;\n static #params = {\n rainSpatialDensityX: 100.0,\n rainSpatialDensityY: 33.0,\n rainMaxDensity: 0.4,\n rainSpeed: 20.0,\n dropletLength: 1.0,\n dropletWidth: 0.01,\n fogFar: config.features?.weather?.settings?.rain?.fogFar || 0.5\n };\n\n constructor () {\n\n this.fogColor = new Color(0.47,0.47,0.47);\n this.envFogDensity = 0.0015;\n this.bgFogDensity = 0.0015;\n\n Rain.#material = new ShaderMaterial({\n vertexShader: rainVertex,\n fragmentShader: rainFragment,\n uniforms: {\n tDiffuse: {\n value: null\n },\n uTime: {\n value: 0\n },\n rainSpatialDensityX: {\n value: Rain.#params.rainSpatialDensityX\n },\n rainSpatialDensityY: {\n value: Rain.#params.rainSpatialDensityY\n },\n rainMaxDensity: {\n value: Rain.#params.rainMaxDensity\n },\n rainSpeed: {\n value: Rain.#params.rainSpeed\n },\n dropletLength: {\n value: Rain.#params.dropletLength\n },\n dropletWidth: {\n value: Rain.#params.dropletWidth\n }\n },\n depthWrite: false,\n depthTest: false\n });\n\n // this.effect = new PostFX('rain',threeJsVariables.renderer,Rain.#material);\n this.effect = new RainEffect(Rain.#material);\n threeJsVariables.composer.addPass('rain',this.effect);\n\n // const gui = new dat.GUI();\n //\n // gui.add(options,'rainSpatialDensityX',0.0,100.0, 0.01).onChange((v) =>{\n // this.material.uniforms.rainSpatialDensityX.value = v;\n // });\n //\n // gui.add(options,'rainSpatialDensityY',0.0,100.0,0.01).onChange((v) =>{\n // this.material.uniforms.rainSpatialDensityY.value = v;\n // });\n //\n // gui.add(options,'rainMaxDensity',0.0,100.0,0.01).onChange((v) =>{\n // this.material.uniforms.rainMaxDensity.value = v;\n // });\n //\n // gui.add(options,'rainSpeed',0.0,100.0,0.01).onChange((v) =>{\n // this.material.uniforms.rainSpeed.value = v;\n // });\n //\n // gui.add(options,'dropletLength',0.0,100.0,0.01).onChange((v) =>{\n // this.material.uniforms.dropletLength.value = v;\n // });\n //\n // gui.add(options,'dropletWidth',0.0,100.0,0.01).onChange((v) =>{\n // this.material.uniforms.dropletWidth.value = v;\n // });\n\n this.#debug();\n\n return this;\n }\n\n enable() {\n if (!Weather.showed) return;\n this.effect.active = true;\n \n if (!projectMode.LiteMode.isActive()) {\n setFogParams({\n active: true,\n fogColor: \"#4b5159\",\n fogDensity: 0.95,\n fogFar: Rain.#params.fogFar,\n fogNear: 1\n });\n }\n }\n\n #debug() {\n if (!projectMode.LiteMode.debug) return;\n\n const folder = projectMode.LiteMode.debugFolder.addFolder('Rain');\n\n folder.add(Rain.#params,'rainSpatialDensityX', 0.0, 100.0, 0.001).onChange(value => {\n Rain.#material.uniforms.rainSpatialDensityX.value = value;\n });\n\n folder.add(Rain.#params,'rainSpatialDensityY', 0.0, 100.0, 0.001).onChange(value => {\n Rain.#material.uniforms.rainSpatialDensityY.value = value;\n });\n\n folder.add(Rain.#params,'rainMaxDensity', 0.0, 5.0, 0.001).onChange(value => {\n Rain.#material.uniforms.rainMaxDensity.value = value;\n });\n\n folder.add(Rain.#params,'rainSpeed', 0.0, 100.0, 0.001).onChange(value => {\n Rain.#material.uniforms.rainSpeed.value = value;\n });\n\n folder.add(Rain.#params,'dropletLength', 0.0, 5.0, 0.001).onChange(value => {\n Rain.#material.uniforms.dropletLength.value = value;\n });\n\n folder.add(Rain.#params,'dropletWidth', 0.0, 5.0, 0.001).onChange(value => {\n Rain.#material.uniforms.dropletWidth.value = value;\n });\n\n }\n\n disable() {\n this.effect.active = false;\n \n if (!projectMode.LiteMode.isActive()) {\n resetFogToDefault();\n }\n }\n\n static resetToDefault() {\n Rain.#material.uniforms.rainMaxDensity.value = Rain.#params.rainMaxDensity;\n }\n\n static setData(data) {\n if (!data.hasOwnProperty('rain')) return;\n\n Rain.#material.uniforms.rainMaxDensity.value = data.intensity;\n }\n\n update(time) {\n if (this.effect.active) {\n Rain.#material.uniforms.uTime.value = time;\n }\n }\n\n}\n\n\nclass RainEffect extends Effect{\n constructor (material) {\n super();\n this.effect = new ShaderPass(material);\n this.active = false;\n }\n\n}\n","'use strict';\n\nimport {\n ShaderMaterial, Color,\n} from 'three';\nimport { isMobile, projectMode, threeJsVariables } from '../../../settings';\nimport snowVertex from '../../threejs/Shaders/weather/snow/vertexShader.glsl';\nimport snowFragment from '../../threejs/Shaders/weather/snow/fragmentShader.glsl';\nimport { Weather } from './Weather';\nimport { Effect } from '../../post-processing/Passes/Effect';\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass';\nimport { resetFogToDefault, setFogParams } from '../../post-processing/Passes/Fog';\nimport { OrbitDayAndNight } from '../../liveAnimations/DayNight/OrbitDayAndNight';\n\nexport class Snow {\n static #material;\n static #params = {\n layers: isMobile ? 15 : 50,\n depth: 0.5,\n width: 0.3,\n speed: 0.6,\n snowflakeSize: config.features?.weather?.settings?.snow?.flakeSize || 1,\n fogFar: config.features?.weather?.settings?.snow?.fogFar || 0.5\n };\n\n constructor () {\n this.fogColor = new Color(0.87,0.87,0.87);\n this.envFogDensity = 0.0025;\n this.bgFogDensity = 0.0025;\n\n Snow.#material = new ShaderMaterial({\n vertexShader: snowVertex,\n fragmentShader: snowFragment,\n uniforms: {\n tDiffuse: {\n value: null\n },\n uLayers: {\n value: Snow.#params.layers\n },\n uDepth: {\n value: Snow.#params.depth\n },\n uWidth: {\n value: Snow.#params.width\n },\n uSpeed: {\n value: Snow.#params.speed\n },\n uTime: {\n value: 0\n },\n uParticleSize: {\n value: Snow.#params.snowflakeSize\n },\n uLiteMode: {\n value: projectMode.LiteMode.isActive()\n }\n },\n depthWrite: false,\n depthTest: false\n });\n\n // this.effect = new PostFX('snow',threeJsVariables.renderer,Snow.#material);\n this.effect = new SnowEffect(Snow.#material);\n threeJsVariables.composer.addPass('snow',this.effect);\n\n this.#debug();\n\n return this;\n }\n\n enable() {\n if (!Weather.showed) return;\n this.effect.active = true;\n \n if (projectMode.LiteMode.isActive()) {\n projectMode.LiteMode.cloudsToggle('enable');\n } else {\n setFogParams({\n active: true,\n fogColor: \"#dedede\",\n fogDensity: 0.95,\n fogFar: Snow.#params.fogFar,\n fogNear: 1\n });\n }\n }\n\n disable() {\n this.effect.active = false;\n \n if (projectMode.LiteMode.isActive()) {\n projectMode.LiteMode.cloudsToggle('disable');\n } else {\n resetFogToDefault();\n }\n }\n\n #debug() {\n if (!projectMode.LiteMode.debug) return;\n\n const folder = projectMode.LiteMode.debugFolder.addFolder('Snow');\n\n folder.add(Snow.#params,'layers', 0, 100, 1).onChange(value => {\n Snow.#material.uniforms.uLayers.value = value;\n });\n\n folder.add(Snow.#params,'depth', 0.0, 2.0, 0.001).onChange(value => {\n Snow.#material.uniforms.uDepth.value = value;\n });\n\n folder.add(Snow.#params,'width', 0.0, 10.0, 0.001).onChange(value => {\n Snow.#material.uniforms.uWidth.value = value;\n });\n\n folder.add(Snow.#params,'speed', 0.0, 50.0, 0.001).onChange(value => {\n Snow.#material.uniforms.uSpeed.value = value;\n });\n }\n\n static setData(data) {\n if (!data.hasOwnProperty('snow')) return;\n\n Snow.#material.uniforms.uSpeed.value = 0.25 + data.snow.intensity;\n }\n\n static resetToDefault() {\n Snow.#material.uniforms.uSpeed.value = Snow.#params.speed;\n }\n\n update(time) {\n if (this.effect.active) {\n Snow.#material.uniforms.uTime.value = time;\n }\n }\n}\n\nclass SnowEffect extends Effect{\n constructor (material) {\n super();\n this.effect = new ShaderPass(material);\n this.active = false;\n }\n\n}\n","'use strict';\n\n\nimport { BufferGeometry, Float32BufferAttribute, Points, PointsMaterial, TextureLoader } from 'three';\nimport { projectMode, threeJsVariables } from '../../../settings';\n\nexport class StaticClouds {\n static #clouds = null;\n #active = config.features.staticClouds !== false;\n\n constructor () {\n if (projectMode.LiteMode.isActive() || !this.#active) return;\n\n const textureLoader = new TextureLoader();\n const URL = '/assets/textures/clouds/cloud-01.png';\n const texture = textureLoader.load(URL);\n\n const geometry = new BufferGeometry();\n const vertices = [];\n\n for ( let i = 0; i < 300; i ++ ) {\n\n let x = Math.random() * 700 - 350;\n let z = Math.random() * 700 - 350;\n let y = 370 + Math.random() * 370 * 2;\n\n vertices.push( x, y, z );\n }\n\n geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ));\n\n const material = new PointsMaterial({\n size: 350,\n sizeAttenuation: false,\n map: texture,\n transparent: true,\n depthWrite: false,\n alphaTest: 0\n });\n\n StaticClouds.#clouds = new Points(geometry,material);\n StaticClouds.#clouds.name = 'Static Clouds';\n\n threeJsVariables.scene.add(StaticClouds.#clouds);\n threeJsVariables.renderList.reorder();\n }\n\n static toggle(action) {\n if (!StaticClouds.#clouds) return;\n\n switch (action) {\n case 'show':\n StaticClouds.#clouds.visible = true;\n break;\n case 'hide':\n StaticClouds.#clouds.visible = false;\n break;\n }\n }\n\n}\n","'use strict';\n\nimport { Color, Fog, ShaderMaterial } from 'three';\nimport stormVertex from '../../threejs/Shaders/weather/thunderstorm/vertexShader.glsl';\nimport stormFragment from '../../threejs/Shaders/weather/thunderstorm/fragmentShader.glsl';\nimport { projectMode, threeJsVariables } from '../../../settings';\nimport * as dat from 'dat.gui';\nimport { basic_tile } from '../../threejs/environment';\nimport { Weather } from './Weather';\nimport { Effect } from '../../post-processing/Passes/Effect';\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass';\n\nexport class Thunderstorm {\n constructor () {\n\n this.fogColor = new Color(0.37,0.37,0.37);\n this.envFogDensity = 0.0015;\n this.bgFogDensity = 0.0015;\n\n const options = {\n rainSpatialDensityX: 100.0,\n rainSpatialDensityY: 33.0,\n rainMaxDensity: 1.0,\n rainSpeed: 35.0,\n dropletLength: 1.0,\n dropletWidth: 0.01\n };\n\n\n this.material = new ShaderMaterial({\n vertexShader: stormVertex,\n fragmentShader: stormFragment,\n uniforms: {\n tDiffuse: {\n value: null\n },\n uTime: {\n value: 0\n },\n rainSpatialDensityX: {\n value: options.rainSpatialDensityX\n },\n rainSpatialDensityY: {\n value: options.rainSpatialDensityY\n },\n rainMaxDensity: {\n value: options.rainMaxDensity\n },\n rainSpeed: {\n value: options.rainSpeed\n },\n dropletLength: {\n value: options.dropletLength\n },\n dropletWidth: {\n value: options.dropletWidth\n }\n }\n });\n\n // this.effect = new PostFX('thunderstorm',threeJsVariables.renderer,this.material);\n this.effect = new ThunderstormEffect(this.material);\n threeJsVariables.composer.addPass('thunderstorm',this.effect);\n\n const gui = new dat.GUI();\n\n gui.add(options,'rainSpatialDensityX',0.0,100.0, 0.01).onChange((v) =>{\n this.material.uniforms.rainSpatialDensityX.value = v;\n });\n\n gui.add(options,'rainSpatialDensityY',0.0,100.0,0.01).onChange((v) =>{\n this.material.uniforms.rainSpatialDensityY.value = v;\n });\n\n gui.add(options,'rainMaxDensity',0.0,100.0,0.01).onChange((v) =>{\n this.material.uniforms.rainMaxDensity.value = v;\n });\n\n gui.add(options,'rainSpeed',0.0,100.0,0.01).onChange((v) =>{\n this.material.uniforms.rainSpeed.value = v;\n });\n\n gui.add(options,'dropletLength',0.0,100.0,0.01).onChange((v) =>{\n this.material.uniforms.dropletLength.value = v;\n });\n\n gui.add(options,'dropletWidth',0.0,100.0,0.01).onChange((v) =>{\n this.material.uniforms.dropletWidth.value = v;\n });\n\n return this;\n }\n\n enable() {\n if (!Weather.showed) return;\n this.effect.active = true;\n\n if (!projectMode.LiteMode.isActive()) {\n\n /* ENV FOG */\n basic_tile.uniforms.fogColor.value.copy(this.fogColor);\n basic_tile.uniforms.fogDensity.value = this.envFogDensity;\n\n if (threeJsVariables.tilesRenderer){\n threeJsVariables.tilesRenderer.forEachLoadedModel((scene,tile)=>{\n scene.traverse(obj => {\n if ( obj.material && obj.material.isShaderMaterial ) {\n obj.material.uniforms.fogColor.value.copy(this.fogColor);\n obj.material.uniforms.fogDensity.value = this.envFogDensity;\n }\n });\n });\n } else {\n let env = threeJsVariables.scene.getObjectByName('async env');\n env && env.traverse(obj => {\n if ( obj.material) {\n obj.material.uniforms.fogColor.value.copy(this.fogColor);\n obj.material.uniforms.fogDensity.value = this.envFogDensity;\n }\n });\n }\n\n /* BG FOG */\n const bg = threeJsVariables.scene.getObjectByName('Background');\n bg.traverse(obj => {\n if (obj.material) {\n obj.material.uniforms.fogColor.value.copy(this.fogColor);\n obj.material.uniforms.fogDensity.value = this.bgFogDensity;\n }\n });\n\n /* SCENE FOG */\n threeJsVariables.scene.fog = new Fog(new Color().copy(this.fogColor),1.0,825);\n }\n }\n\n disable() {\n this.effect.active = false;\n\n if (!projectMode.LiteMode.isActive()) {\n\n /* ENV FOG */\n basic_tile.uniforms.fogDensity.value = 0.0;\n\n if (threeJsVariables.tilesRenderer){\n threeJsVariables.tilesRenderer.forEachLoadedModel((scene,tile)=>{\n scene.traverse(obj => {\n if ( obj.material && obj.material.isShaderMaterial ) {\n obj.material.uniforms.fogDensity.value = 0.0;\n }\n });\n });\n } else {\n let env = threeJsVariables.scene.getObjectByName('async env');\n env && env.traverse(obj => {\n if ( obj.material) {\n obj.material.uniforms.fogDensity.value = 0.0;\n }\n });\n }\n\n /* BG FOG */\n const bg = threeJsVariables.scene.getObjectByName('Background');\n bg.traverse(obj => {\n if (obj.material) {\n obj.material.uniforms.fogDensity.value = 0.0;\n }\n });\n\n /* SCENE FOG */\n threeJsVariables.scene.fog = null;\n }\n }\n\n update(time) {\n if (this.effect.active) {\n this.material.uniforms.uTime.value = time;\n }\n }\n\n\n}\n\n\nclass ThunderstormEffect extends Effect{\n constructor (material) {\n super();\n this.effect = new ShaderPass(material);\n this.active = false;\n }\n\n}\n","'use strict';\n\nimport {createHtmlElement, lockScreenOrientation, rgbaToHexA, userPrevent} from '../../../functions';\nimport gsap from 'gsap';\nimport {changeLangToCurrent, getCurrentLang} from \"../langSwitcher/langSwitcher\";\nimport { isMobile } from '../../../settings';\nimport {Switch} from \"../../interfaces/switchers/Switch\";\nimport {lordIconColors, setLordIcon} from \"../../../lordicon\";\nimport {Rain} from \"./Rain\";\nimport {Snow} from \"./Snow\";\nimport {ClearSky} from \"./ClearSky\";\nimport {Clouds} from \"./Clouds\";\nimport { Time } from '../../projectTime/Time';\nimport { OrbitDayAndNight } from '../../liveAnimations/DayNight/OrbitDayAndNight';\nimport { CloudsShader } from './CloudsShader';\nimport {BaseElement} from \"../../interfaces/BaseElement\";\nimport { Thunderstorm } from './Thunderstorm';\nimport { Drizzle } from './Drizzle';\nimport { Cookie } from '../../Cookie/Cookie';\nimport { DayNightButton } from '../../threejs/DayNightButton/DayNightButton';\n// import { dynamicFogToggle } from '../../post-processing/Passes/Fog';\n\nexport class Weather extends Time{\n #element = null;\n #parent = null;\n #displayOptionsOptions = null;\n #animationDuration = 0.6;\n #iconUrl = config.features.weather?.api.iconUrl;\n #weatherIconColors = {\n primaryColor: null,\n secondaryColor: null,\n activeColor: null,\n };\n #elementsHeights = {\n states: 0,\n widgetSwitcher: 0,\n }\n #timeElement = null;\n\n static #currentWeather = null;\n static #active = config.features.weather?.active;\n static #weatherData = null;\n static #currentWeatherActive = config.features.weather?.currentWeather;\n static #currentWeatherSwitcher = null;\n static #defaultWeather = '';\n static #sunny = null;\n static #selectedWeather = null;\n static currentId = null;\n static effects = {};\n static #settings = config.features.weather?.settings;\n static #showed = true;\n static scope = null;\n\n constructor(parent, additionalClass = '',response) {\n super(response);\n\n this.#parent = parent;\n this.response = response;\n this.#displayOptionsOptions = isMobile ? document.querySelector('.pop-up-page.display-options-page').querySelector('.display-options__options') : this.#parent.querySelector('.display-options__options');\n this.#create(additionalClass);\n Weather.scope = this;\n }\n\n async #create(additionalClass) {\n Weather.#weatherData = this.response;\n this.#getIconColors();\n Weather.#defaultWeather = Weather.#weatherData.weather[0].main.toLowerCase();\n if (config.features.weather?.widget) {\n this.#element = createHtmlElement(this.#parent, '', 'div', ['weather-widget-wrapp', additionalClass]);\n this.#parent.insertBefore(this.#element, this.#parent.firstChild);\n this.#createWeatherWidget();\n this.#createWeatherWidgetToggler();\n this.#applyWidgetVisibility();\n }\n\n if (config.features.weather?.active)\n this.#createWeatherStates();\n }\n\n #createWeatherStates() {\n const weatherStatesWrapper = createHtmlElement(this.#displayOptionsOptions, '', 'div', ['display-options__weather-states', 'display-option'])\n const currentWeatherToggle = createHtmlElement(weatherStatesWrapper,'','div',['weather-states__current-weather-container']);\n const currentWeatherToggleText = createHtmlElement(currentWeatherToggle,changeLangToCurrent('Current weather'),'span',['weather-state__toggle-text','language-string']);\n currentWeatherToggleText.setAttribute('data-dictionary', 'Current weather');\n\n const headerText = createHtmlElement(weatherStatesWrapper, changeLangToCurrent('Viewing weather options'), 'span', ['weather-states__header', 'language-string']);\n headerText.setAttribute('data-dictionary', 'Viewing weather options');\n const weatherStatesButtons = createHtmlElement(weatherStatesWrapper, '', 'div', ['weather-states__buttons']);\n weatherStatesButtons.addEventListener('click', this.weatherHandler.bind(this));\n\n if (isMobile) {\n weatherStatesWrapper.style['display'] = 'none';\n }\n\n Weather.currentWeatherSwitcher = new Switch(currentWeatherToggle);\n Weather.currentWeatherSwitcher.checked = Weather.currentWeatherActive;\n Weather.currentWeatherSwitcher.listener = this.#currentWeatherSwitcherHandler.bind(this);\n\n Weather.settings.items.forEach(item => {\n const snowElement = createHtmlElement(weatherStatesButtons, '', 'label', ['weather-state', item]);\n snowElement.addEventListener('mouseover', (event) => {\n event.target.setAttribute('colors',`primary:${this.#weatherIconColors.activeColor},secondary:${this.#weatherIconColors.activeColor}`);\n });\n snowElement.addEventListener('mouseout', (event) => {\n if (event.target.getAttribute('isActiveWeather') === 'true') return;\n const customColorId = event.target.getAttribute('custom-color-id');\n if (customColorId) {\n event.target.setAttribute('colors',`primary:${lordIconColors.customColors[customColorId].primaryColor},secondary:${lordIconColors.customColors[customColorId].secondaryColor}`);\n } else {\n event.target.setAttribute('colors',`primary:${this.#weatherIconColors.primaryColor},secondary:${this.#weatherIconColors.secondaryColor}`);\n }\n });\n const iconParameters = {trigger:'hover',delay:'0'};\n if (document.body.classList.contains('light-theme')) {\n iconParameters.id = 'weather-state';\n iconParameters.primaryColor = '#fff';\n iconParameters.secondaryColor = '#fff';\n }\n setLordIcon(item, snowElement, iconParameters);\n const textElement = createHtmlElement(snowElement, changeLangToCurrent(item), 'span', ['weather-state__text', 'language-string']);\n textElement.setAttribute('data-dictionary', item);\n\n this.item = createHtmlElement(snowElement, '', 'input', []);\n this.item.type = 'checkbox';\n this.item.id = item;\n\n switch (item) {\n case 'rain':\n Weather.effects.rain = new Rain();\n break;\n case 'snow':\n Weather.effects.snow = new Snow();\n break;\n case 'clear':\n Weather.effects.clear = new ClearSky();\n Weather.sunny = this.item;\n break;\n case 'drizzle':\n Weather.effects.drizzle = new Drizzle();\n break;\n case 'clouds':\n this.clouds360 = new Clouds(Weather.weatherData);\n this.cloudsOSM = new CloudsShader(Weather.weatherData);\n\n if (OrbitDayAndNight.isActiveAndSelected) {\n Weather.effects.clouds = this.cloudsOSM;\n } else {\n Weather.effects.clouds = this.clouds360;\n }\n break;\n case 'thunderstorm':\n Weather.effects.thunderstorm = new Thunderstorm();\n break;\n }\n\n if(item === Weather.defaultWeather){\n Weather.currentWeather = this.item;\n if (Weather.currentWeatherActive) {\n Weather.currentWeather.checked = true;\n }\n }\n });\n\n const event = new Event('change');\n Weather.currentWeatherSwitcher.checkbox.dispatchEvent(event);\n Weather.displayOptionsElementsTotalHeight += parseFloat(getComputedStyle(weatherStatesWrapper).height);\n }\n\n changeClouds(type) {\n let active = false;\n if (Weather.effects.clouds.active) {\n active = true;\n Weather.effects.clouds.disable();\n }\n\n if (type === 'osm') {\n Weather.effects.clouds = this.cloudsOSM;\n } else {\n Weather.effects.clouds = this.clouds360;\n }\n\n if (active) {\n Weather.effects.clouds.enable();\n }\n }\n\n #currentWeatherSwitcherHandler(e) {\n const weatherStateButtons = document.querySelector('.weather-states__buttons');\n\n switch (e.target.checked) {\n case true:\n weatherStateButtons && weatherStateButtons.classList.add('disabled');\n\n if (Weather.currentWeather) {\n this.weatherHandler({ target: Weather.currentWeather });\n } else {\n if (Weather.sunny) {\n this.weatherHandler({ target: Weather.sunny });\n } else if (Weather.selectedWeather) {\n Weather.effects[Weather.selectedWeather.id].disable();\n Weather.selectedWeather.checked = false;\n Weather.selectedWeather = null;\n this.#playDownAllLordIcons();\n }\n }\n\n break;\n case false:\n\n if (e instanceof Event) {\n this.weatherHandler({ target: Weather.sunny });\n weatherStateButtons && weatherStateButtons.classList.remove('disabled');\n } else {\n weatherStateButtons && weatherStateButtons.classList.remove('disabled');\n }\n\n break;\n }\n }\n\n weatherHandler(e) {\n if (!e?.target?.id)\n return;\n\n const currentId = e.target.id;\n Weather.currentId = currentId;\n const icon = e.target.parentElement.querySelector('.lord__icon');\n if (e instanceof Event) {\n Weather.currentWeatherSwitcher.checked = false;\n this.#currentWeatherSwitcherHandler({target: { checked: false}});\n\n if (Weather.selectedWeather) {\n Weather.effects[Weather.selectedWeather.id].disable();\n\n if (Weather.selectedWeather !== e.target) {\n Weather.selectedWeather.checked = false;\n Weather.selectedWeather = null;\n }\n }\n\n if (e.target.checked) {\n this.#playDownAllLordIcons();\n this.#highlightWeatherIcon(icon);\n Weather.effects[currentId].enable();\n Weather.selectedWeather = e.target;\n } else {\n const customColorId = icon.getAttribute('custom-color-id');\n if (customColorId) {\n icon.setAttribute('colors',`primary:${lordIconColors.customColors[customColorId].primaryColor},secondary:${lordIconColors.customColors[customColorId].secondaryColor}`);\n } else {\n icon.setAttribute('colors',`primary:${this.#weatherIconColors.primaryColor},secondary:${this.#weatherIconColors.secondaryColor}`);\n }\n icon.setAttribute('isActiveWeather', false);\n Weather.effects[currentId].disable();\n Weather.selectedWeather = null;\n }\n } else {\n if (Weather.selectedWeather) {\n Weather.effects[Weather.selectedWeather.id].disable();\n Weather.selectedWeather.checked = false;\n Weather.selectedWeather = null;\n }\n\n this.#playDownAllLordIcons();\n this.#highlightWeatherIcon(icon);\n Weather.effects[currentId].enable();\n Weather.selectedWeather = e.target;\n }\n\n if (!Weather.selectedWeather) {\n this.weatherHandler({ target: Weather.sunny });\n }\n\n lockScreenOrientation();\n }\n\n #playDownAllLordIcons() {\n const weatherStatesWrapper = document.querySelector('.weather-states__buttons');\n const weatherIcons = weatherStatesWrapper.getElementsByClassName('lord__icon');\n for (let i = 0; i < weatherIcons.length; i++) {\n const customColorId = weatherIcons[i].getAttribute('custom-color-id');\n if (customColorId) {\n weatherIcons[i].setAttribute('colors',`primary:${lordIconColors.customColors[customColorId].primaryColor},secondary:${lordIconColors.customColors[customColorId].secondaryColor}`);\n } else {\n weatherIcons[i].setAttribute('colors',`primary:${this.#weatherIconColors.primaryColor},secondary:${this.#weatherIconColors.secondaryColor}`);\n }\n // weatherIcons[i].setAttribute('colors',`primary:${this.#weatherIconColors.primaryColor},secondary:${this.#weatherIconColors.secondaryColor}`);\n weatherIcons[i].setAttribute('isActiveWeather', false);\n }\n\n const currentActiveText = weatherStatesWrapper.querySelector('.weather-state__text.active');\n currentActiveText && currentActiveText.classList.remove('active');\n }\n\n #highlightWeatherIcon(icon) {\n icon.setAttribute('colors',`primary:${this.#weatherIconColors.activeColor},secondary:${this.#weatherIconColors.activeColor}`);\n icon.setAttribute('isActiveWeather', true);\n const parent = icon.closest('.weather-state');\n const text = parent.querySelector('.weather-state__text');\n text && text.classList.add('active');\n }\n\n #getIconColors() {\n // const {primary,secondary} = config.features.icons.color;\n //\n // const primaryRgba = config.style.colors.find(color => color.key === primary) || { value: '255,255,255,1' };\n // const secondaryRgba = config.style.colors.find(color => color.key === secondary) || { value: '255,255,255,1' };\n // const activeRgba = config.style.colors.find(color => color.key === 'brand2');\n\n // this.#weatherIconColors.primaryColor = rgbaToHexA(primaryRgba.value.split(','),false);\n // this.#weatherIconColors.secondaryColor = rgbaToHexA(secondaryRgba.value.split(','),false);\n // this.#weatherIconColors.activeColor = rgbaToHexA(activeRgba.value.split(','), false);\n this.#weatherIconColors.primaryColor = lordIconColors.primary;\n this.#weatherIconColors.secondaryColor = lordIconColors.secondary;\n this.#weatherIconColors.activeColor = lordIconColors.active;\n }\n\n #createWeatherWidgetToggler() {\n if (isMobile)\n return;\n\n const weatherWidgetToggler = createHtmlElement(this.#displayOptionsOptions, '', 'div', ['display-options__weather-widget-toggler', 'display-option']);\n const weatherWidgetText = createHtmlElement(weatherWidgetToggler, changeLangToCurrent('Display weather widget'), 'span', ['weather-widget-toggler__text', 'language-string']);\n weatherWidgetText.setAttribute('data-dictionary', 'Display weather widget');\n const switcher = new Switch(weatherWidgetToggler);\n switcher.checked = !isMobile;\n switcher.listener = this.#weatherWidgetSwitcherHandler.bind(this);\n this.#elementsHeights.widgetSwitcher = parseFloat(getComputedStyle(weatherWidgetToggler).height);\n const event = new Event('change');\n switcher.checkbox.dispatchEvent(event);\n }\n\n #weatherWidgetSwitcherHandler(event) {\n if (userPrevent())\n return;\n\n let globalWeatherWidgetCookie = Cookie.getCookie('weatherWidget');\n if (!globalWeatherWidgetCookie) {\n globalWeatherWidgetCookie = {\n weatherWidget: 'hidden'\n };\n } else {\n globalWeatherWidgetCookie = JSON.parse(globalWeatherWidgetCookie);\n }\n\n const weatherWidgetElement = this.#element;\n\n if (isMobile)\n event.target.checked = true;\n\n if (event.target.checked) {\n weatherWidgetElement.classList.remove('hidden');\n gsap.fromTo(\n weatherWidgetElement,\n {opacity: 0},\n {opacity: 1, duration: this.#animationDuration,\n onComplete: () => {\n event.target.checked = true;\n // userPrevent(false);\n }});\n globalWeatherWidgetCookie.weatherWidget = 'expanded';\n } else {\n gsap.fromTo(\n weatherWidgetElement,\n {opacity: 1},\n {opacity: 0, duration: this.#animationDuration,\n onComplete: () => {\n event.target.checked = false;\n weatherWidgetElement.classList.add('hidden');\n // userPrevent(false);\n }},\n );\n globalWeatherWidgetCookie.weatherWidget = 'hidden';\n }\n \n Cookie.setCookie('weatherWidget', JSON.stringify(globalWeatherWidgetCookie));\n }\n\n #createWeatherWidget() {\n const weatherWidget = new BaseElement()\n .addClass('weather-widget')\n .appendTo(this.#element);\n\n const currentTempWrapp = new BaseElement()\n .addClass('weather-temp-wrapp')\n .appendTo(weatherWidget.DOMElement);\n \n const currentTemp = new BaseElement()\n .addClass('weather-temp')\n .innerHtml(Math.round(Weather.#weatherData.main.temp) + '°')\n .appendTo(currentTempWrapp.DOMElement);\n new BaseElement('img')\n .addClass('weather-icon')\n .addAttribute('src', this.#iconUrl + Weather.#weatherData.weather[0].icon + '.png')\n .appendTo(currentTemp.DOMElement);\n \n \n if (isMobile)\n return;\n \n new BaseElement()\n .addClass('weather-description', 'language-string')\n .addAttribute('data-dictionary', Weather.#weatherData.weather[0].description)\n .innerHtml(changeLangToCurrent(Weather.#weatherData.weather[0].description))\n .appendTo(currentTempWrapp.DOMElement);\n\n\n const descriptionWrapp = new BaseElement()\n .addClass('weather-description-wrapp')\n .appendTo(weatherWidget.DOMElement);\n \n const currentCityData = config.localization?.city;\n if (currentCityData && currentCityData.length > 0) {\n const currentCityElement = new BaseElement()\n .addClass('language-string', 'current-city')\n .appendTo(descriptionWrapp.DOMElement);\n\n for (const item of currentCityData) {\n currentCityElement.addAttribute(`data-lang-${item.lang}`, item.value);\n if (item.lang === getCurrentLang())\n currentCityElement.innerHtml(item.value);\n }\n }\n const currentDate = new Date();\n currentDate.toLocaleString('default', { month: 'long' }).substr(0, 3);\n const dateWrapp = new BaseElement()\n .addClass('weather-date')\n .appendTo(descriptionWrapp.DOMElement);\n new BaseElement()\n .addClass('date','language-string')\n .addAttribute('data-dictionary', 'Local time')\n .innerHtml(changeLangToCurrent('Local time'))\n .appendTo(dateWrapp.DOMElement);\n this.#timeElement = new BaseElement()\n .addClass('time')\n .innerHtml(`${this.getCurrentTime}`)\n .appendTo(dateWrapp.DOMElement);\n const switchWrapp = new BaseElement()\n .addClass('switch-wrapp')\n .appendTo(descriptionWrapp.DOMElement);\n \n if (DayNightButton.canActivate())\n new DayNightButton(switchWrapp.DOMElement);\n }\n\n refreshTime() {\n if (this.#timeElement) {\n this.#timeElement.innerHTML = this.getCurrentTime;\n }\n }\n\n addClass(value) {\n this.#element.classList.add(value);\n }\n\n #applyWidgetVisibility() {\n const widgetCookies = Cookie.getCookie('weatherWidget');\n if (!widgetCookies)\n return;\n const widgetVisibilityParam = JSON.parse(widgetCookies).weatherWidget;\n if (widgetVisibilityParam === 'hidden' && !isMobile) {\n this.#element.classList.add('hidden');\n const displayOptions = this.#element.closest('.display-options');\n const weatherWidgetToggler = displayOptions.querySelector('.display-options__weather-widget-toggler');\n const widgetCheckboxParam = weatherWidgetToggler.querySelector('.switch__checkbox');\n widgetCheckboxParam.checked = false;\n }\n }\n\n static getWeatherData() {\n return Weather.#weatherData;\n }\n\n static render(time) {\n if (!Weather.#active) return;\n\n Weather.effects.snow?.update(time);\n Weather.effects.rain?.update(time);\n Weather.effects.clouds?.update(time);\n Weather.effects.thunderstorm?.update(time);\n Weather.effects.drizzle?.update(time);\n }\n\n resetToDefault() {\n Weather.currentWeatherSwitcher.checked = false;\n this.#currentWeatherSwitcherHandler({target: { checked: false}});\n this.weatherHandler({ target: Weather.sunny });\n }\n\n static isActive() {\n return Weather.#active;\n }\n\n static checkedCurrentWeather() {\n return Weather.#currentWeatherSwitcher.checkbox.checked;\n }\n\n static get showed() {\n return Weather.#showed;\n }\n\n static set showed(value) {\n Weather.#showed = value;\n }\n\n static get currentWeatherSwitcher() {\n return Weather.#currentWeatherSwitcher;\n }\n\n static set currentWeatherSwitcher(value) {\n Weather.#currentWeatherSwitcher = value;\n }\n\n static get currentWeatherActive() {\n return Weather.#currentWeatherActive;\n }\n\n static get sunny() {\n return Weather.#sunny;\n }\n\n static set sunny(value) {\n Weather.#sunny = value;\n }\n\n static get weatherData() {\n return Weather.#weatherData;\n }\n\n static get defaultWeather() {\n return Weather.#defaultWeather;\n }\n\n static get currentWeather() {\n return Weather.#currentWeather;\n }\n\n static set currentWeather(value) {\n Weather.#currentWeather = value;\n }\n\n static get selectedWeather() {\n return Weather.#selectedWeather;\n }\n\n static set selectedWeather(value) {\n Weather.#selectedWeather = value;\n }\n\n static get settings() {\n return Weather.#settings;\n }\n\n get DOMElement() {\n return this.#element;\n }\n}\n\n\nexport function needsFogForSelectedWeather () {\n const selectedWeather = Weather.selectedWeather?.id;\n return selectedWeather === 'snow' || selectedWeather === 'rain';\n}\n","'use strict';\n\nimport { BaseElement } from '../interfaces/BaseElement';\nimport nipplejs from 'nipplejs';\nimport { assignDeep, isDesktop, isWeb, projectMode, threeJsVariables } from '../../settings';\nimport { Vector2 } from 'three';\nimport { autoRotateTimerAction } from './orbitControls';\n\n\nexport class Joystick {\n\tstatic manager = null;\n\t\n\tconstructor () {\n\t\tthis.params = assignDeep({desktop: isDesktop},config.features.joystick);\n\t\tthis.controls = threeJsVariables.orbitControls;\n\t\tthis.panStart = new Vector2();\n\t\tthis.panDelta = new Vector2();\n\t\tthis.panEnd = new Vector2();\n\t\tthis.direction = new Vector2();\n\t\tthis.animation = null;\n\t}\n\t\n\tcreate(parent) {\n\t\tif (projectMode.LiteMode.isActive()) return;\n\t\tif ((isWeb && !this.params.web) || (isDesktop && !this.params.desktop)) return;\n\t\t\n\t\tthis.container = new BaseElement()\n\t\t\t.addClass('joystick')\n\t\t\t.appendTo(parent)\n\t\t\t.DOMElement;\n\t\t\n\t\tconst controller = new BaseElement()\n\t\t\t.addClass('joystick__controller')\n\t\t\t.appendTo(this.container)\n\t\t\t.DOMElement;\n\t\t\n\t\tconst options = {\n\t\t\tzone: controller,\n\t\t\tsize: 100,\n\t\t\tmode: 'static',\n\t\t\trestJoystick: true,\n\t\t\trestOpacity: 1,\n\t\t\tshape: 'circle',\n\t\t\tposition: { top: '60px', left: '60px' }\n\t\t};\n\t\t\n\t\tif (!Joystick.manager) {\n\t\t\tJoystick.manager = nipplejs.create(options);\n\t\t}\n\t\t\n\t\tconst joystick = Joystick.manager['0'];\n\t\tjoystick.on('start',this.start.bind(this));\n\t\tjoystick.on('move',this.move.bind(this));\n\t\tjoystick.on('end',this.end.bind(this));\n\t}\n\t\n\tstart(evt,data) {\n\t\tthis.panStart.set(data.position.x,data.position.y).negate();\n\t\tthis.panEnd.copy(this.panStart);\n\t\tthis.pan();\n\t\tautoRotateTimerAction('update');\n\t}\n\t\n\tmove(evt,data) {\n\t\tthis.direction.set(data.vector.x * -1,data.vector.y).multiplyScalar(data.force);\n\t}\n\t\n\tend() {\n\t\tcancelAnimationFrame(this.animation);\n\t\tthis.animation = null;\n\t\tautoRotateTimerAction('update');\n\t}\n\t\n\tpan() {\n\t\tthis.panEnd.add(this.direction);\n\t\tthis.panDelta.subVectors( this.panEnd, this.panStart ).multiplyScalar( this.controls.panSpeed );\n\t\tthis.controls.panCameraDelta(this.panDelta.x,this.panDelta.y);\n\t\tthis.panStart.copy(this.panEnd);\n\t\tthis.animation = requestAnimationFrame(this.pan.bind(this));\n\t}\n\t\n\tstatic updatePosition() {\n\t\tif (Joystick.manager) {\n\t\t\tconst bounds = Joystick.manager.options.zone.getBoundingClientRect();\n\t\t\tconst joystick = Joystick.manager['0'];\n\t\t\tjoystick.position.x = bounds.left + 60;\n\t\t\tjoystick.position.y = bounds.top + 60;\n\t\t}\n\t}\n\t\n}\n","'use strict';\n\n\nimport { BaseElement } from '../interfaces/BaseElement';\nimport { Range } from '../interfaces/switchers/Range';\nimport { MathUtils, Vector3 } from 'three';\nimport { autoRotateTimerAction } from './orbitControls';\nimport { assignDeep } from '../../settings';\n\n\nconst DEFAULT_PARAMS = {\n\tactive: false\n};\n\nexport class SkyLineController {\n\tconstructor (orbitControls) {\n\t\tthis.params = assignDeep(DEFAULT_PARAMS,config.features.skyLineController || {});\n\t\tthis.orbitControls = orbitControls;\n\t\tthis.camera = this.orbitControls.object;\n\t\tthis.step = 0.001;\n\t\tthis.direction = new Vector3();\n\t\tthis.targetStart = new Vector3();\n\t\tthis.targetEnd = new Vector3();\n\t}\n\t\n\tui(parent) {\n\t\tif (!this.params.active)\n\t\t\treturn;\n\t\tthis.uiElement = new BaseElement()\n\t\t\t.addClass('skyline')\n\t\t\t.event('pointerenter',this.onEnter.bind(this))\n\t\t\t.event('pointerleave',this.onLeave.bind(this))\n\t\t\t.appendTo(parent)\n\t\t\t.DOMElement;\n\t\t\n\t\tconst wrapper = new BaseElement()\n\t\t\t.addClass('skyline__wrapper')\n\t\t\t.appendTo(this.uiElement)\n\t\t\t.DOMElement;\n\t\t\n\t\tconst min = this.orbitControls.minPan.y;\n\t\tconst max = this.orbitControls.maxPan.y;\n\t\tthis.targetStart.set(\n\t\t\t0,\n\t\t\tmin,\n\t\t\t0\n\t\t);\n\t\tthis.targetEnd.set(\n\t\t\t0,\n\t\t\tmax,\n\t\t\t0\n\t\t);\n\t\t\n\t\tconst value = (MathUtils.clamp(this.orbitControls.target.y - min,min,max)) / (max - min);\n\t\t\n\t\tconst range = new Range(wrapper,0,1,this.step,value);\n\t\trange.addListener('input',this.onMove.bind(this));\n\t\trange.addListener('mousedown',this.onStart.bind(this));\n\t\trange.addListener('touchstart',this.onStart.bind(this));\n\t\trange.addListener('change',this.onEnd.bind(this));\n\t\trange.vertical();\n\t\t\n\t\tconst icons = new BaseElement()\n\t\t\t.addClass('skyline__icons')\n\t\t\t.appendTo(wrapper)\n\t\t\t.DOMElement;\n\t\t\n\t\t['up','down'].forEach(direction => {\n\t\t\tconst icon = new BaseElement()\n\t\t\t\t.addClass('skyline__icon',`skyline__icon--${direction}`)\n\t\t\t\t.appendTo(icons)\n\t\t\t\t.DOMElement;\n\t\t\t\n\t\t\tnew BaseElement()\n\t\t\t\t.addClass('skyline__icon-image','icon-open')\n\t\t\t\t.appendTo(icon);\n\t\t\t\n\t\t\tnew BaseElement()\n\t\t\t\t.addClass('skyline__icon-direction',`icon-${direction}`)\n\t\t\t\t.appendTo(icon)\n\t\t});\n\t}\n\t\n\tonEnter() {\n\t\tthis.uiElement.classList.add('skyline--hover');\n\t}\n\t\n\tonLeave() {\n\t\tthis.uiElement.classList.remove('skyline--hover');\n\t}\n\t\n\tonStart() {\n\t\tthis.orbitControls.screenSpacePanning = true;\n\t\tautoRotateTimerAction('update');\n\t}\n\t\n\tonMove(e) {\n\t\tconst value = Number(e.target.value);\n\t\tthis.direction.copy(this.camera.position).sub(this.orbitControls.target);\n\t\tthis.orbitControls.target.lerpVectors(this.targetStart,this.targetEnd,value);\n\t\tthis.camera.position.copy(this.orbitControls.target).add(this.direction);\n\t}\n\t\n\tonEnd() {\n\t\tautoRotateTimerAction('update');\n\t\tthis.orbitControls.screenSpacePanning = false;\n\t}\n\t\n}\n","'use strict';\nimport { Buildings, GSAPAnimationMixer, projectMode, settingsData, threeJsVariables } from '../../settings';\nimport {\n getWorldData\n} from './orbitControls';\nimport gsap from \"gsap\";\nimport {enableSwitcherBtns} from \"../../functions\";\nimport { Box3, Vector3 } from 'three';\nimport { updateShadowMap } from '../threejs/lights';\n\nexport async function bombButtonInitActionHandler() {\n enableSwitcherBtns(true);\n if (settingsData.buildingDestroyed) {\n await projectMode.FloorPlan.exitFromMode();\n } else {\n await projectMode.FloorPlan.enter();\n }\n}\n\n// export const destroyCameraAnimation = (targetPosition, upper, flat) => {\n// const apt = flat ? flat : settingsData.lastClickedFlat;\n// const {cameraVector, orbitControlsVector, flatVector} = getWorldData(apt);\n// const {minAngle} = getPolarAngleFromViewMode(ViewMode.FloorPlan);\n// const {minDistance} = getOrbitControlsDistanceAndPan(ViewMode.FloorPlan);\n// const distanceCorrection = config.threejs.orbitControls.floorplan.minDistanceCorrection;\n//\n// const position = targetPosition ? targetPosition : flatVector;\n//\n// const aptTarget = new Vector3().copy(orbitControlsVector).setY(position.y);\n// const aptPosition = new Vector3().subVectors(position,aptTarget).normalize().setY(position.y).setLength(minDistance * distanceCorrection).add(aptTarget);\n//\n// animateCamera(\n// cameraVector,\n// aptPosition,\n// orbitControlsVector,\n// aptTarget,\n// undefined,\n// minDistance,\n// minAngle,\n// 0,\n// 1000,\n// TWEEN.Easing.Linear.None,\n// () => {\n// setOrbitControls(ViewMode.FloorPlan);\n// setPolarAngle(ViewMode.FloorPlan);\n// setMinAndMaxControlsDistance(ViewMode.FloorPlan);\n// threeJsVariables.orbitControls.saveState();\n// }\n// );\n//\n// }\n\nconst box = new Box3();\nconst size = new Vector3();\n\nexport const floorMoveAnimation = (currentFloor, action, chosenFloor,state) => {\n const mixer = GSAPAnimationMixer.getMixer('floorPlan');\n const activeBuilding = Buildings.getActiveBuilding();\n const { floors,floorSelectionGroup } = activeBuilding.getFloors(currentFloor,chosenFloor);\n let fallingDownSelections = [];\n\n const appear = action === 'appear';\n if (!appear)\n fallingDownSelections = activeBuilding.getFloorSelections(currentFloor,false);\n\n const duration = GSAPAnimationMixer.duration;\n const animationDiff = duration / floorSelectionGroup.length;\n const slicerTimes = [];\n for (let i = 0; i < floorSelectionGroup.length; i ++) {\n const instanceMesh = floors[i];\n const selectionsFloorGroup = floorSelectionGroup[i];\n const animationDuration = animationDiff * i;\n /* Animate floors */\n\n if (!threeJsVariables.slicer.active) {\n if ((instanceMesh && !instanceMesh.hiddenFloor || appear) && !projectMode.LiteMode.isActive() || (projectMode.LiteMode.isActive() && (projectMode.LiteMode.modeIs('regular') || projectMode.LiteMode.modeIs('rotate')))) {\n\n // const floorPromise = new Promise((resolve => {\n const animation = gsap.to(instanceMesh.position, {\n x: instanceMesh.position.x,\n y: action === \"destroy\" ? instanceMesh.position.y + 400 : instanceMesh.basePosition.y,\n z: instanceMesh.position.z,\n duration: duration - animationDuration,\n delay: appear ? animationDuration : 0,\n ease: GSAPAnimationMixer.ease,\n onUpdate: () => {\n settingsData.bombBlock = true;\n config.threejs.orbitControls.enabled = false;\n instanceMesh.matrix.setPosition(instanceMesh.position.x, instanceMesh.position.y, instanceMesh.position.z);\n instanceMesh.mesh.setMatrixAt(instanceMesh.count, instanceMesh.matrix);\n instanceMesh.mesh.instanceMatrix.needsUpdate = true;\n instanceMesh.mesh.updateMatrix();\n },\n onComplete: () => {\n instanceMesh.hiddenFloor = action === \"destroy\";\n settingsData.bombBlock = false;\n config.threejs.orbitControls.enabled = true;\n }\n }\n );\n\n mixer.addAnimation(animation);\n }\n }\n\n /**\n Animate selections\n */\n if (!selectionsFloorGroup.userData.hiddenFloor || action === \"appear\") {\n \n slicerTimes.push(animationDuration);\n\n // const selectionsPromise = new Promise(resolve => {\n const animation = gsap.to(selectionsFloorGroup.position, {\n x: selectionsFloorGroup.position.x,\n y: action === \"destroy\" ? selectionsFloorGroup.position.y + 400 : selectionsFloorGroup.userData.basePosition.y,\n z: selectionsFloorGroup.position.z,\n duration: duration - animationDuration,\n delay: appear ? animationDuration : 0,\n ease: GSAPAnimationMixer.ease,\n onUpdate:() => {\n updateShadowMap();\n },\n onComplete: () => {\n selectionsFloorGroup.userData.hiddenFloor = action === \"destroy\";\n // resolve(true);\n }\n },\n // appear\n // ? i === 0\n // ? \"\"\n // : `-=${animationDuration}`\n // : null\n );\n\n mixer.addAnimation(animation);\n // });\n\n // animations.push(selectionsPromise);\n\n }\n }\n\n const slicerFloor = typeof chosenFloor === 'number' ? chosenFloor : currentFloor;\n slicerFloorMove(state,action,slicerFloor,Math.max(...slicerTimes));\n\n /* Animate current floor selections */\n if (fallingDownSelections.length) {\n const { flatVector } = getWorldData(fallingDownSelections[0]);\n // const startFallingY = flatVector.y + 100;\n const startFallingY = fallingDownSelections[0].userData.base_position.y + 10;\n\n // const fallingDownAnimations = fallingDownFloorSelections(fallingDownSelections,startFallingY);\n fallingDownFloorSelections(fallingDownSelections,startFallingY);\n // animations.push(...fallingDownAnimations);\n }\n\n\n // return Promise.all(animations);\n\n\n\n\n\n // const tl = appear ? gsap.timeline() : gsap;\n // const movingSelections = [];\n // let currentFloorSelections = [];\n // const zero = config.resources.bundle.selectionBoxes.floorPlugName;\n // const regex = new RegExp(zero);\n // let fallingDownSelectBoxesAnimations = [];\n //\n //\n // activeBuilding.selectionsGroup.traverse(child => {\n // if (!child.parent.name.match(activeBuilding.name)) return;\n // const floor = child.name?.match(/F/g);\n // if (floor) {\n // const floorNum = child.name.split(\"_\")[1];\n // if (parseInt(floorNum) === parseInt(currentFloor)) {\n // child.traverse((selection) => {\n // selection.type === \"Mesh\" && !selection.name.match(regex) && currentFloorSelections.push(selection);\n // });\n // }\n // if (chosenFloor) {\n // floorNum > currentFloor && floorNum <= chosenFloor && movingSelections.push(child);\n // } else {\n // floorNum > currentFloor && movingSelections.push(child);\n // }\n // }\n // });\n //\n // const duration = 1.3;\n // const animationDiff = duration / movingSelections.length;\n // for (let i = 0; i < movingSelections.length; i++) {\n //\n // const instanceMesh = movingFloors[i];\n // const selectionsFloorGroup = movingSelections[i];\n // const animationDuration = duration - animationDiff * i;\n //\n // /**\n // * Animate floors\n // */\n //\n // if ((instanceMesh && !instanceMesh.hiddenFloor || appear) && !projectMode.LiteMode.isActive() || (projectMode.LiteMode.isActive() && projectMode.LiteMode.modeIs('regular'))) {\n //\n // const floorPromise = new Promise((resolve => {\n // tl.to(instanceMesh.position, {\n // x: instanceMesh.position.x,\n // y: action === \"destroy\" ? instanceMesh.position.y + 400 : instanceMesh.basePosition.y,\n // z: instanceMesh.position.z,\n // duration: appear ? animationDuration : 1.3,\n // ease: \"power4.inOut\",\n // onUpdate: () => {\n // settingsData.bombBlock = true;\n // config.threejs.orbitControls.enabled = false;\n // instanceMesh.matrix.setPosition(instanceMesh.position.x, instanceMesh.position.y, instanceMesh.position.z);\n // instanceMesh.mesh.setMatrixAt(instanceMesh.count, instanceMesh.matrix);\n // instanceMesh.mesh.instanceMatrix.needsUpdate = true;\n // instanceMesh.mesh.updateMatrix();\n // },\n // onComplete: () => {\n // instanceMesh.hiddenFloor = action === \"destroy\";\n // settingsData.bombBlock = false;\n // config.threejs.orbitControls.enabled = true;\n // resolve(true);\n // }\n //\n // }, appear\n // ? i === 0\n // ? \"\"\n // : `-=${animationDuration}`\n // : null\n // );\n //\n // }));\n //\n // animations.push(floorPromise);\n //\n // }\n //\n // /**\n // * Animate selections\n // */\n // if (!selectionsFloorGroup.userData.hiddenFloor || action === \"appear\") {\n //\n // const selectionsPromise = new Promise(resolve => {\n // tl.to(selectionsFloorGroup.position, {\n // x: selectionsFloorGroup.position.x,\n // y: action === \"destroy\" ? selectionsFloorGroup.position.y + 400 : selectionsFloorGroup.userData.basePosition.y,\n // z: selectionsFloorGroup.position.z,\n // duration: appear ? animationDuration : 1.3,\n // ease: \"power4.inOut\",\n // onStart: () => {\n // /**\n // * Animate current floor selections\n // */\n // // !appear && fallingDownFloorSelections(currentFloorSelections, selectionsFloorGroup.position.y);\n // if (!appear){\n // fallingDownSelectBoxesAnimations = fallingDownFloorSelections(currentFloorSelections, selectionsFloorGroup.position.y);\n // }\n //\n // },\n // onComplete: () => {\n // selectionsFloorGroup.userData.hiddenFloor = action === \"destroy\";\n // resolve(true);\n // }\n // }, appear\n // ? i === 0\n // ? \"\"\n // : `-=${animationDuration}`\n // : null\n // );\n //\n // });\n //\n // animations.push(selectionsPromise);\n //\n // }\n // }\n //\n // return Promise.all(animations.concat(fallingDownSelectBoxesAnimations));\n};\n\n\nfunction slicerFloorMove (state,action,floorNumber,duration) {\n if (threeJsVariables.slicer.active || threeJsVariables.sceneObjectsSlicer.active) {\n if (!isFinite(duration)) {\n duration = GSAPAnimationMixer.duration;\n }\n \n const slicer = threeJsVariables.slicer.active ? threeJsVariables.slicer : threeJsVariables.sceneObjectsSlicer;\n const mixer = GSAPAnimationMixer.getMixer('floorPlan');\n const duration2 = GSAPAnimationMixer.duration;\n\n if (state === 'exit') {\n const from = {value: slicer.y};\n\n const animation = gsap.to(from,{\n value: slicer.distance,\n onUpdate: () => {\n slicer.y = from.value;\n if (threeJsVariables.slicer.active) {\n threeJsVariables.sceneObjectsSlicer.y = from.value;\n }\n },\n ease: GSAPAnimationMixer.ease,\n duration: duration2 - duration,\n delay: duration\n });\n mixer.addAnimation(animation);\n } else {\n const activeBuilding = Buildings.getActiveBuilding();\n const apartments = activeBuilding.getFloorSelections(floorNumber);\n const floor = apartments[0].parent;\n box.setFromObject(floor);\n box.getSize(size);\n\n const height = floor.userData.baseWorldPosition.y + size.y;\n const from = {\n value: slicer.y\n };\n\n const animation = gsap.to(from,{\n value: height,\n onUpdate: () => {\n slicer.y = from.value;\n if (threeJsVariables.sceneObjectsSlicer.active) {\n threeJsVariables.sceneObjectsSlicer.y = from.value;\n }\n },\n ease: GSAPAnimationMixer.ease,\n duration: state === 'enter' ? 0.2 : duration2\n });\n mixer.addAnimation(animation);\n }\n }\n}\n\nexport const fallingDownFloorSelections = (currentFloorSelections, currentPosition) => {\n // const animations = [];\n const mixer = GSAPAnimationMixer.getMixer('floorPlan');\n\n const duration = GSAPAnimationMixer.duration;\n const animationDiff = duration / currentFloorSelections.length;\n\n for (let i = 0; i < currentFloorSelections.length; i++) {\n const animationDelay = animationDiff * i;\n\n // const fallingDownPromise = new Promise(resolve => {\n\n const animation = gsap.fromTo(currentFloorSelections[i].position, {\n x: currentFloorSelections[i].position.x,\n y: currentPosition,\n z: currentFloorSelections[i].position.z,\n },\n {\n x: currentFloorSelections[i].position.x,\n y: currentFloorSelections[i].userData.base_position.y,\n z: currentFloorSelections[i].position.z,\n duration: duration - animationDelay,\n ease: GSAPAnimationMixer.ease,\n // onComplete: ()=>{\n // resolve();\n // },\n }\n );\n\n mixer.addAnimation(animation);\n\n // });\n\n // animations.push(fallingDownPromise);\n }\n\n // return animations;\n};\n","'use strict';\n\nimport {Vector2} from 'three';\nimport {getCanvasWidthDiff, renderUpdateValuesOnDemand, updateRaycaster} from '../../app';\nimport { closeAsideMenu } from '../menu/menu';\nimport { isMobile, projectMode, settingsData, threeJsVariables } from '../../settings';\nimport {checkIntersection} from \"../threejs/raycast\";\nimport { closePoiInfoWindowCardInOrbit } from '../poi/poiCss';\nimport { autoRotateTimerAction } from './orbitControls';\nimport { PublicLayers } from '../components/publicLayers/PublicLayers';\nimport { Environment } from '../components/Environment/Environment';\n\nlet doubleClickTimer = '';\nlet mouseMoveEvent, isPressed;\nlet timeOne = null;\nlet prevSelectedObject = null;\n\nexport const RaycastHandler = (settings) => {\n const canvas = document.getElementById('c');\n\n ['pointerup', 'pointerdown', 'pointermove'].forEach(itemEvent => {\n canvas.addEventListener(itemEvent, (event) => {\n mouseHandler(event, settings, canvas);\n renderUpdateValuesOnDemand(false);\n settingsData.last_interaction = Date.now();\n }, true);\n });\n}\n\nlet pointersArray = [];\n\nfunction mouseHandler(event, settings, canvas) {\n if (projectMode.LiteMode.preventPointerEvents(undefined))\n return;\n\n settingsData.isClickEvent = event.pointerType === 'mouse';\n settingsData.isTouchEvent = event.pointerType === 'touch';\n const canvasSize = threeJsVariables.renderer.getSize(new Vector2());\n const canvasDiff = getCanvasWidthDiff();\n\n if (!canvas)\n return;\n\n switch (event.type) {\n\n case 'pointerdown': {\n autoRotateTimerAction('update');\n if (settingsData.bombBlock)\n return;\n\n settingsData.isClickEvent = event.pointerType === 'mouse';\n settingsData.isTouchEvent = event.pointerType === 'touch';\n\n mouseMoveEvent = Date.now();\n isPressed = true;\n\n if (pointersArray.indexOf(event.pointerId) === -1)\n pointersArray.push(event.pointerId);\n\n threeJsVariables.mouse.x = ((event.clientX - canvasDiff.x) / canvasSize.x) * 2 - 1;\n threeJsVariables.mouse.y = -(event.clientY / canvasSize.y) * 2 + 1;\n threeJsVariables.mouse.winX = event.clientX;\n threeJsVariables.mouse.winY = event.clientY;\n closeAsideMenu();\n\n isMobile\n ? closePoiInfoWindowCardInOrbit(true)\n : closePoiInfoWindowCardInOrbit(false, false);\n\n updateRaycaster();\n pointerDownHandler();\n break;\n }\n case 'pointermove':\n if (isPressed && Date.now() - mouseMoveEvent >= 100) {\n // dragHandler();\n settingsData.intersectionBlock = true;\n PublicLayers.intersect();\n Environment.intersect();\n }\n\n threeJsVariables.mouse.x = ((event.clientX - canvasDiff.x) / canvasSize.x) * 2 - 1;\n threeJsVariables.mouse.y = -(event.clientY / canvasSize.y) * 2 + 1;\n threeJsVariables.mouse.winX = event.clientX;\n threeJsVariables.mouse.winY = event.clientY;\n\n updateRaycaster();\n // updateMousePosition(event);\n PublicLayers.intersect('update');\n Environment.intersect('update');\n\n settingsData.isIntersection = true;\n break;\n case 'pointerup': {\n if (pointersArray.length > 1 && !pointersArray.length) {\n pointersArray = [];\n resetPointerCoords();\n return;\n }\n pointersArray = [];\n\n isPressed = false;\n (Date.now() - mouseMoveEvent >= 300)\n ? resetPointerCoords()\n : clickHandler(settings);\n\n settingsData.intersectionBlock = false;\n\n break;\n }\n }\n}\n\nfunction clickHandler() {\n resetPointerCoords();\n checkIntersection('click');\n}\n\nfunction dragHandler() {\n resetPointerCoords();\n checkIntersection('drag');\n}\n\nfunction pointerDownHandler() {\n resetPointerCoords();\n checkIntersection('pointerdown');\n}\n\nexport function doubleEventCheck(selectedObject) {\n // const diff = Date.now() - doubleClickTimer;\n\n switch (selectedObject.userData.type) {\n case 'building':\n prevSelectedObject = settingsData.selectedObject;\n break;\n case 'selectionBoxes':\n prevSelectedObject = settingsData.lastClickedFlat;\n break;\n }\n\n\n if (doubleClickTimer && Date.now() - doubleClickTimer < 300 && prevSelectedObject !== null && selectedObject === prevSelectedObject ) {\n settingsData.doubleClick = true;\n setTimeout(() => {settingsData.doubleClick = false}, 100)\n } else {\n settingsData.doubleClick = false;\n doubleClickTimer = Date.now();\n }\n\n return settingsData.doubleClick;\n}\n\nfunction resetPointerCoords() {\n threeJsVariables.mouse.x = -10000;\n threeJsVariables.mouse.y = -10000;\n settingsData.current_mouse_position.x = -10000;\n settingsData.current_mouse_position.y = -10000;\n}\n","'use strict';\n\nimport TWEEN from '../../libs/tween.umd';\nimport { Vector3, MOUSE, TOUCH, Sphere } from 'three';\nimport {OrbitControls} from \"../../libs/OrbitControls\";\nimport {projectMode, threeJsVariables, UIRoot} from '../../settings';\nimport { isMobile, settingsData } from '../../settings';\nimport { animateCamera } from '../threejs/animation';\nimport {\n rotateCylinderFloorNumbers,\n showOrHideCylinderFloorNumbers,\n} from '../components/cylinderFloorNumbers/cylinderFloorNumbers';\nimport { Compass } from '../components/compass/compass';\nimport {buildingsLabelResize, mobileBuildingLabelsHideLogic} from '../components/building-switch/buildingLabels';\nimport { cloudsPositionCorrection } from '../liveAnimations/clouds/clouds';\nimport {ViewMode} from \"../../common\";\nimport {createHtmlElement, getUrlParam, isPortraitMode} from '../../functions';\nimport { changeMenuStyle} from '../menu/menu';\nimport {poiIntersection} from '../poi/poiCss';\nimport { autoZoomIsActive, fitModelInViewport } from './zoomControl';\nimport { intro, OrbitToMap } from '../threejs/camera';\nimport { rotateHoverCursorWithCamera } from '../components/building-switch/buildingHover';\nimport { Disappear } from '../components/Disappear/Disappear';\nimport { Drizzle } from '../components/weather/Drizzle';\nimport { CylinderBase } from '../cylinderGrid/CylinderBase';\nimport { Favorite } from '../components/Favorite/Favorite';\nimport { PublicLayers } from '../components/publicLayers/PublicLayers';\nimport { DOF } from '../post-processing/Passes/DOF';\nimport { Environment } from '../components/Environment/Environment';\nimport { CameraCollision } from '../threejs/CameraCollision';\nimport { updateShadowMap } from '../threejs/lights';\nimport { BmbyMode } from '../mode/BmbyMode';\n\nlet controlsBounceCount = 0;\nlet autoRotateTimer = null;\nconst autoRotateTime = 120000;\n\nexport const orbitControlsInit = () => {\n const target = config.threejs.orbitControls.target;\n const camera = threeJsVariables.perspectiveCamera;\n const renderer = threeJsVariables.renderer;\n const orbitControls = new OrbitControls( camera, renderer.domElement );\n orbitControls.enableDamping = true;\n orbitControls.dampingFactor = 0.1;\n orbitControls.autoRotateSpeed = 1;\n orbitControls.minDistance = 0;\n orbitControls.maxDistance = Infinity;\n // orbitControls.zoomSpeed = 3;\n orbitControls.enableZoom = false;\n orbitControls.maxPolarAngle = Math.PI * 0.4;\n orbitControls.enableKeys = true;\n orbitControls.enabled = false;\n orbitControls.target.set(target.x,target.y,target.z);\n orbitControls.target0.set(target.x,target.y,target.z);\n \n if (BmbyMode.active) {\n config.threejs.orbitControls.cylinder.desktop.min /= 1.3;\n config.threejs.orbitControls.cylinder.mobile.portrait.min /= 1.3;\n config.threejs.orbitControls.cylinder.mobile.landscape.min /= 1.3;\n }\n\n //remove bounce\n //orbitControls.callbackFunctions.onDolly = dollyOutBounce;\n\n // orbitControls.enabled = false;\n orbitControls.listenToKeyEvents( window );\n\n threeJsVariables.orbitControls = orbitControls;\n setOrbitControls(ViewMode.Orbit);\n setPolarAngle(ViewMode.Orbit);\n setPanLimits(ViewMode.Orbit);\n // debugOrbitControls();\n\n orbitControls.addEventListener('end', orbitControlsAfterChangeHandler);\n orbitControls.addEventListener('change',orbitControlsChangeHandler);\n\n return orbitControls;\n};\n\nexport function autoRotateInit () {\n if (projectMode.LiteMode.isActive()) return;\n\n createHtmlElement(UIRoot,'','div',['swipe__onboarding','non-canvas', 'hide__onboarding']);\n // setLordIcon('onBoardingSwipe',swipeIcon,{\n // trigger: 'hover',\n // colors:'primary:#ffffff,secondary:#ffffff',\n // style: 'width:125px;height:125px',\n // stroke: 50,\n // delay: 0\n // });\n\n autoRotateTimer = setTimeout(()=> autoRotate(true),isMobile ? 0 : 30000);\n}\n\nexport function autoRotate (action) {\n if (settingsData.activeViewMode !== ViewMode.Orbit){\n return;\n }\n\n const icon = document.querySelector('.swipe__onboarding');\n\n switch (action) {\n case true:\n if (icon) {\n icon.classList.remove('hide__onboarding');\n // icon.querySelector('.lord__icon').setAttribute('trigger','loop');\n }\n if (!isMobile) {\n threeJsVariables.orbitControls.autoRotate = true;\n PublicLayers.intersect();\n Environment.intersect();\n }\n break;\n case false:\n if (icon) {\n icon.classList.add('hide__onboarding');\n // icon.querySelector('.lord__icon').setAttribute('trigger','none');\n }\n\n if (threeJsVariables?.orbitControls)\n threeJsVariables.orbitControls.autoRotate = false;\n\n break;\n }\n}\n\nexport function autoRotateTimerAction (action) {\n if (projectMode.LiteMode && projectMode.LiteMode?.isActive())\n return;\n\n switch (action) {\n case 'update':\n if (settingsData.activeViewMode === ViewMode.Orbit){\n clearTimeout(autoRotateTimer);\n autoRotate(false);\n autoRotateTimer = setTimeout(()=> autoRotate(true),autoRotateTime);\n }\n break;\n case 'cancel':\n clearTimeout(autoRotateTimer);\n autoRotate(false);\n break;\n }\n}\n\nexport function debugOrbitControls () {\n if (!getUrlParam('dev')){\n return;\n }\n\n const {minDistance,maxDistance} = getOrbitControlsDistanceAndPan();\n\n const params = {\n scaleMobile: config.threejs.orbitControls.autoZoomSettings.mobile.portrait.scale,\n scaleDesktop: config.threejs.orbitControls.autoZoomSettings.desktop.scale,\n foreshorteningZoomCorrection: config.threejs.orbitControls.autoZoomSettings.desktop.foreshorteningZoomCorrection,\n minZoomCorrection: config.threejs.orbitControls.autoZoomSettings.desktop.minZoomCorrection,\n minAngle: threeJsVariables.orbitControls.minPolarAngle,\n maxAngle: threeJsVariables.orbitControls.maxPolarAngle,\n minPanX: threeJsVariables.orbitControls.minPan.x,\n minPanY: threeJsVariables.orbitControls.minPan.y,\n minPanZ: threeJsVariables.orbitControls.minPan.z,\n maxPanX: threeJsVariables.orbitControls.maxPan.x,\n maxPanY: threeJsVariables.orbitControls.maxPan.y,\n maxPanZ: threeJsVariables.orbitControls.maxPan.z,\n min: minDistance,\n max: maxDistance,\n 'reload': reloadProject\n };\n\n // const gui = new GUI();\n const {gui} = threeJsVariables;\n gui.width = 300;\n\n const orbitControlsFolder = gui.addFolder('Orbit controls');\n\n const zoom = orbitControlsFolder.addFolder('Zoom');\n const autoZoom = zoom.addFolder('Auto');\n const manualZoom = zoom.addFolder('Manual');\n\n autoZoom.add(params,'scaleMobile',0,50).step( 0.01 ).onChange( function ( value ) {\n config.threejs.orbitControls.autoZoomSettings.mobile.portrait.scale = value;\n });\n autoZoom.add(params,'scaleDesktop',0,50).step( 0.01 ).onChange( function ( value ) {\n config.threejs.orbitControls.autoZoomSettings.desktop.scale = value;\n });\n\n autoZoom.add(params,'foreshorteningZoomCorrection', 0, 50).step(0.01).onChange( function ( value ) {\n config.threejs.orbitControls.autoZoomSettings.desktop.foreshorteningZoomCorrection = value;\n });\n\n autoZoom.add(params,'minZoomCorrection', 0, 50).step(0.01).onChange( function ( value ) {\n config.threejs.orbitControls.autoZoomSettings.desktop.minZoomCorrection = value;\n });\n\n manualZoom.add(params,'min', 0, 1000).step(0.01).onChange( function ( value ) {\n threeJsVariables.orbitControls.minDistance = value;\n threeJsVariables.trackballControls.minDistance = value;\n });\n\n manualZoom.add(params,'max', 0, 1000).step(0.01).onChange( function ( value ) {\n threeJsVariables.orbitControls.maxDistance = value;\n threeJsVariables.trackballControls.maxDistance = value;\n });\n\n\n const angle = orbitControlsFolder.addFolder('Polar angle');\n angle.add(params, 'minAngle',0,4).step(0.01).onChange( function ( value ) {\n threeJsVariables.orbitControls.minPolarAngle = value;\n });\n angle.add(params, 'maxAngle',0,4).step(0.01).onChange( function ( value ) {\n threeJsVariables.orbitControls.maxPolarAngle = value;\n });\n\n const pan = orbitControlsFolder.addFolder('Pan');\n pan.add(params,'minPanX', -1000, 1000).step(1).onChange( function ( value ) {\n threeJsVariables.orbitControls.minPan.setX(value);\n });\n pan.add(params,'minPanY', -1000, 1000).step(1).onChange( function ( value ) {\n threeJsVariables.orbitControls.minPan.setY(value);\n });\n pan.add(params,'minPanZ', -1000, 1000).step(1).onChange( function ( value ) {\n threeJsVariables.orbitControls.minPan.setZ(value);\n });\n pan.add(params,'maxPanX', -1000, 1000).step(1).onChange( function ( value ) {\n threeJsVariables.orbitControls.maxPan.setX(value);\n });\n pan.add(params,'maxPanY', -1000, 1000).step(1).onChange( function ( value ) {\n threeJsVariables.orbitControls.maxPan.setY(value);\n });\n pan.add(params,'maxPanZ', -1000, 1000).step(1).onChange( function ( value ) {\n threeJsVariables.orbitControls.maxPan.setZ(value);\n });\n\n orbitControlsFolder.add(params,'reload');\n\n\n}\n\nfunction reloadProject () {\n intro();\n}\n\nfunction updateShadowsAfterControlsChange () {\n if (config.threejs.orbitControls.updateShadows && !config.resources.bundle.dynamicShadows && settingsData.activeViewMode === ViewMode.Orbit) {\n updateShadowMap();\n }\n}\n\nfunction orbitControlsAfterChangeHandler () {\n updateShadowsAfterControlsChange();\n // flatLabelResize();\n}\n\nlet _last_distance = 0;\nlet try_count = 0;\nlet moveToBorderMoment = 0;\nlet movesTimeGap = 0;\nfunction orbitControlsChangeHandler (event) {\n if (settingsData.activeViewMode === ViewMode.Cylinder && !settingsData.destroyedMode) {\n rotateCylinderFloorNumbers();\n }\n\n createOrbitToMapButton();\n // compassRotation();\n Compass.getScope('orbit')?.rotate();\n rotateHoverCursorWithCamera();\n if (settingsData.activeViewMode === ViewMode.FloorPlan){\n CylinderBase.rotateTexts();\n } else if (settingsData.activeViewMode === ViewMode.Cylinder) {\n CylinderBase.rotateTexts();\n Favorite.intersect();\n } else if (threeJsVariables.orbitControls.enabled) {\n const o = threeJsVariables.trackballControls;\n let dx = o.object.position.x - o.target.x;\n let dy = o.object.position.y - o.target.y;\n let dz = o.object.position.z - o.target.z;\n let d = dx*dx+dy*dy+dz*dz;\n let max = o.maxDistance*o.maxDistance*0.999;\n let max2= o.maxDistance*o.maxDistance*0.96;\n\n if (Environment.getActivePublicLayer()?.animateCamera || PublicLayers.activeLayer?.animateCamera) {\n const maxDistance = getOrbitControlsDistanceAndPan(ViewMode.Orbit).maxDistance;\n max = maxDistance*maxDistance*0.999;\n max2 = maxDistance*maxDistance*0.96;\n }\n\n // reset vars if user zoom in\n if (d < max2) {\n hideOrbitToMapButton();\n // try_count = 0;\n // moveToBorderMoment = 0;\n }\n // if we on the edge of the orbit\n if (d > _last_distance && d > max) {\n // try_count++;\n // movesTimeGap = Date.now() - moveToBorderMoment;\n // bounce camera out and show map button for the first try\n // if (try_count <= 1 || movesTimeGap < 1000) {\n // !moveToBorderMoment && (moveToBorderMoment = Date.now());\n showOrbitToMapButton();\n // moveFromBorder();\n // go to 2DMap for the second try and delay\n // } else {\n // hideOrbitToMapButton();\n // try_count = 0;\n // moveToBorderMoment = 0;\n // OrbitToMap();\n // }\n }\n _last_distance = d;\n }\n\n if (threeJsVariables.orbitControls.enabled) {\n // toggle360Icons();\n showOrHideCylinderFloorNumbers();\n buildingsLabelResize();\n // flatLabelResize();\n //changeHeaderMode();\n changeMenuStyle();\n // renderUpdateValuesOnDemand();\n // updateLabels();\n // buildingSwitcherButtonsToggle();\n // showPoiInfo();\n mobileBuildingLabelsHideLogic();\n poiIntersection();\n Drizzle.rotateRainbow();\n DOF.updateFocus();\n CameraCollision.checkCollision();\n threeJsVariables.background?.collisionDetect();\n }\n\n Disappear.update();\n // rotateStreetNames();\n // updateRenderer();\n // renderUpdateValuesOnDemand(false);\n settingsData.needsRerender = true;\n\n\n}\n\nexport function createOrbitToMapButton() {\n if (document.getElementsByClassName('orbit-to-map-button')[0])\n return;\n const button = document.createElement('button');\n button.type = 'button';\n button.classList.add('orbit-to-map-button', 'control-button', 'hidden');\n // button.style.opacity = '0';\n // button.display = 'none';\n button.addEventListener('click', () => {\n moveToBorderMoment = 0;\n try_count = 0;\n OrbitToMap();\n hideOrbitToMapButton();\n });\n button.appendChild(getIcon());\n button.appendChild(getText());\n button.appendChild(getBackButton());\n UIRoot.appendChild(button);\n\n function getIcon() {\n const icon = document.createElement('img');\n icon.classList.add('icon');\n icon.src = \"./img/icons/noun-map.svg\";\n icon.setAttribute('aria-hidden', 'true');\n\n return icon;\n }\n\n function getText() {\n const text = document.createElement('span');\n text.classList.add('text', 'language-string');\n text.setAttribute('data-dictionary', 'map');\n text.innerText = 'map';\n\n return text;\n }\n\n function getBackButton() {\n const button = document.createElement('button');\n button.classList.add('back-button', 'icon-back', 'control-button', 'hidden');\n button.type = 'button';\n button.addEventListener('click', (e) => {\n e.stopPropagation();\n if (PublicLayers.isActive) {\n const layerType = PublicLayers.activeLayer?.type;\n const layer = document.querySelector('.public-layer__btn.poi') ||\n document.querySelector(`.public-layer__btn[data-public-layer=\"${layerType}\"]`);\n layer && PublicLayers.scope.clickHandler({ target: layer });\n }else if (Environment.isActive()) {\n const layerId = Environment.getActivePublicLayer()?.id;\n const layer = document.querySelector('.public-layer__btn.poi') ||\n document.querySelector(`.public-layer__btn[data-public-layer=\"${layerId}\"]`);\n layer && Environment.scope.publicLayersHandler({ target: layer });\n }\n });\n\n return button;\n }\n}\n\nexport function showOrbitToMapButton() {\n if (settingsData.activeViewMode !== ViewMode.Orbit) return;\n\n const button = document.getElementsByClassName('orbit-to-map-button')[0];\n button.classList.remove('hidden');\n}\n\nexport function hideOrbitToMapButton() {\n // if (isMobile)\n // return;\n\n const button = document.getElementsByClassName('orbit-to-map-button')[0];\n button?.classList.add('hidden');\n}\n\nexport function showOrbitToMapBackButton() {\n if (settingsData.activeViewMode !== ViewMode.Orbit) return;\n\n const button = document.querySelector('.orbit-to-map-button .back-button');\n button.classList.remove('hidden');\n}\n\nexport function hideOrbitToMapBackButton() {\n const button = document.querySelector('.orbit-to-map-button .back-button');\n button.classList.add('hidden');\n}\n\n// export function dollyOutBounce () {\n// if (settingsData.activeViewMode !== ViewMode.Orbit){\n// return;\n// }\n//\n//\n// // const controls = threeJsVariables.orbitControls;\n// // const currentPolarAngle = Number(controls.getPolarAngle().toFixed(3));\n// // const minPolarAngle = Number(controls.minPolarAngle.toFixed(3));\n// //\n// // if (controlsBounceCount === settingsData.globalSettings.totalDollyBounce){\n// // openMap();\n// // controlsBounceCount = 0;\n// // return;\n// // }\n// //\n// // if (currentPolarAngle === minPolarAngle){\n// // const v = new Vector3().copy(controls.object.position);\n// // v.setLength(getCurrentCameraDistance() - 40);\n// //\n// // gsap.to(controls.object.position,{duration: 1, x: v.x, y: v.y, z: v.z,\n// // onStart:()=>{\n// // controls.enabled = false;\n// // },\n// // onComplete:()=>{\n// // controls.enabled = true;\n// // controlsBounceCount++;\n// // }});\n// // } else {\n// // controlsBounceCount = 0;\n// // }\n// }\n\n// function openMap () {\n// const map = document.querySelector('.content__page[data-menu-item=\"map\"]');\n// if (map.classList.contains('show-page')){\n// return;\n// }\n//\n// gsap.to(map,{opacity: 1, visibility: 1, duration: 1,\n// onStart:()=>{\n// map.style.visibility = 'visible';\n// },onComplete:()=>{\n// openPage('map');\n// setMenuActive('map');\n// map.style.removeProperty('visibility');\n// map.style.removeProperty('opacity');\n// }});\n// }\n\nexport function setPanLimits (viewMode = settingsData.activeViewMode) {\n const controls = threeJsVariables.orbitControls;\n\n const {minPan,maxPan,maxSphere} = getOrbitControlsDistanceAndPan(viewMode);\n\n const checkMinValue = Object.values(minPan).filter(value => value === undefined);\n const checkMaxValue = Object.values(maxPan).filter(value => value === undefined);\n\n if (maxSphere && Object.keys(maxSphere).length && viewMode === ViewMode.Orbit) {\n controls.maxSphere = new Sphere(new Vector3().fromArray(maxSphere.center),maxSphere.radius);\n } else {\n controls.maxSphere = undefined;\n }\n\n if (!checkMaxValue.length && !checkMinValue.length){\n const minValueVector = setVectorValueFromControls(minPan);\n const maxValueVector = setVectorValueFromControls(maxPan);\n\n const minVector = new Vector3(minValueVector.x,minValueVector.y,minValueVector.z);\n const maxVector = new Vector3(maxValueVector.x,maxValueVector.y,maxValueVector.z);\n controls.minPan = minVector;\n controls.maxPan = maxVector;\n } else {\n resetPanLimits();\n }\n}\n\nexport function getOrbitControlsDistanceAndPan (viewMode = settingsData.activeViewMode) {\n const {activate,max,min} = config.threejs.orbitControls.autoZoomSettings;\n let settingsKey;\n let settings;\n // const isMobile = detectMobile();\n\n switch (isMobile) {\n case true:\n settingsKey = 'mobile';\n const isPortrait = isPortraitMode();\n if (isPortrait){\n settings = config.threejs.orbitControls[viewMode][settingsKey]['portrait'];\n } else {\n settings = config.threejs.orbitControls[viewMode][settingsKey]['landscape'];\n }\n break;\n case false:\n settingsKey = 'desktop';\n settings = config.threejs.orbitControls[viewMode][settingsKey];\n break;\n }\n\n\n\n return {\n minDistance: activate ? min : settings.min,\n maxDistance: activate ? max : settings.max,\n maxSphere: settings.maxSphere,\n maxPan: settings.maxPan,\n minPan: settings.minPan,\n position: settings.position,\n target: settings.target\n }\n}\n\nexport function enableOrbitControls (action) {\n threeJsVariables.orbitControls.enabled = action;\n threeJsVariables.trackballControls.enabled = action;\n}\n\nexport function enableTrackballControls(action) {\n threeJsVariables.trackballControls.enabled = action;\n}\n\nexport function isOrbitControlsEnabled () {\n return threeJsVariables.orbitControls.enabled;\n}\n\n// export async function changeCanvasSizeWhenCardIsOpened (needOpen) {\n// return ;\n// const {innerWidth, innerHeight} = window;\n// let floorSliderWidth = 0;\n//\n// const card = UnitCardClass.findCard()?.html;\n// const floorSlider = document.querySelector('.fs-slider-open');\n//\n// if (needOpen){\n// if (card) {\n//\n// if (innerWidth < 1000 && innerWidth > innerHeight){ // mobile landscape\n//\n// if (floorSlider) {\n// floorSliderWidth = floorSlider.getBoundingClientRect().width;\n// } else {\n// floorSliderWidth = 0;\n// }\n//\n// const cardWidth = card.getBoundingClientRect().width;\n// const newWidth = window.innerWidth - cardWidth - floorSliderWidth;\n// const size = {\n// innerWidth: newWidth,\n// innerHeight: window.innerHeight,\n// };\n//\n// } else if (innerHeight < 1000 && innerHeight > innerWidth && settingsData.buildingDestroyed){ // mobile portrait\n// const cardHeight = card.getBoundingClientRect().height;\n// const newHeight = window.innerHeight - cardHeight;\n// const size = {\n// innerWidth: window.innerWidth,\n// innerHeight: newHeight,\n// };\n// }\n// }\n//\n// }\n// }\n\nexport function resetPanLimits () {\n const controls = threeJsVariables.orbitControls;\n controls.minPan = undefined;\n controls.maxPan = undefined;\n controls.maxSphere = undefined;\n}\n\nfunction setVectorValueFromControls (object) {\n const {orbitControlsVector} = getWorldData();\n const newData = new Vector3();\n Object.entries(object).forEach(([key,value]) =>{\n if (value === 0){\n newData[key] = orbitControlsVector[key];\n } else {\n newData[key] = value;\n }\n });\n\n return newData;\n}\n\nexport async function setDefaultForeshortening () {\n const {cameraVector,orbitControlsVector} = getWorldData();\n await fitModelInViewport();\n const target = config.threejs.orbitControls.target;\n const {minAngle} = getPolarAngleFromViewMode(ViewMode.Orbit);\n const {minDistance,maxDistance} = getOrbitControlsDistanceAndPan(ViewMode.Orbit);\n const foreshortening = config.threejs.orbitControls.autoZoomSettings.foreshortening;\n\n let length;\n\n if (autoZoomIsActive()){\n length = foreshortening;\n } else {\n length = (maxDistance + minDistance) / 2;\n }\n\n const defaultTarget = new Vector3(target.x,target.y,target.z);\n\n const position = new Vector3().subVectors(cameraVector,orbitControlsVector).normalize().setLength(length).add(orbitControlsVector);\n\n // const animate = new Promise(resolve => {\n await animateCamera(\n cameraVector,\n position,\n orbitControlsVector,\n defaultTarget,\n undefined,\n minDistance,\n minAngle,\n 0,\n 1000,\n TWEEN.Easing.Sinusoidal.InOut,\n ()=>{\n // setSmoothDistance();\n setOrbitControls(ViewMode.Orbit);\n setPolarAngle(ViewMode.Orbit);\n // setMinAndMaxControlsDistance(ViewMode.Orbit);\n setPanLimits(ViewMode.Orbit);\n },\n ()=>{\n setMinAndMaxControlsDistance(ViewMode.Orbit);\n // resolve(true);\n // console.log(threeJsVariables.orbitControls.getAzimuthalAngle());\n });\n // });\n\n // settingsData.animationsList.push(animate);\n\n}\n\nexport function getCenterDistance (viewMode = settingsData.activeViewMode) {\n const distanceAndPan = settingsData.globalSettings.orbitControlsDistanceAndPan[viewMode];\n const center = (distanceAndPan.max + distanceAndPan.min) / 2;\n\n return center;\n}\n\n// export function setSmoothDistance () {\n// return;\n// const { minDistance,maxDistance } = getOrbitControlsDistanceAndPan();\n// const min = minDistance / 100;\n// const max = maxDistance * 100;\n// threeJsVariables.orbitControls.minDistance = min;\n// threeJsVariables.orbitControls.maxDistance = max;\n// threeJsVariables.trackballControls.minDistance = threeJsVariables.orbitControls.minDistance;\n// threeJsVariables.trackballControls.maxDistance = threeJsVariables.orbitControls.maxDistance;\n// }\n\nexport function getDirectionAndDistance (modeView = settingsData.activeViewMode) {\n const currentDistance = Math.abs(threeJsVariables.perspectiveCamera.position.z);\n const cameraRoute = threeJsVariables.perspectiveCamera.position.z < 0 ? -1 : 1;\n const { minDistance } = getOrbitControlsDistanceAndPan(modeView);\n\n switch (modeView) {\n case ViewMode.Orbit:\n return minDistance * 1.4 * cameraRoute;\n // if (currentDistance > orbit.max){\n // return ((orbit.max + orbit.min) / 2) * cameraRoute;\n // } else if (currentDistance < orbit.min){\n // return orbit.min * cameraRoute;\n // } else {\n // return currentDistance * cameraRoute;\n // }\n case ViewMode.Cylinder:\n return minDistance / 2 * cameraRoute;\n // if (currentDistance > cylinder.max){\n // return cylinder.max * cameraRoute;\n // } else if (currentDistance < cylinder.min) {\n // return ((cylinder.max + cylinder.min) / 2) * cameraRoute;\n // } else {\n // return currentDistance * cameraRoute;\n // }\n }\n}\n\nexport function setViewDeviceTargetAndPosition (viewMode = settingsData.activeViewMode) {\n const {target,position} = getOrbitControlsDistanceAndPan(viewMode);\n if (target) {\n threeJsVariables.orbitControls.target.set(\n target.x,\n target.y,\n target.z\n )\n }\n \n if (position) {\n threeJsVariables.perspectiveCamera.position.set(\n position.x,\n position.y,\n position.z\n )\n }\n}\n\n\nexport function setOrbitControls (viewMode = settingsData.activeViewMode) {\n const controls = threeJsVariables.orbitControls;\n\n switch (viewMode) {\n case ViewMode.Orbit:\n controls.mouseButtons = {\n LEFT: MOUSE.ROTATE,\n MIDDLE: MOUSE.DOLLY,\n RIGHT: MOUSE.PAN\n };\n\n controls.touches = {\n ONE: TOUCH.ROTATE,\n TWO: TOUCH.DOLLY_PAN\n };\n\n controls.keys = {\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n BOTTOM: 40\n };\n controls.rotationAndPan = false;\n controls.screenSpacePanning = false;\n controls.enablePan = true;\n controls.enableSetAngle = false;\n\n break;\n case ViewMode.Cylinder:\n const control = cylinderControls();\n Object.entries(control).forEach(([key,value]) => {\n controls[key] = value;\n });\n\n // controls.mouseButtons = {\n // LEFT: MOUSE.ROTATE,\n // MIDDLE: THREE.MOUSE.DOLLY,\n // RIGHT: null\n // };\n //\n // controls.touches = {\n // ONE: THREE.TOUCH.ROTATE,\n // TWO: THREE.TOUCH.DOLLY_PAN\n // };\n //\n // controls.rotationAndPan = true;\n // controls.screenSpacePanning = true;\n // controls.enablePan = true;\n // controls.enableSetAngle = false;\n\n break;\n case ViewMode.FloorPlan:\n controls.mouseButtons = {\n LEFT: MOUSE.ROTATE,\n MIDDLE: MOUSE.DOLLY,\n RIGHT: null\n };\n\n controls.touches = {\n ONE: TOUCH.ROTATE,\n TWO: TOUCH.DOLLY_PAN\n };\n\n controls.rotationAndPan = false;\n controls.screenSpacePanning = false;\n controls.enableSetAngle = false;\n break;\n }\n\n}\n\n\nfunction cylinderControls () {\n if (config.threejs.orbitControls.cylinder.controls === 'map') {\n return {\n mouseButtons: {\n LEFT: MOUSE.ROTATE,\n MIDDLE: MOUSE.DOLLY,\n RIGHT: MOUSE.PAN\n },\n touches: {\n ONE: TOUCH.ROTATE,\n TWO: TOUCH.DOLLY_PAN\n }\n }\n }\n\n if (config.features.privateHouseMode) {\n return {\n mouseButtons: {\n LEFT: MOUSE.ROTATE,\n MIDDLE: MOUSE.DOLLY,\n RIGHT: MOUSE.PAN\n },\n touches: {\n ONE: TOUCH.ROTATE,\n TWO: TOUCH.DOLLY_PAN\n },\n keys: {\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n BOTTOM: 40\n },\n rotationAndPan: false,\n screenSpacePanning: false,\n enablePan: true,\n enableSetAngle: false\n }\n }\n\n\n return {\n mouseButtons : {\n LEFT: MOUSE.ROTATE,\n MIDDLE: MOUSE.DOLLY,\n RIGHT: null\n },\n touches: {\n ONE: TOUCH.ROTATE,\n TWO: TOUCH.DOLLY_PAN\n },\n rotationAndPan : true,\n screenSpacePanning: true,\n enablePan: true,\n enableSetAngle: false\n }\n}\n\n\nexport function rotateToCamera (diff = 0) {\n return threeJsVariables.orbitControls.getAzimuthalAngle() + Math.PI / 2 + diff;\n}\n\nexport function freezeCurrentDistance () {\n const currentDistance = getCurrentCameraDistance();\n threeJsVariables.orbitControls.minDistance = currentDistance;\n threeJsVariables.orbitControls.maxDistance = currentDistance;\n}\n\nexport function setMinAndMaxControlsDistance (modeView = settingsData.activeViewMode) {\n // if (Vantage.isActive()) return;\n const {activate,min,max} = config.threejs.orbitControls.autoZoomSettings;\n const { minDistance,maxDistance } = getOrbitControlsDistanceAndPan(modeView);\n\n // threeJsVariables.orbitControls.minDistance = activate ? min : minDistance;\n // threeJsVariables.orbitControls.maxDistance = activate ? max : maxDistance;\n // threeJsVariables.trackballControls.minDistance = threeJsVariables.orbitControls.minDistance;\n // threeJsVariables.trackballControls.maxDistance = threeJsVariables.orbitControls.maxDistance;\n\n threeJsVariables.trackballControls.minDistance = activate ? min : minDistance;\n threeJsVariables.trackballControls.maxDistance = activate ? max : maxDistance;\n}\n\nexport function setMaxAndMinDistanceFromViewport (distance,viewMode = settingsData.activeViewMode) {\n const mode = config.threejs.orbitControls[viewMode];\n if (mode){\n switch (viewMode) {\n case ViewMode.Orbit:\n mode.min = isMobile ? distance / 1.3 : distance / 1.2;\n mode.max = isMobile ? distance * 1.5 : distance * 2.5;\n break;\n case ViewMode.Cylinder:\n mode.min = distance / 1.4;\n mode.max = distance * 1.2;\n break;\n }\n setMinAndMaxControlsDistance(viewMode);\n }\n cloudsPositionCorrection();\n}\n\nexport function setPolarAngle (viewMode = settingsData.activeViewMode) {\n const controls = threeJsVariables.orbitControls;\n const orbitPolarAngle = getPolarAngleFromViewMode(viewMode);\n controls.maxPolarAngle = orbitPolarAngle.maxAngle;\n controls.minPolarAngle = orbitPolarAngle.minAngle;\n}\n\nexport function getWorldData (flat) {\n let flatWorldPosition,floorWorldPosition = null;\n if (flat){\n flatWorldPosition = flat.getWorldPosition(new Vector3());\n floorWorldPosition = flat.parent?.getWorldPosition(new Vector3()) || new Vector3();\n }\n\n const cameraWorldPosition = threeJsVariables.perspectiveCamera.getWorldPosition(new Vector3());\n const orbitControlsTarget = threeJsVariables.orbitControls.target;\n\n return{\n cameraVector : cameraWorldPosition,\n orbitControlsVector: orbitControlsTarget,\n flatVector: flatWorldPosition,\n floorVector: floorWorldPosition\n }\n}\n\nexport function getCurrentCameraDistance () {\n\n return threeJsVariables.perspectiveCamera.position.distanceTo(threeJsVariables.orbitControls.target);\n}\n\nwindow.cam = ()=>{\n const dist = getCurrentCameraDistance();\n console.log(dist);\n};\n\nexport function getOrbitControlsDistanceAndAngle () {\n return{\n currentMinDistance: threeJsVariables.trackballControls.minDistance,\n currentMaxDistance: threeJsVariables.trackballControls.maxDistance,\n currentMinAngle: threeJsVariables.orbitControls.minPolarAngle,\n currentMaxAngle: threeJsVariables.orbitControls.maxPolarAngle\n };\n}\n\nexport function getOrbitControlsCurrentPolarAngle () {\n return threeJsVariables.orbitControls.getPolarAngle();\n}\n\nexport function getPolarAngleFromViewMode (viewMode = settingsData.activeViewMode) {\n if (config.features.privateHouseMode) {\n return {\n minAngle: config.threejs.orbitControls.orbit.polarAngle.min,\n maxAngle: config.threejs.orbitControls.orbit.polarAngle.max\n }\n }\n switch (viewMode) {\n case ViewMode.Orbit:\n return{\n // minAngle: 0.48447792903702325,\n // maxAngle: Math.PI * 0.45\n minAngle: config.threejs.orbitControls.orbit.polarAngle.min,\n maxAngle: config.threejs.orbitControls.orbit.polarAngle.max\n };\n case ViewMode.Cylinder:\n return {\n // minAngle: Math.PI * 0.45,\n // maxAngle: 0.48447792903702325,\n minAngle: config.threejs.orbitControls.cylinder.polarAngle.min,\n maxAngle: config.threejs.orbitControls.cylinder.polarAngle.max,\n };\n case ViewMode.FloorPlan:\n return {\n // minAngle: 0.48447792903702325,\n // maxAngle: Math.PI * 0.30\n minAngle: config.threejs.orbitControls.floorplan.polarAngle.min,\n maxAngle: config.threejs.orbitControls.floorplan.polarAngle.max\n };\n }\n}\n","export const SwipeScript = (element) => {\n (function (window, document) {\n 'use strict';\n\n // patch CustomEvent to allow constructor creation (IE/Chrome)\n if (typeof window.CustomEvent !== 'function') {\n\n window.CustomEvent = function (event, params) {\n\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n\n var evt = element.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n window.CustomEvent.prototype = window.Event.prototype;\n }\n\n document.addEventListener('touchstart', handleTouchStart, false);\n document.addEventListener('touchmove', handleTouchMove, false);\n document.addEventListener('touchend', handleTouchEnd, false);\n\n var xDown = null;\n var yDown = null;\n var xDiff = null;\n var yDiff = null;\n var timeDown = null;\n var startEl = null;\n\n function handleTouchEnd(e) {\n // if the user released on a different target, cancel!\n if (startEl !== e.target) return;\n\n var swipeThreshold = parseInt(startEl.getAttribute('data-swipe-threshold') || '20', 10); // default 10px\n var swipeTimeout = parseInt(startEl.getAttribute('data-swipe-timeout') || '500', 10); // default 1000ms\n var timeDiff = Date.now() - timeDown;\n var eventType = '';\n\n if (Math.abs(xDiff) > Math.abs(yDiff)) { // most significant\n if (Math.abs(xDiff) > swipeThreshold && timeDiff < swipeTimeout) {\n if (xDiff > 0) {\n eventType = 'swiped-left';\n }\n else {\n eventType = 'swiped-right';\n }\n }\n }\n else {\n if (Math.abs(yDiff) > swipeThreshold && timeDiff < swipeTimeout) {\n if (yDiff > 0) {\n eventType = 'swiped-up';\n }\n else {\n eventType = 'swiped-down';\n // action(eventType, startEl);\n }\n }\n }\n\n if (eventType !== '') {\n\n // fire event on the element that started the swipe\n startEl.dispatchEvent(new CustomEvent(eventType, { bubbles: true, cancelable: true }));\n\n // if (console && console.log) console.log(eventType + ' fired on ' + startEl.tagName);\n }\n\n // reset values\n xDown = null;\n yDown = null;\n timeDown = null;\n }\n\n function handleTouchStart(e) {\n // if the element has data-swipe-ignore=\"true\" we stop listening for swipe events\n if (e.target.getAttribute('data-swipe-ignore') === 'true') return;\n\n startEl = e.target;\n\n timeDown = Date.now();\n xDown = e.touches[0].clientX;\n yDown = e.touches[0].clientY;\n xDiff = 0;\n yDiff = 0;\n }\n\n function handleTouchMove(e) {\n if (!xDown || !yDown) return;\n\n var xUp = e.touches[0].clientX;\n var yUp = e.touches[0].clientY;\n\n xDiff = xDown - xUp;\n yDiff = yDown - yUp;\n }\n\n }(window, document));\n}\n\n// document.addEventListener('swiped-left', function(e) {\n// console.log(e.target); // the element that was swiped\n// });\n// document.addEventListener('swiped-right', function(e) {\n// console.log(e.target); // the element that was swiped\n// });\n// document.addEventListener('swiped-up', function(e) {\n// console.log(e.target); // the element that was swiped\n// });\n// document.addEventListener('swiped-down', function(e) {\n// console.log(e.target); // the element that was swiped\n// });","import { TrackballControls } from '../../libs/TrackballControls';\nimport { threeJsVariables } from '../../settings';\nimport { setDisableToZoomButtons } from './zoomControl';\nimport { InstanceLOD } from '../threejs/InstanceLOD/InstanceLOD';\n\nexport function trackballControlsInit () {\n const control = new TrackballControls(threeJsVariables.perspectiveCamera,threeJsVariables.renderer.domElement);\n control.noRotate = true;\n control.noPan = true;\n control.noZoom = false;\n control.zoomSpeed = 1.5;\n control.dynamicDampingFactor = 0.2;\n\n control.addEventListener('change', trackballHandler);\n // control.addEventListener('end', trackballEndHandler);\n\n threeJsVariables.trackballControls = control;\n\n return control;\n}\n\nfunction trackballHandler () {\n setDisableToZoomButtons();\n InstanceLOD.manualUpdate();\n // threeJsVariables.miniMap.updateMarkers();\n}\n\n// function trackballEndHandler () {\n// dollyOutBounce();\n// }\n","'use strict';\n\nimport { Buildings, isMobile, projectMode, settingsData, threeJsVariables } from '../../settings';\nimport {\n autoRotateTimerAction,\n getCurrentCameraDistance, isOrbitControlsEnabled,\n setMinAndMaxControlsDistance,\n} from './orbitControls';\nimport { createHtmlElement, userPrevent } from '../../functions';\nimport {getHighlights} from '../threejs/autoSelectionBoxes'\nimport { Vector3, Box3 } from 'three';\n\nlet timerID, touchStartX, touchStartY;\n\nexport function zoomButtonsControl(parent) {\n if (isMobile) {\n return;\n }\n\n const mainWrapper = createHtmlElement(parent, '', 'div', ['zoom__controls']);\n const decreaseBtn = createHtmlElement(mainWrapper, '', 'button', ['zoom__controls__btn', 'icon-minus']);\n decreaseBtn.dataset.zoomBtn = 'decrease';\n const increaseBtn = createHtmlElement(mainWrapper, '', 'button', ['zoom__controls__btn', 'icon-plus']);\n increaseBtn.dataset.zoomBtn = 'increase';\n\n mainWrapper.addEventListener('click', zoomControlsHandler);\n mainWrapper.addEventListener('mousedown', holdingInButton);\n mainWrapper.addEventListener('mouseleave', holdingOutButton);\n mainWrapper.addEventListener('mouseup', holdingOutButton);\n\n mainWrapper.addEventListener('touchstart', holdingInButton);\n mainWrapper.addEventListener('touchmove', holdingOutButton);\n mainWrapper.addEventListener('touchend', holdingOutButton);\n}\n\nfunction holdingInButton(e) {\n // if (settingsData.tourIsActive) {\n // stopCameraTour();\n // return;\n // }\n\n if (!isOrbitControlsEnabled()) return;\n\n if (e.type === 'touchstart'){\n touchStartX = e.touches[0].clientX;\n touchStartY = e.touches[0].clientY;\n }\n e.preventDefault();\n const controls = threeJsVariables.trackballControls;\n const zoomStep = settingsData.zoomButtonsStep;\n\n function timer() {\n if (e.target.classList.contains('disabled')){\n holdingOutButton(e);\n return;\n }\n // console.log(\"Timer tick:\");\n switch (e.target.dataset.zoomBtn) {\n case 'decrease':\n !e.target.classList.contains('disabled') && controls.zoomCamera(zoomStep.decrease);\n break;\n case 'increase':\n !e.target.classList.contains('disabled') && controls.zoomCamera(zoomStep.increase);\n break;\n }\n\n setDisableToZoomButtons();\n\n timerID = requestAnimationFrame(timer);\n }\n\n requestAnimationFrame(timer);\n}\n\nfunction holdingOutButton(e) {\n // if (settingsData.tourIsActive) {\n // stopCameraTour();\n // return;\n // }\n if (e.type === 'touchmove'){\n const moveX = e.touches[0].clientX;\n const moveY = e.touches[0].clientY;\n\n if (Math.abs(touchStartX - moveX) > 20 || Math.abs(touchStartY - moveY) > 20){\n cancelAnimationFrame(timerID);\n }\n } else {\n cancelAnimationFrame(timerID);\n }\n}\n\nfunction zoomControlsHandler({target}) {\n // if (settingsData.tourIsActive) {\n // stopCameraTour();\n // return;\n // }\n\n if (userPrevent()){\n return;\n }\n\n if (projectMode.LiteMode.isActive() && projectMode.LiteMode.isVisible()){\n\n projectMode.LiteMode.zoomListener(target);\n return;\n }\n\n autoRotateTimerAction('update');\n\n const controls = threeJsVariables.trackballControls;\n const zoomStep = settingsData.zoomButtonsStep;\n\n switch (target.dataset.zoomBtn) {\n case 'decrease':\n !target.classList.contains('disabled') && controls.zoomCamera(zoomStep.decrease);\n break;\n case 'increase':\n !target.classList.contains('disabled') && controls.zoomCamera(zoomStep.increase);\n break;\n }\n\n setDisableToZoomButtons();\n}\n\nexport async function fitModelInViewport(setDistance = false, model) {\n if (settingsData.buildingDestroyed) {\n return;\n }\n\n const zoomSettings = config.threejs.orbitControls.autoZoomSettings;\n if (!zoomSettings.activate) {\n return;\n }\n\n let size;\n\n if (model) {\n if (model.isVector3) {\n size = model;\n } else {\n const box = new Box3().setFromObject(model);\n size = box.getSize(new Vector3());\n }\n } else {\n size = await getTotalSizeOfBuildingAndSelectionBoxes();\n }\n\n let scalar;\n let foreshorteningZoomCorrection;\n let minZoomCorrection;\n\n // if (isMobile){\n // if (settingsData.isLandscape){\n // scalar = zoomSettings.mobile.landscape.scale;\n // foreshorteningZoomCorrection = zoomSettings.mobile.landscape.foreshorteningZoomCorrection;\n // minZoomCorrection = zoomSettings.mobile.landscape.minZoomCorrection;\n // } else {\n // scalar = zoomSettings.mobile.portrait.scale;\n // foreshorteningZoomCorrection = zoomSettings.mobile.portrait.foreshorteningZoomCorrection;\n // minZoomCorrection = zoomSettings.mobile.portrait.minZoomCorrection;\n // }\n // } else {\n // scalar = zoomSettings.desktop.scale;\n // foreshorteningZoomCorrection = zoomSettings.desktop.foreshorteningZoomCorrection;\n // minZoomCorrection = zoomSettings.desktop.minZoomCorrection;\n // }\n // size.multiplyScalar(scalar);\n\n const maxDim = Math.max(size.x, size.y, size.z);\n const h = size.y;\n const canvas = threeJsVariables.renderer.domElement;\n\n const cameraFov = threeJsVariables.perspectiveCamera.fov;\n const fovX = cameraFov * (canvas.clientWidth / canvas.clientHeight);\n const distanceX = (maxDim / 2) / Math.tan(Math.PI * fovX / 360) + (maxDim / 2);\n const distanceY = (h / 2) / Math.tan(Math.PI * cameraFov / 360) + (maxDim / 2);\n\n const distance = Math.max(distanceX, distanceY);\n\n zoomSettings.max = distance + maxDim * 2;\n zoomSettings.foreshortening = maxDim * 2;\n zoomSettings.min = maxDim;\n if (setDistance) {\n setMinAndMaxControlsDistance();\n }\n\n return {\n size,\n distance\n };\n}\n\nexport function getObjectViewDistance (object) {\n const box = new Box3().setFromObject(object);\n const size = new Vector3();\n box.getSize(size);\n\n function _distanceToFitObjectInView(size, fov) {\n return size / (2 * Math.tan(fov / 2))\n }\n\n const width = Math.max(size.x,size.z);\n const height = size.y;\n const objectAspect = width / height;\n const cameraFov = threeJsVariables.perspectiveCamera.fov;\n const cameraAspect = threeJsVariables.perspectiveCamera.aspect;\n const cameraHFov = Math.atan(cameraAspect * Math.tan(cameraFov / 2)) * 2;\n\n let distance = 0;\n\n if (objectAspect < cameraAspect) {\n distance = _distanceToFitObjectInView(height, cameraFov)\n } else {\n distance = _distanceToFitObjectInView(width, cameraHFov)\n }\n\n return distance;\n}\n\nexport function getZoomParams () {\n const zoom = config.threejs.orbitControls.autoZoomSettings;\n return {\n min: zoom.min,\n max: zoom.max,\n foreshortening: zoom.foreshortening\n }\n}\n\nexport function autoZoomIsActive () {\n return config.threejs.orbitControls.autoZoomSettings.activate;\n}\n\nexport function getTotalSizeOfBuildingAndSelectionBoxes() {\n let buildings, sBoxes;\n return new Promise(resolve => {\n const checkModels = setInterval(() => {\n if (settingsData.activeViewMode !== 'orbit') {\n // const activeBuilding = buildings_info.find(building => building.isActive);\n const activeBuilding = Buildings.getActiveBuilding();\n buildings = threeJsVariables.scene.getObjectByName(activeBuilding.name);\n sBoxes = activeBuilding.selectionsGroup;\n } else {\n buildings = threeJsVariables.scene.getObjectByName('Project Buildings');\n sBoxes = getHighlights();// threeJsVariables.scene.getObjectByName('Project Selection Boxes');\n if (Array.isArray(sBoxes)) {\n sBoxes = null;\n }\n }\n\n if (buildings && sBoxes) {\n clearInterval(checkModels);\n const buildingSize = new Box3().setFromObject(buildings).getSize(new Vector3());\n const sBoxSize = new Box3().setFromObject(sBoxes).getSize(new Vector3());\n const totalSize = new Vector3(buildingSize.x, sBoxSize.y, buildingSize.z);\n resolve(totalSize);\n } else if (!buildings && sBoxes){\n clearInterval(checkModels);\n const sBoxSize = new Box3().setFromObject(sBoxes).getSize(new Vector3());\n resolve(sBoxSize);\n } else if (!buildings && !sBoxes && settingsData.loadingError) {\n clearInterval(checkModels);\n resolve(new Vector3(40,40,40));\n }\n }, 100);\n });\n}\n\nexport const setDisableToZoomButtons = () => {\n const currentZoom = getCurrentCameraDistance();\n const buttonIncrease = document.querySelector('.zoom__controls__btn.icon-plus');\n const buttonDecrease = document.querySelector('.zoom__controls__btn.icon-minus');\n\n if (!buttonIncrease || !buttonDecrease){\n return;\n }\n\n const minDistance = threeJsVariables.orbitControls.minDistance;\n const maxDistance = threeJsVariables.orbitControls.maxDistance;\n\n if (currentZoom >= maxDistance - 2) {\n !buttonDecrease.classList.contains('disabled') && buttonDecrease.classList.add('disabled');\n } else if (currentZoom <= minDistance + 2 ) {\n !buttonIncrease.classList.contains('disabled') && buttonIncrease.classList.add('disabled');\n } else {\n buttonIncrease.classList.contains('disabled') && buttonIncrease.classList.remove('disabled');\n buttonDecrease.classList.contains('disabled') && buttonDecrease.classList.remove('disabled');\n }\n}\n","'use strict';\n\nimport { Cloudflare } from '../api/Cloudflare';\nimport {ProjectLogs} from \"../components/ProjectLogs\";\nimport { getCurrentDateTime, getDateAfarFromCurrent, getUrlParam } from '../../functions';\nimport {BmbyMode} from \"../mode/BmbyMode\";\n\nconst axios = require('axios').default;\n\nexport function getSettings () {\n return new Promise(async (resolve) => {\n let response;\n try {\n response = await axios.get(`${config.apiDomain}${config.apiEndpoint}${config.apiVersion}/settings/${config.projectGuid}`);\n localStorage.setItem('settings', JSON.stringify(response));\n } catch (e) {\n response = JSON.parse(localStorage.getItem('settings'));\n } finally {\n ProjectLogs.timerStopFor('api_settings');\n resolve(response);\n }\n });\n}\n\nexport function getCommonAssets () {\n return new Promise(async (resolve) => {\n let response;\n try {\n response = await axios.get(`${config.apiDomain}${config.apiEndpoint}${config.apiVersion}/common-assets/${config.projectGuid}`);\n localStorage.setItem('common-assets', JSON.stringify(response));\n } catch (e) {\n response = JSON.parse(localStorage.getItem('common-assets'));\n } finally {\n resolve(response);\n }\n });\n}\n\nexport function getAmenities () {\n return new Promise(async (resolve) => {\n let response;\n try {\n response = await axios.get(`${config.apiDomain}${config.apiEndpoint}${config.apiVersion}/amenities/${config.projectGuid}`);\n localStorage.setItem('amenities', JSON.stringify(response));\n } catch (e) {\n response = JSON.parse(localStorage.getItem('amenities'));\n } finally {\n resolve(response);\n }\n });\n}\n\nexport function getProps () {\n const marketingId = getUrlParam('id');\n if (marketingId) {\n return getMarketingProps(marketingId);\n } else {\n return new Promise(async (resolve) => {\n let response;\n \n try {\n let url =`${config.apiDomain}${config.apiEndpoint}${config.apiVersion}/props/${config.projectGuid}`;\n if(BmbyMode.active) url+='?status=bmby';\n response = await axios.get(url);\n localStorage.setItem('props', JSON.stringify(response));\n } catch (e) {\n response = JSON.parse(localStorage.getItem('props'));\n } finally {\n ProjectLogs.timerStopFor('api_props');\n resolve(response);\n }\n });\n }\n}\n\nexport function getBuildingShape () {\n return new Promise(async (resolve) => {\n let response;\n try {\n let url =`${config.apiDomain}${config.apiEndpoint}${config.apiVersion}/get-building-shape/${config.projectGuid}`;\n response = await axios.get(url);\n localStorage.setItem('buildingShape', JSON.stringify(response));\n } catch (e) {\n response = JSON.parse(localStorage.getItem('buildingShape'));\n } finally {\n resolve(response);\n }\n });\n}\n\nexport function setBuildingShape (data) {\n return axios.post(`${config.apiDomain}${config.apiEndpoint}${config.apiVersion}/set-building-shape/${config.projectGuid}`,data);\n}\n\nexport function getMarketingProps (id) {\n return new Promise(async (resolve) => {\n let response;\n \n try {\n let url =`${config.apiDomain}/api/properties/marketing/${id}`;\n if(BmbyMode.active) url+='?status=bmby';\n response = await axios.get(url);\n response.data.forEach(apt => {\n apt.buildingEngineId = apt.engineId.split('_')[0];\n apt.assets = {\n plan2D: ''\n }\n });\n localStorage.setItem('marketingProps', JSON.stringify(response));\n } catch (e) {\n response = JSON.parse(localStorage.getItem('marketingProps'));\n } finally {\n resolve(response);\n }\n });\n}\n\nexport function getProp (propId) {\n return new Promise(async (resolve) => {\n let response;\n try {\n response = await axios.get(`${config.apiDomain}${config.apiEndpoint}${config.apiVersion}/props/${config.projectGuid}?propId=${propId}`);\n } catch (e) {\n response = {data: []};\n } finally {\n resolve(response);\n }\n });\n}\n\nexport function getSales(daysAgo) {\n return new Promise(async (resolve) => {\n let response;\n try {\n const endDate = getCurrentDateTime('YYYY-MM-DD', 'UTC')\n const startDate = getDateAfarFromCurrent(daysAgo);\n response = await axios.get(`${config.apiDomain}${config.apiEndpoint}${config.apiVersion}/sales/${config.projectGuid}?startDate=${startDate}&endDate=${endDate}`);\n } catch (e) {\n response = null;\n } finally {\n resolve(response);\n }\n });\n}\n\nexport function getSpecifications() {\n return new Promise(async (resolve) => {\n let response;\n try {\n response = await axios.get(`${config.apiDomain}${config.apiEndpoint}${config.apiVersion}/specifications/${config.projectGuid}`);\n } catch (e) {\n response = null;\n } finally {\n resolve(response);\n }\n });\n}\n\n/**\n * Get dictionary json file from CDN repository\n * Returns promise\n */\nexport const getDictionary = () => {\n return new Promise(async (resolve) => {\n let response;\n try {\n let url;\n if (Cloudflare.version) {\n url = `${config.cdnRepository}/${config.projectFolder}/config/dictionary.json?v=${Cloudflare.version}`;\n if (window.ld && window.ld[0])\n url += window.ld[0].version;\n } else {\n url = `${config.cdnRepository}/${config.projectFolder}/config/dictionary.json`;\n if (window.ld && window.ld[0])\n url += `?v=${window.ld[0].version}`;\n }\n response = await axios.get(url, {headers: {'Content-Type': 'application/json'}});\n localStorage.setItem('dictionary', JSON.stringify(response));\n } catch (e) {\n response = JSON.parse(localStorage.getItem('dictionary'));\n } finally {\n resolve(response);\n }\n });\n};\n\nexport const sendUserID = (data) => {\n axios.post(`${config.apiDomain}${config.apiEndpoint}${config.apiVersion}/register-user/${config.projectGuid}`,data);\n};\n\nexport const releasePayment = (data) => {\n axios.post(`${config.apiDomain}${config.apiEndpoint}${config.apiVersion}/payment/${config.projectGuid}`,data);\n};\n\nexport const sendLogs = (data, type) => {\n if (type === 'error' && config.features?.errorLogs === false)\n return;\n\n axios.post(`${config.apiDomain}${config.apiEndpoint}${config.apiVersion}/log/${config.projectGuid}`, {type, data});\n};\n\nconst getPoi = () => {\n return new Promise(async (resolve) => {\n let response;\n try {\n response = await axios.get(`${config.apiDomain}${config.apiEndpoint}${config.apiVersion}/poi/${config.projectGuid}`);\n localStorage.setItem('poi', JSON.stringify(response));\n } catch (e) {\n response = JSON.parse(localStorage.getItem('poi'));\n } finally {\n resolve(response);\n }\n });\n};\n\nconst getPoiCategories = () => {\n return new Promise(async (resolve) => {\n let response;\n try {\n response = await axios.get(`${config.apiDomain}${config.apiEndpoint}${config.apiVersion}/poicategories/${config.projectGuid}`);\n localStorage.setItem('poi-categories', JSON.stringify(response));\n } catch (e) {\n response = JSON.parse(localStorage.getItem('poi-categories'));\n } finally {\n resolve(response);\n }\n });\n};\n\nconst getAboutData = () => {\n return new Promise(async (resolve) => {\n let response;\n try {\n response = await axios.get(`${config.apiDomain}${config.apiEndpoint}${config.apiVersion}/about/${config.projectGuid}`);\n localStorage.setItem('about', JSON.stringify(response));\n } catch (e) {\n response = JSON.parse(localStorage.getItem('about'));\n } finally {\n resolve(response);\n }\n });\n};\n\nexport const getGalleryData = () => {\n return new Promise(async (resolve) => {\n let response;\n try {\n response = await axios.get(`${config.apiDomain}${config.apiEndpoint}${config.apiVersion}/gallery/${config.projectGuid}`);\n localStorage.setItem('gallery', JSON.stringify(response));\n } catch (e) {\n response = JSON.parse(localStorage.getItem('gallery'));\n } finally {\n resolve(response);\n }\n });\n};\n\nexport const getContactsData = () => {\n return new Promise(async (resolve) => {\n let response;\n try {\n response = await axios.get(`${config.apiDomain}${config.apiEndpoint}${config.apiVersion}/contacts/${config.projectGuid}`);\n // response = await axios.get('https://mbeat.bmby.com/api/dreamsv3/contacts/AD2E4237-1B57-46C7-82EF-2499B9817160');\n localStorage.setItem('contacts', JSON.stringify(response));\n } catch (e) {\n response = JSON.parse(localStorage.getItem('contacts'));\n } finally {\n resolve(response);\n }\n });\n};\n\nexport const getDocuments = () => {\n return new Promise(async (resolve) => {\n let response;\n try {\n response = await axios.get(`${config.apiDomain}${config.apiEndpoint}${config.apiVersion}/documents/${config.projectGuid}`);\n localStorage.setItem('documents', JSON.stringify(response));\n } catch (e) {\n response = JSON.parse(localStorage.getItem('documents'));\n } finally {\n resolve(response);\n }\n });\n};\n\nexport const getLoaderData = () => {\n return new Promise(async (resolve) => {\n let response;\n try {\n response = await axios.get(`${config.apiDomain}${config.apiEndpoint}${config.apiVersion}/loader/${config.projectGuid}`);\n localStorage.setItem('loader', JSON.stringify(response));\n } catch (e) {\n response = JSON.parse(localStorage.getItem('loader'));\n } finally {\n ProjectLogs.timerStopFor('api_loader');\n resolve(response);\n }\n });\n};\n\nexport const getWSToken = () => {\n return new Promise(async (resolve) => {\n let response;\n try {\n response = await axios.get(`${config.apiDomain}${config.apiEndpoint}${config.apiVersion}/wstoken/${config.projectGuid}`);\n localStorage.setItem('wstoken', JSON.stringify(response));\n } catch (e) {\n response = JSON.parse(localStorage.getItem('wstoken'));\n } finally {\n resolve(response);\n }\n });\n};\n\n//essential API data\nexport function getCrmData () {\n return Promise.all([getSettings(), getProps(), getDictionary()]);\n}\n\n// poi API data\nexport function getPoiData () {\n return Promise.all([getPoi(), getPoiCategories()]);\n}\n\nexport function getWidgetsData () {\n return Promise.all([getAboutData(), getGalleryData(), getPoi(), getPoiCategories()]);\n}\n","'use strict';\n\nimport {setCSSVar} from \"../../functions\";\nimport {isMobile} from \"../../settings\";\nimport {BmbyMode} from \"../mode/BmbyMode\";\n\nexport const getVars = ({style}) => {\n const root = document.querySelector(':root');\n const opacity = 0.8;\n setButtonShape(style.button, root);\n setFont(style.font, root);\n setColors(style.colors, root, opacity);\n // setLeftNavBarBottomMove(root);\n setAmountOfButtonsOnOptionsCard(root);\n setBackdropFilter(root);\n setOpacity(root, opacity);\n\n // document.querySelector(':root').style.setProperty('--roundedCorners', '10px');\n setCSSVar('--roundedCorners', '10px');\n};\n\nconst setButtonShape = (buttons, root) => {\n root.style.setProperty('--buttonShape', \"var(--\" + buttons.shape + \")\");\n};\n\nconst setFont = (font, root) => {\n root.style.setProperty('--font', font + ', Open Sans');\n};\n\nconst setBackdropFilter = (root) => {\n root.style.setProperty('--backdropFilter', 'blur(10px)');\n}\n\nconst setOpacity = (root, value) => {\n root.style.setProperty('--mainOpacity', `${value}`);\n}\n\nconst setColors = (colors, root, opacity) => {\n\n if (BmbyMode.active) {\n root.style.setProperty('--brand2', `rgba(77,151,230,1)`);\n return;\n }\n\n colors.forEach(color => {\n switch (color.key) {\n case 'brand1':\n\n if (isMobile && !config.features?.mobileAPIColors) {\n color.value = '32, 37, 49, 1';\n }\n\n let arrBrand1Rgba = (color.value.replace(/ /g, \"\").split(\",\"));\n let arrHsl = rgbToHsl(arrBrand1Rgba[0], arrBrand1Rgba[1], arrBrand1Rgba[2], arrBrand1Rgba[3]);\n arrHsl[3] = opacity;\n\n const menuBgColor = `rgba(${color.value})`;\n const primaryBg = `hsl(${arrHsl[0]}deg,${arrHsl[1]}%,${arrHsl[2] - 4}%,${arrHsl[3]})`;\n root.style.setProperty('--menuBg', menuBgColor);\n root.style.setProperty('--primaryBg', primaryBg);\n root.style.setProperty('--primaryBgNoAlpha', `hsl(${arrHsl[0]}deg,${arrHsl[1]}%,${arrHsl[2] - 4}%, 1)`);\n\n let textColor = \"255,255,255,1\";\n if (arrHsl[2] > 60 && !isMobile) {\n textColor = \"0,0,0,1\";\n document.body.classList.add('light-theme');\n }\n\n root.style.setProperty('--textColor', `rgba(${textColor})`);\n config.style.colors.push({key:'textColor', value:textColor});\n let arrTxtRgba = (textColor.replace(/ /g, \"\").split(\",\"));\n root.style.setProperty('--borderColor', `rgba(${arrTxtRgba[0]},${arrTxtRgba[1]},${arrTxtRgba[2]},0.2)`);\n\n // if (isMobile) {\n // const mobileSearchBackgroundColor= config.features?.mobileAPIColors ? menuBgColor : '#202125';\n // const mobileSearchCardColor = config.features?.mobileAPIColors ? primaryBg : '#33353D';\n // root.style.setProperty('--mobile-search-background-color', mobileSearchBackgroundColor);\n // root.style.setProperty('--mobile-search-card-color', mobileSearchCardColor);\n // root.style.setProperty('--mobile-search-border', `0.5px solid #3C3C3C`);\n // }\n\n break;\n\n\n case 'brand2':\n\n let arrBrand2Rgba = (color.value.replace(/ /g, \"\").split(\",\"));\n root.style.setProperty('--activeBg', `rgba(${arrBrand2Rgba[0]},${arrBrand2Rgba[1]},${arrBrand2Rgba[2]},0.2)`);\n root.style.setProperty('--customerContactNow1', `rgba(${arrBrand2Rgba[0]},${arrBrand2Rgba[1]},${arrBrand2Rgba[2]},0.2)`);\n root.style.setProperty('--customerContactNow2', `rgba(${arrBrand2Rgba[0]},${arrBrand2Rgba[1]},${arrBrand2Rgba[2]},0.4)`);\n root.style.setProperty('--customerContactNow3', `rgba(${arrBrand2Rgba[0]},${arrBrand2Rgba[1]},${arrBrand2Rgba[2]},0.8)`);\n root.style.setProperty('--brand3', `rgba(${arrBrand2Rgba[0]},${arrBrand2Rgba[1]},${arrBrand2Rgba[2]},0.4)`);\n root.style.setProperty('--buttonCustomColor', `rgba(${arrBrand2Rgba[0]},${arrBrand2Rgba[1]},${arrBrand2Rgba[2]},0.8)`);\n\n break;\n\n }\n root.style.setProperty('--' + color.key, \"rgba(\" + color.value + \")\");\n });\n};\n\n// const setLeftNavBarBottomMove = (root) => {\n// root.style.setProperty('--left-bar-bottom-move', \"initial\");\n// };\n\nexport const setAmountOfButtonsOnOptionsCard = (root, amount = 0) => {\n root.style.setProperty('--buttonAmount', `${amount}`);\n};\n\n\nfunction rgbToHsl(r, g, b, a) {\n // Make r, g, and b fractions of 1\n r /= 255;\n g /= 255;\n b /= 255;\n\n // Find greatest and smallest channel values\n let cmin = Math.min(r, g, b),\n cmax = Math.max(r, g, b),\n delta = cmax - cmin,\n h = 0,\n s = 0,\n l = 0;\n\n // Calculate hue\n // No difference\n if (delta == 0)\n h = 0;\n // Red is max\n else if (cmax == r)\n h = ((g - b) / delta) % 6;\n // Green is max\n else if (cmax == g)\n h = (b - r) / delta + 2;\n // Blue is max\n else\n h = (r - g) / delta + 4;\n\n h = Math.round(h * 60);\n\n // Make negative hues positive behind 360°\n if (h < 0)\n h += 360;\n\n // Calculate lightness\n l = (cmax + cmin) / 2;\n\n // Calculate saturation\n s = delta == 0 ? 0 : delta / (1 - Math.abs(2 * l - 1));\n\n // Multiply l and s by 100\n s = +(s * 100).toFixed(1);\n l = +(l * 100).toFixed(1);\n\n return [h, s, l, a];\n}\n","'use strict';\n\nimport { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader';\nimport {\n Box3, CircleGeometry,\n DoubleSide,\n Group, LinearSRGBColorSpace,\n Mesh, MeshBasicMaterial,\n TextureLoader,\n Vector3,\n} from 'three';\nimport { GSAPAnimationMixer, projectMode, settingsData, threeJsVariables } from '../../settings';\nimport { getCurrentLang } from '../components/langSwitcher/langSwitcher';\nimport gsap from 'gsap';\nimport { rotateToCamera } from '../controls/orbitControls';\nimport { ViewMode } from '../../common';\nimport { FontLoader } from 'three/examples/jsm/loaders/FontLoader'\nimport { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry.js'\nimport {isCylinderDisplayModeEqual, RTL_LANGUAGES} from '../../functions';\n\nexport class CylinderBase {\n static #group = new Group();\n static target = null;\n static #active = config.features.cylinderBase.active;\n static #ready = false;\n static #correctionY = config.features.cylinderBase.correctionPosY || 0;\n static #seaAngle = config.features.cylinderBase.sea?.angel || 0;\n static #box = new Box3();\n static center = new Vector3();\n static #size = new Vector3();\n static #arrows = [];\n static #grid = null;\n static #rotateToCamera = [];\n static #rotation = new Vector3();\n static #divideSize = config.features.cylinderBase.arrows?.divideSize;\n static #NSDivider = config.features.cylinderBase.arrows?.NSDivideSize;\n static #EWDivider = config.features.cylinderBase.arrows?.EWDivideSize;\n #arrowScale = config.features.cylinderBase.arrows.scale || 1;\n #textDistance = config.features.cylinderBase.texts.distance || 15;\n #textSize = config.features.cylinderBase.texts.size || 6;\n #colorMode = config.resources.background.cylinderBg === 'sky' ? 'dark': 'light';\n #seaArrow = config.features.cylinderBase.sea || false;\n #colors = config.features.cylinderBase.colors || {};\n\n constructor () {\n if (!CylinderBase.#active || projectMode.LiteMode.isActive() && (projectMode.LiteMode.modeIs('picture') || projectMode.LiteMode.modeIs('empty')) || config.features.privateHouseMode || isCylinderDisplayModeEqual('show all')) {\n CylinderBase.#active = false;\n return;\n }\n\n const fbxLoader = new FBXLoader();\n const textureLoader = new TextureLoader();\n const fontLoader = new FontLoader();\n const PATH = 'assets/model/cylinder';\n\n let colors;\n\n switch (this.#colorMode) {\n case 'dark':\n colors = {\n grid: this.#colors.grid ||'#7f7f7f',\n arrows: this.#colors.arrows || '#2a2b2e',\n northArrow: this.#colors.northArrow || '#ff0000',\n text: this.#colors.text || '#000000',\n sea: this.#colors.sea || '#0e52e6'\n };\n break;\n case 'light':\n colors = {\n grid: this.#colors.grid || '#ffffff',\n arrows: this.#colors.arrows || '#ffffff',\n northArrow: this.#colors.northArrow || '#ff0000',\n text: this.#colors.text || '#ffffff',\n sea: this.#colors.sea || '#0e52e6'\n };\n break;\n }\n\n const grid = fbxLoader.loadAsync(PATH + '/Grid.fbx');\n const arrow = fbxLoader.loadAsync(PATH + '/Arrow.fbx');\n const texture = textureLoader.loadAsync(PATH + '/alpha_grid.jpg');\n const font = fontLoader.loadAsync('fonts/assistant/Assistant_Regular.json');\n const arrowBackground = this.#createArrowBackground();\n\n Promise.all([grid,arrow,texture,font]).then( async ( [ grid,arrow,texture,font ] ) => {\n\n const currentLang = getCurrentLang();\n let rusFont, arFont;\n\n if (currentLang === 'ar')\n this.#textSize *= 1.5;\n\n if (config.languages.includes('ru')){\n rusFont = await fontLoader.loadAsync('fonts/openSans/Open_Sans_Regular.json')\n }\n\n if (config.languages.includes('ar')) {\n arFont = await fontLoader.loadAsync('fonts/Amiri_Regular.json')\n }\n\n // Grid\n CylinderBase.#grid = grid.children[0];\n CylinderBase.#grid.layers.set(1);\n CylinderBase.#grid.material = new MeshBasicMaterial({\n color: colors.grid,\n transparent: true,\n opacity: 0,\n alphaMap: texture\n });\n CylinderBase.#group.add( CylinderBase.#grid);\n CylinderBase.#grid.visible = false;\n\n // Arrows\n const arrowMesh = arrow.children[0];\n arrowMesh.scale.set(this.#arrowScale,this.#arrowScale,this.#arrowScale);\n arrowMesh.visible = false;\n arrowMesh.position.y = 0.1;\n\n const arrows = {\n North: [-Math.PI / 2, 0, -Math.PI / 2],\n South: [-Math.PI / 2, 0, Math.PI / 2],\n West: [-Math.PI / 2, 0, 0],\n East: [-Math.PI / 2, 0, -Math.PI]\n };\n\n const textRotations = {\n North: Math.PI,\n South: 0,\n West: Math.PI / 2,\n East: -Math.PI / 2\n };\n\n if (this.#seaArrow) {\n arrows.Sea = [-Math.PI / 2, 0, 0];\n textRotations.Sea = 0;\n }\n\n\n Object.entries(arrows).forEach(([direction,rotation]) => {\n const directionArrow = arrowMesh.clone();\n directionArrow.layers.set(1);\n directionArrow.material = new MeshBasicMaterial();\n\n switch (direction) {\n case 'North':\n directionArrow.material.color.setStyle(colors.northArrow,LinearSRGBColorSpace);\n break;\n case 'Sea':\n directionArrow.material.color.setStyle(colors.sea,LinearSRGBColorSpace);\n break;\n default:\n directionArrow.material.color.setStyle(colors.arrows,LinearSRGBColorSpace);\n break;\n }\n\n directionArrow.name = direction;\n directionArrow.rotation.set(rotation[0],rotation[1],rotation[2]);\n\n CylinderBase.#arrows.push(directionArrow);\n\n let dataFromDictionary = config.dictionary[direction];\n const exceptionName = direction + 'Grid';\n\n if (config.dictionary.hasOwnProperty(exceptionName)){\n dataFromDictionary = config.dictionary[exceptionName];\n }\n\n config.languages.forEach(lang => {\n\n let chosenFont = font;\n\n if (lang === 'ru')\n chosenFont = rusFont;\n if (lang === 'ar')\n chosenFont = arFont;\n\n const fontParams = {\n font: chosenFont,\n size: this.#textSize,\n depth: 0.2,\n curveSegments: 6,\n bevelEnabled: true,\n bevelThickness: 0.03,\n bevelSize: 0.02\n };\n\n let textFromDictionary = dataFromDictionary[lang];\n\n if (RTL_LANGUAGES.includes(lang)){\n textFromDictionary = dataFromDictionary[lang].split('').reverse().join('');\n }\n\n const geometry = new TextGeometry(textFromDictionary,fontParams);\n geometry.center();\n const material = new MeshBasicMaterial({\n side: DoubleSide\n });\n\n switch (direction) {\n case 'North':\n material.color.setStyle(colors.northArrow,LinearSRGBColorSpace);\n break;\n case 'Sea':\n material.color.setStyle(colors.sea,LinearSRGBColorSpace);\n break;\n default:\n material.color.setStyle(colors.arrows,LinearSRGBColorSpace);\n break;\n }\n\n const text = new Mesh(geometry,material);\n text.layers.set(1);\n text.name = direction + `_${lang}`;\n text.rotation.set(Math.PI / 2, Math.PI, 0);\n text.position.set(0, this.#textDistance, 0);\n text.visible = false;\n text.userData.cameraAngle = textRotations[direction];\n\n if (lang === currentLang){\n CylinderBase.#rotateToCamera.push(text);\n }\n\n directionArrow.add(text);\n });\n\n const background = arrowBackground.clone();\n background.layers.set(1);\n background.name = directionArrow.name;\n directionArrow.add(background);\n\n background.userData.type = 'arrow';\n directionArrow.userData.type = 'arrow';\n\n settingsData.additionalIntersectionObjects.push(background);\n // settingsData.additionalIntersectionObjects.push(directionArrow);\n\n CylinderBase.#group.add(directionArrow);\n });\n\n CylinderBase.#ready = true;\n\n });\n\n CylinderBase.#group.name = 'Cylinder Grids';\n CylinderBase.#rotation.y = config.threejs.compass.correction + Math.PI / 2;\n CylinderBase.#group.rotation.setFromVector3(CylinderBase.#rotation);\n\n threeJsVariables.scene.add(CylinderBase.#group);\n threeJsVariables.renderList.reorder();\n\n }\n\n #createArrowBackground() {\n const backgroundMaterial = new MeshBasicMaterial({\n transparent: true,\n opacity: 0,\n depthTest: false,\n depthWrite: false\n });\n const backgroundGeometry = new CircleGeometry(25);\n const backgroundMesh = new Mesh(backgroundGeometry, backgroundMaterial);\n backgroundMesh.scale.set(0.75,1,1);\n backgroundMesh.position.set(0, 10, -0.5);\n return backgroundMesh;\n }\n\n static activateVantageMode(vec3) {\n CylinderBase.#grid.visible = false;\n const arrowVector = new Vector3();\n\n CylinderBase.#arrows.forEach(arrow => {\n // arrow.traverse(el => {\n // el.material.transparent = true;\n // el.material.depthTest = false;\n // });\n\n arrow.scale.addScalar(0.25);\n arrowVector.copy(arrow.position).setLength(arrow.position.length() * 4);\n arrowVector.y = arrow.position.y;\n gsap.to(arrow.position,{\n x: arrowVector.x,\n y: arrowVector.y,\n z: arrowVector.z,\n duration: 1\n });\n });\n\n CylinderBase.#group.position.setY(vec3.y - 50);\n }\n\n static deactivateVantageMode() {\n CylinderBase.#arrows.forEach(arrow => {\n arrow.scale.subScalar(0.25);\n });\n }\n\n static show(building) {\n if (!CylinderBase.#active) return;\n\n if (!CylinderBase.#ready) {\n const interval = setInterval(() => {\n if (CylinderBase.#ready){\n clearInterval(interval);\n CylinderBase.show(building);\n }\n },100);\n\n return;\n }\n\n let buildingOnScene;\n\n if (projectMode.LiteMode.isActive() && projectMode.LiteMode.modeIs('schematic')){\n buildingOnScene = building.selectionsGroup;\n } else {\n buildingOnScene = threeJsVariables.scene.getObjectByName(building.name);\n }\n\n CylinderBase.#box.setFromObject(buildingOnScene).getSize(CylinderBase.#size);\n if (config.features.cylinderBase.geometricCenter) {\n CylinderBase.#box.getCenter(CylinderBase.center);\n } else {\n buildingOnScene.getWorldPosition(CylinderBase.center);\n }\n\n CylinderBase.#group.position.set(CylinderBase.center.x,buildingOnScene.position.y + CylinderBase.#correctionY, CylinderBase.center.z);\n\n const NSAxisSizeDivider = CylinderBase.#NSDivider || CylinderBase.#divideSize || 2;\n const EWAxisSizeDivider = CylinderBase.#EWDivider || CylinderBase.#divideSize || 2;\n const formulae = Math.sqrt(CylinderBase.#size.x * CylinderBase.#size.x + CylinderBase.#size.z * CylinderBase.#size.z);\n const NSAxisSize = formulae / NSAxisSizeDivider;\n const EWAxisSize = formulae / EWAxisSizeDivider;\n const seaSize = formulae / CylinderBase.#divideSize || 2;\n\n CylinderBase.#arrows.forEach(arrow => {\n let positionX, positionZ;\n\n switch (arrow.name) {\n case 'North':\n positionX = 1;\n positionZ = 0;\n arrow.position.set(positionX * NSAxisSize,arrow.position.y,positionZ * NSAxisSize);\n break;\n case 'South':\n positionX = -1;\n positionZ = 0;\n arrow.position.set(positionX * NSAxisSize,arrow.position.y,positionZ * NSAxisSize);\n break;\n case 'East':\n positionX = 0;\n positionZ = 1;\n arrow.position.set(positionX * EWAxisSize,arrow.position.y,positionZ * EWAxisSize);\n break;\n case 'West':\n positionX = 0;\n positionZ = -1;\n arrow.position.set(positionX * EWAxisSize,arrow.position.y,positionZ * EWAxisSize);\n break;\n case 'Sea':\n positionX = 2;\n positionZ = 0;\n const seaVector = new Vector3(positionX * seaSize, arrow.position.y,positionZ * seaSize);\n seaVector.applyAxisAngle(new Vector3(0,1,0).normalize(),CylinderBase.#seaAngle);\n const angle = seaVector.angleTo(new Vector3(0,arrow.position.y,0));\n arrow.userData.angle = CylinderBase.#seaAngle;\n arrow.position.copy(seaVector);\n arrow.rotation.z = CylinderBase.#seaAngle - angle;\n arrow.children.forEach(text => {\n text.userData.cameraAngle = Math.PI - CylinderBase.#seaAngle;\n });\n break;\n }\n\n });\n\n CylinderBase.#showAnimation();\n }\n\n static hide() {\n if (!CylinderBase.#active || !CylinderBase.#ready) return;\n //Arrows\n CylinderBase.#arrows.forEach(arrow => {\n arrow.traverse(el => el.visible = false);\n });\n\n //Grid\n CylinderBase.#grid.material.opacity = 0;\n CylinderBase.#grid.visible = false;\n }\n\n static visibility(state) {\n CylinderBase.#group.visible = state;\n }\n\n static #showAnimation() {\n const currentLang = getCurrentLang();\n let needsPlay = false;\n\n let gridMixer = GSAPAnimationMixer.getMixer('cylinderEnter');\n\n if (!gridMixer) {\n gridMixer = GSAPAnimationMixer.getMixer('switchingBuilding');\n }\n\n if (!gridMixer) {\n gridMixer = GSAPAnimationMixer.registerNewMixer('cylinderBase');\n needsPlay = true;\n }\n\n // gridMixer.addCallback('onStart',() => {\n // CylinderBase.#grid.material.opacity = 0;\n // CylinderBase.#grid.visible = true;\n // });\n\n // Grid\n const gridAnimation = gsap.to(CylinderBase.#grid.material,{\n opacity: 1,\n duration: GSAPAnimationMixer.duration,\n ease: GSAPAnimationMixer.ease,\n onStart: () => CylinderBase.#grid.visible = true\n });\n\n gridMixer.addAnimation(gridAnimation);\n\n //Arrows\n CylinderBase.#arrows.forEach(arrow => {\n const arrowAnimation = gsap.fromTo(arrow.position,{\n x: 0,\n z: 0\n },{\n x: arrow.position.x,\n z: arrow.position.z,\n duration: GSAPAnimationMixer.duration,\n ease: GSAPAnimationMixer.ease,\n onStart: () => {\n arrow.visible = true;\n },\n onComplete: () => {\n const arrowText = arrow.children.find(text => text.name === arrow.name + `_${currentLang}`);\n\n gsap.fromTo(arrowText.material,{\n opacity: 0\n },{\n opacity: 1,\n duration: GSAPAnimationMixer.duration * 0.5,\n ease: GSAPAnimationMixer.ease,\n onStart: () => {\n arrowText.material.transparent = true;\n arrowText.visible = true;\n CylinderBase.rotateTexts();\n },\n onComplete: () => {\n arrowText.material.transparent = false;\n }\n })\n }\n });\n\n const arrowOpacity = gsap.fromTo(arrow.material,{\n opacity: 0\n },{\n opacity: 1,\n onStart: () => arrow.material.transparent = true,\n onComplete: () => arrow.material.transparent = false,\n duration: GSAPAnimationMixer.duration * 2,\n ease: GSAPAnimationMixer.ease,\n });\n\n // gridMixer.addAnimation(arrowOpacity);\n gridMixer.addAnimation(arrowAnimation);\n });\n\n // GSAPAnimationMixer.play('cylinderGrid');\n needsPlay && gridMixer.play();\n }\n \n static updateRotation() {\n CylinderBase.#rotation.y = config.threejs.compass.correction + Math.PI / 2;\n CylinderBase.#group.rotation.setFromVector3(CylinderBase.#rotation);\n }\n\n static changeLanguage() {\n if (!CylinderBase.#active || !CylinderBase.#ready) return;\n\n const currentLang = getCurrentLang();\n const newRotationTexts = [];\n\n CylinderBase.#arrows.forEach(arrow => {\n const visibleText = arrow.children.find(text => text.visible);\n const targetText = arrow.children.find(text => text.name === arrow.name + `_${currentLang}`);\n\n newRotationTexts.push(targetText);\n\n if (visibleText && targetText) {\n visibleText.visible = false;\n targetText.visible = true;\n }\n\n });\n\n CylinderBase.#rotateToCamera = newRotationTexts;\n CylinderBase.rotateTexts();\n }\n\n static rotateTexts() {\n if (!CylinderBase.#active || !CylinderBase.#ready) return;\n\n switch (settingsData.activeViewMode) {\n case ViewMode.Cylinder:\n CylinderBase.#rotateToCamera.forEach(text => {\n text.rotation.set(\n Math.PI / 2,\n rotateToCamera(text.userData.cameraAngle - CylinderBase.#rotation.y + Math.PI),\n 0);\n });\n\n break;\n case ViewMode.FloorPlan:\n CylinderBase.#rotateToCamera.forEach(text => {\n text.rotation.set(\n 0,\n 0,\n rotateToCamera(text.userData.cameraAngle - CylinderBase.#rotation.y + Math.PI)\n );\n });\n\n break;\n\n }\n }\n\n}\n","'use strict';\n\nimport { threeJsVariables } from '../../settings';\n\nexport class FPS {\n constructor () {\n this.beginTime = ( performance || Date ).now();\n this.prevTime = this.beginTime;\n this.frames = 0;\n this.fps = 0;\n this.time = 0;\n this.tasks = [];\n this.finishedTasks = [];\n }\n\n end() {\n this.frames ++;\n\n this.time = ( performance || Date ).now();\n\n if ( this.time >= this.prevTime + 1000 ) {\n\n this.fps = ( this.frames * 1000 ) / ( this.time - this.prevTime);\n this.runTasks();\n\n this.prevTime = this.time;\n this.frames = 0;\n }\n\n return this.time;\n }\n\n update() {\n this.beginTime = this.end();\n }\n\n addTask(task) {\n this.tasks.push(task);\n }\n\n runTasks() {\n if (this.tasks.length) {\n this.tasks.forEach(task => {\n if (!task.finished) {\n task.progress(this.framesPerSecond);\n } else {\n this.finishedTasks.push(task);\n }\n });\n\n if (this.finishedTasks.length) {\n this.tasks = this.tasks.filter(task => !this.finishedTasks.includes(task));\n this.finishedTasks.forEach(task => task.dispose());\n this.finishedTasks = [];\n }\n }\n }\n\n get framesPerSecond() {\n return Math.round(this.fps);\n }\n\n}\n\nexport class OptimizationTask {\n constructor (task = (fps) => {},step = 5,maxCount = 5) {\n this.completed = false;\n this.task = task;\n this.frame = 0;\n this.step = step;\n this.maxCount = maxCount;\n this.currentCount = 0;\n\n threeJsVariables.fps.addTask(this);\n }\n\n progress(fps) {\n if (!this.finished) {\n this.frame++;\n\n if (this.frame === this.step && this.currentCount < this.maxCount) {\n this.task(fps);\n this.frame = 0;\n this.currentCount++;\n }\n\n if (this.currentCount >= this.maxCount) {\n this.finished = true;\n }\n }\n }\n\n dispose() {\n this.completed = null;\n this.task = null;\n this.frame = null;\n this.step = null;\n this.maxCount = null;\n this.currentCount = null;\n }\n\n set finished(value) {\n this.completed = value;\n }\n\n get finished() {\n return this.completed;\n }\n\n}","'use strict';\n\nexport class Tasks {\n\tconstructor () {\n\t\tthis.tasks = [];\n\t}\n\t\n\taddTask(task) {\n\t\tthis.tasks.push(task);\n\t}\n\t\n\trun() {\n\t\tif (this.tasks.length) {\n\t\t\tconst started = this.tasks.every(task => task.isStarted());\n\t\t\tif (started) {\n\t\t\t\tthis.tasks = [];\n\t\t\t} else {\n\t\t\t\tthis.tasks.forEach(task => task.start());\n\t\t\t\tsetTimeout(this.run.bind(this),300);\n\t\t\t}\n\t\t}\n\t}\n}\n\n\nexport class UpdateTask {\n\tconstructor (func) {\n\t\tthis.started = false;\n\t\tthis.onStart = func;\n\t}\n\t\n\tstart() {\n\t\tif (this.onStart) {\n\t\t\tthis.onStart();\n\t\t}\n\t\tthis.started = true;\n\t}\n\t\n\tisStarted() {\n\t\treturn this.started;\n\t}\n}\n\n","'use strict';\n\nimport {isDev, threeJsVariables} from \"../../settings\";\nimport * as dat from \"dat.gui\";\nimport { ColorCorrection } from '../threejs/colorCorrection';\n\n/**\n * GUI - helper for visual options for object on Scene\n * Works only in development mode\n */\n\nexport const addGui = () => {\n if (!isDev) return;\n\n console.log('GUI Development mode activated');\n\n threeJsVariables.gui = new dat.GUI();\n threeJsVariables.gui.close();\n\n new ColorCorrection().debug();\n\n // threeJsVariables.gui = gui;\n}","'use strict';\n\nimport {kebabToCamelCase} from \"../../functions\";\n\nexport class BaseElement {\n #baseElement = document.createElement('div');\n\n constructor(tag) {\n if (tag) {\n if (typeof tag === 'string') {\n this.#baseElement = document.createElement(tag);\n } else if (typeof tag === 'object') {\n this.#baseElement = tag;\n }\n }\n }\n\n addClass(...value) {\n if (!this.#baseElement)\n return;\n\n value = value.filter(\n className =>\n className !== false &&\n className !== undefined &&\n className !== null\n );\n\n this.#baseElement.classList.add(...value);\n\n return this;\n }\n\n removeClass(...value) {\n if (!this.#baseElement)\n return;\n\n this.#baseElement.classList.remove(...value);\n\n return this;\n }\n\n toggleClass(className) {\n if (!this.#baseElement)\n return;\n\n this.#baseElement.classList.toggle(className);\n\n return this;\n }\n\n addAttribute(name, value) {\n if (!this.#baseElement)\n return;\n\n this.#baseElement.setAttribute(name, value);\n\n return this;\n }\n\n getAttribute(name) {\n if (!this.#baseElement)\n return;\n\n return this.#baseElement.getAttribute(name);\n }\n\n setAttributes(attributes = {}) {\n if (!this.#baseElement)\n return;\n\n Object.entries(attributes).forEach(([name, value]) => {\n this.#baseElement.setAttribute(name, value);\n });\n\n return this;\n }\n\n deleteAttribute(name) {\n if (!this.#baseElement)\n return;\n\n this.#baseElement.removeAttribute(name);\n\n return this;\n }\n\n addStyle(style, value) {\n if (!this.#baseElement)\n return;\n\n this.#baseElement.style[kebabToCamelCase(style)] = value;\n\n return this;\n }\n\n removeStyle(style) {\n if (!this.#baseElement)\n return;\n\n this.#baseElement.style.removeProperty(style);\n\n return this;\n }\n\n event(eventType, listenerFunction, options = {}) {\n if (!this.#baseElement)\n return;\n\n this.#baseElement.addEventListener(eventType, listenerFunction, options);\n\n return this;\n }\n\n removeEvent(eventType, listenerFunction) {\n if (!this.#baseElement)\n return;\n\n this.#baseElement.removeEventListener(eventType, listenerFunction);\n\n return this;\n }\n\n innerHtml(value) {\n if (!this.#baseElement)\n return;\n\n this.#baseElement.innerHTML = value;\n\n return this;\n }\n\n addInnerHtml(value) {\n if (!this.#baseElement)\n return;\n\n this.#baseElement.innerHTML += value;\n\n return this;\n }\n\n text(content = '') {\n if (!this.#baseElement)\n return;\n\n this.#baseElement.textContent = content;\n\n return this;\n }\n\n appendTo(parentElement, position = null) {\n if (!this.#baseElement)\n return;\n\n if (parentElement instanceof BaseElement)\n parentElement = parentElement.DOMElement;\n\n if (!position && parentElement) {\n parentElement.append(this.#baseElement);\n } else if (position && parentElement) {\n parentElement.insertAdjacentElement(position, this.#baseElement);\n }\n\n return this;\n }\n\n appendElement(domElement) {\n if (!this.#baseElement)\n return;\n\n if (domElement instanceof BaseElement)\n domElement = domElement.DOMElement;\n\n this.#baseElement.append(domElement);\n\n return this;\n }\n\n prependElement(domElement) {\n if (!this.#baseElement)\n return;\n\n this.#baseElement.prepend(domElement);\n\n return this;\n }\n\n remove() {\n if (!this.#baseElement)\n return;\n\n this.#baseElement.remove();\n this.#baseElement = null;\n }\n\n get DOMElement() {\n if (!this.#baseElement)\n return;\n\n return this.#baseElement;\n }\n}\n","'use strict';\n\nimport {userPrevent} from \"../../functions\";\n\nexport class Drag {\n constructor(element, parameters = {}) {\n this.element = typeof (element) === 'string' ? document.querySelector(element) : element;\n this.active = false;\n this.currentX = null;\n this.currentY = null;\n this.initialX = null;\n this.initialY = null;\n this.xOffset = 0;\n this.yOffset = 0;\n this.onDragStart = (e) => {};\n this.onDragEnd = (e) => {};\n this.dragMoveHandler = (e) => this.dragMove(e);\n this.dragUpHandler = (e) => this.dragUp(e);\n this.touchSupport = parameters.hasOwnProperty('touchSupport') ? parameters['touchSupport'] : false;\n this.updateElementPositionAfterDragEnd = parameters.hasOwnProperty('updateElementPositionAfterDragEnd') ? parameters['updateElementPositionAfterDragEnd'] : false;\n\n this.element.style.cursor = 'grab';\n this.element.style.touchAction = 'none';\n\n this.element.addEventListener('mousedown', this.dragStart.bind(this));\n\n if (this.touchSupport) {\n this.element.addEventListener('touchstart', this.dragStart.bind(this));\n }\n }\n\n dragStart(evt) {\n evt.preventDefault();\n if (userPrevent()) return;\n for (let child of this.element.children) {\n child.style.cursor = 'grabbing';\n }\n this.element.style.cursor = 'grabbing';\n if (evt.type === 'touchstart' && this.touchSupport) {\n this.initialX = evt.touches[0].clientX - this.xOffset;\n this.initialY = evt.touches[0].clientY - this.yOffset;\n this.clickX = evt.touches[0].clientX;\n this.clickY = evt.touches[0].clientY;\n this.active = true;\n\n document.addEventListener('touchmove',this.dragMoveHandler);\n this.element.addEventListener('touchend',this.dragUpHandler);\n } else {\n this.initialX = evt.clientX - this.xOffset;\n this.initialY = evt.clientY - this.yOffset;\n this.clickX = evt.clientX;\n this.clickY = evt.clientY;\n this.active = true;\n\n document.addEventListener('mousemove',this.dragMoveHandler);\n this.element.addEventListener('mouseup',this.dragUpHandler);\n }\n this.onDragStart(evt);\n }\n\n dragMove(evt) {\n evt.preventDefault();\n if (userPrevent()) return;\n if (this.active) {\n if (evt.type === 'touchmove' && this.touchSupport) {\n this.currentX = evt.touches[0].clientX - this.initialX;\n this.currentY = evt.touches[0].clientY - this.initialY;\n } else {\n this.currentX = evt.clientX - this.initialX;\n this.currentY = evt.clientY - this.initialY;\n }\n\n this.xOffset = this.currentX;\n this.yOffset = this.currentY;\n\n if (this.element.style.animation) {\n this.element.style.animation = '';\n }\n\n this.element.style.transform = \"translate3d(\" + this.currentX + \"px, \" + this.currentY + \"px, 0)\";\n\n for (let child of this.element.children) {\n child.style.userSelect = 'none';\n child.style.pointerEvents = 'none';\n }\n }\n }\n\n dragUp(evt) {\n this.element.style.cursor = 'grab';\n this.initialX = this.currentX;\n this.initialY = this.currentY;\n this.active = false;\n\n for (let child of this.element.children) {\n child.style.userSelect = '';\n child.style.pointerEvents = '';\n child.style.cursor = '';\n }\n\n if (this.updateElementPositionAfterDragEnd) {\n this.element.style.left = parseFloat(this.element.style.left) + this.xOffset + 'px';\n this.element.style.top = parseFloat(this.element.style.top) + this.yOffset + 'px';\n this.element.style.transform = '';\n this.xOffset = 0;\n this.yOffset = 0;\n }\n \n this.onDragEnd(evt);\n this.removeEventListeners();\n }\n\n removeEventListeners() {\n document.removeEventListener('mousemove',this.dragMoveHandler);\n document.removeEventListener('touchmove',this.dragMoveHandler);\n this.element.removeEventListener('mouseup',this.dragUpHandler);\n this.element.removeEventListener('touchend',this.dragUpHandler);\n }\n\n}\n","'use strict';\n\nimport { BaseElement } from './BaseElement';\nimport { changeLangToCurrent, getCurrentLangDirection } from '../components/langSwitcher/langSwitcher';\nimport { log } from 'three/examples/jsm/nodes/math/MathNode';\nimport { isDesktop } from '../../settings';\n\nexport class DropDown {\n\tconstructor (parent,className = null,params = {}) {\n\t\tthis.parent = parent;\n\t\tthis.className = className;\n\t\tthis.params = params;\n\t\tthis.globalHandler = null;\n\t\tthis.overflow = false;\n\t\tthis.overflowStopSelector = null;\n\t\tthis.overflowParent = null;\n\t\tthis.placeholder = null;\n\t\tthis.arrowIcon = 'icon-down2';\n\t\tthis.position = 'dropdown--bottom';\n\t\tthis.rotateArrow = true;\n\t\tthis.elements = [];\n\t\tthis.handler = this.defaultHandler.bind(this);\n\t}\n\n\tcreate() {\n\t\tthis.dropDown = new BaseElement()\n\t\t\t.addClass('dropdown',this.#addAdditionalClassName(),this.position, this.rotateArrow ? '--rotate-arrow' : null)\n\t\t\t.event('click',this.handler)\n\t\t\t.appendTo(this.parent)\n\t\t\t.DOMElement;\n\n\t\tconst titleBlock = new BaseElement()\n\t\t\t.addClass('dropdown__title-block',this.#addAdditionalClassName('__title-block'))\n\t\t\t.appendTo(this.dropDown)\n\t\t\t.DOMElement;\n\t\t\n\t\tif (this.params.placeholder) {\n\t\t\tthis.placeholder = new BaseElement('span')\n\t\t\t\t.addClass('dropdown__title','dropdown__placeholder',this.#addAdditionalClassName('__title'))\n\t\t\t\t.appendTo(titleBlock);\n\t\t}\n\n\t\tif (this.params.title) {\n\t\t\tnew BaseElement('span')\n\t\t\t\t.addClass('dropdown__title','language-string',this.#addAdditionalClassName('__title'))\n\t\t\t\t.addAttribute('data-dictionary',this.params.title)\n\t\t\t\t.innerHtml(changeLangToCurrent(this.params.title))\n\t\t\t\t.appendTo(titleBlock)\n\t\t\t\t.DOMElement;\n\t\t}\n\n\t\tif (this.params.subTitle) {\n\t\t\tnew BaseElement('span')\n\t\t\t\t.addClass('dropdown__sub-title','language-string',this.#addAdditionalClassName('__sub-title'))\n\t\t\t\t.addAttribute('data-dictionary',this.params.subTitle)\n\t\t\t\t.innerHtml(changeLangToCurrent(this.params.subTitle))\n\t\t\t\t.appendTo(titleBlock)\n\t\t\t\t.DOMElement;\n\t\t}\n\n\t\tthis.arrowBlock = new BaseElement()\n\t\t\t.addClass('dropdown__arrow-block',this.#addAdditionalClassName('__arrow-block'),'hidden')\n\t\t\t.appendTo(this.dropDown)\n\t\t\t.DOMElement;\n\n\t\tnew BaseElement('span')\n\t\t\t.addClass('dropdown__separator',this.#addAdditionalClassName('__separator'))\n\t\t\t.appendTo(this.arrowBlock);\n\n\t\tthis.arrow = new BaseElement()\n\t\t\t.addClass('dropdown__arrow',this.#addAdditionalClassName('__arrow'),this.arrowIcon)\n\t\t\t.appendTo(this.arrowBlock);\n\n\t\tthis.contentWrapper = new BaseElement()\n\t\t\t.addClass('dropdown__content-wrapper',this.#addAdditionalClassName('__content-wrapper'),this.overflow ? '--overflow' : null)\n\t\t\t// .appendTo(this.overflow ? document.body : this.dropDown)\n\t\t\t.DOMElement;\n\t\t\n\t\tif (!this.overflow) {\n\t\t\tthis.dropDown.appendChild(this.contentWrapper);\n\t\t} else {\n\t\t\tthis.contentWrapper.addEventListener('transitionend',(e) => {\n\t\t\t\tif (!this.contentWrapper.classList.contains('--show-dropdown-fixed')) {\n\t\t\t\t\tthis.contentWrapper.remove();\n\t\t\t\t\tthis.overflowParent = null;\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tthis.content = new BaseElement()\n\t\t\t.addClass('dropdown__content',this.#addAdditionalClassName('__content'))\n\t\t\t.appendTo(this.contentWrapper);\n\n\t\tthis.curtain = new BaseElement()\n\t\t\t.addClass('dropdown__curtain')\n\t\t\t.appendTo(this.content.DOMElement)\n\t\t\t.DOMElement;\n\n\t\tnew BaseElement()\n\t\t\t.addClass('dropdown__curtain-line')\n\t\t\t.appendTo(this.curtain);\n\n\t\treturn this;\n\t}\n\t\n\tchangePlaceholder(value) {\n\t\tif (this.placeholder) {\n\t\t\tthis.placeholder.innerHtml(value);\n\t\t}\n\t}\n\t\n\tfindParent() {\n\t\tif (this.overflow && !this.overflowParent && this.overflowStopSelector) {\n\t\t\tconst parents = [];\n\t\t\tlet currentElement = this.parent;\n\t\t\t\n\t\t\twhile (currentElement && !currentElement.matches(this.overflowStopSelector)) {\n\t\t\t\tcurrentElement = currentElement.parentElement;\n\t\t\t\tif (currentElement) {\n\t\t\t\t\tparents.push(currentElement);\n\t\t\t\t}\n\t\t\t}\n\t\t\tparents.pop();\n\t\t\tthis.overflowParent = parents[parents.length - 1];\n\t\t\tthis.overflowParent.appendChild(this.contentWrapper);\n\t\t}\n\t}\n\n\tsetOpenPosition(position) {\n\t\tswitch (position) {\n\t\t\tcase 'top':\n\t\t\t\t// this.arrowIcon = 'icon-up2';\n\t\t\t\tthis.position = 'dropdown--top';\n\t\t\t\tbreak;\n\t\t\tcase 'bottom':\n\t\t\t\t// this.arrowIcon = 'icon-down2';\n\t\t\t\tthis.position = 'dropdown--bottom';\n\t\t\t\tbreak;\n\t\t\tcase 'auto':\n\t\t\t\tif (this.overflow) {\n\t\t\t\t\tconst dropDownBounding = this.dropDown.getBoundingClientRect();\n\t\t\t\t\tconst contentBounding = this.content.DOMElement.getBoundingClientRect();\n\t\t\t\t\tconst parentBounding = this.overflowParent.getBoundingClientRect();\n\t\t\t\t\t\n\t\t\t\t\tlet x = dropDownBounding.x - parentBounding.x;\n\t\t\t\t\tlet y = dropDownBounding.y - parentBounding.y;\n\t\t\t\t\tlet moveX = false;\n\t\t\t\t\t\n\t\t\t\t\tif (y + contentBounding.height > window.innerHeight) {\n\t\t\t\t\t\ty -= contentBounding.height;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (x + contentBounding.width + parentBounding.x > window.innerWidth) {\n\t\t\t\t\t\tmoveX = true;\n\t\t\t\t\t\tx -= contentBounding.width;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (!moveX && getCurrentLangDirection() === 'rtl' && x - contentBounding.width > 0) {\n\t\t\t\t\t\tx -= contentBounding.width;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (isDesktop && this.overflowParent && this.overflowParent.classList.contains('unit-card')) {\n\t\t\t\t\t\tif (getCurrentLangDirection() === 'rtl') {\n\t\t\t\t\t\t\tx = dropDownBounding.x - parentBounding.x - contentBounding.width + 15;\n\t\t\t\t\t\t\ty = dropDownBounding.y - parentBounding.y - 30;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tx = dropDownBounding.x - parentBounding.x - contentBounding.width - 30;\n\t\t\t\t\t\t\ty = dropDownBounding.y - parentBounding.y - 30;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.setOverflowPosition(x,y);\n\t\t\t\t} else {\n\t\t\t\t\tthis.dropDown.classList.remove(this.position);\n\t\t\t\t\tconst contentBounding = this.content.DOMElement.getBoundingClientRect();\n\t\t\t\t\tconst size = contentBounding.y + contentBounding.height + contentBounding.height / 2;\n\n\t\t\t\t\tif (size > window.innerHeight) {\n\t\t\t\t\t\tthis.position = 'dropdown--top';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.position = 'dropdown--bottom';\n\t\t\t\t\t}\n\t\t\t\t\tthis.dropDown.classList.add(this.position);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tsetOverflowPosition(x,y) {\n\t\tif (this.overflow) {\n\t\t\tthis.contentWrapper.style.left = x + 'px';\n\t\t\tthis.contentWrapper.style.top = y + 'px';\n\t\t}\n\t}\n\n\tneedsArrowRotate(state) {\n\t\tthis.rotateArrow = state;\n\n\t\treturn this;\n\t}\n\n\t#addAdditionalClassName(suffix = '') {\n\t\tif (this.className) {\n\t\t\treturn this.className + suffix;\n\t\t}\n\t\treturn null;\n\t}\n\n\t#globalCloseHandler(e) {\n\t\tif (this.overflow) {\n\t\t\tif (this.contentWrapper.classList.contains('--show-dropdown-fixed')) {\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t} else {\n\t\t\tif (\n\t\t\t\t(!e.target.closest('.dropdown') && this.dropDown.classList.contains('--show-dropdown')) ||\n\t\t\t\t(e.target.classList.contains('dropdown__content-wrapper') && this.dropDown.classList.contains('--show-dropdown')))\n\t\t\t{\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t}\n\t}\n\n\thide() {\n\t\tif (this.dropDown) {\n\t\t\tif (this.overflow) {\n\t\t\t\tthis.contentWrapper.classList.remove('--show-dropdown-fixed');\n\t\t\t} else {\n\t\t\t\tthis.dropDown.classList.remove('--show-dropdown');\n\t\t\t}\n\t\t\tif (this.globalHandler) {\n\t\t\t\twindow.removeEventListener('click',this.globalHandler);\n\t\t\t\tthis.globalHandler = null;\n\t\t\t}\n\t\t}\n\t}\n\n\tshow() {\n\t\tif (this.dropDown) {\n\t\t\tif (this.globalHandler) {\n\t\t\t\tthis.hide();\n\t\t\t}\n\n\t\t\tif (this.overflow) {\n\t\t\t\tthis.contentWrapper.classList.add('--show-dropdown-fixed');\n\t\t\t} else {\n\t\t\t\tthis.dropDown.classList.add('--show-dropdown');\n\t\t\t}\n\n\t\t\tthis.globalHandler = this.#globalCloseHandler.bind(this);\n\t\t\twindow.addEventListener('click',this.globalHandler);\n\t\t}\n\t}\n\n\tsetCustomHandler(handlerFunc) {\n\t\tthis.handler = handlerFunc;\n\n\t\treturn this;\n\t}\n\n\tdefaultHandler(e) {\n\t\te.preventDefault();\n\n\t\tif (this.elements.length === 1) {\n\t\t\tthis.elements[0].click();\n\t\t\treturn;\n\t\t}\n\n\t\tif (!e.target.classList.contains('dropdown__content-element')) {\n\t\t\tif (this.overflow) {\n\t\t\t\tthis.contentWrapper.classList.toggle('--show-dropdown-fixed');\n\t\t\t} else {\n\t\t\t\tthis.dropDown.classList.toggle('--show-dropdown');\n\t\t\t}\n\n\t\t\tif (this.globalHandler) {\n\t\t\t\tthis.hide();\n\t\t\t} else {\n\t\t\t\tthis.globalHandler = this.#globalCloseHandler.bind(this);\n\t\t\t\twindow.addEventListener('click',this.globalHandler);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.hide();\n\t\t}\n\t}\n\n\tadd(element) {\n\t\tif (this.content && element) {\n\t\t\telement.classList.add('dropdown__content-element',this.#addAdditionalClassName('__content-element'));\n\t\t\tthis.content.appendElement(element);\n\t\t\tthis.elements.push(element);\n\t\t}\n\n\t\tif (this.elements.length > 1) {\n\t\t\tthis.arrowBlock.classList.remove('hidden');\n\t\t}\n\n\t\treturn this;\n\t}\n\n}\n","'use strict';\n\nexport class EventBus {\n\tstatic #listeners = {};\n\n\tconstructor() {}\n\n\tstatic add(event, listener) {\n\t\tif (!this.#listeners[event])\n\t\t\tthis.#listeners[event] = [];\n\n\t\tthis.#listeners[event].push(listener);\n\t}\n\n\tstatic remove(event, listener = null) {\n\t\tif (!this.#listeners[event])\n\t\t\treturn;\n\n\t\tif (listener) {\n\t\t\t// Remove specific listener if provided\n\t\t\tthis.#listeners[event] = this.#listeners[event].filter(l => l !== listener);\n\t\t} else {\n\t\t\t// Remove all listeners for the given event if no listener is provided\n\t\t\tdelete this.#listeners[event];\n\t\t}\n\t}\n\n\tstatic trigger(event, ...args) {\n\t\tif (!this.#listeners[event])\n\t\t\treturn;\n\n\t\tthis.#listeners[event].forEach(listener => listener(...args));\n\t}\n}","'use strict';\n\nimport { BaseElement } from './BaseElement';\n\nimport intlTelInput from 'intl-tel-input';\nimport { UserPosition } from '../components/location/Location';\nimport { Cookie } from '../Cookie/Cookie';\nimport { changeLangToCurrent } from '../components/langSwitcher/langSwitcher';\nimport { PopUp } from './pages/PopUp';\n\nconst DEFAULT_PARAMS = {\n\tclassName: 'default-form-class',\n\tallowedKey: 'allowedText',\n\ttitleKey: 'signInTitle',\n\tsubmitKey: 'singInSubmit',\n\tformName: 'defaultForm',\n\tcountries: ['us','gb','ca','de','fr','il','es'],\n\tinitialCountry: 'us',\n\tlang: null,\n};\n\nexport class Form {\n\t/**\n\t * @param {Object[]} fields\n\t * @param {Object} params\n\t * @param {string} [params.className=default-form-class]\n\t * @param {string} [params.allowedKey=allowedText]\n\t * @param {string} [params.titleKey=signInTitle]\n\t * @param {string} [params.submitKey=singInSubmit]\n\t * @param {string} [params.formName=defaultForm]\n\t * @param {Object[]} [params.countries=[us,gb,ca,de,fr,il,es]]\n\t * @param {string} [params.initialCountry=us]\n\t * @param {string|null} [params.lang=null]\n\t */\n\t\n\tconstructor (fields,params) {\n\t\tthis.params = Object.assign({},DEFAULT_PARAMS,params);\n\t\t\n\t\tconst location = UserPosition.location.short;\n\t\tthis.params.initialCountry = this.params.countries.includes(location) ? location : 'us';\n\t\tthis.fields = fields;\n\t\tthis.parent = null;\n\t\tthis.submitBtn = null;\n\t\tthis.onValidCallback = (formData) => {};\n\t}\n\t\n\tsetOnValidCallback(func) {\n\t\tthis.onValidCallback = func;\n\t}\n\t\n\tsetCallbackToElement(name,event,func) {\n\t\tconst element = this.getField(name);\n\t\tif (element) {\n\t\t\telement.addEventListener(event,func);\n\t\t}\n\t}\n\t\n\tcreate(parent) {\n\t\tif (parent) {\n\t\t\tthis.parent = parent;\n\t\t} else {\n\t\t\tthis.popUp = new PopUp({\n\t\t\t\tid: this.params.formName + '_popup',\n\t\t\t\tneedsCloseBtn: true,\n\t\t\t\tdestroy: true\n\t\t\t});\n\t\t\tthis.popUp.onClose = () => {\n\t\t\t\tthis.popUp.hide();\n\t\t\t};\n\t\t\tthis.parent = this.popUp.content;\n\t\t}\n\t\t\n\t\tthis.container = new BaseElement()\n\t\t\t.addClass('form',this.params.className +'-container')\n\t\t\t.appendTo(this.parent)\n\t\t\t.DOMElement;\n\t\t\n\t\tif (this.params.titleKey) {\n\t\t\tconst header = new BaseElement()\n\t\t\t\t.addClass('form__header',this.params.className + '__header')\n\t\t\t\t.appendTo(this.container)\n\t\t\t\t.DOMElement;\n\t\t\t\n\t\t\tnew BaseElement('h3')\n\t\t\t\t.addClass('form__title',this.params.className + '__title','language-string')\n\t\t\t\t.addAttribute('data-dictionary',this.params.titleKey)\n\t\t\t\t.innerHtml(changeLangToCurrent(this.params.titleKey))\n\t\t\t\t.appendTo(header);\n\t\t}\n\t\t\n\t\tthis.form = new BaseElement('form')\n\t\t\t.addClass('form__form-element',this.params.className + '__form-element')\n\t\t\t.addAttribute('name',this.params.formName)\n\t\t\t.appendTo(this.container)\n\t\t\t.DOMElement;\n\t\t\n\t\tconst userData = Cookie.userData();\n\t\t\n\t\tthis.fields.forEach(field => {\n\t\t\tconst input = new BaseElement('input')\n\t\t\t\t.addClass('form__input',this.params.className + '__input')\n\t\t\t\t.event('input',() => input.removeClass('sign-in__error'))\n\t\t\t\t.addAttribute('type',field.type)\n\t\t\t\t.addAttribute('value',field.value)\n\t\t\t\t.addAttribute('name',field.name)\n\t\t\t\t.appendTo(this.form);\n\t\t\t\n\t\t\tif (userData && userData[field.name]) {\n\t\t\t\tif (field.hasOwnProperty('userData')) {\n\t\t\t\t\tif (field.userData) {\n\t\t\t\t\t\tinput.addAttribute('value',userData[field.name]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tinput.addAttribute('value',userData[field.name]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (field.type === 'tel') {\n\t\t\t\tthis.iti = intlTelInput(input.DOMElement, {\n\t\t\t\t\tcontainerClass: `form__iti`,\n\t\t\t\t\tutilsScript: '/js/libs/IntlTelUtils.js',\n\t\t\t\t\tformatOnDisplay: true,\n\t\t\t\t\tonlyCountries: this.params.countries,\n\t\t\t\t\tinitialCountry: this.params.initialCountry,\n\t\t\t\t\t// customPlaceholder: function() {\n\t\t\t\t\t// \treturn Dictionary.getCurrentText('Enter a phone number');\n\t\t\t\t\t// }\n\t\t\t\t});\n\t\t\t\t\n\t\t\t} else if(field.placeholder) {\n\t\t\t\tinput.addAttribute('placeholder',changeLangToCurrent(field.placeholder));\n\t\t\t}\n\t\t\t\n\t\t\tif (field.pattern) {\n\t\t\t\tinput.addAttribute('pattern',field.pattern);\n\t\t\t}\n\t\t\t\n\t\t\tif (field.required) {\n\t\t\t\tinput.addAttribute('required',true);\n\t\t\t}\n\t\t\t\n\t\t\tif (field.readonly) {\n\t\t\t\tinput.addAttribute('readonly',true);\n\t\t\t}\n\t\t\t\n\t\t\tif (field.hasOwnProperty('userData')) {\n\t\t\t\tinput.addAttribute('data-user-data',field.userData);\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t\n\t\tif (this.params.allowedKey) {\n\t\t\tconst allowedContainer = new BaseElement()\n\t\t\t\t.addClass('form__allowed-container',this.params.className + '__allowed-container')\n\t\t\t\t.appendTo(this.container)\n\t\t\t\t.DOMElement;\n\t\t\t\n\t\t\tnew BaseElement('input')\n\t\t\t\t.addClass('form__allowed-input',this.params.className + '__allowed-input')\n\t\t\t\t.addAttribute('type','checkbox')\n\t\t\t\t.addAttribute('checked',true)\n\t\t\t\t.event('change', (e) => {\n\t\t\t\t\tif (e.target.checked) {\n\t\t\t\t\t\tthis.submitBtn?.deleteAttribute('disabled');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.submitBtn?.addAttribute('disabled',true);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.appendTo(allowedContainer);\n\t\t\t\n\t\t\tnew BaseElement('p')\n\t\t\t\t.addClass('form__allowed-text',this.params.className + '__allowed-text','language-string')\n\t\t\t\t.addAttribute('data-dictionary',this.params.allowedKey)\n\t\t\t\t.innerHtml(changeLangToCurrent(this.params.allowedKey))\n\t\t\t\t.appendTo(allowedContainer);\n\t\t}\n\t\t\n\t\tif (this.params.submitKey) {\n\t\t\tthis.submitBtn = new BaseElement('button')\n\t\t\t\t.addClass('form__submit',this.params.className + '__submit','language-string')\n\t\t\t\t.addAttribute('data-dictionary',this.params.submitKey)\n\t\t\t\t.innerHtml(changeLangToCurrent(this.params.submitKey))\n\t\t\t\t.addAttribute('type','submit')\n\t\t\t\t.appendTo(this.container)\n\t\t\t\t.event('click', this.submit.bind(this));\n\t\t}\n\t\t\n\t\tthis.show();\n\t}\n\t\n\tsubmit() {\n\t\tconst elements = this.form.elements;\n\t\tconst sendData = {};\n\t\tlet valid = true;\n\t\t\n\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\tconst element = elements[i];\n\t\t\tif (element.required) {\n\t\t\t\tif (element.checkValidity()) {\n\t\t\t\t\tsendData[element.getAttribute('name')] = element.value;\n\t\t\t\t} else {\n\t\t\t\t\telement.classList.add('sign-in__error');\n\t\t\t\t\tvalid = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (this.iti) {\n\t\t\tconst phoneNumber = this.iti.getNumber();\n\t\t\tif (phoneNumber) {\n\t\t\t\tif (this.iti.isValidNumber()) {\n\t\t\t\t\tsendData[this.iti.telInput.getAttribute('name')] = phoneNumber;\n\t\t\t\t} else {\n\t\t\t\t\tthis.iti.telInput.classList.add('sign-in__error');\n\t\t\t\t\tvalid = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (valid) {\n\t\t\tconst formData = new FormData();\n\t\t\tconst countryId = UserPosition.location.countryId;\n\t\t\tif (countryId) {\n\t\t\t\tsendData.CountryID = countryId;\n\t\t\t}\n\t\t\tObject.entries(sendData).forEach(([key,value]) => {\n\t\t\t\tformData.append(key,value);\n\t\t\t});\n\t\t\t\n\t\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\t\tconst element = elements[i];\n\t\t\t\tif (!element.getAttribute('readonly')) {\n\t\t\t\t\telement.value = '';\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.onValidCallback(formData);\n\t\t}\n\t}\n\t\n\tgetField(field) {\n\t\treturn this.form.elements[field];\n\t}\n\t\n\tshow() {\n\t\tif (this.popUp) {\n\t\t\tthis.popUp.show();\n\t\t}\n\t}\n\t\n\tsetSubmitBtn(btn) {\n\t\tthis.submitBtn = btn;\n\t}\n\t\n\thide() {\n\t\tif (this.popUp) {\n\t\t\tthis.popUp.hide();\n\t\t}\n\t}\n\t\n\tupdateUserData() {\n\t\tconst userData = Cookie.userData();\n\t\tconst elements = this.form.elements;\n\t\tif (userData) {\n\t\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\t\tif (userData[elements[i].name]) {\n\t\t\t\t\tconst saveInUserData = elements[i].getAttribute('data-user-data');\n\t\t\t\t\tif (saveInUserData !== null) {\n\t\t\t\t\t\tif (saveInUserData) {\n\t\t\t\t\t\t\telements[i].value = userData[elements[i].name];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\telements[i].value = userData[elements[i].name];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tremove() {\n\t\tthis.container.remove();\n\t\tthis.container = null;\n\t}\n\t\n}\n","'use strict';\n\nexport class GetElement {\n #element\n constructor(selector) {\n this.#element = document.querySelector(selector);\n }\n\n get width() {\n if (!this.#element)\n return 0;\n\n return this.#element.getBoundingClientRect().width;\n }\n}","'use strict';\n\nimport { BaseElement } from './BaseElement';\nimport { changeLangToCurrent, getCurrentLang } from '../components/langSwitcher/langSwitcher';\nimport { isMobile } from '../../settings';\n\nexport class MultipleSelector {\n\tstatic scopes = {};\n\t\n\tconstructor (select, id, params = {\n\t\tanimate: 'fade',\n\t\tminimumCountSelected: 1000\n\t}) {\n\t\tthis.selectHTML = select;\n\t\tthis.id = id;\n\t\tthis.callbacks = {};\n\t\tthis.selected = new Set();\n\t\tthis.placeholder = null;\n\t\tthis.counter = null;\n\t\tthis.closeIcon = null;\n\t\tthis.minSelected = 2;\n\t\t\n\t\tconst scope = this;\n\t\t\n\t\tthis.options = {\n\t\t\t...params,\n\t\t\tonCheckAll: function() {\n\t\t\t\tthis.data.forEach(obj => {\n\t\t\t\t\tif (obj.type === 'optgroup') {\n\t\t\t\t\t\tobj.children.forEach(b => {\n\t\t\t\t\t\t\tscope.selected.add(b._data);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tscope.selected.add(obj._data);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif (scope.callbacks['onCheckAll']) {\n\t\t\t\t\tscope.callbacks['onCheckAll'](this);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tscope.#updateCloseIcon();\n\t\t\t\tscope.#updatePlaceholder();\n\t\t\t\tscope.#updateCounter();\n\t\t\t},\n\t\t\tonOpen: function() {\n\t\t\t\tif (isMobile) {\n\t\t\t\t\tconst dropdown = scope.selectHTML.parentElement.querySelector('.ms-drop');\n\t\t\t\t\tif (dropdown) {\n\t\t\t\t\t\tconst list = dropdown.querySelector('ul');\n\t\t\t\t\t\tconst originSize = 250;\n\t\t\t\t\t\tconst bounds = list.getBoundingClientRect();\n\t\t\t\t\t\tconst listSize = bounds.y + bounds.height;\n\t\t\t\t\t\tconst screenSize = window.innerHeight - 65;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (listSize > screenSize) {\n\t\t\t\t\t\t\tlist.style.maxHeight = originSize - (listSize - screenSize) + 'px';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlist.style.maxHeight = originSize + 'px';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tonUncheckAll: function() {\n\t\t\t\tthis.data.forEach(obj => {\n\t\t\t\t\tif (obj.type === 'optgroup') {\n\t\t\t\t\t\tobj.children.forEach(b => {\n\t\t\t\t\t\t\tscope.selected.delete(b._data);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tscope.selected.delete(obj._data);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif (scope.callbacks['onUncheckAll']) {\n\t\t\t\t\tscope.callbacks['onUncheckAll'](this);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tscope.#updateCloseIcon();\n\t\t\t\tscope.#updatePlaceholder();\n\t\t\t\tscope.#updateCounter();\n\t\t\t},\n\t\t\tonOptgroupClick: function(view) {\n\t\t\t\tif (view.selected) {\n\t\t\t\t\tview.children.forEach(b => {\n\t\t\t\t\t\tscope.selected.add(b.data);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tview.children.forEach(b => {\n\t\t\t\t\t\tscope.selected.delete(b.data);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (scope.callbacks['onOptgroupClick']) {\n\t\t\t\t\tscope.callbacks['onOptgroupClick'](this, view);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tscope.#updateCloseIcon();\n\t\t\t\tscope.#updatePlaceholder();\n\t\t\t\tscope.#updateCounter();\n\t\t\t},\n\t\t\tonClick: function(view) {\n\t\t\t\tif (view.selected) {\n\t\t\t\t\tscope.selected.add(view.data);\n\t\t\t\t} else {\n\t\t\t\t\tscope.selected.delete(view.data);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (scope.callbacks['onClick']) {\n\t\t\t\t\tscope.callbacks['onClick'](this, view);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tscope.#updateCloseIcon();\n\t\t\t\tscope.#updatePlaceholder();\n\t\t\t\tscope.#updateCounter();\n\t\t\t},\n\t\t\tonAfterCreate: function() {\n\t\t\t\tconst selectBtn = scope.selectHTML.parentElement.querySelector('.ms-choice');\n\t\t\t\t\n\t\t\t\tconst placeholderWrapper = new BaseElement()\n\t\t\t\t\t.addClass('multiple__select__placeholder-wrapper')\n\t\t\t\t\t.appendTo(selectBtn)\n\t\t\t\t\t.DOMElement;\n\t\t\t\t\n\t\t\t\tscope.placeholder = new BaseElement()\n\t\t\t\t\t.addClass('multiple__select__placeholder')\n\t\t\t\t\t.appendTo(placeholderWrapper);\n\t\t\t\t\n\t\t\t\tscope.counter = new SelectedCounter(selectBtn,scope.minSelected);\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tconst closeIcon = scope.selectHTML.parentElement.querySelector('.icon-close');\n\t\t\t\tif (closeIcon) {\n\t\t\t\t\tscope.closeIcon = closeIcon;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (scope.callbacks['onAfterCreate']) {\n\t\t\t\t\tscope.callbacks['onAfterCreate'](this);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tscope.#updateCloseIcon();\n\t\t\t\t\tscope.#updatePlaceholder();\n\t\t\t\t\tscope.#updateCounter();\n\t\t\t\t},0);\n\t\t\t},\n\t\t};\n\t\t\n\t\tthis.selector = $(this.selectHTML).multipleSelect(this.options);\n\t\t\n\t\tMultipleSelector.scopes[this.id] = this;\n\t}\n\t\n\tsetSelect(value) {\n\t\tconst parent = this.selectHTML.parentElement;\n\t\tconst input = parent.querySelector(`input[type=\"checkbox\"][value=\"${value}\"]`);\n\t\tinput && input.click();\n\t}\n\t\n\t#getLastSelectedElements() {\n\t\treturn [...this.selected].slice(this.selected.size - this.minSelected, this.selected.size);\n\t}\n\t\n\t#updatePlaceholder() {\n\t\tif (this.placeholder) {\n\t\t\tif (this.callbacks['onUpdatePlaceholder']) {\n\t\t\t\tthis.callbacks['onUpdatePlaceholder'](this.placeholder,this.selected);\n\t\t\t} else {\n\t\t\t\tconst lastElements = this.#getLastSelectedElements();\n\t\t\t\tif (lastElements.length) {\n\t\t\t\t\tconst data = lastElements.map(el => JSON.stringify(el));\n\t\t\t\t\tif (data.length > 1) {\n\t\t\t\t\t\tthis.placeholder.innerHtml(data.join(' | '));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.placeholder.innerHtml(data.join(''));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.placeholder.innerHtml('');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t#updateCounter() {\n\t\tif (this.counter) {\n\t\t\tthis.counter.minSelected = this.minSelected;\n\t\t\tthis.counter.count(this.selected.size);\n\t\t}\n\t}\n\t\n\t#updateCloseIcon() {\n\t\tif (this.closeIcon) {\n\t\t\tif (this.selected.size === 0) {\n\t\t\t\tthis.closeIcon.classList.add('hidden');\n\t\t\t} else {\n\t\t\t\tthis.closeIcon.classList.remove('hidden');\n\t\t\t}\n\t\t}\n\t}\n\t\n\taddCallback (event, listener) {\n\t\tthis.callbacks[event] = listener;\n\t}\n\t\n\trefresh() {\n\t\tif (this.callbacks['onLanguageUpdate']) {\n\t\t\tthis.callbacks['onLanguageUpdate'](this.selectHTML,this.selected);\n\t\t} else {\n\t\t\tconst currentLang = getCurrentLang();\n\t\t\tconst elements = this.selectHTML.querySelectorAll('option');\n\t\t\t[...elements].forEach(el => {\n\t\t\t\tif (el.getAttribute('data-dictionary')) {\n\t\t\t\t\tel.innerHTML = changeLangToCurrent(el.getAttribute('data-dictionary'));\n\t\t\t\t} else if (el.getAttribute(`data-lang-${currentLang}`)) {\n\t\t\t\t\tel.innerHTML = el.getAttribute(`data-lang-${currentLang}`);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\tsetTimeout(() => {\n\t\t\tthis.selector.multipleSelect('refresh');\n\t\t},100);\n\t}\n\t\n\tdispose () {\n\t\tthis.selector.multipleSelect('destroy');\n\t\tthis.selector = null;\n\t\tthis.callbacks = null;\n\t\tthis.selectHTML.remove();\n\t\tthis.selectHTML = null;\n\t\tthis.options = null;\n\t\tthis.placeholder = null;\n\t\tthis.id = null;\n\t\tthis.selected = null;\n\t\tthis.placeholder = null;\n\t\tthis.counter = null;\n\t\tthis.closeIcon = null;\n\t}\n\t\n\tuncheckAll () {\n\t\tthis.selector.multipleSelect('uncheckAll');\n\t}\n\t\n\tstatic refresh() {\n\t\tObject.values(MultipleSelector.scopes).forEach(scope => scope.refresh());\n\t}\n\t\n\tstatic uncheckAll (id) {\n\t\tconst scope = MultipleSelector.getScope(id);\n\t\tif (scope) {\n\t\t\tscope.uncheckAll();\n\t\t}\n\t}\n\t\n\tstatic getScope (id) {\n\t\treturn MultipleSelector.scopes[id];\n\t}\n\t\n\tstatic dispose (id) {\n\t\tconst scope = MultipleSelector.getScope(id);\n\t\tif (scope) {\n\t\t\tscope.dispose();\n\t\t\tdelete MultipleSelector.scopes[id];\n\t\t}\n\t}\n}\n\n\nclass SelectedCounter {\n\tconstructor (parent,minSelected) {\n\t\t// this.placeholder = placeholder;\n\t\tthis.minSelected = minSelected;\n\t\tthis.main = new BaseElement()\n\t\t\t.addClass('multiple__select__counter-main')\n\t\t\t.appendTo(parent)\n\t\t\t.DOMElement;\n\t\t\n\t\tnew BaseElement()\n\t\t\t.addClass('multiple__select__selected-icon','icon-waterfall')\n\t\t\t.appendTo(this.main);\n\t\t\n\t\tthis.counter = new BaseElement('span')\n\t\t\t.addClass('multiple__select__selected-counter')\n\t\t\t.appendTo(this.main);\n\t}\n\t\n\tcount(value) {\n\t\tif (value > this.minSelected) {\n\t\t\tthis.main.classList.remove('hidden');\n\t\t\tthis.counter.innerHtml(value);\n\t\t} else {\n\t\t\tthis.main.classList.add('hidden');\n\t\t}\n\t\t// const scroll = this.placeholder.DOMElement.scrollWidth;\n\t\t// const width = this.placeholder.DOMElement.getBoundingClientRect().width;\n\t\t// if (scroll - 10 > width) {\n\t\t// \tthis.main.classList.remove('hidden');\n\t\t// \tthis.counter.innerHtml(value);\n\t\t// } else {\n\t\t// \tthis.main.classList.add('hidden');\n\t\t// }\n\t}\n\t\n}\n\n\nwindow.ms = MultipleSelector;\n","'use strict';\n\nimport {changeLangToCurrent} from \"../../components/langSwitcher/langSwitcher\";\nimport {BaseElement} from \"../BaseElement\";\n\nexport class Button extends BaseElement {\n #textElement = null;\n constructor(text = null) {\n super('button');\n if (text)\n this.setText(text);\n }\n\n setText(text) {\n // if (this.#textElement)\n // throw new Error('A text is already present, it should be removed before adding new');\n\n this.#textElement = new BaseElement('span')\n .addClass('language-string', 'text')\n .addAttribute('data-dictionary', text)\n .innerHtml(changeLangToCurrent(text))\n .appendTo(this.DOMElement);\n\n return this;\n }\n\n removeText() {\n this.#textElement.remove();\n\n return this;\n }\n\n addTextClass(...value) {\n // if (!this.#textElement)\n // throw new Error('A text element is absent');\n\n this.#textElement.addClass(...value);\n\n return this;\n }\n\n removeTextClass(...value) {\n // if (!this.#textElement)\n // throw new Error('A text element is absent');\n\n this.#textElement.removeClass(...value);\n\n return this;\n }\n}\n","'use strict';\n\nimport {Button} from \"../Button\";\nimport {previewClickHandler} from \"../../../cards/unitCards/unitCardFunctions\";\nimport {cardsData} from \"../../../../settings\";\n\nexport class ExploreButton extends Button {\n constructor(location) {\n super('Explore');\n this\n .addClass('explore-button')\n .event('click', previewClickHandler);\n\n if (cardsData.cardMode.isAmenities) {\n this.remove();\n } else if (location === 'cylinder-control-panel') {\n this\n .addClass('cylinder-control-panel__button', 'search__round-button', 'hidden')\n .addAttribute('data-type', 'explore')\n .addTextClass('cylinder-control-panel__button-text', 'menu-icon');\n } else if (location === 'unit-card' && window.innerHeight >= 360 /*&& UnitCardClass.findCard()?.status === 'Available'*/) {\n this.addClass('customer-contact-now-btn', 'button');\n } else if (location === 'search-item') {\n this\n .addClass('search-item__explore-button', 'button');\n }else {\n this.remove();\n }\n }\n\n static hide(place) {\n if (place === 'unit-card') {\n const button = document.querySelector('.explore-button.customer-contact-now-btn');\n if (button)\n button.classList.add('hidden');\n }\n }\n\n static show(place) {\n if (place === 'unit-card') {\n const button = document.querySelector('.explore-button.customer-contact-now-btn');\n button?.classList.remove('hidden');\n }\n }\n}","'use strict'\n\nimport {Button} from \"../Button\";\nimport {BaseElement} from \"../../BaseElement\";\n\nexport class IconTextLong extends Button {\n #iconElement = null;\n constructor(text) {\n super(text);\n this.addClass('icon-text-long');\n this.#iconElement = new BaseElement('div')\n .addClass('icon')\n .appendTo(this.DOMElement);\n }\n\n addIconSrc(url) {\n this.#iconElement.src = url;\n\n return this;\n }\n\n addIconClass(value) {\n value ? this.#iconElement.addClass(value) : null;\n\n return this;\n }\n}","'use strict';\n\nimport gsap from \"gsap\";\nimport {isMobile, isWeb, projectMode, settingsData, UIRoot} from '../../../settings';\nimport {Button} from \"../buttons/Button\";\nimport {highlightMenuButtonDependsOnMode, isMapOpened, lockScreenOrientation} from \"../../../functions\";\nimport {changeLangToCurrent} from \"../../components/langSwitcher/langSwitcher\";\nimport { getActiveMenuData, toggleMenuWidth } from '../../menu/menu';\nimport {ViewMode} from \"../../../common\";\nimport { renderUpdateValuesOnDemand } from '../../../app';\nimport { generateUUID } from 'three/src/math/MathUtils';\nimport { BaseElement } from '../BaseElement';\nimport { VideoPopUp } from \"../../components/VideoPopUp\";\nimport {EventBus} from \"../EventBus\";\n\nexport class PopUpPage {\n static #popUpPageAnimationDelay = 0;\n static #popUpPageAnimationDuration = 0;\n static #contentAnimationDelay = 0.2;\n static #globalAnimationDelay = isMobile ? 0 : 0.3;\n\n #element = null;\n #header = null;\n #content = null;\n #headerTitleIcon = null;\n #closeButton = null;\n\n constructor(title) {\n this.#element = document.createElement('div');\n this.#content = document.createElement('div');\n\n this.#element.classList.add(\n 'pop-up-page'\n );\n this.#content.classList.add(\n 'pop-up-page__content-wrapper',\n // isMobile && 'background-backdrop-filter'\n );\n\n this.#createHeader(title);\n\n this.#content.appendChild(this.#header);\n this.#element.appendChild(this.#content);\n UIRoot.appendChild(this.#element);\n }\n\n addClass(value) {\n this.#element.classList.add(value.toString());\n }\n\n removeClass(...value) {\n this.#element.classList.remove(...value);\n }\n\n #createHeader(title) {\n this.#header = document.createElement('div');\n this.#header.classList.add('pop-up-page__header');\n\n const headerTitle = document.createElement('div');\n headerTitle.classList.add('pop-up-page__title');\n this.#header.appendChild(headerTitle);\n\n this.#headerTitleIcon = document.createElement('span');\n this.#headerTitleIcon.classList.add(\n 'pop-up-page__title-icon'\n );\n headerTitle.appendChild(this.#headerTitleIcon);\n\n const headerTitleText = document.createElement('h1')\n headerTitleText.classList.add(\n 'pop-up-page__title-text',\n 'language-string',\n 'text',\n 'pop-up-title'\n );\n headerTitleText.setAttribute('data-dictionary', title);\n headerTitleText.innerHTML = changeLangToCurrent(title);\n headerTitle.appendChild(headerTitleText);\n\n this.#closeButton = new Button()\n .addClass('pop-up-page__close-button', 'close-button-cross')\n .event('click', this.#closeHandler.bind(this))\n .appendTo(this.#header);\n }\n\n set titleIcon(value) {\n this.#headerTitleIcon.classList.add(value);\n }\n\n get contentElement() {\n return this.#content;\n }\n\n get root() {\n return this.#element;\n }\n\n get closeButton() {\n return this.#closeButton;\n }\n\n #closeHandler() {\n projectMode.Pagination.paginate({source: 'widget-close-button'});\n PopUpPage.animation('hide');\n highlightMenuButtonDependsOnMode();\n if (settingsData.activeViewMode === ViewMode.Orbit && !isMapOpened())\n toggleMenuWidth({action: 'full-force', source: 'orbit'});\n // toggleMenuWidth({action: 'full', source: 'eventListener'});\n\n if (this.#element.classList.contains('widget-video'))\n this.#element.remove();\n \n VideoPopUp.updateObsticleSize();\n }\n\n static hide() {\n const allPopUpPages = document.body.querySelectorAll('.pop-up-page:not(.hidden)');\n for (let page of allPopUpPages) {\n page.classList.add('hidden');\n\n const isWebFilterPopUp = isWeb && page.classList.contains('filter-pop-up-page');\n isWebFilterPopUp && EventBus.trigger('shrinkSearchPutMainElementBack');\n }\n }\n\n static animation(action) {\n const page = document.querySelector('.pop-up-page:not(.hidden)');\n if (!page)\n return;\n\n const isDisplayOptionPopup = page.classList.contains('display-options-page');\n const isMobileFilterPopUp = page.classList.contains('filter-pop-up');\n const content = page.querySelector('.pop-up-page__content-wrapper');\n switch(action) {\n case 'show':\n gsap.fromTo(\n page,\n {y: '100%'},\n {\n delay: 0,\n y: 0,\n duration: settingsData.animationsDuration,\n onComplete: () => {\n page.style.removeProperty('transform');\n !isDisplayOptionPopup && renderUpdateValuesOnDemand(true);\n page.classList.add('background-backdrop-filter');\n }\n },\n );\n\n\n if (!isMobileFilterPopUp) {\n gsap.fromTo(\n content,\n {opacity: 0},\n {\n opacity: 1,\n delay: 0,\n duration: settingsData.animationsDuration + this.#popUpPageAnimationDuration,\n onComplete: () => {\n content.style.removeProperty('opacity');\n }\n }\n );\n }\n break;\n case 'hide':\n gsap.to(\n page,\n {\n y: '100%',\n delay: 0.2,\n duration: settingsData.animationsDuration,\n onStart: () => {\n page.classList.remove('background-backdrop-filter');\n },\n onComplete: () => {\n page.style.removeProperty('transform');\n content.style.removeProperty('opacity');\n PopUpPage.hide();\n lockScreenOrientation();\n if (isDisplayOptionPopup) {\n renderUpdateValuesOnDemand(false);\n } else {\n const activeMenu = getActiveMenuData();\n if (activeMenu === '3dModel') {\n renderUpdateValuesOnDemand(false);\n } else if (!isMobile) {\n renderUpdateValuesOnDemand(true);\n }\n }\n }\n },\n );\n\n if (!isMobileFilterPopUp) {\n gsap.to(\n content,\n {\n opacity: 0,\n duration: settingsData.animationsDuration\n }\n );\n }\n\n break;\n default:\n console.log('PopUp: animation: default case');\n break;\n }\n }\n}\n\n\nconst DEFAULT_PARAMS = {\n parent: document.querySelector('#app'),\n needsCloseBtn: true\n};\n\n\nexport class PopUp {\n \n static scopes = {};\n \n constructor (params) {\n this.params = params;\n this.parent = params.parent ? params.parent : DEFAULT_PARAMS.parent;\n this.id = params.id ? params.id : generateUUID();\n this.container = new BaseElement()\n .addClass('pop-up','hidden')\n .addAttribute('id',this.id)\n .appendTo(this.parent);\n this.content = new BaseElement()\n .addClass('pop-up__content')\n .appendTo(this.container.DOMElement)\n .DOMElement;\n this.header = new BaseElement()\n .addClass('pop-up__header')\n .appendTo(this.content)\n .DOMElement;\n this.title = new BaseElement('h2')\n .addClass('pop-up__title','language-string')\n .appendTo(this.header);\n \n this.onClose = () => this.hide();\n \n if (this.params.hasOwnProperty('needsCloseBtn')) {\n if (this.params.needsCloseBtn) {\n this.addCloseBtn();\n }\n } else {\n this.addCloseBtn();\n }\n \n PopUp.scopes[this.id] = this;\n }\n \n addCloseBtn(parent) {\n new BaseElement('button')\n .addClass('pop-up__close-btn','icon-close')\n .appendTo(parent ? parent : this.header)\n .event('click',() => this.onClose());\n }\n \n setTitle(title,langKey) {\n this.title.innerHtml(title);\n if (langKey) {\n this.title.addAttribute('data-dictionary', langKey);\n this.title.innerHtml(changeLangToCurrent(langKey));\n }\n }\n \n setContent(content) {\n this.content.appendChild(content);\n }\n \n show() {\n return new Promise(resolve => {\n gsap.fromTo(this.container.DOMElement,{\n transform: 'translateY(100%)',\n opacity: 0\n },{\n transform: 'translateY(0)',\n opacity: 1,\n ease: 'Power2.easeInOut',\n onStart: () => this.container.removeClass('hidden'),\n onComplete: () => {\n this.container.removeStyle('transform');\n resolve();\n }\n })\n })\n }\n \n hide() {\n gsap.fromTo(this.container.DOMElement,{\n transform: 'translateY(0)',\n opacity: 1\n },{\n transform: 'translateY(100%)',\n opacity: 0,\n ease: 'Power2.easeInOut',\n onComplete: () => {\n this.container.addClass('hidden');\n this.container.removeStyle('transform');\n if (this.params.destroy) {\n this.destroy();\n }\n }\n })\n }\n \n destroy() {\n this.container.remove();\n delete PopUp.scopes[this.id];\n }\n \n static getScope(id) {\n return PopUp.scopes[id];\n }\n \n}\n","'use strict';\n\nimport { BaseElement } from '../BaseElement';\nimport { assignDeep } from '../../../settings';\nimport { numberWithCommas } from '../../../functions';\nimport { getCurrentLangDirection } from '../../components/langSwitcher/langSwitcher';\n\nconst DEFAULT_OPTIONS = {\n\tclassName: null,\n\tdata: [],\n\theight: 80,\n\tbinScale: 2,\n\tshortOutput: true,\n\tsliderRange: [0,100],\n\tselectedRange: [0,100],\n\tnumberOfBins: 10\n};\n\nconst event = new Event('input');\n\nexport class HistogramSlider {\n\t#onSlideEnd;\n\t\n\tconstructor (options = {}) {\n\t\tthis.options = assignDeep({},DEFAULT_OPTIONS,options);\n\t\tthis.elements = {\n\t\t\tbins: []\n\t\t};\n\t\tthis.fragment = document.createDocumentFragment();\n\t\t\n\t\tthis.container = new BaseElement()\n\t\t\t.addClass('histogram__slider-box',this.#addClassName('__slider-box'))\n\t\t\t.appendTo(this.fragment)\n\t\t\t.DOMElement;\n\t\t\n\t\tthis.minRange = this.options.selectedRange[0];\n\t\tthis.maxRange = this.options.selectedRange[1];\n\t\tthis.minRangeGap = 6;\n\t\t\n\t\tconst range = this.options.sliderRange[1] - this.options.sliderRange[0];\n\t\tconst rangePerBin = range / this.options.numberOfBins;\n\t\tthis.step = rangePerBin;\n\t\tthis.bins = new Array(this.options.numberOfBins).fill(0);\n\t\t\n\t\tlet binsMin = this.options.sliderRange[0];\n\t\tlet binsMax = this.options.sliderRange[0] + rangePerBin;\n\t\t\n\t\tfor (let i = 0; i < this.bins.length; i++) {\n\t\t\tthis.bins[i] = this.options.data.filter(num => num > binsMin && num < binsMax).length;\n\t\t\tbinsMin += rangePerBin;\n\t\t\tbinsMax += rangePerBin;\n\t\t}\n\t\t\n\t\tthis.#createGraph();\n\t\tthis.#createRange();\n\t\tthis.#updateHistogram();\n\t}\n\t\n\tsetOnSlideEnd(func) {\n\t\tthis.#onSlideEnd = func;\n\t\t\n\t\treturn this;\n\t}\n\t\n\t#createGraph() {\n\t\tthis.elements.graph = new BaseElement()\n\t\t\t.addClass('histogram__graph',this.#addClassName('__graph'))\n\t\t\t.addStyle('height',`${this.options.height}px`)\n\t\t\t.appendTo(this.container)\n\t\t\t.DOMElement;\n\t\t\n\t\tconst widthPerBin = 100 / this.options.numberOfBins;\n\t\t\n\t\tfor (let i = 0; i < this.bins.length; i++) {\n\t\t\tconst bin = this.bins[i];\n\t\t\tconst binRatio = this.#calculateBinHeightRatio(bin);\n\t\t\tconst scale = bin * binRatio;\n\t\t\tconst height = this.#convertToHeight(scale);\n\t\t\tconst inRangeOffset = parseInt(this.options.height - height);\n\t\t\tconst outRangeOffset = -parseInt(this.options.height - height * 2);\n\t\t\t\n\t\t\tconst element = new BaseElement()\n\t\t\t\t.addClass('histogram__graph-bin',this.#addClassName('__graph-bin'))\n\t\t\t\t.addStyle('width',`${widthPerBin}%`)\n\t\t\t\t.appendTo(this.elements.graph)\n\t\t\t\t.DOMElement;\n\t\t\t\n\t\t\tnew BaseElement()\n\t\t\t\t.addClass('histogram__graph-bin__in-range',this.#addClassName('__graph-bin__in-range'))\n\t\t\t\t.addStyle('height',`${height}px`)\n\t\t\t\t.addStyle('bottom',`-${inRangeOffset}px`)\n\t\t\t\t.appendTo(element);\n\t\t\t\n\t\t\tnew BaseElement()\n\t\t\t\t.addClass('histogram__graph-bin__out-of-range',this.#addClassName('__graph-bin__out-of-range'))\n\t\t\t\t.addStyle('height',`${height}px`)\n\t\t\t\t.addStyle('bottom',`${outRangeOffset}px`)\n\t\t\t\t.appendTo(element);\n\t\t\t\n\t\t\tthis.elements.bins.push(element);\n\t\t}\n\t\n\t}\n\t\n\tcreate(parent) {\n\t\tparent.appendChild(this.fragment);\n\t\t\n\t\treturn this;\n\t}\n\t\n\tset minValue(value) {\n\t\tthis.elements.rangeMin.value = value;\n\t\tthis.elements.rangeMin.dispatchEvent(new Event('input'));\n\t\tthis.elements.rangeMin.dispatchEvent(new Event('change'));\n\t}\n\t\n\tset maxValue(value) {\n\t\tthis.elements.rangeMax.value = value;\n\t\tthis.elements.rangeMax.dispatchEvent(new Event('input'));\n\t\tthis.elements.rangeMax.dispatchEvent(new Event('change'));\n\t}\n\t\n\t#createRange() {\n\t\tconst range = new BaseElement()\n\t\t\t.addClass('histogram__range-slider',this.#addClassName('__range-slider'))\n\t\t\t.appendTo(this.container)\n\t\t\t.DOMElement;\n\n\t\tthis.elements.rangeTrack = new BaseElement('span')\n\t\t\t.addClass('histogram__range-track',this.#addClassName('__range-track'))\n\t\t\t.appendTo(range)\n\t\t\t.DOMElement;\n\n\t\tthis.elements.rangeMin = new BaseElement('input')\n\t\t\t.addClass('histogram__range-input',this.#addClassName('__range-input'))\n\t\t\t.addAttribute('type','range')\n\t\t\t.addAttribute('data-range','min')\n\t\t\t.addAttribute('min',this.options.sliderRange[0])\n\t\t\t.addAttribute('max',this.options.sliderRange[1])\n\t\t\t.addAttribute('step',this.step)\n\t\t\t.event('input',this.#rangeHandler.bind(this))\n\t\t\t.event('change',() => this.#onSlideEnd([this.minRange,this.maxRange]))\n\t\t\t.appendTo(range)\n\t\t\t.DOMElement;\n\t\tthis.elements.rangeMin.value = this.minRange;\n\n\t\tthis.elements.rangeMax = new BaseElement('input')\n\t\t\t.addClass('histogram__range-input',this.#addClassName('__range-input'))\n\t\t\t.addAttribute('type','range')\n\t\t\t.addAttribute('data-range','max')\n\t\t\t.addAttribute('min',this.options.sliderRange[0])\n\t\t\t.addAttribute('max',this.options.sliderRange[1])\n\t\t\t.addAttribute('step',this.step)\n\t\t\t.event('input',this.#rangeHandler.bind(this))\n\t\t\t.event('change',() => this.#onSlideEnd([this.minRange,this.maxRange]))\n\t\t\t.appendTo(range)\n\t\t\t.DOMElement;\n\t\tthis.elements.rangeMax.value = this.maxRange;\n\n\t\tconst rangeValueContainer = new BaseElement()\n\t\t\t.addClass('histogram__value-container',this.#addClassName('__value-container'))\n\t\t\t.appendTo(this.container)\n\t\t\t.DOMElement;\n\n\t\tthis.elements.outputMin = new BaseElement()\n\t\t\t.addClass('histogram__value-output',this.#addClassName('__value-output'),'histogram__value-output--min')\n\t\t\t.appendTo(rangeValueContainer)\n\t\t\t.DOMElement;\n\n\t\tnew BaseElement()\n\t\t\t.addClass('histogram__value-output-separator',this.#addClassName('__value-output-separator'))\n\t\t\t.innerHtml('-')\n\t\t\t.appendTo(rangeValueContainer);\n\n\t\tthis.elements.outputMax = new BaseElement()\n\t\t\t.addClass('histogram__value-output',this.#addClassName('__value-output'),'histogram__value-output--max')\n\t\t\t.appendTo(rangeValueContainer)\n\t\t\t.DOMElement;\n\t\t\n\t\tthis.#setMinValueOutput();\n\t\tthis.#setMaxValueOutput();\n\t\tthis.fillRanges();\n\t}\n\t\n\tfillRanges() {\n\t\tthis.#fillMinRange();\n\t\tthis.#fillMaxRange();\n\t}\n\t\n\t#fillMinRange() {\n\t\tif (getCurrentLangDirection() === 'rtl') {\n\t\t\tthis.elements.rangeTrack.style.right = ((this.elements.rangeMin.value - this.elements.rangeMin.min) / (this.elements.rangeMin.max - this.elements.rangeMin.min)) * 100 + '%';\n\t\t} else {\n\t\t\tthis.elements.rangeTrack.style.left = ((this.elements.rangeMin.value - this.elements.rangeMin.min) / (this.elements.rangeMin.max - this.elements.rangeMin.min)) * 100 + '%';\n\t\t}\n\t}\n\t\n\t#fillMaxRange() {\n\t\tif (getCurrentLangDirection() === 'rtl') {\n\t\t\tthis.elements.rangeTrack.style.left = ((this.elements.rangeMax.max - this.elements.rangeMax.value) / (this.elements.rangeMax.max - this.elements.rangeMax.min)) * 100 + '%';\n\t\t} else {\n\t\t\tthis.elements.rangeTrack.style.right = ((this.elements.rangeMax.max - this.elements.rangeMax.value) / (this.elements.rangeMax.max - this.elements.rangeMax.min)) * 100 + '%';\n\t\t}\n\t\t\n\t}\n\t\n\t#setMinValueOutput() {\n\t\tthis.minRange = parseInt(this.elements.rangeMin.value);\n\t\tthis.elements.outputMin.innerHTML = this.#formatOutput(this.elements.rangeMin.value);\n\t}\n\t\n\t#formatOutput(number) {\n\t\tif (this.options.shortOutput) {\n\t\t\treturn Intl.NumberFormat('en', { notation: 'compact' }).format(\n\t\t\t\tnumber\n\t\t\t);\n\t\t} else {\n\t\t\treturn numberWithCommas(number,true);\n\t\t}\n\t}\n\t\n\t#setMaxValueOutput() {\n\t\tthis.maxRange = parseInt(this.elements.rangeMax.value);\n\t\tthis.elements.outputMax.innerHTML = this.#formatOutput(this.elements.rangeMax.value);\n\t}\n\t\n\t#updateHistogram() {\n\t\tfor (let i = 0; i < this.bins.length; i++) {\n\t\t\tconst range = this.#getBinRange(i);\n\t\t\tconst bin = this.elements.bins[i];\n\t\t\t\n\t\t\tif (range[1] < this.maxRange) {\n\t\t\t\tif (this.minRange > range[1]) {\n\t\t\t\t\tthis.#colorize(bin, 0);\n\t\t\t\t} else if (this.minRange <= range[0]) {\n\t\t\t\t\tthis.#colorize(bin, 1);\n\t\t\t\t} else {\n\t\t\t\t\tthis.#colorize(bin, 1 - (this.minRange - range[0]) / this.step);\n\t\t\t\t}\n\t\t\t} else if (range[0] > this.minRange) {\n\t\t\t\tif (this.maxRange > range[1]) {\n\t\t\t\t\tthis.#colorize(bin, 1);\n\t\t\t\t} else if (this.maxRange < range[0]) {\n\t\t\t\t\tthis.#colorize(bin, 0);\n\t\t\t\t} else {\n\t\t\t\t\tthis.#colorize(bin, (this.maxRange - range[0]) / this.step);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t#colorize(bin,state) {\n\t\tif (state) {\n\t\t\tbin.classList.remove('histogram-bin--range-out');\n\t\t} else {\n\t\t\tbin.classList.add('histogram-bin--range-out');\n\t\t}\n\t}\n\t\n\t#calculateBinHeightRatio(bin) {\n\t\tconst height = this.#convertToHeight(bin);\n\t\tif (height > this.options.height)\n\t\t\treturn this.options.height / height;\n\t\treturn 1;\n\t}\n\t\n\t#getBinRange(index) {\n\t\tconst min = (this.step * index) + this.options.sliderRange[0];\n\t\tconst max = this.step * (index + 1) + this.options.sliderRange[0];\n\t\t\n\t\treturn [min, max];\n\t}\n\t\n\t#rangeHandler(e) {\n\t\tconst range = e.target.getAttribute('data-range');\n\t\tthis.#setMinValueOutput();\n\t\tthis.#setMaxValueOutput();\n\t\tthis.fillRanges();\n\t\t\n\t\tif (this.maxRange - this.minRange < this.minRangeGap) {\n\t\t\tif (range === 'min') {\n\t\t\t\tthis.elements.rangeMin.value = this.maxRange - this.minRangeGap;\n\t\t\t\tthis.#setMinValueOutput();\n\t\t\t\tthis.#fillMinRange();\n\t\t\t\te.target.style.zIndex = 2;\n\t\t\t} else {\n\t\t\t\tthis.elements.rangeMax.value = this.minRange + this.minRangeGap;\n\t\t\t\te.target.style.zIndex = 2;\n\t\t\t\tthis.#setMaxValueOutput();\n\t\t\t\tthis.#fillMaxRange();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.#updateHistogram();\n\t}\n\t\n\t#addClassName(suffix = '') {\n\t\tif (this.options.className) {\n\t\t\treturn this.options.className + suffix;\n\t\t}\n\t\treturn null;\n\t}\n\t\n\t#convertToHeight(value) {\n\t\treturn parseInt(this.options.binScale * value + 1);\n\t}\n\t\n}\n","'use strict';\n\n\nimport { createHtmlElement } from '../../../functions';\n\nexport class Range {\n constructor (parent,min,max,step,value) {\n this.parent = parent;\n this.rangeContainer = createHtmlElement(this.parent,'','div',['range']);\n this.element = createHtmlElement(this.rangeContainer,'','input',['range__input']);\n this.element.type = 'range';\n this.element.min = min;\n this.element.max = max;\n this.element.step = step;\n this.element.value = value;\n\n return this;\n }\n\n addListener(type, listener) {\n this.element.addEventListener(type, listener);\n }\n\n enable() {\n this.element.removeAttribute('disabled');\n }\n\n disable() {\n this.element.setAttribute('disabled',true);\n }\n\n classToggle(className) {\n this.element.classList.toggle(className);\n }\n\n removeClass(className) {\n this.element.classList.remove(className);\n }\n \n vertical() {\n this.rangeContainer.classList.add('--vertical-range');\n }\n\n}\n","'use strict';\n\nimport {BaseElement} from \"../BaseElement\";\n\nexport class Switch {\n constructor(parent) {\n // this.switch = createHtmlElement(parent, '', 'label', ['switch']);\n this.switch = new BaseElement('label')\n .addClass('switch')\n .appendTo(parent)\n .DOMElement;\n // this.checkbox = createHtmlElement(this.switch.DOMElement, '', 'input', ['switch__checkbox']);\n this.checkbox = new BaseElement('input')\n .addClass('switch__checkbox')\n .setAttributes({\n 'type': 'checkbox',\n 'checked': false\n })\n .appendTo(this.switch)\n .DOMElement;\n // this.slider = createHtmlElement(this.switch.DOMElement, '', 'span', ['switch__slider']);\n this.slider = new BaseElement('span')\n .addClass('switch__slider')\n .appendTo(this.switch)\n .DOMElement;\n // this.checkbox.type = 'checkbox';\n // this.checkbox.checked = false;\n }\n\n set checked(value) {\n if (value === true || value === false)\n this.checkbox.checked = value;\n }\n\n set listener(value) {\n this.checkbox.addEventListener('change', value);\n }\n\n set change(value) {\n this.checkbox.addEventListener('change', value);\n }\n}","'use strict';\n\nimport { AnimationClip, AnimationMixer, FileLoader, KeyframeTrack, Matrix4, Object3D, Quaternion, Vector3 } from 'three';\nimport { setAnimations } from '../post-processing/post-processing';\nimport {resourcesFolder, settingsData, threeJsVariables} from \"../../settings\";\nimport {Cloudflare} from \"../api/Cloudflare\";\nimport { ViewMode } from '../../common';\n\nlet animations = null;\nlet loader = null;\n\nconst matrix = new Matrix4();\n\nexport class AnimateObject {\n constructor (object,animation) {\n this.object = object;\n this.animation = animation;\n\n if (typeof animation === 'string') {\n this.setAnimations();\n } else {\n const clip = AnimationClip.parse(this.animation);\n setAnimations(this.object,[clip]);\n }\n }\n\n async setAnimations() {\n if (!animations) {\n loader = new FileLoader();\n animations = await this.loadAnimations();\n }\n\n const animation = animations[this.animation];\n if (animation) {\n const splitName = this.animation.split('::');\n let instanceId = null;\n if (splitName.length > 1) {\n instanceId = Number(splitName[1]);\n }\n const clip = AnimationClip.parse(animation);\n setAnimations(this.object,[clip],instanceId);\n }\n }\n\n loadAnimations() {\n const url = `${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/sceneObjects/animations.json?v=${Cloudflare.version}`;\n\n return new Promise(resolve => {\n loader.load(url,file => {\n resolve(JSON.parse(file));\n },undefined,() => {\n resolve({});\n });\n });\n }\n}\n\nexport class AnimationObject extends AnimationMixer {\n constructor (object,instanceId) {\n\n let instanceObject = null;\n\n if (object.isInstanceLODObject || object.isInstancedMesh) {\n instanceObject = object;\n object.getMatrixAt(instanceId, matrix);\n object = new Object3D();\n object.position.setFromMatrixPosition(matrix);\n object.quaternion.setFromRotationMatrix(matrix);\n object.scale.setFromMatrixScale(matrix);\n }\n\n super(object);\n\n this.instanceObject = instanceObject;\n this.instanceId = instanceId;\n }\n\n update(delta) {\n super.update(delta);\n if (this.instanceObject) {\n this.getRoot().updateMatrixWorld();\n this.instanceObject.setMatrixAt(this.instanceId,this.getRoot().matrix);\n if (this.instanceObject.isInstancedMesh) {\n this.instanceObject.instanceMatrix.needsUpdate = true;\n }\n }\n if (settingsData.activeViewMode === ViewMode.Orbit) {\n threeJsVariables.renderer.shadowMap.needsUpdate = true;\n }\n }\n}\n","'use strict';\n\nimport {\n ACESFilmicToneMapping,\n BufferGeometry,\n CameraHelper,\n CatmullRomCurve3,\n CineonToneMapping,\n Euler,\n Group,\n Line,\n LinearToneMapping,\n LineBasicMaterial,\n MathUtils,\n NoToneMapping,\n ReinhardToneMapping,\n TextureLoader,\n Vector3,\n Color,\n Box3,\n SpotLight,\n Object3D, LinearSRGBColorSpace, SRGBColorSpace, SphereGeometry,\n} from 'three';\nimport {\n Buildings,\n isDesktop,\n isMobile,\n resourcesFolder,\n threeJsVariables\n} from '../../../settings';\nimport { Sky } from 'three/examples/jsm/objects/Sky';\nimport * as dat from 'dat.gui';\nimport { TimesOfDay } from '../litemode/dayNight/TimesOfDay';\nimport gsap from \"gsap\";\nimport { updateShadowMap } from '../../threejs/lights';\nimport { OSMEnv } from '../../threejs/sceneBackground';\nimport { Lerp } from '../../projectTime/Lerp';\nimport { setTilesEnvMapIntensity } from '../../threejs/environment';\nimport { sceneObjectsGroup } from '../../points/points';\nimport skyFragment from './sky/SkyFragment.glsl';\nimport skyVertex from './sky/SkyVertex.glsl';\nimport { clamp, isCylinderDisplayModeEqual } from '../../../functions';\nimport { Switch } from '../../interfaces/switchers/Switch';\nimport Stats from 'three/examples/jsm/libs/stats.module';\nimport {changeLangToCurrent} from \"../../components/langSwitcher/langSwitcher\";\nimport { DisplayOptions } from '../../components/displayOptions/DisplayOptions';\nimport { Environment } from '../../components/Environment/Environment';\nimport { BmbyMode } from '../../mode/BmbyMode';\nimport { DayNightButton } from '../../threejs/DayNightButton/DayNightButton';\nimport {BaseElement} from \"../../interfaces/BaseElement\";\n\nexport class OrbitDayAndNight extends TimesOfDay {\n static active = config.features.dayNight?.active || false;\n static osmSelected = config.features.dayNight?.checked || false;\n static scope = null;\n static usePresets = !Environment.fromBundle();\n static buildingMaterials = [];\n\n #debug = config.features.dayNight?.debug || false;\n #settings = config.features.dayNight?.settings || {};\n\n\n constructor (parent,response) {\n super(parent,response);\n\n if (!OrbitDayAndNight.active && !TimesOfDay.active) {\n this.removeFromDisplayOptions();\n return;\n }\n\n if (isMobile) {\n\n this.currentTimeMainContainer.classList.add('orbit-time','orbit-time-hidden');\n\n } else {\n this.currentTimeMainContainer.classList.add('orbit-time');\n }\n\n this.osm = new OSMEnv();\n\n //Shadows\n // const shadowsContainer = createHtmlElement('','','div',['current-time__shadow-container']);\n const shadowsContainer = new BaseElement()\n .addClass('current-time__shadow-container');\n // const shadowTitle = createHtmlElement(shadowsContainer.DOMElement, changeLangToCurrent('Enable shadows'),'span',['current-time__shadow-title','language-string']);\n // shadowTitle.setAttribute('data-dictionary','Enable shadows');\n new BaseElement('span')\n .addClass('current-time__shadow-title','language-string')\n .innerHtml(changeLangToCurrent('Enable shadows'))\n .addAttribute('data-dictionary','Enable shadows')\n .appendTo(shadowsContainer.DOMElement);\n this.shadowSwitcher = new Switch(shadowsContainer.DOMElement);\n this.shadowSwitcher.listener = this.shadowsHandler.bind(this);\n this.shadowSwitcher.checked = this.#settings.shadows || Boolean(isDesktop);\n const currentTimeToggleContainer = this.currentTimeMainContainer.querySelector('.current-time__toggle');\n\n currentTimeToggleContainer.style.marginBottom = '10px';\n currentTimeToggleContainer.insertAdjacentElement('afterend',shadowsContainer.DOMElement);\n\n\n this.center = {\n lat: Number(config.localization.latitude),\n lng: Number(config.localization.longitude)\n };\n this.points = [];\n this.prevValue = 0;\n this.alphaDirection = 0;\n this.reset = false;\n this.directionalLight = threeJsVariables.scene.getObjectByName('Dir. Light');\n this.ambientLight = threeJsVariables.scene.getObjectByName('ambientLight');\n this.secondDirectionalLight = threeJsVariables.scene.getObjectByName('Second directional light');\n\n if (OrbitDayAndNight.usePresets) {\n const buildingIntensity = Buildings.getBuildingsArray().length ?\n Array.isArray(Buildings.getBuildingsArray()[0].instances[0].material) ?\n Buildings.getBuildingsArray()[0].instances[0].material[0].envMapIntensity :\n Buildings.getBuildingsArray()[0].instances[0].material.envMapIntensity : 1.0;\n\n this.defaultLightSettings = {\n directionalLightPosition: new Vector3().copy(this.directionalLight.position),\n directionalLightIntensity: this.directionalLight.intensity,\n directionalLightColor: new Color().copy(this.directionalLight.color),\n ambientIntensity: this.ambientLight.intensity,\n ambientColor: new Color().copy(this.ambientLight.color),\n buildingIntensity: buildingIntensity,\n sceneObjects: {}\n };\n\n sceneObjectsGroup.traverse(el => {\n if (el.isMesh) {\n if (Array.isArray(el.material)) {\n this.defaultLightSettings.sceneObjects[el.name] = el.material.map(subMaterial => subMaterial.envMapIntensity);\n } else {\n this.defaultLightSettings.sceneObjects[el.name] = el.material.envMapIntensity;\n }\n }\n });\n }\n\n this.lightSaveSettings = {\n directional: {\n position: new Vector3().copy(this.directionalLight.position),\n intensity: this.directionalLight.intensity,\n color: new Color().copy(this.directionalLight.color)\n },\n ambient: {\n intensity: this.ambientLight.intensity,\n color: new Color().copy(this.ambientLight.color)\n }\n };\n\n this.activePreset = null;\n this.currentPreset = {\n turbidity: 0,\n rayleigh: 0,\n mieCoefficient: 0,\n mieDirectionalG: 0,\n directionalIntensity: 0,\n directionalColor: new Color().copy(this.lightSaveSettings.directional.color),\n ambientIntensity: 0,\n ambientColor: new Color().copy(this.lightSaveSettings.ambient.color),\n cloudsColor: new Color().setStyle('#ffffff',LinearSRGBColorSpace),\n seaColor: new Color().setStyle('#386F90',LinearSRGBColorSpace),\n seaWaveColor: new Color().setStyle('#6a9ebd',LinearSRGBColorSpace),\n treeColor: new Color().setStyle('#ffffff',LinearSRGBColorSpace),\n osmLightMapIntensity: 0,\n osmEnvMapIntensity: 1,\n tilesIntensity: 1,\n buildingIntensity: 1,\n pointLightIntensity: 0,\n buildingEmissiveIntensity: 0,\n stars: 0,\n sun: true,\n timeLine: 0\n };\n\n this.range.addListener('input',(e) => this.rangeHandler(e,true));\n // this.range.addListener('change',() => this.rangeOutput.addClass('hidden'));\n // this.range.addListener('pointerdown',() => this.rangeOutput.removeClass('hidden'));\n this.switcher.listener = this.switcherHandler.bind(this);\n this.switcher.checked = config.features.dayNight.currentTime;\n\n this.buildSunPath();\n this.#addDebug();\n OrbitDayAndNight.usePresets && this.addPointLight();\n \n OrbitDayAndNight.sky && OrbitDayAndNight.sky.material.uniforms['sunPosition'].value.copy(this.points[0]);\n\n this.dayInfo = this.getDayTimeLine();\n\n this.currentTime = this.dayInfo.currentTime;\n this.sunTimePath = (this.dayInfo.sunset - this.dayInfo.sunrise);\n this.currentRangeValue = Number(this.range.element.value);\n this.minRangeValue = this.dayInfo.dayStart;\n this.maxRangeValue = this.dayInfo.dayEnd;\n\n if (this.#settings.timeLimits) {\n const minLimit = this.#settings.timeLimits.min;\n const maxLimit = this.#settings.timeLimits.max;\n if (minLimit) {\n const minTime = minLimit.split(':');\n this.minRangeValue = new Date(this.currentTime).setHours(Number(minTime[0]),Number(minTime[1]));\n }\n if (maxLimit) {\n const maxTime = maxLimit.split(':');\n this.maxRangeValue = new Date(this.currentTime).setHours(Number(maxTime[0]),Number(maxTime[1]));\n }\n }\n\n if (OrbitDayAndNight.usePresets) {\n this.buildPresets();\n } else {\n Environment.setDayTime(this.dayInfo);\n Environment.setTime(this.currentRangeValue);\n }\n\n if (!this.switcher.checkbox.checked || (isMobile)) {\n const time = this.#settings.time.split(':');\n const hours = Number(time[0]);\n const minutes = Number(time[1]);\n this.manualTime = new Date(this.currentTime).setHours(hours,minutes);\n this.currentTime = this.manualTime;\n this.updateTimesOfDay(this.currentTime,true);\n this.range.element.value = this.currentTime;\n DayNightButton.scope?.setSwitcherState(\n this.currentTime > this.dayInfo.sunrise && this.currentTime < this.dayInfo.sunset\n );\n }\n\n const event = new Event('change');\n this.switcher.checkbox.dispatchEvent(event);\n this.shadowSwitcher.checkbox.dispatchEvent(event);\n DisplayOptions.displayOptionsVisibility('update');\n OrbitDayAndNight.scope = this;\n }\n\n shadowsHandler(e) {\n\n switch (e.target.checked) {\n\n case true:\n this.directionalLight.castShadow = true;\n break;\n case false:\n this.directionalLight.castShadow = false;\n break;\n\n }\n\n updateShadowMap();\n }\n\n presetsCorrection(presetName, presetProperty,defaultValue) {\n if (this.#settings.presetsCorrection &&\n this.#settings.presetsCorrection[presetName] &&\n this.#settings.presetsCorrection[presetName][presetProperty]) {\n\n return this.#settings.presetsCorrection[presetName][presetProperty];\n } else {\n return defaultValue;\n }\n }\n\n buildPresets() {\n\n this.nightPreset = {\n turbidity: new Lerp(0.1, 0.1),\n rayleigh: new Lerp(0.1, 0.1),\n mieCoefficient: new Lerp(0.0005,0.0005),\n mieDirectionalG: new Lerp(0.025,0.025),\n directionalIntensity: new Lerp(\n 0 + this.presetsCorrection('nightPreset','directionalIntensity',0),\n 0 + this.presetsCorrection('nightPreset','directionalIntensity',0)\n ),\n directionalColor: new Color().copy(this.lightSaveSettings.directional.color),\n ambientIntensity: new Lerp(\n 1 + this.presetsCorrection('nightPreset','ambientIntensity',0),\n 1 + this.presetsCorrection('nightPreset','ambientIntensity',0)\n ),\n ambientColor: new Color().setStyle(this.presetsCorrection('nightPreset','ambientColor','#000721'),LinearSRGBColorSpace),\n cloudsColor: new Color().setStyle(this.presetsCorrection('nightPreset','cloudsColor','#252934'),LinearSRGBColorSpace),\n seaColor: new Color().setStyle(this.presetsCorrection('nightPreset','seaColor','#161835'),LinearSRGBColorSpace),\n seaWaveColor: new Color().setStyle(this.presetsCorrection('nightPreset','seaWaveColor','#6f6f6f'),LinearSRGBColorSpace),\n treeColor: new Color().setStyle(this.presetsCorrection('nightPreset','treeColor','#474747'),LinearSRGBColorSpace),\n osmLightMapIntensity: new Lerp(\n 1 + this.presetsCorrection('nightPreset','osmLightMapIntensity',0),\n 1 + this.presetsCorrection('nightPreset','osmLightMapIntensity',0)\n ),\n osmEnvMapIntensity: new Lerp(\n 0.3 + this.presetsCorrection('nightPreset','osmEnvMapIntensity',0),\n 0.3 + this.presetsCorrection('nightPreset','osmEnvMapIntensity',0)\n ),\n tilesIntensity: new Lerp(\n 0.3 + this.presetsCorrection('nightPreset','tilesIntensity',0),\n 0.3 + this.presetsCorrection('nightPreset','tilesIntensity',0)\n ),\n buildingIntensity: new Lerp(\n 0.3 + this.presetsCorrection('nightPreset','buildingIntensity',0),\n 0.3 + this.presetsCorrection('nightPreset','buildingIntensity',0)\n ),\n pointLightIntensity: new Lerp(\n 1.3 + this.presetsCorrection('nightPreset','pointLightIntensity',0),\n 1 + this.presetsCorrection('nightPreset','pointLightIntensity',0)\n ),\n buildingEmissiveIntensity: new Lerp(\n 1.5 + this.presetsCorrection('nightPreset','buildingEmissiveIntensity',0),\n 1 + this.presetsCorrection('nightPreset','buildingEmissiveIntensity',0)\n ),\n stars: new Lerp(\n 1 + this.presetsCorrection('nightPreset','stars',0),\n 1 + this.presetsCorrection('nightPreset','stars',0)\n ),\n sun: false,\n timeLine: this.dayInfo.dayStart - this.dayInfo.beforeSunrise,\n };\n\n this.beforeSunrisePreset = {\n turbidity: new Lerp(this.nightPreset.turbidity.to,0.4),\n rayleigh: new Lerp(this.nightPreset.rayleigh.to,1.34),\n mieCoefficient: new Lerp(this.nightPreset.mieCoefficient.to,0),\n mieDirectionalG: new Lerp(this.nightPreset.mieDirectionalG.to,0.013),\n directionalIntensity: new Lerp(\n this.nightPreset.directionalIntensity.to,\n 0 + this.presetsCorrection('beforeSunrisePreset','directionalIntensity',0)\n ),\n directionalColor: new Color().copy(this.lightSaveSettings.directional.color),\n ambientIntensity: new Lerp(\n this.nightPreset.ambientIntensity.to,\n 0 + this.presetsCorrection('beforeSunrisePreset','ambientIntensity',0)\n ),\n ambientColor: new Color().setStyle(this.presetsCorrection('beforeSunrisePreset','ambientColor','#000721'),LinearSRGBColorSpace),\n cloudsColor: new Color().setStyle(this.presetsCorrection('beforeSunrisePreset','cloudsColor','#252934'),LinearSRGBColorSpace),\n seaColor: new Color().setStyle(this.presetsCorrection('beforeSunrisePreset','seaColor','#161835'),LinearSRGBColorSpace),\n seaWaveColor: new Color().setStyle(this.presetsCorrection('beforeSunrisePreset','seaWaveColor','#6f6f6f'),LinearSRGBColorSpace),\n treeColor: new Color().setStyle(this.presetsCorrection('beforeSunrisePreset','treeColor','#474747'),LinearSRGBColorSpace),\n osmLightMapIntensity: new Lerp(\n this.nightPreset.osmLightMapIntensity.to,\n 0.5 + this.presetsCorrection('beforeSunrisePreset','osmLightMapIntensity',0)\n ),\n osmEnvMapIntensity: new Lerp(\n this.nightPreset.osmEnvMapIntensity.to,\n 0.4 + this.presetsCorrection('beforeSunrisePreset','osmEnvMapIntensity',0)\n ),\n tilesIntensity: new Lerp(\n this.nightPreset.tilesIntensity.to,\n 0.4 + this.presetsCorrection('beforeSunrisePreset','tilesIntensity',0)\n ),\n buildingIntensity: new Lerp(\n this.nightPreset.buildingIntensity.to,\n 0.4 + this.presetsCorrection('beforeSunrisePreset','buildingIntensity',0)\n ),\n pointLightIntensity: new Lerp(\n this.nightPreset.pointLightIntensity.to,\n 0 + this.presetsCorrection('beforeSunrisePreset','pointLightIntensity',0)\n ),\n buildingEmissiveIntensity: new Lerp(\n this.nightPreset.buildingEmissiveIntensity.to,\n 0.5 + this.presetsCorrection('beforeSunrisePreset','buildingEmissiveIntensity',0)\n ),\n stars: new Lerp(\n this.nightPreset.stars.to,\n 0.5 + this.presetsCorrection('beforeSunrisePreset','stars',0)\n ),\n sun: false,\n timeLine: this.dayInfo.beforeSunrise - this.dayInfo.sunrise\n };\n\n this.sunrisePreset = {\n turbidity: new Lerp(1.7,0.2),\n rayleigh: new Lerp(1.08,0.268),\n mieCoefficient: new Lerp(0.002,0.001),\n mieDirectionalG: new Lerp(0.999,0.999),\n directionalIntensity: new Lerp(\n this.beforeSunrisePreset.directionalIntensity.to,\n 0.7 + this.presetsCorrection('sunrisePreset','directionalIntensity',0)\n ),\n directionalColor: new Color().copy(this.lightSaveSettings.directional.color),\n ambientIntensity: new Lerp(\n this.beforeSunrisePreset.ambientIntensity.to,\n 0 + this.presetsCorrection('sunrisePreset','ambientIntensity',0)\n ),\n ambientColor: new Color().copy(this.lightSaveSettings.ambient.color),\n cloudsColor: new Color().setStyle(this.presetsCorrection('sunrisePreset','cloudsColor','#c5cbd6'),LinearSRGBColorSpace),\n seaColor: new Color().setStyle(this.presetsCorrection('sunrisePreset','seaColor','#284f66'),LinearSRGBColorSpace),\n seaWaveColor: new Color().setStyle(this.presetsCorrection('sunrisePreset','seaWaveColor','#9b9b9b'),LinearSRGBColorSpace),\n treeColor: new Color().setStyle(this.presetsCorrection('sunrisePreset','treeColor','#c7c7c7'),LinearSRGBColorSpace),\n osmLightMapIntensity: new Lerp(\n this.beforeSunrisePreset.osmLightMapIntensity.to,\n 0 + this.presetsCorrection('sunrisePreset','osmLightMapIntensity',0)\n ),\n osmEnvMapIntensity: new Lerp(\n this.beforeSunrisePreset.osmEnvMapIntensity.to,\n 1.0 + this.presetsCorrection('sunrisePreset','osmEnvMapIntensity',0)\n ),\n tilesIntensity: new Lerp(\n this.beforeSunrisePreset.tilesIntensity.to,\n 1 + this.presetsCorrection('sunrisePreset','tilesIntensity',0)\n ),\n buildingIntensity: new Lerp(\n this.beforeSunrisePreset.buildingIntensity.to,\n 1 + this.presetsCorrection('sunrisePreset','buildingIntensity',0)\n ),\n pointLightIntensity: new Lerp(0,0),\n buildingEmissiveIntensity: new Lerp(\n this.beforeSunrisePreset.buildingEmissiveIntensity.to,\n 0 + this.presetsCorrection('sunrisePreset','buildingEmissiveIntensity',0)\n ),\n stars: new Lerp(\n this.beforeSunrisePreset.stars.to,\n 0 + this.presetsCorrection('sunrisePreset','stars',0)\n ),\n sun: true,\n timeLine: this.dayInfo.sunrise - this.dayInfo.afterSunrise\n };\n\n this.zenitPreset = {\n turbidity: new Lerp(this.sunrisePreset.turbidity.to,0.2),\n rayleigh: new Lerp(this.sunrisePreset.rayleigh.to,0.5),\n mieCoefficient: new Lerp(this.sunrisePreset.mieCoefficient.to,0.01),\n mieDirectionalG: new Lerp(this.sunrisePreset.mieDirectionalG.to,1),\n directionalIntensity: new Lerp(\n this.sunrisePreset.directionalIntensity.to,\n 0.96 + this.presetsCorrection('zenitPreset','directionalIntensity',0)\n ),\n directionalColor: new Color().setStyle(this.presetsCorrection('zenitPreset','directionalColor','#ffe6c3'),LinearSRGBColorSpace),\n ambientIntensity: new Lerp(\n this.sunrisePreset.ambientIntensity.to,\n 0.16 + this.presetsCorrection('zenitPreset','ambientIntensity',0)\n ),\n ambientColor: new Color().setStyle(this.presetsCorrection('zenitPreset','ambientColor','#c2dbff'),LinearSRGBColorSpace),\n cloudsColor: new Color().setStyle(this.presetsCorrection('zenitPreset','cloudsColor','#ffffff'),LinearSRGBColorSpace),\n seaColor: new Color().setStyle(this.presetsCorrection('zenitPreset','seaColor','#51bacb'),LinearSRGBColorSpace),\n seaWaveColor: new Color().setStyle(this.presetsCorrection('zenitPreset','seaWaveColor','#ffffff'),LinearSRGBColorSpace),\n treeColor: new Color().setStyle(this.presetsCorrection('zenitPreset','treeColor','#ffffff'),LinearSRGBColorSpace),\n osmLightMapIntensity: new Lerp(\n this.sunrisePreset.osmLightMapIntensity.to,\n 0 + this.presetsCorrection('zenitPreset','osmLightMapIntensity',0)\n ),\n osmEnvMapIntensity: new Lerp(\n this.sunrisePreset.osmEnvMapIntensity.to,\n 1.0 + this.presetsCorrection('zenitPreset','osmEnvMapIntensity',0)\n ),\n tilesIntensity: new Lerp(\n this.sunrisePreset.tilesIntensity.to,\n 1 + this.presetsCorrection('zenitPreset','tilesIntensity',0)\n ),\n buildingIntensity: new Lerp(\n this.sunrisePreset.buildingIntensity.to,\n 1 + this.presetsCorrection('zenitPreset','buildingIntensity',0)\n ),\n pointLightIntensity: new Lerp(0,0),\n buildingEmissiveIntensity: new Lerp(\n this.sunrisePreset.buildingEmissiveIntensity.to,\n 0 + this.presetsCorrection('zenitPreset','buildingEmissiveIntensity',0)\n ),\n stars: new Lerp(0,0),\n sun: true,\n timeLine: this.dayInfo.afterSunrise - this.dayInfo.zenit\n };\n\n this.fromZenitToBeforeSunset = {\n turbidity: new Lerp(this.zenitPreset.turbidity.to,0.4),\n rayleigh: new Lerp(this.zenitPreset.rayleigh.to,0.351),\n mieCoefficient: new Lerp(this.zenitPreset.mieCoefficient.to,0.001),\n mieDirectionalG: new Lerp(this.zenitPreset.mieDirectionalG.to,0.999),\n directionalIntensity: new Lerp(\n this.zenitPreset.directionalIntensity.to,\n 0.7 + this.presetsCorrection('fromZenitToBeforeSunset','directionalIntensity',0)\n ),\n directionalColor: new Color().setStyle(this.presetsCorrection('fromZenitToBeforeSunset','directionalColor','#ffe6c3'),LinearSRGBColorSpace),\n ambientIntensity: new Lerp(\n this.zenitPreset.ambientIntensity.to,\n 0 + this.presetsCorrection('fromZenitToBeforeSunset','ambientIntensity',0)\n ),\n ambientColor: new Color().setStyle(this.presetsCorrection('fromZenitToBeforeSunset','ambientColor','#c2dbff'),LinearSRGBColorSpace),\n cloudsColor: new Color().setStyle(this.presetsCorrection('fromZenitToBeforeSunset','cloudsColor','#ffffff'),LinearSRGBColorSpace),\n seaColor: new Color().setStyle(this.presetsCorrection('fromZenitToBeforeSunset','seaColor','#43a0a8'),LinearSRGBColorSpace),\n seaWaveColor: new Color().setStyle(this.presetsCorrection('fromZenitToBeforeSunset','seaWaveColor','#ffffff'),LinearSRGBColorSpace),\n treeColor: new Color().setStyle(this.presetsCorrection('fromZenitToBeforeSunset','treeColor','#ffffff'),LinearSRGBColorSpace),\n osmLightMapIntensity: new Lerp(\n this.zenitPreset.osmLightMapIntensity.to,\n 0 + this.presetsCorrection('fromZenitToBeforeSunset','osmLightMapIntensity',0)\n ),\n osmEnvMapIntensity: new Lerp(\n this.zenitPreset.osmEnvMapIntensity.to,\n 1 + this.presetsCorrection('fromZenitToBeforeSunset','osmEnvMapIntensity',0)\n ),\n tilesIntensity: new Lerp(\n this.zenitPreset.tilesIntensity.to,\n 1 + this.presetsCorrection('fromZenitToBeforeSunset','tilesIntensity',0)\n ),\n buildingIntensity: new Lerp(\n this.zenitPreset.buildingIntensity.to,\n 1 + this.presetsCorrection('fromZenitToBeforeSunset','buildingIntensity',0)\n ),\n pointLightIntensity: new Lerp(0,0),\n buildingEmissiveIntensity: new Lerp(\n this.zenitPreset.buildingEmissiveIntensity.to,\n 0 + this.presetsCorrection('fromZenitToBeforeSunsetPreset','buildingEmissiveIntensity',0)\n ),\n stars: new Lerp(0,0),\n sun: true,\n timeLine: this.dayInfo.zenit - this.dayInfo.beforeSunset\n };\n\n this.sunsetPreset = {\n turbidity: new Lerp(this.fromZenitToBeforeSunset.turbidity.to,2.4),\n rayleigh: new Lerp(this.fromZenitToBeforeSunset.rayleigh.to,1.96),\n mieCoefficient: new Lerp(this.fromZenitToBeforeSunset.mieCoefficient.to,0.001),\n mieDirectionalG: new Lerp(this.fromZenitToBeforeSunset.mieDirectionalG.to,0.999),\n directionalIntensity: new Lerp(\n this.fromZenitToBeforeSunset.directionalIntensity.to,\n 0.35 + this.presetsCorrection('sunsetPreset','directionalIntensity',0)\n ),\n directionalColor: new Color().setStyle(this.presetsCorrection('sunsetPreset','directionalColor','#ffe6c3'),LinearSRGBColorSpace),\n ambientIntensity: new Lerp(\n this.fromZenitToBeforeSunset.ambientIntensity.to,\n 0 + this.presetsCorrection('sunsetPreset','ambientIntensity',0)\n ),\n ambientColor: new Color().setStyle(this.presetsCorrection('sunsetPreset','ambientColor','#c2dbff'),LinearSRGBColorSpace),\n cloudsColor: new Color().setStyle(this.presetsCorrection('sunsetPreset','cloudsColor','#c5cbd6'),LinearSRGBColorSpace),\n seaColor: new Color().setStyle(this.presetsCorrection('sunsetPreset','seaColor','#37757a'),LinearSRGBColorSpace),\n seaWaveColor: new Color().setStyle(this.presetsCorrection('sunsetPreset','seaWaveColor','#FCD995'),LinearSRGBColorSpace),\n treeColor: new Color().setStyle(this.presetsCorrection('sunsetPreset','treeColor','#c7c7c7'),LinearSRGBColorSpace),\n osmLightMapIntensity: new Lerp(\n this.fromZenitToBeforeSunset.osmLightMapIntensity.to,\n 0.5 + this.presetsCorrection('sunsetPreset','osmLightMapIntensity',0)\n ),\n osmEnvMapIntensity: new Lerp(\n this.fromZenitToBeforeSunset.osmEnvMapIntensity.to,\n 1 + this.presetsCorrection('sunsetPreset','osmEnvMapIntensity',0)\n ),\n tilesIntensity: new Lerp(\n this.fromZenitToBeforeSunset.tilesIntensity.to,\n 1 + this.presetsCorrection('sunsetPreset','tilesIntensity',0)\n ),\n buildingIntensity: new Lerp(\n this.fromZenitToBeforeSunset.buildingIntensity.to,\n 1 + this.presetsCorrection('sunsetPreset','buildingIntensity',0)\n ),\n pointLightIntensity: new Lerp(\n this.fromZenitToBeforeSunset.pointLightIntensity.to,\n 0 + this.presetsCorrection('sunsetPreset','pointLightIntensity',0)\n ),\n buildingEmissiveIntensity: new Lerp(\n this.fromZenitToBeforeSunset.buildingEmissiveIntensity.to,\n 0.5 + this.presetsCorrection('sunsetPreset','buildingEmissiveIntensity',0)\n ),\n stars: new Lerp(\n 0,\n 0.2 + this.presetsCorrection('sunsetPreset','stars',0)\n ),\n sun: true,\n timeLine: this.dayInfo.beforeSunset - this.dayInfo.sunset\n };\n\n this.afterSunsetPreset = {\n turbidity: new Lerp(3.8,0.1),\n rayleigh: new Lerp(1.898,0.1),\n mieCoefficient: new Lerp(0,0.0005),\n mieDirectionalG: new Lerp(0.999,0.025),\n directionalIntensity: new Lerp(\n this.sunsetPreset.directionalIntensity.to,\n 0 + this.presetsCorrection('afterSunsetPreset','directionalIntensity',0)\n ),\n directionalColor: new Color().copy(this.lightSaveSettings.directional.color),\n ambientIntensity: new Lerp(\n this.sunsetPreset.ambientIntensity.to,\n 1 + this.presetsCorrection('afterSunsetPreset','ambientIntensity',0)\n ),\n ambientColor: new Color().setStyle(this.presetsCorrection('afterSunsetPreset','ambientColor','#000721'),LinearSRGBColorSpace),\n cloudsColor: new Color().setStyle(this.presetsCorrection('afterSunsetPreset','cloudsColor','#252934'),LinearSRGBColorSpace),\n seaColor: new Color().setStyle(this.presetsCorrection('afterSunsetPreset','seaColor','#163d3f'),LinearSRGBColorSpace),\n seaWaveColor: new Color().setStyle(this.presetsCorrection('afterSunsetPreset','seaWaveColor','#585858'),LinearSRGBColorSpace),\n treeColor: new Color().setStyle(this.presetsCorrection('afterSunsetPreset','treeColor','#474747'),LinearSRGBColorSpace),\n osmLightMapIntensity: new Lerp(\n this.sunsetPreset.osmLightMapIntensity.to,\n 1 + this.presetsCorrection('afterSunsetPreset','osmLightMapIntensity',0)\n ),\n osmEnvMapIntensity: new Lerp(\n this.sunsetPreset.osmEnvMapIntensity.to,\n 0.3 + this.presetsCorrection('afterSunsetPreset','osmEnvMapIntensity',0)\n ),\n tilesIntensity: new Lerp(\n this.sunsetPreset.tilesIntensity.to,\n 0.3 + this.presetsCorrection('afterSunsetPreset','tilesIntensity',0)\n ),\n buildingIntensity: new Lerp(\n this.sunsetPreset.buildingIntensity.to,\n 0.3 + this.presetsCorrection('afterSunsetPreset','buildingIntensity',0)\n ),\n pointLightIntensity: new Lerp(\n this.sunsetPreset.pointLightIntensity.to,\n 1 + this.presetsCorrection('afterSunsetPreset','pointLightIntensity',0)\n ),\n buildingEmissiveIntensity: new Lerp(\n this.sunsetPreset.buildingEmissiveIntensity.to,\n 1 + this.presetsCorrection('afterSunsetPreset','buildingEmissiveIntensity',0)\n ),\n stars: new Lerp(\n this.sunsetPreset.stars.to,\n 0.5 + this.presetsCorrection('afterSunsetPreset','stars',0)\n ),\n sun: false,\n timeLine: this.dayInfo.sunset - this.dayInfo.afterSunset\n };\n\n this.dayEndPreset = {\n turbidity: new Lerp(this.afterSunsetPreset.turbidity.to, 0.1),\n rayleigh: new Lerp(this.afterSunsetPreset.rayleigh.to, 0.1),\n mieCoefficient: new Lerp(this.afterSunsetPreset.mieCoefficient.to,0.0005),\n mieDirectionalG: new Lerp(this.afterSunsetPreset.mieCoefficient.to,0.025),\n directionalIntensity: new Lerp(\n this.afterSunsetPreset.directionalIntensity.to,\n 0 + this.presetsCorrection('dayEndPreset','directionalIntensity',0)\n ),\n directionalColor: new Color().copy(this.lightSaveSettings.directional.color),\n ambientIntensity: new Lerp(\n 1 + this.presetsCorrection('dayEndPreset','ambientIntensity',0),\n 1 + this.presetsCorrection('dayEndPreset','ambientIntensity',0)\n ),\n ambientColor: new Color().setStyle(this.presetsCorrection('dayEndPreset','ambientColor','#000721'),LinearSRGBColorSpace),\n cloudsColor: new Color().setStyle(this.presetsCorrection('dayEndPreset','cloudsColor','#252934'),LinearSRGBColorSpace),\n seaColor: new Color().setStyle(this.presetsCorrection('dayEndPreset','seaColor','#161835'),LinearSRGBColorSpace),\n seaWaveColor: new Color().setStyle(this.presetsCorrection('dayEndPreset','seaWaveColor','#6f6f6f'),LinearSRGBColorSpace),\n treeColor: new Color().setStyle(this.presetsCorrection('dayEndPreset','treeColor','#474747'),LinearSRGBColorSpace),\n osmLightMapIntensity: new Lerp(\n this.afterSunsetPreset.osmLightMapIntensity.to,\n 1 + this.presetsCorrection('dayEndPreset','osmLightMapIntensity',0)\n ),\n osmEnvMapIntensity: new Lerp(\n this.afterSunsetPreset.osmEnvMapIntensity.to,\n 0.3 + this.presetsCorrection('dayEndPreset','osmEnvMapIntensity',0)\n ),\n tilesIntensity: new Lerp(\n this.afterSunsetPreset.tilesIntensity.to,\n 0.3 + this.presetsCorrection('dayEndPreset','tilesIntensity',0)\n ),\n buildingIntensity: new Lerp(\n this.afterSunsetPreset.buildingIntensity.to,\n 0.3 + this.presetsCorrection('dayEndPreset','buildingIntensity',0)\n ),\n pointLightIntensity: new Lerp(\n this.afterSunsetPreset.pointLightIntensity.to,\n 1.3 + this.presetsCorrection('dayEndPreset','pointLightIntensity',0)\n ),\n buildingEmissiveIntensity: new Lerp(\n this.afterSunsetPreset.buildingEmissiveIntensity.to,\n 1.5 + this.presetsCorrection('dayEndPreset','buildingEmissiveIntensity',0)\n ),\n stars: new Lerp(1, 1),\n sun: false,\n timeLine: this.dayInfo.afterSunset - this.dayInfo.dayEnd,\n };\n\n }\n\n resetToDefault() {\n\n if (OrbitDayAndNight.usePresets) {\n this.reset = true;\n this.currentPresetCopy = {};\n Object.entries(this.currentPreset).forEach(([key,value]) => {\n if (typeof value === 'object') {\n this.currentPresetCopy[key] = new Color().copy(value);\n } else {\n this.currentPresetCopy[key] = value;\n }\n });\n this.currentPresetCopy.directionalLightPosition = new Vector3().copy(this.directionalLight.position);\n\n const tilesIntensityToValue =\n threeJsVariables.bundleConfig && threeJsVariables.bundleConfig.version === 1\n ? threeJsVariables.bundleConfig.tiles.material.config.envMapIntensity ?\n threeJsVariables.bundleConfig.tiles.material.config.envMapIntensity : 1\n : 1;\n this.activePreset = {\n turbidity: new Lerp(0, 0),\n rayleigh: new Lerp(0, 0),\n mieCoefficient: new Lerp(0, 0),\n mieDirectionalG: new Lerp(0, 0),\n directionalIntensity: new Lerp(this.defaultLightSettings.directionalLightIntensity, this.defaultLightSettings.directionalLightIntensity),\n directionalColor: this.defaultLightSettings.directionalLightColor,\n ambientIntensity: new Lerp(this.defaultLightSettings.ambientIntensity,this.defaultLightSettings.ambientIntensity),\n ambientColor: this.defaultLightSettings.ambientColor,\n cloudsColor: new Color().setStyle('#ffffff',LinearSRGBColorSpace),\n seaColor: new Color().setStyle('#386F90',LinearSRGBColorSpace),\n seaWaveColor: new Color().setStyle('#6a9ebd',LinearSRGBColorSpace),\n treeColor: new Color().setStyle('#ffffff',LinearSRGBColorSpace),\n osmLightMapIntensity: new Lerp(0, 0),\n osmEnvMapIntensity: new Lerp(1, 1),\n tilesIntensity: new Lerp(1, tilesIntensityToValue),\n buildingIntensity: new Lerp(this.defaultLightSettings.buildingIntensity, this.defaultLightSettings.buildingIntensity),\n pointLightIntensity: new Lerp(0, 0),\n buildingEmissiveIntensity: new Lerp(0, 0),\n stars: new Lerp(0, 0),\n sun: true,\n timeLine: 0\n };\n\n this.alpha = 1;\n this.mergePresetToCurrent();\n\n this.directionalLight.position.copy(this.defaultLightSettings.directionalLightPosition);\n this.directionalLight.color.copy(this.defaultLightSettings.directionalLightColor);\n this.directionalLight.intensity = this.defaultLightSettings.directionalLightIntensity;\n this.ambientLight.intensity = this.defaultLightSettings.ambientIntensity;\n this.ambientLight.color.copy(this.defaultLightSettings.ambientColor);\n this.directionalLight.castShadow = getCastShadow();\n this.directionalLight.lookAt(new Vector3());\n this.secondDirectionalLight?.updateParams();\n } else {\n this.directionalLight.intensity = this.lightSaveSettings.directional.intensity;\n this.directionalLight.color.copy(this.lightSaveSettings.directional.color);\n this.directionalLight.position.copy(this.lightSaveSettings.directional.position);\n this.directionalLight.castShadow = getCastShadow();\n this.directionalLight.lookAt(new Vector3());\n this.secondDirectionalLight?.updateParams();\n\n // const time = this.#settings.time.split(':');\n // const hours = Number(time[0]);\n // const minutes = Number(time[1]);\n // this.currentTime = new Date(this.currentTime).setHours(hours,minutes);\n // this.updateTimesOfDay(this.currentTime,true);\n this.updateNightBuildings(1);\n Environment.setAlpha(1);\n }\n\n updateShadowMap();\n\n this.reset = false;\n }\n\n restorePreviouslyPreset() {\n if (OrbitDayAndNight.usePresets) {\n this.currentPreset = this.currentPresetCopy;\n this.directionalLight.position.copy(this.currentPresetCopy.directionalLightPosition);\n this.directionalLight.lookAt(0,0,0);\n this.#applyPreset();\n OSMEnv.updateLightMap(this.currentPreset.osmLightMapIntensity);\n OSMEnv.updateEnvMapIntensity(this.currentPreset.osmEnvMapIntensity);\n this.changeTilesIntensity(this.currentPreset.tilesIntensity);\n this.changeMainBuildingIntensity(this.currentPreset.buildingIntensity);\n this.updatePointsLight(this.currentPreset.pointLightIntensity);\n this.updateBuildingsEmissive();\n } else {\n const inputEvent = new Event('input');\n this.range.element.dispatchEvent(inputEvent);\n }\n\n const changeEvent = new Event('change');\n this.shadowSwitcher.checkbox.dispatchEvent(changeEvent);\n }\n\n rangeHandler(e,manualUpdate = false) {\n if (!OrbitDayAndNight.isActiveAndSelected) return;\n\n this.currentRangeValue = parseInt(e.target.value);\n if (isNaN(this.currentRangeValue)) return;\n\n this.currentRangeValue = clamp(this.currentRangeValue,this.minRangeValue,this.maxRangeValue);\n\n if (!manualUpdate) return;\n\n DayNightButton.scope?.setSwitcherState(\n this.currentRangeValue > this.dayInfo.sunrise && this.currentRangeValue < this.dayInfo.sunset\n );\n\n this.showCurrentTimeBubble();\n\n if (OrbitDayAndNight.usePresets) {\n if (this.prevValue !== 0) {\n if (this.prevValue > this.currentRangeValue) {\n this.alphaDirection = -1;\n } else {\n this.alphaDirection = 1;\n }\n }\n\n this.prevValue = this.currentRangeValue;\n\n if (this.#debug) {\n this.normalizeTime.setTime(this.currentRangeValue);\n this.sunController.currentTime = `${this.normalizeTime.getHours()}:${this.normalizeTime.getMinutes()}`;\n this.gui.updateDisplay();\n }\n\n // Night\n if (this.currentRangeValue > this.dayInfo.dayStart && this.currentRangeValue < this.dayInfo.beforeSunrise) {\n this.activePreset = this.nightPreset;\n this.alpha = Math.min((this.dayInfo.dayStart - this.currentRangeValue) / this.activePreset.timeLine, 1.0);\n this.mergePresetToCurrent();\n // console.log('night');\n }\n // Before sunrise\n else if (this.currentRangeValue > this.dayInfo.beforeSunrise && this.currentRangeValue < this.dayInfo.sunrise) {\n\n this.activePreset = this.beforeSunrisePreset;\n this.alpha = Math.min((this.dayInfo.beforeSunrise - this.currentRangeValue) / this.activePreset.timeLine, 1.0);\n this.mergePresetToCurrent();\n // console.log('before');\n }\n\n // Sunrise\n else if (this.currentRangeValue > this.dayInfo.sunrise && this.currentRangeValue < this.dayInfo.afterSunrise) {\n this.activePreset = this.sunrisePreset;\n this.alpha = Math.min((this.dayInfo.sunrise - this.currentRangeValue) / this.activePreset.timeLine, 1.0);\n this.mergePresetToCurrent();\n // console.log('sunrise');\n }\n\n //To Zenit\n else if (this.currentRangeValue > this.dayInfo.afterSunrise && this.currentRangeValue <= this.dayInfo.zenit) {\n this.activePreset = this.zenitPreset;\n this.alpha = Math.min((this.dayInfo.afterSunrise - this.currentRangeValue) / this.activePreset.timeLine, 1.0);\n this.mergePresetToCurrent();\n // console.log('zenit');\n }\n\n // to before sunset\n\n else if (this.currentRangeValue > this.dayInfo.zenit && this.currentRangeValue < this.dayInfo.beforeSunset) {\n this.activePreset = this.fromZenitToBeforeSunset;\n this.alpha = Math.min((this.dayInfo.zenit - this.currentRangeValue) / this.activePreset.timeLine, 1.0);\n this.mergePresetToCurrent();\n // console.log('after zenit');\n }\n\n // Sunset\n else if (this.currentRangeValue > this.dayInfo.beforeSunset && this.currentRangeValue < this.dayInfo.sunset) {\n this.activePreset = this.sunsetPreset;\n this.alpha = Math.min((this.dayInfo.beforeSunset - this.currentRangeValue) / this.activePreset.timeLine, 1.0);\n this.mergePresetToCurrent();\n // console.log('sunset');\n }\n\n // After sunset\n else if (this.currentRangeValue > this.dayInfo.sunset && this.currentRangeValue < this.dayInfo.afterSunset) {\n this.activePreset = this.afterSunsetPreset;\n this.alpha = Math.min((this.dayInfo.sunset - this.currentRangeValue) / this.activePreset.timeLine, 1.0);\n this.mergePresetToCurrent();\n // console.log('after sunset');\n }\n\n // Night\n else if (this.currentRangeValue > this.dayInfo.afterSunset && this.currentRangeValue < this.dayInfo.dayEnd) {\n this.activePreset = this.dayEndPreset;\n this.alpha = Math.min((this.dayInfo.afterSunset - this.currentRangeValue) / this.activePreset.timeLine, 1.0);\n this.mergePresetToCurrent();\n // console.log('night');\n }\n } else {\n\n this.alpha = 1;\n const oneHour = 3600000;\n Environment.setTime(this.currentRangeValue);\n Environment.setDayTime(this.dayInfo);\n\n if (this.currentRangeValue < this.dayInfo.sunrise + oneHour) {\n this.alpha = 1 - clamp(((this.dayInfo.sunrise + oneHour - this.currentRangeValue) / (this.dayInfo.sunrise + oneHour - this.dayInfo.sunrise)),0.0,1.0);\n } else if (this.currentRangeValue > this.dayInfo.sunset - oneHour) {\n this.alpha = 1 - clamp(((this.currentRangeValue - (this.dayInfo.sunset - oneHour)) / (this.dayInfo.sunset - (this.dayInfo.sunset - oneHour))),0.0,1.0);\n }\n this.directionalLight.intensity = this.lightSaveSettings.directional.intensity * this.alpha;\n Environment.setAlpha(this.alpha);\n this.updateNightBuildings(this.alpha);\n\n // OSMEnv.updateLightMap(1.0 - this.alpha);\n }\n\n\n //LightPosition\n if (this.currentRangeValue > this.dayInfo.sunrise && this.currentRangeValue < this.dayInfo.sunset) {\n\n const value = Math.min((this.currentRangeValue - this.dayInfo.sunrise) / this.sunTimePath, 1.0);\n const pos = this.curve.getPoint(value);\n\n OrbitDayAndNight.sky.material.uniforms['sunPosition'].value.copy(pos);\n // this.water.material.uniforms.sunDirection.value.copy(pos).normalize();\n // OrbitDayAndNight.lens.position.copy(pos);\n this.directionalLight.position.copy(pos);\n this.directionalLight.lookAt(0,0,0);\n this.secondDirectionalLight?.updateParams();\n\n } else if (this.currentRangeValue > this.dayInfo.sunset) {\n const pos = this.curve.getPoint(1);\n\n OrbitDayAndNight.sky.material.uniforms['sunPosition'].value.copy(pos);\n // this.water.material.uniforms.sunDirection.value.copy(pos).normalize();\n // OrbitDayAndNight.lens.position.copy(pos);\n this.directionalLight.position.copy(pos);\n this.directionalLight.lookAt(0,0,0);\n this.secondDirectionalLight?.updateParams();\n } else if (this.currentRangeValue < this.dayInfo.sunrise) {\n const pos = this.curve.getPoint(0);\n\n OrbitDayAndNight.sky.material.uniforms['sunPosition'].value.copy(pos);\n // this.water.material.uniforms.sunDirection.value.copy(pos).normalize();\n // OrbitDayAndNight.lens.position.copy(pos);\n this.directionalLight.position.copy(pos);\n this.directionalLight.lookAt(0,0,0);\n this.secondDirectionalLight?.updateParams();\n }\n\n if (this.shadowSwitcher.checkbox.checked) {\n updateShadowMap();\n }\n }\n\n changeTilesIntensity(alpha) {\n setTilesEnvMapIntensity(alpha);\n\n if (threeJsVariables.tilesRenderer) {\n threeJsVariables.tilesRenderer.forEachLoadedModel((scene,tile)=>{\n scene.traverse(child =>{\n if (child.isMesh){\n if (child.material.type === 'MeshBasicMaterial') {\n child.material.color.r = alpha;\n child.material.color.g = alpha;\n child.material.color.b = alpha;\n } else {\n child.material.envMapIntensity = alpha;\n }\n\n child.material.needsUpdate = true;\n }\n });\n });\n } else {\n threeJsVariables.environment?.traverse(el => {\n if (el.isMesh) {\n el.material.envMapIntensity = alpha;\n }\n });\n }\n }\n\n changeMainBuildingIntensity(intensity) {\n const buildings = Buildings.getBuildingsArray();\n\n // buildings.forEach(building => {\n // const material = building.instances[0].material;\n // if (Array.isArray(material)) {\n // material.map(subMaterial => subMaterial.envMapIntensity = intensity);\n // } else {\n // material.envMapIntensity = intensity;\n // }\n // });\n\n if (this.reset) {\n buildings.forEach(building => {\n const material = building.instances[0].material;\n if (Array.isArray(material)) {\n material.map((subMaterial) =>\n subMaterial.envMapIntensity = subMaterial.userData.defaultSettings\n ? subMaterial.userData.defaultSettings.envMapIntensity\n : this.defaultLightSettings.buildingIntensity);\n } else {\n material.envMapIntensity =\n material.userData.defaultSettings\n ? material.userData.defaultSettings.envMapIntensity\n : this.defaultLightSettings.buildingIntensity;\n }\n material.needsUpdate = true;\n });\n\n sceneObjectsGroup.traverse(el => {\n if (el.isMesh) {\n const material = el.material;\n if (Array.isArray(material)) {\n material.map((subMaterial,index) =>\n subMaterial.envMapIntensity = subMaterial.userData.defaultSettings\n ? subMaterial.userData.defaultSettings.envMapIntensity\n : this.defaultLightSettings.sceneObjects[el.name][index]);\n } else {\n material.envMapIntensity =\n material.userData.defaultSettings\n ? material.userData.defaultSettings.envMapIntensity\n : this.defaultLightSettings.sceneObjects[el.name] ;\n }\n }\n });\n } else {\n buildings.forEach(building => {\n const material = building.instances[0].material;\n if (Array.isArray(material)) {\n material.map(subMaterial => subMaterial.envMapIntensity = intensity);\n } else {\n material.envMapIntensity = intensity;\n }\n });\n\n sceneObjectsGroup.traverse(el => {\n if (el.isMesh) {\n const material = el.material;\n if (Array.isArray(material)) {\n material.map(subMaterial => subMaterial.envMapIntensity = intensity);\n } else {\n material.envMapIntensity = intensity;\n }\n }\n });\n }\n }\n\n switcherHandler(e) {\n if (!OrbitDayAndNight.isActiveAndSelected) return;\n\n // if (this.manualTime) {\n // this.currentTime = this.manualTime;\n //\n // this.updateTimesOfDay(this.currentTime,true);\n // this.range.element.value = this.currentTime;\n // return;\n // }\n\n switch (e.target.checked) {\n case true:\n\n const time = {value: parseInt(this.range.element.value)};\n\n gsap.to(time,{\n value: this.currentTime,\n duration: .7,\n onStart: () => {\n this.currentTimeToggle(false);\n this.range.classToggle('disabled');\n },\n onUpdate: () => {\n this.range.element.value = time.value;\n this.updateTimesOfDay(time.value,true);\n },\n onComplete: () => {\n this.currentTimeToggle(true);\n }\n });\n\n break;\n case false:\n this.range.removeClass('disabled');\n this.currentTimeToggle(false);\n this.showCurrentTimeBubble();\n break;\n }\n }\n\n refreshTime() {\n if (!OrbitDayAndNight.isActiveAndSelected) return;\n\n this.currentTime = this.getCurrentTimeMilliseconds;\n\n this.currentTimeToggle() && this.updateTimesOfDay(this.getCurrentTimeMilliseconds);\n }\n\n updateTimesOfDay(time, manualUpdate = false) {\n if (!OrbitDayAndNight.isActiveAndSelected) return;\n\n this.rangeHandler({target: {value: time}},manualUpdate);\n }\n\n #addDebug() {\n if (!this.#debug) return;\n\n this.sunController = {\n turbidity: 5.2,\n rayleigh: 0.831,\n mieCoefficient: 0.001,\n mieDirectionalG: 0.999,\n exposure: threeJsVariables.renderer.toneMappingExposure,\n toneMapping: 'None',\n colorSpace: 'Linear',\n radius: 3000,\n currentTime: '',\n directionalLight: {\n intensity: this.directionalLight.intensity,\n color: '#' + this.directionalLight.color.getHexString()\n },\n ambientLight: {\n intensity: this.ambientLight.intensity,\n color: '#' + this.ambientLight.color.getHexString()\n },\n shadows: {\n near: this.directionalLight.shadow.camera.near,\n far: this.directionalLight.shadow.camera.far,\n size: this.directionalLight.shadow.camera.top\n },\n // fog: '#' + this.fog.color.getHexString(),\n pointLight: {\n intensity: 1,\n angle: 1,\n penumbra: 1,\n decay: 1,\n distance: 100,\n },\n water: {\n alpha: 1,\n size: 1,\n distortionScale: 20,\n sunColor: '#ffffff',\n waterColor: '#001e0f'\n }\n };\n\n\n this.normalizeTime = new Date(this.currentTime);\n this.gui = new dat.GUI();\n this.gui.width = 400;\n this.gui.domElement.style.position = 'absolute';\n this.gui.domElement.style.right = '260px';\n this.gui.domElement.style.top = '0';\n const sunFolder = this.gui.addFolder('Sun');\n const renderer = this.gui.addFolder('Renderer');\n const lights = this.gui.addFolder('Lights');\n const directional = lights.addFolder('Directional Light');\n const ambient = lights.addFolder('Ambient Light');\n const shadows = lights.addFolder('Shadows');\n\n const nightLight = this.gui.addFolder('Night lights');\n nightLight.add(this.sunController.pointLight, 'intensity', 0.0,10, 0.01).onChange(this.#updateSunSettings.bind(this) );\n nightLight.add(this.sunController.pointLight, 'decay', 0.0, 10.0, 0.01).onChange(this.#updateSunSettings.bind(this) );\n nightLight.add(this.sunController.pointLight, 'distance', 0.0, 10000, 1).onChange(this.#updateSunSettings.bind(this) );\n nightLight.add(this.sunController.pointLight, 'angle', 0.0, Math.PI / 2, 0.01).onChange(this.#updateSunSettings.bind(this) );\n nightLight.add(this.sunController.pointLight, 'penumbra', 0.0, 10, 0.01).onChange(this.#updateSunSettings.bind(this) );\n\n const input = document.createElement('input');\n input.type = 'file';\n input.addEventListener('change', inputHandler);\n\n const textureLoader = new TextureLoader();\n\n function inputHandler (e) {\n const file = this.files[0];\n\n const fileReader = new FileReader();\n fileReader.onload = function(e) {\n const res = e.target.result;\n\n textureLoader.load(res, (texture) => {\n\n const buildings = Buildings.getBuildingsArray();\n buildings.forEach(building => {\n building.instances[0].material.map = texture;\n building.instances[0].material.needsUpdate = true;\n });\n });\n };\n fileReader.readAsDataURL(file);\n }\n\n const textures = this.gui.addFolder('Textures');\n const map = {\n map: () => {\n input.click();\n }\n };\n\n textures.add(map,'map');\n\n // const water = gui.addFolder('Water');\n // water.add(this.sunController.water, 'alpha', 0, 5, 0.001).onChange(this.#updateSunSettings.bind(this) );\n // water.add(this.sunController.water, 'size', 0, 5000, 1).onChange(this.#updateSunSettings.bind(this) );\n // water.add(this.sunController.water, 'distortionScale', 0, 100, 1).onChange(this.#updateSunSettings.bind(this) );\n // water.addColor(this.sunController.water,'sunColor').onChange(this.#updateSunSettings.bind(this) );\n // water.addColor(this.sunController.water,'waterColor').onChange(this.#updateSunSettings.bind(this) );\n\n\n sunFolder.add( this.sunController, 'turbidity', 0.0, 20.0, 0.1 ).onChange( this.#updateSunSettings.bind(this) );\n sunFolder.add( this.sunController, 'rayleigh', 0.0, 4, 0.001 ).onChange( this.#updateSunSettings.bind(this));\n sunFolder.add( this.sunController, 'mieCoefficient', 0.0, 0.1, 0.001 ).onChange( this.#updateSunSettings.bind(this) );\n sunFolder.add( this.sunController, 'mieDirectionalG', 0.0, 1, 0.001 ).onChange( this.#updateSunSettings.bind(this) );\n // sunFolder.add( this.sunController, 'radius', 0.0, 3000, 1 ).onChange( this.#updateSunSettings.bind(this) );\n // sunFolder.addColor( this.sunController, 'fog').onChange(this.#updateSunSettings.bind(this));\n\n // renderer.add(this.sunController, 'toneMapping',['None','Linear','Reinhard','Cineon','Filmic']).onChange(this.#updateSunSettings.bind(this) );\n // renderer.add(this.sunController, 'outputEncoding',['Linear','sRGB']).onChange(this.#updateSunSettings.bind(this) );\n // renderer.add( this.sunController, 'exposure', 0.0, 5, 0.0001).onChange( this.#updateSunSettings.bind(this) );\n\n directional.add(this.currentPreset, 'directionalIntensity',0.0, 10, 0.01).onChange(this.#updateSunSettings.bind(this));\n directional.addColor(this.currentPreset,'directionalColor').onChange(this.#updateSunSettings.bind(this));\n\n ambient.add(this.currentPreset, 'ambientIntensity', 0.0, 10, 0.01).onChange(this.#updateSunSettings.bind(this));\n ambient.addColor(this.currentPreset, 'ambientColor').onChange(this.#updateSunSettings.bind(this));\n\n const targetCurrentTime = this.gui.add(this.sunController,'currentTime');\n targetCurrentTime.domElement.firstElementChild.setAttribute('disabled', 'true');\n\n // shadows.add(this.sunController.shadows,'near',0, 2000,1).onChange(this.#updateSunSettings.bind(this));\n // shadows.add(this.sunController.shadows,'far',0, 2000,1).onChange(this.#updateSunSettings.bind(this));\n // shadows.add(this.sunController.shadows,'size',0,1000,1).onChange(this.#updateSunSettings.bind(this));\n\n this.directionalLightShadowCamera = new CameraHelper(this.directionalLight.shadow.camera);\n\n threeJsVariables.scene.add(this.directionalLightShadowCamera);\n\n // Add sun path\n const geometry = new BufferGeometry().setFromPoints(this.points);\n const material = new LineBasicMaterial( { color: 0xff0000 } );\n const sunPath = new Line( geometry, material );\n\n threeJsVariables.scene.add(sunPath);\n\n threeJsVariables.orbitControls.maxDistance = Infinity;\n threeJsVariables.trackballControls.maxDistance = Infinity;\n\n const stats = new Stats();\n stats.dom.style.top = '20px';\n stats.dom.style.left = '7%';\n\n threeJsVariables.stats = stats;\n\n document.body.insertAdjacentElement('afterbegin', stats.dom);\n }\n\n #applyPreset() {\n\n if (!OrbitDayAndNight.usePresets) return;\n\n const uniforms = OrbitDayAndNight.sky.material.uniforms;\n\n uniforms[ 'turbidity' ].value = this.currentPreset.turbidity;\n uniforms[ 'rayleigh' ].value = this.currentPreset.rayleigh;\n uniforms[ 'mieCoefficient' ].value = this.currentPreset.mieCoefficient;\n uniforms[ 'mieDirectionalG' ].value = this.currentPreset.mieDirectionalG;\n uniforms[ 'stars' ].value = this.currentPreset.stars;\n uniforms[ 'clouds' ].value.copy(this.currentPreset.cloudsColor);\n\n this.directionalLight.intensity = this.currentPreset.directionalIntensity * Math.PI;\n this.directionalLight.color.copy(this.currentPreset.directionalColor);\n this.secondDirectionalLight?.updateParams();\n this.ambientLight.color.copy(this.currentPreset.ambientColor);\n this.ambientLight.intensity = this.currentPreset.ambientIntensity * Math.PI;\n // OrbitDayAndNight.lens.visible = this.currentPreset.sun;\n OSMEnv.updateSeaColor(this.currentPreset.seaColor,this.currentPreset.seaWaveColor);\n\n const trees = OSMEnv.osm.getObjectByName('Trees');\n if (trees) {\n trees.traverse(el => {\n if (el.isPoints) {\n el.material.color.copy(this.currentPreset.treeColor);\n }\n });\n }\n\n\n }\n\n #updateSunSettings() {\n const uniforms = OrbitDayAndNight.sky.material.uniforms;\n\n uniforms[ 'turbidity' ].value = this.sunController.turbidity;\n uniforms[ 'rayleigh' ].value = this.sunController.rayleigh;\n uniforms[ 'mieCoefficient' ].value = this.sunController.mieCoefficient;\n uniforms[ 'mieDirectionalG' ].value = this.sunController.mieDirectionalG;\n\n\n // const waterUniforms = this.water.material.uniforms;\n //\n // waterUniforms.alpha.value = this.sunController.water.alpha;\n // waterUniforms.size.value = this.sunController.water.size;\n // waterUniforms.distortionScale.value = this.sunController.water.distortionScale;\n // waterUniforms.sunColor.value.set(this.sunController.water.sunColor);\n // waterUniforms.waterColor.value.set(this.sunController.water.waterColor);\n\n switch (this.sunController.toneMapping) {\n case 'None':\n threeJsVariables.renderer.toneMapping = NoToneMapping;\n break;\n case 'Linear':\n threeJsVariables.renderer.toneMapping = LinearToneMapping;\n break;\n case 'Reinhard':\n threeJsVariables.renderer.toneMapping = ReinhardToneMapping;\n break;\n case 'Cineon':\n threeJsVariables.renderer.toneMapping = CineonToneMapping;\n break;\n case 'Filmic':\n threeJsVariables.renderer.toneMapping = ACESFilmicToneMapping;\n break;\n }\n\n switch (this.sunController.colorSpace) {\n case 'Linear':\n threeJsVariables.renderer.colorSpace = LinearSRGBColorSpace;\n break;\n case 'sRGB':\n threeJsVariables.renderer.colorSpace = SRGBColorSpace;\n break;\n }\n\n // threeJsVariables.renderer.toneMappingExposure = this.sunController.exposure;\n // this.sky.scale.setScalar(this.sunController.radius);\n // this.fog.color.set(this.sunController.fog);\n\n //Lights\n // this.directionalLight.intensity = this.currentPreset.directionalIntensity;\n // this.directionalLight.color.copy(this.currentPreset.directionalColor);\n //\n // this.ambientLight.intensity = this.currentPreset.ambientIntensity;\n // this.ambientLight.color.copy(this.currentPreset.ambientColor);\n\n //Shadows\n this.directionalLight.shadow.camera.near = this.sunController.shadows.near;\n this.directionalLight.shadow.camera.far = this.sunController.shadows.far;\n this.directionalLight.shadow.camera.right = this.sunController.shadows.size;\n this.directionalLight.shadow.camera.left = - this.sunController.shadows.size;\n this.directionalLight.shadow.camera.top\t= this.sunController.shadows.size;\n this.directionalLight.shadow.camera.bottom = - this.sunController.shadows.size;\n\n this.directionalLightShadowCamera.update();\n this.directionalLight.shadow.camera.updateProjectionMatrix();\n\n this.pointLightGroup.traverse(el => {\n if (el.name === 'building light') {\n el.intensity = this.sunController.pointLight.intensity;\n el.distance = this.sunController.pointLight.distance;\n el.decay = this.sunController.pointLight.decay;\n el.penumbra = this.sunController.pointLight.penumbra;\n el.angle = this.sunController.pointLight.angle;\n // el.power = this.sunController.pointLight.power;\n }\n //\n });\n\n\n\n }\n\n mergePresetToCurrent() {\n this.currentPreset.turbidity = this.activePreset.turbidity.lerp(this.alpha);\n this.currentPreset.rayleigh = this.activePreset.rayleigh.lerp(this.alpha);\n this.currentPreset.mieDirectionalG = this.activePreset.mieDirectionalG.lerp(this.alpha);\n this.currentPreset.mieCoefficient = this.activePreset.mieCoefficient.lerp(this.alpha);\n this.currentPreset.directionalIntensity = this.activePreset.directionalIntensity.lerp(this.alpha);\n this.currentPreset.ambientIntensity = this.activePreset.ambientIntensity.lerp(this.alpha);\n this.currentPreset.pointLightIntensity = this.activePreset.pointLightIntensity.lerp(this.alpha);\n this.currentPreset.buildingEmissiveIntensity = this.activePreset.buildingEmissiveIntensity.lerp(this.alpha);\n\n if (this.alphaDirection < 0) {\n this.currentPreset.seaColor.lerp(this.activePreset.seaColor,1 - this.alpha);\n this.currentPreset.seaWaveColor.lerp(this.activePreset.seaWaveColor, 1 - this.alpha);\n this.currentPreset.cloudsColor.lerp(this.activePreset.cloudsColor,1 - this.alpha);\n this.currentPreset.directionalColor.lerp(this.activePreset.directionalColor,1 - this.alpha);\n this.currentPreset.ambientColor.lerp(this.activePreset.ambientColor,1 - this.alpha);\n this.currentPreset.treeColor.lerp(this.activePreset.treeColor,1 - this.alpha);\n\n } else {\n this.currentPreset.directionalColor.lerp(this.activePreset.directionalColor,this.alpha);\n this.currentPreset.ambientColor.lerp(this.activePreset.ambientColor,this.alpha);\n this.currentPreset.seaColor.lerp(this.activePreset.seaColor,this.alpha);\n this.currentPreset.seaWaveColor.lerp(this.activePreset.seaWaveColor,this.alpha);\n this.currentPreset.cloudsColor.lerp(this.activePreset.cloudsColor,this.alpha);\n this.currentPreset.treeColor.lerp(this.activePreset.treeColor,this.alpha);\n }\n\n this.currentPreset.stars = this.activePreset.stars.lerp(this.alpha);\n this.currentPreset.sun = this.activePreset.sun;\n\n this.#applyPreset();\n\n // if (this.activePreset.osmLightMapIntensity) {\n this.currentPreset.osmLightMapIntensity = this.activePreset.osmLightMapIntensity.lerp(this.alpha);\n OSMEnv.updateLightMap(this.currentPreset.osmLightMapIntensity);\n // }\n\n // if (this.activePreset.osmEnvMapIntensity) {\n this.currentPreset.osmEnvMapIntensity = this.activePreset.osmEnvMapIntensity.lerp(this.alpha);\n OSMEnv.updateEnvMapIntensity(this.currentPreset.osmEnvMapIntensity);\n // }\n\n // if (this.activePreset.tilesIntensity) {\n this.currentPreset.tilesIntensity = this.activePreset.tilesIntensity.lerp(this.alpha);\n this.changeTilesIntensity(this.currentPreset.tilesIntensity)\n // }\n\n // if (this.activePreset.buildingIntensity) {\n this.currentPreset.buildingIntensity = this.activePreset.buildingIntensity.lerp(this.alpha);\n this.changeMainBuildingIntensity(this.currentPreset.buildingIntensity);\n // }\n\n // if (Weather.selectedWeather.id === 'clouds') {\n // const clouds = Weather.effects['clouds'].particles;\n //\n // clouds.forEach(cloud => {\n // cloud.material.color.copy(this.currentPreset.cloudsColor);\n // })\n // }\n\n this.updatePointsLight(this.currentPreset.pointLightIntensity);\n this.updateBuildingsEmissive();\n\n }\n\n static addSun(params = {}) {\n const {clouds, sky} = config.features.dayNight.settings;\n const sunGroup = new Group();\n sunGroup.name = 'Box';\n const turbidity = params.turbidity || 2;\n const rayleigh = params.rayleigh || 1;\n const mieCoefficient = params.mieCoefficient || 0.005;\n const mieDirectionalG = params.mieDirectionalG || 0.8;\n const sunPosition = this.points?.length > 0\n ? this.points[0].clone()\n : new Vector3(0,100,100);\n const useTime = params.useTime || false;\n\n Sky.SkyShader.uniforms = {\n 'turbidity': { value: turbidity },\n 'rayleigh': { value: rayleigh },\n 'mieCoefficient': { value: mieCoefficient },\n 'mieDirectionalG': { value: mieDirectionalG },\n 'sunPosition': { value: sunPosition },\n 'up': { value: new Vector3( 0, 1, 0 ) },\n 'stars': {value: 0.0},\n 'clouds': {value: new Color().setStyle('#ffffff',LinearSRGBColorSpace)},\n 'showClouds': {value: false},\n 'useTime': {value: useTime},\n 'cloudsScale': {value: clouds.scale },\n 'cloudsDark': {value: clouds.dark},\n 'cloudsLight': {value: clouds.light},\n 'cloudsCover': {value: clouds.cover},\n 'cloudsAlpha': {value: clouds.alpha},\n 'cloudsTint': {value: clouds.tint},\n 'sunriseTime': {value: 0.0},\n 'sunsetTime': {value: 0.0},\n 'currentTime': {value: 0.0},\n 'dayStartTime': {value: 0.0},\n 'dayEndTime': {value: 0.0},\n 'uTime': {value: 0.0},\n 'cloudsSpeed': {value: 0.002}\n };\n\n Sky.SkyShader.vertexShader = skyVertex;\n Sky.SkyShader.fragmentShader = skyFragment;\n\n const scale = sky?.scale || 3000;\n OrbitDayAndNight.sky = new Sky();\n OrbitDayAndNight.sky.material.transparent = true;\n OrbitDayAndNight.sky.material.needsUpdate = true;\n OrbitDayAndNight.sky.geometry = new SphereGeometry(1,64,64);\n OrbitDayAndNight.sky.scale.setScalar(scale);\n\n sunGroup.add(OrbitDayAndNight.sky);\n\n // OrbitDayAndNight.lens = new Lensflare();\n // OrbitDayAndNight.lens.addElement(new LensflareElement(OrbitDayAndNight.preloaded.lensFlare,60,0.6));\n // OrbitDayAndNight.lens.addElement(new LensflareElement(OrbitDayAndNight.preloaded.lensFlare,70,0.7));\n // OrbitDayAndNight.lens.addElement(new LensflareElement(OrbitDayAndNight.preloaded.lensFlare,120,0.9));\n // OrbitDayAndNight.lens.addElement(new LensflareElement(OrbitDayAndNight.preloaded.lensFlare,70,1));\n //\n // sunGroup.add(OrbitDayAndNight.lens);\n\n return sunGroup;\n }\n\n static get isActive() {\n return OrbitDayAndNight.active;\n }\n\n static get isActiveAndSelected() {\n return !!(OrbitDayAndNight.active && OrbitDayAndNight.osmSelected);\n }\n\n static get hasBackgroundToggle() {\n return config.features.dayNight?.hasOwnProperty('checked');\n }\n\n static toggle(action) {\n if (!OrbitDayAndNight.isActiveAndSelected || BmbyMode.active)\n return;\n\n OSMEnv.toggle(action);\n Environment.toggle3D(action)\n\n if (config.resources.background.cylinderBg !== 'sky')\n OrbitDayAndNight.sky.visible = action === 'show';\n // const tl = gsap.timeline({\n // paused: true,\n // onStart: () => {\n //\n // },\n // onComplete: () => {\n //\n // }\n // });\n }\n\n // addSun() {\n //\n // Sky.SkyShader.uniforms = {\n // 'turbidity': { value: 2 },\n // 'rayleigh': { value: 1 },\n // 'mieCoefficient': { value: 0.005 },\n // 'mieDirectionalG': { value: 0.8 },\n // 'sunPosition': { value: new Vector3() },\n // 'up': { value: new Vector3( 0, 1, 0 ) },\n // 'stars': {value: 0.0}\n // };\n //\n // Sky.SkyShader.fragmentShader = skyFragment;\n //\n // this.sky = new Sky();\n // this.sky.scale.setScalar(4500);\n //\n // threeJsVariables.scene.add(this.sky);\n //\n // this.sun = new Lensflare();\n // this.sun.addElement(new LensflareElement(OrbitDayAndNight.preloaded.lensFlare,60,0.6));\n // this.sun.addElement(new LensflareElement(OrbitDayAndNight.preloaded.lensFlare,70,0.7));\n // this.sun.addElement(new LensflareElement(OrbitDayAndNight.preloaded.lensFlare,120,0.9));\n // this.sun.addElement(new LensflareElement(OrbitDayAndNight.preloaded.lensFlare,70,1));\n //\n // threeJsVariables.scene.add(this.sun);\n // }\n\n addPointLight() {\n\n if (isMobile) return;\n\n this.pointLightGroup = new Group();\n this.pointLightGroup.name = 'night lights';\n //\n // const dracoLoader = new DRACOLoader().setDecoderPath('js/libs/gltf/');\n // const loader = new GLTFLoader().setDRACOLoader(dracoLoader);\n //\n // const url = `${config.cdnRepository}/${config.projectFolder}/resources/points/`;\n // const sprite = this.textureLoader.load(url + 'lightSprite.png');\n //\n // loader.load(url + 'lightPoints.glb',points => {\n //\n // console.log(points);\n // const positions = [];\n // const geometry = new BufferGeometry();\n //\n // points.scene.traverse(point => {\n // if (point.name.startsWith('Dummy')) {\n // const {x,y,z} = point.position;\n // positions.push(x,y,z);\n // }\n // });\n //\n // geometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ));\n //\n // const material = new PointsMaterial({\n // size: 10,\n // sizeAttenuation: true,\n // map: sprite,\n // transparent: true,\n // depthWrite:false\n // });\n //\n // const particles = new Points(geometry,material);\n // particles.name = 'city light';\n // particles.rotation.y = 1.37;\n // particles.visible = false;\n //\n // this.pointLightGroup.add(particles);\n // });\n\n const highwaySettings = config.features.publicLayers?.layers.find(el => el.type === 'highway');\n this.pointLightGroup.position.set(0, highwaySettings.position.y,0);\n // this.pointLightGroup.visible = true;\n\n const target = new Object3D();\n const v = new Vector3(1,0,0);\n const axis = new Vector3(0,1,0).normalize();\n const distance = 800;\n const distanceVector = new Vector3();\n\n [0,Math.PI / 2, -Math.PI / 2, Math.PI].forEach(angel => {\n distanceVector.copy(v).setLength(distance).applyAxisAngle(axis,angel);\n const light = new SpotLight(new Color().setStyle('#ffef8f',LinearSRGBColorSpace),0,2000,1.57,1,0);\n light.castShadow = false;\n light.name = 'env light';\n light.position.copy(distanceVector);\n light.target = target;\n\n this.pointLightGroup.add(light);\n });\n\n\n //Add buildings light\n const projectBuildings = threeJsVariables.scene.getObjectByName('Project Buildings');\n const labels = threeJsVariables.scene.getObjectByName('buildingsLabelsGroup');\n const projectSize = new Box3().setFromObject(projectBuildings).getSize(new Vector3());\n const projectCenter = new Box3().setFromObject(projectBuildings).getCenter(new Vector3());\n const y = labels?.children[0]?.position.y * 1.5 || 300;\n const projectLength = projectSize.length();\n const buildingTarget = new Object3D();\n buildingTarget.position.set(projectCenter.x,y,projectCenter.z);\n buildingTarget.name = 'building light target';\n\n const buildingVec = new Vector3().copy(projectCenter).setY(0).normalize();\n this.pointLightGroup.add(buildingTarget);\n\n [0,MathUtils.degToRad(120),MathUtils.degToRad(240)].forEach(angel => {\n distanceVector.copy(buildingVec).setLength(projectLength).applyAxisAngle(axis,angel);\n const buildingLight = new SpotLight(new Color().setStyle('#fcf1b1',LinearSRGBColorSpace),0,y,0.73,1,0);\n buildingLight.castShadow = false;\n buildingLight.name = 'building light';\n buildingLight.position.copy(distanceVector);\n buildingLight.target = buildingTarget;\n this.pointLightGroup.add(buildingLight);\n });\n\n threeJsVariables.scene.add(this.pointLightGroup);\n }\n\n updatePointsLight(intensity) {\n\n if (isMobile) return;\n\n this.pointLightGroup.traverse(el => {\n if (el.name === 'env light') {\n el.intensity = intensity;\n } else if (el.name === 'building light') {\n el.intensity = intensity * 3;\n }\n });\n }\n\n updateNightBuildings(alpha) {\n OrbitDayAndNight.buildingMaterials.forEach(data => {\n data.material[data.key] = 1 - alpha;\n });\n }\n\n updateBuildingsEmissive() {\n if (!OrbitDayAndNight.usePresets) return;\n // if (this.currentPreset.buildingEmissiveIntensity === 0) return;\n OrbitDayAndNight.preloaded.materials.forEach(material => {\n if (this.reset) {\n if (material.emissiveMap) {\n material.emissive.setStyle(material.userData.defaultSettings\n ? material.userData.defaultSettings.emissive : '#000000',LinearSRGBColorSpace);\n material.emissiveIntensity = material.userData.defaultSettings\n ? material.userData.defaultSettings.emissiveIntensity\n : this.currentPreset.buildingEmissiveIntensity;\n } else {\n material.lightMapIntensity = material.userData.defaultSettings\n ? material.userData.defaultSettings.lightMapIntensity\n : this.currentPreset.buildingEmissiveIntensity;\n }\n } else {\n if (material.emissiveMap) {\n material.emissive.setStyle('#ffffff',LinearSRGBColorSpace);\n material.emissiveIntensity = this.currentPreset.buildingEmissiveIntensity;\n } else {\n material.lightMapIntensity = this.currentPreset.buildingEmissiveIntensity;\n }\n }\n });\n }\n\n buildSunPath() {\n const axis = new Vector3(0,-1,0).normalize();\n const polarAxis = new Vector3(1,0,0);\n const azimuth = new Euler(0,config.threejs.compass.correction - Math.PI,0,'XYZ');\n\n for (let i = -0.02; i < 3.16; i +=0.01){\n\n const v = new Vector3(-1,0,0).applyAxisAngle(axis,i);\n v.applyAxisAngle(polarAxis,MathUtils.degToRad(90 - this.center.lat));\n v.setLength(700);\n v.applyEuler(azimuth);\n\n this.points.push(v);\n }\n\n this.curve = new CatmullRomCurve3(this.points);\n }\n\n static preload(loader,parentGroup) {\n if (BmbyMode.active)\n return;\n\n // if (!OrbitDayAndNight.active) return;\n if (!OrbitDayAndNight.preloaded) {\n OrbitDayAndNight.preloaded = {};\n OrbitDayAndNight.preloaded.materials = [];\n };\n\n const textureLoader = loader.textureLoader;\n const url = `${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/textures/building/`;\n\n // For sun\n // OrbitDayAndNight.preloaded.lensFlare = textureLoader.load('./assets/textures/lensflare/lensflare3.png',loadedTexture => threeJsVariables.renderer.initTexture(loadedTexture));\n\n const sunGroup = OrbitDayAndNight.addSun();\n parentGroup.add(sunGroup);\n\n // Load and apply additional textures\n const texturesBundle = {};\n const textures = config.features.dayNight?.buildingAdditionalTextures || [];\n\n textures.forEach(obj => {\n\n const targetModel = threeJsVariables.scene.getObjectByName(obj.model);\n\n if (targetModel) {\n\n Object.entries(obj.material).forEach(([key,value]) => {\n\n if (!texturesBundle[url + value]) {\n texturesBundle[url + value] = textureLoader.load(url + value,loadedTexture => threeJsVariables.renderer.initTexture(loadedTexture));\n }\n\n if (targetModel.isGroup) {\n const targetMaterial = targetModel.children[0].material;\n\n if (Array.isArray(targetMaterial)) {\n targetMaterial.forEach(subMaterial => {\n if (key === 'emissiveMap') {\n subMaterial.emissive.setStyle('#ffffff',LinearSRGBColorSpace);\n subMaterial.emissiveIntensity = 0;\n }\n\n subMaterial[key] = texturesBundle[url + value];\n OrbitDayAndNight.preloaded.materials.push(subMaterial);\n });\n } else {\n if (key === 'emissiveMap') {\n targetModel.children[0].material.emissive.setStyle('#ffffff',LinearSRGBColorSpace);\n targetModel.children[0].material.emissiveIntensity = 0;\n }\n\n targetModel.children[0].material[key] = texturesBundle[url + value];\n OrbitDayAndNight.preloaded.materials.push(targetModel.children[0].material);\n }\n\n } else {\n\n if (key === 'emissiveMap') {\n targetModel.material.emissive.setStyle('#ffffff',LinearSRGBColorSpace);\n targetModel.material.emissiveIntensity = 0;\n }\n\n targetModel.material[key] = texturesBundle[url + value];\n OrbitDayAndNight.preloaded.materials.push(targetModel.material);\n }\n\n });\n }\n\n });\n }\n\n static getScope() {\n return new Promise(resolve => {\n const interval = setInterval(() => {\n if (OrbitDayAndNight.scope) {\n clearInterval(interval);\n resolve(OrbitDayAndNight.scope);\n }\n },100);\n });\n }\n\n static presetsToggle(state) {\n if (!OrbitDayAndNight.osmSelected) return;\n\n switch (state) {\n case 'reset':\n OrbitDayAndNight.getScope().then(scope => scope.resetToDefault());\n break;\n case 'restore':\n OrbitDayAndNight.getScope().then(scope => scope.restorePreviouslyPreset());\n break;\n }\n }\n\n static async turnOff() {\n // if (config.features.privateHouseMode || isCylinderDisplayModeEqual('show all')) return new Promise(resolve => {\n // // OrbitDayAndNight.presetsToggle('reset');\n // resolve()\n // });\n return new Promise((resolve) => {\n if (!OrbitDayAndNight.isActive || BmbyMode.active)\n resolve();\n const switcher = document.querySelector('.environment-toggle-switcher');\n const toggler = switcher.querySelector('.switch__checkbox');\n DayNightButton.scope?.resetToDefault();\n if (OrbitDayAndNight.isActiveAndSelected) {\n toggler.checked = false;\n toggler.dispatchEvent(new Event('change'));\n }\n if (Environment.getActivePublicLayer() && Environment.getActivePublicLayer().id !== 'poi') {\n const layer = document.querySelector('.public-layer__btn.poi') ||\n document.querySelector(`.public-layer__btn[data-public-layer=\"${Environment.getActivePublicLayer().id}\"]`);\n Environment.scope.publicLayersHandler({ target: layer });\n }\n\n setTimeout(() => { resolve(true) }, 100);\n });\n }\n\n static turnOn() {\n if (OrbitDayAndNight.isActive && !OrbitDayAndNight.isActiveAndSelected) {\n const switcher = document.querySelector('.environment-toggle-switcher');\n const toggler = switcher.querySelector('.switch__checkbox');\n toggler.checked = true;\n toggler.dispatchEvent(new Event('change'));\n }\n }\n}\n\n\nfunction getCastShadow () {\n if (threeJsVariables.bundleConfig && threeJsVariables.bundleConfig.version) {\n return threeJsVariables.bundleConfig.lights.directionalLight.castShadow;\n } else {\n return config.threejs.lights.directionalLight.castShadow;\n }\n}\n","import { Color, LinearSRGBColorSpace, Mesh, RepeatWrapping, ShaderMaterial, TextureLoader, Vector2 } from 'three';\nimport vertex from './vertex.glsl';\nimport fragment from './fragmnet.glsl';\nimport * as dat from 'dat.gui';\nimport { Cloudflare } from '../../../api/Cloudflare';\nimport {assignDeep, resourcesFolder, threeJsVariables} from '../../../../settings';\n\nconst DEFAULT_SETTINGS = {\n scale: 1,\n speed: 0.01,\n flowX: -0.138,\n flowY: 1,\n distortionStrength: 0.12,\n noise: `${config.cdnRepository}/DreamsGeneralStorage/textures/water/noise.jpg`,\n water: `${config.cdnRepository}/DreamsGeneralStorage/textures/water/water.jpg`\n};\n\nexport class OrbitSea extends Mesh{\n constructor (geometry,options = {}) {\n super(geometry);\n this.params = assignDeep(DEFAULT_SETTINGS,config.features.dayNight.settings.sea);\n const loader = options.loader || new TextureLoader();\n const noiseUrl = this.params.noise.match(/http/g) ? this.params.noise :\n `${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/points/${this.params.noise}`;\n const waterUrl = this.params.water.match(/http/g) ? this.params.water :\n `${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/points/${this.params.water}`;\n\n const noise = loader.load(noiseUrl,loadedTexture => threeJsVariables.renderer.initTexture(loadedTexture));\n const water = loader.load(waterUrl,loadedTexture => threeJsVariables.renderer.initTexture(loadedTexture));\n noise.wrapS = noise.wrapT = RepeatWrapping;\n water.wrapS = water.wrapT = RepeatWrapping;\n\n this.material = new ShaderMaterial({\n vertexShader: vertex,\n fragmentShader: fragment,\n uniforms: {\n uTime: { value: 0 },\n uWaterScale: { value: this.params.scale },\n uDistortionStrength: { value: this.params.distortionStrength },\n uWaterSpeed: { value: this.params.speed },\n uFlow: {value: new Vector2(this.params.flowX,this.params.flowY)},\n wave: {value: noise},\n water: {value: water},\n uSeaColor: { value: new Color().setStyle('#ffffff',LinearSRGBColorSpace)},\n uWaveColor: { value: new Color().setStyle('#ffffff',LinearSRGBColorSpace)}\n }\n });\n\n if (this.params.debug) {\n this.debug();\n }\n }\n\n debug() {\n const gui = new dat.GUI();\n gui.add(this.params,'scale',0, 5, 0.001).onChange(v => {\n this.material.uniforms.uWaterScale.value = v;\n });\n gui.add(this.params,'flowX',-5, 5, 0.001).onChange(v => {\n this.material.uniforms.uFlow.value.x = v;\n });\n gui.add(this.params,'flowY',-5, 5, 0.001).onChange(v => {\n this.material.uniforms.uFlow.value.y = v;\n });\n\n gui.add(this.params,'speed',0, 0.1, 0.0001).onChange(v => {\n this.material.uniforms.uWaterSpeed.value = v;\n });\n\n gui.add(this.params,'distortionStrength',-1, 1, 0.001).onChange(v => {\n this.material.uniforms.uDistortionStrength.value = v;\n });\n }\n\n}\n\n","'use strict';\n\nimport {threeJsVariables} from \"../../../settings\";\nimport { BufferGeometry, LinearMipMapLinearFilter, Mesh, PlaneGeometry, ShaderMaterial, TextureLoader } from 'three';\nimport { getWorldData } from '../../controls/orbitControls';\nimport { isMobile} from '../../../settings';\n\nexport function cloudsInit() {\n const vertexShader = `\n\t\t\t\tvarying vec2 vUv;\n\n void main() {\n\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n\t\t\t\t`;\n const fragmentShader = `\n uniform sampler2D map;\n\n uniform vec3 fogColor;\n uniform float fogNear;\n uniform float fogFar;\n\n varying vec2 vUv;\n\n void main() {\n\n float depth = gl_FragCoord.z / gl_FragCoord.w;\n float fogFactor = smoothstep( fogNear, fogFar, depth );\n\n gl_FragColor = texture2D( map, vUv );\n gl_FragColor.w *= pow( gl_FragCoord.z, 20.0 );\n gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n\n }\n\t\t\t\t`;\n\n const textureLoader = new TextureLoader();\n const texture = textureLoader.load('./${resourcesFolder}/textures/cloud/cloud10.png');\n\n texture.magFilter = LinearMipMapLinearFilter;\n texture.minFilter = LinearMipMapLinearFilter;\n\n const fog = new Fog(0x4584b4,-100,3000);\n\n const geometry = new BufferGeometry();\n\n const material = new ShaderMaterial({\n uniforms:{\n map:{type:'t',value: texture},\n fogColor: {type: 'c', value: fog.color},\n fogNear: {type: 'f', value: fog.near},\n fogFar: { type: 'f', value: fog.far },\n },\n\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n depthWrite: false,\n depthTest: false,\n transparent: true,\n });\n\n const plane = new Mesh(new PlaneGeometry(64,64));\n\n for (let i=0; i < 300; i++){\n plane.position.x = Math.random() * 1000 - 500;\n plane.position.y = - Math.random() * Math.random() * 200 -15;\n plane.position.z = i * 3.5 ;\n plane.rotation.x = -1.72;\n plane.scale.x = plane.scale.y = plane.scale.z = 2;\n\n plane.updateMatrix();\n geometry.merge(plane.geometry,plane.matrix);\n }\n\n const {cameraVector} = getWorldData();\n const mesh = new Mesh(geometry,material);\n mesh.name = 'clouds';\n mesh.position.set(cameraVector.x,cameraVector.y - 150,cameraVector.z - 100);\n mesh.rotation.set(-0.230,0,0);\n\n threeJsVariables.scene.add(mesh);\n threeJsVariables.renderList.reorder();\n\n}\n\nexport function cloudsPositionCorrection () {\n return;\n const clouds = threeJsVariables.scene.getObjectByName('clouds');\n if (clouds){\n const {cameraVector} = getWorldData();\n const posY = isMobile && window.innerWidth > window.innerHeight ? cameraVector.y - 680 : isMobile && window.innerWidth < window.innerHeight ? cameraVector.y - 400 : cameraVector.y - 500;\n clouds.position.set(cameraVector.x,posY,cameraVector.z);\n }\n}\n\nexport const removeClouds = () => {\n const clouds = threeJsVariables.scene.getObjectByName('clouds');\n if (clouds){\n threeJsVariables.scene.remove(clouds);\n }\n}\n","'use strict';\n\n\nimport { AnimationMixer, Group, LinearSRGBColorSpace, Mesh, MeshBasicMaterial, TextureLoader } from 'three';\nimport {Cloudflare} from \"../../../api/Cloudflare\";\n\nexport class Cars {\n #active = config.features.liteMode.settings.cars?.active;\n #url = null;\n #loader = null;\n #ready = false;\n #group = new Group();\n #animationMixer = null;\n #speed = config.features.liteMode.settings.cars?.speed || 1.0;\n #position = config.features.liteMode.settings.cars?.position || { x:0, y:0, z:0 };\n #rotation = config.features.liteMode.settings.cars?.rotation || { x:0, y:0, z:0 };\n #scale = config.features.liteMode.settings.cars?.scale || { x:1, y:1, z:1 };\n #textureUrl;\n\n\n constructor (url,loader) {\n this.#url = `${url}${config.features.liteMode.settings.cars?.path}?v=${Cloudflare.version}` || '';\n this.#textureUrl = url + 'cars_lite_texture.jpg';\n this.#loader = loader;\n\n return this;\n }\n\n create() {\n if (!this.#active) return new Promise(resolve => resolve('disabled'));\n\n return new Promise(resolve => {\n this.#loader.load(this.#url, model => {\n const texture = new TextureLoader().load(this.#textureUrl);\n texture.colorSpace = LinearSRGBColorSpace;\n\n model.traverse(el => {\n if (el.isMesh) {\n // let color;\n //\n // if (this.#colors.length){\n // const randomValue = Math.floor(Math.random() * (this.#colors.length + 1));\n // const randomColor = this.#colors[randomValue];\n // color = new Color(randomColor);\n // } else {\n // color = new Color('#000000');\n // }\n\n const geometry = el.geometry.clone();\n const material = new MeshBasicMaterial({\n depthTest: false,\n depthWrite: false,\n transparent: true,\n map: texture\n });\n const mesh = new Mesh(geometry,material);\n mesh.name = el.name;\n mesh.position.copy(el.position);\n mesh.rotation.copy(el.rotation);\n mesh.scale.copy(el.scale);\n\n this.#group.add(mesh);\n }\n });\n\n const animations = model.animations;\n this.#animationMixer = new AnimationMixer(this.#group);\n\n animations.forEach(clip => {\n this.#animationMixer.clipAction(clip).play();\n });\n\n // this.#group.rotation.set(Math.degToRad(-50),0,0);\n\n\n this.#group.rotation.set(this.#rotation.x,this.#rotation.y,this.#rotation.z);\n this.#group.position.set(this.#position.x,this.#position.y,this.#position.z);\n this.#group.scale.set(this.#scale.x,this.#scale.y,this.#scale.z);\n\n this.#group.name = 'cars';\n this.#ready = true;\n resolve(this.#group);\n });\n\n });\n }\n\n updateTime(time) {\n if (this.#ready) {\n this.#animationMixer.update(time * this.#speed * 1000);\n }\n }\n\n switcher(state) {\n if (this.#ready) {\n switch (state) {\n case 'show':\n this.#group.visible = true;\n break;\n case 'hide':\n this.#group.visible = false;\n break;\n }\n }\n }\n\n}\n","'use strict';\n\nimport { projectMode } from '../../../../settings';\nimport { createHtmlElement } from '../../../../functions';\nimport { Switch } from '../../../interfaces/switchers/Switch';\nimport { Range } from '../../../interfaces/switchers/Range';\nimport gsap from 'gsap';\nimport { changeLangToCurrent } from '../../../components/langSwitcher/langSwitcher';\nimport { Time } from '../../../projectTime/Time';\nimport { BaseElement } from '../../../interfaces/BaseElement';\n\nexport class TimesOfDay extends Time {\n static #ready = false;\n static active = Boolean(config.features.liteMode?.active && config.features.liteMode?.images.night);\n // #currentTime = 0;\n // #startTimeLine = 0;\n // #endTimeLine = 0;\n // #sunrise = 0;\n // #beforeSunrise = 0;\n // #afterSunrise = 0;\n // #sunset = 0;\n // #beforeSunset = 0;\n // #afterSunset = 0;\n // #switcher = null;\n // #range = null;\n // #currentTimeUse = true;\n // #shaderValue = 0.0;\n // #api = config.features.weather?.api;\n // #apiUrl = `${this.#api.domain}?lat=${config.localization.latitude}&lon=${config.localization.longitude}&units=${this.#api.units}&appid=${this.#api.id}`;\n\n constructor (parent,response) {\n super(response);\n\n //if (!this.#active) return;\n //this.#time = new Date(utc + (1000*Weather.#weatherData.timezone));\n this.parent = parent;\n this.response = response;\n this.currentTime = 0;\n this.switcher = null;\n this.range = null;\n this.currentTimeUse = true;\n this.switcherState = null;\n this.shaderValue = 0.0;\n this.blockSwitcher = false;\n\n // console.log('start', this.#startTimeLine);\n // console.log('sunrise', this.#sunrise);\n // console.log('sunset', this.#sunset);\n // console.log('end', this.#endTimeLine);\n //this.#preData();\n\n this.create();\n }\n\n // async #preData() {\n // const response = await axios.get(this.#apiUrl);\n // if (response.status !== 200) return;\n // this.data = await response.data;\n //\n // const d = new Date();\n // const utc = d.getTime() + (d.getTimezoneOffset() * 60000);\n //\n // const TIME_THRESHOLD = 2;\n // const oneHour = 3600000;\n //\n // const sunriseTime = new Date(this.data.sys.sunrise * 1000);\n // const sunsetTime = new Date(this.data.sys.sunset * 1000);\n //\n // this.#currentTime = new Date(utc + (1000*Weather.weatherData.timezone)).getTime();\n // this.#startTimeLine = new Date(this.#currentTime).setHours(0,0,0,0);\n // this.#sunrise = sunriseTime.getTime() + (sunriseTime.getTimezoneOffset() * 60000) + this.data.timezone * 1000;\n // this.#beforeSunrise = this.#sunrise - TIME_THRESHOLD * oneHour;\n // this.#afterSunrise = this.#sunrise + TIME_THRESHOLD * oneHour;\n // this.#sunset = sunsetTime.getTime() + (sunsetTime.getTimezoneOffset() * 60000) + this.data.timezone * 1000;\n // this.#beforeSunset = this.#sunset - TIME_THRESHOLD * oneHour;\n // this.#afterSunset = this.#sunset + TIME_THRESHOLD * oneHour;\n // this.#endTimeLine = new Date(this.#currentTime).setHours(23,59,59,0);\n // }\n\n create() {\n //if (!this.#active) return;\n // const response = await axios.get(this.#apiUrl);\n // if (response.status !== 200) return;\n // this.data = await response.data;\n\n // const d = new Date();\n // const utc = d.getTime() + (d.getTimezoneOffset() * 60000);\n //\n // const TIME_THRESHOLD = 2;\n // const oneHour = 3600000;\n //\n // let sunriseTime = new Date(this.data.sys.sunrise * 1000);\n // let sunsetTime = new Date(this.data.sys.sunset * 1000);\n //\n this.currentTime = this.getDayTimeLine().currentTime;\n // this.#startTimeLine = new Date(this.#currentTime).setHours(0,0,0,0);\n // this.#sunrise = sunriseTime.getTime() + (sunriseTime.getTimezoneOffset() * 60000) + this.data.timezone * 1000;\n // this.#beforeSunrise = this.#sunrise - TIME_THRESHOLD * oneHour;\n // this.#afterSunrise = this.#sunrise + TIME_THRESHOLD * oneHour;\n // this.#sunset = sunsetTime.getTime() + (sunsetTime.getTimezoneOffset() * 60000) + this.data.timezone * 1000;\n // this.#beforeSunset = this.#sunset - TIME_THRESHOLD * oneHour;\n // this.#afterSunset = this.#sunset + TIME_THRESHOLD * oneHour;\n // this.#endTimeLine = new Date(this.#currentTime).setHours(23,59,59,0);\n\n const {\n dayStart,\n beforeSunrise,\n sunrise,\n afterSunrise,\n beforeSunset,\n sunset,\n afterSunset,\n dayEnd\n } = this.getDayTimeLine();\n\n\n this.currentTimeMainContainer = createHtmlElement(this.parent,'','div',['current-time__container','display-option']);\n const currentTimeToggle = createHtmlElement(this.currentTimeMainContainer,'','div',['current-time__toggle']);\n const currentTimeToggleText = createHtmlElement(currentTimeToggle,changeLangToCurrent('Current time lighting'),'span',['current-time__toggle__text','language-string']);\n currentTimeToggleText.setAttribute('data-dictionary','Current time lighting');\n\n this.switcher = new Switch(currentTimeToggle);\n this.switcher.checked = true;\n this.switcherState = true;\n this.switcher.listener = this.#switcherHandler.bind(this);\n\n this.range = new Range(this.currentTimeMainContainer,dayStart,dayEnd,1000,this.currentTime);\n this.range.element.classList.add('current-time__range');\n this.range.element.setAttribute('id','currentTime');\n this.range.addListener('input',(e) => this.updateTimesOfDay(undefined,e.target.value));\n this.range.addListener('mousedown', this.#turnOffSwitcher.bind(this));\n this.range.addListener('touchstart', this.#turnOffSwitcher.bind(this));\n this.rangeOutput = new BaseElement('output')\n .addClass('current-time__output')\n .addAttribute('for','currentTime')\n .appendTo(this.range.rangeContainer);\n this.rangeOutputTime = new Date();\n\n\n const sunriseTime = new Date(sunrise);\n const sunsetTime = new Date(sunset);\n const sunriseMinutes = sunriseTime.getMinutes() < 10 ? `0${sunriseTime.getMinutes()}` : sunriseTime.getMinutes();\n const sunsetMinutes = sunsetTime.getMinutes() < 10 ? `0${sunsetTime.getMinutes()}` : sunsetTime.getMinutes();\n\n const timeContainer = createHtmlElement(this.currentTimeMainContainer,'','div',['current-time__time-container']);\n const outputSunrise = createHtmlElement(timeContainer,`${sunriseTime.getHours()}:${sunriseMinutes}`,'span',['current-time__bubble','sunrise','icon-dawn']);\n const sunriseArrowUp = createHtmlElement(outputSunrise,'','span',['sunrise','icon-up1','current-time__sun-arrow']);\n\n this.#createSunMarker(outputSunrise,sunrise,17);\n const outputSunset = createHtmlElement(timeContainer,`${sunsetTime.getHours()}:${sunsetMinutes}`,'span',['current-time__bubble','sunset','icon-dawn']);\n const sunsetArrowDown = createHtmlElement(outputSunset,'','span',['sunset','icon-down1','current-time__sun-arrow','sunset-arrow']);\n\n this.#createSunMarker(outputSunset,sunset,8);\n\n const event = new Event('change');\n this.switcher.checkbox.dispatchEvent(event);\n TimesOfDay.#ready = true;\n }\n\n showCurrentTimeBubble() {\n const val = this.range.element.value;\n this.rangeOutputTime.setTime(val);\n const hours = this.rangeOutputTime.getHours();\n const minutes = this.rangeOutputTime.getMinutes() < '10' ? `0${this.rangeOutputTime.getMinutes()}` : this.rangeOutputTime.getMinutes();\n const min = this.range.element.min;\n const max = this.range.element.max;\n this.rangeOutput.innerHtml(`${hours}:${minutes}`);\n const position = Number(((val - min) * 100) / (max - min));\n this.rangeOutput.DOMElement.style.left = `calc(${position}% + (${8 - position * 0.2}px))`;\n }\n\n removeFromDisplayOptions() {\n this.switcher = null;\n this.range = null;\n this.currentTimeMainContainer.remove();\n }\n\n #createSunMarker(marker, value, correction) {\n const min = this.range.element.min;\n const max = this.range.element.max;\n const markerValue = Number(((value - min) * 100) / (max - min));\n const position = correction - (markerValue * 0.2);\n marker.style.left = `calc(${markerValue}% + (${position}px))`;\n }\n\n #turnOffSwitcher() {\n\n if (this.range.element.classList.contains('disabled')){\n this.switcher.checked = false;\n const event = new Event('change');\n this.switcher.checkbox.dispatchEvent(event);\n }\n }\n\n #switcherHandler(e) {\n if (!TimesOfDay.active) return;\n\n if (this.blockSwitcher) {\n this.switcher.checkbox.checked = this.switcherState;\n return;\n }\n\n this.switcherState = e.target.checked;\n switch (this.switcherState) {\n case true:\n const time = {value: Number(this.range.element.value)};\n\n gsap.to(time,{\n value: this.currentTime,\n duration: .7,\n onStart: () => {\n this.blockSwitcher = true;\n this.currentTimeToggle(false);\n this.range.classToggle('disabled');\n },\n onUpdate: () => {\n this.updateTimesOfDay(undefined, time.value);\n },\n onComplete: () => {\n this.blockSwitcher = false;\n this.currentTimeToggle(true);\n }\n });\n\n break;\n case false:\n this.range.classToggle('disabled');\n this.currentTimeToggle(false);\n break;\n }\n }\n\n refreshTime() {\n if (!TimesOfDay.active)\n return;\n\n this.currentTimeToggle() && this.updateTimesOfDay(this.getCurrentTimeMilliseconds);\n }\n\n\n updateTimesOfDay(time, manualTime) {\n if (!TimesOfDay.active)\n return;\n\n let currentTime;\n\n if (manualTime) {\n currentTime = Number(manualTime);\n } else {\n currentTime = time;\n this.currentTime = currentTime;\n }\n\n let from, to, timeFrom, timeTo, totalTime, timePast, ndcValue = undefined;\n\n const {\n beforeSunrise,\n afterSunrise,\n beforeSunset,\n afterSunset\n } = this.getDayTimeLine();\n\n\n if (currentTime <= beforeSunrise){\n ndcValue = 1.0;\n } else if (currentTime >= beforeSunrise && currentTime <= afterSunrise) {\n from = 1.0;\n to = 0;\n timeFrom = beforeSunrise;\n timeTo = afterSunrise;\n } else if (currentTime >= afterSunrise && currentTime <= beforeSunset){\n ndcValue = 0;\n } else if (currentTime >= beforeSunset && currentTime <= afterSunset) {\n from = 0;\n to = 1.0;\n timeFrom = beforeSunset;\n timeTo = afterSunset;\n } else {\n ndcValue = 1.0;\n }\n\n if (ndcValue !== undefined) {\n this.shaderValue = ndcValue;\n } else {\n\n totalTime = timeTo - timeFrom;\n timePast = currentTime - timeFrom;\n ndcValue = timePast / totalTime;\n\n if (from > to){\n this.shaderValue = from - ndcValue;\n } else {\n this.shaderValue = ndcValue\n }\n }\n\n this.#setTime(this.shaderValue,currentTime);\n }\n\n #setTime(value,rangeValue) {\n\n projectMode.LiteMode.sea.updateTimesOfDay(value);\n projectMode.LiteMode.trees.updateTimesOfDay(value);\n projectMode.LiteMode.sky.updateTimesOfDay(value);\n projectMode.LiteMode.plug.updateTimesOfDay(value);\n projectMode.LiteMode.updateTimesOfDay(value);\n\n this.range.element.value = rangeValue;\n this.showCurrentTimeBubble();\n }\n\n currentTimeToggle(value) {\n // if (!TimesOfDay.active) return;\n if (value === undefined) return this.currentTimeUse;\n\n this.currentTimeUse = value;\n }\n\n static isReady() {\n return TimesOfDay.#ready;\n }\n\n get isActive() {\n return TimesOfDay.active;\n }\n\n}\n","'use strict';\n\nimport { Mesh, ShaderMaterial } from 'three';\nimport vertex from './vertex.glsl';\nimport fragment from './fragment.glsl';\nimport {Cloudflare} from \"../../../api/Cloudflare\";\n\nexport class Plug {\n #active = config.features.liteMode.settings.plug?.active || false;\n #url = null;\n #loader = null;\n #dayTexture = null;\n #nightTexture = null;\n #mesh = null;\n #material = null;\n #ready = false;\n\n constructor (url,dayTexture,nightTexture,loader) {\n this.#url = `${url}${config.features.liteMode.settings.plug?.path}?v=${Cloudflare.version}` || '';\n this.#dayTexture = dayTexture;\n this.#nightTexture = nightTexture;\n this.#loader = loader;\n\n return this;\n }\n\n create(){\n if (!this.#active) return new Promise(resolve => resolve('disabled'));\n\n return new Promise(resolve => {\n\n this.#loader.load(this.#url, model => {\n model.traverse(el => {\n if (el.isMesh) {\n const geometry = el.geometry.clone();\n this.#material = new ShaderMaterial({\n vertexShader: vertex,\n fragmentShader: fragment,\n uniforms: {\n dayTexture: {\n value: this.#dayTexture\n },\n nightTexture: {\n value: this.#nightTexture\n },\n uTimesOfDay: {\n value: 0.0\n }\n },\n depthTest: false,\n depthWrite: false,\n transparent: true,\n opacity: 1\n });\n\n this.#mesh = new Mesh(geometry,this.#material);\n this.#mesh.name = el.name;\n this.#mesh.scale.copy(el.scale);\n this.#mesh.position.set(0,0,-0.2);\n this.#ready = true;\n resolve(this.#mesh);\n }\n });\n });\n\n });\n }\n\n updateTimesOfDay(time){\n if (this.#ready) {\n this.#material.uniforms.uTimesOfDay.value = time;\n }\n }\n\n switcher(state) {\n if (this.#ready) {\n switch (state) {\n case 'show':\n this.#mesh.visible = true;\n break;\n case 'hide':\n this.#mesh.visible = false;\n break;\n }\n }\n }\n}\n","'use strict';\n\nimport { Mesh, ShaderMaterial, Vector2 } from 'three';\nimport vertex from './vertex.glsl';\nimport fragment from './fragment.glsl';\nimport { projectMode } from '../../../../settings';\nimport {Cloudflare} from \"../../../api/Cloudflare\";\n\nexport class Sea {\n #active = config.features.liteMode.settings.sea?.active;\n #url = null;\n #loader = null;\n #dayTexture = null;\n #nightTexture = null;\n #depthTexture = null;\n #mesh = null;\n #material = null;\n #ready = false;\n #speed = config.features.liteMode.settings.sea.speed || 1.0;\n #scale = config.features.liteMode.settings.sea.scale || 1.0;\n #horizon = config.features.liteMode.settings.sea.horizon || 0.5;\n #direction = config.features.liteMode.settings.sea.direction || 1.57;\n #dark = config.features.liteMode.settings.sea.dark || 0.0;\n #light = config.features.liteMode.settings.sea.light || 0.0;\n #cover = config.features.liteMode.settings.sea.cover || 0.0;\n #alpha = config.features.liteMode.settings.sea.alpha || 0.0;\n #tint = config.features.liteMode.settings.sea.tint || 0.0;\n #minWave = config.features.liteMode.settings.sea.minWave || 0.0;\n #maxWave = config.features.liteMode.settings.sea.maxWave || 1.0;\n\n\n constructor (url,dayTexture,nightTexture,loader,depthTexture) {\n this.#url = `${url}${config.features.liteMode.settings.sea?.path}?v=${Cloudflare.version}` || '';\n this.#dayTexture = dayTexture;\n this.#nightTexture = nightTexture;\n this.#depthTexture = depthTexture;\n this.#loader = loader;\n\n return this;\n }\n\n create(){\n if (!this.#active) return new Promise(resolve => resolve('disabled'));\n\n return new Promise(resolve => {\n\n this.#loader.load(this.#url, model => {\n model.traverse(el => {\n if (el.isMesh) {\n const geometry = el.geometry.clone();\n this.#material = new ShaderMaterial({\n vertexShader: vertex,\n fragmentShader: fragment,\n uniforms: {\n seaTexture: {\n value: this.#dayTexture\n },\n nightSeaTexture: {\n value: this.#nightTexture\n },\n depthTexture: {\n value: this.#depthTexture\n },\n uTime: {\n value: 0.0\n },\n uTimesOfDay: {\n value: 0.0\n },\n uSpeed: {\n value: this.#speed\n },\n uScale: {\n value: this.#scale\n },\n uHorizon: {\n value: this.#horizon\n },\n uDirection: {\n value: this.#direction\n },\n uDark: {\n value: this.#dark\n },\n uLight: {\n value: this.#light\n },\n uCover: {\n value: this.#cover\n },\n uAlpha: {\n value: this.#alpha\n },\n uTint: {\n value: this.#tint\n },\n uMinWave: {\n value: this.#minWave\n },\n uMaxWave: {\n value: this.#maxWave\n },\n uDepthMouse: {\n value: new Vector2()\n }\n },\n depthTest: false,\n depthWrite: false,\n transparent: true,\n opacity: 1\n });\n\n this.#mesh = new Mesh(geometry,this.#material);\n this.#mesh.name = el.name;\n this.#mesh.scale.copy(el.scale);\n this.#mesh.position.set(0,0,-0.2);\n //this.#mesh.position.copy(el.position);\n //this.#mesh.rotation.copy(el.rotation);\n this.#ready = true;\n this.#debug();\n resolve(this.#mesh);\n }\n });\n });\n\n });\n\n }\n\n updateDepthPosition(vec2) {\n this.#material?.uniforms.uDepthMouse.value.set(vec2.x,vec2.y);\n }\n\n updateTime(time) {\n if (this.#ready) {\n this.#material.uniforms.uTime.value += time;\n }\n }\n\n updateTimesOfDay(time){\n if (this.#ready) {\n this.#material.uniforms.uTimesOfDay.value = time;\n }\n }\n\n switcher(state) {\n if (this.#ready) {\n switch (state) {\n case 'show':\n this.#mesh.visible = true;\n break;\n case 'hide':\n this.#mesh.visible = false;\n break;\n\n }\n }\n }\n\n #debug() {\n if (!projectMode.LiteMode.debug) return;\n\n const params = {\n scale: this.#scale,\n dark: this.#dark,\n light: this.#light,\n cover: this.#cover,\n alpha: this.#alpha,\n tint: this.#tint,\n horizon: this.#horizon,\n direction: this.#direction,\n speed: this.#speed,\n minWave: this.#minWave,\n maxWave: this.#maxWave\n };\n\n\n const folder = projectMode.LiteMode.debugFolder.addFolder('Sea');\n\n folder.add(params,'scale', 0.0, 10000.0, 1).onChange(value => {\n this.#material.uniforms.uScale.value = value;\n });\n\n folder.add(params,'dark', 0.0, 5.0, 0.001).onChange(value => {\n this.#material.uniforms.uDark.value = value;\n });\n\n folder.add(params,'minWave', -50, 50, 0.001).onChange(value => {\n this.#material.uniforms.uMinWave.value = value;\n });\n\n folder.add(params,'maxWave', -50, 50, 0.001).onChange(value => {\n this.#material.uniforms.uMaxWave.value = value;\n });\n\n folder.add(params,'light', 0.0, 5.0, 0.001).onChange(value => {\n this.#material.uniforms.uLight.value = value;\n });\n\n folder.add(params,'cover', 0, 5.0, 0.001).onChange(value => {\n this.#material.uniforms.uCover.value = value;\n });\n\n folder.add(params,'alpha', 0.0, 10.0, 0.001).onChange(value => {\n this.#material.uniforms.uAlpha.value = value;\n });\n\n folder.add(params,'tint', -2.0, 2.0, 0.001).onChange(value => {\n this.#material.uniforms.uTint.value = value;\n });\n\n folder.add(params,'horizon', -2.0, 2.0, 0.001).onChange(value => {\n this.#material.uniforms.uHorizon.value = value;\n });\n\n folder.add(params,'direction', -Math.PI, Math.PI, 0.001).onChange(value => {\n this.#material.uniforms.uDirection.value = value;\n });\n\n folder.add(params,'speed', 0.0, 1.0, 0.001).onChange(value => {\n this.#material.uniforms.uSpeed.value = value;\n });\n }\n}","'use strict';\n\nimport { Color, LinearSRGBColorSpace, MathUtils, Mesh, ShaderMaterial, TextureLoader } from 'three';\nimport vertex from './vertex.glsl';\nimport fragment from './fragment.glsl';\nimport { projectMode } from '../../../../settings';\nimport { Weather } from '../../../components/weather/Weather';\nimport {Cloudflare} from \"../../../api/Cloudflare\";\n\n\nexport const CLOUDS = {\n 0: {\n cover: 0.0,\n alpha: 0.0\n },\n 10: {\n cover: 0.1,\n alpha: 4.0\n },\n 20: {\n cover: 0.2,\n alpha: 4.0\n },\n 30: {\n cover: 0.3,\n alpha: 3.0\n },\n 40: {\n cover: 0.4,\n alpha: 2.5\n },\n 50: {\n cover: 0.5,\n alpha: 1.5\n },\n 60: {\n cover: 0.6,\n alpha: 1.3\n },\n 70: {\n cover: 0.7,\n alpha: 1.0\n },\n 80: {\n cover: 0.8,\n alpha: 0.9\n },\n 90: {\n cover: 0.9,\n alpha: 0.8\n },\n 100: {\n cover: 1.0,\n alpha: 0.6\n }\n};\n\n\nexport class Sky {\n static #active = config.features.liteMode?.settings.sky?.active;\n static #skySpeed = config.features.liteMode?.settings.sky?.skySpeed || 0.002;\n static #direction = config.features.liteMode?.settings.sky?.direction || 1.0;\n static #scale = config.features.liteMode?.settings.sky?.scale || 1.0;\n static #dark = config.features.liteMode?.settings.sky?.dark || 0.0;\n static #light = config.features.liteMode?.settings.sky?.light || 0.2;\n static #cover = config.features.liteMode?.settings.sky?.cover || 0.01;\n static #alpha = config.features.liteMode?.settings.sky?.alpha || 4.0;\n static #tint = config.features.liteMode?.settings.sky?.tint || 0.5;\n static #horizon = config.features.liteMode?.settings.sky?.horizon || 2.0;\n static #rainbowSettings = config.features.liteMode?.settings.sky?.rainbow || {scale: 1.0, position: 0.0};\n static #gradient = config.features.liteMode?.settings.sky?.gradient || {\n mixingLine: 0.25,\n colors: {\n day: {\n bottom: '#ffffff',\n top: '#0078cd'\n },\n night: {\n bottom: '#12122e',\n top: '#141675'\n }\n }\n };\n static #ready = false;\n static #weatherPreset = null;\n #url = null;\n #loader = null;\n #mesh = null;\n static #material = null;\n #rainbow = null;\n\n constructor (url,loader) {\n this.#url = `${url}${config.features.liteMode.settings.sky?.path}?v=${Cloudflare.version}` || '';\n this.#loader = loader;\n\n return this;\n }\n\n create(){\n if (!Sky.#active) return new Promise(resolve => resolve('disabled'));\n\n return new Promise(resolve => {\n\n this.#loader.load(this.#url, model => {\n model.traverse(el => {\n if (el.isMesh) {\n const geometry = el.geometry.clone();\n Sky.#material = new ShaderMaterial({\n vertexShader: vertex,\n fragmentShader: fragment,\n uniforms: {\n dayBottomColor: {\n value: new Color().setStyle(Sky.#gradient.colors.day.bottom,LinearSRGBColorSpace)\n },\n dayTopColor: {\n value: new Color().setStyle(Sky.#gradient.colors.day.top,LinearSRGBColorSpace)\n },\n nightBottomColor: {\n value: new Color().setStyle(Sky.#gradient.colors.night.bottom,LinearSRGBColorSpace)\n },\n nightTopColor: {\n value: new Color().setStyle(Sky.#gradient.colors.night.top,LinearSRGBColorSpace)\n },\n mixingLine: {\n value: Sky.#gradient.mixingLine\n },\n // skyTexture: {\n // value: this.#dayTexture\n // },\n // nightSkyTexture: {\n // value: this.#nightTexture\n // },\n uHorizon: {\n value: Sky.#horizon\n },\n uSkySpeed: {\n value: Sky.#skySpeed\n },\n uDirection: {\n value: Sky.#direction\n },\n uScale: {\n value: Sky.#scale\n },\n uDark: {\n value: Sky.#dark\n },\n uLight: {\n value: Sky.#light\n },\n uCover: {\n value: Sky.#cover\n },\n uAlpha: {\n value: Sky.#alpha\n },\n uTint: {\n value: Sky.#tint\n },\n rainbowTexture: {\n value: null\n },\n uRainbowActive: {\n value: false\n },\n uRainbowY: {\n value: Sky.#rainbowSettings.position\n },\n uRainbowScale: {\n value: Sky.#rainbowSettings.scale\n },\n uTime: {\n value: 0.0\n },\n uTimesOfDay: {\n value: 0.0\n }\n },\n depthTest: false,\n depthWrite: false,\n transparent: true,\n opacity: 1\n });\n\n this.#mesh = new Mesh(geometry,Sky.#material);\n this.#mesh.name = el.name;\n this.#mesh.scale.copy(el.scale);\n this.#mesh.position.set(0,0,-0.2);\n Sky.#ready = true;\n this.#debug();\n resolve(this.#mesh);\n }\n });\n });\n\n });\n\n }\n\n updateTime(time) {\n if (Sky.#ready) {\n Sky.#material.uniforms.uTime.value += time;\n }\n }\n\n updateTimesOfDay(time){\n if (Sky.#ready) {\n Sky.#material.uniforms.uTimesOfDay.value = time;\n }\n }\n\n switcher(state) {\n if (Sky.#ready) {\n switch (state) {\n case 'show':\n this.#mesh.visible = true;\n break;\n case 'hide':\n this.#mesh.visible = false;\n break;\n\n }\n }\n }\n\n async rainbowToggle(action) {\n if (!Sky.#ready) return;\n\n switch (action) {\n case 'enable':\n if (!this.#rainbow) {\n const textureLoader = new TextureLoader();\n this.#rainbow = await textureLoader.loadAsync('./assets/textures/rainbow/rainbow-lite.png');\n }\n\n Sky.#material.uniforms.rainbowTexture.value = this.#rainbow;\n Sky.#material.uniforms.uRainbowActive.value = true;\n\n break;\n case 'disable':\n Sky.#material.uniforms.rainbowTexture.value = null;\n Sky.#material.uniforms.uRainbowActive.value = false;\n break;\n }\n }\n\n #getCloudsPreset() {\n const weatherData = Weather.getWeatherData();\n const data = {};\n\n if (weatherData.hasOwnProperty('clouds')) {\n const cloudsDensity = weatherData.clouds.all;\n data.clouds = {};\n\n if (cloudsDensity === 0){\n data.clouds.preset = 0;\n } else if (cloudsDensity > 0 && cloudsDensity <= 10) {\n data.clouds.preset = 10;\n } else if (cloudsDensity > 10 && cloudsDensity <= 20) {\n data.clouds.preset = 20;\n } else if (cloudsDensity > 20 && cloudsDensity <= 30) {\n data.clouds.preset = 30;\n } else if (cloudsDensity > 30 && cloudsDensity <= 40) {\n data.clouds.preset = 40;\n } else if (cloudsDensity > 40 && cloudsDensity <= 50) {\n data.clouds.preset = 50;\n } else if (cloudsDensity > 50 && cloudsDensity <= 60) {\n data.clouds.preset = 60;\n } else if (cloudsDensity > 60 && cloudsDensity <= 70) {\n data.clouds.preset = 70;\n } else if (cloudsDensity > 70 && cloudsDensity <= 80) {\n data.clouds.preset = 80;\n } else if (cloudsDensity > 80 && cloudsDensity < 100) {\n data.clouds.preset = 90;\n } else {\n data.clouds.preset = 100;\n }\n } else {\n data.clouds.preset = 0;\n }\n\n data.wind = weatherData.wind;\n\n return data;\n }\n\n cloudsToggle(action){\n if (!Sky.#ready) return;\n\n switch (action) {\n case 'enable':\n // Sky.#material.uniforms.uCover.value = config.features.liteMode.settings.sky.cover + 1.5;\n\n if (Weather.checkedCurrentWeather()) {\n const preset = this.#getCloudsPreset();\n Sky.setData(preset,true);\n } else {\n Sky.setData({clouds: {preset: 90 } });\n }\n\n break;\n case 'disable':\n\n if (Weather.checkedCurrentWeather()) {\n if (Sky.#weatherPreset) {\n Sky.setData(Sky.#weatherPreset);\n } else {\n Sky.resetToDefault();\n }\n } else {\n // Sky.resetToDefault();\n Sky.setData({clouds: {preset: 0 } });\n }\n\n // Sky.#material.uniforms.uCover.value = config.features.liteMode.settings.sky.cover;\n\n break;\n }\n }\n\n static setData(data,save) {\n if (!Sky.#active || !Sky.#ready) return;\n\n if (save) {\n Sky.#weatherPreset = data;\n }\n\n const usePreset = CLOUDS[data.clouds.preset];\n\n if (data.hasOwnProperty('wind')){\n const skyDirection = data.wind.deg;\n const skySpeed = data.wind.speed;\n Sky.#material.uniforms.uSkySpeed.value = skySpeed / 1000;\n Sky.#material.uniforms.uDirection.value = MathUtils.degToRad(skyDirection);\n }\n\n\n Sky.#material.uniforms.uCover.value = usePreset.cover;\n Sky.#material.uniforms.uAlpha.value = usePreset.alpha;\n\n }\n\n static resetToDefault() {\n if (!Sky.#active || !Sky.#ready) return;\n\n Sky.#material.uniforms.uCover.value = Sky.#cover;\n Sky.#material.uniforms.uAlpha.value = Sky.#alpha;\n Sky.#material.uniforms.uSkySpeed.value = Sky.#skySpeed;\n Sky.#material.uniforms.uDirection.value = Sky.#direction;\n }\n\n #debug() {\n if (!projectMode.LiteMode.debug) return;\n\n const params = {\n scale: Sky.#scale,\n dark: Sky.#dark,\n light: Sky.#light,\n cover: Sky.#cover,\n alpha: Sky.#alpha,\n tint: Sky.#tint,\n horizon: Sky.#horizon,\n direction: Sky.#direction,\n speed: Sky.#skySpeed,\n mixingLine: Sky.#gradient.mixingLine,\n dayBottomColor: Sky.#gradient.colors.day.bottom,\n dayTopColor: Sky.#gradient.colors.day.top,\n nightBottomColor: Sky.#gradient.colors.night.bottom,\n nightTopColor: Sky.#gradient.colors.night.top,\n };\n\n\n const folder = projectMode.LiteMode.debugFolder.addFolder('Clouds');\n const skyFolder = projectMode.LiteMode.debugFolder.addFolder('Sky');\n\n skyFolder.add(params,'mixingLine',-1.0,1.0,0.001).onChange(value => {\n Sky.#material.uniforms.mixingLine.value = value;\n });\n\n skyFolder.addColor(params,'dayBottomColor').onChange(value => {\n Sky.#material.uniforms.dayBottomColor.value.set(value);\n });\n\n skyFolder.addColor(params,'dayTopColor').onChange(value => {\n Sky.#material.uniforms.dayTopColor.value.set(value);\n });\n\n skyFolder.addColor(params,'nightBottomColor').onChange(value => {\n Sky.#material.uniforms.nightBottomColor.value.set(value);\n });\n\n skyFolder.addColor(params,'nightTopColor').onChange(value => {\n Sky.#material.uniforms.nightTopColor.value.set(value);\n });\n\n folder.add(params,'scale', 0.0, 10.0, 0.001).onChange(value => {\n Sky.#material.uniforms.uScale.value = value;\n });\n\n folder.add(params,'dark', 0.0, 5.0, 0.001).onChange(value => {\n Sky.#material.uniforms.uDark.value = value;\n });\n\n folder.add(params,'light', 0.0, 5.0, 0.001).onChange(value => {\n Sky.#material.uniforms.uLight.value = value;\n });\n\n folder.add(params,'cover', 0, 5.0, 0.001).onChange(value => {\n Sky.#material.uniforms.uCover.value = value;\n });\n\n folder.add(params,'alpha', 0.0, 10.0, 0.001).onChange(value => {\n Sky.#material.uniforms.uAlpha.value = value;\n });\n\n folder.add(params,'tint', -2.0, 2.0, 0.001).onChange(value => {\n Sky.#material.uniforms.uTint.value = value;\n });\n\n folder.add(params,'horizon', -2.0, 2.0, 0.001).onChange(value => {\n Sky.#material.uniforms.uHorizon.value = value;\n });\n\n folder.add(params,'direction', -Math.PI, Math.PI, 0.001).onChange(value => {\n Sky.#material.uniforms.uDirection.value = value;\n });\n\n folder.add(params,'speed', 0.0, 1.0, 0.001).onChange(value => {\n Sky.#material.uniforms.uSkySpeed.value = value;\n });\n }\n}","'use strict';\n\nimport { Mesh, ShaderMaterial, Vector2 } from 'three';\nimport vertex from './vertex.glsl';\nimport fragment from './fragment.glsl';\nimport {Cloudflare} from \"../../../api/Cloudflare\";\n\nexport class Trees {\n #active = config.features.liteMode.settings.trees?.active;\n #speed = config.features.liteMode.settings.trees?.speed || 0.2;\n #turbulence = config.features.liteMode.settings.trees?.turbulence || 0.001;\n #scale = config.features.liteMode.settings.trees?.scale || { x:50.0, y: 50.0 };\n #offsetX = config.features.liteMode.settings.trees?.offsetX || { x: 100.0, y: 0.0 };\n #offsetY = config.features.liteMode.settings.trees?.offsetY || { x: 300.0, y: 150.0 };\n #url = null;\n #dayTexture = null;\n #nightTexture = null;\n #depthTexture = null;\n #loader = null;\n #material = null;\n #mesh = null;\n #ready = false;\n\n constructor (url,dayTexture,nightTexture,loader,depthImage) {\n this.#url = `${url}${config.features.liteMode.settings.trees?.path}?v=${Cloudflare.version}` || '';\n this.#dayTexture = dayTexture;\n this.#nightTexture = nightTexture;\n this.#depthTexture = depthImage;\n this.#loader = loader;\n\n return this;\n }\n\n create() {\n if (!this.#active) return new Promise(resolve => resolve('disabled'));\n\n return new Promise(resolve => {\n this.#loader.load(this.#url, model => {\n model.traverse(el => {\n if (el.isMesh) {\n const geometry = el.geometry.clone();\n this.#material = new ShaderMaterial({\n vertexShader: vertex,\n fragmentShader: fragment,\n uniforms: {\n generalTexture: {\n value: this.#dayTexture\n },\n nightGeneralTexture: {\n value: this.#nightTexture\n },\n depthTexture: {\n value: this.#depthTexture\n },\n uSpeed: {\n value: this.#speed\n },\n uTurbulence: {\n value: this.#turbulence\n },\n uScale: {\n value: new Vector2(this.#scale.x,this.#scale.y)\n },\n uOffsetX: {\n value: new Vector2(this.#offsetX.x,this.#offsetX.y)\n },\n uOffsetY: {\n value: new Vector2(this.#offsetY.x,this.#offsetY.y)\n },\n uTime: {\n value: 0.0\n },\n uTimesOfDay: {\n value: 0.0\n },\n uDepthMouse: {\n value: new Vector2()\n }\n },\n depthTest: false,\n depthWrite: false,\n transparent: true,\n opacity: 1\n });\n\n this.#mesh = new Mesh(geometry,this.#material);\n this.#mesh.name = el.name;\n this.#mesh.scale.copy(el.scale);\n this.#mesh.position.set(0,0,-0.2);\n\n this.#ready = true;\n resolve(this.#mesh);\n }\n });\n });\n });\n\n }\n\n updateDepthPosition(vec2) {\n this.#material?.uniforms.uDepthMouse.value.set(vec2.x,vec2.y);\n }\n\n updateTime(time) {\n if (this.#ready) {\n this.#material.uniforms.uTime.value += time;\n }\n }\n\n updateTimesOfDay(time){\n if (this.#ready) {\n this.#material.uniforms.uTimesOfDay.value = time;\n }\n }\n\n switcher(state) {\n if (this.#ready) {\n switch (state) {\n case 'show':\n this.#mesh.visible = true;\n break;\n case 'hide':\n this.#mesh.visible = false;\n break;\n\n }\n }\n }\n\n}","'use strict';\n\n\nimport { Color, Group, LinearSRGBColorSpace, Mesh, MeshBasicMaterial } from 'three';\nimport gsap from 'gsap';\nimport {Cloudflare} from \"../../../api/Cloudflare\";\n\nexport class Windows {\n #active = config.features.liteMode.settings.windows?.active;\n #opacity = config.features.liteMode.settings.windows?.opacity || 0.5;\n #color = config.features.liteMode.settings.windows?.color || '#f2ff00';\n #speed = config.features.liteMode.settings.windows?.speed || 5;\n #timer = 0;\n #url = null;\n #loader = null;\n #ready = false;\n #group = new Group();\n\n constructor (url,loader) {\n this.#url = `${url}${config.features.liteMode.settings.windows?.path}?v=${Cloudflare.version}` || '';\n this.#loader = loader;\n }\n\n create() {\n if (!this.#active) return new Promise(resolve => resolve('disabled'));\n\n return new Promise(resolve => {\n this.#loader.load(this.#url, model => {\n const color = new Color().setStyle(this.#color,LinearSRGBColorSpace);\n\n model.traverse(el => {\n if (el.isMesh) {\n\n const geometry = el.geometry.clone();\n const material = new MeshBasicMaterial({\n depthTest: false,\n depthWrite: false,\n transparent: true,\n opacity: 0,\n color: color\n });\n\n const mesh = new Mesh(geometry,material);\n mesh.name = el.name;\n mesh.scale.copy(el.scale);\n\n this.#group.add(mesh);\n }\n });\n\n this.#group.name = 'windows';\n this.#ready = true;\n resolve(this.#group);\n });\n\n });\n }\n\n updateTime(time){\n if (this.#ready) {\n this.#timer += time;\n\n if (this.#timer >= this.#speed){\n const randomValue = Math.floor(Math.random() * (this.#group.children.length));\n const randomWindows = this.#group.children[randomValue];\n\n let opacity;\n\n if (randomWindows.material.opacity){\n opacity = 0;\n } else {\n opacity = this.#opacity;\n }\n\n gsap.to(randomWindows.material,{\n duration: 0.4,\n opacity,\n });\n\n this.#timer = 0;\n }\n }\n }\n\n switcher(state) {\n if (this.#ready) {\n switch (state) {\n case 'show':\n this.#group.visible = true;\n break;\n case 'hide':\n this.#group.visible = false;\n break;\n\n }\n }\n }\n}\n","'use strict';\n\nimport {changeLangToCurrent, getCurrentLang} from \"../components/langSwitcher/langSwitcher\";\nimport { isDesktop, isMobile, isPWA } from '../../settings';\nimport { Preview } from '../components/preview/Preview';\n\nexport class PrivacyAndTerms {\n static #allElements = [];\n static #privacy = null;\n static #terms = null;\n static #privacyElement = null;\n static #termsElement = null;\n #element = document.createElement('div');\n #delimiter = null;\n\n static #getTerms() {\n if (config.general.eula.length!==0){\n let url = config.general.eula.find(el => el.lang === getCurrentLang())\n if (url){\n url = url.value\n }\n if (!!(url)) return url;\n }\n return `/assets/privacy/${getCurrentLang()}/terms.pdf`;\n }\n\n static #getPrivacy() {\n let url = config.general.privacyPolicy.find(el => el.lang === getCurrentLang())\n if (url){\n url = url.value;\n }\n if (!!(url)) return url;\n return `/assets/privacy/${getCurrentLang()}/privacy.pdf`;\n }\n\n static updateItems() {\n PrivacyAndTerms.#terms = PrivacyAndTerms.#getTerms();\n PrivacyAndTerms.#privacy = PrivacyAndTerms.#getPrivacy();\n\n PrivacyAndTerms.#allElements.forEach((element) => {\n element.querySelector('[data-dictionary=\"Privacy\"]').href = PrivacyAndTerms.#privacy;\n element.querySelector('[data-dictionary=\"Terms\"]').href = PrivacyAndTerms.#terms;\n });\n }\n\n constructor(args) {\n PrivacyAndTerms.#terms = PrivacyAndTerms.#getTerms();\n PrivacyAndTerms.#privacy = PrivacyAndTerms.#getPrivacy();\n\n if (!PrivacyAndTerms.#terms && !PrivacyAndTerms.#privacy || isDesktop)\n return;\n\n PrivacyAndTerms.#allElements.push(this.#element);\n this.#element.classList.add('privacy-and-terms');\n if (isMobile)\n this.#element.classList.add('background-backdrop-filter');\n args.parent.appendChild(this.#element);\n\n this.#addContent();\n }\n\n #addContent() {\n if (isMobile) {\n this.#mobileMode();\n } else {\n this.#addItem('Privacy');\n this.#addDelimiter();\n this.#addItem('Terms');\n\n if (PrivacyAndTerms.#terms && PrivacyAndTerms.#privacy)\n this.#delimiter.classList.remove('hidden');\n }\n }\n\n #addItem(title, parent = this.#element) {\n if (title === 'Privacy' && !PrivacyAndTerms.#privacy ||\n title === 'Terms' && !PrivacyAndTerms.#terms) return;\n\n const item = document.createElement('a');\n if (!isMobile)\n item.classList.add('privacy-and-terms__item');\n item.classList.add(\n 'aside__navigation-menu__href',\n 'language-string',\n 'text'\n );\n item.setAttribute('target','_blank');\n item.setAttribute('data-dictionary', title);\n item.addEventListener('click',PrivacyAndTerms.#clickHandler.bind(this));\n item.innerHTML = changeLangToCurrent(title);\n\n switch (title) {\n case 'Privacy':\n item.href = PrivacyAndTerms.#privacy;\n PrivacyAndTerms.#privacyElement = item;\n break;\n case 'Terms':\n item.href = PrivacyAndTerms.#terms;\n PrivacyAndTerms.#termsElement = item;\n break;\n default:\n console.log('Privacy policy default case in addItem method. Something went wrong');\n break;\n }\n\n parent.appendChild(item);\n }\n\n static #clickHandler(e) {\n if (isMobile && isPWA) {\n e.preventDefault();\n const url = new URL(e.target.href);\n new Preview(url.pathname);\n }\n }\n\n #addDelimiter() {\n this.#delimiter = document.createElement('span');\n this.#delimiter.classList.add('privacy-and-terms__delimiter', 'hidden');\n this.#delimiter.innerHTML = '|';\n this.#element.appendChild(this.#delimiter);\n }\n\n #mobileMode() {\n const privacyWrapper = document.createElement('div');\n privacyWrapper.classList.add('mobile-menu-item', 'privacy-and-terms__item', 'horizontal-separator');\n const termsWrapper = document.createElement('div');\n termsWrapper.classList.add('mobile-menu-item', 'privacy-and-terms__item');\n const privacyIcon = document.createElement('span');\n privacyIcon.classList.add('privacy-and-terms__icon', 'icon-link-icon');\n const termsIcon = document.createElement('span');\n termsIcon.classList.add('privacy-and-terms__icon', 'icon-link-icon');\n this.#addItem('Privacy', privacyWrapper);\n this.#addItem('Terms', termsWrapper);\n privacyWrapper.appendChild(privacyIcon);\n termsWrapper.appendChild(termsIcon);\n this.#element.appendChild(privacyWrapper);\n this.#element.appendChild(termsWrapper);\n\n PrivacyAndTerms.#privacyElement.classList.add('body');\n PrivacyAndTerms.#termsElement.classList.add('body');\n }\n\n show() {\n this.#element.classList.remove('hidden');\n }\n\n hide() {\n this.#element.classList.add('hidden');\n }\n\n get() {\n return this.#element;\n }\n}\n","import {isDesktop, isMobile, isTablet} from '../../../settings';\nimport {desktopErrorIcon} from '../../widgets/widgets';\nimport {changeLangToCurrent, getCurrentLang, getCurrentLangDirection} from '../../components/langSwitcher/langSwitcher';\nimport {createHtmlElement} from '../../../functions';\nimport {pageResize} from '../menu';\nimport {Cloudflare} from '../../api/Cloudflare';\nimport {BaseElement} from \"../../interfaces/BaseElement\";\nimport Swiper from \"swiper\";\nimport {EffectCube, Navigation, Pagination} from \"swiper/modules\";\n\nconst canvasClass = 'bmby-about-wrapp';\nlet aboutUsMainContainer;\nlet lang, dir, isData, activeTabInd, crmData;\n\nexport function aboutWidgetInit(parent) {\n lang = getCurrentLang();\n dir = getCurrentLangDirection();\n let crm = config.widgets.about;\n\n const customCss = config.crmProjectSettings.style?.about;\n if (Boolean(customCss)) {\n const styleElement = document.createElement('style');\n styleElement.textContent = customCss;\n document.head.appendChild(styleElement);\n }\n\n aboutUsMainContainer = new BaseElement()\n .addClass(`${canvasClass}`, `${dir}`, !isMobile ? 'background-backdrop-filter' : null)\n .appendTo(parent)\n .DOMElement;\n\n isData = checkCRM(crm);\n if (!isData) {\n showErrorPage();\n pageResize(aboutUsMainContainer);\n return;\n }\n\n crmData = crm.data;\n activeTabInd = isData ? crm.data[0].order : 0;\n\n insertMenu(activeTabInd, crm.data);\n}\n\nfunction cropImageToText() {\n if (window.innerWidth >= 1024) {\n const sectionCollection = document.querySelectorAll('.tab-content__container-section');\n sectionCollection.forEach(section => {\n setTimeout(() => {\n const img = section.querySelector('.about-us__img-container > .tab-content__image');\n const sub = section.querySelector('.text-content__wrapper > .about-us__sub-wrapper');\n let subHeight = 0;\n for (let child of sub.children) {\n subHeight += child.getBoundingClientRect().height;\n }\n if (img.getBoundingClientRect().height > subHeight + 120) {\n img.style.height = subHeight + 120 + 'px';\n }\n }, 50);\n });\n }\n}\n\nfunction insertMenu(activeTab = 0, data) {\n let tabsDataMainContainer;\n\n const menuWrapper = createHtmlElement(\n '',\n '',\n 'div',\n ['menu-content__wrapper', 'widget-menu__content-wrapper']);\n const menuContainer = createHtmlElement(\n menuWrapper,\n '',\n 'ul',\n ['about__menu__items', 'background-backdrop-filter', 'widget-menu__items']\n );\n aboutUsMainContainer.insertAdjacentElement('afterbegin', menuWrapper);\n\n const isTabWrapperExist = aboutUsMainContainer.querySelector('.tabs-data-content__wrapper');\n if (!isTabWrapperExist) {\n tabsDataMainContainer =\n createHtmlElement(\n aboutUsMainContainer,\n '',\n 'div',\n ['tabs-data-content__wrapper', isMobile ? 'background-backdrop-filter' : null]\n );\n } else {\n tabsDataMainContainer = isTabWrapperExist;\n }\n\n if (getNonEmptyAmountOfTabs(data) <= 1)\n menuWrapper.classList.add('hidden');\n\n data.forEach((menuElement, index) => {\n if (menuElement.sections.length) {\n let chapter = menuElement.chapter.filter(el => el.lang === lang);\n if (!chapter[0].hasOwnProperty('value'))\n throw 'menuElement has unsupported structure';\n const li = createHtmlElement(menuContainer, chapter[0].value, 'li',\n [\n 'menu__item',\n 'text',\n 'body',\n 'widget-menu__item'\n ]);\n li.dataset.order = menuElement.order;\n if (index + 1 !== data.length) {\n createHtmlElement(menuContainer, '', 'li', ['widget-menu__separator']);\n }\n buildTabsContent(tabsDataMainContainer, menuElement, data);\n }\n });\n\n const menuElementOrder = document.querySelector('.menu__item[data-order=\"' + activeTab + '\"]');\n switchTab(menuElementOrder);\n activeTabInd = activeTab;\n\n menuContainer.addEventListener('click', (e) => switchTab(e.target));\n}\n\nfunction getNonEmptyAmountOfTabs(data) {\n let amount = 0;\n data.forEach(category => {\n if (category.sections.length > 0)\n amount++;\n });\n return amount;\n}\n\nfunction buildTabsContent(container, objectContent, data) {\n const tab = new BaseElement()\n .addClass('tab-content__container')\n .appendTo(container);\n objectContent.sections.forEach(sectionData => {\n let section = new BaseElement()\n .addClass('tab-content__container-section')\n .appendTo(tab.DOMElement);\n tab.addAttribute('data-order', objectContent.order);\n\n const textWrapper = new BaseElement()\n .addClass('text-content__wrapper')\n .appendTo(section.DOMElement);\n const subWrapper = new BaseElement()\n .addClass('about-us__sub-wrapper')\n .appendTo(textWrapper.DOMElement);\n\n if (sectionData.title.filter(el => el.lang === lang)[0].value.length > 0)\n new BaseElement('h3')\n .addClass('tab-content__title', 'text', 'title-2')\n .innerHtml(sectionData.title.filter(el => el.lang === lang)[0].value)\n .appendTo(subWrapper.DOMElement);\n\n const currentSectionDescriptionText = sectionData.description.filter(el => el.lang === lang)[0].value;\n let translation = config.dictionary['AI'][getCurrentLang()];\n if (translation === '') {\n translation = config.dictionary['AI']['en'];\n }\n const textWithReplacedTemplate = currentSectionDescriptionText.replace(/{{AI}}/g, translation);\n\n new BaseElement('p')\n .addClass('tab-content__text', 'text', 'body')\n .innerHtml(textWithReplacedTemplate)\n .appendTo(subWrapper.DOMElement);\n\n const imgContainer = new BaseElement()\n .addClass('about-us__img-container')\n .appendTo(section.DOMElement);\n\n\n if (sectionData?.images.length > 1) {\n createCarousel(imgContainer.DOMElement, sectionData.images);\n }\n\t\telse if (sectionData?.images?.length === 1 || Boolean(sectionData?.imageUrl)) {\n const imageUrl = sectionData?.images?.length === 1 ? sectionData.images[0] : sectionData?.imageUrl;\n new BaseElement('img')\n .addClass('tab-content__image')\n .addAttribute('src', Cloudflare.resize(imageUrl, {\n width: isDesktop ? 2048 : isMobile ? 512 : 1024,\n quality: 75\n }))\n .appendTo(imgContainer.DOMElement);\n }\n\n if (objectContent.order !== 0) {\n if (data.length > 1)\n tab.addClass('hide-tab');\n }\n });\n}\n\nfunction createCarousel(parentContainer, arrayOfImages) {\n const swiperElement = new BaseElement()\n .addClass('swiper', 'about-image-carousel')\n .appendTo(parentContainer);\n const wrapperElement = new BaseElement()\n .addClass('about-image-carousel__wrapper', 'swiper-wrapper')\n .appendTo(swiperElement.DOMElement);\n\n arrayOfImages.forEach((picture, index) => {\n let url;\n\n if (isMobile || isTablet) {\n url = Cloudflare.resize(picture, {\n width: 1024,\n quality: 75\n });\n } else {\n url = Cloudflare.resize(picture, {\n width: 2048,\n quality: 75\n });\n }\n\n const imgContainer = new BaseElement()\n .addClass('about-image-carousel__image-container', 'swiper-slide')\n .appendTo(wrapperElement.DOMElement);\n\n new BaseElement('img')\n .addClass('about-image-carousel__image')\n .setAttributes({\n 'src': url,\n 'alt': `Picture-${index}`\n })\n .event('load', () => {\n preloaderContainer.remove()\n })\n .appendTo(imgContainer.DOMElement)\n\n const preloaderContainer = new BaseElement()\n .addClass('about-image-carousel__preloader')\n .appendTo(imgContainer.DOMElement);\n new BaseElement()\n .addClass('swiper-lazy-preloader', 'swiper-lazy-preloader-white')\n .appendTo(preloaderContainer.DOMElement);\n });\n\n new BaseElement()\n .addClass('about-image-carousel__pagination', 'swiper-pagination')\n .appendTo(swiperElement.DOMElement);\n new BaseElement()\n .addClass('about-image-carousel__navigation-btn', 'swiper-button-next', 'icon-right1')\n .appendTo(swiperElement.DOMElement);\n new BaseElement()\n .addClass('about-image-carousel__navigation-btn', 'swiper-button-prev', 'icon-left1')\n .appendTo(swiperElement.DOMElement);\n\n Swiper.use([Pagination, EffectCube, Navigation]);\n new Swiper('.about-image-carousel', {\n effect: 'fade',\n loop: arrayOfImages.length > 1,\n spaceBetween: 30,\n pagination: {\n el: '.about-image-carousel__pagination',\n type: 'bullets',\n clickable: true\n },\n navigation: {\n nextEl: \".about-image-carousel__navigation-btn.swiper-button-next\",\n prevEl: \".about-image-carousel__navigation-btn.swiper-button-prev\",\n },\n });\n}\n\nfunction toggleTabContent(tabOrder) {\n const tabsContentCollection = document.querySelectorAll('.tab-content__container');\n tabsContentCollection.forEach(tab => {\n if (tab.dataset.order === tabOrder) {\n tab.classList.remove('hide-tab');\n } else {\n tab.classList.add('hide-tab');\n }\n });\n}\n\nfunction switchTab(e) {\n if (e === null)\n return;\n\n const parent = e.parentElement;\n if (e.classList.contains('menu__item')) {\n setActiveTab(parent, e);\n activeTabInd = e.dataset.order;\n if (isMobile) {\n toggleTabContent(e.dataset.order);\n scrollToActiveTabContent(activeTabInd);\n } else {\n toggleTabContent(e.dataset.order);\n scrollToTheTop();\n }\n }\n}\n\nfunction setActiveTab(parent, e) {\n const menuItemsCollection = parent.querySelectorAll('.menu__item');\n menuItemsCollection.forEach(menu => {\n if (e === menu) {\n menu.classList.add('about-active', 'active');\n } else {\n menu.classList.remove('about-active', 'active');\n }\n });\n}\n\nconst scrollToActiveTabContent = (activeTabInd) => {\n const contentWrapper = document.querySelector('.tabs-data-content__wrapper');\n const contentTab = contentWrapper.querySelector('.tab-content__container');\n const wrapperWidth = parseInt(getComputedStyle(contentWrapper).width);\n const tabWidth = parseInt(getComputedStyle(contentTab).width);\n const gapWidth = parseInt(getComputedStyle(contentWrapper).gap);\n const contentWidth = tabWidth;\n const centerAlignCorrection = (wrapperWidth - tabWidth) / 2;\n const offset = contentWidth * (activeTabInd - 1) - centerAlignCorrection + gapWidth * 1.5;\n\n contentWrapper.scroll({\n top: 0,\n left: offset,\n behavior: 'smooth'\n });\n}\n\nconst scrollToTheTop = () => {\n const contentWrapper = document.querySelector('.tabs-data-content__wrapper');\n contentWrapper.scroll({\n top: 0,\n behavior: 'smooth'\n });\n};\n\nfunction checkCRM(crm) {\n if (crm.data.length) {\n const sections = crm.data.filter(el => el.sections.length);\n return !!sections.length;\n } else {\n return false;\n }\n}\n\nfunction showErrorPage() {\n const mainContainer = document.querySelector('.' + canvasClass);\n const wrapper = createHtmlElement(mainContainer, '', 'div', ['error-page__wrapper']);\n const icon = createHtmlElement(wrapper, '', 'div', ['error-page__icon']);\n icon.innerHTML = desktopErrorIcon;\n createHtmlElement(wrapper, 'The page is under construction', 'h1', ['error-page__title']);\n}\n\nexport function updateAboutUsLanguage() {\n const popUp = document.querySelector('.pop-up-page.about-us');\n if (popUp) {\n const contentContainer = popUp.querySelector('.pop-up-page__content-wrapper');\n const aboutContainer = popUp.querySelector(`.${canvasClass}`);\n aboutContainer.remove();\n aboutWidgetInit(contentContainer);\n }\n}\n","'use strict';\n\nimport { Button } from '../../interfaces/buttons/Button';\nimport {BaseElement} from \"../../interfaces/BaseElement\";\nimport {menuHandler} from \"../menu\";\nimport {getUrlParam, isOptionsCardOpened} from '../../../functions';\nimport {components, isMobile, isNoMenu, settingsData} from \"../../../settings\";\nimport {SwipeScript} from \"../../controls/swipe\";\nimport {McIDElement} from \"./McID\";\nimport { DreamsPreloader } from '../../components/preloader/DreamsPreloader';\nimport { McIdDreamsForm } from '../../components/form/McIdLeadForm';\n\nexport class CustomerContactNow extends Button {\n #positions = config.features.customerContactNow?.position || [];\n static closeBtnColor = config.features.customerContactNow?.closeBtnColor || '#000000';\n static link = config.features.customerContactNow?.iframe || '';\n static externalParams = '';\n static isActive = config.features.customerContactNow?.active || false;\n\n constructor (location) {\n const buttonText = settingsData.isConferenceHost\n ? 'contactUs'\n : window.innerHeight < 360 ? 'Buy' : 'Buy now';\n super(buttonText);\n\n // const isPrepaymentButton = Boolean(document.querySelector('.prepayment-btn'));\n const isRemoveCondition = isMobile ? !config['crmProjectSettings'].general.menuItems.contactUs :\n (!this.#positions.includes(location) || !CustomerContactNow.isActive || CustomerContactNow.link === '')\n || config.features?.customerContactNow?.removeLocation && config.features.customerContactNow.removeLocation.includes(location);\n if (isRemoveCondition || isNoMenu) {\n this.remove();\n return;\n }\n\n const prevBtn =\n document.querySelector('.options-card')?.querySelector('[data-button-type=\"customerContactNow\"]');\n if (prevBtn)\n prevBtn.remove();\n\n this\n .addClass('button', 'customer-contact-now-btn', `${location}__customer-contact-now-btn`)\n .addAttribute('data-button-type', 'customerContactNow')\n .event('click', this.clickHandler.bind(this));\n }\n\n clickHandler(e) {\n e.stopPropagation();\n\n if (isMobile) {\n const mcid = document.querySelector('.additional-menu__item .mc-id-contacts');\n const dropdown = mcid.querySelector('.dropdown');\n if (isOptionsCardOpened()) {\n const currentOptionsCard = document.querySelector('.options-card');\n let mcidClone = currentOptionsCard.querySelector('.mc-id-contacts');\n if (!mcidClone) {\n const bumper = currentOptionsCard.querySelector('.options-card__bumper');\n mcidClone = mcid.cloneNode(true);\n mcidClone.style.height = 0;\n mcidClone.style.width = 0;\n bumper.appendChild(mcidClone);\n }\n\n const cloneDropdown = mcidClone.querySelector('.dropdown');\n const cloneLogo = mcidClone.querySelector('.mc-id__logo-wrapper');\n const cloneStatus = mcidClone.querySelector('.mc-id__consolto-status');\n const buttonsWrapper = currentOptionsCard.querySelector('.cards-buttons-wrapper');\n const cloneDropdownCurtain = cloneDropdown.querySelector('.dropdown__curtain');\n cloneDropdown.classList.add('--show-dropdown');\n cloneLogo.classList.add('hidden');\n cloneStatus.classList.add('hidden');\n buttonsWrapper?.classList.add('hidden');\n\n SwipeScript(cloneDropdown);\n cloneDropdownCurtain.addEventListener('swiped-down', () => {\n cloneDropdown.classList.remove('--show-dropdown');\n buttonsWrapper?.classList.remove('hidden');\n });\n\n for (const handler in McIDElement.handlers) {\n const elementForHandler = mcidClone.querySelector(`[data-role=\"${handler}\"]`);\n if (elementForHandler)\n elementForHandler.addEventListener('click', McIDElement.handlers[handler]);\n }\n\n const navigateButtonHandler = () => {\n const long = config.localization.longitude;\n const lat = config.localization.latitude;\n window.open(`https://maps.google.com/?saddr=My+Location&daddr=${lat},${long}`, '_blank');\n }\n const navigateButton = mcidClone.querySelector('.contact-us__preview-navigate');\n if (navigateButton)\n navigateButton.addEventListener('click', navigateButtonHandler);\n\n const callNowClickHandler = () => {\n const originalCallNowElement = mcid.querySelector('[data-role=\"callNow\"]');\n const tel = originalCallNowElement.getAttribute('data-tel');\n const href = 'tel:' + tel;\n window.open(href,'_blank');\n }\n const callNowButton = mcidClone.querySelector('[data-role=\"callNow\"]');\n if (callNowButton)\n callNowButton.addEventListener('click', callNowClickHandler);\n\n const letsTalkButton = mcidClone.querySelector('[data-role=\"consolto\"]');\n if (letsTalkButton) {\n const letsTalkNewButton = components.contactWidget.createOptionButton();\n letsTalkNewButton.className = 'mc-id__contact-widget__btn language-string icon-video-call dropdown__content-element mc-id__content-element';\n letsTalkButton.replaceWith(letsTalkNewButton)\n }\n } else {\n mcid?.click();\n dropdown?.click();\n }\n } else {\n if (CustomerContactNow.link === '') {\n menuHandler({target:{dataset:{menuItem: 'contactUs', isFromApplyNow: true}}});\n\n return;\n }\n\n new McIdDreamsForm();\n // this.container = new BaseElement()\n // .addClass('customer-contact-now__container')\n // .appendTo(document.body);\n // this.iframeContainer = new BaseElement()\n // .addClass('customer-contact-now__iframe-container')\n // .appendTo(this.container.DOMElement);\n //\n // this.#addPreloader(this.iframeContainer.DOMElement);\n //\n // new BaseElement('button')\n // .addClass('customer-contact-now__close-btn','icon-close')\n // .event('click', this.#closeListener.bind(this))\n // .appendTo(this.iframeContainer.DOMElement)\n // .DOMElement.style.color = CustomerContactNow.closeBtnColor;\n // const link = new URL(CustomerContactNow.link);\n // if (!link.search) {\n // link.search = '?' + CustomerContactNow.externalParams.slice(1);\n // } else {\n // link.search += CustomerContactNow.externalParams;\n // }\n //\n // new BaseElement('iframe')\n // .addClass('customer-contact-now-iframe')\n // .addAttribute('src', link.href)\n // .appendTo(this.iframeContainer.DOMElement)\n // .DOMElement.onload = () => this.preloader.remove();\n }\n }\n\n // #closeListener() {\n // this.container.remove();\n // }\n //\n // #addPreloader(parent, customClass) {\n // this.preloader = new BaseElement()\n // .addClass('customer-contact-now-loader', 'tumbs__preloader', `${customClass}`)\n // .appendTo(parent);\n // }\n\n static addExternalParams() {\n if (!config.features.customerContactNow?.active\n || !config.features.customerContactNow?.externalParams?.length) return;\n\n const externalParams = config.features.customerContactNow.externalParams;\n externalParams.forEach(param => {\n const value = getUrlParam(param);\n if (value) {\n CustomerContactNow.externalParams += `&${param}=${value}`;\n }\n });\n }\n}\n\n\nexport class CustomerContactNowIframe {\n constructor (parent) {\n this.parent = parent;\n }\n \n create() {\n if (!CustomerContactNow.isActive || CustomerContactNow.link === '')\n return;\n \n const root = document.querySelector(':root');\n root.style.setProperty('--customerContactNowCloseBtnColor', CustomerContactNow.closeBtnColor);\n \n const container = new BaseElement()\n .addClass('customer-contact-now__container')\n .appendTo(this.parent);\n \n const iframeContainer = new BaseElement()\n .addClass('customer-contact-now__iframe-container')\n .appendTo(container.DOMElement);\n \n const preloader = new DreamsPreloader(container.DOMElement)\n .absolute()\n .substrate()\n .show();\n \n const url = new URL(CustomerContactNow.link);\n if (!url.search) {\n url.search = '?' + CustomerContactNow.externalParams.slice(1);\n } else {\n url.search += CustomerContactNow.externalParams;\n }\n \n new BaseElement('iframe')\n .addClass('customer-contact-now-iframe')\n .addAttribute('src', url.href)\n .appendTo(iframeContainer.DOMElement)\n .DOMElement.onload = () => preloader.remove();\n }\n}\n","'use strict';\n\nimport { clamp, getUrlParam } from '../../../functions';\nimport { DropDown } from '../../interfaces/DropDown';\nimport { BaseElement } from '../../interfaces/BaseElement';\nimport { changeLangToCurrent, getCurrentLang } from '../../components/langSwitcher/langSwitcher';\nimport { Scheduler } from '../../components/Scheduler/Scheduler';\nimport Hammer from 'hammerjs';\nimport {isMobile, isNoMenu, settingsData} from '../../../settings';\nimport { createNavigateButton, getContactsDataFromAPI } from './contactUs';\nimport { McIdDreamsForm, McIdLeadForm } from '../../components/form/McIdLeadForm';\nimport {contactToAgentWithWidget} from \"../../components/chats/chats\";\nimport { BmbyMode } from '../../mode/BmbyMode';\n\nexport class McID {\n\tstatic fromDreamsMap = McID.utm();\n\tstatic active = true;\n\tstatic scope = [];\n\n\tconstructor (data,id) {\n\t\tif(!Boolean(config['crmProjectSettings'].general.menuItems.contactUs) && !McID.fromDreamsMap)\n\t\t\treturn;\n\n\t\tthis.data = data;\n\t\tthis.id = id;\n\t\tthis.create();\n\t\tMcID.scope.push(this);\n\t}\n\n\tcreate() {\n\t\tthis.container = new BaseElement()\n\t\t\t.addClass('mc-id-contacts')\n\t\t\t.DOMElement;\n\t\t// if (isMobile)\n\t\t// \tthis.container.addEventListener('click', () => {\n\t\t// \t\tsearchSwipedDownHandler(true);\n\t\t// \t});\n\n\t\tthis.dropdown = settingsData.isConferenceHost\n\t\t\t? new DropDown(this.container,'mc-id', {\n\t\t\t\t\ttitle: 'contactAgent'\n\t\t\t\t})\n\t\t\t\t.setCustomHandler(() => { contactToAgentWithWidget(undefined) })\n\t\t\t\t.create()\n\t\t\t: new DropDown(this.container,'mc-id', {\n\t\t\t\t\ttitle: 'contactAgent'\n\t\t\t\t})\n\t\t\t\t.setOpenPosition('top')\n\t\t\t\t.needsArrowRotate(true)\n\t\t\t\t.create();\n\n\t\t// this.bottomContainer = new BaseElement()\n\t\t// \t.addClass('mc-id__bottom-container')\n\t\t// \t.appendTo(this.dropdown.content.DOMElement);\n\n\t\tisMobile && this.#addSwipe(this.dropdown.curtain,this.dropdown);\n\n\t\tlet agentLogo = settingsData.isConferenceHost ? '../img/online.png' : config.contactWidget?.agentImageUrl || '../img/default-manager-logo.png';\n\n\t\tif (McID.fromDreamsMap) {\n\t\t\tagentLogo = '../img/default-manager-logo.png';\n\t\t}\n\n\t\tdocument.documentElement.style.setProperty('--image-agent-url', `url(\\'${agentLogo}\\')`);\n\n\t\tconst logoWrapper = new BaseElement()\n\t\t\t.addClass('mc-id__logo-wrapper')\n\t\t\t.DOMElement;\n\n\t\tnew BaseElement()\n\t\t\t.addClass('mc-id__logo', !isMobile ? 'hidden' : null)\n\t\t\t.appendTo(logoWrapper)\n\t\t\t.DOMElement;\n\n\t\tthis.dropdown.dropDown.insertAdjacentElement('afterbegin',logoWrapper);\n\n\t\tthis.consoltoStatus = new BaseElement()\n\t\t\t.addClass('mc-id__consolto-status','hidden')\n\t\t\t.DOMElement;\n\n\t\tthis.dropdown.dropDown.insertAdjacentElement('afterbegin',this.consoltoStatus);\n\n\t\tObject.entries(this.data).forEach(([key,data]) => {\n\t\t\tlet element;\n\n\t\t\tswitch (key) {\n\t\t\t\tcase 'mcId':\n\t\t\t\t\telement = new McIDScheduler(data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'whatsApp':\n\t\t\t\t\telement = new McIDWhatsApp(data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'callNow':\n\t\t\t\t\telement = new McIDCallNow(data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'leadForm':\n\t\t\t\t\telement = new McIDLead(data);\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.dropdown.add(element?.getDOM());\n\t\t});\n\t}\n\n\t#addSwipe(element,scope) {\n\t\tlet dragStarted = false;\n\t\tlet panDirection = null;\n\t\tlet state;\n\n\t\tconst swipe = new Hammer.Manager(element);\n\t\tswipe.add(new Hammer.Pan({\n\t\t\tthreshold: 10\n\t\t}));\n\n\t\tconst panHandler = (direction) => {\n\t\t\tswitch (direction) {\n\t\t\t\tcase 'panup':\n\t\t\t\t\telement.parentElement.style.bottom = '';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'pandown':\n\t\t\t\t\tscope.hide();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdragStarted = false;\n\t\t\tpanDirection = null;\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (!dragStarted) {\n\t\t\t\t\telement.parentElement.style.bottom = '';\n\t\t\t\t}\n\t\t\t},400);\n\t\t};\n\n\t\tswipe.on('panstart',() => {\n\t\t\tstate = element.parentElement.getBoundingClientRect();\n\t\t});\n\n\n\t\tswipe.on('panup pandown', (e) => {\n\t\t\tconst position = clamp(e.deltaY * -1,state.height * -1,0);\n\t\t\telement.parentElement.style.bottom = `${position}px`;\n\t\t\tpanDirection = e.additionalEvent;\n\t\t\tdragStarted = true;\n\t\t\tif (e.isFinal) {\n\t\t\t\tpanHandler(panDirection);\n\t\t\t}\n\t\t});\n\n\t\tswipe.on('panend', () => {\n\t\t\tif (dragStarted && panDirection) {\n\t\t\t\tpanHandler(panDirection);\n\t\t\t}\n\t\t});\n\t}\n\n\tupdateConsoltoStatus(status) {\n\t\tthis.consoltoStatus.className = `mc-id__consolto-status ${status}`;\n\t}\n\n\taddNewButton(element) {\n\t\tthis.dropdown.add(element);\n\t}\n\n\taddNewElement(element) {\n\t\telement.classList.add('dropdown--not-btn');\n\t\tthis.dropdown.add(element);\n\t}\n\n\tstatic addNewButton(element,id) {\n\t\tconst scope = McID.scope.find(scope => scope.id === id);\n\t\tif (scope) {\n\t\t\tscope.addNewButton(element);\n\t\t}\n\t}\n\n\tstatic addNewElement(element,id) {\n\t\tconst scope = McID.scope.find(scope => scope.id === id);\n\t\tif (scope) {\n\t\t\tscope.addNewElement(element);\n\t\t}\n\t}\n\n\tstatic updateConsoltoStatus(status) {\n\t\tMcID.scope.forEach(scope => scope.updateConsoltoStatus(status));\n\t}\n\n\tstatic getData() {\n\t\treturn JSON.parse(getUrlParam('mcId'));\n\t}\n\n\tstatic utm() {\n\t\treturn getUrlParam('utm_source') === 'dreamsmap';\n\t}\n\n\tstatic prepareMenuItems(menuItems) {\n\t\tif (McID.fromDreamsMap && !isMobile) {\n\t\t\tmenuItems.contactUs = false;\n\t\t} else if (McID.fromDreamsMap && isMobile) {\n\t\t\tmenuItems.contactUs = true;\n\t\t}\n\t}\n\n\tstatic resizeHandler() {\n\t\tif(isMobile || BmbyMode.active) return;\n\t\tconst asideTop = document.querySelector('.aside__top__container').getBoundingClientRect();\n\t\tconst asideBottom = document.querySelector('.aside__bottom__container').getBoundingClientRect();\n\t\tconst logo = document.querySelector('.mc-id__logo');\n\t\tconst logoHeight = 80;\n\n\t\tif (asideBottom.top - logoHeight <= asideTop.bottom) {\n\t\t\tlogo?.classList.add('hidden');\n\t\t} else {\n\t\t\tlogo?.classList.remove('hidden');\n\t\t}\n\t}\n}\n\n\nexport class McIDElement {\n\tstatic handlers = {};\n\n\tconstructor (element = 'div') {\n\t\tthis.element = new BaseElement(element)\n\t\t\t.addClass('mc-id__element','language-string')\n\t\t\t.event('click',this.handler.bind(this));\n\t}\n\n\taddClass(...args) {\n\t\tthis.element.addClass(...args);\n\t\treturn this;\n\t}\n\n\tremoveClass(...args) {\n\t\tthis.element.removeClass(...args);\n\t\treturn this;\n\t}\n\n\taddTranslate(key) {\n\t\tthis.element\n\t\t\t.addAttribute('data-dictionary',key)\n\t\t\t.innerHtml(changeLangToCurrent(key));\n\n\t\treturn this;\n\t}\n\n\taddTranslateObject(object) {\n\t\tObject.entries(object).forEach(([lang,text]) => {\n\t\t\tthis.element.addAttribute(`data-lang-${lang}`,text);\n\t\t});\n\n\t\tthis.element.innerHtml(object[getCurrentLang()]);\n\n\t\treturn this;\n\t}\n\n\taddAttribute(key,value) {\n\t\tthis.element.addAttribute(key,value);\n\n\t\treturn this;\n\t}\n\n\thandler() {}\n\n\tgetDOM() {\n\t\treturn this.element.DOMElement;\n\t}\n}\n\n\nclass McIDWhatsApp extends McIDElement{\n\tconstructor (data) {\n\t\tsuper();\n\n\t\tthis.data = data;\n\t\tthis.addTranslate('whatsApp');\n\t\tconst dataRole = 'whatsApp';\n\t\tthis.addAttribute('data-role', dataRole);\n\t\tthis.addClass(this.data.icon || 'icon-whatsapp');\n\n\t\tif (!McIDElement.handlers?.[dataRole])\n\t\t\tMcIDElement.handlers[dataRole] = this.handler.bind(this);\n\t}\n\n\thandler () {\n\t\tconst href = 'https://wa.me/' + this.data.tel;\n\t\twindow.open(href,'_blank');\n\t}\n}\n\nclass McIDScheduler extends McIDElement {\n\tconstructor (data) {\n\t\tsuper();\n\n\t\tthis.data = data;\n\t\tthis.addTranslate('mcId');\n\t\tconst dataRole = 'scheduler';\n\t\tthis.addAttribute('data-role',dataRole);\n\t\tthis.addClass(this.data.icon || 'icon-video-call');\n\t\tthis.scheduler = new Scheduler(this.data.guid);\n\n\t\tif (!McIDElement.handlers?.[dataRole])\n\t\t\tMcIDElement.handlers[dataRole] = this.handler.bind(this);\n\t}\n\n\thandler () {\n\t\tthis.scheduler.meeting.show();\n\t}\n}\n\n\nclass McIDCallNow extends McIDElement {\n\tconstructor (data) {\n\t\tsuper();\n\n\t\tthis.data = data;\n\t\tthis.addTranslate('callNow');\n\t\tconst dataRole = 'callNow';\n\t\tthis.addAttribute('data-role',dataRole);\n\t\tthis.addAttribute('data-tel', this.data.tel);\n\t\tthis.addClass(this.data.icon || 'icon-call');\n\n\t\t// if (!McIDElement.handlers?.[dataRole])\n\t\t// \tMcIDElement.handlers[dataRole] = this.handler;\n\t}\n\n\thandler () {\n\t\tconst href = 'tel:' + this.data.tel;\n\t\twindow.open(href,'_blank');\n\t}\n\n\tgetClone(data) {\n\t\treturn new McIDCallNow({\n\t\t\ticon: data.icon,\n\t\t\ttel: data.tel\n\t\t});\n\t}\n}\n\nexport class McIDLead extends McIDElement {\n\tconstructor (data) {\n\t\tsuper();\n\n\t\tthis.data = data;\n\t\tthis.addTranslate('leadForm');\n\t\tconst dataRole = 'leadForm';\n\t\tthis.addAttribute('data-role',dataRole);\n\t\tthis.addClass(this.data.icon || 'icon-chat');\n\n\t\tif (!McIDElement.handlers?.[dataRole])\n\t\t\tMcIDElement.handlers[dataRole] = this.handler.bind(this);\n\t}\n\n\thandler () {\n\t\tif (McID.fromDreamsMap) {\n\t\t\tnew McIdLeadForm();\n\t\t} else {\n\t\t\tnew McIdDreamsForm();\n\t\t}\n\t}\n}\n\n\nexport class McIDEmail extends McIDElement {\n\tconstructor (data) {\n\t\tsuper('a');\n\n\t\tthis.data = data;\n\t\tthis.addTranslate(isMobile ? this.data.url : 'Email');\n\t\tconst dataRole = 'email';\n\t\tthis.addAttribute('data-role',dataRole);\n\t\tthis.addAttribute('href','mailto:' + this.data.url);\n\t\tthis.addClass(this.data.icon || 'icon-email');\n\n\t\t// McIDElement.handlers.push({[dataRole]: this.handler});\n\t}\n\n\thandler (e) {\n\t\te.preventDefault();\n\t\tconst href = 'mailto:' + this.data.url;\n\t\twindow.open(href,'_blank');\n\t}\n}\n\n\nexport class McIDWebsite extends McIDElement {\n\tconstructor (data) {\n\t\tsuper('a');\n\n\t\tthis.data = data;\n\t\tthis.addTranslate(this.data.url);\n\t\tconst dataRole = 'web';\n\t\tthis.addAttribute('data-role',dataRole);\n\t\tthis.addAttribute('href',this.data.url);\n\t\tthis.addClass(this.data.icon || 'icon-site');\n\n\t\t// McIDElement.handlers.push({[dataRole]: this.handler});\n\t}\n\n\thandler (e) {\n\t\te.preventDefault();\n\t\tconst href = this.data.url;\n\t\twindow.open(href,'_blank');\n\t}\n}\n\nexport class McIDContactUs {\n\tconstructor () {\n\t\tif(!Boolean(config['crmProjectSettings'].general.menuItems.contactUs))\n\t\t\treturn;\n\n\t\tthis.element = new BaseElement()\n\t\t\t.addClass('mc-id__contacts-block');\n\n\t\tthis.create();\n\t}\n\n\tasync create() {\n\t\tconst data = await getContactsDataFromAPI();\n\t\tconst mcidContentElement = document.querySelector('.mc-id__content');\n\n\t\tisMobile && new BaseElement('h1')\n\t\t\t.addClass('mc-id__contact-us-title', 'language-string')\n\t\t\t.setAttributes({'data-dictionary': 'contactUs'})\n\t\t\t.innerHtml(changeLangToCurrent('contactUs'))\n\t\t\t.appendTo(mcidContentElement);\n\n\t\tdata.forEach(item => {\n\t\t\tlet element;\n\n\t\t\tswitch (item.title) {\n\t\t\t\t// case 'phones':\n\t\t\t\tcase 'phone':\n\t\t\t\t\tconst iconClass = 'icon-call';\n\t\t\t\t\tconst tel = item.crmData.value || item.crmData\n\t\t\t\t\tconst callNowArguments = {\n\t\t\t\t\t\ticon: iconClass,\n\t\t\t\t\t\ttel\n\t\t\t\t\t};\n\n\t\t\t\t\tconst btn = new McIDCallNow(callNowArguments);\n\n\t\t\t\t\tif (isMobile) {\n\t\t\t\t\t\tif (!mcidContentElement.querySelector(`.mc-id__content > .${iconClass}`))\n\t\t\t\t\t\t\tMcID.addNewButton(btn.getDOM(),'mc-menu');\n\n\t\t\t\t\t\telement = btn.getClone(callNowArguments)\n\t\t\t\t\t\t\t.addClass('mc-id__element-block__child',`contacts-block__child--${item.title}`)\n\t\t\t\t\t\t\t.addTranslate(tel)\n\t\t\t\t\t\t\t.getDOM();\n\t\t\t\t\t} else if (!mcidContentElement.querySelector(`.mc-id__content > .${iconClass}`)) {\n\t\t\t\t\t\tMcID.addNewButton(btn.getDOM(),'mc-menu');\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'title':\n\t\t\t\tcase 'text':\n\t\t\t\t\telement = new McIDElement()\n\t\t\t\t\t\t.addClass('mc-id__element-block__child',`contacts-block__child--${item.title}`)\n\t\t\t\t\t\t.addTranslateObject(item.crmData)\n\t\t\t\t\t\t.getDOM();\n\t\t\t\t\tbreak;\n\t\t\t\t// case 'emails':\n\t\t\t\tcase 'email':\n\t\t\t\t\tif (mcidContentElement.querySelector(`.${item.icon}`))\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\telement = new McIDEmail({\n\t\t\t\t\t\turl: typeof item.crmData === 'object' ? item.crmData.value : item.crmData,\n\t\t\t\t\t\ticon: item.icon\n\t\t\t\t\t});\n\n\t\t\t\t\tif (isMobile) {\n\t\t\t\t\t\telement = element.addClass('mc-id__element-block__child',`contacts-block__child--${item.title}`)\n\t\t\t\t\t\t\t.getDOM();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tMcID.addNewButton(element.getDOM(),'mc-menu');\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'website':\n\t\t\t\t\telement = new McIDWebsite({\n\t\t\t\t\t\turl: item.crmData,\n\t\t\t\t\t\ticon: item.icon\n\t\t\t\t\t});\n\n\t\t\t\t\tif (isMobile) {\n\t\t\t\t\t\telement = element\n\t\t\t\t\t\t\t.addClass('mc-id__element-block__child',`contacts-block__child--${item.title}`)\n\t\t\t\t\t\t\t.getDOM();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\telement = element.getDOM();\n\t\t\t\t\t// \tMcID.addNewButton(element.getDOM(),'mc-menu');\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'whatsApp':\n\t\t\t\t\tconst whatsAppArgs = {\n\t\t\t\t\t\ttel: item.tel,\n\t\t\t\t\t\ticon: item.icon\n\t\t\t\t\t};\n\n\t\t\t\t\tconst whatsAppElement = new McIDWhatsApp(whatsAppArgs);\n\t\t\t\t\tMcID.addNewButton(whatsAppElement.getDOM(),'mc-menu');\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (element) {\n\t\t\t\tthis.element.appendElement(element);\n\t\t\t}\n\t\t});\n\n\t\tif (this.element.DOMElement.children.length && isMobile) {\n\t\t\tconst navigate = new McIDElement()\n\t\t\t\t.addClass('mc-id__element-block__child',`contacts-block__child--navigate`)\n\t\t\t\t.removeClass('language-string')\n\t\t\t\t.getDOM();\n\t\t\tcreateNavigateButton(navigate);\n\t\t\tthis.element.appendElement(navigate);\n\n\t\t\tMcID.addNewElement(this.element.DOMElement,'mc-menu');\n\t\t}\n\n\t\tif (isMobile) {\n\t\t\tconst headerWrapper = new BaseElement()\n\t\t\t\t.addClass('mc-id__element-block__child', 'contacts-block__header-wrapper')\n\t\t\t\t.appendTo(this.element.DOMElement);\n\t\t\tconst textWrapper = new BaseElement()\n\t\t\t\t.addClass('contacts-block__text-wrapper')\n\t\t\t\t.appendTo(headerWrapper.DOMElement);\n\t\t\tconst title = new BaseElement(this.element.DOMElement.querySelector('.contacts-block__child--title'));\n\t\t\tconst text = new BaseElement(this.element.DOMElement.querySelector('.contacts-block__child--text'));\n\t\t\tconst navigate = new BaseElement(this.element.DOMElement.querySelector('.contacts-block__child--navigate'));\n\t\t\ttitle.appendTo(textWrapper.DOMElement);\n\t\t\ttext.appendTo(textWrapper.DOMElement);\n\t\t\tnavigate.appendTo(headerWrapper.DOMElement);\n\t\t}\n\t}\n}\n","'use strict';\n\nimport {settingsData} from \"../../../settings\";\nimport { CustomerContactNow } from './CustomerContactNow';\nimport {IconTextLong} from \"../../interfaces/buttons/apple/IconTextLong\";\nimport {Button} from \"../../interfaces/buttons/Button\";\nimport { contactsData } from './contactUsConfig';\nimport {changeLangToCurrent, getCurrentLang} from '../../components/langSwitcher/langSwitcher';\nimport {\n changeFormTitle,\n changePlaceholder,\n customiseForm,\n moveFormToBlock,\n setTranslateToSendBtn,\n} from '../../components/form/form';\nimport {BaseElement} from \"../../interfaces/BaseElement\";\nimport { GoogleMaps } from '../../api/GoogleMaps';\nimport {getUrlParam} from \"../../../functions\";\nimport { BmbyMode } from '../../mode/BmbyMode';\n\nlet data = null;\n\nexport async function getContactsDataFromAPI() {\n if (BmbyMode.active) {\n data = [];\n return data;\n }\n if (!data)\n data = await contactsData();\n\n return data;\n}\n\nexport const createContactUs = async (parent) => {\n const contactUsBlock = new BaseElement()\n .addClass('contact-us__content','background-backdrop-filter')\n .appendTo(parent)\n .DOMElement;\n\n if (CustomerContactNow.isActive) {\n contactUsBlock.classList.add('customer-contact-now');\n moveFormToBlock(contactUsBlock, 'afterbegin');\n return;\n }\n\n const previewContactUs = new BaseElement()\n .addClass('contact-us__preview')\n .appendTo(contactUsBlock)\n .DOMElement;\n const previewBar = new BaseElement()\n .addClass('contact-us__preview-bar')\n .appendTo(previewContactUs)\n .DOMElement;\n const previewBarInfo = new BaseElement()\n .addClass('contact-us__preview-info')\n .appendTo(previewBar)\n .DOMElement;\n const previewBarTitle = new BaseElement('span')\n .addClass('contact-us__preview-title', 'text', 'subheadline')\n .appendTo(previewBarInfo)\n .DOMElement;\n const previewBarAddress = new BaseElement('span')\n .addClass('contact-us__preview-address', 'text', 'footnote')\n .appendTo(previewBarInfo)\n .DOMElement;\n\n createNavigateButton(previewBar);\n\n const contactsContactUs = new BaseElement()\n .addClass('contact-us__contacts')\n .appendTo(contactUsBlock)\n .DOMElement;\n const buttonsContactUs = new BaseElement()\n .addClass('contact-us__buttons')\n .appendTo(contactUsBlock)\n .DOMElement;\n\n await getContactsDataFromAPI().then(() => {\n addTitle(previewBarTitle);\n addText(previewBarAddress);\n addMap(previewContactUs);\n addContacts(contactsContactUs);\n addButtons(buttonsContactUs);\n });\n\n new CustomerContactNow('contact-us')\n .appendTo(buttonsContactUs);\n\n checkAndRemoveEmptyWrappers([buttonsContactUs]);\n\n if (config.general.leadForm || settingsData.isConferenceHost) {\n customiseForm(document.querySelector('.form__container-main'));\n const form = document.querySelector('.form__container-main');\n moveFormToBlock(contactsContactUs, 'afterend');\n changeFormTitle('leadFormTitle');\n setTranslateToSendBtn(form);\n changePlaceholder(form);\n }\n}\n\nfunction checkAndRemoveEmptyWrappers(wrappers = []) {\n wrappers.forEach(wrapper => {\n if (wrapper.children.length === 0)\n wrapper.remove();\n });\n}\n\nconst navigateToHandler = () => {\n const long = data.find(item => item.title === 'map')?.crmData.longitude;\n const lat = data.find(item => item.title === 'map')?.crmData.latitude;\n window.open(`https://maps.google.com/?saddr=My+Location&daddr=${lat},${long}`, '_blank');\n}\n\nconst addTitle = (parent) => {\n const title = data.find(item => item.title === 'title')?.crmData;\n if (title) {\n if (title[getCurrentLang()]) {\n parent.innerText = title[getCurrentLang()];\n } else {\n parent.innerText = title['en'];\n }\n }\n}\n\nconst addText = (parent) => {\n const text = data.find(item => item.title === 'text')?.crmData;\n if (text) {\n if (text[getCurrentLang()]) {\n parent.innerText = text[getCurrentLang()];\n } else {\n parent.innerText = text['en'];\n }\n }\n}\n\nconst addMap = (parent) => {\n const mapContainer = new BaseElement()\n .addClass('contact-us__map')\n .appendTo(parent)\n .DOMElement;\n\n const coordinates = data.find(item => item.title === 'map')?.crmData;\n if (coordinates) {\n new GoogleMaps().then(() => {\n const map = new google.maps.Map(mapContainer, {\n zoom: 15,\n center: {lat: Number(coordinates.latitude), lng: Number(coordinates.longitude)},\n });\n // The marker, positioned at Uluru\n new google.maps.Marker({\n position: {lat: Number(coordinates.latitude), lng: Number(coordinates.longitude)},\n map: map,\n });\n });\n }\n}\n\nconst addButtons = (parent) => {\n const phone = data.find(item => item.title === 'phones')?.crmData;\n if (phone && !(config.general.leadForm || settingsData.isConferenceHost)) {\n new IconTextLong('Call')\n .addIconClass('icon-call')\n .addClass('contact-us__action-button')\n .event('click', callHandler.bind(this, phone))\n .appendTo(parent);\n }\n\n const chatUrl = data.find(item => item.title === 'chatUrl')?.crmData;\n if (chatUrl) {\n const buttonChat = new BaseElement('button')\n .addClass('contact-us__buttons-btn', 'button')\n .appendTo(parent)\n .DOMElement;\n\n new BaseElement('span')\n .addClass('icon-chat')\n .appendTo(buttonChat);\n\n new BaseElement('span')\n .addClass('contact-us__buttons-chat', 'language-string')\n .addAttribute('data-dictionary', 'Chat with manager')\n .innerHtml(changeLangToCurrent('Chat with manager'))\n .event('click', () => window.open(chatUrl) )\n .appendTo(buttonChat);\n }\n}\n\nconst callHandler = (phone) => {\n window.location.href = 'tel:' + phone;\n}\n\nconst addContacts = (parent) => {\n const contactsList = new BaseElement('ul')\n .addClass('contacts-list', 'background-backdrop-filter')\n .appendTo(parent)\n .DOMElement;\n\n const contactsArray = ['phones', 'website', 'emails', 'phone', 'email'];\n data.forEach(item => {\n const object = contactsArray.find(elem => elem === item.title);\n if (!object)\n return;\n\n const element = new BaseElement('li')\n .addClass('contacts-list__item',\n 'mobile-menu-item',\n 'contacts-us__item',\n 'horizontal-separator'\n ).appendTo(contactsList);\n\n const link = new BaseElement('a')\n .addClass('contacts-list__link', 'text', 'body')\n .appendTo(element.DOMElement);\n const text = new BaseElement('span')\n .addClass('text');\n switch (item.title) {\n case 'website':\n link\n .addAttribute('target', '_blank')\n .addAttribute('href', item.crmData);\n\n const websiteDescriptionData = config.features?.contactUs?.website;\n if (websiteDescriptionData) {\n const innerText = changeLangToCurrent(websiteDescriptionData[getCurrentLang()]) || websiteDescriptionData['en'];\n link\n .addClass('language-string')\n .innerHtml(innerText)\n\n for (const key in websiteDescriptionData) {\n link.addAttribute(`data-lang-${key}`, websiteDescriptionData[key])\n }\n } else {\n link.innerHtml(item.crmData);\n }\n\n break;\n case 'phones':\n link\n .innerHtml(item.crmData)\n .addAttribute('href', `tel:${item.crmData}`)\n break;\n case 'emails':\n link\n .innerHtml(item.crmData)\n .addAttribute('href', `mailto:${item.crmData}`)\n break;\n case 'phone':\n link\n .innerHtml(item.crmData.value)\n .addAttribute('href', `tel:${item.crmData.value}`);\n const phoneInnerText = item.crmData.title[getCurrentLang()] || item.crmData.title['en'];\n text\n .innerHtml(phoneInnerText)\n .addClass('language-string');\n for (const language in item.crmData.title) {\n text.addAttribute(`data-lang-${language}`, item.crmData.title[language]);\n }\n element.prependElement(text.DOMElement)\n break;\n case 'email':\n const emailInnerText = item.crmData.title[getCurrentLang()] || item.crmData.title['en'];\n link\n .innerHtml(item.crmData.value)\n .addAttribute('href', `mailto:${item.crmData.value}`);\n text.innerHtml(emailInnerText);\n element.prependElement(text.DOMElement)\n break;\n default:\n break;\n }\n\n if (item.icon) {\n new BaseElement('span')\n .addClass('contacts-list__icon', `${item.icon}`)\n .appendTo(element.DOMElement)\n }\n });\n}\n\nexport function contactUsChangeLanguage () {\n const contactUs = document.querySelector('.contact-us__content');\n if (!contactUs) return;\n const title = contactUs.querySelector('.contact-us__preview-title');\n const address = contactUs.querySelector('.contact-us__preview-address');\n if (title && address) {\n title.innerHTML = '';\n address.innerHTML = '';\n addTitle(title);\n addText(address);\n }\n\n const map = contactUs.querySelector('.contact-us__map');\n if (map) {\n map.remove();\n new GoogleMaps().then(() => addMap(document.querySelector('.contact-us__preview')));\n }\n}\n\nexport function createNavigateButton (parent) {\n const isIOSApp = getUrlParam('ios') && parseInt(getUrlParam('ios')) === 1;\n return new Button('Navigate')\n .addClass('contact-us__preview-navigate', 'button', 'cards-buttons', 'icon-ios-navigate'/*'pill-button', */, isIOSApp ? 'hidden' : undefined)\n .event('click', navigateToHandler)\n .appendTo(parent);\n}\n","'use strict'\n\nimport { getContactsData } from '../../crm/crm-requests';\n\nexport const contactsData = async () => {\n const response = await getContactsData();\n const settings = await response.data;\n let data = [];\n const iconsArray = [\n {\n title: 'phones',\n icon: 'icon-call_filled',\n },\n {\n title: 'emails',\n icon: 'icon-email',\n },\n {\n title: 'website',\n icon: 'icon-site'\n },\n {\n title: 'phone',\n icon: 'icon-call_filled',\n },\n {\n title: 'email',\n icon: 'icon-email',\n },\n ];\n\n for (let [key, value] of Object.entries(settings)) {\n let iconValue = iconsArray.find(item => item.title === key);\n let object = [];\n\n if (Array.isArray(value)) {\n value.forEach((item, i) => {\n object.push({\n title: key,\n crmData: value[i],\n icon: iconValue ? iconValue.icon : '',\n })\n })\n } else {\n object.push({\n title: key,\n crmData: value,\n icon: iconValue ? iconValue.icon : '',\n });\n }\n\n data = data.concat(object);\n }\n\n return data;\n}","'use strict';\n\nimport { BaseElement } from '../../interfaces/BaseElement';\nimport { getDocuments } from '../../crm/crm-requests';\nimport {changeLangToCurrent, getCurrentLang} from '../../components/langSwitcher/langSwitcher';\nimport {isMobile} from \"../../../settings\";\n\nexport class Documents {\n static scopes = [];\n static active = false;\n\n constructor (parent = null) {\n this.data = config.documents;\n this.parent = parent;\n this.tabs = {};\n this.activeTab = null;\n }\n\n getData() {\n return new Promise(resolve => {\n getDocuments().then(response => {\n const data = JSON.parse(JSON.stringify(response.data));\n data.sort((a,b) => a.order - b.order);\n config.documents = data;\n resolve(data);\n });\n });\n }\n\n\n async create() {\n if (!this.data) {\n this.data = await this.getData();\n }\n\n const currentLang = getCurrentLang();\n this.mainContainer = new BaseElement()\n .addClass('documents','background-backdrop-filter')\n .appendTo(this.parent)\n .DOMElement;\n\n const navBar = new BaseElement()\n .addClass('documents-nav-bar','background-backdrop-filter','widget-menu__items')\n .event('click',this.navBarHandler.bind(this))\n .appendTo(this.mainContainer)\n .DOMElement;\n\n if (this.data.length < 2) {\n navBar.classList.add('hidden');\n }\n\n const tabs = new BaseElement()\n .addClass('documents-tabs')\n .appendTo(this.mainContainer)\n .DOMElement;\n\n this.data.forEach((tabContent,index) => {\n if (!tabContent.documents.length) return;\n\n const navButtonName = getValue(tabContent.name,currentLang);\n const navButton = new BaseElement('button')\n .addClass('gallery__tab__btn','text','documents-nav-bar__button')\n .addAttribute('data-tab-id',tabContent.categoryId)\n .innerHtml(navButtonName)\n .appendTo(navBar)\n .DOMElement;\n\n if (this.data.length - 1 !== index) {\n new BaseElement('span')\n .addClass('widget-menu__separator')\n .appendTo(navBar);\n }\n\n const descriptionText = 'Documents to download';\n new BaseElement()\n .addClass('documents-description')\n .innerHtml(changeLangToCurrent(descriptionText))\n .addAttribute('data-dictionary', descriptionText)\n .appendTo(tabs)\n\n const tab = new BaseElement()\n .addClass('documents-tab','hidden')\n .addAttribute('data-tab-id',tabContent.categoryId)\n .appendTo(tabs)\n .DOMElement;\n\n this.tabs[tabContent.categoryId] = {\n tab,\n button: navButton\n };\n\n tabContent.documents.forEach(document => {\n const title = getValue(document.title,currentLang);\n const url = getValue(document.fileUrl,currentLang);\n this.#setDocumentInterface({tab, title, url});\n });\n });\n\n if (Object.keys(this.tabs).length < 2) {\n navBar.classList.add('hidden');\n }\n\n if (this.activeTab) {\n this.setActive(this.activeTab.tab.dataset.tabId);\n } else {\n this.setActive(this.data[0].categoryId);\n }\n\n Documents.addToScopes(this);\n }\n\n #setDocumentInterface({tab, title, url}) {\n const documentItem = new BaseElement()\n .addClass('documents-item')\n .appendTo(tab);\n const urlSplit = url.split('.');\n const fileExtension = urlSplit[urlSplit.length - 1].toLowerCase();\n let iconClass = 'document-clear';\n switch(fileExtension) {\n case 'pdf':\n iconClass = 'document-pdf';\n break;\n }\n new BaseElement()\n .addClass('documents-item__icon', iconClass)\n .appendTo(documentItem.DOMElement);\n new BaseElement('h1')\n .addClass('documents-item__title', 'language-string')\n .innerHtml(changeLangToCurrent(title))\n .addAttribute('data-dictionary', title)\n .appendTo(documentItem.DOMElement);\n const link = new BaseElement('a')\n .addClass('documents-item__action-button', 'language-string')\n .innerHtml(changeLangToCurrent('Click to download'))\n .setAttributes({\n 'href': url,\n 'target': '_blank',\n 'download': '',\n 'data-dictionary': 'Click to download'\n })\n .appendTo(documentItem.DOMElement);\n if (isMobile) {\n link\n .innerHtml('')\n .deleteAttribute('data-dictionary')\n .deleteAttribute('href')\n .deleteAttribute('download')\n .deleteAttribute('target')\n .addClass('icon-download');\n\n documentItem\n .event('click', () => {\n window.open(url, '_blank').focus();\n });\n }\n }\n\n setActive(id) {\n const selectedTab = this.tabs[id];\n if (selectedTab) {\n if (this.activeTab) {\n this.activeTab.button.classList.remove('active');\n this.activeTab.tab.classList.add('hidden');\n }\n\n selectedTab.button.classList.add('active');\n selectedTab.tab.classList.remove('hidden');\n this.activeTab = selectedTab;\n }\n }\n\n changeLanguage() {\n this.mainContainer.remove();\n this.create();\n }\n\n navBarHandler(e) {\n const id = e.target.dataset.tabId;\n if (id) {\n this.setActive(id);\n }\n }\n\n static changeLanguage() {\n Documents.scopes.forEach(scope => scope.changeLanguage());\n }\n\n static addToScopes(scope) {\n const inScopes = Documents.scopes.find(scopes => scopes === scope);\n if (!inScopes) {\n Documents.scopes.push(scope);\n }\n }\n\n}\n\nfunction getValue (inputArray,currentLang) {\n let value = inputArray.find(obj => obj.lang === currentLang)?.value;\n if (!value) {\n inputArray.forEach(el => {\n if (el.value) {\n value = el.value\n }\n });\n }\n\n return value;\n}\n","import { createHtmlElement, isImgLink } from '../../../functions';\nimport Masonry from 'masonry-layout';\nimport {\n changeLangToCurrent,\n getCurrentLang\n} from '../../components/langSwitcher/langSwitcher';\nimport {isDesktop, isMobile, settingsData } from '../../../settings';\nimport {Disclaimer} from \"../../components/Disclaimer/Disclaimer\";\nimport { desktopErrorIcon } from '../../widgets/widgets';\nimport { Cloudflare } from '../../api/Cloudflare';\nimport PhotoSwipe from '../../../libs/photoswiper/photoswipe.esm';\nimport '../../../libs/photoswiper/photoswipe.css';\nimport { BaseElement } from '../../interfaces/BaseElement';\nimport { DreamsPreloader } from '../../components/preloader/DreamsPreloader';\n\n\nlet masonry;\n\nexport function galleryDesktop (parent) {\n const response = config.widgets.gallery;\n\n const mainContainer = new BaseElement()\n .addClass('desktop__gallery', 'background-backdrop-filter')\n .addAttribute('data-menu-item', 'gallery')\n .appendTo(parent);\n\n const galleryContainer = new BaseElement()\n .addClass('gallery__main-container')\n .appendTo(mainContainer.DOMElement);\n\n const disclaimer = new Disclaimer(galleryContainer.DOMElement, 'generalGalleryDisclaimer');\n disclaimer.addClass('gallery-Disclaimer');\n\n if (!checkCRM(response)){\n showErrorPage(galleryContainer.DOMElement);\n return;\n }\n\n const styleArray = [\n 'grid-item--height2',\n 'grid-item--height3',\n 'grid-item--height4',\n 'grid-item--height5'\n ];\n\n const menuContent = new BaseElement()\n .addClass('menu-content__wrapper', 'gallery__menu-content__wrapper', 'widget-menu__content-wrapper')\n .appendTo(galleryContainer.DOMElement);\n\n const tabs = new BaseElement()\n .addClass('gallery__tabs', 'widget-menu__items')\n .appendTo(menuContent.DOMElement);\n\n const container = new BaseElement()\n .addClass('gallery', 'grid')\n .addAttribute('id','lightGallery')\n .event('click', (e) => {\n e.preventDefault();\n openGallery(e);\n })\n .appendTo(galleryContainer.DOMElement);\n\n const containerWidth = container.DOMElement.getBoundingClientRect().width;\n const { columnCount, gutter } = settingsData.desktopGallery;\n const gridColumnWidth = isMobile && settingsData.isLandscape\n ? 112\n : Math.floor(containerWidth / columnCount) - gutter;\n\n new BaseElement('button')\n .addClass(\n 'gallery__tab__btn',\n 'language-string',\n 'text',\n 'body',\n 'widget-menu__item',\n )\n .setAttributes({\n 'data-dictionary': 'All',\n 'data-category': 'All',\n 'data-active': true\n })\n .text(changeLangToCurrent('All'))\n .appendTo(tabs.DOMElement);\n\n // new BaseElement('span')\n // .addClass('widget-menu__separator')\n // .appendTo(tabs.DOMElement);\n\n if (response.data.length <= 1)\n menuContent.addClass('hidden');\n\n response.data.forEach((category) => {\n const order = category?.order || 1;\n new BaseElement('span')\n .addClass('widget-menu__separator')\n .addStyle('order', order)\n .appendTo(tabs.DOMElement);\n\n const tab = new BaseElement('button')\n .addClass(\n 'gallery__tab__btn',\n 'language-string',\n 'text', 'body',\n 'widget-menu__item'\n )\n .addStyle('order', order)\n .appendTo(tabs.DOMElement);\n\n let categoryName;\n category.name.forEach(name => {\n if (name.lang === getCurrentLang())\n tab.text(name.value);\n if (name.lang === 'en')\n categoryName = name.value;\n tab.addAttribute(`data-lang-${name.lang}`,name.value);\n });\n\n tab.setAttributes({\n 'data-category': categoryName,\n 'data-active': true\n })\n\n let count = 0;\n category.pictures.forEach((picture, index) =>{\n const item = new BaseElement('a')\n .addClass('grid-item')\n .setAttributes({\n 'data-caption': picture.title.filter(text => text.lang === getCurrentLang())[0].value,\n 'data-caption-object': JSON.stringify(picture.title),\n 'fancybox': 'gallery',\n 'data-index-count': count\n })\n .addStyle('width', gridColumnWidth + 'px')\n .appendTo(container.DOMElement);\n\n let content;\n const isPicture = picture.imageUrl.match(/(.jpg)|(.png)|(.jpeg)/gi);\n if (isPicture) {\n item.addAttribute('href', Cloudflare.resize(picture.imageUrl,{\n width: isMobile ? 1024 : 2880,\n quality: 90\n }));\n\n content = new BaseElement('img')\n .addClass('gallery__image')\n .addAttribute('src', Cloudflare.resize(picture.imageUrl,{\n width: isDesktop ? 1024 : isMobile ? 200 : 800,\n quality: 75\n }))\n .appendTo(item.DOMElement);\n } else {\n content = new BaseElement('video')\n .addClass('gallery__video')\n .addAttribute('src', picture.imageUrl + '#t=0.5')\n .appendTo(item.DOMElement);\n item\n .addClass('icon-play')\n .addAttribute('href', picture.imageUrl);\n }\n\n item.addAttribute('data-category-name', categoryName);\n\n if (index % 2 && !config.features.gallery?.nonMozaic) {\n const randomClass = styleArray[getRandom(0, styleArray.length - 1)];\n item.addClass(randomClass);\n }\n\n content.setAttributes({\n 'data-category-name': categoryName,\n 'data-index-count': count\n });\n\n count++;\n });\n });\n\n masonry = new Masonry( container.DOMElement, {\n itemSelector: '.grid-item',\n stagger: 30,\n fitWidth: true,\n columnWidth: gridColumnWidth,\n gutter: gutter,\n });\n masonry.userData = {};\n masonry.userData.hidedElements = [];\n window.masonry = masonry;\n\n tabs.event('click', tabsHandler);\n removeHeightPropertyFromImageContainer();\n}\n\nfunction openGallery ({target}) {\n let targetElement;\n\n if (target.classList.contains('grid')){\n return;\n } else if (target.classList.contains('gallery__video') || (target.classList.contains('gallery__image'))){\n targetElement = target.parentElement;\n } else if (target.classList.contains('grid-item')){\n targetElement = target;\n }\n\n const allPictures = masonry.getItemElements();\n const visiblePictures = allPictures.filter(picture => picture.style.display !=='none');\n\n const selectedIndex = visiblePictures.findIndex(item => item === targetElement);\n const gallery = new PhotoSwiperGallery(visiblePictures,selectedIndex);\n gallery.open();\n}\n\nexport function resizeGallery () {\n const gallery = document.querySelector('.gallery');\n if (!gallery || gallery.classList.contains('hidden')) return;\n\n const container = document.querySelector('.gallery .grid');\n if (!container || !masonry) return;\n\n masonry.destroy();\n\n const containerWidth = container.getBoundingClientRect().width;\n const { columnCount, gutter } = settingsData.desktopGallery;\n const gridColumnWidth = isMobile && settingsData.isLandscape ? 112 : Math.floor(containerWidth / columnCount) - gutter;\n [...container.children].forEach(el => el.style.width = gridColumnWidth + 'px');\n\n masonry = new Masonry(container, {\n itemSelector: '.grid-item',\n stagger: 30,\n fitWidth: true,\n columnWidth: gridColumnWidth,\n gutter: gutter,\n });\n masonry.userData = {};\n masonry.userData.hidedElements = [];\n window.masonry = masonry;\n updateLayout();\n}\n\nfunction updateLayout () {\n masonry.layout();\n removeHeightPropertyFromImageContainer();\n}\n\nconst removeHeightPropertyFromImageContainer = () => {\n const imagesContainer = document.querySelector('.gallery .grid');\n if (imagesContainer)\n imagesContainer.style.removeProperty('height');\n}\n\nfunction tabsHandler ({target}) {\n if (target.dataset.category) {\n if (!validateTabs(target))\n return;\n\n if (target.dataset.category === 'All') {\n setAllTabsActive();\n } else {\n setActiveCategory(target.dataset.category);\n }\n\n if (isElementsHidden())\n showHiddenElements(getHiddenElements());\n\n const items = masonry.getItemElements();\n const categoriesNames = getActiveCategoriesNames();\n const sorted = items.filter(item => !categoriesNames.includes(item.dataset.categoryName));\n\n hideElements(sorted);\n updateLayout();\n }\n}\n\nfunction setAllTabsActive() {\n const allCategories = [...document.querySelectorAll('.gallery__tab__btn')];\n for (let category of allCategories) {\n category.dataset.active = 'true';\n }\n}\n\nfunction validateTabs (target) {\n const activeTabs = document.querySelectorAll(`.gallery__tab__btn[data-active=\"true\"]`);\n if (activeTabs.length >=2){\n return true;\n } else if (activeTabs[0] === target){\n return false;\n } else if (activeTabs[0] !== target){\n return true;\n }\n}\n\nfunction setActiveCategory (category) {\n const allCategories = [...document.querySelectorAll('.gallery__tab__btn')];\n for (let category of allCategories) {\n category.dataset.active = 'false';\n }\n // if (selectedCategory.dataset.active === 'true'){\n // selectedCategory.dataset.active = 'false';\n // } else {\n // selectedCategory.dataset.active = 'true';\n // }\n const selectedCategory = document.querySelector(`.gallery__tab__btn[data-category=\"${category}\"]`);\n if (selectedCategory.dataset.active !== 'true')\n selectedCategory.dataset.active = 'true';\n}\n\nfunction getActiveCategoriesNames () {\n const categoriesNames = [];\n const categories = document.querySelectorAll(`.gallery__tab__btn[data-active=\"true\"]`);\n\n categories.forEach(category =>{\n categoriesNames.push(category.dataset.category);\n });\n\n return categoriesNames;\n}\n\nfunction resetHidden () {\n masonry.userData.hidedElements = [];\n}\n\nfunction hideElements (elements) {\n resetHidden();\n masonry.userData.hidedElements = elements;\n // masonry.hideItemElements(elements);\n elements.forEach(el => el.style.display = 'none');\n}\n\nfunction getHiddenElements () {\n return masonry.userData.hidedElements;\n}\n\nfunction isElementsHidden () {\n return Boolean(masonry.userData.hidedElements.length);\n}\n\nfunction showHiddenElements (elements) {\n masonry.revealItemElements(elements || masonry.userData.hidedElements);\n masonry.userData.hidedElements = [];\n}\n\nfunction getRandom(min, max) {\n return Math.round(Math.random() * (max - min) + min);\n}\n\nfunction checkCRM (crm) {\n return Array.isArray(crm.data) && crm.data.length > 0;\n}\n\nfunction showErrorPage (mainContainer = document.querySelector('.gallery__main-container')) {\n const wrapper = createHtmlElement(mainContainer,'','div',['error-page__wrapper']);\n const icon = createHtmlElement(wrapper,'','div',['error-page__icon']);\n icon.innerHTML = desktopErrorIcon;\n createHtmlElement(wrapper,'The page is under construction','h1',['error-page__title']);\n}\n\n\nexport class PhotoSwiperGallery {\n constructor (data = [],index = 0,parent) {\n this.data = data;\n this.parent = parent;\n this.index = index;\n this.parsedData = [];\n this.onClose = () => {};\n }\n \n open() {\n this.#prepareData();\n let preloader = null;\n let timeOut = null;\n \n const options = {\n arrowNextSVG: '',\n arrowPrevSVG: '',\n dataSource: this.parsedData,\n appendToEl: this.parent,\n closeOnVerticalDrag: false,\n allowPanToNext: false,\n bgOpacity: 1,\n index: this.index\n };\n \n this.gallery = new PhotoSwipe(options);\n \n this.gallery.on('uiRegister',() => {\n //Disclaimer\n this.gallery.ui.registerElement({\n name: 'disclaimer',\n order: 9,\n isButton: false,\n appendTo: 'root',\n html: '',\n onInit: (el, pswp) => {\n const disclaimer = new Disclaimer(el, 'generalGalleryDisclaimer');\n disclaimer.addClass('gallery-widget__disclaimer');\n }\n });\n \n // Caption register\n this.gallery.ui.registerElement({\n name: 'caption',\n order: 9,\n isButton: false,\n appendTo: 'root',\n html: 'Caption text',\n onInit: (el, pswp) => {\n pswp.on('change', () => {\n if (pswp.currSlide.content.data.alt) {\n el.classList.remove('hidden');\n } else {\n el.classList.add('hidden');\n }\n el.innerHTML = pswp.currSlide.content.data.alt;\n });\n }\n });\n \n //Preloader\n this.gallery.ui.registerElement({\n name: 'dreams-preloader',\n appendTo: 'root',\n order: 11,\n html: '',\n onInit: (el, pswp) => {\n preloader = new DreamsPreloader(el).absolute();\n }\n })\n });\n \n this.gallery.on('contentActivate',({content}) => {\n \n switch (content.type) {\n case 'video':\n const video = content.element.querySelector('video');\n if (video.readyState === 0) {\n preloader.show();\n const interval = setInterval(() => {\n if (video.readyState === 4) {\n clearInterval(interval);\n preloader.hide();\n video.play();\n }\n },200)\n } else {\n preloader.hide();\n video.play();\n }\n break;\n case 'image':\n content.element.addEventListener('load',() => {\n if (timeOut) {\n clearTimeout(timeOut);\n }\n preloader.hide();\n });\n \n if (timeOut) {\n clearTimeout(timeOut);\n preloader.hide();\n }\n \n timeOut = setTimeout(() => {\n if (content.state !== 'loaded') {\n preloader.show();\n }\n },400);\n break;\n }\n });\n \n this.gallery.on('contentDeactivate',({content}) => {\n if (content.type === 'video') {\n const video = content.element.querySelector('video');\n video.pause();\n }\n });\n \n this.gallery.on('close',this.onClose);\n this.gallery.init();\n }\n \n #prepareData() {\n this.data.forEach(el => {\n if (el instanceof HTMLElement) {\n const captionObject = JSON.parse(el.dataset.captionObject);\n const captionText = captionObject.filter(caption => caption.lang === getCurrentLang())[0].value;\n const element = this.#prepareElement(el.href);\n element.alt = captionText;\n this.parsedData.push(element);\n } else {\n const element = this.#prepareElement(el);\n this.parsedData.push(element);\n }\n });\n }\n \n \n #prepareElement(url) {\n const data = {};\n \n if (isImgLink(url)) {\n data.src = url;\n data.type = 'image';\n } else {\n const content = new BaseElement().DOMElement;\n new BaseElement('video')\n .addClass('pswp__video')\n .addAttribute('controls',true)\n .addAttribute('src',url)\n .appendTo(content);\n \n data.html = content.innerHTML;\n data.type = 'video';\n }\n \n return data;\n }\n}\n","import {createHtmlElement} from \"../../../functions\";\nimport {isDesktop, isMobile} from \"../../../settings\";\n\nimport { changeLangToCurrent } from '../../components/langSwitcher/langSwitcher';\n\nimport QRCode from 'qrcode';\nimport { setLordIcon } from '../../../lordicon';\n\nexport const openGetApp = async (container) => {\n const {qrCodeUrl,appStoreUrl,googlePlayUrl} = config.getApp;\n\n if (isMobile){\n window.open(qrCodeUrl,'_blank');\n return;\n }\n\n await createGetApp(qrCodeUrl,appStoreUrl,googlePlayUrl,container);\n}\n\nasync function createGetApp(qrCode,appStoreLink,googlePlayLink,container) {\n const main = createHtmlElement(container,'','div',['get-app', 'background-backdrop-filter']);\n const contentContainer = createHtmlElement(main,'','div',['get-app__content-container']);\n\n if (isDesktop){\n const title = createHtmlElement(contentContainer,changeLangToCurrent('getAppTitleDesktop'),'h2',['get-app__title','language-string']);\n title.setAttribute('data-dictionary', 'getAppTitleDesktop');\n } else {\n const title = createHtmlElement(contentContainer,changeLangToCurrent('getAppTitle'),'h2',['get-app__title','language-string']);\n title.setAttribute('data-dictionary', 'getAppTitle');\n }\n\n if (qrCode){\n\n const scanIcon = createHtmlElement(contentContainer,'','div',['get-app__scan__icon']);\n setLordIcon('scanIcon',scanIcon,{\n stroke: 70\n });\n const qrCodeWrapper = createHtmlElement(contentContainer,'','div',['get-app__qr-code__wrapper']);\n\n await QRCode.toDataURL(qrCode, function (err, url) {\n qrCodeWrapper.style.backgroundImage = `url(${url})`;\n });\n }\n\n const btnWrapper = createHtmlElement(contentContainer,'','div',['get-app__btn-container']);\n\n if (isDesktop){\n btnWrapper.classList.add('hidden');\n }\n\n if (appStoreLink){\n const iosLink = createHtmlElement(btnWrapper,'','a',['get-app__link']);\n iosLink.href=appStoreLink;\n iosLink.setAttribute('target','_blank');\n const iosBtn = createHtmlElement(iosLink,'','img',['get-app__btn']);\n iosBtn.src='./img/appstore_button.svg';\n }\n\n if (googlePlayLink){\n const androidLink = createHtmlElement(btnWrapper,'','a',['get-app__link']);\n androidLink.href=googlePlayLink;\n androidLink.setAttribute('target','_blank');\n const androidBtn = createHtmlElement(androidLink,'','img',['get-app__btn']);\n androidBtn.src='./img/google_play_button.svg';\n }\n\n return main;\n}\n\n\n// window.getQRCode = async (link,fileName) => {\n// await QRCode.toDataURL(link, function (err, url) {\n// const a = document.createElement('a');\n// a.download = fileName;\n// a.href = url;\n// a.click();\n// });\n// }\n","import {\n openSearchHandler,\n toggleResultsList\n} from './search/search';\nimport {\n changeLangToCurrent,\n getCurrentLangDirection,\n} from '../components/langSwitcher/langSwitcher';\nimport {\n components,\n isDesktop,\n isMobile, isNoMenu,\n isTablet, isWeb,\n projectMode,\n settingsData,\n threeJsVariables, TRoot,\n UIRoot\n} from '../../settings';\nimport {\n autoRotateTimerAction,\n getOrbitControlsCurrentPolarAngle, hideOrbitToMapButton,\n} from '../controls/orbitControls';\nimport { CardTypes, ViewMode } from '../../common';\nimport gsap from 'gsap';\nimport {\n createHtmlElement,\n getUrlParam,\n freezingCanvas,\n highlightMenuButtonDependsOnMode, isPageExist, lockScreenOrientation, setCSSVar,\n userPrevent\n} from '../../functions';\nimport {renderUpdateValuesOnDemand} from '../../app';\nimport {openGetApp} from \"./getApp/getApp\";\nimport {\n buttonsWrapperHandler,\n showRightNavBar,\n toggleBackBtnInDesktopMode,\n viewModesSwitching\n} from './navigation/right-nav-bar';\nimport { changeFormTitle, moveFormToBlock } from '../components/form/form';\nimport { checkMapPanoramaInOrbit } from '../poi/poi';\nimport { UnitCardClass } from \"../cards/unitCards/UnitCardClass\";\nimport { addTechnicalSpecifications, closeOptionsCard } from \"../cards/cardsFunctions\";\nimport { enterToTheBuildingWithMaxAvailableApartments } from '../components/building-switch/building_switch';\nimport {setActiveLordIcon, setLordIcon, toggleIconParams} from '../../lordicon';\nimport { createMapPage, mapElementStyleToggle } from '../widgets/poi/poiv3';\nimport { analytics } from '../analytics/analytics';\nimport { PrivacyAndTerms } from \"./PrivacyAndTerms\";\nimport {closeContactWidget} from \"../components/chats/chats\";\nimport { BuildingOutline } from '../building/BuildingOutline';\nimport { SocialMedia } from '../components/share/Share';\nimport {Button} from \"../interfaces/buttons/Button\";\nimport {PopUpPage} from \"../interfaces/pages/PopUp\";\nimport {createContactUs} from \"./contactUs/contactUs\";\nimport {aboutWidgetInit} from \"./about/aboutv3\";\nimport {BaseElement} from \"../interfaces/BaseElement\";\nimport { galleryDesktop, resizeGallery } from './gallery/galleryDesktop';\nimport { Vantages } from '../components/vantage/Vantage';\nimport { OrbitToMap, transferToBuilding } from '../threejs/camera';\nimport { Documents } from './documents/Documents';\nimport { Cloudflare } from '../api/Cloudflare';\nimport { disposeTiles } from '../threejs/environment';\nimport { DreamsPreloader } from '../components/preloader/DreamsPreloader';\nimport { McID, McIDContactUs } from './contactUs/McID';\nimport { Sound } from '../components/preloader/Sound';\nimport { CustomerContactNow } from './contactUs/CustomerContactNow';\nimport { BmbyMode } from '../mode/BmbyMode';\nimport {IntersectionLegenda} from \"../components/IntersectionLegenda\";\nimport { VideoPopUp } from '../components/VideoPopUp';\n\nlet blockMenuWidthAnimation = false;\nexport function menuInit (crmSettings) {\n const aside = new BaseElement('aside')\n .addClass('aside__container', isNoMenu ? 'hidden' : null)\n .appendTo(UIRoot);\n\n\tif (!isMobile)\n\t\taside.event('transitionend',() => McID.resizeHandler());\n\n if (isMobile)\n new BaseElement()\n .addClass('substrate', 'background-backdrop-filter', 'aside__substrate')\n .appendTo(aside.DOMElement);\n const topContainer = new BaseElement()\n .addClass('aside__top__container')\n .appendTo(aside.DOMElement);\n const bottomContainer = new BaseElement()\n .addClass('aside__bottom__container')\n .appendTo(aside.DOMElement);\n if (isDesktop) {\n topContainer.addClass('background-backdrop-filter');\n bottomContainer.addClass('background-backdrop-filter');\n }\n const buttonsWrapper = new BaseElement()\n .addClass('buttons-wrapper')\n .appendTo(bottomContainer.DOMElement);\n new SocialMedia(buttonsWrapper.DOMElement, 'domain');\n const sound = new Sound();\n sound.addButton(buttonsWrapper.DOMElement,false,'sound-btn--menu');\n const closeButton = new Button()\n .addClass('aside__close-button', 'close-button-cross')\n .event('click', asideHandler)\n .appendTo(topContainer.DOMElement);\n new PrivacyAndTerms({parent: bottomContainer.DOMElement});\n let asideOpened = false;\n\n addOnClickAsideContainerMinimizerHandler();\n addAsideContainerOnMouseHandlers();\n\n if (isDesktop) {\n aside.addClass('important-right-side');\n const logo = new BaseElement()\n .addClass('aside__logo')\n .event('click', logoHandler)\n .appendTo(document.body);\n\n new BaseElement('img')\n .addClass('logo__img')\n .addAttribute('src', Cloudflare.resize(crmSettings.general.logo, {width: 400}))\n .appendTo(logo.DOMElement);\n } else if (crmSettings.general.fullWebsite && !isMobile) {\n closeButton.addClass('hidden');\n\n const logo = new BaseElement()\n .addClass('aside__logo')\n .event('click', logoHandler)\n .appendTo(topContainer.DOMElement);\n\n new BaseElement('img')\n .addClass('logo__img')\n .addAttribute('src', Cloudflare.resize(crmSettings.general.logo, {width: 400}))\n .appendTo(logo.DOMElement);\n\n aside.addClass('important-open-aside-menu');\n asideOpened = true;\n }\n\n let burgerCopy;\n if (isMobile) {\n const menuLogo = new BaseElement()\n .addClass('aside__logo')\n .appendTo(topContainer.DOMElement);\n new BaseElement('img')\n .addClass('logo__img')\n .appendTo(menuLogo.DOMElement)\n .DOMElement.src = Cloudflare.resize(crmSettings.general.logo, {width: 400});\n\n burgerCopy = new BaseElement()\n .addClass('burger__mobile__btn', 'icon-more')\n .appendTo(document.body);\n aside.addClass('active-aside-menu');\n\n mobileAsideMenuReorder(aside.DOMElement);\n }\n\n let languageSwitcherContainerParent = topContainer.DOMElement;\n if (isDesktop)\n languageSwitcherContainerParent = bottomContainer.DOMElement;\n let languageSwitcherContainer = null;\n if (!isDesktop) {\n languageSwitcherContainer = new BaseElement()\n .addClass('aside__language-switcher')\n .appendTo(languageSwitcherContainerParent);\n }\n\n const nav = new BaseElement('nav')\n .addClass('aside__navigation__menu')\n .appendTo(topContainer.DOMElement);\n const navList = new BaseElement('ul')\n .addClass('aside__navigation_list', isMobile ? 'background-backdrop-filter' : null)\n .appendTo(nav.DOMElement);\n\n if (!isDesktop && !config.features?.blockCylinderMode) {\n const dataMenuItem = 'search';\n const searchContainer = new BaseElement('li')\n .addClass('aside__navigation-menu__item', 'aside__search__container', isNoMenu ? 'no-menu-mode' : null)\n .addAttribute('data-menu-item', dataMenuItem)\n .appendTo(isNoMenu ? TRoot : navList.DOMElement);\n\n if (isNoMenu)\n searchContainer.event('click', async () => {\n // const unitCard = UnitCardClass.findCard()?.html;\n const searchContainer = document.querySelector('.search__container-main');\n if (searchContainer) {\n // if (isMobile) {\n // unitCard && UnitCardClass.closeMobileCard();\n // searchSwipeUpHandler();\n // }\n Vantages.isActive() && Vantages.close();\n if (settingsData.activeViewMode === ViewMode.Orbit)\n enterToTheBuildingWithMaxAvailableApartments();\n } else {\n // if (unitCard && isMobile)\n // await UnitCardClass.closeMobileCard();\n if (settingsData.activeViewMode === ViewMode.Orbit) {\n enterToTheBuildingWithMaxAvailableApartments();\n } else {\n if (Vantages.isActive()) {\n Vantages.close(openSearchHandler);\n } else {\n await openSearchHandler();\n }\n }\n }\n });\n\n new BaseElement('span')\n .addClass('aside__navigation-menu__text', 'language-string', 'text', 'body')\n .innerHtml(changeLangToCurrent(dataMenuItem))\n .setAttributes({\n 'data-menu-item': dataMenuItem,\n 'data-dictionary': dataMenuItem\n })\n .appendTo(searchContainer.DOMElement);\n\n if (isMobile) {\n searchContainer.addClass('mobile-menu-item');\n new BaseElement('span')\n .addClass('aside__navigation-menu__icon', 'icon-search')\n .appendTo(searchContainer.DOMElement);\n } else {\n setLordIcon('search', searchContainer.DOMElement, {trigger: 'hover', delay: '0'})\n .classList.add('aside__navigation-menu__icon');\n }\n } else {\n new BaseElement('button')\n .addClass(\n 'menu__back-btn',\n 'button-modes',\n 'button-modes--back',\n 'icon-back',\n 'prevent-hide',\n 'background-backdrop-filter'\n ).event('click', buttonsWrapperHandler)\n .addAttribute('data-button', 'back')\n .appendTo(isDesktop ? aside.DOMElement : topContainer.DOMElement);\n }\n\n const isApplication = getUrlParam('minimap');\n\n McID.prepareMenuItems(crmSettings.general.menuItems);\n\n const allActiveMenu = Object.entries(crmSettings.general.menuItems).reduce((acc, value) => {\n if (value[1])\n acc.push(value[0]);\n return acc;\n }, []);\n\n sortMenuItems(allActiveMenu);\n\n allActiveMenu.forEach(key => {\n if (key === 'getApp' && isApplication || isMobile && key === 'contactUs')\n return;\n\n const menuItem = new BaseElement('li')\n .addClass('aside__navigation-menu__item')\n .appendTo(navList.DOMElement);\n if (isMobile) {\n menuItem.addClass(\n 'mobile-menu-item',\n 'horizontal-separator'\n );\n }\n\n new BaseElement('span')\n .addClass('aside__navigation-menu__text', 'language-string', 'text', 'body')\n .innerHtml(changeLangToCurrent(key))\n .setAttributes({\n 'data-dictionary': key,\n 'data-menu-item': key\n })\n .appendTo(menuItem.DOMElement);\n\n menuItem.addAttribute('data-menu-item', key);\n\n if (isInAsideMenu(menuItem.DOMElement))\n menuItem.removeClass('horizontal-separator');\n\n const icon = new BaseElement('span')\n .addClass('aside__navigation-menu__icon')\n .appendTo(menuItem.DOMElement);\n switch (key) {\n case '3dModel':\n isMobile\n ? icon.addClass('icon-home2')\n : setLordIcon('3dModel', menuItem.DOMElement, {trigger: 'hover', delay: '0'});\n break;\n case 'about':\n isMobile\n ? icon.addClass('icon-exclamation-mark')\n : setLordIcon('about', menuItem.DOMElement, {trigger: 'hover', delay: '0'});\n break;\n case 'gallery':\n isMobile\n ? icon.addClass('icon-photo-gallery')\n : setLordIcon('gallery', menuItem.DOMElement, {trigger: 'hover', delay: '0'});\n break;\n case 'specifications':\n isMobile\n ? icon.addClass('icon-engagement')\n : setLordIcon('engagement', menuItem.DOMElement, {trigger: 'hover', delay: '0'});\n break;\n case 'documents':\n isMobile\n ? icon.addClass('icon-document')\n : setLordIcon('documents', menuItem.DOMElement, {trigger: 'hover', delay: '0'});\n Documents.active = true;\n break;\n case 'map':\n isMobile\n ? icon.addClass('icon-location-pin')\n : setLordIcon('map', menuItem.DOMElement, {trigger: 'hover', delay: '0'});\n break;\n case 'contactUs':\n isMobile\n ? icon.addClass('icon-telephone-cross')\n : setLordIcon('contactUs', menuItem.DOMElement, {trigger: 'hover', delay: '0'});\n break;\n case 'getApp':\n isMobile\n ? icon.addClass('icon-qr-code')\n : setLordIcon('getApp', menuItem.DOMElement, {trigger: 'hover', delay: '0'});\n break;\n }\n });\n\n if (!config.features?.blockCylinderMode)\n insertSearchBtnToTheCenterOfMenu();\n\n let mcId;\n if (!isNoMenu) {\n const mcIdData = McID.getData() || {};\n if (config.schedulerId && !mcIdData.hasOwnProperty('mcId')) {\n mcIdData.mcId = {\n guid: config.schedulerId\n }\n }\n mcId = new McID(mcIdData, 'mc-menu');\n }\n\n if (mcId?.container) {\n if (isMobile) {\n UIRoot.appendChild(mcId.container);\n } else {\n bottomContainer.DOMElement.insertAdjacentElement('afterbegin',mcId.container);\n }\n }\n\n if (!isNoMenu)\n !McID.fromDreamsMap && new McIDContactUs();\n\n addAdditionalMenu(crmSettings.general, burgerCopy?.DOMElement);\n if (config.languages.length > 1) {\n let langToggleContainer = languageSwitcherContainer?.DOMElement;\n if (isDesktop)\n langToggleContainer = bottomContainer?.DOMElement;\n\n const langToggle = new BaseElement()\n .addClass('header__lang-toggle')\n .appendTo(langToggleContainer);\n setLordIcon('lang', langToggle.DOMElement, {\n trigger: 'hover',\n delay:'0'\n });\n }\n\n if (isMobile)\n removeHorizontalSeparatorFromLastMenuItem();\n setMenuPositionDataAttribute();\n // aside.dataset.initialWidth = asideInitialWidth;\n aside.addAttribute('data-initial-width', isDesktop ? 0 : Math.round(aside.DOMElement.getBoundingClientRect().width))\n animateMenu(aside.DOMElement, burgerCopy?.DOMElement, asideOpened);\n navList.event('click', menuHandler);\n setMenuWidthIntoCssVar();\n setDefaultActiveMenuItem();\n}\n\nfunction sortMenuItems (items) {\n const position = {\n \"3dModel\": 0,\n \"about\": 1,\n \"gallery\": 2,\n \"documents\": 3,\n \"map\": 4,\n \"contactUs\": 5\n };\n\n items.sort((a,b) => {\n const firstPosition = position[a];\n const secondPosition = position[b];\n\n if (firstPosition < secondPosition) {\n return -1;\n } else if (secondPosition < firstPosition) {\n return 1;\n } else {\n return 0;\n }\n });\n}\n\nconst setDefaultActiveMenuItem = () => {\n const isAnyActiveMenuItem = Boolean(document.querySelector('.aside__active-menu'));\n if (!isAnyActiveMenuItem)\n setMenuActive('3dModel');\n}\n\nconst setMenuWidthIntoCssVar = () => {\n const menuElement = document.querySelector('.aside__container');\n const menuWidth = menuElement.getBoundingClientRect().width;\n // document.querySelector(':root').style.setProperty('--webAsideMenuWidth', `${menuWidth}px`);\n setCSSVar('--webAsideMenuWidth', `${menuWidth}px`);\n}\n\nconst removeHorizontalSeparatorFromLastMenuItem = () => {\n const asideNavigationMenuList = document.querySelector('.aside__navigation_list');\n const itemsHaveHorizontalSeparator = [...asideNavigationMenuList.getElementsByClassName('horizontal-separator')];\n itemsHaveHorizontalSeparator[itemsHaveHorizontalSeparator.length - 1].classList.remove('horizontal-separator');\n}\n\nconst isInAsideMenu = (item) => {\n const asideMenuItemsCatalogue = [\n '3dModel',\n 'search',\n 'map',\n 'contactUs',\n 'more'\n ];\n const dataMenuItem = item.getAttribute('data-menu-item');\n\n return asideMenuItemsCatalogue.some(item => {\n return item === dataMenuItem;\n });\n}\n\nconst mobileAsideMenuReorder = (asideContainer) => {\n const asideTopContainer = asideContainer.querySelector('.aside__top__container');\n const asideBottomContainer = asideContainer.querySelector('.aside__bottom__container');\n const privacyAndTerms = asideBottomContainer.querySelector('.privacy-and-terms');\n asideTopContainer.appendChild(privacyAndTerms);\n asideBottomContainer.remove()\n}\n\nexport function logoHandler () {\n projectMode.Pagination.paginate({source: 'logoHandler'});\n window.location.reload();\n}\n\nfunction addAdditionalMenu (crm, burgerButton) {\n if (!isMobile || isNoMenu)\n return;\n\n const container = new BaseElement()\n .addClass('additional-menu__container', 'background-backdrop-filter')\n .appendTo(UIRoot);\n const wrapper = new BaseElement()\n .addClass('additional-menu__wrapper')\n .appendTo(container.DOMElement);\n const shape = new BaseElement()\n .addClass('additional-menu__shape')\n .appendTo(wrapper.DOMElement);\n const nav = new BaseElement('ul')\n .addClass('additional-menu__navigation')\n .event('click', menuHandler)\n .appendTo(shape.DOMElement);\n\n ['3dModel', 'map', 'search', /*contact*/'contactUs','More'].forEach((btn) => {\n const isContactUs = Boolean(config['crmProjectSettings'].general.menuItems.contactUs);\n if ((btn === 'contactUs' && !isContactUs) || (btn === 'search' && config.features?.blockCylinderMode) /*|| btn === 'contactUs' && McID.fromDreamsMap*/)\n return;\n\n const li = new BaseElement('li')\n .addClass('additional-menu__item')\n .appendTo(nav.DOMElement);\n\n if (btn === 'More') {\n burgerButton.setAttribute('data-menu-item', 'More');\n li.DOMElement.appendChild(burgerButton);\n } else {\n setLordIcon(btn, li.DOMElement,{\n trigger: 'hover',\n delay:'0'/*,\n primaryColor: '#ffffff',\n secondaryColor: '#ffffff',*/\n });\n }\n li.addAttribute('data-menu-item', btn);\n\n const buttonText = document.createElement('span');\n buttonText.classList.add(\n 'additional-menu__item-text',\n 'language-string',\n 'text',\n 'menu-icon'\n );\n buttonText.setAttribute('data-dictionary', btn);\n buttonText.innerHTML = changeLangToCurrent(btn);\n\n li.DOMElement.appendChild(buttonText);\n if (btn === '3dModel')\n li.addClass('additional-menu__active');\n\n if (btn === 'contactUs') {\n li.DOMElement.querySelector('.lord__icon').classList.add('hidden');\n li.DOMElement.prepend(McID.scope[0].container);\n }\n });\n\n const fragment = document.createDocumentFragment();\n nav.DOMElement.insertBefore(fragment, nav.DOMElement.childNodes[1]);\n}\n\nfunction insertSearchBtnToTheCenterOfMenu () {\n if (isDesktop) {\n const nav = document.querySelector('.aside__navigation_list');\n const totalElements = nav.childElementCount;\n const searchElementIndex = Math.floor(totalElements / 2);\n const fragment = document.createDocumentFragment();\n const searchContainer = createHtmlElement(fragment, '', 'li', ['aside__navigation-menu__item', 'aside__search__container', 'icon-search']);\n searchContainer.dataset.menuItem = 'search';\n setLordIcon('search',searchContainer,{trigger: 'hover',delay:'0'});\n const searchText = createHtmlElement(searchContainer, changeLangToCurrent(searchContainer.dataset.menuItem), 'span', ['aside__navigation-menu__text', 'language-string', 'text', 'body']);\n searchText.dataset.menuItem = searchContainer.dataset.menuItem;\n searchText.setAttribute('data-dictionary', searchContainer.dataset.menuItem);\n nav.insertBefore(fragment, nav.childNodes[searchElementIndex]);\n }\n}\n\nexport function setMenuPositionDataAttribute () {\n const menu = document.querySelector('.aside__container');\n const currentDirection = getCurrentLangDirection();\n\n if (isDesktop) {\n menu.dataset.menuPosition = 'right';\n } else {\n switch (currentDirection) {\n case 'rtl':\n menu.dataset.menuPosition = 'right';\n break;\n case 'ltr':\n menu.dataset.menuPosition = 'left';\n break;\n }\n }\n}\n\nexport function changeMenuStyle () {\n const burgerMenu = document.querySelector('.aside__burger__btn');\n if (!isMobile || !burgerMenu) {\n return;\n }\n\n switch (settingsData.activeViewMode) {\n case ViewMode.Orbit:\n const angle = getOrbitControlsCurrentPolarAngle();\n angle < 1 ?\n burgerMenu.classList.add('menu__substrate'):\n burgerMenu.classList.remove('menu__substrate');\n break;\n case ViewMode.Cylinder:\n burgerMenu.classList.add('menu__substrate');\n break;\n }\n}\n\nexport function getActiveMenuData () {\n if (isMobile) {\n return document.querySelector('.additional-menu__active')?.dataset.menuItem;\n } else {\n return document.querySelector('li.aside__active-menu')?.dataset.menuItem;\n }\n}\n\nexport async function menuHandler (e) {\n // change/remove this as well if you changed specifications lordIcon\n if (e.target.dataset.menuItem === 'document' || e.target.dataset.menuItem === 'engagement')\n e.target.dataset.menuItem = 'specifications';\n\n let menuItem = e.target.dataset.menuItem;\n\n if (!e.target.dataset.menuItem) {\n const closestDataMenuItem = e.target.closest('[data-menu-item]');\n if (!closestDataMenuItem)\n return;\n menuItem = closestDataMenuItem.getAttribute('data-menu-item');\n }\n\n // if (isMobile && settingsData.activeViewMode === ViewMode.Cylinder && menuItem === 'search')\n // components.mobileSearch.openFilter();\n\n const isCylinderBlockedInMobile = config.features?.blockCylinderMode && isMobile;\n const isCurrentItemIsSelected = getActiveMenuData() === menuItem;\n const isCurrentItemContactUsInMobile = isMobile && (menuItem === 'contactUs');\n const isFromApplyNow = Boolean(e.target.dataset?.isFromApplyNow);\n if ((isCylinderBlockedInMobile && menuItem === 'search') || isCurrentItemIsSelected || (isCurrentItemContactUsInMobile && McID.active && !isFromApplyNow))\n return;\n\n const isTargetMore = menuItem === 'More';\n const isTargetPlayBouncy = menuItem === 'playBouncy';\n if (!isTargetMore && !isTargetPlayBouncy)\n closeContactWidget();\n\n if (!userPrevent())\n projectMode.Pagination.paginate({source: 'menuHandler', menuItem: menuItem});\n if (document.querySelector(`.${CardTypes.Options}-card`)) {\n if (document.querySelector('.form__container-main'))\n moveFormToBlock();\n if (!isMobile && e.target.dataset.menuItem !== 'contactUs')\n closeOptionsCard();\n }\n if (document.querySelector(`.apply__main-container:not(.chats)`))\n document.querySelector(`.apply__main-container:not(.chats)`).remove();\n if (!threeJsVariables.orbitControls.enabled && !settingsData.tourIsActive && !projectMode.LiteMode.isActive())\n return;\n\n\n const gallerySelector = '.pop-up-page.gallery';\n const isMobileGalleryActive = isMobile && document.querySelector(gallerySelector);\n const isTargetIsHtmlElement = isMobile && e.target instanceof HTMLElement;\n if (!isTargetMore && (isTargetIsHtmlElement || !isMobileGalleryActive) && !isTargetPlayBouncy)\n PopUpPage.hide();\n\n let orbitPanorama;\n const streetView = document.querySelector('.map__panorama');\n\n if (VideoPopUp.isPlaying() && !isMobile) {\n VideoPopUp.shrink();\n }else {\n VideoPopUp.close();\n }\n\n freezingCanvas(false);\n\n switch (menuItem) {\n case 'search':\n if (userPrevent() || projectMode.LiteMode.preventPointerEvents() || settingsData.loadingError)\n return;\n\n if (settingsData.activeViewMode === ViewMode.Orbit)\n removeAsideContainerOnMouseHandlers();\n closeOptionsCard_localFunction();\n hideOrbitToMapButton();\n orbitPanorama = checkMapPanoramaInOrbit();\n orbitPanorama && orbitPanorama.classList.remove('map__panorama__orbit__show');\n streetView && streetView.classList.remove('map__panorama__show');\n settingsData.resolveTilesUpdate = true;\n renderUpdateValuesOnDemand(false);\n closePages();\n toggleResultsList('close');\n\n const searchContainer = document.querySelector('.search__container-main');\n if (searchContainer) {\n Vantages.isActive() && Vantages.close();\n if (settingsData.activeViewMode === ViewMode.Orbit)\n enterToTheBuildingWithMaxAvailableApartments();\n } else {\n if (settingsData.activeViewMode === ViewMode.Orbit) {\n enterToTheBuildingWithMaxAvailableApartments().then(isEntered => {\n if (!isEntered) {\n menuItem = null;\n }\n\n });\n } else {\n if (Vantages.isActive()) {\n Vantages.close(openSearchHandler);\n } else {\n !isMobile && await openSearchHandler().then(() => {\n setMenuActive(menuItem);\n });\n }\n }\n }\n \n await threeJsVariables.cloth.removeCloth();\n setMenuActive(menuItem);\n\n if (isDesktop)\n floorSliderVisibility('show');\n\n analytics('page_entrance','search');\n closeAsideMenu();\n break;\n case '3dModel':\n if (userPrevent() || projectMode.LiteMode.preventPointerEvents())\n return;\n\n closeOptionsCard_localFunction();\n projectMode.LiteMode.setDefaultPosition();\n\n orbitPanorama = checkMapPanoramaInOrbit();\n if (orbitPanorama)\n orbitPanorama.classList.remove('map__panorama__orbit__show');\n if (streetView)\n streetView.classList.remove('map__panorama__show');\n settingsData.resolveTilesUpdate = true;\n renderUpdateValuesOnDemand(false);\n closePages();\n closeAsideMenu();\n if (settingsData.activeViewMode !== ViewMode.Orbit) {\n if (Vantages.isActive()) {\n Vantages.close(() => viewModesSwitching(ViewMode.Orbit));\n } else {\n await viewModesSwitching(ViewMode.Orbit);\n }\n if (isMobile && components.mobileSearch) {\n components.mobileSearch.remove();\n components.mobileSearch = null;\n }\n } else {\n const mapIsActive = isMobile ?\n document.querySelector('.additional-menu__item[data-menu-item=\"map\"].additional-menu__active') :\n document.querySelector('li[data-menu-item=\"map\"].aside__active-menu');\n if (mapIsActive && e instanceof Event) {\n toggleAsideMenu(menuItem);\n await transferToBuilding()\n }\n toggleBackBtnInDesktopMode('hide');\n setMenuActive(menuItem);\n }\n\n if (e instanceof Event)\n BuildingOutline.toggle(true);\n\n lockScreenOrientation();\n\n analytics('page_entrance','3dModel');\n break;\n case 'documents':\n if (userPrevent() || projectMode.LiteMode.preventPointerEvents() || !Documents.active)\n return;\n\n let documentsPage = document.querySelector('.documents-page');\n if (!documentsPage) {\n documentsPage = new PopUpPage('documents');\n documentsPage.addClass('documents-page');\n documentsPage.titleIcon = 'icon-document';\n new Documents(documentsPage.contentElement).create();\n } else {\n documentsPage.classList.remove('hidden');\n }\n\n PopUpPage.animation('show');\n \n if (isDesktop)\n showRightNavBar();\n\n setMenuActive(menuItem);\n closeAsideMenu();\n analytics('page_entrance','documents');\n break;\n case 'contactUs':\n if (userPrevent())\n return;\n\n const contactUs = document.querySelector('.contact-us');\n if (!contactUs) {\n const contactUsPage = new PopUpPage('Contact us');\n contactUsPage.addClass('contact-us');\n contactUsPage.titleIcon = 'icon-call';\n createContactUs(contactUsPage.contentElement);\n } else {\n contactUs.classList.remove('hidden');\n\n let formParent, formPosition;\n\n if (CustomerContactNow.isActive) {\n formParent = document.querySelector('.contact-us__content');\n formPosition = 'afterbegin';\n } else {\n formParent = document.querySelector('.contact-us__contacts');\n formPosition = 'afterend';\n }\n\n moveFormToBlock(formParent, formPosition);\n changeFormTitle('leadFormTitle');\n const form = document.querySelector('.form__container-main');\n if (form)\n form.querySelector('input[type=\"email\"]')?.parentElement.classList.remove('hidden');\n }\n PopUpPage.animation('show');\n\n orbitPanorama = checkMapPanoramaInOrbit();\n if (orbitPanorama)\n orbitPanorama.classList.remove('map__panorama__orbit__show');\n setMenuActive(menuItem);\n closeAsideMenu();\n analytics('page_entrance','contactUs');\n break;\n case 'getApp':\n if (userPrevent())\n return;\n\n orbitPanorama = checkMapPanoramaInOrbit();\n if (orbitPanorama)\n orbitPanorama.classList.remove('map__panorama__orbit__show');\n const getApp = document.querySelector('.get-app-popup');\n if (!getApp) {\n if (!isMobile) {\n const getApp = new PopUpPage('Get app');\n getApp.titleIcon = 'icon-qr-code';\n openGetApp(getApp.contentElement);\n setMenuActive(e.target.dataset.menuItem);\n } else {\n openGetApp();\n highlightMenuButtonDependsOnMode();\n }\n } else {\n getApp.classList.remove('hidden');\n }\n !isMobile && PopUpPage.animation('show');\n closeAsideMenu();\n analytics('page_entrance','getApp');\n break;\n case 'about':\n if (userPrevent())\n return;\n\n const isAboutWebViewUrl = config.crmProjectSettings.general?.aboutWebviewURL;\n const aboutUs = document.querySelector('.about-us');\n if (!aboutUs) {\n const aboutUs = new PopUpPage('About');\n aboutUs.addClass('about-us');\n aboutUs.titleIcon = 'icon-exclamation-mark';\n\n if (isAboutWebViewUrl) {\n new BaseElement('iframe')\n .addClass('about-web-view-url')\n .setAttributes({\n 'src': isAboutWebViewUrl\n })\n .appendTo(aboutUs.contentElement);\n } else if (!config.widgets?.about) {\n const preloader = new DreamsPreloader(aboutUs.contentElement);\n preloader.show();\n const awaitAboutResponse = setInterval(() => {\n if (config.widgets?.about) {\n clearInterval(awaitAboutResponse);\n preloader.remove();\n aboutWidgetInit(aboutUs.contentElement);\n }\n },100);\n } else {\n aboutWidgetInit(aboutUs.contentElement);\n }\n } else {\n aboutUs.classList.remove('hidden');\n }\n Vantages.isActive() && Vantages.close();\n PopUpPage.animation('show');\n\n if (isDesktop)\n showRightNavBar();\n\n orbitPanorama = checkMapPanoramaInOrbit();\n if (orbitPanorama)\n orbitPanorama.classList.remove('map__panorama__orbit__show');\n if (isMobile)\n playDownAllMenuButtons();\n if (!isMobile)\n setMenuActive(menuItem);\n closeAsideMenu();\n analytics('page_entrance',menuItem);\n break;\n case 'gallery':\n if (userPrevent())\n return;\n\n const isGalleryWebViewUrl = config.crmProjectSettings.general?.galleryWebviewURL;\n const gallery = document.querySelector('.gallery');\n if (!gallery) {\n const gallery = new PopUpPage('Gallery');\n gallery.addClass('gallery');\n gallery.titleIcon = 'icon-photo-gallery';\n\n if (isGalleryWebViewUrl) {\n new BaseElement('iframe')\n .addClass('gallery-web-view-url')\n .setAttributes({\n 'src': isGalleryWebViewUrl\n })\n .appendTo(gallery.contentElement);\n } else if (!config.widgets?.gallery) {\n const preloader = new DreamsPreloader(gallery.contentElement);\n preloader.show();\n const awaitGalleryResponse = setInterval(() => {\n if (config.widgets?.gallery) {\n clearInterval(awaitGalleryResponse);\n preloader.remove();\n galleryDesktop(gallery.contentElement);\n }\n },100);\n } else {\n galleryDesktop(gallery.contentElement);\n }\n } else {\n gallery.classList.remove('hidden');\n if (!isGalleryWebViewUrl && isMobile)\n resizeGallery();\n }\n\n Vantages.isActive() && Vantages.close();\n PopUpPage.animation('show');\n\n if (isDesktop)\n showRightNavBar();\n\n orbitPanorama = checkMapPanoramaInOrbit();\n if (orbitPanorama)\n orbitPanorama.classList.remove('map__panorama__orbit__show');\n if (isMobile)\n playDownAllMenuButtons();\n if (!isMobile)\n setMenuActive(menuItem);\n closeAsideMenu();\n analytics('page_entrance',menuItem);\n break;\n case 'specifications':\n if (userPrevent())\n return;\n\n const specifications = document.querySelector('.pop-up-page.specifications');\n if (!specifications) {\n const specifications = new PopUpPage('specifications');\n specifications.addClass('specifications');\n specifications.titleIcon = 'icon-engagement';\n const content = specifications.contentElement;\n addTechnicalSpecifications(null, content);\n const specsBlock = content.children[1];\n specsBlock.className = 'specifications background-backdrop-filter';\n specsBlock.children[0].remove();\n } else {\n specifications.classList.remove('hidden');\n }\n\n Vantages.isActive() && Vantages.close();\n PopUpPage.animation('show');\n\n if (isDesktop)\n showRightNavBar();\n\n orbitPanorama = checkMapPanoramaInOrbit();\n if (orbitPanorama)\n orbitPanorama.classList.remove('map__panorama__orbit__show');\n if (isMobile)\n playDownAllMenuButtons();\n if (!isMobile)\n setMenuActive(menuItem);\n closeAsideMenu();\n analytics('page_entrance',menuItem);\n break;\n case 'playBouncy':\n if (userPrevent())\n return;\n VideoPopUp.open();\n analytics('page_entrance','Video');\n break;\n case 'More':\n if (userPrevent())\n return;\n\n const asideMenu = document.querySelector('.aside__container');\n asideMenu.classList.toggle('mobile-menu__show');\n\n if (asideMenu.classList.contains('mobile-menu__show')) {\n // PopUpPage.hide();\n setMenuActive(menuItem);\n asideMenuAnimation('show');\n } else {\n asideMenuAnimation('hide');\n highlightMenuButtonDependsOnMode();\n }\n break;\n case 'map':\n if (userPrevent())\n return;\n\n const mapContainer = createMapPage();\n Vantages.isActive() && Vantages.close();\n closeOptionsCard_localFunction();\n if (settingsData.buildingDestroyed) {\n closeAsideMenu();\n await projectMode.FloorPlan.exitFromMode();\n if (settingsData.activeViewMode !== ViewMode.Orbit)\n await viewModesSwitching(ViewMode.Orbit);\n }\n\n if (isDesktop &&\n settingsData.buildingDestroyed &&\n (e.target.dataset.menuItem === 'gallery' || e.target.dataset.menuItem === 'about'))\n floorSliderVisibility('hide');\n\n toggleBackBtnInDesktopMode('show');\n\n if (settingsData.activeViewMode === ViewMode.Orbit && e instanceof Event ) {\n await OrbitToMap(false);\n renderUpdateValuesOnDemand(true);\n }\n\n const page = getActivePage();\n if (page && page.dataset.menuItem !== menuItem) {\n openPage(menuItem);\n setTimeout(()=>{\n closePages(page);\n },100)\n } else {\n openPage(menuItem);\n }\n\n if (!config.widgets?.poi) {\n const preloader = new DreamsPreloader(mapContainer);\n preloader.show();\n const awaitPoiResponse = setInterval(() => {\n if (config.widgets?.poi) {\n clearInterval(awaitPoiResponse);\n preloader.remove();\n }\n },100);\n }\n\n setMenuActive(menuItem);\n closeAsideMenu();\n setTimeout(()=>{\n orbitPanorama = checkMapPanoramaInOrbit();\n orbitPanorama && orbitPanorama.classList.remove('map__panorama__orbit__show');\n streetView && streetView.classList.remove('map__panorama__show');\n renderUpdateValuesOnDemand(true);\n disposeTiles();\n },100);\n analytics('page_entrance',menuItem);\n break;\n default:\n if (menuItem) {\n if (userPrevent())\n return;\n\n toggleBackBtnInDesktopMode('show');\n\n const page = getActivePage();\n if (page && page.dataset.menuItem !== menuItem) {\n openPage(menuItem);\n setTimeout(()=>{\n closePages(page);\n },100)\n } else {\n openPage(menuItem);\n }\n Vantages.isActive() && Vantages.close();\n setMenuActive(menuItem);\n setMenuActive(e.target.dataset.menuItem);\n closeAsideMenu();\n renderUpdateValuesOnDemand(true);\n setTimeout(()=>{\n orbitPanorama = checkMapPanoramaInOrbit();\n orbitPanorama && orbitPanorama.classList.remove('map__panorama__orbit__show');\n streetView && streetView.classList.remove('map__panorama__show');\n },100);\n analytics('page_entrance',menuItem);\n }\n break;\n }\n\n if (isDesktop) {\n menuItem !== '3dModel'\n ? setMenuElementsState('hidden')\n : setMenuElementsState('visible');\n }\n\n toggleAsideMenu(menuItem);\n\n autoRotateTimerAction('update');\n const compareBlock = document.querySelector(`.compare-block`);\n if (compareBlock)\n compareBlock.remove();\n\n function closeOptionsCard_localFunction() {\n if (document.querySelector(`.${CardTypes.Options}-card`)) {\n if (document.querySelector('.form__container-main'))\n moveFormToBlock();\n closeOptionsCard();\n }\n }\n}\n\nexport function setMenuElementsState(state) {\n const elementsToSet = [\n document.querySelector('.joystick'),\n document.querySelector('.bottom__nav-bar'),\n document.querySelector('.contact-widget__main-container')\n ];\n\n if (settingsData.activeViewMode !== ViewMode.Orbit)\n elementsToSet.pop();\n\n switch(state) {\n case 'hidden':\n elementsToSet.forEach(element => { element?.classList.add('hidden') });\n IntersectionLegenda.hide();\n break;\n case 'visible':\n elementsToSet.forEach(element => { element?.classList.remove('hidden') });\n IntersectionLegenda.show();\n break;\n }\n}\n\nconst asideMenuAnimation = (action) => {\n const asideMenu = document.querySelector('.aside__container');\n\n const asideParts = {\n substrate: asideMenu.querySelector('.aside__substrate'),\n logo: asideMenu.querySelector('.aside__logo'),\n language: asideMenu.querySelector('.aside__language-switcher'),\n closeButton: asideMenu.querySelector('.aside__close-button'),\n navigationMenu: asideMenu.querySelector('.aside__navigation__menu'),\n privacyAndTerms: asideMenu.querySelector('.privacy-and-terms')\n }\n switch (action) {\n case 'show':\n gsap.from([asideParts.logo, asideParts.language, asideParts.closeButton], {y: -1000, duration: 0.5});\n gsap.from([asideParts.navigationMenu, asideParts.privacyAndTerms], {y: 1000, duration: 0.5});\n gsap.to(asideParts.substrate, {opacity: 1, duration: 0.5});\n break;\n case 'hide':\n gsap.to(asideParts.substrate, {opacity: 0});\n break;\n default:\n console.log('asideMenuAnimation default case');\n break;\n }\n}\n\nexport const toggleAsideMenu = (menuItem) => {\n if (!Boolean(menuItem))\n return;\n\n if (menuItem !== '3dModel' && settingsData.activeViewMode === ViewMode.Cylinder) {\n toggleMenuWidth({action: 'mini', source: 'eventListener'});\n } else if (settingsData.activeViewMode === ViewMode.Orbit) {\n if (menuItem !== '3dModel') {\n toggleMenuWidth({action: 'mini', source: 'orbit'});\n } else {\n toggleMenuWidth({action: 'full-force', source: 'orbit'});\n }\n }\n}\n\nexport const floorSliderVisibility = (parameter) => {\n const floorSliderDesktop = document.querySelector('.floor-slider__desktop');\n if (!floorSliderDesktop)\n return;\n\n switch (parameter) {\n case 'hide':\n floorSliderDesktop.classList.add('hidden');\n break;\n case 'show':\n floorSliderDesktop.classList.remove('hidden');\n break;\n }\n}\n\nexport function closePages (page) {\n const activePage = page || document.querySelector('.widget__container.show-page');\n if (activePage) {\n activePage.classList.remove('show-page');\n }\n mobileBurgerStyleToggle();\n mapElementStyleToggle(activePage);\n}\n\nfunction getActivePage () {\n return document.querySelector('.widget__container.show-page');\n}\n\nexport function asideHandler() {\n const aside = document.querySelector('.aside__container');\n\n if (!isMobile)\n aside.classList.toggle('active-aside-menu');\n\n if (aside.classList.contains('mobile-menu__show'))\n aside.classList.remove('mobile-menu__show');\n\n if (isMobile) {\n toggleBurgerButton();\n asideMenuAnimation('hide');\n PopUpPage.hide();\n highlightMenuButtonDependsOnMode();\n lockScreenOrientation();\n }\n}\n\nexport function setMenuActive (data) {\n if (BmbyMode.active)\n return;\n if (isMobile) {\n playDownAllMenuButtons();\n highlightActiveButton(data);\n } else {\n const activeMenu = UIRoot.querySelector('li.aside__active-menu');\n const selectedMenu = UIRoot.querySelector('li[data-menu-item=\"' + data + '\"]');\n if (activeMenu)\n activeMenu.classList.remove('aside__active-menu');\n if (selectedMenu)\n selectedMenu.classList.add('aside__active-menu');\n\n setActiveLordIcon(data, document.querySelector('.aside__navigation_list'));\n }\n\n toggleAsideMenu(data);\n}\n\nconst toggleBurgerButton = () => {\n const burgerButton = document.querySelector('[data-menu-item=\"More\"]');\n const icon = burgerButton.querySelector('.burger__mobile__btn');\n const text = burgerButton.querySelector('.additional-menu__item-text');\n icon.classList.toggle('active');\n text.classList.toggle('active');\n}\n\nexport const playDownAllMenuButtons = () => {\n if (isNoMenu)\n return;\n\n const bottomMenu = document.querySelector('.additional-menu__navigation');\n const activeButtons = document.querySelectorAll('.additional-menu__active');\n const activeElements = bottomMenu.querySelectorAll('.active');\n const activeLordIcons = bottomMenu.querySelectorAll('[activeicon=\"true\"]');\n for (let i = 0; i < activeElements.length; i++) {\n activeElements[i].classList.remove('active');\n }\n for (let i = 0; i < activeLordIcons.length; i++) {\n toggleIconParams(activeLordIcons[i]);\n }\n for (let i = 0; i < activeButtons.length; i++) {\n activeButtons[i].classList.remove('additional-menu__active');\n }\n}\n\nexport const highlightActiveButton = (data) => {\n const activeButton =\n data ?\n document.querySelector(`.additional-menu__item[data-menu-item=\"${data}\"]`) :\n document.querySelector('.additional-menu__active');\n if (!data || !activeButton)\n return;\n const activeButtonText = activeButton.querySelector('.additional-menu__item-text');\n const activeButtonIconName = activeButton.getAttribute('data-menu-item');\n activeButton.classList.add('additional-menu__active');\n activeButtonText.classList.add('active');\n setActiveLordIcon(activeButtonIconName, activeButton);\n}\n\nexport function closeAsideMenu () {\n if (BmbyMode.active || isNoMenu)\n return;\n\n const menu = document.querySelector('.aside__container');\n const additionalMenu = document.querySelector('.additional-menu__container');\n\n if (isMobile) {\n menu && menu.classList.remove('mobile-menu__show');\n additionalMenu && additionalMenu.querySelector('[data-menu-item=\"More\"]')?.classList.remove('additional-menu__active');\n } else {\n menu && menu.classList.remove('active-aside-menu');\n }\n}\n\nexport function openPage (data) {\n const pageExist = isPageExist(data);\n if (pageExist) {\n pageResize(pageExist);\n mapElementStyleToggle(pageExist);\n pageExist.classList.add('show-page');\n mobileBurgerStyleToggle();\n }\n}\n\nexport function pageResize (page) {\n if (BmbyMode.active || !page)\n return;\n if (isDesktop) {\n page.style.removeProperty('padding-top');\n\n return;\n }\n\n // const direction = getCurrentLangDirection();\n // let paddingLang = direction === 'ltr' ? 'paddingLeft' : 'paddingRight';\n // let menuWidth = 56;\n\n if (page.firstElementChild)\n page.firstElementChild.style.removeProperty('padding-left');\n if (page.firstElementChild)\n page.firstElementChild.style.removeProperty('padding-right');\n page.style.removeProperty('margin-right');\n page.style.removeProperty('margin-left');\n page.style.removeProperty('padding-left');\n page.style.removeProperty('padding-right');\n\n if (!isMobile) {\n if (isDesktop)\n // paddingLang = 'paddingRight';\n\n page.style.paddingTop = 0;\n // page.style[paddingLang] = menuWidth + 'px';\n }\n}\n\nexport function mobileBurgerStyleToggle () {\n const burger = document.querySelector('.burger__mobile__btn');\n const widgetPageIsOpened = document.querySelector('.widget__container.show-page');\n const contactUs = document.querySelector('.contact-us');\n const search = document.querySelector('.search__container-main');\n const poiCardInOrbit = document.querySelector('.poi__info-window.orbit__mode');\n\n const moduleOpen = widgetPageIsOpened || contactUs || search || poiCardInOrbit;\n\n if (moduleOpen && burger) {\n burger.classList.add('mobile-burger__white');\n } else if (burger && settingsData.activeViewMode === ViewMode.Cylinder) {\n burger.classList.add('mobile-burger__white');\n } else if (burger && settingsData.activeViewMode === ViewMode.Orbit) {\n burger.classList.remove('mobile-burger__white');\n } else if (!moduleOpen && burger && burger.classList.contains('mobile-burger__white')) {\n burger.classList.remove('mobile-burger__white');\n }\n}\n\nexport function updatePagesStyle () {\n const pages = document.querySelectorAll('.content__page');\n pages.forEach(page => {\n pageResize(page);\n });\n}\n\nfunction animateMenu (menu, burger, param) {\n if (param) {\n menu.style.opacity = 1;\n return;\n }\n const langDirection = getCurrentLangDirection();\n let side = langDirection === 'ltr' ? 'left' : 'right';\n\n if (isDesktop)\n side = 'bottom';\n\n if (isMobile) {\n menu.style.opacity = 1;\n gsap.fromTo(burger, {[side]: -200, opacity: 0}, {\n [side]: 15, opacity: 1, duration: 1, onComplete: () => {\n resetMenuAnimation(burger);\n },\n });\n\n return;\n }\n gsap.fromTo(menu, {[side]: -200, opacity: 0}, {\n [side]: 0, opacity: 1, duration: 1, onComplete: () => {\n resetMenuAnimation();\n },\n });\n}\n\nexport function resetMenuAnimation (menu) {\n const menuElement = menu || document.querySelector('.aside__container');\n menuElement.style.removeProperty('left');\n menuElement.style.removeProperty('right');\n menuElement.style.removeProperty('bottom');\n}\n\nexport function additionalMenuToggle () {\n if (!isMobile) {\n return;\n }\n\n const additionalMenu = document.querySelector('.additional-menu__container');\n if (!additionalMenu) {\n return;\n }\n\n if (settingsData.isLandscape && settingsData.activeViewMode === ViewMode.Orbit) {\n additionalMenu.style.display = 'block';\n } else if (!settingsData.isLandscape) {\n additionalMenu.style.display = 'block';\n }\n}\n\nlet toggleMenuWidthTimeout = null;\nlet prevMenuAnimation = null;\n\nfunction preventMenuAnimation () {\n if (prevMenuAnimation) {\n prevMenuAnimation.kill();\n prevMenuAnimation = null;\n }\n}\n\nexport function toggleMenuWidth(props) {\n if (BmbyMode.active)\n return;\n\n const ANIMATION_DURATION = 0.05;\n const {action, source} = props;\n const asideContainer = document.querySelector('.aside__container');\n const search = document.querySelector('.search__container-main');\n const asideNavigationMenuItem = [...asideContainer.getElementsByClassName('aside__navigation-menu__item')];\n const isHomeMenuButtonActive =\n Boolean(document.querySelector(\n '.aside__navigation-menu__item.aside__active-menu[data-menu-item=\"3dModel\"]'\n ));\n const isAnyMenuButtonActive = Boolean(document.querySelectorAll('.aside__active-menu'));\n if (isMobile || isDesktop || !asideContainer || blockMenuWidthAnimation)\n return;\n \n preventMenuAnimation();\n\n if (source === 'cylinder' || source === 'orbit') {\n switch (action) {\n case 'full':\n if (!asideContainer.classList.contains('minimized'))\n return;\n prevMenuAnimation = gsap.to(\n asideContainer, {\n width: 230,\n duration: ANIMATION_DURATION,\n onComplete: () => {\n asideContainer.style.position = '';\n if (search)\n search.style.marginInlineStart = '';\n\n asideContainer.style.padding = '22px 30px 8px 30px';\n asideContainer.classList.remove('minimized');\n }\n }\n );\n toggleElementsVisibility('show');\n asideNavigationMenuItem.forEach(item => item.style.removeProperty('justify-content'));\n break;\n case 'full-force':\n prevMenuAnimation = gsap.to(\n asideContainer, {\n width: 230,\n duration: ANIMATION_DURATION,\n onComplete: () => {\n asideContainer.style.position = '';\n if (search)\n search.style.marginInlineStart = '';\n\n asideContainer.style.padding = '22px 30px 8px 30px';\n asideContainer.classList.remove('minimized');\n }\n }\n );\n toggleElementsVisibility('show');\n asideNavigationMenuItem.forEach(item => item.style.removeProperty('justify-content'));\n break;\n case 'mini':\n if (isHomeMenuButtonActive || !isAnyMenuButtonActive || asideContainer.classList.contains('minimized'))\n return;\n prevMenuAnimation = gsap.to(\n asideContainer, {\n width: 56,\n duration: ANIMATION_DURATION,\n onComplete: () => {\n asideContainer.style.padding = '22px 8px';\n asideContainer.classList.add('minimized');\n }\n }\n );\n toggleElementsVisibility('hide');\n asideNavigationMenuItem.forEach(item => item.style.justifyContent = 'center');\n break;\n }\n } else if (source === 'eventListener') {\n const dummy = {value: 0};\n switch (action) {\n case 'full':\n prevMenuAnimation = gsap.to(dummy, {value: 1, duration: ANIMATION_DURATION, onStart: () => {\n if (asideContainer.classList.contains('minimized')) {\n asideContainer.style.position = 'fixed';\n if (search && !isNoMenu)\n search.style.marginInlineStart = '56px';\n }\n },onComplete: () => {\n asideContainer.style.removeProperty('width');\n asideContainer.style.padding = '22px 30px 8px 30px';\n toggleElementsVisibility('show');\n asideNavigationMenuItem.forEach(item => item.style.removeProperty('justify-content'));\n asideContainer.classList.remove('minimized');\n }});\n break;\n case 'mini':\n if (isHomeMenuButtonActive || !isAnyMenuButtonActive || asideContainer.classList.contains('minimized'))\n break;\n \n prevMenuAnimation = gsap.to(dummy, {value: 1, duration: ANIMATION_DURATION, onComplete: () => {\n asideContainer.style.width = '56px';\n asideContainer.style.padding = '22px 8px';\n toggleElementsVisibility('hide');\n asideNavigationMenuItem.forEach(item => item.style.justifyContent = 'center');\n asideContainer.classList.add('minimized');\n }});\n break;\n }\n }\n}\n\nconst toggleElementsVisibility = (action) => {\n const asideContainer = document.querySelector('.aside__container');\n const asideBottomContainer = asideContainer.querySelector('.aside__bottom__container');\n const languageSwitcher = asideContainer.querySelector('.aside__language-switcher');\n const asideNavigationsText = [...asideContainer.getElementsByClassName('aside__navigation-menu__text')];\n const contactWidget = asideBottomContainer.querySelector('.contact-widget__main-container');\n const mcIdContacts = asideBottomContainer.querySelector('.mc-id-contacts');\n const share = asideContainer.querySelector('.share-dropdown__content-wrapper');\n\n switch(action) {\n case 'show':\n [...asideBottomContainer.children].forEach(child => {\n child.classList.remove('hidden');\n });\n contactWidget && contactWidget.classList.remove('minimized');\n mcIdContacts && mcIdContacts.classList.remove('minimized');\n // share && share.classList.remove('hidden');\n languageSwitcher.classList.remove('hidden');\n asideNavigationsText.forEach(text => text.classList.remove('hidden'));\n break;\n case 'hide':\n [...asideBottomContainer.children].forEach(child => {\n if (child !== contactWidget && child !== mcIdContacts)\n child.classList.add('hidden');\n });\n contactWidget && contactWidget.classList.add('minimized');\n mcIdContacts && mcIdContacts.classList.add('minimized');\n languageSwitcher.classList.add('hidden');\n share && share.click();\n asideNavigationsText.forEach(text => text.classList.add('hidden'));\n break;\n }\n}\n\nlet timeoutOnOpenID;\nconst onMouseOverAsideContainerHandler = () => {\n const asideContainer = document.querySelector('.aside__container');\n if (!asideContainer)\n return;\n\n timeoutOnOpenID = setTimeout(() => {\n toggleMenuWidth({action: 'full', source: 'eventListener'});\n }, 200);\n // toggleMenuWidth({action: 'full', source: 'eventListener'});\n}\n\nconst onMouseOutAsideContainerHandler = () => {\n const asideContainer = document.querySelector('.aside__container');\n // const homeButton = asideContainer.querySelector('[data-menu-item=\"3dModel\"]');\n if (!asideContainer || userPrevent())\n return;\n\n clearTimeout(timeoutOnOpenID);\n toggleMenuWidth({action: 'mini', source: 'eventListener'});\n}\n\nconst onClickAsideContainerHandler = (event) => {\n if (event.target.closest('.display-options'))\n return;\n const asideContainer = document.querySelector('.aside__container');\n const isHomeMenuButtonActive =\n Boolean(document.querySelector(\n '.aside__navigation-menu__item.aside__active-menu[data-menu-item=\"3dModel\"]'\n ));\n if (event.target !== asideContainer && !isHomeMenuButtonActive) {\n toggleMenuWidth({action: 'mini', source: settingsData.activeViewMode === ViewMode.Orbit ? 'orbit' : 'eventListener'});\n return;\n }\n\n asideContainer.classList.contains('minimized')\n ? toggleMenuWidth({action: 'full', source: settingsData.activeViewMode === ViewMode.Orbit ? 'orbit' : 'eventListener'})\n : toggleMenuWidth({action: 'mini', source: settingsData.activeViewMode === ViewMode.Orbit ? 'orbit' : 'eventListener'});\n}\n\nexport const addAsideContainerOnMouseHandlers = () => {\n const asideContainer = document.querySelector('.aside__container');\n if (!asideContainer || isMobile || isTablet)\n return;\n\n asideContainer.addEventListener('mouseenter', onMouseOverAsideContainerHandler);\n asideContainer.addEventListener('mouseleave', onMouseOutAsideContainerHandler);\n onMouseOutAsideContainerHandler();\n}\n\nexport const addOnClickAsideContainerMinimizerHandler = () => {\n const asideContainer = document.querySelector('.aside__container');\n if (!asideContainer || !isTablet || isMobile || isDesktop)\n return;\n\n document.body.addEventListener('click', onClickAsideContainerHandler);\n}\n\nexport function preventMenuWidthAnimation (state) {\n blockMenuWidthAnimation = state;\n}\n\nexport const removeAsideContainerOnMouseHandlers = () => {\n const asideContainer = document.querySelector('.aside__container');\n if (!asideContainer || isMobile || isTablet)\n return;\n\n asideContainer.removeEventListener('mouseenter', onMouseOverAsideContainerHandler);\n asideContainer.removeEventListener('mouseleave', onMouseOutAsideContainerHandler);\n}\n\nexport function hideAsideContainer() {\n const menu = document.querySelector('.aside__container');\n menu.classList.add('hidden');\n}\n\nexport function showAsideContainer() {\n const menu = document.querySelector('.aside__container');\n menu.classList.remove('hidden');\n}\n","'use strict';\n\nimport { getCurrentLangDirection } from '../../components/langSwitcher/langSwitcher';\nimport gsap from \"gsap\";\nimport {UIRoot} from \"../../../settings\";\nimport {isDesktop} from \"../../../settings\";\nimport {BaseElement} from \"../../interfaces/BaseElement\";\n\nexport function bottomNavBarInit () {\n const mainContainer = new BaseElement()\n .addClass('bottom__nav-bar')\n .appendTo(isDesktop ? document.querySelector('.aside__bottom__container') : UIRoot);\n\n animateBottomNavBar(mainContainer.DOMElement);\n\n return mainContainer.DOMElement;\n}\n\nexport function animateBottomNavBar (container) {\n const langDirection = getCurrentLangDirection();\n let side = langDirection === 'ltr' ? 'right' : 'left';\n\n switch (isDesktop) {\n case 'rtl':\n side = 'left';\n break;\n case 'ltr':\n break;\n }\n\n gsap.fromTo(container,{[side]: -200, opacity:0 },{[side]:32, duration: 1, opacity: 1,onComplete:()=>{\n resetBottomNavBarAnimation(container);\n }});\n}\n\nfunction resetBottomNavBarAnimation (container) {\n container.style.removeProperty('left');\n container.style.removeProperty('right');\n}","'use strict'\n\nimport {createCompareBlock} from \"../../cards/compareCards\";\nimport {setLordIcon} from \"../../../lordicon\";\nimport {BaseElement} from \"../../interfaces/BaseElement\";\nimport {isDesktop, UIRoot} from \"../../../settings\";\n\nlet buttonsOffset = 0;\nlet buttonsOffsetWeb = 0;\n\nexport function updateCompareButtonOffset (value) {\n buttonsOffset = value;\n}\n\nexport function updateCompareButtonOffsetWeb (value) {\n buttonsOffsetWeb = value;\n}\n\nexport function createCompareCardsButton() {\n const compareButton = new BaseElement('button')\n .addClass('compare-button', 'button')\n .event('click', createCompareBlock)\n .appendTo(UIRoot)\n .DOMElement;\n setLordIcon('compare', compareButton, {\n stroke: 90\n });\n setCompareButtonPosition(compareButton);\n}\n\nexport const setCompareButtonPosition = (button) => {\n const rtl = document.querySelector('html').getAttribute('dir') === 'rtl';\n const direction = rtl ? 'left' : 'right';\n const topUnitCard = document.querySelector('.unit-card');\n const topUnitCardWidth = parseInt(getComputedStyle(topUnitCard).width);\n const buttonWidth = parseInt(getComputedStyle(button).width);\n let sideOffset = (topUnitCardWidth / 2 + 20) - (buttonWidth / 2);\n\n if (isDesktop) {\n const search = document.querySelector(`.search__container-main`).getBoundingClientRect().width + 80;\n button.style.right = `${search + sideOffset}px`;\n button.style.top = `calc(50% - ${buttonWidth / 2 + buttonsOffset}px)`;\n } else {\n sideOffset = (topUnitCardWidth / 2) - (buttonWidth / 2);\n direction === 'left' ?\n button.style.left = `${sideOffset + buttonsOffsetWeb}px` :\n button.style.right = `${sideOffset + buttonsOffsetWeb}px`;\n }\n}\n","'use strict';\n\nimport {\n highlightMenuButtonDependsOnMode, isMapOpened, setCSSVar,\n userPrevent,\n} from '../../../functions';\nimport {isDesktop, isMobile, projectMode, settingsData, UIRoot} from '../../../settings';\nimport {CardTypes, ViewMode} from \"../../../common\";\nimport gsap from 'gsap';\nimport {openSearchHandler} from \"../search/search\";\nimport { getCurrentLangDirection} from '../../components/langSwitcher/langSwitcher';\nimport {\n closePages,\n floorSliderVisibility,\n getActiveMenuData,\n menuHandler,\n setMenuElementsState,\n setMenuActive,\n} from '../menu';\nimport { closePanorama, isPanoramaActive, panoramaCloseHandler } from '../../widgets/poi/poiv3';\nimport { checkMapPanoramaInOrbit } from '../../poi/poi';\nimport {UnitCardClass} from \"../../cards/unitCards/UnitCardClass\";\nimport {closeOptionsCard} from \"../../cards/cardsFunctions\";\nimport {PopUpPage} from \"../../interfaces/pages/PopUp\";\nimport { transferToBuilding } from '../../threejs/camera';\nimport { BmbyMode } from '../../mode/BmbyMode';\nimport {BaseElement} from \"../../interfaces/BaseElement\";\n\nexport const rightNavigationBar = () => {\n const backButtonMobileClasses = ['menu__back-btn', 'button-modes', 'button-modes--back', 'icon-back', 'background-backdrop-filter'];\n const buttonsArr = [\n {\n name: 'district',\n tagType: 'button',\n classes: ['button-modes', 'button-modes--district', 'icon-district'],\n dataAttr: 'district',\n isVisible: false\n },\n {\n name: 'orbit',\n tagType: 'button',\n classes: ['button-modes', 'button-modes--orbit', 'icon-orbit-project'],\n dataAttr: 'orbit',\n // isVisible: buildings_info.length > 1\n isVisible: false\n },\n {\n name: 'orbit',\n tagType: 'button',\n classes: ['button-modes', 'button-modes--orbit', 'icon-orbit-building'],\n dataAttr: 'orbit',\n // isVisible: buildings_info.length === 1\n isVisible: false\n },\n {\n name: 'cylinder',\n tagType: 'button',\n classes: ['button-modes', 'button-modes--cylinder', 'icon-cylinder-building'],\n dataAttr: 'cylinder',\n isVisible: false\n },\n {\n name: 'floorplan',\n tagType: 'button',\n classes: ['button-modes', 'button-modes--splitFloor', 'icon-floorplan', 'hide'],\n dataAttr: 'floorplan',\n isVisible: false\n },\n {\n name: 'play',\n tagType: 'button',\n classes: ['button-modes', 'button-modes--play', 'icon-play'],\n dataAttr: 'play',\n isVisible: false\n },\n {\n name: 'back',\n tagType: 'button',\n classes: isMobile ? backButtonMobileClasses : ['button-modes', 'button-modes--back', 'icon-back'],\n dataAttr: 'back',\n isVisible: true\n },\n // {\n // name: 'filter',\n // tagType: 'button',\n // unitCards: ['button-filter', 'icon-search', 'non-canvas'],\n // dataAttr: 'filter',\n // isVisible: true\n // },\n ];\n\n let container = document.querySelector('.right-nav-bar');\n if (container)\n return;\n\n // container = createElements('div', ['right-nav-bar', 'non-canvas', 'hide'], UIRoot);\n container = new BaseElement()\n .addClass('right-nav-bar', 'non-canvas', 'hide')\n .appendTo(UIRoot);\n // const wrapper = createElements('div', ['right-nav-bar__wrapper', 'non-canvas'], container.DOMElement);\n const wrapper = new BaseElement()\n .addClass('right-nav-bar__wrapper', 'non-canvas')\n .appendTo(container.DOMElement);\n // const buttonsWrapper = createElements('div', ['buttons__wrapper', 'non-canvas'], wrapper.DOMElement);\n const buttonsWrapper = new BaseElement()\n .addClass('buttons__wrapper', 'non-canvas')\n .appendTo(wrapper.DOMElement);\n const headerCheckBox = document.querySelector('.header__burger-menu__input');\n headerCheckBox && headerCheckBox.addEventListener('change', () => {\n rightNavMenuZIndexChange(2);\n },false);\n\n for (const {name, tagType, classes, isVisible, dataAttr} of buttonsArr) {\n let element;\n\n if (isVisible) {\n switch (name) {\n case settingsData.activeViewMode: {\n classes.push('active');\n break;\n }\n case 'play': {\n // element = createElements(tagType, classes, wrapper.DOMElement, 'afterbegin');\n element = new BaseElement(tagType)\n .addClass(...classes)\n .appendTo(wrapper.DOMElement, 'afterbegin');\n break;\n }\n case 'back': {\n // element = createElements(tagType, classes, buttonsWrapper.DOMElement, 'afterbegin');\n element = new BaseElement(tagType)\n .addClass(...classes)\n .appendTo(buttonsWrapper.DOMElement, 'afterbegin');\n\n if (isDesktop)\n element.addClass('prevent-hide');\n break;\n }\n default: {\n // element = createElements(tagType, classes, buttonsWrapper.DOMElement);\n element = new BaseElement(tagType)\n .addClass(...classes)\n .appendTo(buttonsWrapper.DOMElement);\n break;\n }\n }\n element.addAttribute('data-button', dataAttr);\n }\n }\n\n buttonsWrapper.event('click', buttonsWrapperHandler);\n}\n\nexport function buttonsWrapperHandler ({target}) {\n if (userPrevent() || settingsData.activeViewMode === ViewMode.Cylinder && BmbyMode.active)\n return;\n\n if (isDesktop ) {\n floorSliderVisibility('show');\n if (settingsData.activeViewMode !== ViewMode.FloorPlan)\n setMenuElementsState('visible');\n\n const isAnyPopUpPageOpened = document.querySelector('.pop-up-page:not(.hidden)');\n if (isAnyPopUpPageOpened) {\n PopUpPage.hide();\n highlightMenuButtonDependsOnMode();\n projectMode.Pagination.paginate({source: 'widget-close-button'});\n if (settingsData.activeViewMode === ViewMode.Orbit)\n hideRightNavBar();\n return;\n }\n\n if (isMapOpened()) {\n if (settingsData.activeViewMode !== ViewMode.Orbit) {\n const mapWidgetElement = document.querySelector('.widget__container[data-menu-item=\"map\"]');\n mapWidgetElement.classList.remove('show-page');\n highlightMenuButtonDependsOnMode();\n projectMode.Pagination.paginate({source: 'widget-close-button'});\n } else {\n menuHandler({target:{dataset:{menuItem:'3dModel'}}});\n transferToBuilding();\n }\n return;\n }\n }\n\n const changeModeTo = target.getAttribute('data-button');\n if (!changeModeTo || changeModeTo === settingsData.activeViewMode && changeModeTo !== ViewMode.FloorPlan)\n return;\n\n // if (!isMobile)\n // UnitCardClass.cards.forEach(card => { card.html.classList.remove('unit-card--small') });\n\n viewModesSwitching(changeModeTo);\n}\n\nexport async function viewModesSwitching(changeModeTo) {\n switch (changeModeTo) {\n case ViewMode.District: {\n districtModeHandler();\n return;\n }\n case ViewMode.Orbit: {\n if (settingsData.activeViewMode === ViewMode.FloorPlan){\n await projectMode.FloorPlan.exitFromMode();\n await projectMode.Cylinder.exitFromMode();\n } else if (settingsData.activeViewMode === ViewMode.Cylinder){\n await projectMode.Cylinder.exitFromMode();\n }\n break;\n }\n case ViewMode.Cylinder: {\n await projectMode.FloorPlan.exitFromMode();\n break;\n }\n case ViewMode.FloorPlan: {\n console.log('floor plan')\n break;\n }\n case 'back' : {\n if (settingsData.bombBlock)\n return;\n backButtonHandlerThrottling();\n break;\n }\n default: break;\n }\n if (settingsData.activeViewMode === ViewMode.Orbit)\n projectMode.Pagination.paginate({source: 'viewModesSwitching', note: 'orbit'} );\n}\n\nlet timer;\nfunction backButtonHandlerThrottling() {\n if (timer !== null)\n clearTimeout(timer);\n\n timer = setTimeout(function() {\n backButtonHandler();\n }, 250);\n}\n\nfunction districtModeHandler() {\n console.log('district is not developed');\n moveElements();\n}\n// async function orbitModeHandler() {\n// removeSelectionBoxesLockColor();\n// manualHide360Icons();\n//\n// const timePlug = new Promise(resolve => setTimeout(()=> resolve(true),1000));\n// settingsData.animationsList.push(timePlug);\n//\n// await fitModelInViewport();\n// removeCylinderFloorNumbers();\n// settingsData.customSelections = [];\n//\n// settingsData.objects_to_intersection = [];\n// settingsData.instanced_floors = [];\n// settingsData.floor_obj = [];\n// // hideCylindersGrid();\n//\n// // environmentToggle();\n// // backgroundShow();\n// // poiToggle(true);\n// additionalMenuToggle();\n// // toggleStreetNames(true);\n// // setTimeout(resizeCanvasWhenMenuOpened,500);\n// // resizeCanvasWhenMenuOpened();\n//\n// // showAllBuildings();\n// showPointsModels('Trees small');\n// showPointsModels('Trees big');\n// setMenuActive('3dModel');\n//\n// if (typeof settingsData.orbitAnimationCout === 'number'){\n// settingsData.orbitAnimationCout = 0;\n// }\n//\n// if (document.body.classList.contains('filter-open')) {\n// document.querySelector('.filter-module-open-btn').click();\n// }\n//\n// const buildingSwitcher = document.getElementById('building-switcher');\n//\n// buildings_info.forEach(tower => {\n// // if (tower.isActive) {\n// // changeShadowsOptions(tower, true);\n// // }\n//\n// tower.searchResult = [];\n// tower.isActive = false;\n// });\n//\n// // if (buildingSwitcher) buildingSwitcher.classList.add('hide');\n// if (buildingSwitcher) hideBuildingSwitcher();\n// // hideRightNavBar();\n//\n// const popup = document.querySelector('.popup-info');\n// if (popup && !popup.classList.contains('hide')){\n// popup.classList.add('hide');\n// }\n//\n// // setTimeout(() => {\n// // buildingsLabelsToggle();\n// // buildingsLabelUpdate();\n// // resizeCanvasWhenMenuOpened();\n//\n// // hideCylindersGrid();\n// // showAllBuildings();\n// await setDefaultForeshortening();\n// // environmentToggle();\n// // toggleStreetNames(true);\n// // backgroundShow();\n// // poiToggle(true);\n//\n//\n// setTimeout(()=>{\n// mobileBurgerStyleToggle();\n// showAllBuildings();\n// environmentToggle();\n// hideCylindersGrid();\n// toggleStreetNames(true);\n// backgroundShow();\n// poiToggle(true);\n// // setDefaultForeshortening();\n// // resizeCanvasWhenMenuOpened();\n// // setDefaultForeshortening();\n// // // hideCylindersGrid();\n// // // showAllBuildings();\n// // // environmentToggle();\n// // // toggleStreetNames(true);\n// // // backgroundShow();\n// // // poiToggle(true);\n// },500)\n// // resizeCanvasWhenMenuOpened();\n// // }, 1000);\n//\n// moveElements();\n// }\n// export function cylinderModeHandler(fromDestroy, buildingIndex) {\n// console.log('cylinderModeHandler');\n// return;\n// const buildingSwitcher = document.getElementById('building-switcher');\n//\n// if (buildingSwitcher && buildingSwitcher.classList.contains('hide') && buildings_info.length > 1) {\n// // buildingSwitcher.classList.remove('hide');\n// // showBuildingSwitcher();\n// } else {\n// BuildingSwitch.add(document.querySelector('.main-wrap'));\n// }\n//\n// if (isMobile){\n// closePoiInfoWindowCardInOrbit(true);\n// } else {\n// closePoiInfoWindowCardInOrbit(false);\n// }\n//\n// // let activeTower = buildings_info.find(tower => tower.isActive);\n// let activeTower;\n//\n// if (buildingIndex){\n// activeTower = buildings_info[buildingIndex];\n// } else {\n// activeTower = buildings_info.find(tower => tower.isActive);\n// }\n//\n//\n// if (!activeTower) {\n// buildings_info[0].isActive = true;\n// activeTower = buildings_info[0];\n// }\n//\n// if (settingsData.buildingDestroyed) {\n// bombButtonInitActionHandler();\n// // setTimeout(searchResizeCanvas, 1000);\n// } else {\n// BuildingSwitch.change_building_to(buildings_info.indexOf(activeTower));\n// turnOffAllEnvironment();\n// }\n//\n// if (!fromDestroy) {\n// // setTimeout(() => {\n// const searchContainer = document.querySelector('.search__container-main');\n// !searchContainer && openSearchHandler(1.5);\n// // }, 1500);\n// }\n//\n//\n// setMenuActive('search');\n// moveElements();\n// changeGridTexture();\n// }\n// function floorPlanModeHandler() {\n// if (!settingsData.lastClickedFlat) {\n// const activeTower = buildings_info.find(tower => tower.isActive);\n// const maxFloor = Math.max(...activeTower.crm_data.map(item => item.floorNum));\n// settingsData.lastClickedFlat = activeTower.all_apartments.find(apartment => apartment.userData.crm_data.floorNum === parseInt(maxFloor / 2));\n// settingsData.currentFloor = settingsData.lastClickedFlat.userData.floor;\n// }\n//\n// bombButtonInitActionHandler();\n// moveElements();\n// }\nfunction backButtonHandler() {\n const exitFromWidget = backWidgetButton();\n if (exitFromWidget){\n if (settingsData.activeViewMode === ViewMode.Orbit)\n hideRightNavBar();\n return;\n }\n\n const card = document.querySelector(`.${CardTypes.Options}-card`);\n if (card) {\n closeOptionsCard();\n return;\n }\n\n const unitCard = UnitCardClass.findCard()?.html;\n unitCard && UnitCardClass.closeMultipleCards();\n switch (settingsData.activeViewMode) {\n case ViewMode.Orbit: break;\n case ViewMode.Cylinder: viewModesSwitching(ViewMode.Orbit) ; break;\n case ViewMode.FloorPlan: viewModesSwitching(ViewMode.Cylinder); break;\n default: break;\n }\n}\n\nexport function backWidgetButton () {\n if (isDesktop){\n const valueArray = ['gallery','about','map'];\n const activeMenuData = getActiveMenuData();\n\n if (checkMapPanoramaInOrbit()){\n panoramaCloseHandler(document.querySelector('.map__panorama__orbit__show'));\n hideRightNavBar();\n return;\n }\n\n if (valueArray.includes(activeMenuData)){\n\n if(isPanoramaActive()){\n closePanorama();\n return false;\n }\n\n closePages();\n\n if (settingsData.activeViewMode === ViewMode.Orbit){\n setMenuActive('3dModel');\n // showHideButtonPlay('show');\n } else {\n setMenuActive('search');\n }\n settingsData.stopRender = false;\n if (settingsData.activeViewMode === ViewMode.Cylinder) {\n const isSearchOpened = document.querySelector('.search__container-main');\n !isSearchOpened && openSearchHandler();\n }\n return true;\n }\n return false;\n }\n return false;\n}\n\n// export function changeActiveRightMenuBtns(changeModeTo) {\n// settingsData.activeViewMode = changeModeTo;\n// const buttons = document.querySelectorAll('.button-modes');\n//\n// buttons.forEach(button => {\n// const dataBtn = button.getAttribute('data-button');\n// button.classList.remove('active');\n//\n// if (dataBtn === changeModeTo) {\n// button.classList.add('active');\n// }\n//\n// switch (dataBtn) {\n// case ViewMode.FloorPlan: {\n// if (changeModeTo === ViewMode.Orbit) {\n// button.classList.add('hide');\n// break;\n// }\n//\n// button.classList.remove('hide');\n// break;\n// }\n// case ViewMode.Orbit: {\n// if (changeModeTo === ViewMode.Orbit) {\n// button.classList.remove('icon-right');\n// button.classList.add('icon-orbit-project');\n// break;\n// }\n//\n// button.classList.remove('icon-orbit-project');\n// button.classList.add('icon-right');\n// }\n// }\n// });\n// }\n\nexport function moveElements() {\n const buildingSwitch = document.getElementById('building-switcher');\n // const leftNavBar = document.querySelector('.left-nav-bar');\n const searchBtn = document.querySelector('.filter-module-open-btn');\n\n if (!buildingSwitch)\n return;\n\n if (buildingSwitch.classList.contains('hide')) {\n // if (leftNavBar && leftNavBar.classList.contains('move'))\n // leftNavBar.classList.remove('move');\n if (searchBtn && searchBtn.classList.contains('move'))\n searchBtn.classList.remove('move');\n } else {\n // if (leftNavBar && !leftNavBar.classList.contains('move'))\n // leftNavBar.classList.add('move');\n // setCSSVar('--left-bar-bottom-move', \"calc(34px + 24px + 42px)\");\n if (searchBtn && !searchBtn.classList.contains('move'))\n searchBtn.classList.add('move');\n }\n}\n\nexport function rightNavMenuZIndexChange(zIndex) {\n const rightNavBar = document.querySelector('.right-nav-bar');\n if (!rightNavBar)\n return;\n\n setTimeout(() => {\n if (isMobile && settingsData.isLandscape) {\n const unitCard = UnitCardClass.findCard()?.html;\n const floorSlider = document.querySelector('.fs-container');\n\n if (!zIndex) {\n if (!unitCard || unitCard && floorSlider || !unitCard && floorSlider) {\n zIndex = 4;\n } else if (unitCard && !floorSlider) {\n zIndex = 2;\n }\n }\n if (parseInt(rightNavBar.style.zIndex) === zIndex)\n return;\n\n rightNavBar.style.zIndex = `${zIndex || 2}`;\n } else if (isMobile && document.querySelector(`.search__container-bottom.opened`)) {\n if (parseInt(rightNavBar.style.zIndex) === 4)\n rightNavBar.style.zIndex = 2;\n }\n }, 250);\n}\n\nexport function showRightNavBar () {\n if (isMobile)\n return;\n\n let navbar = document.querySelector('.right-nav-bar');\n const langDirection = getCurrentLangDirection();\n let styleProp = langDirection === 'ltr' ? 'right' : 'left';\n\n if (navbar.classList.contains('showed'))\n return;\n\n if (isDesktop){\n styleProp = 'right';\n const backBtn = document.querySelector('.menu__back-btn');\n\n gsap.fromTo(navbar, {[styleProp]: -200, autoAlpha:0},{\n [styleProp]: 32,\n autoAlpha: 1,\n duration: .2,\n onStart:()=>{\n navbar.classList.remove('hide');\n navbar.classList.add('showed');\n },\n onComplete:()=>{\n navbar.style.removeProperty('left');\n navbar.style.removeProperty('right');\n }});\n\n\n gsap.fromTo(backBtn, {[styleProp]: -500, autoAlpha:0},{[styleProp]: -80, autoAlpha: 1, duration: .45,\n onStart:()=>{\n backBtn.classList.remove('prevent-hide');\n },\n onComplete:()=>{\n backBtn.style.removeProperty('opacity');\n }});\n\n return;\n }\n\n gsap.fromTo(navbar, {[styleProp]: -200, autoAlpha:0 },{[styleProp]: 32, autoAlpha: 1, duration: 1,\n onStart:()=>{\n navbar.style.removeProperty('left');\n navbar.style.removeProperty('right');\n navbar.classList.remove('hide');\n },\n onComplete:()=>{\n navbar.style.removeProperty('left');\n navbar.style.removeProperty('right');\n navbar.classList.add('showed');\n }});\n}\n\nexport function toggleBackBtnInDesktopMode (action) {\n if (!isDesktop){\n return;\n }\n\n const rightNavBar = document.querySelector('.right-nav-bar');\n\n switch (action) {\n case 'hide':\n hideRightNavBar();\n break;\n case 'show':\n rightNavBar.classList.contains('hide') && showRightNavBar();\n break;\n }\n}\n\nexport function hideRightNavBar () {\n if (isMobile)\n return;\n\n let navbar = document.querySelector('.right-nav-bar');\n const langDirection = getCurrentLangDirection();\n let styleProp = langDirection === 'ltr' ? 'right' : 'left';\n\n if (isDesktop){\n styleProp = 'right';\n const backBtn = document.querySelector('.menu__back-btn');\n\n gsap.to(backBtn,{[styleProp]: -500, opacity: 0, duration: .45,\n onStart:()=>{\n\n },\n onComplete:()=>{\n backBtn.classList.add('prevent-hide');\n }});\n\n gsap.to(navbar,{[styleProp]: -200, opacity: 0, duration: .2,\n onStart:()=>{\n navbar.classList.remove('showed');\n },\n onComplete:()=>{\n navbar.classList.add('hide');\n }});\n\n\n } else {\n\n gsap.to(navbar,{[styleProp]: -200, opacity: 0, duration: 1,\n onStart:()=>{\n navbar.style.removeProperty('left');\n navbar.style.removeProperty('right');\n navbar.classList.remove('showed');\n },\n onComplete:()=>{\n navbar.classList.add('hide');\n }});\n }\n}\n","'use strict';\n\nimport {BaseElement} from \"../../../../interfaces/BaseElement\";\nimport {Buildings, components, isDesktop, projectMode, settingsData} from \"../../../../../settings\";\nimport {\n anyApartmentsInSearch,\n areAllApartmentsSold,\n findSelectionAndCrmData,\n rotation_to_flat,\n userPrevent\n} from \"../../../../../functions\";\nimport {changeLangToCurrent, getCurrentLang} from \"../../../../components/langSwitcher/langSwitcher\";\nimport {ResultsAmount} from \"./ResultsAmount\";\nimport {EventBus} from \"../../../../interfaces/EventBus\";\nimport {SwipeScript} from \"../../../../controls/swipe\";\nimport {draggableOptionsCardBlock} from \"../../../../cards/cardsAnimation\";\nimport { renderUpdateValuesOnDemand } from '../../../../../app';\nimport {hoverOutPreviousSelection} from \"../../../../threejs/raycast\";\nimport {log} from \"three/examples/jsm/nodes/math/MathNode\";\nimport {applyTowerNameNamingRule} from \"../../../../cards/cardsFunctions\";\n\nexport class BuildingSwitcher {\n #rootElement;\n #buildingName;\n #leftArrow;\n #rightArrow;\n #resultsAmount;\n #buildings = [];\n\n constructor() {\n this.#rootElement = new BaseElement()\n .addClass(\n 'mobile-search__building-switcher',\n Buildings.getBuildingsInfoLength() < 2 ? 'mobile-search__building-switcher--one-building' : null,\n projectMode.LiteMode.modeIs('picture') || projectMode.LiteMode.modeIs('empty') || config.features?.privateHouseMode\n ? 'mobile-search__building-switcher--lite-picture' : null\n );\n\n this.#createArrayOfBuildings();\n this.#build();\n this.#addSwipeLogic();\n\n EventBus.add('buildingSwitcherSetTitle', this.#setTitle.bind(this));\n EventBus.add('buildingSwitcherSetActiveBuildingName', this.setActiveBuildingName.bind(this));\n EventBus.add('buildingSwitcherSetArrowsVisibilityTo', this.#setArrowsVisibilityTo.bind(this));\n }\n\n get rootElement() {\n return this.#rootElement;\n }\n\n remove() {\n EventBus.remove('buildingSwitcherSetTitle');\n EventBus.remove('buildingSwitcherSetActiveBuildingName');\n EventBus.remove('buildingSwitcherSetArrowsVisibilityTo');\n\n this.#resultsAmount.remove();\n this.#resultsAmount = null;\n\n this.#rootElement.remove();\n this.#rootElement = null;\n }\n\n setActiveBuildingName() {\n const activeBuilding = this.#buildings.find(item => item.name === Buildings.getActiveBuilding().name);\n activeBuilding.towerNames.forEach(name => {\n this.#buildingName.addAttribute(`data-lang-${name.lang}`, name.value);\n if (name.lang === getCurrentLang())\n this.#buildingName.innerHtml(name.value)\n });\n }\n\n #setTitle(type) {\n switch (type) {\n case 'apartments':\n this.#buildingName.removeClass('hidden');\n this.#resultsAmount.rootElement.removeClass('hidden');\n // this.#amenitiesTitle.addClass('hidden');\n break;\n // case 'amenities':\n // this.#buildingName.addClass('hidden');\n // this.#resultsAmount.rootElement.addClass('hidden');\n // this.#amenitiesTitle.removeClass('hidden');\n // break;\n }\n }\n\n #build() {\n const infoElement = new BaseElement()\n .addClass('building-switcher__info-element')\n .appendTo(this.#rootElement.DOMElement);\n\n this.#buildingName = new BaseElement('span')\n .addClass('building-switcher__building-name', 'language-string')\n .appendTo(infoElement.DOMElement);\n\n this.#resultsAmount = new ResultsAmount();\n this.#resultsAmount.rootElement.appendTo(infoElement.DOMElement);\n\n // this.#amenitiesTitle = new BaseElement('span')\n // .addClass('building-switcher__building-name', 'language-string', 'hidden')\n // .addAttribute('data-dictionary', 'Amenities')\n // .innerHtml(changeLangToCurrent('Amenities'))\n // .appendTo(infoElement.DOMElement);\n\n this.#leftArrow = new BaseElement('button')\n .addClass('building-switcher__arrow', 'building-switcher__arrow--left', 'icon-left1')\n .addAttribute('data-switch-direction', 'prev')\n .event('click', this.#switchHandler.bind(this))\n .appendTo(this.#rootElement.DOMElement);\n\n this.#rightArrow = new BaseElement('button')\n .addClass('building-switcher__arrow', 'building-switcher__arrow--right', 'icon-right1')\n .addAttribute('data-switch-direction', 'next')\n .event('click', this.#switchHandler.bind(this))\n .appendTo(this.#rootElement.DOMElement);\n }\n\n #createArrayOfBuildings() {\n Buildings.getBuildingsArray().forEach(building => {\n if (building.info && building.getInfo().crm_data) {\n const towerNames = building.info.towerName.map(item => {\n const {lang, value} = item;\n\n if (value.length <= 3) {\n item.value = `${c.dictionary['building'][lang]} ${value}`;\n }\n\n return item;\n });\n\n this.#buildings.push({name: building.name, towerNames});\n }\n });\n }\n\n #switchHandler(event) {\n if (userPrevent() || settingsData.activeModeSwitching || settingsData.buildingDestroyed)\n return;\n\n settingsData.activeModeSwitching = true;\n let switchDirection;\n switch(event.type) {\n case 'click':\n switchDirection = event.target.getAttribute('data-switch-direction');\n break;\n case 'swiped-right':\n switchDirection = 'next';\n break;\n case 'swiped-left':\n switchDirection = 'prev';\n break;\n }\n\n const buildingName = this.#getBuildingNameToSwitch(switchDirection);\n renderUpdateValuesOnDemand(false);\n hoverOutPreviousSelection();\n projectMode.Cylinder.switchBuilding(buildingName)\n .then(() => {\n this.setActiveBuildingName();\n // EventBus.trigger('resultsViewerToggleContent')\n EventBus.trigger('resultsViewerSlideToApartment');\n const {selectedMesh} = findSelectionAndCrmData(components.mobileSearch.getApartmentId());\n rotation_to_flat(selectedMesh, true)\n });\n }\n\n #addSwipeLogic() {\n SwipeScript(this.#rootElement.DOMElement);\n this.#rootElement.event('swiped-right', this.#switchHandler.bind(this));\n this.#rootElement.event('swiped-left', this.#switchHandler.bind(this));\n }\n\n #getBuildingNameToSwitch(direction) {\n const activeBuildingName = Buildings.getActiveBuilding().name;\n let index = this.#buildings.findIndex(element => element.name === activeBuildingName);\n let amountOfSwitches = 0;\n switch (direction) {\n case 'next':\n do {\n amountOfSwitches++;\n if (amountOfSwitches > this.#buildings.length)\n return index;\n index = (index + 1) % this.#buildings.length;\n } while (areAllApartmentsSold(Buildings.getBuilding(this.#buildings[index].name)) ||\n anyApartmentsInSearch(Buildings.getBuilding(this.#buildings[index].name)))\n\n\n break;\n case 'prev':\n do {\n amountOfSwitches++;\n if (amountOfSwitches > this.#buildings.length)\n return index;\n index = (index - 1 + this.#buildings.length) % this.#buildings.length;\n } while (areAllApartmentsSold(Buildings.getBuilding(this.#buildings[index].name)) ||\n anyApartmentsInSearch(Buildings.getBuilding(this.#buildings[index].name)))\n\n break;\n }\n\n return this.#buildings[index].name;\n }\n\n #setArrowsVisibilityTo(action) {\n if (action === 'hidden') {\n this.#leftArrow.addClass('hidden');\n this.#rightArrow.addClass('hidden');\n } else if (action === 'visible') {\n this.#leftArrow.removeClass('hidden');\n this.#rightArrow.removeClass('hidden');\n }\n\n }\n\n #hide() {\n this.#rootElement.addClass('hidden');\n }\n\n #show() {\n this.#rootElement.removeClass('hidden');\n }\n}\n","'use strict';\n\nimport {BaseElement} from \"../../../../interfaces/BaseElement\";\nimport {EventBus} from \"../../../../interfaces/EventBus\";\nimport {changeLangToCurrent} from \"../../../../components/langSwitcher/langSwitcher\";\nimport {searchGetResults} from \"../../search\";\n\nexport class ResultsAmount {\n #rootElement;\n #counter;\n\n constructor() {\n this.#rootElement = new BaseElement()\n .addClass('mobile-search__results-amount');\n\n this.#counter = new BaseElement('span')\n .addClass('results-amount__counter')\n .innerHtml(0)\n .appendTo(this.#rootElement.DOMElement);\n\n new BaseElement('span')\n .addClass('results-amount__text', 'language-string')\n .addAttribute('data-dictionary', 'ApartmentsShort')\n .innerHtml(changeLangToCurrent('ApartmentsShort'))\n .appendTo(this.#rootElement.DOMElement);\n\n EventBus.add('mobileSearchResultsAmountUpdate', this.#update.bind(this));\n }\n\n get rootElement() {\n return this.#rootElement;\n }\n\n #update() {\n const amount = this.#rootElement.DOMElement\n .closest('.mobile-search__bottom-element')\n .querySelector('.mobile-search__content-wrapper')\n .children.length;\n\n this.#counter.innerHtml(amount);\n EventBus.trigger('updateApplyBtnCount', amount);\n }\n\n remove() {\n EventBus.remove('mobileSearchResultsAmountUpdate');\n\n this.#rootElement.remove();\n this.#rootElement = null;\n }\n}","'use strict';\n\nimport {BaseElement} from \"../../../../../interfaces/BaseElement\";\nimport {\n\tfindSelectionAndCrmData,\n\tgetFieldsFromAPI,\n\thandleFavoriteLogic,\n\tisRoofExists,\n\ttruncateString\n} from \"../../../../../../functions\";\nimport {changeLangToCurrent} from \"../../../../../components/langSwitcher/langSwitcher\";\nimport {addFavoritesBlock, addFloor, addPriceBlock} from \"../../../../../cards/cardsFunctions\";\nimport {Price} from \"../../../../../cards/Price\";\nimport {CardTypes} from \"../../../../../../common\";\nimport {openOptionsCard} from \"../../../../../cards/optionsCards\";\nimport {keyPlanHandlerThrottling, setImageType} from \"../../../../../cards/unitCards/unitCardFunctions\";\nimport {dataArrayOfFlat, facingDictionary} from \"../../../../../cards/cardsConfig\";\nimport {Buildings, isMobile, projectMode, settingsData} from \"../../../../../../settings\";\nimport {basic_tile} from \"../../../../../threejs/environment\";\n\nexport class ApartmentCard {\n\t#rootElement;\n\t#floorWrapper;\n\t#infoElement;\n\t#data;\n\t#headerElement;\n\t#propertyRootElement;\n\n\tconstructor(apartmentData) {\n\t\tthis.#data = apartmentData;\n\t\tthis.#rootElement = new BaseElement()\n\t\t\t.addClass('results-viewer__apartment-card')\n\t\t\t.addAttribute('data-engineid', apartmentData.engineId)\n\t\t\t.addAttribute('data-building',apartmentData.buildingEngineId);\n\n\t\tthis.#info();\n\t\tthis.#additionalButtons();\n\t}\n\n\tget rootElement() {\n\t\treturn this.#rootElement;\n\t}\n\n\t#info() {\n\t\tthis.#infoElement = new BaseElement()\n\t\t\t.addClass('apartment-card__info')\n\t\t\t.appendTo(this.#rootElement.DOMElement);\n\n\t\tthis.#basicInfo();\n\t\tthis.#horizontalSeparator();\n\t\tthis.#infoPoints();\n\t}\n\n\t#additionalButtons() {\n\t\tconst hasKeyPlan =\n\t\t\t!projectMode.LiteMode.modeIs('empty') &&\n\t\t\t!projectMode.LiteMode.modeIs('picture') &&\n\t\t\tBoolean(settingsData?.commonAssets?.[Buildings.getActiveBuilding().name]?.floorAmenities.filter(group => {\n\t\t\t\tparseInt(group.from) >= parseInt(this.#data.floor) && parseInt(group.to) <= parseInt(this.#data.floor)\n\t\t\t}));\n\t\tconst isHideKeyPlan = projectMode.LiteMode.modeIs('empty') || projectMode.LiteMode.modeIs('picture') || (config.features?.hideKeyPlanButton || !isRoofExists() || (config.features?.plainKeyPlan && !hasKeyPlan));\n\t\tnew BaseElement('button')\n\t\t\t.addClass('key-plan-button', 'icon-plan-type', isHideKeyPlan ? 'hidden' : null)\n\t\t\t.event('click', keyPlanHandlerThrottling)\n\t\t\t.appendTo(this.#floorWrapper.DOMElement);\n\n\t\tif (!Buildings.isOneFloorBuilding(this.#data.buildingEngineId))\n\t\t\taddFloor(this.#data, this.#floorWrapper.DOMElement, 'mobile');\n\t}\n\n\t#basicInfo() {\n\t\tconst propertyNumber = (parent) => {\n\t\t\tconst propertyWrapper = new BaseElement()\n\t\t\t\t.addClass('apartment-card__property-wrapper')\n\t\t\t\t.appendTo(parent);\n\n\t\t\tnew BaseElement()\n\t\t\t\t.addClass('apartment-card__property-title', 'language-string')\n\t\t\t\t.addAttribute('data-dictionary', this.#data.propType)\n\t\t\t\t.innerHtml(\"#\")\n\t\t\t\t.appendTo(propertyWrapper.DOMElement);\n\n\t\t\tnew BaseElement()\n\t\t\t\t.addClass('apartment-card__property-number')\n\t\t\t\t.innerHtml(this.#data.propNum)\n\t\t\t\t.appendTo(propertyWrapper.DOMElement);\n\t\t};\n\n\t\tconst amountOfBedrooms = (parent) => {\n\t\t\tconst cardInfo = dataArrayOfFlat(this.#data);\n\t\t\tconst currentPointData = cardInfo.filter(data => data.name === 'bedrooms')[0];\n\t\t\tconst pointWrapper = new BaseElement()\n\t\t\t\t.addClass('apartment-card__info-point')\n\t\t\t\t.appendTo(parent);\n\t\t\tnew BaseElement('span')\n\t\t\t\t.addClass('info-point__title', 'language-string')\n\t\t\t\t.addAttribute('data-dictionary', currentPointData.name)\n\t\t\t\t.innerHtml(changeLangToCurrent(currentPointData.name))\n\t\t\t\t.appendTo(pointWrapper.DOMElement);\n\n\t\t\tnew BaseElement('span')\n\t\t\t\t.addClass('info-point__value')\n\t\t\t\t.innerHtml(currentPointData.data)\n\t\t\t\t.appendTo(pointWrapper.DOMElement);\n\n\t\t\tpointWrapper.addStyle('flex-direction', 'row-reverse');\n\t\t}\n\n\t\tconst rootElement = new BaseElement()\n\t\t\t.addClass('apartment-card__basic-info')\n\t\t\t.appendTo(this.#infoElement.DOMElement);\n\n\t\tthis.#headerElement = new BaseElement()\n\t\t\t.addClass('apartment-card__header')\n\t\t\t.appendTo(rootElement.DOMElement);\n\n\t\taddFavoritesBlock(this.#data, this.#headerElement.DOMElement, CardTypes.MobileCard);\n\n\t\tthis.#propertyRootElement = new BaseElement()\n\t\t\t.addClass('apartment-card__property-root')\n\t\t\t.appendTo(this.#headerElement.DOMElement);\n\n\t\tpropertyNumber(this.#propertyRootElement.DOMElement);\n\t\tpropertyNumber(rootElement.DOMElement);\n\t\tamountOfBedrooms(this.#propertyRootElement.DOMElement);\n\n\t\tconst priceRootElement = new BaseElement()\n\t\t\t.addClass('apartment-card__price')\n\t\t\t.appendTo(rootElement.DOMElement);\n\n\t\tnew Price()\n\t\t\t.addBlock(priceRootElement.DOMElement)\n\t\t\t.setPrice(this.#data);\n\n\t\tconst price2title = this.#rootElement.DOMElement.querySelector('.price2Title');\n\t\tif (price2title)\n\t\t\tthis.#rootElement.appendElement(price2title);\n\n\t\tthis.#floorWrapper = new BaseElement()\n\t\t\t.addClass('apartment-card__floor-wrapper')\n\t\t\t.appendTo(rootElement.DOMElement);\n\t}\n\n\t#horizontalSeparator() {\n\t\tnew BaseElement()\n\t\t\t.addClass('apartment-card__horizontal-separator')\n\t\t\t.appendTo(this.#infoElement.DOMElement);\n\t}\n\n\t#infoPoints() {\n\t\tconst rootElement = new BaseElement()\n\t\t\t.addClass('apartment-card__info-points')\n\t\t\t.appendTo(this.#infoElement.DOMElement);\n\n\t\tconst cardInfo = dataArrayOfFlat(this.#data);\n\t\t// const hasRoomsInfo = config.features.apartments.aptCardFieldsCntUnit.includes('bedrooms');\n\t\t// config.features.apartments.aptCardFieldsCntUnit.length = hasRoomsInfo ? 4 : 3;\n\t\tgetFieldsFromAPI.small().forEach((infoPoint) => {\n\t\t\tconst currentPointData = cardInfo.filter(data => data.name === infoPoint)[0];\n\t\t\tif (currentPointData.data === 0 || infoPoint === 'bedrooms')\n\t\t\t\treturn;\n\n\t\t\tconst pointWrapper = new BaseElement()\n\t\t\t\t.addClass('apartment-card__info-point')\n\t\t\t\t.appendTo(rootElement.DOMElement);\n\n\t\t\tlet valueToShow = currentPointData.data;\n\t\t\tif (infoPoint === 'parkings' && Array.isArray(currentPointData.data))\n\t\t\t\tvalueToShow = currentPointData.data.length;\n\t\t\tif (infoPoint === 'storages' && Array.isArray(currentPointData.data)) {\n\t\t\t\tconst valueCopy = [ ...currentPointData.data ];\n\t\t\t\tvalueToShow = 0;\n\t\t\t\tvalueCopy.forEach(item => {\n\t\t\t\t\tvalueToShow += item.size;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tswitch(infoPoint) {\n\t\t\t\tcase 'exposure':\n\t\t\t\t\tif (valueToShow.length === 0)\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tconst wrapper = new BaseElement();\n\t\t\t\t\tvalueToShow.forEach(element => {\n\t\t\t\t\t\tfor (let key in facingDictionary()) {\n\t\t\t\t\t\t\tif (element === key) {\n\t\t\t\t\t\t\t\tnew BaseElement('span')\n\t\t\t\t\t\t\t\t\t.addClass('language-string')\n\t\t\t\t\t\t\t\t\t.addAttribute('data-dictionary',facingDictionary()[key].en + 'Short')\n\t\t\t\t\t\t\t\t\t.innerHtml(changeLangToCurrent(facingDictionary()[key].en + 'Short'))\n\t\t\t\t\t\t\t\t\t.appendTo(wrapper.DOMElement);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tvalueToShow = wrapper.DOMElement.innerHTML;\n\n\t\t\t\t\t// new BaseElement('span')\n\t\t\t\t\t// \t.addClass('info-point__title', 'language-string')\n\t\t\t\t\t// \t.addAttribute('data-dictionary', currentPointData.name)\n\t\t\t\t\t// \t.innerHtml(changeLangToCurrent(currentPointData.name))\n\t\t\t\t\t// \t.appendTo(pointWrapper.DOMElement);\n\n\t\t\t\t\tnew BaseElement('span')\n\t\t\t\t\t\t.addClass('info-point__value')\n\t\t\t\t\t\t.innerHtml(valueToShow)\n\t\t\t\t\t\t.appendTo(pointWrapper.DOMElement);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'apt. type':\n\t\t\t\t\tnew BaseElement('span')\n\t\t\t\t\t\t.addClass('info-point__title', 'language-string')\n\t\t\t\t\t\t.addAttribute('data-dictionary', currentPointData.name)\n\t\t\t\t\t\t.innerHtml(changeLangToCurrent(currentPointData.name))\n\t\t\t\t\t\t.appendTo(pointWrapper.DOMElement);\n\n\t\t\t\t\tconst value = new BaseElement('span')\n\t\t\t\t\t\t.addClass('info-point__value', 'info-point__value--with-column')\n\t\t\t\t\t\t.innerHtml(`${valueToShow}`)\n\t\t\t\t\t\t.appendTo(pointWrapper.DOMElement);\n\n\t\t\t\t\tnew BaseElement('span')\n\t\t\t\t\t\t.addClass('info-point__value-column')\n\t\t\t\t\t\t.innerHtml(':')\n\t\t\t\t\t\t.appendTo(value.DOMElement);\n\n\t\t\t\t\tpointWrapper.addStyle('gap', 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'area':\n\t\t\t\tcase 'balcony size':\n\t\t\t\tcase 'roof balcony size':\n\t\t\t\tcase 'covered balcony size':\n\t\t\t\tcase 'basement size':\n\t\t\t\tcase 'garden size':\n\t\t\t\tcase 'storages':\n\t\t\t\t\tif (infoPoint !== 'area') {\n\t\t\t\t\t\tnew BaseElement('span')\n\t\t\t\t\t\t\t.addClass('info-point__name', 'language-string')\n\t\t\t\t\t\t\t.innerHtml(changeLangToCurrent(infoPoint))\n\t\t\t\t\t\t\t.addAttribute('data-dictionary', infoPoint)\n\t\t\t\t\t\t\t.appendTo(pointWrapper.DOMElement);\n\t\t\t\t\t}\n\n\t\t\t\t\tnew BaseElement('span')\n\t\t\t\t\t\t.addClass('info-point__value')\n\t\t\t\t\t\t.innerHtml(`${valueToShow}`)\n\t\t\t\t\t\t.appendTo(pointWrapper.DOMElement);\n\n\t\t\t\t\tconst measurement = config.localization.area ? config.localization.area : \"m2\";\n\t\t\t\t\tconst measurementTag = new BaseElement('span')\n\t\t\t\t\t\t.addClass('language-string', 'info-point__measurement', 'meters')\n\t\t\t\t\t\t.addAttribute('data-dictionary', measurement)\n\t\t\t\t\t\t.addStyle('margin-inline-end', '5px')\n\t\t\t\t\t\t.appendTo(pointWrapper.DOMElement)\n\t\t\t\t\t\t.DOMElement;\n\t\t\t\t\tmeasurementTag.innerHTML += changeLangToCurrent(measurement);\n\t\t\t\t\tbreak;\n\t\t\t\t// case 'bedrooms':\n\t\t\t\t// \tnew BaseElement('span')\n\t\t\t\t// \t\t.addClass('info-point__title', 'language-string')\n\t\t\t\t// \t\t.addAttribute('data-dictionary', currentPointData.name)\n\t\t\t\t// \t\t.innerHtml(changeLangToCurrent(currentPointData.name))\n\t\t\t\t// \t\t.appendTo(pointWrapper.DOMElement);\n\t\t\t\t//\n\t\t\t\t// \tnew BaseElement('span')\n\t\t\t\t// \t\t.addClass('info-point__value')\n\t\t\t\t// \t\t.innerHtml(valueToShow)\n\t\t\t\t// \t\t.appendTo(pointWrapper.DOMElement);\n\t\t\t\t//\n\t\t\t\t// \tpointWrapper.addStyle('flex-direction', 'row-reverse');\n\t\t\t\t// \tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tnew BaseElement('span')\n\t\t\t\t\t\t.addClass('info-point__title', 'language-string')\n\t\t\t\t\t\t.addAttribute('data-dictionary', currentPointData.name)\n\t\t\t\t\t\t.innerHtml(changeLangToCurrent(currentPointData.name))\n\t\t\t\t\t\t.appendTo(pointWrapper.DOMElement);\n\n\t\t\t\t\tnew BaseElement('span')\n\t\t\t\t\t\t.addClass('info-point__value')\n\t\t\t\t\t\t.innerHtml(valueToShow)\n\t\t\t\t\t\t.appendTo(pointWrapper.DOMElement);\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// this.#createInfoPoint(rootElement, currentPointData);\n\t\t\t// if (index !== config.features.apartments.aptCardFieldsCntUnit.length - 1)\n\t\t\t// \tthis.#createDelimiter(rootElement);\n\t\t})\n\t}\n}\n","'use strict';\n\nimport {BaseElement} from \"../../../../../interfaces/BaseElement\";\nimport Swiper from \"swiper\";\nimport {ApartmentCard} from \"./ApartmentCard\";\nimport {Buildings, components, isDesktop, isMobile, projectMode, settingsData} from \"../../../../../../settings\";\nimport {changeSelectionBoxesStatusColor, markSelectedApartments} from \"../../../search\";\nimport {EventBus} from \"../../../../../interfaces/EventBus\";\nimport {Amenities} from \"../../../../../components/Amenities/Amenities\";\nimport {\n findSelectionAndCrmData,\n moveAroundTheFloors,\n rotation_to_flat, setCSSVar,\n userPrevent, zoomOut,\n zoomToApartment,\n} from '../../../../../../functions';\nimport {hoverOutPreviousSelection} from \"../../../../../threejs/raycast\";\nimport {renderUpdateValuesOnDemand} from '../../../../../../app';\nimport {openOptionsCard} from \"../../../../../cards/optionsCards\";\nimport {getCurrentLangDirection} from \"../../../../../components/langSwitcher/langSwitcher\";\nimport { ViewMode } from '../../../../../../common';\nimport {SwipeScript} from \"../../../../../controls/swipe\";\nimport {zoom} from \"../../../../../../libs/directive\";\n\nexport class ResultsViewer {\n #rootElement;\n #contentToShow;\n #viewerElement;\n #contentWrapper;\n #activeSlideElement;\n #isInitialToggle;\n #isThrottled;\n #searchStateSafe = [];\n\n constructor() {\n this.#isInitialToggle = true;\n this.#isThrottled = false;\n\n settingsData.searchResult = settingsData.allCrmData.filter(item => item.status === 'Available');\n\n this.#rootElement = new BaseElement()\n .addClass('mobile-search__results-viewer');\n\n this.#createViewerElement();\n // this.#addFontCheckerForIPhones();\n const selectionBoxColor = config.resources.bundle?.selectionBoxes?.colorStatus.find(color => color.status === 'available')?.active;\n setCSSVar('--selection-box-available-active', `${selectionBoxColor ? '#' + selectionBoxColor : '#0d84f2'}`);\n\n EventBus.add('resultsViewerToggleContent', this.#toggleContent.bind(this));\n EventBus.add('resultsViewerUpdateContent', this.#updateContent.bind(this));\n EventBus.add('resultsViewerSlideToApartment', this.#slideToApartment.bind(this));\n EventBus.add('resultsViewerScrollSlideIntoView', this.#scrollSlideIntoView.bind(this));\n EventBus.add('resultsViewerFilterCards', this.#filterApartmentCards.bind(this));\n }\n\n get rootElement() {\n return this.#rootElement;\n }\n\n remove() {\n EventBus.remove('resultsViewerToggleContent');\n EventBus.remove('resultsViewerUpdateContent');\n EventBus.remove('resultsViewerSlideToApartment');\n EventBus.remove('resultsViewerScrollSlideIntoView');\n EventBus.remove('resultsViewerFilterCards');\n\n this.#rootElement.remove();\n this.#rootElement = null;\n }\n\n #throttle() {\n this.#isThrottled = true;\n this.#contentWrapper.addStyle('pointer-events', 'none');\n setTimeout(() => {\n this.#isThrottled = false;\n this.#contentWrapper.addStyle('pointer-events', 'auto');\n }, 500);\n }\n\n #filterApartmentCards(activeBuildingId) {\n if (activeBuildingId) {\n this.#searchStateSafe = [...settingsData.searchResult];\n settingsData.searchResult = settingsData.searchResult.filter(item => item.buildingEngineId === activeBuildingId);\n // const cards = this.#contentWrapper.DOMElement.querySelectorAll(\n // `.results-viewer__apartment-card:not([data-building=\"${activeBuildingId}\"])`\n // );\n // [...cards].forEach(el => el.parentElement.classList.add('hidden'));\n } else {\n settingsData.searchResult = [...this.#searchStateSafe]\n this.#searchStateSafe = [];\n // const cards = this.#contentWrapper.DOMElement.querySelectorAll(`.results-viewer__apartment-card`);\n // [...cards].forEach(el => el.parentElement.classList.remove('hidden'));\n }\n\n this.#toggleContent();\n\n // if (this.#activeSlideElement)\n // this.#activeSlideElement.scrollIntoView({behavior: \"instant\", inline: \"center\"});\n }\n\n #slideToApartment(id = components.mobileSearch.getApartmentId()) {\n if (!id)\n return;\n\n const targetElement = this.#rootElement.DOMElement.querySelector(`[data-engineId=${id}]`)?.parentElement;\n if (!targetElement)\n return;\n\n this.#scrollSlideIntoView(targetElement);\n\n this.#rootElement.DOMElement\n .closest('.mobile-search__bottom-element')\n .setAttribute('data-state', this.#isInitialToggle ? 'hidden' : 'focused');\n }\n\n #createViewerElement() {\n let startX = 0;\n let preventTouchMove = false;\n let firstTouchMove = true;\n\n this.#viewerElement = new BaseElement()\n .addClass('mobile-search__viewer')\n .appendTo(this.#rootElement.DOMElement);\n this.#contentWrapper = new BaseElement()\n .addClass('mobile-search__content-wrapper')\n .event('click', this.#handleClick.bind(this))\n .event('scroll', (event) => {\n if (!this.#rootElement)\n return;\n\n const state = this.#rootElement.DOMElement.closest('.mobile-search__bottom-element').getAttribute('data-state')\n if (state !== 'opened-fully' && !event.target.closest('.apartment-card__info-points') || this.#isThrottled)\n event.preventDefault();\n })\n .event('touchstart', (event) => {\n startX = event.touches[0].clientX;\n })\n .event('touchend', () => {\n preventTouchMove = false;\n firstTouchMove = true;\n })\n .event('touchmove', (event) => {\n if (!this.#rootElement)\n return;\n\n const state = this.#rootElement.DOMElement.closest('.mobile-search__bottom-element').getAttribute('data-state')\n const infoPoints = event.target.closest('.apartment-card__info-points');\n // if (infoPoints) event.stopPropagation(); // doesnt work\n if (infoPoints && firstTouchMove && event.touches[0].clientX != startX) {\n const atLeft = infoPoints.scrollLeft == 0;\n const atRight = infoPoints.scrollLeft + infoPoints.clientWidth >= infoPoints.scrollWidth;\n if ((atLeft && event.touches[0].clientX > startX) || (atRight && event.touches[0].clientX < startX)) {\n preventTouchMove = true;\n }\n firstTouchMove = false;\n }\n if (preventTouchMove) event.preventDefault();\n if (state !== 'opened-fully' && !infoPoints || this.#isThrottled)\n event.preventDefault();\n })\n .appendTo(this.#viewerElement.DOMElement);\n\n this.#addSwipeListener();\n this.#addFocusOnSwipeLogic();\n }\n\n #addSwipeListener() {\n let startX = 0;\n let startY = 0;\n let endX = 0;\n let endY = 0;\n\n const element = this.#contentWrapper.DOMElement;\n\n element.addEventListener('touchstart', (e) => {\n if (userPrevent() || (settingsData.buildingDestroyed &&\n (this.#isThrottled || projectMode.FloorPlan.floorSlider.isScrolling || projectMode.FloorPlan.floorSlider.blockFloorSLider ))\n )\n return;\n startX = e.touches[0].clientX;\n startY = e.touches[0].clientY;\n });\n\n element.addEventListener('touchend', (e) => {\n if (userPrevent() || (settingsData.buildingDestroyed &&\n (this.#isThrottled || projectMode.FloorPlan.floorSlider.isScrolling || projectMode.FloorPlan.floorSlider.blockFloorSLider ))\n )\n return;\n endX = e.changedTouches[0].clientX;\n endY = e.changedTouches[0].clientY;\n\n const diffX = endX - startX;\n const diffY = endY - startY;\n\n if (Math.abs(diffX) > Math.abs(diffY)) {\n if (diffX > 30) {\n this.#swipeRightHandler(e);\n } else if (diffX < -30) {\n this.#swipeLeftHandler(e)\n }\n } /*else {\n if (diffY > 30) {\n this.#swipeDownHandler();\n } else if (diffY < -30) {\n this.#swipeUpHandler();\n }\n }*/\n });\n }\n\n #swipeRightHandler(event) {\n const state = this.#rootElement.DOMElement.parentElement.getAttribute('data-state');\n if (this.#isThrottled || state === 'opened-fully' || !this.#activeSlideElement || event.target.closest('.apartment-card__info-points'))\n return;\n\n const targetElement = getCurrentLangDirection() === 'ltr' ? this.#activeSlideElement.previousElementSibling : this.#activeSlideElement.nextElementSibling;\n if (!targetElement || targetElement.classList.contains('plug-slide') || targetElement.classList.contains('hidden'))\n return;\n\n this.#throttle();\n this.#scrollSlideIntoView(targetElement);\n }\n\n #swipeLeftHandler(event) {\n const state = this.#rootElement.DOMElement.parentElement.getAttribute('data-state');\n if (this.#isThrottled || state === 'opened-fully' || event.target.closest('.apartment-card__info-points'))\n return;\n\n const targetElement = getCurrentLangDirection() === 'ltr' ? this.#activeSlideElement.nextElementSibling : this.#activeSlideElement.previousElementSibling;\n if (!targetElement || targetElement.classList.contains('plug-slide') || targetElement.classList.contains('hidden'))\n return;\n\n this.#throttle();\n this.#scrollSlideIntoView(targetElement);\n }\n\n async #scrollSlideIntoView(targetElement) {\n if (this.#contentWrapper.DOMElement.children.length < 2) {\n if (targetElement) {\n this.#activeSlideElement = targetElement;\n this.#activeSlideElement.classList.add('active-slide');\n\n const activeCardApartmentEngineId = targetElement\n .querySelector('.results-viewer__apartment-card')\n .getAttribute('data-engineid');\n const {activeTower, selectedMesh} = findSelectionAndCrmData(activeCardApartmentEngineId);\n\n if (Buildings.activeBuilding.name !== activeTower.name &&\n !projectMode.LiteMode.modeIs('picture') && !projectMode.LiteMode.modeIs('empty')) {\n await projectMode.Cylinder.switchBuilding(activeTower.name, activeCardApartmentEngineId);\n EventBus.trigger('buildingSwitcherSetActiveBuildingName');\n }\n\n !projectMode.LiteMode.modeIs('picture') && rotation_to_flat(selectedMesh, true);\n\n if (!config.features?.privateHouseMode) {\n markSelectedApartments(activeCardApartmentEngineId);\n } else {\n projectMode.Cylinder.cylinderBuildingLabels.markLabel(selectedMesh.userData.crm_data.buildingEngineId, 'click');\n }\n\n settingsData.lastClickedFlat = selectedMesh;\n\n if (!projectMode.LiteMode.modeIs('picture')) {\n settingsData.activeModeSwitching = false;\n }\n }\n\n return;\n }\n\n if (this.#contentWrapper.DOMElement.children.length === 2) {\n const plugElement = targetElement ? targetElement.cloneNode() : this.#activeSlideElement.cloneNode();\n plugElement.classList.add('plug-slide');\n new BaseElement()\n .addClass('plug-slide__content')\n .appendTo(plugElement);\n this.#contentWrapper.DOMElement.append(plugElement);\n }\n\n if (!targetElement && this.#activeSlideElement) {\n this.#activeSlideElement.scrollIntoView({behavior: \"instant\", inline: \"center\"});\n return;\n }\n\n if (targetElement.parentElement.firstElementChild === targetElement) {\n targetElement.parentElement.prepend(targetElement.parentElement.lastElementChild);\n } else if (targetElement.parentElement.lastElementChild === targetElement) {\n targetElement.parentElement.append(targetElement.parentElement.firstElementChild);\n }\n\n if (this.#activeSlideElement) {\n if (targetElement !== this.#activeSlideElement.nextElementSibling && targetElement !== this.#activeSlideElement.previousElementSibling) {\n targetElement.previousElementSibling.scrollIntoView({behavior: \"instant\", inline: \"center\"});\n } else {\n this.#activeSlideElement.scrollIntoView({behavior: \"instant\", inline: \"center\"});\n }\n this.#activeSlideElement.classList.remove('active-slide');\n }\n\n const targetEngineId = targetElement && targetElement.querySelector('.results-viewer__apartment-card')?.getAttribute('data-engineid')\n const activeEngineId = this.#activeSlideElement && this.#activeSlideElement.querySelector('.results-viewer__apartment-card')?.getAttribute('data-engineid')\n const behavior = targetEngineId === activeEngineId ? 'instant' : 'smooth';\n this.#activeSlideElement = targetElement;\n if (this.#activeSlideElement.classList.contains('plug-slide'))\n this.#activeSlideElement = this.#activeSlideElement.nextElementSibling;\n this.#activeSlideElement.classList.add('active-slide');\n this.#activeSlideElement.scrollIntoView({behavior, inline: \"center\"});\n }\n\n // #addFontCheckerForIPhones() {\n // const testElement = new BaseElement()\n // .setAttributes({\n // 'id': 'fontTestElement'\n // })\n // .addStyle('position', 'absolute')\n // .addStyle('visibility', 'hidden')\n // .addStyle('font-size', '16px')\n // .innerHtml('FontTest')\n // .appendTo(this.#rootElement.DOMElement);\n //\n // let isInitialCheck = true;\n // let lastFontSize = testElement.DOMElement.offsetHeight;\n // function checkFontSize() {\n // if (isInitialCheck) {\n // isInitialCheck = false;\n // return;\n // }\n //\n // const currentFontSize = testElement.DOMElement.offsetHeight;\n // if (currentFontSize !== lastFontSize) {\n // lastFontSize = currentFontSize;\n //\n // EventBus.trigger('resultsViewerUpdateContent');\n // }\n // }\n //\n // setInterval(checkFontSize, 500);\n // }\n\n #toggleContent() {\n this.#prepareApartments();\n this.#updateContent();\n\n if (!config.features?.privateHouseMode || config.features?.privateHouseMode && this.#isInitialToggle) {\n const activeCard = this.#contentWrapper.DOMElement.querySelector('.active-slide .results-viewer__apartment-card');\n const activeCardApartmentEngineId = activeCard ? activeCard.getAttribute('data-engineid') : null;\n if (activeCardApartmentEngineId) {\n if (!config.features?.privateHouseMode) {\n if (this.#isInitialToggle)\n userPrevent(false);\n markSelectedApartments(activeCardApartmentEngineId);\n }\n\n const {selectedMesh} = findSelectionAndCrmData(activeCardApartmentEngineId);\n if (!projectMode.LiteMode.modeIs('picture') && !projectMode.LiteMode.modeIs('empty')) {\n if (config.features?.privateHouseMode)\n projectMode.Cylinder.cylinderBuildingLabels.markLabel(selectedMesh.userData.crm_data.buildingEngineId, 'click');\n if (this.#isInitialToggle) {\n rotation_to_flat(selectedMesh, true);\n // zoomOut();\n } else {\n zoomToApartment(selectedMesh);\n }\n }\n settingsData.lastClickedFlat = selectedMesh;\n }\n\n this.#isInitialToggle = false;\n }\n }\n\n #updateContent() {\n this.#refreshContentToShow();\n this.#slideToApartment();\n }\n\n #refreshContentToShow() {\n this.#contentWrapper.innerHtml('');\n\n this.#contentToShow.forEach((item) => {\n const container = new BaseElement()\n .addClass('mobile-search__item-container')\n .appendTo(this.#contentWrapper.DOMElement);\n\n new BaseElement(item).appendTo(container.DOMElement);\n EventBus.trigger('mobileSearchResultsAmountUpdate');\n });\n }\n\n #prepareApartments() {\n const isMoreThanOneBuildingInResults = settingsData.searchResult.some(item => item.buildingEngineId !== settingsData.searchResult[0].buildingEngineId);\n if (isMoreThanOneBuildingInResults) {\n EventBus.trigger('buildingSwitcherSetArrowsVisibilityTo', 'visible');\n } else {\n EventBus.trigger('buildingSwitcherSetArrowsVisibilityTo', 'hidden');\n }\n const sortByPrice = () => {\n // const separatedByBuildings = Object.groupBy(settingsData.searchResult, item => item.buildingEngineId);\n const separatedByBuildings = {};\n settingsData.searchResult.forEach(item => {\n if (!separatedByBuildings[item.buildingEngineId]) {\n separatedByBuildings[item.buildingEngineId] = [item];\n } else {\n separatedByBuildings[item.buildingEngineId].push(item);\n }\n });\n settingsData.searchResult = [];\n for (const buildingGroup in separatedByBuildings) {\n const currentBuildingResults = separatedByBuildings[buildingGroup];\n currentBuildingResults.sort((a, b) => a.salePrice - b.salePrice);\n settingsData.searchResult = settingsData.searchResult.concat(currentBuildingResults);\n }\n }\n const sortByAptNumber = () => {\n settingsData.searchResult.sort((a, b) => a.buildingEngineId.localeCompare(b.buildingEngineId));\n }\n\n changeSelectionBoxesStatusColor(settingsData.searchResult);\n this.#contentToShow = [];\n const isPricePresent = settingsData.searchResult.some(item => item.salePrice > 0);\n if (isPricePresent) {\n sortByPrice();\n } else {\n sortByAptNumber();\n }\n\n settingsData.searchResult.forEach((apartment) => {\n const apartmentCard = new ApartmentCard(apartment).rootElement;\n apartmentCard.addClass('results-viewer__card');\n this.#contentToShow.push(apartmentCard.DOMElement);\n });\n }\n\n #handleClick(event) {\n const bottomElementState = event.target.closest('.mobile-search__bottom-element').getAttribute('data-state');\n if (bottomElementState !== 'focused' && bottomElementState !== 'opened-fully')\n return;\n const isFavoriteButton = event.target.closest('.card__favorite-checkbox') || event.target.classList.contains('card__favorite-checkbox');\n const isKeyPlanButton = event.target.closest('.key-plan-button');\n if (isKeyPlanButton || isFavoriteButton) {\n return;\n }\n\n const targetItemContainer = event.target.closest('.mobile-search__item-container:not(.active-slide)');\n if (targetItemContainer && bottomElementState !== 'opened-fully') {\n if (targetItemContainer.nextElementSibling === this.#activeSlideElement) {\n getCurrentLangDirection() === 'ltr'\n ? this.#swipeRightHandler(event)\n : this.#swipeLeftHandler(event);\n } else if (targetItemContainer.previousElementSibling === this.#activeSlideElement) {\n getCurrentLangDirection() === 'ltr'\n ? this.#swipeLeftHandler(event)\n : this.#swipeRightHandler(event);\n }\n\n return;\n }\n\n const apartmentCard = event.target.closest('.results-viewer__apartment-card');\n if (!apartmentCard)\n return;\n\n const apartmentEngineId = apartmentCard.getAttribute('data-engineid');\n if (!apartmentEngineId)\n return;\n\n const {crmDataOfFlat, selectedMesh} = findSelectionAndCrmData(apartmentEngineId);\n settingsData.lastClickedFlat = selectedMesh;\n openOptionsCard({object: crmDataOfFlat});\n }\n\n #addFocusOnSwipeLogic() {\n let touchEvent = false;\n let trigger = false;\n this.#contentWrapper.event('touchstart', () => {\n touchEvent = true;\n trigger = false;\n });\n\n this.#contentWrapper.event('transitionend', async () => {\n if (!this.#contentWrapper || trigger)\n return;\n\n trigger = true;\n const activeCard = this.#contentWrapper.DOMElement.querySelector('.active-slide .results-viewer__apartment-card');\n const activeCardApartmentEngineId = activeCard ? activeCard.getAttribute('data-engineid') : null;\n if (!activeCardApartmentEngineId)\n return;\n\n if (!projectMode.LiteMode.modeIs('picture'))\n settingsData.activeModeSwitching = true;\n\n const {activeTower, selectedMesh} = findSelectionAndCrmData(activeCardApartmentEngineId);\n if (config.features?.privateHouseMode && selectedMesh.userData.crm_data.buildingEngineId !== Buildings.getActiveBuilding().name) {\n projectMode.Cylinder.cylinderBuildingLabels.markLabel(Buildings.getActiveBuilding().name, 'close');\n }\n\n if (Buildings.activeBuilding.name !== activeTower.name &&\n !projectMode.LiteMode.modeIs('picture') && !projectMode.LiteMode.modeIs('empty')) {\n await projectMode.Cylinder.switchBuilding(activeTower.name, activeCardApartmentEngineId);\n EventBus.trigger('buildingSwitcherSetActiveBuildingName');\n }\n\n renderUpdateValuesOnDemand(false);\n if (touchEvent) {\n const state = this.#rootElement.DOMElement.parentElement.getAttribute('data-state');\n if (settingsData.buildingDestroyed) {\n await moveAroundTheFloors(selectedMesh.userData.crm_data.engineId);\n } else if (state === 'focused' && settingsData.activeViewMode === ViewMode.Cylinder) {\n zoomToApartment(selectedMesh);\n } else {\n !projectMode.LiteMode.modeIs('picture') && rotation_to_flat(selectedMesh, true);\n }\n }\n if (!config.features?.privateHouseMode) {\n markSelectedApartments(activeCardApartmentEngineId);\n } else {\n projectMode.Cylinder.cylinderBuildingLabels.markLabel(selectedMesh.userData.crm_data.buildingEngineId, 'click');\n }\n settingsData.lastClickedFlat = selectedMesh;\n\n if (!projectMode.LiteMode.modeIs('picture')) {\n settingsData.activeModeSwitching = false;\n }\n\n touchEvent = false;\n trigger = false\n });\n }\n}\n","'use strict';\n\nimport {BaseElement} from \"../../../../interfaces/BaseElement\";\nimport Hammer from \"hammerjs\";\nimport { clamp, freezingCanvas, isPortraitMode, UIFreezing, zoomOut, zoomToApartment } from '../../../../../functions';\nimport {EventBus} from \"../../../../interfaces/EventBus\";\nimport {changeLangToCurrent} from \"../../../../components/langSwitcher/langSwitcher\";\nimport {Buildings, isNoMenu, projectMode, settingsData, threeJsVariables, UIRoot} from '../../../../../settings';\nimport {ViewMode} from \"../../../../../common\";\nimport { updateComponentsOnCanvasResize } from '../../search';\n\nexport class SearchBottomElement {\n\t#rootElement;\n\t#dragStarted;\n\t#panDirection;\n\t#currentHeight;\n\n\tconstructor() {\n\t\t// const targetState = projectMode.LiteMode.modeIs('empty') ? 'focused' : 'minimized';\n\n\t\tthis.#rootElement = new BaseElement()\n\t\t\t.setAttributes({'data-state': 'hidden'})\n\t\t\t.addClass('mobile-search__bottom-element');\n\n\t\tif (isNoMenu) {\n\t\t\tthis.#rootElement.addClass('no-menu-mode');\n\t\t}\n\n\t\tthis.#addListeners();\n\t\t//this.#createCollapseButton();\n\n\t\tEventBus.add('searchBottomElementFold', this.#fold.bind(this));\n\t\tEventBus.add('searchBottomElementUnfold', this.#unfold.bind(this));\n\t}\n\n\tget rootElement() {\n\t\treturn this.#rootElement;\n\t}\n\n\tremove() {\n\t\tEventBus.remove('searchBottomElementFold', this.#fold.bind(this));\n\t\tEventBus.remove('searchBottomElementUnfold', this.#unfold.bind(this));\n\n\t\tthis.#rootElement.remove();\n\t\tthis.#rootElement = null;\n\t}\n\n\t#addListeners() {\n\t\tthis.#dragStarted = false;\n\t\tthis.#panDirection = null;\n\t\tthis.#currentHeight = null;\n\n\t\tconst swipe = new Hammer.Manager(this.#rootElement.DOMElement);\n\t\tswipe.add(new Hammer.Pan({\n\t\t\tthreshold: 10\n\t\t}));\n\n\t\tswipe.on('panstart',(e) => {\n\t\t\t// if (this.#rootElement.DOMElement.getAttribute('data-state') === 'opened-fully' && e.additionalEvent === 'panup')\n\t\t\t// \treturn;\n\t\t\tif (e.target.closest('.mobile-search__results-viewer'))\n\t\t\t\treturn;\n\n\t\t\tif (e.additionalEvent === 'panup') {\n\t\t\t\tthis.#rootElement.DOMElement.querySelector('.mobile-search__results-viewer').classList.add('invisible');\n\t\t\t\tfreezingCanvas(true);\n\t\t\t}\n\t\t});\n\n\t\tswipe.on('panup pandown', (e) => {\n\t\t\t// if (this.#rootElement.DOMElement.getAttribute('data-state') === 'opened-fully' && e.additionalEvent === 'panup')\n\t\t\t// \treturn;\n\t\t\tif (e.target.closest('.mobile-search__results-viewer'))\n\t\t\t\treturn;\n\n\t\t\tif (!this.#currentHeight)\n\t\t\t\tthis.#currentHeight = this.#rootElement.DOMElement.getBoundingClientRect().height;\n\n\t\t\tthis.#panDirection = e.additionalEvent;\n\n\t\t\tif (isPortraitMode()) {\n\t\t\t\tconst min = this.#rootElement.DOMElement.getAttribute('data-state') === 'focused' ? 120 : 75;\n\t\t\t\tconst height = clamp(this.#currentHeight - e.deltaY, min, window.innerHeight - 70);\n\t\t\t\tthis.#rootElement\n\t\t\t\t\t.addStyle('height', height + 'px')\n\t\t\t\t\t.addStyle('transition', 'none');\n\t\t\t\tthis.#dragStarted = true;\n\n\t\t\t\tif (e.isFinal) {\n\t\t\t\t\tthis.#panHandler();\n\t\t\t\t}\n\n\t\t\t}\n\t\t});\n\n\t\tswipe.on('panend', (e) => {\n\t\t\t// if (this.#rootElement.DOMElement.getAttribute('data-state') === 'opened-fully' && e.additionalEvent === 'panup')\n\t\t\t// \treturn;\n\t\t\tif (e.target.closest('.mobile-search__results-viewer'))\n\t\t\t\treturn;\n\n\t\t\tif (this.#dragStarted && this.#panDirection)\n\t\t\t\tthis.#panHandler();\n\t\t});\n\t}\n\n\t#panHandler(direction) {\n\t\tthis.#rootElement.removeStyle('transition');\n\t\tdirection = direction || this.#panDirection;\n\t\tswitch (direction) {\n\t\t\tcase 'panup':\n\t\t\t\tthis.#swipeUpHandler();\n\t\t\t\tbreak;\n\t\t\tcase 'pandown':\n\t\t\t\tthis.#swipedDownHandler();\n\t\t\t\tbreak;\n\t\t}\n\n\t\tthis.#rootElement.removeStyle('height');\n\t\tthis.#dragStarted = false;\n\t\tthis.#panDirection = null;\n\t\tthis.#currentHeight = null;\n\t\tthis.#rootElement.event('transitionend', () => {\n\t\t\tthis.#rootElement.DOMElement.querySelector('.mobile-search__results-viewer').classList.remove('invisible');\n\n\t\t\tconst state = this.#rootElement.DOMElement.getAttribute('data-state');\n\t\t\tif (state !== 'opened-fully') {\n\t\t\t\tfreezingCanvas(false);\n\t\t\t\tEventBus.trigger('resultsViewerScrollSlideIntoView');\n\t\t\t}\n\n\t\t\tif (state === 'focused') {\n\t\t\t\tzoomToApartment(settingsData.lastClickedFlat);\n\t\t\t} else if (state === 'hidden') {\n\t\t\t\tzoomOut();\n\t\t\t}\n\t\t}, {once: true});\n\t};\n\n\tasync #swipeUpHandler() {\n\t\tconst state = this.#rootElement.DOMElement.getAttribute('data-state');\n\t\tswitch(state) {\n\t\t\tcase \"focused\":\n\t\t\t\tthis.#rootElement.setAttributes({'data-state': 'opened-fully'});\n\t\t\t\tconst activeSlide = this.#rootElement.DOMElement.querySelector('.active-slide');\n\t\t\t\tif (activeSlide)\n\t\t\t\t\tactiveSlide.scrollIntoView({behavior: \"instant\", inline: \"center\"});\n\t\t\t\tbreak;\n\t\t\tcase \"minimized\":\n\t\t\tcase \"hidden\":\n\t\t\t\t// if (settingsData.activeViewMode === ViewMode.FloorPlan)\n\t\t\t\t// \tawait projectMode.FloorPlan.exitFromMode();\n\n\t\t\t\tthis.#rootElement.setAttributes({'data-state': 'focused'});\n\t\t\t\t// if (settingsData.activeViewMode === ViewMode.Cylinder &&\n\t\t\t\t// \tsettingsData.lastClickedFlat &&\n\t\t\t\t// \tsettingsData.lastClickedFlat.userData.crm_data?.buildingEngineId === Buildings.getActiveBuilding().name)\n\t\t\t\t// {\n\t\t\t\t// \tzoomToApartment(settingsData.lastClickedFlat);\n\t\t\t\t// }\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t#swipedDownHandler() {\n\t\tconst state = this.#rootElement.DOMElement.getAttribute('data-state');\n\t\tswitch(state) {\n\t\t\tcase \"minimized\":\n\t\t\tcase \"focused\":\n\t\t\t\tthis.#rootElement.setAttributes({'data-state': 'hidden'});\n\t\t\t\tbreak;\n\t\t\tcase \"opened-fully\":\n\t\t\t\tthis.#rootElement.DOMElement.querySelector('.mobile-search__results-viewer').classList.add('invisible');\n\t\t\t\tthis.#rootElement.setAttributes({'data-state': 'focused'});\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/*#createCollapseButton() {\n\t\tconst buttonRootElement = new BaseElement('button')\n\t\t\t.addClass('mobile-search__collapse-button', 'icon-layer')\n\t\t\t.event('click', this.#panHandler.bind(this, 'pandown'))\n\t\t\t.appendTo(this.#rootElement.DOMElement);\n\n\t\tnew BaseElement('span')\n\t\t\t.addClass('language-string')\n\t\t\t.addAttribute('data-dictionary', 'mobileBackToModelLabel')\n\t\t\t.innerHtml(changeLangToCurrent('mobileBackToModelLabel'))\n\t\t\t.appendTo(buttonRootElement.DOMElement);\n\t}*/\n\n\t#fold() {\n\t\tif (!this.#rootElement || projectMode.LiteMode.modeIs('empty')) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.#rootElement.getAttribute('data-state') === 'hidden')\n\t\t\treturn;\n\n\n\t\tif (settingsData.activeViewMode !== ViewMode.FloorPlan && !projectMode.LiteMode.modeIs('picture')) {\n\t\t\tzoomOut();\n\t\t}\n\n\t\tthis.#rootElement.setAttributes({'data-state': 'hidden'});\n\t}\n\n\t#unfold() {\n\t\tif (!this.#rootElement)\n\t\t\treturn;\n\t\tconst state = this.#rootElement.getAttribute('data-state');\n\t\t// if (state === 'focused' || state === 'hidden')\n\t\t// \treturn;\n\t\tif (state !== 'opened-fully' && state === 'hidden')\n\t\t\tthis.#rootElement.setAttributes({'data-state': 'focused'});\n\n\t\tif (!settingsData.lastClickedFlat)\n\t\t\treturn;\n\n\t\tzoomToApartment(settingsData.lastClickedFlat)\n\t}\n}\n","import {BaseElement} from \"../../../../interfaces/BaseElement\";\nimport {menuHandler} from \"../../../menu\";\n\nexport class BackButton {\n #rootElement;\n\n constructor(parentElement) {\n this.#rootElement = new BaseElement('button')\n .addClass('mobile-search__back-button', 'icon-left1')\n .event('click', this.#handler)\n .appendTo(parentElement.DOMElement)\n }\n\n remove() {\n this.#rootElement.remove();\n this.#rootElement = null;\n }\n\n #handler() {\n menuHandler({target:{dataset:{menuItem:'3dModel'}}});\n }\n}","import {BaseElement} from \"../../../../interfaces/BaseElement\";\nimport {EventBus} from \"../../../../interfaces/EventBus\";\nimport {hasFavorites} from \"../../../../../functions\";\n\nexport class FavoriteButton {\n #rootElement;\n\n constructor() {\n this.#rootElement = new BaseElement()\n .event('click', this.#clickHandler)\n .addClass('mobile-search__favorite-button', 'icon-favorite_selected', 'transparent');\n\n EventBus.add('favoriteButtonUpdate', this.#update.bind(this));\n }\n\n get rootElement() {\n return this.#rootElement;\n }\n\n remove() {\n EventBus.remove('favoriteButtonUpdate');\n\n this.#rootElement.remove();\n this.#rootElement = null;\n }\n\n #update() {\n if (hasFavorites()) {\n this.#rootElement.removeClass('transparent');\n } else {\n this.#rootElement.addClass('transparent');\n }\n }\n\n #clickHandler() {\n if (!hasFavorites())\n return;\n\n console.log('favorite click handler');\n }\n}","'use strict';\n\nimport {BaseElement} from \"../../../../interfaces/BaseElement\";\nimport {Buildings, components, isMobile, isNoMenu, settingsData, UIRoot} from '../../../../../settings';\nimport {PopUpPage} from \"../../../../interfaces/pages/PopUp\";\nimport {Price} from \"../../../../cards/Price\";\nimport {facingDictionary} from \"../../../../cards/cardsConfig\";\nimport {changeLangToCurrent} from \"../../../../components/langSwitcher/langSwitcher\";\nimport {clamp, getFieldsFromAPI, getMoneyToken} from \"../../../../../functions\";\nimport {\n createCheckbox,\n createDropdowns,\n createRange,\n getUniqueUnits,\n searchGetResults, selectedBuildings,\n updateSearchResults\n} from '../../search';\nimport { HistogramSlider } from '../../../../interfaces/switchers/HistogramSlider';\nimport { EventBus } from '../../../../interfaces/EventBus';\nimport {createMultipleSearch, updateMultiSearch, updateMultiSearchState} from \"../../multipleSearch\";\nimport {log} from \"three/examples/jsm/nodes/math/MathNode\";\nimport {MultipleSelector} from \"../../../../interfaces/MultipleSelector\";\nimport {ActiveFiltersCounter} from \"../../ShrinkSearch/ActiveFiltersCounter\";\n\nexport class Filter {\n #rootElement;\n #filterPopUpPage;\n #filterPopUpContent;\n #applyFilters;\n #applyCounter\n #applyBtn;\n #isReset = false;\n #selectedSearchState = '';\n\n constructor(applyFilters) {\n this.#applyFilters = applyFilters;\n this.#rootElement = new BaseElement()\n .event('click', this.#showFilterPopUp.bind(this))\n .addClass('mobile-search__filter');\n\n this.#button();\n this.#filterPopUp();\n\n EventBus.add('filterShowFilterPopUp', this.#showFilterPopUp.bind(this));\n // EventBus.add('filterUpdateFilterCount', this.#updateFilterCount.bind(this));\n }\n\n get rootElement() {\n return this.#rootElement;\n }\n\n remove() {\n EventBus.remove('updateApplyBtnCount');\n EventBus.remove('filterShowFilterPopUp');\n // EventBus.remove('filterUpdateFilterCount');\n\n this.#filterPopUpContent.remove();\n this.#filterPopUpContent = null;\n this.#filterPopUpPage.root.remove();\n this.#filterPopUpPage = null;\n this.#rootElement.remove();\n this.#rootElement = null;\n }\n\n // #updateFilterCount() {\n // const resultAmount = document.querySelector('.mobile-search__content-wrapper').children.length;\n // if (resultAmount > 0 && Filter.filterIsChanged() && !this.#isReset) {\n // this.#rootElement && this.#rootElement.addClass('--active-counter');\n // this.#count.innerHTML = resultAmount;\n // } else {\n // this.#rootElement && this.#rootElement.removeClass('--active-counter');\n // }\n // }\n\n #button() {\n // const wrapper = new BaseElement()\n // .addClass('mobile-search__filter-title-wrapper')\n // .appendTo(this.#rootElement)\n new BaseElement('button')\n .addClass('mobile-search__filter-button', 'icon-search')\n .appendTo(this.#rootElement);\n new BaseElement('span')\n .addClass('mobile-search__filter-text', 'language-string')\n .setAttributes({'data-dictionary': 'findProperty'})\n .innerHtml(changeLangToCurrent('findProperty'))\n .appendTo(this.#rootElement);\n // const counterContainer = new BaseElement()\n // .addClass('mobile-search__filter-counter')\n // .event('click', this.#showFilterPopUp.bind(this))\n // .appendTo(this.#rootElement.DOMElement)\n // .DOMElement;\n // this.#count = new BaseElement('span')\n // .addClass('mobile-search__filter-count')\n // .appendTo(counterContainer)\n // .DOMElement;\n // new BaseElement('span')\n // .addClass('mobile-search__filter-counter__text','language-string')\n // .addAttribute('data-dictionary','searchCounter')\n // .innerHtml(changeLangToCurrent('searchCounter'))\n // .appendTo(counterContainer);\n }\n\n #filterPopUp() {\n this.#filterPopUpPage = new PopUpPage('filter options');\n this.#filterPopUpPage.closeButton.event('click',() => {\n const currentSearchState = JSON.stringify(settingsData.searchState);\n if (currentSearchState !== this.#selectedSearchState) {\n this.#clearFilter(false,false,true);\n }\n });\n this.#filterPopUpPage.addClass('filter-pop-up');\n if (isNoMenu)\n this.#filterPopUpPage.addClass('no-menu-mode');\n this.#filterPopUpPage.addClass('hidden');\n\n this.#filterPopUpContent = new BaseElement()\n .addClass('mobile-search__filter-pop-up')\n .appendTo(this.#filterPopUpPage.contentElement);\n\n const filterButtons = new BaseElement()\n .addClass('mobile-search__filter-buttons')\n .appendTo(this.#filterPopUpPage.contentElement)\n .DOMElement;\n\n this.#addFilters(this.#filterPopUpContent.DOMElement);\n createMultipleSearch();\n\n new BaseElement('button')\n .addClass('mobile-search__clear-filter', 'language-string')\n .addAttribute('data-dictionary', 'Clear all')\n .innerHtml(changeLangToCurrent('Clear all'))\n .event('click',this.#clearFilter.bind(this))\n .appendTo(filterButtons);\n\n this.#applyBtn = new BaseElement('button')\n .addClass('mobile-search__apply-filter', 'language-string')\n .event('click', this.#applyFiltersHandler.bind(this))\n .appendTo(filterButtons);\n\n\n const popUpHeaderElement = this.#filterPopUpPage.root.querySelector('.pop-up-page__header');\n // let startX = 0;\n let startY = 0;\n // let endX = 0;\n // let endY = 0;\n\n popUpHeaderElement.addEventListener('touchstart', (e) => {\n // startX = e.touches[0].clientX;\n startY = e.touches[0].clientY;\n });\n\n popUpHeaderElement.addEventListener('touchend', (e) => {\n const endY = e.changedTouches[0].clientY;\n const diffY = endY - startY;\n if (diffY > 30) {\n this.#hideFilterPopUp();\n components.mobileSearch.setStateTo('focused');\n }\n });\n\n this.#filterPopUpPage.root.querySelector('.pop-up-page__header').addEventListener('click', () => {\n this.#hideFilterPopUp();\n if (UIRoot.querySelector('.mobile-search__bottom-element').getAttribute('data-state') !== 'opened-fully')\n components.mobileSearch.setStateTo('focused');\n });\n\n EventBus.add('updateApplyBtnCount',this.#updateBtnCountHandler.bind(this));\n EventBus.trigger('updateApplyBtnCount', searchGetResults(0,null,false).length);\n }\n\n #clearFilter(resetChips = true, applyFilter = true, resetToPreviouslyResult = false) {\n this.#isReset = true;\n const selectedSearchState = JSON.parse(this.#selectedSearchState);\n\n const allCheckboxes = [...this.#filterPopUpContent.DOMElement.querySelectorAll('.search__option-input[type=\"checkbox\"]')];\n allCheckboxes.forEach(checkbox => {\n if (resetToPreviouslyResult) {\n const data = selectedSearchState.find(el => el.type === checkbox.getAttribute('data-type'));\n if (data) {\n const checked = data.checked.value;\n const checkboxValue = Number(checkbox.getAttribute('data-roomnum'));\n if (!checked.includes(checkboxValue) && checkbox.checked) {\n checkbox.click();\n }\n } else if (checkbox.checked) {\n checkbox.click()\n }\n } else if (checkbox.checked) {\n checkbox.click()\n }\n });\n\n const allSwitches = [...this.#filterPopUpContent.DOMElement.querySelectorAll('.switch__checkbox')];\n allSwitches.forEach(switchElement => {\n if (switchElement.checked)\n switchElement.click();\n });\n\n const allSelects = [...this.#filterPopUpContent.DOMElement.querySelectorAll('.search__option select')];\n allSelects.forEach(select => {\n if (resetToPreviouslyResult) {\n const data = selectedSearchState.find(el => el.type === select.getAttribute('data-type'));\n if (data && data.min.length && data.max.length) {\n if (select.getAttribute('select-type') === 'min') {\n select.selectedIndex = [...select.options].findIndex(el => el.value === data.min);\n } else if (select.getAttribute('select-type') === 'max') {\n select.selectedIndex = [...select.options].findIndex(el => el.value === data.max);\n }\n } else {\n if (select.getAttribute('select-type') === 'min') {\n select.selectedIndex = 0;\n } else if (select.getAttribute('select-type') === 'max') {\n select.selectedIndex = select.options.length - 1;\n }\n }\n } else {\n if (select.getAttribute('select-type') === 'min') {\n select.selectedIndex = 0;\n } else if (select.getAttribute('select-type') === 'max') {\n select.selectedIndex = select.options.length - 1;\n }\n }\n\n select.dispatchEvent(new Event('change'));\n });\n\n const allMultiBuildingsButtons = [...this.#filterPopUpContent.DOMElement.querySelectorAll('.active-multi-building')];\n allMultiBuildingsButtons.forEach(item => {\n item.classList.remove('active-multi-building');\n });\n MultipleSelector.uncheckAll('modelName');\n MultipleSelector.uncheckAll('multipleSearch');\n updateMultiSearch();\n updateMultiSearchState();\n\n selectedBuildings.clear();\n\n EventBus.trigger('updateApplyBtnCount', searchGetResults(0,null,false).length);\n\n applyFilter && this.#applyFilters();\n }\n\n #updateBtnCountHandler(count) {\n if (count > 0 && Filter.filterIsChanged()) {\n this.#applyBtn.DOMElement.disabled = false;\n this.#applyBtn.removeClass('mobile-search__apply-filter--disabled');\n this.#applyBtn.innerHtml(changeLangToCurrent('apartment found mobile') + ' (' + count + ')');\n } else if (count === 0 && Filter.filterIsChanged()) {\n this.#applyBtn.DOMElement.disabled = true;\n this.#applyBtn.addClass('mobile-search__apply-filter--disabled');\n this.#applyBtn.innerHtml(changeLangToCurrent('No results found'));\n } else {\n this.#applyBtn.DOMElement.disabled = false;\n this.#applyBtn.removeClass('mobile-search__apply-filter--disabled');\n this.#applyBtn.innerHtml(changeLangToCurrent('apartment found mobile') + ' (' + count + ')');\n }\n }\n\n #addFilters(mainContainer) {\n // const searchSortState = getFieldsFromAPI.filter();\n const displayPrice = new Price().showPrice;\n let states = getFieldsFromAPI.filter().slice();\n\n if (!displayPrice)\n states = states.filter(el => el.type !== 'salePrice').filter(el => el.type !== 'rentPrice');\n\n settingsData.searchState = [];\n for (const field of this.#filters()) {\n const hidePrice = (\n field.key === 'salePrice' ||\n field.key === 'rentPrice' ||\n field.key === 'maintenanceFee' ||\n field.key === 'managementFee'\n ) && (!displayPrice);\n\n let inputCondition = getUniqueUnits(settingsData.allCrmData, field);\n if (hidePrice || inputCondition.length === 1)\n continue;\n\n if (inputCondition.length === 0 || hidePrice) {\n const item = states.find(state => state.type === field.key);\n const index = states.indexOf(item);\n\n index !== -1 && states.splice(index, 1);\n continue;\n }\n\n if (field.key === 'facing')\n inputCondition = inputCondition.reduce((arr, item) => {\n item.forEach(str => {\n const strMod = /^[A-Za-z]*$/.test(str) ? str : facingDictionary()[str].en;\n\n if (arr.indexOf(strMod) === -1)\n arr.push(strMod);\n });\n\n return arr;\n }, []);\n\n const elementContainer = new BaseElement()\n .addClass('search__option')\n .addAttribute('data-type', field.key)\n .appendTo(mainContainer);\n const elementTitle = new BaseElement('h2')\n .addClass('search__option-title')\n .appendTo(elementContainer.DOMElement);\n\n new BaseElement('span')\n .addClass(field.icon, 'search__option-title--icon')\n .appendTo(elementTitle.DOMElement);\n new BaseElement('span')\n .addClass('language-string', 'search__option-title--text', 'text', 'callout')\n .addAttribute('data-dictionary', field.labelKey)\n .innerHtml(changeLangToCurrent(field.labelKey))\n .appendTo(elementTitle.DOMElement);\n\n if (field.key === 'salePrice' || field.key === 'rentPrice') {\n new BaseElement('span')\n .appendTo(elementTitle.DOMElement)\n getMoneyToken().appendTo(elementTitle.DOMElement);\n }\n\n if (field.key === 'modelName') {\n if (inputCondition.length > 5) {\n const select = new BaseElement('select')\n .addAttribute('multiple', 'multiple')\n .addClass('multiple__select', 'multiple-select')\n .appendTo(elementContainer.DOMElement)\n .DOMElement;\n\n inputCondition.forEach(condition => {\n new BaseElement('option')\n .addAttribute(`data-${field.key}`, `${condition}`)\n .addAttribute(`data-type`, `${field.key}`)\n .addAttribute('value',condition)\n .innerHtml(condition)\n .appendTo(select);\n });\n\n if (!settingsData.searchState.find(item => item.type === field.key)) {\n settingsData.searchState.push({\n type: field.key,\n checked: {\n state: [...inputCondition],\n value: [],\n },\n });\n }\n\n const multipleSelector = new MultipleSelector(select, 'modelName', {\n showClear: true,\n selectAll: false,\n animate: 'fade',\n minimumCountSelected: 100000,\n });\n\n multipleSelector.minSelected = isMobile ? 2 : 3;\n\n multipleSelector.addCallback('onClick', (scope, view) => {\n const state = settingsData.searchState.find(state => state.type === field.key);\n if (view.selected) {\n state.checked.value.push(view.value);\n } else {\n state.checked.value = state.checked.value.filter(v => v !== view.value);\n }\n searchGetResults();\n });\n\n multipleSelector.addCallback('onUncheckAll', (scope) => {\n const state = settingsData.searchState.find(state => state.type === field.key);\n state.checked.value = [];\n searchGetResults();\n });\n\n multipleSelector.addCallback('onUpdatePlaceholder', (placeholder, selected) => {\n const selectedItems = selected.size;\n if (selectedItems === 0) {\n placeholder.text(changeLangToCurrent('modelTypePlaceholder'));\n } else {\n const data = [...selected].map(el => el.modelname).slice(clamp(selectedItems - multipleSelector.minSelected,0,selectedItems), selectedItems);\n if (data.length > 1) {\n placeholder.text(data.join(' | ').toString());\n } else {\n placeholder.text(data.join('').toString());\n }\n }\n });\n } else {\n createCheckbox(inputCondition, elementContainer.DOMElement, field);\n }\n } else {\n createCheckbox(inputCondition, elementContainer.DOMElement, field);\n }\n }\n\n this.#selectedSearchState = JSON.stringify(settingsData.searchState);\n }\n\n #applyFiltersHandler() {\n this.#isReset = false;\n this.#selectedSearchState = JSON.stringify(settingsData.searchState);\n this.#applyFilters();\n EventBus.trigger('searchChipsSyncWithFilter', this.#filterPopUpContent.DOMElement);\n components.mobileSearch.setStateTo('focused');\n this.#hideFilterPopUp();\n }\n\n #showFilterPopUp() {\n this.#filterPopUpPage.removeClass('hidden');\n PopUpPage.animation('show');\n }\n\n #hideFilterPopUp() {\n PopUpPage.animation('hide');\n }\n\n #filters() {\n const fields = getFieldsFromAPI.filter();\n return fields.map(field => {\n if (field.key === 'roomNum') {\n field.order = 0;\n } else if (field.key === 'salePrice') {\n field.order = 1;\n } else if (field.key === 'floorNum') {\n field.order = 2;\n } else {\n field.order += 10;\n }\n\n return field;\n }).sort((a, b) => a.order - b.order);\n }\n\n static filterIsChanged() {\n const state = settingsData.searchState;\n let changedFilter = false;\n\n state.forEach(el => {\n if (el.hasOwnProperty('checked') && el.checked.value.length > 0) {\n changedFilter = true;\n } else if (el.hasOwnProperty('min') && el.hasOwnProperty('max')) {\n const min = Number(el.min);\n const max = Number(el.max);\n if (min !== el.startMin) {\n changedFilter = true;\n }\n if (max !== el.startMax) {\n changedFilter = true;\n }\n }\n });\n\n return changedFilter;\n }\n}\n","'use strict';\n\nimport {BaseElement} from \"../../../../interfaces/BaseElement\";\nimport {EventBus} from \"../../../../interfaces/EventBus\";\nimport {settingsData} from \"../../../../../settings\";\nimport {Filter} from \"./Filter\";\nimport { renderUpdateValuesOnDemand } from '../../../../../app';\nimport { searchGetResults, selectedBuildings } from '../../search';\nimport {FavoriteButton} from \"./FavoriteButton\";\nimport {applyShortBuildingNameRule} from \"../../../../../functions\";\nimport {ActiveFiltersCounter} from \"../../ShrinkSearch/ActiveFiltersCounter\";\n\nexport class SearchFilter {\n\t#rootElement;\n\t#filtersCounter;\n\t#filter;\n\t#favorite;\n\n\tconstructor() {\n\t\tsettingsData.searchResult = [];\n\t\tselectedBuildings.clear();\n\n\t\tthis.#rootElement = new BaseElement()\n\t\t\t.addClass('mobile-search__search-filter');\n\n\t\tapplyShortBuildingNameRule();\n\n\t\t// this.#chips = new SearchChips();\n\t\tthis.#filter = new Filter(this.#applyFilters.bind(this));\n\t\tthis.#favorite = new FavoriteButton();\n\t\tthis.#filtersCounter = new ActiveFiltersCounter();\n\n\t\tthis.#build();\n\t}\n\n\tget rootElement() {\n\t\treturn this.#rootElement;\n\t}\n\n\t#build() {\n\t\t// this.#chips.rootElement.appendTo(this.#rootElement.DOMElement);\n\t\tthis.#filter.rootElement.appendTo(this.#rootElement);\n\t\tthis.#favorite.rootElement.appendTo(this.#rootElement);\n\t\tthis.#filtersCounter.rootElement.appendTo(this.#filter.rootElement);\n\t}\n\n\t#applyFilters() {\n\t\tsearchGetResults();\n\t\tEventBus.trigger('resultsViewerToggleContent');\n\t\trenderUpdateValuesOnDemand(false);\n\t\t// EventBus.trigger('filterUpdateFilterCount');\n\t\tEventBus.trigger('resultsViewerSlideToApartment');\n\t\tthis.#filtersCounter.update();\n\t}\n\n\tremove() {\n\t\t// this.#chips.remove();\n\t\t// this.#chips = null;\n\n\t\tthis.#filter.remove();\n\t\tthis.#filter = null;\n\n\t\tthis.#rootElement.remove();\n\t\tthis.#rootElement = null;\n\t}\n}\n","'use strict';\n\nimport {SearchFilter} from \"./Filter/SearchFilter\";\nimport {BuildingSwitcher} from \"./BottomElement/BuildingSwitcher\";\nimport {ResultsViewer} from \"./BottomElement/ResultsViewer/ResultsViewer\";\nimport {Buildings, isMobile, projectMode, settingsData, UIRoot} from \"../../../../settings\";\nimport {SearchBottomElement} from \"./BottomElement/SearchBottomElement\";\nimport {setCSSVar} from \"../../../../functions\";\nimport {EventBus} from \"../../../interfaces/EventBus\";\nimport { searchGetResults } from '../search';\nimport {Building} from \"../../../building/Building\";\nimport {BackButton} from \"./Filter/BackButton\";\n\nexport class MobileSearch {\n\t#filter;\n\t#bottomElement;\n\t#buildingSwitcher;\n\t#resultsViewer;\n\t#backButton;\n\n\tconstructor() {}\n\n\tbuild() {\n\t\tthis.#createComponents();\n\t\tthis.#appendComponents();\n\t\tthis.#setParametersToComponents();\n\t}\n\n\tupdate(updateType) {\n\t\tif (updateType === 'favorite') {\n\t\t\tEventBus.trigger('favoriteButtonUpdate');\n\t\t} else {\n\t\t\tEventBus.trigger('resultsViewerUpdateContent');\n\t\t}\n\t}\n\t\n\tfilterCards(buildingId) {\n\t\tEventBus.trigger('resultsViewerFilterCards',buildingId);\n\t}\n\n\topenFilter() {\n\t\tEventBus.trigger('filterShowFilterPopUp');\n\t}\n\n\tfold() {\n\t\tEventBus.trigger('searchBottomElementFold');\n\t}\n\n\tunfold() {\n\t\tEventBus.trigger('searchBottomElementUnfold');\n\t}\n\n\tsetStateTo(state) {\n\t\tthis.#bottomElement.rootElement.addAttribute('data-state', state);\n\t}\n\n\tget state() {\n\t\treturn this.#bottomElement.rootElement.getAttribute('data-state');\n\t}\n\t\n\tpredict() {\n\t\tEventBus.trigger('updateApplyBtnCount', searchGetResults(0,null,false).length);\n\t}\n\n\tshow() {\n\t\tthis.#filter.rootElement.removeClass('hidden');\n\t\tthis.#bottomElement.rootElement.removeClass('hidden');\n\t}\n\n\thide() {\n\t\tthis.#filter.rootElement.addClass('hidden');\n\t\tthis.#bottomElement.rootElement.addClass('hidden');\n\t}\n\n\tfocusOnApartment(id) {\n\t\tEventBus.trigger('resultsViewerSlideToApartment', id);\n\t}\n\n\t// focusOnActiveCard() {\n\t// \tconst activeCard = this.#bottomElement.rootElement.DOMElement.querySelector('.active-slide');\n\t// \tif (!activeCard)\n\t// \t\treturn;\n\t// \tconst activeCardId = activeCard && activeCard.querySelector('[data-engineId]').getAttribute('data-engineId');\n\t// \tEventBus.trigger('resultsViewerSlideToApartment', activeCardId)\n\t// }\n\n\t#createComponents() {\n\t\tthis.#filter = new SearchFilter();\n\t\tthis.#bottomElement = new SearchBottomElement();\n\t\tthis.#buildingSwitcher = /*!config.features.privateHouseMode && *//*!projectMode.LiteMode.modeIs('picture') &&*/ new BuildingSwitcher();\n\t\tthis.#resultsViewer = new ResultsViewer();\n\t\tthis.#backButton = new BackButton(this.#filter.rootElement);\n\t}\n\n\t#appendComponents() {\n\t\tthis.#filter.rootElement.appendTo(UIRoot);\n\t\tthis.#bottomElement.rootElement.appendTo(UIRoot);\n\t\tthis.#resultsViewer.rootElement.appendTo(this.#bottomElement.rootElement.DOMElement);\n\t\tthis.#buildingSwitcher?.rootElement?.appendTo(this.#bottomElement.rootElement.DOMElement);\n\t}\n\n\t#setParametersToComponents() {\n\t\tif (this.#buildingSwitcher)\n\t\t\tthis.#buildingSwitcher?.setActiveBuildingName();\n\t\tEventBus.trigger('resultsViewerToggleContent');\n\t\tEventBus.trigger('mobileSearchResultsAmountUpdate');\n\t\tsetCSSVar('--mobile-search-filter-height', this.#filter.rootElement.DOMElement.getBoundingClientRect().height + 'px');\n\t}\n\n\tgetApartmentId() {\n\t\tconst isPictureMode = projectMode.LiteMode.modeIs('picture');\n\t\tconst isPrivateHouseMode = config.features?.privateHouseMode;\n\t\tlet availableAptsOfBuilding;\n\t\tif (isPictureMode || isPrivateHouseMode) {\n\t\t\tavailableAptsOfBuilding = settingsData.searchResult.filter(apt => apt.status === 'Available');\n\t\t} else {\n\t\t\tavailableAptsOfBuilding = settingsData.searchResult\n\t\t\t\t.filter(apt => apt.buildingEngineId === Buildings.getActiveBuilding().name)\n\t\t\t\t.filter(apt => apt.status === 'Available');\n\n\t\t\tif (!availableAptsOfBuilding || !availableAptsOfBuilding.length) {\n\t\t\t\tavailableAptsOfBuilding = settingsData.searchResult\n\t\t\t\t\t.filter(apt => apt.status === 'Available');\n\t\t\t}\n\t\t}\n\t\tif (!availableAptsOfBuilding || !availableAptsOfBuilding.length)\n\t\t\treturn null;\n\n\t\treturn availableAptsOfBuilding[0].engineId;\n\t}\n\n\tremove() {\n\t\tthis.#filter?.remove();\n\t\tthis.#bottomElement?.remove();\n\t\tthis.#buildingSwitcher && this.#buildingSwitcher?.remove();\n\t\tthis.#resultsViewer?.remove();\n\t\tthis.#backButton?.remove();\n\n\t\tthis.#filter = null;\n\t\tthis.#bottomElement = null;\n\t\tthis.#buildingSwitcher = null;\n\t\tthis.#resultsViewer = null;\n\t\tthis.#backButton = null;\n\t}\n}\n","'use strict';\n\nimport {BaseElement} from \"../../interfaces/BaseElement\";\n\nexport class SearchResultsNotificator {\n static #element = null;\n static #informationElement = null;\n static #counter = 0;\n constructor() {\n if (SearchResultsNotificator.#element)\n return;\n\n SearchResultsNotificator.#element = new BaseElement()\n .addClass('search__results-notificator', 'hidden');\n SearchResultsNotificator.#informationElement = new BaseElement('span')\n .addClass('results-notificator__information')\n .appendTo(SearchResultsNotificator.#element.DOMElement);\n\n SearchResultsNotificator.update();\n }\n\n static update() {\n const countAmountElement = document.querySelector('.search__result-count--amount');\n if (!SearchResultsNotificator.#element || !countAmountElement)\n return;\n\n SearchResultsNotificator.#counter = parseInt(countAmountElement.innerHTML);\n SearchResultsNotificator.#counter > 0 ?\n SearchResultsNotificator.#element.removeClass('hidden'):\n SearchResultsNotificator.#element.addClass('hidden');\n SearchResultsNotificator.#informationElement.innerHtml(SearchResultsNotificator.#counter);\n }\n\n appendTo(parentElement) {\n if (parentElement && SearchResultsNotificator.#element)\n parentElement.appendChild(SearchResultsNotificator.#element.DOMElement);\n }\n}","import {BaseElement} from \"../../../interfaces/BaseElement\";\nimport {MultipleSelector} from \"../../../interfaces/MultipleSelector\";\nimport {isMobile} from \"../../../../settings\";\n\nexport class ActiveFiltersCounter {\n #rootElement;\n\n constructor() {\n this.#rootElement = new BaseElement()\n .addClass('search__filter-counter', 'search__filter-counter--active', 'hidden')\n .innerHtml(0);\n this.amountOfActiveFilters = 0;\n }\n\n update() {\n if (this.#isAnyHiddenFilterActive()) {\n this.#rootElement.removeClass('hidden');\n // this.#rootElement.addClass('search__filter-counter--active');\n } else {\n this.#rootElement.addClass('hidden');\n // this.#rootElement.removeClass('search__filter-counter--active');\n }\n\n }\n\n get rootElement() {\n return this.#rootElement;\n }\n\n remove() {\n this.#rootElement.remove();\n this.#rootElement = null;\n }\n\n #isAnyHiddenFilterActive() {\n this.amountOfActiveFilters = 0;\n if (isMobile) {\n const activeFiltersAmount = document.querySelectorAll('.mobile-search__filter-pop-up .search__option[state=\"active\"]').length;\n this.amountOfActiveFilters += activeFiltersAmount;\n } else {\n const hiddenActiveFiltersAmount = document.querySelectorAll('.search__top-wrapper .search__option.hidden[state=\"active\"]').length;\n this.amountOfActiveFilters += hiddenActiveFiltersAmount;\n }\n\n if (MultipleSelector.scopes['multipleSearch']?.selected.size > 0)\n this.amountOfActiveFilters++;\n\n this.#rootElement.innerHtml(this.amountOfActiveFilters);\n\n return this.amountOfActiveFilters > 0;\n }\n}\n","import {BaseElement} from \"../../../interfaces/BaseElement\";\nimport {EventBus} from \"../../../interfaces/EventBus\";\nimport {PopUpPage} from \"../../../interfaces/pages/PopUp\";\nimport {resetWebFilters} from \"../search\";\nimport {changeLangToCurrent} from \"../../../components/langSwitcher/langSwitcher\";\nimport {ActiveFiltersCounter} from \"./ActiveFiltersCounter\";\n\nexport class ShrinkSearch {\n #elementWithFilters;\n #filterCloneElement;\n #elementWithFiltersParent;\n #filterPopUp;\n #contentWrapper;\n #filtersWrapper;\n #filterCounter;\n #moreButton;\n #mainClearAll;\n #buttonsWrapper;\n #AMOUNT_OF_VISIBLE_FILTERS = 3;\n #multipleSearchContainer = document.querySelector('.multiple__search__container');\n\n constructor(elementWithFilters) {\n this.#elementWithFilters = elementWithFilters;\n this.#elementWithFiltersParent = new BaseElement(elementWithFilters.parentElement);\n\n this.#filterPopUp = new PopUpPage('');\n this.#filterPopUp.root.addEventListener('click', (event) => {\n if (!event.target.classList.contains('pop-up-page__content-wrapper'))\n return;\n\n PopUpPage.animation('hide');\n this.#putMainElementBack();\n });\n this.#filterPopUp.closeButton.event('click', this.#putMainElementBack.bind(this));\n this.#filterPopUp.addClass('filter-pop-up-page');\n this.#filterPopUp.addClass('hidden');\n\n this.#addMoreButton();\n this.#filterCounter = new ActiveFiltersCounter();\n this.#composeContentElement();\n this.#hideFilterChildrenElementsExceedsLimit();\n this.#filterCounter.update();\n\n EventBus.add('shrinkSearchPutMainElementBack', this.#putMainElementBack.bind(this));\n }\n\n #hideFilterChildrenElementsExceedsLimit() {\n [...this.#elementWithFilters.children].forEach((child, index) => {\n if (index >= this.#AMOUNT_OF_VISIBLE_FILTERS)\n child.classList.add('hidden');\n });\n }\n\n #showAllFilterChildrenElements() {\n [...this.#elementWithFilters.children].forEach((child) => {\n child.classList.remove('hidden');\n });\n }\n\n #addMoreButton() {\n this.#moreButton = new BaseElement('button')\n .addClass('search__more-button', 'language-string')\n .innerHtml(changeLangToCurrent('All filters'))\n .addAttribute('data-dictionary', 'All filters')\n .event('click', () => {\n this.#swapMainWithCloneElements();\n this.#showAllFilterChildrenElements();\n this.#filterPopUp.removeClass('hidden');\n PopUpPage.animation('show');\n })\n }\n\n #composeContentElement() {\n const mainWrapper = new BaseElement()\n .addClass('search__main-buttons-wrapper')\n .appendTo(this.#elementWithFiltersParent)\n .DOMElement;\n \n const moreWrapper = new BaseElement()\n .addClass('search__more-wrapper')\n .appendTo(mainWrapper);\n\n this.#moreButton.appendTo(moreWrapper);\n this.#filterCounter.rootElement.appendTo(moreWrapper);\n this.#mainClearAll = this.#resetButton(mainWrapper);\n this.#mainClearAll.addClass('search__main-clear');\n\n this.#contentWrapper = new BaseElement()\n .addClass('filter-pop-up__content-wrapper');\n\n this.#filtersWrapper = new BaseElement()\n .addClass('filter-pop-up__filters-wrapper')\n .appendTo(this.#contentWrapper);\n\n this.#createPopUpButtons();\n\n this.#filterPopUp.contentElement.appendChild(this.#contentWrapper.DOMElement);\n\n if (this.#multipleSearchContainer)\n this.#elementWithFilters.appendChild(this.#multipleSearchContainer);\n }\n\n #createPopUpButtons() {\n this.#buttonsWrapper = new BaseElement()\n .addClass('filter-pop-up__buttons')\n .appendTo(this.#contentWrapper);\n\n this.#applyButton();\n this.#resetButton();\n }\n\n #applyButton() {\n new BaseElement('button')\n .addClass('filter-pop-up__button', 'filter-pop-up__apply', 'button', 'language-string')\n .event('click', () => {\n PopUpPage.animation('hide');\n this.#putMainElementBack();\n })\n .addAttribute('data-dictionary', 'Apply')\n .innerHtml(changeLangToCurrent('Apply'))\n .appendTo(this.#buttonsWrapper);\n }\n\n #resetButton(parent = this.#buttonsWrapper ) {\n return new BaseElement('button')\n .addClass('filter-pop-up__button', 'mobile-search__clear-filter', 'language-string')\n .event('click', () => {\n resetWebFilters();\n this.#filterCounter.update();\n })\n .addAttribute('data-dictionary', 'Clear All')\n .innerHtml(changeLangToCurrent('Clear All'))\n .appendTo(parent);\n }\n\n #swapMainWithCloneElements() {\n this.#filterCloneElement = this.#elementWithFilters.cloneNode(true);\n this.#filterCloneElement.classList.add('filter-clone');\n [...this.#filterCloneElement.querySelectorAll('[id]')]\n .forEach(elementWithId => { elementWithId.removeAttribute('id'); });\n\n this.#filtersWrapper.appendElement(this.#elementWithFilters);\n this.#elementWithFiltersParent.appendElement(this.#filterCloneElement);\n }\n\n #putMainElementBack() {\n if (this.#filterCloneElement)\n this.#filterCloneElement.remove();\n this.#elementWithFiltersParent.appendElement(this.#elementWithFilters);\n this.#hideFilterChildrenElementsExceedsLimit();\n this.#filterCounter.update();\n }\n}\n","'use strict';\n\nimport {Buildings, components, isMobile, projectMode, settingsData} from '../../../settings';\nimport {\n\tapplyFacingRules,\n\tfilterDuplicatesFromAllCrmData, getDataForChecked,\n\tselectedBuildings,\n\tupdateSearchResults,\n} from './search';\nimport { isOrbitControlsEnabled } from '../../controls/orbitControls';\nimport { changeLangToCurrent, getCurrentLang } from '../../components/langSwitcher/langSwitcher';\nimport { BaseElement } from '../../interfaces/BaseElement';\nimport { getTowerName } from '../../../functions';\nimport { MultipleSelector } from '../../interfaces/MultipleSelector';\n\nexport function createMultipleSearch () {\n\tif (config.features.privateHouseMode)\n\t\treturn;\n\n\tif (Buildings.getBuildingsInfoLength() < 2) {\n\t\tBuildings.getBuildingsArray().forEach((building) => {\n\t\t\tif (Object.keys(building.info).length !== 0)\n\t\t\t\tselectedBuildings.add(building.name);\n\t\t});\n\t\treturn;\n\t}\n\n\tconst mainContainerParent = isMobile\n\t\t? document.querySelector('.mobile-search__filter-pop-up')\n\t\t: document.querySelector('.search__result-wrapper');\n\tconst mainContainer = new BaseElement()\n\t\t.addClass('multiple__search__container')\n\t\t.event('click', multiSearchHandler)\n\t\t.appendTo(mainContainerParent);\n\n\n\tif (isMobile) {\n\t\tmainContainer\n\t\t\t.addClass('search__option')\n\t\t\t.addAttribute('state', 'inactive');\n\n\t\tnew BaseElement()\n\t\t\t.addClass('search__option-title', 'language-string')\n\t\t\t.addAttribute('data-dictionary', 'Buildings')\n\t\t\t.innerHtml(changeLangToCurrent('Buildings'))\n\t\t\t.appendTo(mainContainer.DOMElement);\n\t} else {\n\t\t// const elementTitle = new BaseElement()\n\t\t// \t.appendTo(mainContainerParent);\n\t\tnew BaseElement('span')\n\t\t\t.addClass('language-string', 'search__option-title--text', 'text', 'callout')\n\t\t\t.addAttribute('data-dictionary', 'Buildings')\n\t\t\t.innerHtml(changeLangToCurrent('Buildings'))\n\t\t\t.appendTo(mainContainer.DOMElement);\n\t}\n\t\n\tconst contentContainer = !isMobile && new BaseElement()\n\t\t.addClass('multiple__result__content')\n\t\t.appendTo(mainContainer.DOMElement);\n\n\tconst searchWrapper = isMobile && new BaseElement()\n\t\t.addClass('search__wrapper')\n\t\t.appendTo(mainContainer.DOMElement);\n\n\tconst buildings = Buildings.getBuildingsArray();\n\tif (!isMobile && buildings.length > 6) {\n\t\tconst settings = config.features.search.multipleSearch || {useGroups: true};\n\n\t\tMultipleSelector.dispose('multipleSearch');\n\n\t\tmainContainer.addClass('multiple__select__main-container');\n\t\tmainContainer.addClass('multiple__search__container--row');\n\n\t\tconst select = new BaseElement('select')\n\t\t\t.addAttribute('multiple', 'multiple')\n\t\t\t.addClass('multiple__select', 'multiple-select')\n\t\t\t.appendTo(isMobile ? searchWrapper.DOMElement : contentContainer.DOMElement)\n\t\t\t.DOMElement;\n\n\t\tconst lots = [...new Set(buildings.map(building => building.info?.buildingLot))].filter(el => el && el.length);\n\n\t\tif (lots.length) {\n\t\t\tlots.forEach(lot => {\n\t\t\t\tlet parent;\n\n\t\t\t\tif (settings.useGroups) {\n\t\t\t\t\tparent = new BaseElement('optgroup')\n\t\t\t\t\t\t.addClass('multiple__select__group')\n\t\t\t\t\t\t.addAttribute('label', lot)\n\t\t\t\t\t\t.addAttribute('data-lot', lot)\n\t\t\t\t\t\t.appendTo(select)\n\t\t\t\t\t\t.DOMElement;\n\t\t\t\t} else {\n\t\t\t\t\tparent = select;\n\t\t\t\t}\n\n\t\t\t\tconst lotBuildings = buildings.filter(building => building.info.buildingLot === lot);\n\t\t\t\tlotBuildings.forEach(building => {\n\t\t\t\t\tlet towerName = getTowerName(building);\n\t\t\t\t\tconst buildingName = new BaseElement('option')\n\t\t\t\t\t\t.addClass('multiple__select__option', settings.useGroups ? 'multiple__select__child-option' : null)\n\t\t\t\t\t\t.innerHtml(towerName)\n\t\t\t\t\t\t.addAttribute('data-tower-name', towerName)\n\t\t\t\t\t\t.addAttribute('data-building', building.name)\n\t\t\t\t\t\t.appendTo(parent);\n\n\t\t\t\t\tif (Array.isArray(building.info.towerName)) {\n\t\t\t\t\t\tbuilding.info.towerName.forEach(language => {\n\t\t\t\t\t\t\tbuildingName.addAttribute(`data-lang-${language.lang}`, language.value);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\n\t\t\tbuildings.forEach(building => {\n\t\t\t\tif (Object.keys(building.info).length === 0)\n\t\t\t\t\treturn;\n\t\t\t\tlet towerName = getTowerName(building);\n\t\t\t\tconst buildingName = new BaseElement('option')\n\t\t\t\t\t.addClass('multiple__select__option')\n\t\t\t\t\t.innerHtml(towerName)\n\t\t\t\t\t.addAttribute('data-tower-name', towerName)\n\t\t\t\t\t.addAttribute('data-building', building.name)\n\t\t\t\t\t.appendTo(select);\n\n if (Array.isArray(building.info.towerName)) {\n building.info.towerName.forEach(language => {\n buildingName.addAttribute(`data-lang-${language.lang}`, language.value);\n });\n }\n\n\t\t\t});\n\t\t}\n\n\t\tconst multipleSelector = new MultipleSelector(select, 'multipleSearch', {\n\t\t\tshowClear: true,\n\t\t\tselectAll: false,\n\t\t\tanimate: 'fade',\n\t\t\tminimumCountSelected: 100000,\n\t\t});\n\n\t\tmultipleSelector.minSelected = isMobile ? 1 : 2;\n\n\t\tmultipleSelector.addCallback('onCheckAll', (scope) => {\n\t\t\tscope.data.forEach(obj => {\n\t\t\t\tif (obj.type === 'optgroup') {\n\t\t\t\t\tobj.children.forEach(b => {\n\t\t\t\t\t\tselectedBuildings.add(b._data.building);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tselectedBuildings.add(obj._data.building);\n\t\t\t\t}\n\t\t\t});\n\t\t\tupdateSearchResults();\n\t\t\t// FiltersCounter.update();\n\t\t});\n\n\t\tmultipleSelector.addCallback('onUncheckAll', (scope) => {\n\t\t\tscope.data.forEach(obj => {\n\t\t\t\tif (obj.type === 'optgroup') {\n\t\t\t\t\tobj.children.forEach(b => {\n\t\t\t\t\t\tselectedBuildings.delete(b._data.building);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tselectedBuildings.delete(obj._data.building);\n\t\t\t\t}\n\t\t\t});\n\t\t\tupdateSearchResults();\n\t\t\t// FiltersCounter.update();\n\t\t});\n\n\t\tmultipleSelector.addCallback('onOptgroupClick', (scope, view) => {\n\t\t\tif (view.selected) {\n\t\t\t\tview.children.forEach(b => {\n\t\t\t\t\tselectedBuildings.add(b.data.building);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tview.children.forEach(b => {\n\t\t\t\t\tselectedBuildings.delete(b.data.building);\n\t\t\t\t});\n\t\t\t}\n\t\t\tupdateSearchResults();\n\t\t\t// FiltersCounter.update();\n\t\t});\n\n\t\tmultipleSelector.addCallback('onClick', (scope, view) => {\n\t\t\tif (view.selected) {\n\t\t\t\tselectedBuildings.add(view.data.building);\n\t\t\t} else {\n\t\t\t\tselectedBuildings.delete(view.data.building);\n\t\t\t}\n\t\t\tupdateSearchResults();\n\t\t\t// FiltersCounter.update();\n\t\t});\n\n\t\tmultipleSelector.addCallback('onUpdatePlaceholder', (placeholder, selected) => {\n\t\t\tconst selectedItems = selected.size;\n\t\t\tif (selectedItems === 0) {\n\t\t\t\tplaceholder.text(changeLangToCurrent('buildingsSelect'));\n\t\t\t} else {\n\t\t\t\tconst currentLang = getCurrentLang();\n\t\t\t\tconst key = 'lang' + currentLang.charAt(0).toUpperCase() + currentLang.slice(1,2);\n\t\t\t\tconst data = [...selected].map(el => el[key]).slice(selectedItems - multipleSelector.minSelected, selectedItems);\n\t\t\t\tif (data.length > 1) {\n\t\t\t\t\tplaceholder.text(data.join(' | ').toString());\n\t\t\t\t} else {\n\t\t\t\t\tplaceholder.text(data.join('').toString());\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tmultipleSelector.addCallback('onLanguageUpdate',(selectHTML,selected) => {\n\t\t\tconst currentLang = getCurrentLang();\n\t\t\tconst lang = currentLang.charAt(0).toUpperCase() + currentLang.slice(1,2);\n\t\t\tselected.forEach(data => {\n\t\t\t\tdata.towerName = data[`lang${lang}`];\n\t\t\t});\n\n\t\t\tconst elements = selectHTML.querySelectorAll('option');\n\t\t\tlet translate;\n\t\t\t[...elements].forEach(el => {\n\t\t\t\ttranslate = el.getAttribute(`data-lang-${currentLang}`);\n\t\t\t\tif (translate) {\n\t\t\t\t\tel.innerHTML = translate;\n\t\t\t\t\tel.setAttribute('data-tower-name',translate);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\t\n\t\tif (selectedBuildings.size > 0) {\n\t\t\tselectedBuildings.forEach((name) => {\n\t\t\t\tconst building = Buildings.getBuilding(name);\n\t\t\t\tconst towerName = getTowerName(building);\n\t\t\t\tmultipleSelector.setSelect(towerName);\n\t\t\t});\n\t\t}\n\n\t} else {\n\t\tbuildings.forEach((building) => {\n\t\t\tif (Object.keys(building.info).length === 0)\n\t\t\t\treturn;\n\n\t\t\tconst amountOfFlats = parseInt(getAmountOfFoundFlats(getMultisearchData(), building), 10);\n\t\t\tif (amountOfFlats === 0)\n\t\t\t\treturn;\n\n\t\t\tlet towerName = getTowerName(building);\n\n\t\t\tconst resultContainer = new BaseElement()\n\t\t\t\t.addClass('multiple__result__container')\n\t\t\t\t.addAttribute('data-tower-name', towerName)\n\t\t\t\t.addAttribute('data-building', building.name)\n\t\t\t\t.appendTo(isMobile ? searchWrapper.DOMElement : contentContainer.DOMElement);\n\t\t\t\n\t\t\tif (selectedBuildings.has(building.name)) {\n\t\t\t\tresultContainer.addClass('active-multi-building');\n\t\t\t}\n\n\t\t\tif (isMobile) {\n\t\t\t\tconst buildingNameWrap = new BaseElement()\n\t\t\t\t\t.addClass('multiple__building-wrap')\n\t\t\t\t\t.appendTo(resultContainer.DOMElement);\n\t\t\t\tconst buildingNameElement = new BaseElement('span')\n\t\t\t\t\t.addClass('multiple__building-name', 'text', 'callout')\n\t\t\t\t\t.innerHtml(towerName)\n\t\t\t\t\t.appendTo(buildingNameWrap.DOMElement);\n\t\t\t\tif (Array.isArray(building.info.towerName)) {\n\t\t\t\t\tbuildingNameElement.addClass('language-string');\n\t\t\t\t\tbuilding.info.towerName.forEach(language => {\n\t\t\t\t\t\tbuildingNameElement.addAttribute(`data-lang-${language.lang}`, language.value);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tconst buildingNameWrap = new BaseElement()\n\t\t\t\t\t.addClass('multiple__building-wrap')\n\t\t\t\t\t.appendTo(resultContainer.DOMElement);\n\t\t\t\tconst buildingNameElement = new BaseElement('span')\n\t\t\t\t\t.addClass('multiple__building-name')\n\t\t\t\t\t.innerHtml(towerName)\n\t\t\t\t\t.appendTo(buildingNameWrap.DOMElement);\n\t\t\t\tif (Array.isArray(building.info.towerName)) {\n\t\t\t\t\tbuildingNameElement.addClass('language-string');\n\t\t\t\t\tbuilding.info.towerName.forEach(language => {\n\t\t\t\t\t\tbuildingNameElement.addAttribute(`data-lang-${language.lang}`, language.value);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tnew BaseElement('span')\n\t\t\t\t\t.addClass('multiple__result__count')\n\t\t\t\t\t.innerHtml(` (${amountOfFlats})`)\n\t\t\t\t\t.appendTo(buildingNameWrap.DOMElement);\n\t\t\t}\n\t\t});\n\t}\n\n\n\tconst amountOfPresentBuildings = [...document.querySelectorAll('.multiple__result__container')].length;\n\tif (amountOfPresentBuildings === 1)\n\t\tmainContainer.remove();\n}\n\nfunction getMultisearchData () {\n\tlet {allCrmData, searchState} = settingsData;\n\tlet filteredData = [...filterDuplicatesFromAllCrmData(allCrmData)];\n\n\tfor (let state of searchState) {\n\t\tfilteredData = filteredData.filter(dataItem => {\n\t\t\tlet currentStateDataValue = dataItem[state.type];\n\n\t\t\tif (state.type === 'facing')\n\t\t\t\tcurrentStateDataValue = applyFacingRules(currentStateDataValue);\n\n\t\t\tif (dataItem.status === 'Available' && ['', undefined, null].indexOf(currentStateDataValue) === -1) {\n\t\t\t\tif (state.checked)\n\t\t\t\t\treturn getDataForChecked(dataItem, currentStateDataValue, state);\n\n\t\t\t\tif (state.min <= currentStateDataValue && currentStateDataValue <= state.max)\n\t\t\t\t\treturn dataItem;\n\t\t\t}\n\t\t});\n\t}\n\n\treturn filteredData;\n}\n\nexport function updateMultiSearch () {\n\tif (Buildings.getBuildingsInfoLength() < 2)\n\t\treturn;\n\n\tBuildings.getBuildingsArray().forEach(building => {\n\t\tif (Object.keys(building.info).length === 0)\n\t\t\treturn;\n\n\t\tconst towerName = getTowerName(building);\n\n\t\tconst htmlElement = document.querySelector(`.multiple__result__container[data-tower-name=\"${towerName}\"`);\n\t\tif (htmlElement) {\n\t\t\tconst count = htmlElement.querySelector('.multiple__result__count');\n\t\t\tif (count)\n\t\t\t\tcount.textContent = ` (${getAmountOfFoundFlats(getMultisearchData(), building)})`;\n\t\t}\n\t});\n}\n\nfunction getAmountOfFoundFlats (searchResult, building) {\n\tlet amount = 0;\n\n\tsearchResult.forEach(element => {\n\t\tif (element.buildingEngineId === building.name) amount++;\n\t});\n\n\treturn amount.toString();\n}\n\nasync function multiSearchHandlerThrottling (e) {\n\tconst currentTarget = e.target.closest('[data-tower-name]');\n\tif (Boolean(currentTarget))\n\t\ttoggleMultiSearchButton(currentTarget);\n\tupdateMultiSearch();\n\tupdateSearchResults();\n\tupdateMultiSearchState();\n\t// FiltersCounter.update();\n\tif (isMobile)\n\t\tcomponents.mobileSearch.predict();\n}\n\nexport function updateMultiSearchState () {\n\tconst multipleSearchRootElement = document.querySelector('.multiple__search__container');\n\tif (!multipleSearchRootElement)\n\t\treturn;\n\n\tconst multipleSearchContainers = [...multipleSearchRootElement.getElementsByClassName('multiple__result__container')];\n\tfor (let container of multipleSearchContainers) {\n\t\tif (container.classList.contains('active-multi-building')) {\n\t\t\tmultipleSearchRootElement.setAttribute('state', 'active');\n\t\t\treturn;\n\t\t}\n\t}\n\tmultipleSearchRootElement.setAttribute('state', 'inactive');\n}\n\nexport function toggleMultiSearchButton (target) {\n\tconst buildingName = target.getAttribute('data-building');\n\tif (selectedBuildings.has(buildingName)) {\n\t\tselectedBuildings.delete(buildingName);\n\t\ttarget.classList.toggle('active-multi-building');\n\t} else {\n\t\tselectedBuildings.add(buildingName);\n\t\ttarget.classList.toggle('active-multi-building');\n\t}\n}\n\nlet clickTourTimer = null;\n\nfunction multiSearchHandler (e) {\n\tif (!isOrbitControlsEnabled() && !projectMode.LiteMode.modeIs('picture') && !projectMode.LiteMode.modeIs('empty'))\n\t\treturn;\n\n\tif (clickTourTimer !== null)\n\t\tclearTimeout(clickTourTimer);\n\n\tclickTourTimer = setTimeout(() => multiSearchHandlerThrottling(e), 300);\n}\n","'use strict';\n\nimport {\n\tchangeLangToCurrent,\n\tgetCurrentLang\n} from '../../components/langSwitcher/langSwitcher';\nimport {\n\tcapitalizeFirstLetter,\n\tclamp,\n\tfindSelectionAndCrmData,\n\tflatClick, getFieldsFromAPI,\n\tgetMoneyToken,\n\tgetObjectFromLocalStorage,\n\tgetTowerName, groupNumbersByDynamicRange,\n\thandleFavoriteLogic,\n\tisNumeric,\n\tnumberWithCommas, parseFormattedNumber,\n\troundToNearest,\n\tsetParametersDependsOnCanvasArea, translateAPIIntoDreamsName,\n\tuserPrevent,\n} from '../../../functions';\nimport {\n\tAVAILABLE_STATUS,\n\tBuildings,\n\tcardsData, components, isDesktop,\n\tisMobile, isNoMenu, isWeb,\n\tprojectMode,\n\tsettingsData,\n\tthreeJsVariables, TRoot, UIRoot,\n} from '../../../settings';\nimport {CardTypes, FilterTypes, ViewMode} from \"../../../common\";\nimport gsap from \"gsap\";\nimport {facingDictionary} from \"../../cards/cardsConfig\";\nimport {hideTooltip} from \"../../components/flatTooltip/flatTooltip\";\nimport {hoverOutPreviousSelection, selectionBoxesSetStatusColor} from '../../threejs/raycast';\nimport {\n\tcreateMultipleSearch,\n\tupdateMultiSearch,\n\ttoggleMultiSearchButton,\n\tupdateMultiSearchState\n} from './multipleSearch';\nimport {UnitCardClass} from \"../../cards/unitCards/UnitCardClass\";\nimport {addBmbyEditButton, setActiveClassHandler } from '../../cards/unitCards/unitCardFunctions';\nimport {Switch} from \"../../interfaces/switchers/Switch\";\nimport {SearchResultsNotificator} from \"./SearchResultsNotificator\";\nimport {Favorite} from '../../components/Favorite/Favorite';\nimport {BaseElement} from \"../../interfaces/BaseElement\";\nimport {Price} from '../../cards/Price';\nimport {showOrHideCylinderFloorNumbers} from \"../../components/cylinderFloorNumbers/cylinderFloorNumbers\";\nimport {Vantages} from \"../../components/vantage/Vantage\";\nimport { Cookie } from '../../Cookie/Cookie';\nimport { MultipleSelector } from '../../interfaces/MultipleSelector';\nimport { VideoPopUp } from '../../components/VideoPopUp';\nimport { IntersectionLegenda } from '../../components/IntersectionLegenda';\nimport { Color, LinearSRGBColorSpace } from 'three';\nimport {BmbyMode} from \"../../mode/BmbyMode\";\nimport {ShrinkSearch} from \"./ShrinkSearch/ShrinkSearch\";\n\nexport const selectedBuildings = new Set();\nconst _color = new Color();\nconst _collapsedGroups = [];\n\nfunction createSearchModule() {\n\tlet containerMain = UIRoot.querySelector('.search__container-main');\n\tif (containerMain)\n\t\treturn new BaseElement(containerMain);\n\n\tcontainerMain = new BaseElement()\n\t\t.addClass('search__container-main')\n\t\t.appendTo(UIRoot);\n\tif (VideoPopUp.isActive()) {\n\t\tVideoPopUp.addSearchResizeCallback(containerMain.DOMElement);\n\t}\n\tif (isNoMenu)\n\t\tcontainerMain.addClass('no-menu-mode');\n\tconst containerTop = new BaseElement()\n\t\t.addClass('search__container-top')\n\t\t.appendTo(containerMain.DOMElement);\n\tconst containerBottom = new BaseElement()\n\t\t.addClass('search__container-bottom')\n\t\t.appendTo(containerMain.DOMElement);\n\tconst containerTopWrapper = new BaseElement()\n\t\t.addClass('search__top-wrapper')\n\t\t.appendTo(containerTop.DOMElement);\n\n\t\tcontainerMain\n\t\t\t.event('transitionend', () => {\n\t\t\t\tif (containerMain.DOMElement?.getAttribute('state') !== 'opened')\n\t\t\t\t\tcontainerMain.remove();\n\t\t\t});\n\n\tconst isHideResultsCount = config.features.search?.hideResultsCount;\n\tconst searchResultsWrapper = new BaseElement()\n\t\t.addClass('search__result-wrapper', isHideResultsCount ? 'hidden' : null)\n\t\t.appendTo(containerBottom.DOMElement);\n\tconst isPrice = new Price().showPrice ? 'show-price' : 'no-price';\n\tconst searchResultsSort = new BaseElement()\n\t\t.addClass('search__sort', isPrice)\n\t\t.appendTo(containerBottom.DOMElement);\n\tconst searchList = new BaseElement('ul')\n\t\t.addClass('search__result-list')\n\t\t.event('click', searchListClickHandler)\n\t\t.appendTo(containerBottom.DOMElement);\n\n\t\tsearchList\n\t\t\t.event('click', handleCardSelect);\n\n\tcreateSearchResultsCount(searchResultsWrapper.DOMElement);\n\tcreateSearchResultsSortMenu(searchResultsSort.DOMElement);\n\tcreateSearchOptionsElements(containerTopWrapper.DOMElement);\n\tcreateMultipleSearch();\n\n\tif (containerTopWrapper.DOMElement.children.length > 3)\n\t\tnew ShrinkSearch(containerTopWrapper.DOMElement);\n\n\treturn containerMain;\n}\n\nfunction hideFiltersMoreThan (amount) {\n\tconst topContainer = document.querySelector('.search__top-wrapper');\n\tconst allFilters = [...topContainer.getElementsByClassName('search__option')];\n\tallFilters.slice(amount).forEach(filter => {\n\t\tfilter.classList.add('hidden');\n\t});\n}\n\nfunction searchListClickHandler (event) {\n\tif (!event.target.closest('.search__group-title'))\n\t\treturn;\n\n\tconst groupWrapper = event.target.closest('.search__building-group');\n\tconst buildingName = groupWrapper.getAttribute('building-name');\n\tconst groupList = groupWrapper.querySelector('.search__group-list');\n\tconst groupState = groupWrapper.getAttribute('state');\n\tif (groupState === 'collapsed') {\n\t\t_collapsedGroups.splice(_collapsedGroups.indexOf(buildingName), 1);\n\t\tgroupWrapper.setAttribute('state', 'expanded');\n\t\tgroupList.style.removeProperty('display');\n\t} else if (groupState === 'expanded') {\n\t\t_collapsedGroups.push(buildingName);\n\t\tgroupWrapper.setAttribute('state', 'collapsed');\n\t\tgroupList.addEventListener('transitionend', () => { groupList.style.display = 'none'; }, {once: true});\n\t}\n}\n\nfunction createSearchResultsCount (parent) {\n\tnew BaseElement()\n\t\t.addClass('search__result-count', isMobile && 'hidden')\n\t\t.appendTo(parent)\n\t\t.DOMElement.insertAdjacentHTML('beforeend', `\n 0\n

\n ${changeLangToCurrent('apartments found')}\n

\n `);\n}\n\nfunction createMinMaxInputs (wrapper, minValue, maxValue, field) {\n\tconst labelMin = new BaseElement('label')\n\t\t.addClass('search__label', 'search__label-min')\n\t\t.appendTo(wrapper);\n\tconst labelMax = new BaseElement('label')\n\t\t.addClass('search__label', 'search__label-max')\n\t\t.appendTo(wrapper);\n\tif (field.key === 'salePrice' || field.key === 'rentPrice') {\n\t\tconst moneyToken = getMoneyToken();\n\t\tlabelMax.appendElement(moneyToken.DOMElement.cloneNode(true));\n\t\tlabelMin.appendElement(moneyToken.DOMElement.cloneNode(true));\n\t}\n\n\tconst elementInputMinValue = new BaseElement('input')\n\t\t.addClass('search__option-input', 'search__option-input--min', 'text', 'callout')\n\t\t.addAttribute('type', 'text')\n\t\t.addAttribute('value', `${numberWithCommas(minValue, true)}`)\n\t\t.addAttribute('data-type', `${field.key}`)\n\t\t.addAttribute('data-value', `${minValue}`)\n\t\t.addAttribute('inputmode', 'numeric')\n\t\t.addAttribute('pattern', '[0-9]*')\n\t\t.event('focus', handleRangeInputs)\n\t\t.event('focusout', handleRangeInputs)\n\t\t.event('change', handleRangeInputs)\n\t\t.event('keyup', handleRangeInputs)\n\t\t.appendTo(labelMin.DOMElement)\n\t\t.DOMElement;\n\n\tconst elementInputMaxValue = new BaseElement('input')\n\t\t.addClass('search__option-input', 'search__option-input--max', 'text', 'callout')\n\t\t.addAttribute('type', 'text')\n\t\t.addAttribute('value', `${numberWithCommas(maxValue, true)}`)\n\t\t.addAttribute('data-type', `${field.key}`)\n\t\t.addAttribute('data-value', `${maxValue}`)\n\t\t.addAttribute('inputmode', 'numeric')\n\t\t.addAttribute('pattern', '[0-9]*')\n\t\t.event('focus', handleRangeInputs)\n\t\t.event('focusout', handleRangeInputs)\n\t\t.event('change', handleRangeInputs)\n\t\t.event('keyup', handleRangeInputs)\n\t\t.appendTo(labelMax.DOMElement)\n\t\t.DOMElement;\n\n\treturn {elementInputMinValue, elementInputMaxValue};\n}\n\nexport function createRange (inputCondition, elementContainer, field) {\n\tconst minValue = Math.floor(Math.min(...inputCondition));\n\tconst maxValue = Math.ceil(Math.max(...inputCondition));\n\tconst step = maxValue > 100 ? (maxValue - minValue) / 100 : 1;\n\tconst minGap = 0;\n\n\tconst wrapper = new BaseElement()\n\t\t.addClass('search__wrapper', 'search__wrapper-range')\n\t\t.appendTo(elementContainer);\n\n\tconst {searchState} = settingsData;\n\tconst rangeDataInState = searchState.find(state => state.type === field.key);\n\tconst startMinValue = (rangeDataInState) ? rangeDataInState.min : minValue;\n\tconst startMaxValue = (rangeDataInState) ? rangeDataInState.max : maxValue;\n\n\tconst {elementInputMinValue, elementInputMaxValue} =\n\t\tcreateMinMaxInputs(wrapper.DOMElement, startMinValue, startMaxValue, field);\n\n\tconst rangeWrapper = new BaseElement()\n\t\t.addClass('search__range-wrapper')\n\t\t.appendTo(wrapper.DOMElement);\n\tconst rangeContainer = new BaseElement()\n\t\t.addClass('search__range-container')\n\t\t.addAttribute('data-type', field.key)\n\t\t.appendTo(rangeWrapper.DOMElement);\n\tconst rangeSliderTrack = new BaseElement()\n\t\t.addClass('search__range-slider-track')\n\t\t.appendTo(rangeContainer.DOMElement);\n\tconst rangeOne = new BaseElement('input')\n\t\t.addClass('search__range-input', 'search__range-input--one', `search__range-input--${field.key}`)\n\t\t.appendTo(rangeContainer.DOMElement);\n\tconst rangeTwo = new BaseElement('input')\n\t\t.addClass('search__range-input', 'search__range-input--two', `search__range-input--${field.key}`)\n\t\t.appendTo(rangeContainer.DOMElement);\n\n\tconst rangeValues = {\n\t\t'min': minValue,\n\t\t'max': maxValue,\n\t\t'value': {\n\t\t\t'startMinValue': startMinValue,\n\t\t\t'startMaxValue': startMaxValue,\n\t\t},\n\t\t'startMinValue': startMinValue,\n\t\t'startMaxValue': startMaxValue,\n\t\t'step': step,\n\t\t'data-type': field.key,\n\t\t'type': 'range',\n\t};\n\n\tsetDataRangeInputs(rangeOne.DOMElement, rangeValues);\n\tsetDataRangeInputs(rangeTwo.DOMElement, rangeValues);\n\tfillTrackColor(rangeSliderTrack.DOMElement, rangeOne.DOMElement, rangeTwo.DOMElement);\n\n\tif (parseInt(rangeOne.DOMElement.value) === maxValue) {\n\t\trangeOne.DOMElement.style.zIndex = 2;\n\t\trangeTwo.DOMElement.style.zIndex = 1;\n\t} else if (parseInt(rangeTwo.DOMElement.value) === maxValue) {\n\t\trangeOne.DOMElement.style.zIndex = 1;\n\t\trangeTwo.DOMElement.style.zIndex = 2;\n\t}\n\n\trangeOne.event('input', (e) => {\n\t\te.preventDefault();\n\t\tif (parseInt(rangeTwo.DOMElement.value) - parseInt(rangeOne.DOMElement.value) <= minGap)\n\t\t\trangeOne.DOMElement.value = parseInt(rangeTwo.DOMElement.value) - minGap;\n\n\t\telementInputMinValue.value = numberWithCommas(Math.round(rangeOne.DOMElement.value), true);\n\t\tfillTrackColor(rangeSliderTrack.DOMElement, rangeOne.DOMElement, rangeTwo.DOMElement);\n\n\t\tconst updateStateElement = searchState.find(item => item.type === field.key);\n\t\tif (!updateStateElement.hasOwnProperty('checked'))\n\t\t\tupdateStateElement.min = rangeOne.DOMElement.value;\n\n\t\tif (!components.mobileSearch) {\n\t\t\tsearchGetResults();\n\t\t\tupdateMultiSearch();\n\t\t} else {\n\t\t\tcomponents.mobileSearch.predict();\n\t\t}\n\n\n\t\tconst currentMax = parseInt(updateStateElement.max, 10);\n\t\tconst currentMin = parseInt(updateStateElement.min, 10);\n\t\tconst startMax = parseInt(updateStateElement.startMax, 10);\n\t\tconst startMin = parseInt(updateStateElement.startMin, 10);\n\t\tif (currentMax === startMax && currentMin === startMin) {\n\t\t\trangeOne.DOMElement.closest('.search__option').setAttribute('state', 'inactive');\n\t\t} else {\n\t\t\trangeOne.DOMElement.closest('.search__option').setAttribute('state', 'active');\n\t\t}\n\n\t\t// if (isMobile) {\n\t\t// \tFiltersCounter.update();\n\t\t// }\n\t});\n\n\trangeTwo.event('input', (e) => {\n\t\te.preventDefault();\n\n\t\tif (parseInt(rangeTwo.DOMElement.value) - parseInt(rangeOne.DOMElement.value) <= minGap)\n\t\t\trangeTwo.DOMElement.value = parseInt(rangeOne.DOMElement.value) + minGap;\n\n\t\telementInputMaxValue.value = numberWithCommas(Math.round(rangeTwo.DOMElement.value), true);\n\t\tfillTrackColor(rangeSliderTrack.DOMElement, rangeOne.DOMElement, rangeTwo.DOMElement);\n\n\t\tconst updateStateElement = searchState.find(item => item.type === field.key);\n\t\tif (!updateStateElement.hasOwnProperty('checked'))\n\t\t\tupdateStateElement.max = rangeTwo.DOMElement.value;\n\n\t\tif (!components.mobileSearch) {\n\t\t\tsearchGetResults();\n\t\t\tupdateMultiSearch();\n\t\t} else {\n\t\t\tcomponents.mobileSearch.predict();\n\t\t}\n\n\t\t\n\t\tconst currentMax = parseInt(updateStateElement.max, 10);\n\t\tconst currentMin = parseInt(updateStateElement.min, 10);\n\t\tconst startMax = parseInt(updateStateElement.startMax, 10);\n\t\tconst startMin = parseInt(updateStateElement.startMin, 10);\n\t\tif (currentMax === startMax && currentMin === startMin) {\n\t\t\trangeTwo.DOMElement.closest('.search__option').setAttribute('state', 'inactive');\n\t\t} else {\n\t\t\trangeTwo.DOMElement.closest('.search__option').setAttribute('state', 'active');\n\t\t}\n\t\t\n\n\t\t// FiltersCounter.update();\n\t});\n\n\tif (!settingsData.searchState.find(item => item.type === field.key)) {\n\t\tsettingsData.searchState.push({\n\t\t\ttype: field.key,\n\t\t\tstartMin: minValue,\n\t\t\tstartMax: maxValue,\n\t\t\tmin: minValue,\n\t\t\tmax: maxValue,\n\t\t});\n\t}\n}\n\nfunction setDataRangeInputs (range, rangeValues) {\n\tfor (const key in rangeValues) {\n\t\tif (key === 'value') {\n\t\t\tconst isFirst = range.classList.contains('search__range-input--one');\n\t\t\trange.setAttribute(key, isFirst ? rangeValues[key].startMinValue : rangeValues[key].startMaxValue);\n\t\t\tcontinue;\n\t\t}\n\t\trange.setAttribute(key, rangeValues[key]);\n\t}\n}\n\nfunction fillTrackColor (rangeSliderTrack, rangeOne, rangeTwo) {\n\tconst minValue = rangeOne.min;\n\tconst maxValue = rangeOne.max;\n\tconst percent1 = ((rangeOne.value - minValue) / (maxValue - minValue)) * 100;\n\tconst percent2 = ((rangeTwo.value - minValue) / (maxValue - minValue)) * 100;\n\n\tconst color1 = 'rgba(120, 120, 128, 0.2)';\n\tconst color2 = 'var(--brand2)';\n\n\tconst rangeSliderTrackCorrection = 2;\n\trangeSliderTrack.style.background = `linear-gradient(to right, ${color1} ${percent1 - rangeSliderTrackCorrection}%, ${color2} ${percent1 - rangeSliderTrackCorrection}%, ${color2} ${percent2 + rangeSliderTrackCorrection}%, ${color1} ${percent2 + rangeSliderTrackCorrection}%)`;\n}\n\nexport function createCheckbox(inputCondition, elementContainer, field) {\n const {searchState} = settingsData;\n const rangeDataInState = searchState.find(state => state.type === field.key);\n const wrapper = new BaseElement()\n .addClass('search__wrapper', 'search__wrapper-checkbox')\n .addAttribute('type', `${field.key}`)\n .appendTo(elementContainer);\n\n let searchSwitcher = null;\n let isRange = null;\n\n const isSwitcher =\n field.key === 'accessible' ||\n field.key === 'treatmentRoom' ||\n field.key === 'balconySize' && field.visibility === 'check-mark' ||\n field.key === 'roofBalconySize' && field.visibility === 'check-mark' ||\n field.key === 'coveredBalconySize' && field.visibility === 'check-mark' ||\n field.key === 'basementSize' && field.visibility === 'check-mark' ||\n field.key === 'gardenSize' && field.visibility === 'check-mark';\n if (isSwitcher) {\n searchSwitcher = new Switch(wrapper.DOMElement);\n wrapper.addAttribute('selection-type', 'switch');\n } else if (isNumeric(inputCondition[0]) && inputCondition.length > 6 && inputCondition.length < 10) {\n // const clamped = inputCondition.filter(num => num < 6);\n\t\tinputCondition.length = 6;\n\t\tinputCondition[5] = inputCondition[5] + '+';\n // inputCondition = clamped;\n } else if (isNumeric(inputCondition[0]) && inputCondition.length >= 10) {\n inputCondition = groupNumbersByDynamicRange(inputCondition);\n isRange = true;\n }\n\n inputCondition.forEach((value, index) => {\n let elementInputCheckbox;\n\n\t\tif (isRange && isEmptyRange(value, field.key))\n\t\t\treturn;\n\n if (isSwitcher) {\n searchSwitcher.checkbox.setAttribute('id', `${field.key}_${index}`);\n searchSwitcher.checkbox.setAttribute(`data-${field.key}`, `${value}`);\n searchSwitcher.checkbox.setAttribute(`data-type`, `${field.key}`);\n } else {\n elementInputCheckbox = new BaseElement('input')\n .addClass('search__option-input', 'search__option-checkbox')\n .setAttributes({\n 'type': 'checkbox',\n 'id': `${field.key}_${index}`,\n [`data-${field.key}`]: `${value}`,\n [`data-type`]: `${field.key}`,\n })\n .appendTo(wrapper.DOMElement);\n\n\t\t\tif (isRange)\n\t\t\t\telementInputCheckbox.addAttribute('data-is-range', true)\n }\n\n if (rangeDataInState) {\n\t\t\tlet isChecked;\n\t\t\tif (isRange) {\n\t\t\t\tisChecked = value.some(item => rangeDataInState.checked.value.includes(item));\n\t\t\t} else {\n\t\t\t\tisChecked = rangeDataInState.checked.value.indexOf(value);\n\t\t\t}\n\n if (isSwitcher) {\n searchSwitcher.checked = Boolean(rangeDataInState.checked.value[0]);\n } else if (isChecked !== -1) {\n elementInputCheckbox.addAttribute(`checked`, true);\n }\n }\n\n let elementLabelCheckbox = null;\n if (isSwitcher) {\n searchSwitcher.slider.setAttribute('data', `${field.key}_${index}`);\n } else {\n elementLabelCheckbox = new BaseElement('label')\n .addClass('search__option-label', 'text')\n .addAttribute('for', `${field.key}_${index}`)\n .appendTo(wrapper.DOMElement);\n }\n\n if (field.hasOwnProperty('exceptions')) {\n value = field.exceptions[value];\n\n elementLabelCheckbox?.addClass('language-string', 'search__option__room__text');\n elementLabelCheckbox?.addAttribute('data-dictionary', `${value}`);\n elementLabelCheckbox?.DOMElement\n .insertAdjacentHTML('afterbegin', `${changeLangToCurrent(value)}`);\n } else if ((typeof value !== 'number' && !isRange || (value === 0 && field.key !== 'floorNum')) && elementLabelCheckbox?.DOMElement) {\n if (value === 0 && field.key === 'roomNum')\n value = 'Studio';\n elementLabelCheckbox?.addClass('language-string', 'search__option__room__text');\n elementLabelCheckbox?.addAttribute('data-dictionary', `${value}`);\n elementLabelCheckbox?.DOMElement\n .insertAdjacentHTML('afterbegin', `${changeLangToCurrent(value)}`);\n\n if (isMobile) {\n switch (value) {\n case 'Apartment':\n elementLabelCheckbox?.addClass('icon-building1');\n break;\n case 'Penthouse':\n case 'Mini Penthouse':\n elementLabelCheckbox?.addClass('icon-building3');\n break;\n case 'Duplex':\n elementLabelCheckbox?.addClass('icon-building4');\n break;\n case 'Garden Apartment':\n elementLabelCheckbox?.addClass('icon-building2');\n break;\n\n }\n }\n } else if (field.key === 'floorNum' && (settingsData.groundFloor.isActive && (parseInt(settingsData.groundFloor.floor) === parseInt(value)))) {\n const shortLabel = settingsData.groundFloor.shortLabel;\n elementLabelCheckbox?.addClass('language-string', 'search__option__room__text');\n elementLabelCheckbox?.addAttribute('data-dictionary', `${shortLabel}`);\n elementLabelCheckbox?.DOMElement\n .insertAdjacentHTML('afterbegin', `${changeLangToCurrent(shortLabel)}`);\n } else if (field.key === 'salePrice' && !isRange) {\n\t\t\telementLabelCheckbox?.innerHtml(numberWithCommas(parseInt(value)))\n\t\t} else {\n if (elementLabelCheckbox?.DOMElement)\n elementLabelCheckbox?.DOMElement\n .insertAdjacentHTML('afterbegin', `${value}`);\n }\n searchSwitcher\n ? searchSwitcher.listener = checkBoxHandler\n : elementInputCheckbox?.event('change', checkBoxHandler);\n });\n\n const startValue = rangeDataInState ? rangeDataInState.checked.value : [];\n if (!settingsData.searchState.find(item => item.type === field.key)) {\n settingsData.searchState.push({\n type: field.key,\n isRange,\n checked: {\n state: [...inputCondition],\n value: startValue,\n },\n });\n }\n}\n\nfunction isEmptyRange(range, field) {\n\tconst isValueWithPlus = range.indexOf('+') !== -1;\n\tconst minValue = isValueWithPlus\n\t\t? parseFormattedNumber(range.slice(0, -1))\n\t\t: parseFormattedNumber(range.split('-')[0].trim());\n\tconst maxValue = !isValueWithPlus && parseFormattedNumber(range.split('-')[1].trim());\n\n\treturn !settingsData.allCrmData.some(apt => isValueWithPlus ? minValue <= apt[field] : minValue <= apt[field] && apt[field] <= maxValue);\n}\n\nexport function createDropdowns (inputCondition, elementContainer, field) {\n\tconst minValue = Math.floor(Math.min(...inputCondition));\n\tconst maxValue = Math.ceil(Math.max(...inputCondition));\n\n\tconst wrapper = new BaseElement()\n\t\t.addClass('search__wrapper', 'search__wrapper-dropdown')\n\t\t.addAttribute('data-field-key', field.key)\n\t\t.appendTo(elementContainer);\n\tcreateSelectElementWithGivenData(inputCondition, 'min',field.key)\n\t\t.appendTo(wrapper.DOMElement);\n\tnew BaseElement('span')\n\t\t.innerHtml('-')\n\t\t.appendTo(wrapper.DOMElement);\n\tcreateSelectElementWithGivenData(inputCondition, 'max',field.key)\n\t\t.appendTo(wrapper.DOMElement);\n\n\tif (!settingsData.searchState.find(item => item.type === field.key)) {\n\t\tsettingsData.searchState.push({\n\t\t\ttype: field.key,\n\t\t\tstartMin: minValue,\n\t\t\tstartMax: maxValue,\n\t\t\tmin: minValue,\n\t\t\tmax: maxValue,\n\t\t});\n\t}\n}\n\nfunction createSelectElementWithGivenData (data, type, field) {\n\tconst selectElement = new BaseElement('select')\n\t\t.addAttribute('select-type', type === 'max' ? 'max' : 'min')\n\t\t.addAttribute('data-type',field)\n\t\t.event('change', selectFilterChangeHandler)\n\t\t.addClass('mobile-select-dropdown');\n\n\tlet minValue = Math.floor(Math.min(...data));\n\tconst maxValue = Math.ceil(Math.max(...data));\n\tlet step = 1;\n\tlet isPrice = false;\n\n\tswitch (field) {\n\t\tcase 'totalSpace':\n\t\t\tstep = 10;\n\t\t\tbreak;\n\t\tcase 'roomNum':\n\n\t\t\tbreak;\n\t\tcase 'salePrice':\n\t\t\tisPrice = true;\n\t\t\tstep = config.features.search.searchConfig?.dropdownValueStep\n\t\t\t\t? parseInt(config.features.search.searchConfig.dropdownValueStep, 10)\n\t\t\t\t: 100000;\n\n\t\t\tnew BaseElement('option')\n\t\t\t\t.addClass('translate-number', 'price')\n\t\t\t\t.addAttribute('value', minValue)\n\t\t\t\t.innerHtml(numberWithCommas(minValue, isPrice))\n\t\t\t\t.appendTo(selectElement.DOMElement);\n\n\t\t\tminValue = roundToNearest(minValue, step);\n\t\t\tbreak;\n\n\n\t}\n\n\tfor (let i = minValue; i < maxValue; i += step) {\n\t\tnew BaseElement('option')\n\t\t\t.addClass('translate-number', 'price')\n\t\t\t.addAttribute('value', i)\n\t\t\t.innerHtml(numberWithCommas(i, isPrice))\n\t\t\t.appendTo(selectElement.DOMElement);\n\t}\n\n\tnew BaseElement('option')\n\t\t.addClass('translate-number', 'price')\n\t\t.addAttribute('value', maxValue)\n\t\t.innerHtml(numberWithCommas(maxValue, isPrice))\n\t\t.appendTo(selectElement.DOMElement);\n\n\tconst selectsChildren = selectElement.DOMElement.children;\n\tif (type === 'max') {\n\t\tselectsChildren[selectsChildren.length - 1].setAttribute('selected', 'selected');\n\t} else if (type === 'min') {\n\t\tselectsChildren[0].setAttribute('selected', 'selected');\n\t}\n\n\treturn selectElement;\n}\n\nfunction selectFilterChangeHandler (event) {\n\tconst wrapperDropdown = event.target.closest('.search__wrapper-dropdown');\n\tconst tiedSelectElements = [...wrapperDropdown.querySelectorAll('select')];\n\tconst minSelectElement = tiedSelectElements[0];\n\tconst minValue = parseInt(tiedSelectElements[0].value, 10);\n\tconst maxSelectElement = tiedSelectElements[1];\n\tconst maxValue = parseInt(tiedSelectElements[1].value, 10);\n\tconst fieldKey = wrapperDropdown.getAttribute('data-field-key');\n\tconst {searchState} = settingsData;\n\tconst updateStateElement = searchState.find(item => item.type === fieldKey);\n\tconst targetType = event.target.getAttribute('select-type');\n\n\tif (targetType === 'min') {\n\t\tif (minValue > maxValue)\n\t\t\tminSelectElement.value = maxSelectElement.value;\n\t\tif (!updateStateElement.hasOwnProperty('checked'))\n\t\t\tupdateStateElement.min = minSelectElement.value;\n\t}\n\tif (targetType === 'max') {\n\t\tif (minValue > maxValue)\n\t\t\tmaxSelectElement.value = minSelectElement.value;\n\t\tif (!updateStateElement.hasOwnProperty('checked'))\n\t\t\tupdateStateElement.max = maxSelectElement.value;\n\t}\n\n\tif (parseInt(updateStateElement.startMax, 10) !== parseInt(updateStateElement.max, 10) ||\n\t\tparseInt(updateStateElement.startMin, 10) !== parseInt(updateStateElement.min, 10)) {\n\t\tevent.target.closest('.search__option').setAttribute('state', 'active');\n\t} else if (parseInt(updateStateElement.startMax, 10) === parseInt(updateStateElement.max, 10) &&\n\t\tparseInt(updateStateElement.startMin, 10) === parseInt(updateStateElement.min, 10)) {\n\t\tevent.target.closest('.search__option').setAttribute('state', 'inactive');\n\t}\n\n\t// FiltersCounter.update();\n\tif (!components.mobileSearch) {\n\t\tsearchGetResults();\n\t} else {\n\t\tcomponents.mobileSearch.predict();\n\t}\n}\n\nexport function updateSearchResults () {\n\tsearchGetResults();\n}\n\nfunction createSearchOptionsElements (containerTopWrapper) {\n\tsettingsData.searchResult = [];\n\t// const {fields = config.features.search.searchConfig};\n\t// const {searchSortState} = getFieldsFromAPI.table();\n\tconst displayPrice = new Price().showPrice;\n\tlet states = getFieldsFromAPI.table().slice();\n\n\tif (!displayPrice)\n\t\tstates = states.filter(el => el.type !== 'salePrice').filter(el => el.type !== 'rentPrice');\n\n\tfor (const field of getFieldsFromAPI.filter()) {\n\t\tconst hidePrice = (\n\t\t\tfield.key === 'salePrice' ||\n\t\t\tfield.key === 'rentPrice' ||\n\t\t\tfield.key === 'maintenanceFee' ||\n\t\t\tfield.key === 'managementFee'\n\t\t) && (!displayPrice);\n\n\t\tlet inputCondition = getUniqueUnits(settingsData.allCrmData, field);\n\t\tif (hidePrice || inputCondition.length === 1)\n\t\t\tcontinue;\n\n\t\tif (inputCondition.length === 0 || hidePrice) {\n\t\t\tconst item = states.find(state => state.type === field.key);\n\t\t\tconst index = states.indexOf(item);\n\n\t\t\tindex !== -1 && states.splice(index, 1);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (field.key === 'facing')\n\t\t\tinputCondition = inputCondition.reduce((arr, item) => {\n\t\t\t\titem.forEach(str => {\n\t\t\t\t\tconst strMod = /^[A-Za-z]*$/.test(str) ? str : facingDictionary()[str].en;\n\n\t\t\t\t\tif (arr.indexOf(strMod) === -1)\n\t\t\t\t\t\tarr.push(strMod);\n\t\t\t\t});\n\n\t\t\t\treturn arr;\n\t\t\t}, []);\n\n\t\tconst elementContainer = new BaseElement()\n\t\t\t.addClass('search__option')\n\t\t\t.addAttribute('data-type', field.key)\n\t\t\t.appendTo(containerTopWrapper);\n\t\tif (isMobile)\n\t\t\telementContainer.addAttribute('state', 'inactive');\n\t\tconst elementTitle = new BaseElement('h2')\n\t\t\t.addClass('search__option-title')\n\t\t\t.appendTo(elementContainer.DOMElement);\n\n\t\t/*new BaseElement('span')\n\t\t .addClass(field.icon, 'search__option-title--icon')\n\t\t .appendTo(elementTitle.DOMElement);*/\n\t\tnew BaseElement('span')\n\t\t\t.addClass('language-string', 'search__option-title--text', 'text', 'callout')\n\t\t\t.addAttribute('data-dictionary', field.labelKey)\n\t\t\t.innerHtml(changeLangToCurrent(translateAPIIntoDreamsName(field.labelKey)))\n\t\t\t.appendTo(elementTitle.DOMElement);\n\t\tif (isMobile && (field.key === 'salePrice' || field.key === 'rentPrice')) {\n\t\t\tnew BaseElement('span')\n\t\t\t\t.innerHtml(',  ')\n\t\t\t\t.appendTo(elementTitle.DOMElement);\n\t\t\tgetMoneyToken().appendTo(elementTitle.DOMElement);\n\t\t}\n\n\t\tif (field.key === 'modelName') {\n\t\t\tif (inputCondition.length > 5) {\n\t\t\t\tconst select = new BaseElement('select')\n\t\t\t\t\t.addAttribute('multiple', 'multiple')\n\t\t\t\t\t.addClass('multiple__select', 'multiple-select')\n\t\t\t\t\t.appendTo(elementContainer.DOMElement)\n\t\t\t\t\t.DOMElement;\n\n\t\t\t\tinputCondition.forEach(condition => {\n\t\t\t\t\tnew BaseElement('option')\n\t\t\t\t\t\t.addAttribute(`data-${field.key}`, `${condition}`)\n\t\t\t\t\t\t.addAttribute(`data-type`, `${field.key}`)\n\t\t\t\t\t\t.addAttribute('value',condition)\n\t\t\t\t\t\t.innerHtml(condition)\n\t\t\t\t\t\t.appendTo(select);\n\t\t\t\t});\n\n\t\t\t\tif (!settingsData.searchState.find(item => item.type === field.key)) {\n\t\t\t\t\tsettingsData.searchState.push({\n\t\t\t\t\t\ttype: field.key,\n\t\t\t\t\t\tchecked: {\n\t\t\t\t\t\t\tstate: [...inputCondition],\n\t\t\t\t\t\t\tvalue: [],\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst multipleSelector = new MultipleSelector(select, 'modelName', {\n\t\t\t\t\tshowClear: true,\n\t\t\t\t\tselectAll: false,\n\t\t\t\t\tanimate: 'fade',\n\t\t\t\t\tminimumCountSelected: 100000,\n\t\t\t\t});\n\n\t\t\t\tmultipleSelector.minSelected = isMobile ? 2 : 3;\n\n\t\t\t\tmultipleSelector.addCallback('onClick', (scope, view) => {\n\t\t\t\t\tconst state = settingsData.searchState.find(state => state.type === field.key);\n\t\t\t\t\tif (view.selected) {\n\t\t\t\t\t\tstate.checked.value.push(view.value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate.checked.value = state.checked.value.filter(v => v !== view.value);\n\t\t\t\t\t}\n\t\t\t\t\tsearchGetResults();\n\t\t\t\t});\n\n\t\t\t\tmultipleSelector.addCallback('onUncheckAll', (scope) => {\n\t\t\t\t\tconst state = settingsData.searchState.find(state => state.type === field.key);\n\t\t\t\t\tstate.checked.value = [];\n\t\t\t\t\tsearchGetResults();\n\t\t\t\t});\n\n\t\t\t\tmultipleSelector.addCallback('onUpdatePlaceholder', (placeholder, selected) => {\n\t\t\t\t\tconst selectedItems = selected.size;\n\t\t\t\t\tif (selectedItems === 0) {\n\t\t\t\t\t\tplaceholder.text(changeLangToCurrent('modelTypePlaceholder'));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst data = [...selected].map(el => el.modelname).slice(clamp(selectedItems - multipleSelector.minSelected,0,selectedItems), selectedItems);\n\t\t\t\t\t\tif (data.length > 1) {\n\t\t\t\t\t\t\tplaceholder.text(data.join(' | ').toString());\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tplaceholder.text(data.join('').toString());\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tcreateCheckbox(inputCondition, elementContainer.DOMElement, field);\n\t\t\t}\n\t\t} else if (field.visibility === 'check-mark' || !(inputCondition.length > 5 || field?.type === FilterTypes.Range)) {\n\t\t\tcreateCheckbox(inputCondition, elementContainer.DOMElement, field);\n\t\t} else {\n\t\t\tisMobile\n\t\t\t\t? createDropdowns(inputCondition, elementContainer.DOMElement, field)\n\t\t\t\t: createRange(inputCondition, elementContainer.DOMElement, field);\n\t\t}\n\t}\n\n\tconst lastColumns = isMobile ? 1 : displayPrice ? 1 : 2;\n\tconst searchColumnsAmount = isMobile ? 4 : states.length - lastColumns;\n\tdocument.documentElement.style.setProperty('--searchGridColumns', `${searchColumnsAmount}`);\n\tdocument.documentElement.style.setProperty('--searchGridColumnsLast', `${lastColumns}`);\n}\n\nexport function createSearchResultsSortMenu (searchResultsSort/*, searchState, params = {}*/) {\n\t// const searchSortState = searchState || getFieldsFromAPI.table();\n\t// if (isMobile)\n\t// \tsearchSortState.length === 5;\n\tconst currency = config.localization.currencyLabel;\n\tlet value;\n\tswitch (currency) {\n\t\tcase 'EUR':\n\t\t\tvalue = '€';\n\t\t\tbreak;\n\t\tcase 'USD':\n\t\t\tvalue = '$';\n\t\t\tbreak;\n\t\tcase 'UAH':\n\t\t\tvalue = '₴';\n\t\t\tbreak;\n\t\tcase 'NIS':\n\t\t\tvalue = '₪';\n\t\t\tbreak;\n\t}\n\tdocument.documentElement.style.setProperty('--currency', value);\n\n\t// if (!params.hasOwnProperty('disableListener'))\n\t\tsearchResultsSort.addEventListener('click', handleSearchSort, false);\n\n\tconst displayPrice = new Price().showPrice;\n\tfor (const sortType of getFieldsFromAPI.table()) {\n\t\tconst hidePrice = (\n\t\t\tsortType.type === 'salePrice' ||\n\t\t\tsortType.type === 'rentPrice' ||\n\t\t\tsortType.type === 'price2' ||\n\t\t\tsortType.type === 'maintenanceFee' ||\n\t\t\tsortType.type === 'managementFee'\n\t\t) && (!displayPrice);\n\n\t\tif (hidePrice)\n\t\t\tcontinue;\n\n\t\tconst classNamesItem = (sortType.isActive)\n\t\t\t? 'active'\n\t\t\t: 'inactive';\n\t\tconst div = new BaseElement()\n\t\t\t.addClass('search__sort-item', classNamesItem)\n\t\t\t.addAttribute('data-sort-type', `${sortType.type}`)\n\t\t\t.addAttribute('data-sort-state', `${sortType.state}`)\n\t\t\t.appendTo(searchResultsSort);\n\t\tconst classNames = (sortType.state === 'minmax')\n\t\t\t? 'icon-down'\n\t\t\t: 'icon-up';\n\t\tnew BaseElement('span')\n\t\t\t.addClass(classNames)\n\t\t\t.appendTo(div.DOMElement);\n\n\t\tif (!isMobile) {\n\t\t\tdiv.addStyle('order', `${sortType.order}`);\n\t\t\tif (sortType.icon) {\n\t\t\t\tnew BaseElement('span')\n\t\t\t\t\t.addClass(`${sortType.icon}`)\n\t\t\t\t\t.addAttribute('data-type', 'icon')\n\t\t\t\t\t.appendTo(div.DOMElement);\n\t\t\t}\n\t\t\tif (sortType.text === '#') {\n\t\t\t\tnew BaseElement('span')\n\t\t\t\t\t.innerHtml(sortType.text)\n\t\t\t\t\t.appendTo(div.DOMElement);\n\t\t\t}\n\t\t} else if (isMobile && sortType.type === 'favorite') {\n\t\t\tnew BaseElement('span')\n\t\t\t\t.addClass(`${sortType.icon}`)\n\t\t\t\t.addAttribute('data-type', 'icon')\n\t\t\t\t.appendTo(div.DOMElement);\n\t\t}\n\n\t\tswitch (sortType.type) {\n\t\t\t// case 'totalSpace': {\n\t\t\t// \tif (isMobile)\n\t\t\t// \t\tbreak;\n\t\t\t// \tconst value = config.localization.area ? config.localization.area : \"m2\";\n\t\t\t// \tconst element = new BaseElement('span')\n\t\t\t// \t\t.addClass('language-string', 'search__sort-meters')\n\t\t\t// \t\t.addAttribute('data-dictionary', value)\n\t\t\t// \t\t.appendTo(div.DOMElement);\n\t\t\t// \telement.DOMElement\n\t\t\t// \t\t.insertAdjacentHTML('beforeend', `${changeLangToCurrent(value)}`);\n\t\t\t// \tbreak;\n\t\t\t// }\n\t\t\tcase 'salePrice':\n\t\t\tcase 'price2':\n\t\t\tcase 'rentPrice': {\n\t\t\t\tconst element = new BaseElement('span')\n\t\t\t\t\t.addClass('language-string', 'search__sort-currency')\n\t\t\t\t\t.addAttribute('data-dictionary', currency)\n\t\t\t\t\t.appendTo(div.DOMElement);\n\t\t\t\telement.DOMElement.insertAdjacentHTML('beforeend', `${changeLangToCurrent(currency)}`);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t// if (isMobile)\n\taddWrapperAndTextToSortItems();\n}\n\nexport function getUniqueUnits (allCrmData, {key}) {\n\treturn allCrmData.reduce((newArr, data) => {\n\t\t\n\t\tif (BmbyMode.active) {\n\t\t\tif (data.hasOwnProperty(key) && newArr.indexOf(data[key]) === -1 && ['', undefined, null].indexOf(data[key]) === -1) {\n\t\t\t\tnewArr.push(data[key]);\n\t\t\t}\n\t\t} else {\n\t\t\tif (data.hasOwnProperty(key) && newArr.indexOf(data[key]) === -1 && ['', undefined, null].indexOf(data[key]) === -1 && data.status === AVAILABLE_STATUS) {\n\t\t\t\tif (key === 'salePrice' && data.status === AVAILABLE_STATUS) {\n\t\t\t\t\tnewArr.push(data[key]);\n\t\t\t\t} else if (key !== 'salePrice') {\n\t\t\t\t\tnewArr.push(data[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn newArr.sort((a, b) => a - b);\n\t}, []);\n}\n\nfunction sortSearchResults (state, baseSearchArr) {\n\treturn baseSearchArr.filter(data => {\n\t\tlet dataValue = data[state.type];\n\n\t\tif (state.type === 'facing')\n\t\t\tdataValue = applyFacingRules(dataValue);\n\n\t\tif (BmbyMode.active) {\n\t\t\tif (['', undefined, null].indexOf(dataValue) === -1 && (selectedBuildings.has(data.buildingEngineId) || selectedBuildings.size === 0)) {\n\t\t\t\tif (state.checked)\n\t\t\t\t\treturn getDataForChecked(data, dataValue, state);\n\t\t\t\t\n\t\t\t\tif (state.min <= dataValue && dataValue <= state.max)\n\t\t\t\t\treturn data;\n\t\t\t}\n\t\t} else {\n\t\t\tif (data.status === AVAILABLE_STATUS && ['', undefined, null].indexOf(dataValue) === -1 && (selectedBuildings.has(data.buildingEngineId) || selectedBuildings.size === 0)) {\n\t\t\t\tif (state.checked) {\n\t\t\t\t\treturn getDataForChecked(data, dataValue, state);\n\t\t\t\t}\n\n\t\t\t\tif (state.min <= dataValue && dataValue <= state.max) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n}\n\nexport function applyFacingRules (data) {\n\tif (isNaN(data)) {\n\t\tif (typeof data === 'string')\n\t\t\tdata = data.split(',');\n\n\t\treturn data.map(item => /^[A-Za-z]*$/.test(item) ? item : facingDictionary()[item].en);\n\t}\n\n\treturn data;\n}\n\nexport function getDataForChecked (data, dataValue, state) {\n\tif (Array.isArray(dataValue)) {\n\t\tif (dataValue.length === 0 && state.checked.value.length === 0)\n\t\t\treturn data;\n\n\t\tfor (const value of dataValue) {\n\t\t\tif (state.checked.value.length > 0) {\n\t\t\t\tif (state.checked.value.indexOf(value) !== -1) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (state.checked?.state.indexOf(value) !== -1) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (state.checked.value.length > 0) {\n\t\t\tif (state.checked.value.indexOf(dataValue) !== -1)\n\t\t\t\treturn data;\n\t\t} else {\n\t\t\tif (state.isRange) {\n\t\t\t\tif (state.checked.value.length > 0) {\n\t\t\t\t\tif (state.checked.value.indexOf(dataValue) !== -1)\n\t\t\t\t\t\treturn data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (state.checked?.state.indexOf(dataValue) !== -1)\n\t\t\t\t\treturn data;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function searchGetResults (delay = 0, building, addAndShowResults = true) {\n\tlet {allCrmData, searchResult, searchState} = settingsData;\n\tconst filteredCrmData = filterDuplicatesFromAllCrmData(allCrmData);\n\tlet baseSearchArr = [...filteredCrmData];\n\tfor (const state of searchState) {\n\t\tsearchResult = sortSearchResults(state, baseSearchArr);\n\t\tbaseSearchArr = [...searchResult];\n\t}\n\t// const {searchSortState} = config.features.search;\n\tconst sortState = getFieldsFromAPI.table().find(state => state.isActive);\n\n\tif (!isMobile)\n\t\tsearchResult = sortArray(sortState.state, sortState.type, searchResult);\n\n\tif (addAndShowResults) {\n\t\tshowSearchResults(searchResult);\n\n\t\tconst activeBuilding = building || Buildings.getActiveBuilding();\n\t\tconst timeOut = (delay !== 0)\n\t\t\t? (delay + 1.5) * 1000\n\t\t\t: delay;\n\t\tsetTimeout(() => {\n\t\t\tchangeSelectionBoxesStatusColor(searchResult, activeBuilding);\n\t\t\tprojectMode.Cylinder.cylinderBuildingLabels.updateResults();\n\t\t}, timeOut);\n\n\t\tsettingsData.searchResult = searchResult;\n\t}\n\tSearchResultsNotificator.update();\n\tprojectMode.Cylinder.cylinderBuildingLabels.updateResults();\n\n\treturn searchResult;\n}\n\nexport function filterDuplicatesFromAllCrmData (allCrmData) {\n\tconst data = new Set();\n\tallCrmData.forEach(element => {\n\t\tdata.add(element);\n\t});\n\n\treturn data;\n}\n\nexport function changeSelectionBoxesStatusColor (searchResult, activeBuilding) {\n\t// if (config.features.privateHouseMode) return;\n\tif (!searchResult)\n\t\tsearchResult = settingsData.searchResult;\n\tif (!activeBuilding)\n\t\tactiveBuilding = Buildings.getActiveBuilding();\n\n\tlet selectionBoxesActiveTower;\n\tif ((projectMode.LiteMode.isActive() && (projectMode.LiteMode.modeIs('picture') || projectMode.LiteMode.modeIs('empty'))) || config.features.privateHouseMode) {\n\t\tconst buildings = Buildings.getBuildingsArray();\n\t\tconst apartments = [];\n\t\tbuildings.forEach(building => apartments.push(...building.getApartments()));\n\t\tselectionBoxesActiveTower = apartments;\n\t} else {\n\t\tselectionBoxesActiveTower = activeBuilding.apartments;\n\t}\n\n\tfor (const selBox of selectionBoxesActiveTower) {\n\t\tconst itemInSearch = searchResult.find(item => item.engineId === selBox.name);\n\n\t\tif (itemInSearch) {\n\t\t\tselBox.userData.isInSearch = true;\n\t\t\tselectionBoxesSetStatusColor(selBox, 'lock');\n\n\t\t\tif (selBox.userData.isClicked) {\n\t\t\t\tselectionBoxesSetStatusColor(selBox, 'click');\n\t\t\t}\n\t\t} else {\n\t\t\tselBox.userData.isInSearch = false;\n\t\t\tselectionBoxesSetStatusColor(selBox, 'unlock');\n\n\t\t\tif (selBox.userData.isClicked) {\n\t\t\t\tselectionBoxesSetStatusColor(selBox, 'click');\n\t\t\t}\n\n\t\t\tif (settingsData.buildingDestroyed) {\n\t\t\t\tif (settingsData.currentFloor !== selBox.userData.floor) {\n\t\t\t\t\tselectionBoxesSetStatusColor(selBox, 'unlock');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!selBox.userData.isClicked) {\n\t\t\t\t\tselectionBoxesSetStatusColor(selBox, 'unlock');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function showSearchResults (searchResult) {\n\t// Search results counter\n\n\tsearchResult = searchResult.filter(element => {\n\t\treturn selectedBuildings.has(element.buildingEngineId) || selectedBuildings.size === 0;\n\t});\n\n\tconst searchResultsCount = document.querySelector('.search__result-count--amount');\n\tconst searchResultsNumber = document.querySelector('.search__result-count--number');\n\n\tlet text;\n\tif (Buildings.getBuildingsInfoLength() < 2) {\n\t\ttext = searchResult.length > 1\n\t\t\t? changeLangToCurrent('apartments found')\n\t\t\t: changeLangToCurrent('apartment found');\n\t} else {\n\t\ttext = changeLangToCurrent('apartments found');\n\t}\n\n\tif (searchResultsNumber && searchResultsNumber.innerText !== text)\n\t\tsearchResultsNumber.innerHTML = ` ${text}`;\n\tif (searchResultsCount)\n\t\tsearchResultsCount.innerText = `${searchResult.length}`;\n\n\tconst sortPanel = document.querySelector('.search__sort');\n\tif (searchResult.length === 0) {\n\t\tsortPanel ? sortPanel.classList.add('hide') : null;\n\t} else {\n\t\tsortPanel ? sortPanel.classList.remove('hide') : null;\n\t}\n\n\tsetResultsInTheHtmlList(searchResult);\n}\n\nexport function setSearchContainerMaxHeight () {\n\tconst containerMain = UIRoot.querySelector('.search__container-main');\n\tif (isMobile || !containerMain)\n\t\treturn;\n\n\tconst containerMainHeight = containerMain.getBoundingClientRect().height;\n\tconst searchList = containerMain.querySelector('.search__result-list');\n\tconst containerTop = document.querySelector('.search__container-top');\n\tconst containerTopHeight = containerTop.getBoundingClientRect().height;\n\tconst resultWrapper = document.querySelector('.search__result-wrapper');\n\tconst resultWrapperHeight = resultWrapper.getBoundingClientRect().height;\n\tconst sortMenu = document.querySelector('.search__sort');\n\tconst sortMenuHeight = sortMenu.getBoundingClientRect().height;\n\n\tconst containerBottomHeight = containerMainHeight - containerTopHeight;\n\tconst searchListMaxHeight = containerBottomHeight - resultWrapperHeight - sortMenuHeight;\n\tsearchList.setAttribute('style', `max-height: ${searchListMaxHeight}px`);\n}\n\nexport function setResultsInTheHtmlList (searchResult, container, params = {}) {\n\tconst searchList = container || document.querySelector('.search__result-list');\n\tif (searchList)\n\t\tsearchList.innerHTML = '';\n\n\tcreateBuildingsGroups(searchList);\n\n\tlet showFloorNumber = Boolean(getFieldsFromAPI.table().find(el => el.type === 'floorNum'));\n\tlet showRoomNumber = Boolean(getFieldsFromAPI.table().find(el => el.type === 'roomNum'));\n\tconst roomNumberExceptions = getFieldsFromAPI.table().find(el => el.type === 'roomNum')?.exceptions;\n\tconst balcony = getFieldsFromAPI.table().find(el => el.type === 'balconySize');\n\tconst roofBalcony = getFieldsFromAPI.table().find(el => el.type === 'roofBalconySize');\n\tconst coveredBalcony = getFieldsFromAPI.table().find(el => el.type === 'coveredBalconySize');\n\tconst basement = getFieldsFromAPI.table().find(el => el.type === 'basementSize');\n\tconst garden = getFieldsFromAPI.table().find(el => el.type === 'gardenSize');\n\tconst isExposure = getFieldsFromAPI.table().find(el => el.type === 'facing');\n\tconst isTotalSpace = getFieldsFromAPI.table().find(el => el.type === 'totalSpace');\n\tconst isRentPrice = getFieldsFromAPI.table().find(el => el.type === 'rentPrice');\n\tconst isSalePrice = getFieldsFromAPI.table().find(el => el.type === 'salePrice');\n\tconst isPrice2 = getFieldsFromAPI.table().find(el => el.type === 'price2');\n\tconst isPropNum = getFieldsFromAPI.table().find(el => el.type === 'propNum');\n\tconst displayPrice = new Price().showPrice;\n\n\tfor (let {\n\t\tengineId,\n\t\tmodelName,\n\t\tpropType,\n\t\tpropNum,\n\t\tfloorNum,\n\t\troomNum,\n\t\ttotalSpace,\n\t\tsalePrice,\n\t\tstatus,\n\t\trentPrice,\n\t\tprice2,\n\t\tbmbyPropID,\n\t\tfacing,\n\t\taccessible,\n\t\ttreatmentRoom,\n\t\tbalconySize,\n\t\troofBalconySize,\n\t\tcoveredBalconySize,\n\t\tbasementSize,\n\t\tgardenSize\n\t} of searchResult) {\n\t\tlet propNumLabel = '';\n\n\t\tif (Buildings.getBuildingsInfoLength() > 1 && (isMobile || isDesktop)) {\n\t\t\tconfig.buildings.find(building => {\n\t\t\t\tif (building.buildingEngineId === engineId.split('_')[0])\n\t\t\t\t\tpropNumLabel = `(${building.buildingLabel})`;\n\t\t\t});\n\t\t}\n\n\t\tconst unitCard = UnitCardClass.findCard(engineId)?.html;\n\t\tconst engineIdActive = (unitCard) ? unitCard.getAttribute('data-engineid') : '';\n\n\t\tconst classNames = (engineId !== engineIdActive)\n\t\t\t? ['search__result-item']\n\t\t\t: ['search__result-item', 'active', 'active-card'];\n\n\t\tconst currentItemBuildingName = engineId.split('_')[0];\n\t\tconst buildingGroup = document.querySelector('.search__group-list[building-name=\"' + currentItemBuildingName + '\"]');\n\t\tconst itemParent = buildingGroup ? buildingGroup : searchList;\n\t\tconst searchItem = new BaseElement('li')\n\t\t\t.addClass(...classNames)\n\t\t\t.setAttributes({\n\t\t\t\t'data-bmbyPropID': `${bmbyPropID}`,\n\t\t\t\t'data-engineId': `${engineId}`,\n\t\t\t})\n\t\t\t.appendTo(itemParent);\n\t\t\n\t\tif (BmbyMode.active) {\n\t\t\tconst colorStatus = config.resources.bundle.selectionBoxes.colorStatus.find(st => st.status === status.toLowerCase());\n\t\t\tif (colorStatus) {\n\t\t\t\tconst colorString = '#' + _color.setStyle(`#${colorStatus.basic}`,LinearSRGBColorSpace).convertLinearToSRGB().getHexString() + '99';\n\t\t\t\tsearchItem.addStyle('background-color',colorString);\n\t\t\t}\n\t\t}\n\n\t\tconst originContentWrapper = isMobile && new BaseElement()\n\t\t\t.addClass('search__origin-content')\n\t\t\t.appendTo(searchItem.DOMElement);\n\n\t\tif (params.hasOwnProperty('customClass'))\n\t\t\tsearchItem.addClass(params['customClass']);\n\n\t\tlet rentPriceHtml;\n\t\tif (rentPrice > 0) {\n\t\t\trentPriceHtml = `\n
\n ${numberWithCommas(parseInt(rentPrice))}\n
`;\n\t\t} else {\n\t\t\trentPriceHtml = `
`;\n\t\t}\n\n\t\tlet balconyHtml;\n\t\tif (balcony) {\n\t\t\tif (balcony.visibility === 'check-mark') {\n\t\t\t\tif (balconySize > 0) {\n\t\t\t\t\tbalconyHtml = `
`;\n\t\t\t\t} else {\n\t\t\t\t\tbalconyHtml = `
-
`;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tbalconyHtml = `
${numberWithCommas(balconySize)}
`;\n\t\t\t}\n\t\t} else {\n\t\t\tbalconyHtml = '';\n\t\t}\n\n\t\tlet roofBalconyHtml;\n\t\tif (roofBalcony) {\n\t\t\tif (roofBalcony.visibility === 'check-mark') {\n\t\t\t\tif (roofBalconySize > 0) {\n\t\t\t\t\troofBalconyHtml = `
`;\n\t\t\t\t} else {\n\t\t\t\t\troofBalconyHtml = `
-
`;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\troofBalconyHtml = `
${numberWithCommas(roofBalconySize)}
`;\n\t\t\t}\n\t\t} else {\n\t\t\troofBalconyHtml = '';\n\t\t}\n\n\t\tlet coveredBalconyHtml;\n\t\tif (coveredBalcony) {\n\t\t\tif (coveredBalcony.visibility === 'check-mark') {\n\t\t\t\tif (coveredBalconySize > 0) {\n\t\t\t\t\tcoveredBalconyHtml = `
`;\n\t\t\t\t} else {\n\t\t\t\t\tcoveredBalconyHtml = `
-
`;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcoveredBalconyHtml = `
${numberWithCommas(coveredBalconySize)}
`;\n\t\t\t}\n\t\t} else {\n\t\t\tcoveredBalconyHtml = '';\n\t\t}\n\n\t\tlet basementHtml;\n\t\tif (basement) {\n\t\t\tif (basement.visibility === 'check-mark') {\n\t\t\t\tif (basementSize > 0) {\n\t\t\t\t\tbasementHtml = `
`;\n\t\t\t\t} else {\n\t\t\t\t\tbasementHtml = `
-
`;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tbasementHtml = `
${numberWithCommas(basementSize)}
`;\n\t\t\t}\n\t\t} else {\n\t\t\tbasementHtml = '';\n\t\t}\n\n\t\tlet gardenHtml;\n\t\tif (garden) {\n\t\t\tif (garden.visibility === 'check-mark') {\n\t\t\t\tif (gardenSize > 0) {\n\t\t\t\t\tgardenHtml = `
`;\n\t\t\t\t} else {\n\t\t\t\t\tgardenHtml = `
-
`;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tgardenHtml = `
${numberWithCommas(gardenSize)}
`;\n\t\t\t}\n\t\t} else {\n\t\t\tgardenHtml = '';\n\t\t}\n\n\t\tlet price2Html;\n\t\tlet crossPrice = '';\n\n\t\tif (price2 > 0 && isPrice2) {\n\t\t\tcrossPrice = 'search__old-price-search-element';\n\t\t\tprice2Html = `\n
\n ${numberWithCommas(parseInt(price2))}\n
`;\n\t\t} else {\n\t\t\tprice2Html = `
`;\n\t\t}\n\n\t\tlet priceHTML;\n\t\tif (salePrice === 0) {\n\t\t\tpriceHTML = `\n
`;\n\t\t} else {\n\t\t\tpriceHTML = `\n
\n ${numberWithCommas(parseInt(salePrice))}\n
`;\n\t\t}\n\n\t\tconst exposure = (facing.length && isExposure) ? facing.map(item => /^[A-Za-z]*$/.test(item) ? item : facingDictionary()[item].en) : [];\n\t\tconst exposureHTML = (exposure.length) ? `
${exposure.map(item => ` ${changeLangToCurrent(`${item}Short`)}`)}
` : '
';\n\n\t\tlet accessibleHTML = '';\n\t\tlet treatmentRoomHTML = '';\n\t\tlet accessibleField = false;\n\t\tlet treatmentRoomField = false;\n\t\tlet modelNameField = false;\n\t\tlet propTypeField = false;\n\t\tconst positiveHTML = `
`;\n\t\tconst negativeHTML = `
-
`;\n\n\t\tif (getFieldsFromAPI.table().find(state => state.type === 'accessible')) accessibleField = true;\n\t\tif (getFieldsFromAPI.table().find(state => state.type === 'treatmentRoom')) treatmentRoomField = true;\n\t\tif (getFieldsFromAPI.table().find(state => state.type === 'modelName')) modelNameField = true;\n\t\tif (getFieldsFromAPI.table().find(state => state.type === 'propType')) propTypeField = true;\n\n\t\tif (accessibleField) {\n\t\t\tif (!!accessible) {\n\t\t\t\taccessibleHTML = positiveHTML;\n\t\t\t} else {\n\t\t\t\taccessibleHTML = negativeHTML;\n\t\t\t}\n\t\t}\n\n\t\tif (treatmentRoomField) {\n\t\t\tif (!!treatmentRoom && treatmentRoomField) {\n\t\t\t\ttreatmentRoomHTML = positiveHTML;\n\t\t\t} else {\n\t\t\t\ttreatmentRoomHTML = negativeHTML;\n\t\t\t}\n\t\t}\n\n\t\tconst isInFavorite = getObjectFromLocalStorage(engineId);\n\t\tif (isInFavorite) {\n\t\t\tconst {selectedMesh} = findSelectionAndCrmData(isInFavorite.engineId);\n\t\t\tnew Favorite(selectedMesh, 'add');\n\t\t}\n\n\t\tconst toggleClassFav = isInFavorite ? 'icon-favorite_selected' : 'icon-unselected';\n\t\tconst iconFavorite = ``;\n\t\tconst favoriteHTML = status === AVAILABLE_STATUS ? `
${iconFavorite}
` : `
`;\n\n\t\tif (params.hasOwnProperty('template')) {\n\t\t\tconst favTemp = params.template['favorite'] ? favoriteHTML : '';\n\t\t\tconst propNumTemp = params.template['aptNumber'] ? `
${isMobile && params.template['favorite'] ? iconFavorite : ''}${propNum}${propNumLabel}
` : '';\n\t\t\tconst exposureTemp = params.template['exposure'] ? exposureHTML : '';\n\t\t\tconst floorNumTemp = params.template['floorNumber'] ? `
${floorNum}
` : '';\n\n\t\t\tlet roomNumTemp;\n\n\t\t\tif (params.template['roomNumber']) {\n\t\t\t\tif (roomNum === 0) {\n\t\t\t\t\troomNumTemp = `
${changeLangToCurrent('Studio')}
`;\n\t\t\t\t} else {\n\t\t\t\t\troomNumTemp = `
${roomNum}
`;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\troomNumTemp = '';\n\t\t\t}\n\n\t\t\tconst totalSpaceTemp = params.template['totalSpace']\n\t\t\t\t? `
${numberWithCommas(parseInt(totalSpace))}
`\n\t\t\t\t: '';\n\t\t\tconst priceTemp = params.template['price'] ? priceHTML : '';\n\n\t\t\tconst wrapperElement = isMobile ? originContentWrapper.DOMElement : searchItem.DOMElement;\n\t\t\twrapperElement.insertAdjacentHTML('afterbegin', `\n ${favTemp}\n ${propNumTemp}\n ${exposureTemp}\n ${floorNumTemp}\n ${roomNumTemp}\n ${totalSpaceTemp}\n ${priceTemp}\n ${rentPriceHtml}\n ${price2Html}\n `);\n\t\t} else {\n\t\t\tlet roomNumHtml;\n\t\t\tif (showRoomNumber) {\n\t\t\t\tif (roomNumberExceptions) {\n\t\t\t\t\tconst value = roomNumberExceptions[roomNum];\n\t\t\t\t\troomNumHtml = `
${changeLangToCurrent(value)}
`;\n\t\t\t\t} else if (roomNum === 0) {\n\t\t\t\t\troomNumHtml = `
${changeLangToCurrent('Studio')}
`;\n\t\t\t\t} else {\n\t\t\t\t\troomNumHtml = `
${roomNum}
`;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\troomNumHtml = '
';\n\t\t\t}\n\n\t\t\tconst isGroundFloor = settingsData.groundFloor.isActive && (parseInt(settingsData.groundFloor.floor) === parseInt(floorNum));\n\t\t\tconst shortLabel = settingsData.groundFloor.shortLabel;\n\t\t\tlet floorNumHTML = `
${floorNum}
`;\n\t\t\tif (isGroundFloor) {\n\t\t\t\tfloorNumHTML = new BaseElement()\n\t\t\t\t\t.addClass('search__result-item--element', 'language-string')\n\t\t\t\t\t.innerHtml(changeLangToCurrent(shortLabel))\n\t\t\t\t\t.addAttribute('data-dictionary', shortLabel);\n\t\t\t\tif (!isMobile) {\n\t\t\t\t\tfloorNumHTML.addStyle('order', `${getOrder('floorNum')}`);\n\t\t\t\t}\n\t\t\t\tfloorNumHTML = floorNumHTML.DOMElement.outerHTML;\n\t\t\t}\n\n\t\t\tconst modelNameHtml = `
${modelName}
`;\n\t\t\tconst propTypeHtml = `
${changeLangToCurrent(propType)}
`;\n\t\t\tconst totalSpaceHtml = `
${numberWithCommas(totalSpace)}
`;\n\n\t\t\tlet propNumHtml = `
${propNum}${propNumLabel}
`;\n\t\t\tpropNumHtml = `\n
\n ${propNum}\n
`;\n\n\t\t\tconst wrapperElement = isMobile ? originContentWrapper.DOMElement : searchItem.DOMElement;\n\t\t\twrapperElement.insertAdjacentHTML('afterbegin', `\n ${favoriteHTML}\n ${isPropNum ? propNumHtml : ''}\n ${modelNameField ? modelNameHtml : ''}\n ${isExposure ? exposureHTML : ''}\n ${showFloorNumber ? floorNumHTML : ''}\n ${showRoomNumber ? roomNumHtml : ''}\n ${propTypeField ? propTypeHtml : ''}\n ${isTotalSpace ? totalSpaceHtml : ''}\n ${(isSalePrice && displayPrice) ? priceHTML : ''}\n ${(isRentPrice && displayPrice) ? rentPriceHtml : ''}\n ${(isPrice2 && displayPrice) ? price2Html : ''}\n ${accessibleHTML}\n ${treatmentRoomHTML}\n ${balconyHtml}\n ${coveredBalconyHtml}\n ${gardenHtml}\n `);\n\t\t}\n\t\tif (itemParent)\n\t\t\titemParent.appendChild(searchItem.DOMElement);\n\t}\n\tFavorite.intersect();\n\n\tconst emptyBuildingGroups = [...document.querySelectorAll('.search__group-list:empty')];\n\temptyBuildingGroups.forEach(group => {\n\t\tgroup.closest('.search__building-group').remove();\n\t});\n}\n\nfunction getOrder (type) {\n\tif (isMobile)\n\t\treturn undefined;\n\tconst configProp = getFieldsFromAPI.table().find(state => state.type === type);\n\tif (!configProp)\n\t\treturn undefined;\n\treturn configProp.order;\n}\n\nfunction getOrderStyle (type) {\n\tif (isMobile) return '';\n\tconst order = getOrder(type);\n\tif (!order) return '';\n\treturn `style=\"order: ${order};\"`;\n}\n\nfunction createBuildingsGroups (searchList) {\n\tif (Buildings.getBuildingsInfoLength() < 2)\n\t\treturn;\n\n\tBuildings.getBuildingsArray().forEach((building) => {\n\t\tif (Object.keys(building.info).length === 0 || building.apartments.length < 2)\n\t\t\treturn;\n\n\t\tconst state = _collapsedGroups.includes(building.name) ? 'collapsed' : 'expanded';\n\t\tconst group = new BaseElement()\n\t\t\t.addClass('search__building-group')\n\t\t\t.setAttributes({\n\t\t\t\tstate,\n\t\t\t\t'building-name': building.name,\n\t\t\t})\n\t\t\t.appendTo(searchList);\n\t\tconst title = new BaseElement()\n\t\t\t.addClass('search__group-title')\n\t\t\t.appendTo(group.DOMElement);\n\t\tconst buildingNameWrapper = new BaseElement()\n\t\t\t.addClass('building-group__building-wrapper')\n\t\t\t.appendTo(title.DOMElement);\n\n\t\tconst towerName = getTowerName(building);\n\t\tif (towerName.split(' ').length < 2) {\n\t\t\tnew BaseElement('span')\n\t\t\t\t.addClass(`building-group__building-prefix`, 'language-string')\n\t\t\t\t.addAttribute('data-dictionary', 'building')\n\t\t\t\t.innerHtml(changeLangToCurrent('building'))\n\t\t\t\t.appendTo(buildingNameWrapper.DOMElement, 'beforeend');\n\t\t}\n\n\t\tconst buildingName = new BaseElement('span')\n\t\t\t.addClass('building-group__building-name', 'language-string')\n\t\t\t.innerHtml(towerName)\n\t\t\t.appendTo(buildingNameWrapper.DOMElement);\n\t\tbuilding.info.towerName.forEach(name => {\n\t\t\tbuildingName.addAttribute(`data-lang-${name.lang}`, name.value);\n\t\t});\n\n\t\tnew BaseElement('span')\n\t\t\t.addClass('icon-down2', 'building-group__checker')\n\t\t\t.appendTo(title.DOMElement);\n\t\tnew BaseElement('ul')\n\t\t\t.addClass('search__group-list')\n\t\t\t.setAttributes({\n\t\t\t\t'building-name': building.name,\n\t\t\t})\n\t\t\t.appendTo(group.DOMElement);\n\t});\n}\n\n/**\n * Search handlers\n */\n\nexport async function openSearchHandler () {\n\tif (settingsData.activeViewMode === ViewMode.Orbit)\n\t\treturn;\n\n\tconst unitCard = UnitCardClass.findCard()?.html;\n\tif (!settingsData.switchLang && unitCard)\n\t\tUnitCardClass.closeMultipleCards();\n\n\tconst searchModule = createSearchModule();\n\thideTooltip();\n\tsearchGetResults();\n\tif (!isMobile)\n\t\tsearchModule.addAttribute('state', 'opened');\n\tsetParametersDependsOnCanvasArea('building-switcher');\n\n\tif (isWeb && !isNoMenu) {\n\t\tconst mainContainer = document.querySelector('.search__container-main');\n\t\tconst asideContainer = document.querySelector('.aside__container');\n\t\tmainContainer ? mainContainer.style.marginInlineStart = '56px' : null;\n\t\tasideContainer ? asideContainer.style.position = 'fixed' : null;\n\t}\n\n\n\tsetTimeout(() => {\n\t\tsetSearchContainerMaxHeight();\n\t}, 500);\n}\n\nfunction checkBoxHandler({target}) {\n\tconst {searchState} = settingsData;\n\tconst type = target.getAttribute('data-type');\n\tconst isRangeCheckbox = target.getAttribute('data-is-range');\n\tlet checkedValue = target.getAttribute(`data-${type.toLowerCase()}`);\n\tcheckedValue = (!isNumeric(checkedValue))\n\t\t? checkedValue\n\t\t: parseFloat(checkedValue);\n\n\tconst stateItemOfCheckedType = searchState.find(data => data.type === type);\n\tconst indexOfCheckedValueInState = stateItemOfCheckedType.checked.value.indexOf(checkedValue);\n\n\tif ((type === 'accessible' || type === 'treatmentRoom') && target.checked)\n\t\tcheckedValue = 1;\n\n\tif (/*type === 'roomNum' && */typeof checkedValue === 'string' && checkedValue.match(/\\+/g) && !isRangeCheckbox) {\n\t\tconst selectedValue = Number(checkedValue.replace('+', ''));\n\t\tif (target.checked) {\n\t\t\t//More than 6\n\t\t\tcheckedValue = [...new Set(settingsData.allCrmData.filter(apt => apt[type] >= selectedValue).map(apt => apt[type]))];\n\t\t} else {\n\t\t\tcheckedValue = stateItemOfCheckedType.checked.value.filter(num => num < selectedValue);\n\t\t}\n\t}\n\n\tif (isRangeCheckbox) {\n\t\tconst isValueWithPlus = checkedValue.indexOf('+') !== -1;\n\t\tconst minValue = isValueWithPlus\n\t\t\t? parseFormattedNumber(checkedValue.slice(0, -1))\n\t\t\t: parseFormattedNumber(checkedValue.split('-')[0].trim());\n\t\tconst maxValue = !isValueWithPlus && parseFormattedNumber(checkedValue.split('-')[1].trim());\n\t\tif (target.checked) {\n\t\t\tcheckedValue = [...new Set(settingsData.allCrmData\n\t\t\t\t.filter(apt => isValueWithPlus\n\t\t\t\t\t? minValue <= apt[type]\n\t\t\t\t\t: minValue <= apt[type] && apt[type] <= maxValue)\n\t\t\t\t.map(apt => apt[type]))\n\t\t\t];\n\t\t} else {\n\t\t\tcheckedValue = stateItemOfCheckedType.checked.value.filter(item => isValueWithPlus\n\t\t\t\t? item < minValue\n\t\t\t\t: item < minValue || item > maxValue);\n\t\t}\n\t}\n\n\ttarget.checked && indexOfCheckedValueInState === -1\n\t\t? Array.isArray(checkedValue)\n\t\t\t? stateItemOfCheckedType.checked.value.push(...checkedValue)\n\t\t\t: stateItemOfCheckedType.checked.value.push(checkedValue)\n\t\t: Array.isArray(checkedValue)\n\t\t\t? stateItemOfCheckedType.checked.value = checkedValue\n\t\t\t: stateItemOfCheckedType.checked.value.splice(indexOfCheckedValueInState, 1);\n\n\tif (!components.mobileSearch) {\n\t\tsearchGetResults();\n\t\tupdateMultiSearch();\n\t} else {\n\t\tcomponents.mobileSearch.predict();\n\t}\n\n\n\tstateItemOfCheckedType.checked.value.length > 0\n\t\t? target.closest('.search__option').setAttribute('state', 'active')\n\t\t: target.closest('.search__option').setAttribute('state', 'inactive');\n\n\t// if (isMobile) {\n\t// \tFiltersCounter.update();\n\t// }\n}\n\nexport function changeActiveCardWhenBuildingClick (clickedSelectionBox, switchCard) {\n\tconst dataEngineID = clickedSelectionBox.name;\n\tconst searchItem = document.querySelector(`li.search__result-item:not(.similar-item)[data-engineid=${dataEngineID}]`);\n\tconst searchItemActiveCard = document.querySelector('.search__result-item:not(.similar-item).active-card');\n\n\tif (searchItemActiveCard) {\n\t\t!switchCard && searchItemActiveCard.classList.remove('active-card');\n\t\tif (!cardsData.multiplyCards && UnitCardClass.cards.length === 1 || switchCard) {\n\t\t\tsearchItemActiveCard.classList.remove('active');\n\t\t} else if (cardsData.multiplyCards && UnitCardClass.cards.length > 1 || switchCard) {\n\t\t\tsearchItemActiveCard.classList.remove('active');\n\t\t}\n\t}\n\n\tif (!searchItem)\n\t\treturn;\n\n\tsearchItem.classList.add('active');\n\tsearchItem.classList.add('active-card');\n\n\tsearchItem.scrollIntoView({\n\t\tbehavior: 'smooth',\n\t\tblock: 'center',\n\t});\n}\n\nexport async function handleCardSelect (event) {\n\tlet target = event.target.closest('.search__result-item');\n\n\tif (settingsData.bombBlock || userPrevent() || settingsData.activeModeSwitching || !target)\n\t\treturn;\n\n\tsettingsData.activeModeSwitching = true;\n\n\tif (target.classList.contains('search__result-list'))\n\t\treturn;\n\n\tlet dataEngineID = target.getAttribute('data-engineid');\n\tconst targetedBuildingName = dataEngineID.split('_')[0];\n\n\tif ((Buildings.activeBuilding.name !== targetedBuildingName) && (!projectMode.LiteMode.modeIs('picture') && !projectMode.LiteMode.modeIs('empty'))) {\n\t\tif (settingsData.buildingDestroyed)\n\t\t\tawait projectMode.FloorPlan.exitFromMode();\n\t\tuserPrevent(false);\n\t\tawait projectMode.Cylinder.switchBuilding(targetedBuildingName, dataEngineID);\n\t}\n\n\tif (!dataEngineID) {\n\t\ttarget = target.closest('.search__result-item');\n\t\tdataEngineID = target.getAttribute('data-engineid');\n\t}\n\n\tconst isTargetFavorite = event.target.getAttribute('data-favorite') === 'favorite';\n\tif (isTargetFavorite && dataEngineID) {\n\t\thandleFavoriteLogic(event, 'searchClick');\n\t\tsettingsData.activeModeSwitching = false;\n\t\treturn;\n\t}\n\n\tconst unitCard = UnitCardClass.findCard()?.html;\n\tif (cardsData.multiplyCards) {\n\t\tconst cardFromAnotherBuilding = UnitCardClass.cards.some(card => card.html.classList.contains('card-from-another-building'));\n\t\tif (!cardFromAnotherBuilding)\n\t\t\thoverOutPreviousSelection(unitCard);\n\t} else {\n\t\thoverOutPreviousSelection(unitCard);\n\t}\n\n\tconst previousTarget = UIRoot.querySelector('.search__result-item.active');\n\tpreviousTarget && previousTarget.classList.remove('active');\n\ttarget.classList.add('active');\n\n\tmarkSelectedApartments(dataEngineID);\n\tconst {selectedMesh} = findSelectionAndCrmData(dataEngineID);\n\tflatClick(selectedMesh);\n\n\tsettingsData.activeModeSwitching = false;\n}\n\nexport function toggleClassFavoritesInSearch (event, isInFavorite, similarSearch) {\n\tif (event.target)\n\t\tsetActiveClassHandler(event);\n\n\tif (!event) {\n\t\tevent = document.querySelector('.search__result-item.active-card span[data-favorite=favorite]');\n\t} else if (similarSearch) {\n\t\tevent = event;\n\t} else {\n\t\tevent = event.target;\n\t}\n\n\tconst isNotSelected = event.classList.contains('icon-unselected');\n\n\tif (isNotSelected && !isInFavorite) {\n\t\tevent.classList.remove('icon-unselected');\n\t\tevent.classList.add('icon-favorite_selected');\n\t} else {\n\t\tevent.classList.add('icon-unselected');\n\t\tevent.classList.remove('icon-favorite_selected');\n\t}\n}\n\nexport function markSelectedApartments (engineIdActive) {\n\tconst target = document.querySelector('.search__result-item.active');\n\tlet engineId;\n\n if (isMobile) {\n // if (engineIdActive === settingsData.lastClickedFlat.name)\n // return;\n engineId = engineIdActive;\n hoverOutPreviousSelection(null,{name: engineIdActive});\n } else {\n if (!target)\n return;\n\n engineId = (!engineIdActive) ? target.getAttribute('data-engineid') : engineIdActive;\n }\n\n if (!engineId)\n return;\n\n\tconst {selectedMesh} = findSelectionAndCrmData(engineId);\n\tsettingsData.lastClickedFlat = selectedMesh;\n\tselectedMesh.userData.isClicked = true;\n\n\tif (config.features.privateHouseMode) {\n\t\tselectedMesh.userData.isActive = false;\n\t\tselectedMesh.userData.isInSearch = false;\n\t\tselectionBoxesSetStatusColor(selectedMesh, 'unlock');\n\t} else {\n\t\tselectionBoxesSetStatusColor(selectedMesh, 'click');\n\t}\n\n\ttarget && target.scrollIntoView({\n\t\tbehavior: 'smooth',\n\t\tblock: 'center',\n\t});\n\tsettingsData.switchLang = false;\n}\n\nfunction handleSearchSort (event) {\n\tconst searchSort = document.querySelector('.search__sort');\n\tconst currentSortItem = event.target.closest('.search__sort-item');\n\tif (!currentSortItem)\n\t\treturn;\n\tconst sortAttribute = currentSortItem.getAttribute('data-sort-type');\n\tlet {searchResult} = settingsData;\n\tconst searchSortState = getFieldsFromAPI.table();\n\n\tif (currentSortItem.classList.contains('plug') || !sortAttribute)\n\t\treturn;\n\n\tif (!isMobile) {\n\t\tconst arrowsUp = searchSort.querySelectorAll('span[class=icon-up]');\n\t\tarrowsUp.forEach(arrow => {\n\t\t\tconst parent = arrow.parentNode;\n\t\t\tif (parent !== currentSortItem) {\n\t\t\t\tarrow.classList.remove('icon-up');\n\t\t\t\tarrow.classList.add('icon-down');\n\n\t\t\t\tparent.setAttribute('data-sort-state', 'minmax');\n\t\t\t}\n\t\t});\n\t}\n\n\tconst items = searchSort.querySelectorAll('.search__sort-item');\n\titems.forEach(item => {\n\t\titem === currentSortItem\n\t\t\t? !item.classList.contains('active')\n\t\t\t? item.classList.add('active')\n\t\t\t: null\n\t\t\t: item.classList.contains('active')\n\t\t\t? item.classList.remove('active')\n\t\t\t: null;\n\t});\n\n\tconst dataValue = currentSortItem.getAttribute('data-sort-state');\n\tsearchSortState.forEach(item => item.isActive = false);\n\tconst stateItem = searchSortState.find(item => item.type === sortAttribute);\n\n\tstateItem.state =\n\t\tdataValue === 'minmax'\n\t\t\t? 'maxmin'\n\t\t\t: 'minmax';\n\n\tconst arrowClassName =\n\t\tdataValue === 'minmax'\n\t\t\t? `span[class=icon-down]`\n\t\t\t: `span[class=icon-up]`;\n\n\tconst arrow = currentSortItem.querySelector(`${arrowClassName}`);\n\tarrow.classList.toggle('icon-down');\n\tarrow.classList.toggle('icon-up');\n\n\tstateItem.isActive = true;\n\tcurrentSortItem.setAttribute('data-sort-state', `${stateItem.state}`);\n\n\tsearchResult = sortArray(stateItem.state, sortAttribute, searchResult);\n\tsetTimeout(() => markSelectedApartments(), 500);\n\n\tsetResultsInTheHtmlList(searchResult);\n}\n\nexport function sortArray (value, type, sortArray) {\n\tconst copyArray = sortArray.slice();\n\n\tswitch (type) {\n\t\tcase 'facing': {\n\t\t\tconst lang = getCurrentLang();\n\n\t\t\tcopyArray.sort((a, b) => a[type][0]?.localeCompare(b[type][0], `${lang}`, {ignorePunctuation: true}));\n\t\t\tconst checkEmptyFacing = copyArray.some(el => el.facing.length === 0);\n\n\t\t\tif (checkEmptyFacing)\n\t\t\t\tcopyArray.sort((prev, next) => next.facing.length - prev.facing.length);\n\n\t\t\treturn value === 'minmax' ? copyArray : copyArray.reverse();\n\t\t}\n\t\tcase 'favorite': {\n\t\t\treturn sortFavorites(value, copyArray);\n\t\t}\n\t\tcase 'propNum': {\n\t\t\treturn value === 'minmax' ? copyArray.sort((a, b) => parseInt(b[type]) - parseInt(a[type])) : copyArray.sort((a, b) => parseInt(a[type]) - parseInt(b[type]));\n\t\t}\n\t\tcase 'modelName': {\n\t\t\treturn value === 'minmax' ? copyArray.sort((a, b) => b[type].localeCompare(a[type])) : copyArray.sort((a, b) => a[type].localeCompare(b[type]));\n\t\t}\n\t\tcase 'propType': {\n\t\t\treturn value === 'minmax' ? copyArray.sort((a, b) => b[type].localeCompare(a[type])) : copyArray.sort((a, b) => a[type].localeCompare(b[type]));\n\t\t}\n\t\tdefault: {\n\t\t\treturn value === 'minmax'\n\t\t\t\t? copyArray.sort((a, b) => b[type] - a[type])\n\t\t\t\t: copyArray.sort((a, b) => a[type] - b[type]);\n\t\t}\n\t}\n}\n\nfunction sortFavorites (condition, sortArray) {\n\tlet localFavorites;\n\tif (typeof window.localStorage !== 'undefined') {\n\t\tlocalFavorites = JSON.parse(localStorage.getItem('favorites'));\n\t} else {\n\t\tlocalFavorites = JSON.parse(Cookie.getCookie('favorites'));\n\t}\n\n\tif (!localFavorites || localFavorites?.length === 0)\n\t\treturn sortArray;\n\n\treturn sortArray.reduce((newResultsArray, item) => {\n\t\tconst isInFavorites = localFavorites.find(fav => fav.engineId === item.engineId);\n\t\tif (newResultsArray.indexOf(item) === -1) {\n\t\t\tif (condition === 'maxmin') {\n\t\t\t\tisInFavorites ? newResultsArray.unshift(item) : newResultsArray.push(item);\n\t\t\t} else {\n\t\t\t\t!isInFavorites ? newResultsArray.unshift(item) : newResultsArray.push(item);\n\t\t\t}\n\t\t}\n\t\treturn newResultsArray;\n\t}, []);\n}\n\nexport function scrollSearchListToActiveBuildingGroup (buildingName) {\n\tif (Buildings.getBuildingsInfoLength() <= 1)\n\t\treturn;\n\n\tconst buildingGroupElement = document.querySelector(`.search__building-group[building-name=\"${buildingName}\"]`);\n\n\tif (buildingGroupElement)\n\t\tbuildingGroupElement.scrollIntoView({behavior: 'smooth'});\n}\n\nexport function toggleResultsList (action) {\n\tif (isMobile && action !== 'close')\n\t\topenSearchHandler();\n\n\tconst btn = document.querySelector('.cylinder-control-panel__button.result-list');\n\tconst containerBottom = document.querySelector('.search__container-bottom');\n\tif (!btn || !containerBottom)\n\t\treturn;\n\n\t// const span = btn.querySelector('.icon-building') || btn.querySelector('.icon-list1');\n\tconst isOpened = containerBottom.classList.contains('opened');\n\tif (action === 'close' && !isOpened)\n\t\treturn;\n\n\tsetSearchContainerMaxHeight();\n\n\tif (settingsData.isLandscape) {\n\t\tif (isOpened) {\n\t\t\tgsap.to(containerBottom, {\n\t\t\t\ttop: isMobile ? '100%' : 500,\n\t\t\t\tduration: 0.2,\n\t\t\t\tonStart: () => {\n\t\t\t\t\tswitchResultListButtonAppearanceTo('list');\n\t\t\t\t},\n\t\t\t\tonComplete: () => {\n\t\t\t\t\tcontainerBottom.classList.remove('opened');\n\t\t\t\t},\n\t\t\t});\n\t\t} else {\n\t\t\tgsap.to(containerBottom, {\n\t\t\t\ttop: 0,\n\t\t\t\tduration: 0.2,\n\t\t\t\tonStart: () => {\n\t\t\t\t\tswitchResultListButtonAppearanceTo('building');\n\t\t\t\t},\n\t\t\t\tonComplete: () => {\n\t\t\t\t\tcontainerBottom.classList.add('opened');\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t\treturn;\n\t}\n\n\tif (isOpened) {\n\t\tgsap.to(containerBottom, {\n\t\t\tduration: 0.5,\n\t\t\ttop: '100%',\n\t\t\tonStart: () => {\n\t\t\t\tswitchResultListButtonAppearanceTo('list');\n\t\t\t},\n\t\t\tonComplete: () => {\n\t\t\t\tcontainerBottom.classList.remove('opened');\n\t\t\t\tsettingsData.searchListOpened = false;\n\t\t\t},\n\t\t});\n\t} else {\n\t\tgsap.to(containerBottom, {\n\t\t\tduration: 0.5,\n\t\t\ttop: '0',\n\t\t\tonStart: () => {\n\t\t\t\tswitchResultListButtonAppearanceTo('building');\n\n\t\t\t\tconst unitCard = document.querySelector('.unit-card');\n\t\t\t\tif (unitCard) {\n\t\t\t\t\tconst unitCardHeight = unitCard.getBoundingClientRect().height;\n\t\t\t\t\tconst menu = document.querySelector('.additional-menu__container');\n\t\t\t\t\tconst menuHeight = menu.getBoundingClientRect().height;\n\t\t\t\t\tconst searchResultList = containerBottom.querySelector('.search__result-list');\n\t\t\t\t\tsearchResultList.style.paddingBottom = `${unitCardHeight + menuHeight}px`;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonComplete: () => {\n\t\t\t\tcontainerBottom.classList.add('opened');\n\t\t\t\tsettingsData.searchListOpened = true;\n\t\t\t},\n\t\t});\n\t}\n}\n\nconst switchResultListButtonAppearanceTo = (appearance) => {\n\tconst resultListButton = document.querySelector('.cylinder-control-panel__button.result-list');\n\tconst iconElement =\n\t\tresultListButton.querySelector('.icon-building') ||\n\t\tresultListButton.querySelector('.icon-list1');\n\tconst textElement = resultListButton.querySelector('.language-string.text');\n\n\tswitch (appearance) {\n\t\tcase 'list':\n\t\t\ticonElement.classList.remove('icon-building');\n\t\t\ticonElement.classList.add('icon-list1');\n\n\t\t\ttextElement.setAttribute('data-dictionary', 'List');\n\t\t\ttextElement.innerHTML = changeLangToCurrent('List');\n\t\t\tbreak;\n\t\tcase 'building':\n\t\t\ticonElement.classList.remove('icon-list1');\n\t\t\ticonElement.classList.add('icon-building');\n\n\t\t\ttextElement.setAttribute('data-dictionary', 'Model');\n\t\t\ttextElement.innerHTML = changeLangToCurrent('Model');\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tconsole.log('switchResultListButtonAppearanceTo default case');\n\t\t\tbreak;\n\t}\n};\n\nlet keyPressed = false;\nlet range;\nlet stateValue;\nlet prevValue;\n\nfunction handleRangeInputs (event) {\n\tconst target = event.target;\n\tconst type = target.getAttribute('data-type');\n\tconst ranges = document.querySelectorAll(`.search__range-input--${type}`);\n\tconst {searchState} = settingsData;\n\tconst currentState = searchState.find(item => item.type === type);\n\n\tranges.forEach(item => {\n\t\tif (item.classList.contains('search__range-input--one') && target.classList.contains('search__option-input--min')) {\n\t\t\trange = item;\n\t\t\tstateValue = 'min';\n\t\t} else if (item.classList.contains('search__range-input--two') && target.classList.contains('search__option-input--max')) {\n\t\t\trange = item;\n\t\t\tstateValue = 'max';\n\t\t}\n\t});\n\n\tconst rangeTrack = range.parentNode.querySelector('.search__range-slider-track');\n\tconst rangeOne = range.parentNode.querySelector('.search__range-input--one');\n\tconst rangeTwo = range.parentNode.querySelector('.search__range-input--two');\n\n\tswitch (event.type) {\n\t\tcase 'keyup': {\n\t\t\tif (event.key === 'Enter') {\n\t\t\t\tsetInputValue();\n\t\t\t\tdocument.activeElement.blur();\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\t\tcase 'focus': {\n\t\t\tif (isMobile) {\n\t\t\t\tsettingsData.stopWindowResizeEvents = true;\n\t\t\t}\n\t\t\tprevValue = target.value;\n\t\t\ttarget.value = '';\n\t\t\tkeyPressed = false;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'focusout': {\n\t\t\tif (!target.value) {\n\t\t\t\ttarget.value = prevValue.replace(/,/g, '');\n\t\t\t}\n\n\t\t\tif (isMobile) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tsettingsData.stopWindowResizeEvents = false;\n\t\t\t\t}, 200);\n\t\t\t}\n\t\t\t!keyPressed && setInputValue();\n\t\t\tbreak;\n\t\t}\n\t\tcase 'change': {\n\t\t\tinput();\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tfunction input () {\n\t\tconst reg = new RegExp('^[0-9]+$');\n\t\tif (!reg.test(target.value)) {\n\t\t\ttarget.value = prevValue && prevValue.replace(/,/g, '');\n\t\t\tdocument.activeElement.blur();\n\t\t\treturn;\n\t\t}\n\n\t\tif (range === rangeOne && +target.value < +range.getAttribute('min')) {\n\t\t\ttarget.value = +range.getAttribute('min');\n\t\t} else if (range === rangeTwo && +target.value > +range.getAttribute('max')) {\n\t\t\ttarget.value = +range.getAttribute('max');\n\t\t}\n\t}\n\n\tfunction setInputValue () {\n\t\tkeyPressed = true;\n\t\tif (!target.value) {\n\t\t\trange.value = currentState[stateValue];\n\t\t\ttarget.value = numberWithCommas(`${currentState[stateValue]}`, true);\n\t\t}\n\n\t\tif (range === rangeOne && +target.value >= +rangeTwo.value) {\n\t\t\ttarget.value = +rangeTwo.value;\n\t\t} else if (range === rangeTwo && +target.value <= +rangeOne.value) {\n\t\t\ttarget.value = +rangeOne.value;\n\t\t}\n\n\t\trange.value = +target.value;\n\t\tcurrentState[stateValue] = +target.value;\n\t\ttarget.value = numberWithCommas(target.value, true);\n\t\trange.setAttribute('value', target.value);\n\n\t\tif (parseInt(rangeTwo.value) - parseInt(rangeOne.value) <= 0) {\n\t\t\tif (range === rangeOne) {\n\t\t\t\trangeOne.style.zIndex = 2;\n\t\t\t\trangeTwo.style.zIndex = 1;\n\t\t\t} else {\n\t\t\t\trangeOne.style.zIndex = 1;\n\t\t\t\trangeTwo.style.zIndex = 2;\n\t\t\t}\n\t\t}\n\n\t\tfillTrackColor(rangeTrack, rangeOne, rangeTwo);\n\t\tif (!components.mobileSearch) {\n\t\t\tsearchGetResults();\n\t\t\tupdateMultiSearch();\n\t\t} else {\n\t\t\tcomponents.mobileSearch.predict();\n\t\t}\n\t}\n}\n\n/**\n * Close and remove search block\n */\n\nexport async function removeSearchContainer (action, option) {\n\tconst parentContainer = document.querySelector('.search__container-main');\n\tif (!parentContainer)\n\t\treturn;\n\n\tconst activeBuilding = Buildings.getActiveBuilding();\n\tactiveBuilding.apartments.forEach(item => {\n\t\tif (settingsData.buildingDestroyed) {\n\t\t\tif (item.userData.floor !== settingsData.currentFloor && item.userData.isActive)\n\t\t\t\tselectionBoxesSetStatusColor(item, 'unlock');\n\t\t} else {\n\t\t\tif (item.userData.isActive)\n\t\t\t\tselectionBoxesSetStatusColor(item, 'unlock');\n\t\t}\n\t});\n\n\tconst unitCard = UnitCardClass.findCard()?.html;\n\tif (unitCard && option !== 'building-switcher') {\n\t\tconst engineId = unitCard.getAttribute('data-engineid');\n\t\tconst activeApartment = activeBuilding.apartments.find(apt => apt.name === engineId);\n\t\tselectionBoxesSetStatusColor(activeApartment, 'click');\n\t}\n\n\tif (action === 'immediately')\n\t\tparentContainer.remove();\n\n\tif (!isMobile)\n\t\tparentContainer.setAttribute('state', 'closed');\n\n\tsetParametersDependsOnCanvasArea('building-switcher');\n}\n\n/**\n * Animations\n */\n\nexport function updateComponentsOnCanvasResize () {\n if (!threeJsVariables.canvasResize)\n return;\n\tconst rootHeight = TRoot.getBoundingClientRect().height;\n\tconst rootWidth = TRoot.getBoundingClientRect().width;\n\n\tthreeJsVariables.perspectiveCamera.aspect = rootWidth / rootHeight;\n\tthreeJsVariables.perspectiveCamera.updateProjectionMatrix();\n\tthreeJsVariables.labelRenderer?.setSize(rootWidth, rootHeight);\n\tthreeJsVariables.renderer.setSize(rootWidth, rootHeight);\n\tthreeJsVariables.composer.setSize(rootWidth, rootHeight);\n\tif (Vantages.scopes.length === 0)\n\t\tthreeJsVariables.composer.composer.render();\n\n\tprojectMode.LiteMode.resizeContainer();\n\tshowOrHideCylinderFloorNumbers();\n\tprojectMode.FloorPlan?.floorSlider?.resize();\n}\n\nconst addWrapperAndTextToSortItems = () => {\n\tconst searchSortItems = [...document.getElementsByClassName('search__sort-item')];\n\tsearchSortItems.forEach(item => {\n\t\tconst currentSortItem = item.getAttribute('data-sort-type');\n\t\tif (isMobile && (currentSortItem === 'salePrice' || currentSortItem === 'rentPrice' || currentSortItem === 'price2'))\n\t\t\treturn;\n\n\t\tif (!item.querySelector('.search__result-icon-wrapper')) {\n\t\t\tconst itemIconWrapper = document.createElement('div');\n\t\t\titemIconWrapper.classList.add('search__result-icon-wrapper');\n\t\t\titem.appendChild(itemIconWrapper);\n\n\t\t\tconst searchResultsSortItemText = document.createElement('span');\n\t\t\tconst hideTextForList = ['propNum', 'favorite'];\n\t\t\tsearchResultsSortItemText.classList.add('icon-text', 'language-string', 'text', !isMobile && hideTextForList.includes(currentSortItem) ? 'hidden' : null);\n\t\t\tlet closestDataSortType = item.closest('[data-sort-type]').getAttribute('data-sort-type');\n\t\t\tswitch (closestDataSortType) {\n\t\t\t\tcase 'modelName':\n\t\t\t\t\tclosestDataSortType = 'Model';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'roomNum':\n\t\t\t\t\tclosestDataSortType = 'rooms';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'floorNum':\n\t\t\t\t\tclosestDataSortType = 'floor';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'salePrice':\n\t\t\t\t\tclosestDataSortType = 'rentPrice';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'favorite':\n\t\t\t\t\tclosestDataSortType = '';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'propNum':\n\t\t\t\t\tclosestDataSortType = 'aptNumber';\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// if (closestDataSortType === 'favorite') {\n\t\t\t// \tclosestDataSortType = '';\n\t\t\t// }\n\n\t\t\tsearchResultsSortItemText.setAttribute('data-dictionary', closestDataSortType);\n\t\t\tsearchResultsSortItemText.innerHTML = changeLangToCurrent(closestDataSortType);\n\n\t\t\tconst currentItemIconElement = item.querySelector('[data-type=\"icon\"]') || item.querySelector('.search__sort-currency');\n\t\t\tif (currentItemIconElement)\n\t\t\t\titemIconWrapper.appendChild(currentItemIconElement);\n\t\t\titemIconWrapper.appendChild(searchResultsSortItemText);\n\t\t}\n\t});\n};\n\nexport function resetWebFilters() {\n\tconst allCheckboxes = [...document.querySelectorAll('.search__option-input[type=\"checkbox\"]')];\n\tallCheckboxes.forEach(checkbox => {\n\t\tif (checkbox.checked)\n\t\t\tcheckbox.click();\n\t});\n\n\tconst allSwitches = [...document.querySelectorAll('.switch__checkbox')];\n\tallSwitches.forEach(switchElement => {\n\t\tif (switchElement.checked)\n\t\t\tswitchElement.click();\n\t});\n\n\tconst allSelects = [...document.querySelectorAll('.search__option select')];\n\tallSelects.forEach(select => {\n\t\t\tif (select.getAttribute('select-type') === 'min') {\n\t\t\t\tselect.selectedIndex = 0;\n\t\t\t} else if (select.getAttribute('select-type') === 'max') {\n\t\t\t\tselect.selectedIndex = select.options.length - 1;\n\t\t\t}\n\t\tselect.dispatchEvent(new Event('change'));\n\t});\n\n\tconst setInitialValueToRange = (element, value) => {\n\t\telement.value = value;\n\t\tconst event = new KeyboardEvent(\"keyup\", {\n\t\t\tkey: \"Enter\",\n\t\t\tcode: \"Enter\",\n\t\t\tkeyCode: 13,\n\t\t\twhich: 13,\n\t\t\tbubbles: false\n\t\t});\n\n\t\telement.dispatchEvent(event);\n\t};\n\n\tconst allRanges = [...document.querySelectorAll('.filter-pop-up-page .search__wrapper-range'),...document.querySelectorAll('.search__wrapper-range')];\n\tallRanges.forEach(range => {\n\t\tconst rangeElementMin = range.querySelector('.search__range-input--one')\n\t\tconst initialMinValue = rangeElementMin.getAttribute('startminvalue');\n\t\tconst minValueInputElement = range.querySelector('.search__option-input--min');\n\t\tsetInitialValueToRange(minValueInputElement, initialMinValue);\n\t\trangeElementMin.dispatchEvent(new Event('input'))\n\t\tconst rangeElementMax = range.querySelector('.search__range-input--two')\n\t\tconst initialMaxValue = rangeElementMax.getAttribute('startmaxvalue');\n\t\tconst maxValueInputElement = range.querySelector('.search__option-input--max');\n\t\tsetInitialValueToRange(maxValueInputElement, initialMaxValue);\n\t\trangeElementMax.dispatchEvent(new Event('input'))\n\t});\n\n\tconst allMultiBuildingsButtons = [...document.querySelectorAll('.active-multi-building')];\n\tallMultiBuildingsButtons.forEach(item => {\n\t\titem.classList.remove('active-multi-building');\n\t});\n\n\tMultipleSelector.uncheckAll('modelName');\n\tMultipleSelector.uncheckAll('multipleSearch');\n\tupdateMultiSearch();\n\tupdateMultiSearchState();\n\n\tselectedBuildings.clear();\n}\n","'use strict';\n\nimport {\n addObjectToLocalStorage,\n findSelectionAndCrmData, getFieldsFromAPI,\n getObjectFromLocalStorage,\n getTowerName,\n isCompareMode,\n isNumeric,\n moveAroundTheFloors,\n numberWithCommas,\n removeObjectFromLocalStorage,\n userPrevent,\n} from '../../../functions';\nimport {\n sortArray, toggleClassFavoritesInSearch\n} from './search';\nimport { intersectionClickHandler } from '../../threejs/raycast';\nimport { openOptionsCard, setWidthOfCardDependingOnMenu } from '../../cards/optionsCards';\nimport {changeLangToCurrent} from '../../components/langSwitcher/langSwitcher';\nimport { dataArrayOfFlat, facingDictionary } from '../../cards/cardsConfig';\nimport {CardTypes} from \"../../../common\";\nimport {analytics} from \"../../analytics/analytics\";\nimport Swiper from 'swiper';\nimport { Navigation, Pagination } from 'swiper/modules';\nimport {\n Buildings,\n cardsData,\n isMobile,\n projectMode,\n settingsData\n} from '../../../settings';\nimport {addAdditionalButtons, getPropType} from \"../../cards/unitCards/unitCardFunctions\";\nimport {BaseElement} from \"../../interfaces/BaseElement\";\nimport { Vantages } from '../../components/vantage/Vantage';\nimport { Price } from '../../cards/Price';\n\nexport function findSimilarApartments (optionCardContainer = document.querySelector(`.${CardTypes.Options}-card__data`) ) {\n const result = {};\n const totalResultInOneBuilding = 5;\n\n const clickedApt = settingsData.lastClickedFlat.userData.crm_data;\n const price = clickedApt.salePrice;\n const roomNumber = clickedApt.roomNum;\n const exposure = clickedApt.facing;\n\n if (price === 0){\n Object.values(Buildings.buildings).forEach((building) =>{\n if (!building.getInfo())\n return;\n\n let filteredApts = building.info.crm_data.filter(apt =>\n apt.status === 'Available' &&\n apt.roomNum === roomNumber &&\n apt.facing.toString() === exposure.toString() &&\n apt !== clickedApt\n );\n\n filteredApts = sortArray('minmax', 'salePrice', filteredApts);\n\n if (filteredApts.length > totalResultInOneBuilding)\n filteredApts.length = totalResultInOneBuilding;\n\n const towerName = getTowerName(building);\n result[towerName] = filteredApts;\n });\n } else {\n const minPrice = price;\n const maxPrice = price * 1.2;\n\n Object.values(Buildings.buildings).forEach((building) =>{\n if (!building.getInfo())\n return;\n\n let filteredApts = building.info.crm_data.filter(apt =>\n apt.status === 'Available' &&\n (apt.salePrice >= minPrice && apt.salePrice <= maxPrice) &&\n apt !== clickedApt\n );\n\n filteredApts = sortArray('minmax', 'salePrice', filteredApts);\n\n if (filteredApts.length > totalResultInOneBuilding)\n filteredApts.length = totalResultInOneBuilding;\n\n const towerName = getTowerName(building);\n result[towerName] = filteredApts;\n });\n }\n\n if (!checkResult(result) || isCompareMode())\n return;\n\n const croppedResult = makeAmountOfResultsEqual(result, 10);\n\n const similarContainer = new BaseElement()\n .addClass('similar__main__container')\n .appendTo(optionCardContainer);\n createSimilarAptCarousel(croppedResult, similarContainer.DOMElement);\n}\n\nfunction makeAmountOfResultsEqual(obj, limit) {\n // Convert the object into an array of [key, value] pairs\n const entries = Object.entries(obj);\n let totalLength = 0;\n const resultEntries = [];\n\n // Iterate through entries to calculate the total length and populate resultEntries\n for (const [key, array] of entries) {\n if (totalLength + array.length > limit) {\n // If the total length exceeds the limit, we need to start trimming from the end\n let remaining = limit - totalLength;\n\n // Check if we can add a part of the current array to the result\n if (remaining > 0) {\n resultEntries.push([key, array.slice(0, remaining)]);\n totalLength += remaining; // Adjust totalLength to include the partial array\n }\n break; // Stop the loop as we've reached the limit\n } else {\n // Add the array to the result if it doesn't exceed the limit\n resultEntries.push([key, array]);\n totalLength += array.length;\n }\n }\n\n // Convert the resultEntries back into an object\n return Object.fromEntries(resultEntries);\n}\n\nconst createSimilarAptCarousel = (result, optionCardContainer) => {\n if (cardsData.cardMode.isAmenities)\n return;\n\n let showTitle = checkResult(result);\n showTitle && addTitle(optionCardContainer);\n const similarAptBlock = new BaseElement()\n .addClass(`${CardTypes.Similar}-card`, 'swiper')\n .appendTo(optionCardContainer);\n const similarAptBlockWrapper = new BaseElement()\n .addClass(`${CardTypes.Similar}-card__wrapper`, 'swiper-wrapper')\n .appendTo(similarAptBlock.DOMElement);\n\n Object.entries(result).forEach(([buildingName,apartments]) =>{\n apartments.forEach(apt =>{\n createCard(apt, similarAptBlockWrapper.DOMElement, buildingName);\n });\n\n });\n\n if (isMobile) {\n // createElements('div', ['swiper-pagination','similar-pagination'], similarAptBlock.DOMElement);\n new BaseElement()\n .addClass('swiper-pagination','similar-pagination')\n .appendTo(similarAptBlock.DOMElement);\n\n Swiper.use([Pagination]);\n new Swiper(`.${CardTypes.Similar}-card`, {\n direction: \"horizontal\",\n loop: false,\n slidesPerView: 1.05,\n spaceBetween: 5,\n pagination: {\n el: '.similar-pagination',\n type: 'bullets',\n },\n }\n );\n } else {\n const showButtons = checkResult(result);\n showButtons && addSwitchButtons(optionCardContainer, similarAptBlock.DOMElement);\n\n Swiper.use([Navigation]);\n new Swiper(`.${CardTypes.Similar}-card`, {\n direction: \"horizontal\",\n loop: false,\n slidesPerView: 1.3,\n spaceBetween: 20,\n navigation: {\n nextEl: \".swiper-button-next\",\n prevEl: \".swiper-button-prev\",\n },\n }\n );\n }\n}\n\nconst checkResult = (result) => {\n for (const res of Object.values(result)) {\n if (res.length) {\n return true;\n }\n }\n}\n\n/**\n * CARDS CONSTRUCTOR\n */\n\nconst createCard = (crmDataObject, similarAptBlock, buildingName) => {\n const similarAptContainer = new BaseElement()\n .addClass(`${CardTypes.Similar}-card__container`, 'swiper-slide')\n .addAttribute('data-engineid', crmDataObject.engineId)\n .appendTo(similarAptBlock, 'beforeend');\n\n createHeader(crmDataObject, similarAptContainer.DOMElement, buildingName);\n createInfoPoints(crmDataObject, similarAptContainer.DOMElement);\n\n similarAptContainer.event('click', cardHandler);\n addAdditionalButtons({card: similarAptContainer.DOMElement, data: crmDataObject, cardType: CardTypes.Similar});\n}\n\nconst createHeader = (crmDataObject, similarAptContainer, towerName) => {\n const similarAptHeader = new BaseElement()\n .addClass(`${CardTypes.Similar}-card__header`, 'card__header')\n .appendTo(similarAptContainer);\n const similarAptTitleBox = new BaseElement()\n .addClass(`${CardTypes.Similar}-card__title-box`, 'card__title-box')\n .appendTo(similarAptHeader.DOMElement);\n const similarAptSubtitle = new BaseElement()\n .addClass(`${CardTypes.Similar}-card__subtitle-box`, 'card__subtitle-box')\n .appendTo(similarAptTitleBox.DOMElement);\n const similarAptTitle = new BaseElement('h3')\n .addClass(`${CardTypes.Similar}-card__title`, 'card__title')\n .appendTo(similarAptTitleBox.DOMElement);\n new BaseElement('span')\n .addClass(`${CardTypes.Similar}-card__name`, 'card__title-flat-name', 'language-string')\n .innerHtml(changeLangToCurrent(getPropType(crmDataObject.propType)))\n .addAttribute('data-dictionary', `${getPropType(crmDataObject.propType)}`)\n .appendTo(similarAptTitle.DOMElement, 'beforeend');\n new BaseElement('span')\n .addClass(`${CardTypes.Similar}-card__number`, 'card__title-flat-number')\n .innerHtml(crmDataObject.propNum)\n .appendTo(similarAptTitle.DOMElement);\n\n let similarAptTowerName = null;\n if (Buildings.getBuildingsInfoLength() > 1 /*&& !Buildings.isOneFloorBuilding(crmDataObject.buildingEngineId)*/) {\n similarAptTowerName = new BaseElement()\n .addClass(`${CardTypes.Similar}-card__tower-name`, 'card__tower-name')\n .appendTo(similarAptSubtitle.DOMElement);\n if (!b.isOneFloorBuilding(crmDataObject.buildingEngineId))\n new BaseElement()\n .addClass('subtitle-separator')\n .appendTo(similarAptSubtitle.DOMElement);\n }\n const similarAptFloorNum = new BaseElement()\n .addClass(`${CardTypes.Similar}-card__floor-number`, 'options-card__floor-number')\n .appendTo(similarAptSubtitle.DOMElement);\n if (!b.isOneFloorBuilding(crmDataObject.buildingEngineId)) {\n const isGroundFloor = settingsData.groundFloor.isActive && (parseInt(settingsData.groundFloor.floor) === parseInt(crmDataObject.floorNum));\n const floorElement = new BaseElement('span')\n .addClass(`${CardTypes.Similar}-card__floor-number-floor`, 'card__floor_floor', 'language-string')\n .addAttribute('data-dictionary', 'at floor')\n .innerHtml(changeLangToCurrent('at floor') + ' ')\n .appendTo(similarAptFloorNum.DOMElement, 'beforeend');\n if (isGroundFloor) {\n const fullLabel = settingsData.groundFloor.fullLabel;\n floorElement\n .addAttribute('data-dictionary', fullLabel)\n .innerHtml(changeLangToCurrent(fullLabel));\n } else {\n new BaseElement('span')\n .addClass(`${CardTypes.Similar}-card__floor-number_num`, 'card__floor-number_num', isGroundFloor ? 'hidden' : null)\n .innerHtml(crmDataObject.floorNum)\n .appendTo(similarAptFloorNum.DOMElement);\n }\n }\n\n const regExp = /[a-z\\u0590-\\u05fe]/gi;\n const isStringName = regExp.test(towerName);\n\n if (Buildings.getBuildingsInfoLength() > 1 /*&& !Buildings.isOneFloorBuilding(crmDataObject.buildingEngineId)*/) {\n if (!isStringName) {\n let towerNumber = similarAptSubtitle.DOMElement.querySelector(`.${CardTypes.Similar}-card__tower-name_num`);\n let towerTitle = similarAptSubtitle.DOMElement.querySelector(`.${CardTypes.Similar}-card__tower-name_title`);\n\n if (!towerNumber) {\n towerNumber = new BaseElement('span')\n .addClass(`${CardTypes.Similar}-card__tower-name_num`, 'language-string')\n .addAttribute('data-dictionary', 'building')\n .appendTo(similarAptTowerName?.DOMElement, 'beforeend').DOMElement;\n\n towerTitle = new BaseElement('span')\n .addClass(`${CardTypes.Similar}-card__tower-name_title`)\n .appendTo(similarAptTowerName?.DOMElement).DOMElement;\n }\n\n towerTitle.innerHTML = towerName + ' ';\n towerNumber.innerHTML = changeLangToCurrent('building') + ' ';\n } else {\n similarAptTowerName?.innerHtml(towerName);\n }\n }\n\n createPriceBlock(crmDataObject, similarAptHeader.DOMElement);\n}\n\nconst createPriceBlock = (crmDataObject, similarAptTitleBox) => {\n const similarAptPrice = new BaseElement()\n .addClass(`${CardTypes.Similar}-card__price`, 'card__price')\n .appendTo(similarAptTitleBox);\n\n new Price()\n .addBlock(similarAptPrice.DOMElement)\n .setPrice(crmDataObject);\n}\n\nconst createInfoPoints = (crmDataObject, similarAptContainer) => {\n const cardsInfo = dataArrayOfFlat(crmDataObject);\n const dictionary = facingDictionary();\n const infoPointsData = cardsInfo.filter(data => {\n if (getFieldsFromAPI.small().indexOf(data.name) !== -1)\n return data;\n })\n\n const regExp = /([A-Za-z])\\w+/g;\n const measurement = config.localization.area ? config.localization.area : \"m2\";\n const similarAptInfoPoints = new BaseElement()\n .addClass(`${CardTypes.Similar}-card__info-points`, 'card__info-points')\n .appendTo(similarAptContainer);\n\n infoPointsData.forEach(data => {\n if (parseInt(data.data, 10) === 0)\n return;\n\n let value = data.data;\n if (data.name === 'storages') {\n if (Array.isArray(value)) {\n if (value.length === 0)\n return;\n\n const valueCopy = [ ...value ];\n value = 0;\n valueCopy.forEach(item => {\n value += item.size;\n });\n }\n\n if (parseInt(value) === 0)\n return;\n }\n\n const cardContentWrapper = new BaseElement()\n .addClass(`${CardTypes.Similar}-card__info-points-wrapper`, 'card__info-points-block-wrapper')\n .appendTo(similarAptInfoPoints.DOMElement)\n const cardModelName = new BaseElement()\n .addClass(`${CardTypes.Similar}-card__info-points-block_data`, 'card__info-points-block_data')\n .appendTo(cardContentWrapper.DOMElement);\n const cardModelNameText = new BaseElement('span')\n .addClass(\n `${CardTypes.Similar}-card__info-points-block_data_text`,\n 'card__info-points-block_data_text',\n 'language-string')\n .addAttribute('data-dictionary', data.name === 'storages' ? value : data.data)\n .appendTo(cardModelName.DOMElement, 'beforeend');\n\n const contentSubtext = new BaseElement()\n .addClass(`${CardTypes.Similar}-card__info-points-block_subtitle`, 'card__info-points-block_subtitle')\n .appendTo(cardContentWrapper.DOMElement);\n\n if (regExp.test(data.data))\n cardModelNameText.addStyle('direction', 'ltr');\n\n contentSubtext.addInnerHtml(`${changeLangToCurrent(data.name).toLowerCase()}`);\n if (data.name === 'area' || data.name === 'balcony size') {\n const coma = `,`;\n contentSubtext.addInnerHtml(coma);\n\n new BaseElement('span')\n .addClass('language-string', 'card__info-points-block_subtitle-measurement', 'meters')\n .addInnerHtml(changeLangToCurrent(measurement))\n .addAttribute('data-dictionary', measurement)\n .appendTo(contentSubtext.DOMElement, 'beforeend')\n }\n\n if (isNumeric(data.data)) {\n cardModelNameText\n .innerHtml(numberWithCommas(data.data))\n .addClass('translate-number');\n } else {\n cardModelNameText\n .innerHtml(changeLangToCurrent(data.data))\n .addClass('language-string');\n }\n cardModelName.addClass(data.icon);\n\n if (data.name === 'exposure') {\n const dataArray = data.data;\n if (dataArray.length === 0) {\n cardContentWrapper.remove();\n return;\n }\n\n cardModelNameText.remove();\n\n dataArray.forEach(element => {\n for (let key in dictionary) {\n if (element === key) {\n new BaseElement('span')\n .addClass(`${CardTypes.Similar}-card__info-points-block_data_text`, 'card__info-points-block_data_text', 'language-string')\n .addAttribute('data-dictionary', dictionary[key].en + 'Short')\n .innerHtml(changeLangToCurrent(dictionary[key].en + 'Short'))\n .appendTo(cardModelName.DOMElement, 'beforeend');\n }\n }\n });\n }\n\n if (data.name === 'parkings') {\n if (Array.isArray(value)) {\n if (value.length === 0) {\n cardContentWrapper.remove();\n return;\n }\n\n value = value.length;\n }\n\n cardModelNameText.innerHtml(value);\n }\n\n if (data.name === 'storages') {\n cardModelNameText.innerHtml(value);\n }\n });\n}\n\nconst addTitle = (optionCardContainer) => {\n new BaseElement('h4')\n .addClass('similar__text','language-string')\n .innerHtml(changeLangToCurrent('similarApartmentsTitle'))\n .addAttribute('data-dictionary','similarApartmentsTitle')\n .appendTo(optionCardContainer)\n}\n\n/**\n * CREATE SWITCH BLOCK\n */\n\nconst addSwitchButtons = (parent) => {\n // const switcherBlock = createElements('div', [`similar-switcher-block`, 'card__switcher-block'], parent);\n // createElements('button', ['icon-left1', 'swiper-button-prev'], switcherBlock);\n // createElements('button', ['icon-right1', 'swiper-button-next'], switcherBlock);\n const switcherBlock = new BaseElement()\n .addClass(`similar-switcher-block`, 'card__switcher-block')\n .appendTo(parent);\n new BaseElement('button')\n .addClass('icon-left1', 'swiper-button-prev')\n .appendTo(switcherBlock.DOMElement);\n new BaseElement('button')\n .addClass('icon-right1', 'swiper-button-next')\n .appendTo(switcherBlock.DOMElement);\n}\n/**\n * CLICK HANDLER\n */\nconst cardHandler = async (e) => {\n if (userPrevent())\n return;\n\n e.stopPropagation();\n\n const isTargetLabel = e.target.classList.contains(`${CardTypes.Similar}-card__favorite-label`);\n const isTargetCheckbox = e.target.classList.contains(`${CardTypes.Similar}-card__favorite-checkbox`);\n if (isTargetLabel || isTargetCheckbox)\n return;\n\n // let element = e.target.getAttribute('data-engineid');\n let element = e.target.closest(`.${CardTypes.Similar}-card__container`);\n element = element.getAttribute('data-engineid');\n\n Vantages.isActive() && await Vantages.close();\n\n const {selectedMesh} = findSelectionAndCrmData(element);\n \n if (projectMode.LiteMode.isActive() && (projectMode.LiteMode.modeIs('picture') || projectMode.LiteMode.modeIs('empty'))) {\n await intersectionClickHandler(selectedMesh);\n openOptionsCard( {\n object: selectedMesh.userData.crm_data,\n settings: config,\n params: {disableAnimation: true},\n isSimilarApartment: true\n });\n !isMobile && setWidthOfCardDependingOnMenu();\n return;\n }\n\n const buildingInfo = Buildings.getBuilding(element.split('_')[0]);\n const activeBuilding = Buildings.getActiveBuilding();\n if (buildingInfo.name === activeBuilding.name){\n if (settingsData.buildingDestroyed) {\n // settingsData.lastClickedFlat = selectedMesh;\n await moveAroundTheFloors(element)\n }\n await openSimilarCard(selectedMesh);\n } else {\n if (settingsData.buildingDestroyed){\n await projectMode.FloorPlan.exitFromMode();\n await projectMode.Cylinder.switchBuilding(buildingInfo.name);\n } else {\n await projectMode.Cylinder.switchBuilding(buildingInfo.name);\n }\n await openSimilarCard(selectedMesh);\n }\n settingsData.lastClickedFlat = selectedMesh;\n};\n\nasync function openSimilarCard(selectedMesh) {\n await intersectionClickHandler(selectedMesh);\n setTimeout(() => {\n openOptionsCard( {\n object: selectedMesh.userData.crm_data,\n settings: config,\n params: {disableAnimation: true},\n isSimilarApartment: true\n });\n }, 100);\n !isMobile && setWidthOfCardDependingOnMenu();\n}\n\n/**\n * ADD/REMOVE FAVORITES\n */\n\nexport const similarFavoriteHandle = (e) => {\n let card, dataEngineID;\n let label;\n\n if (e.target.tagName === 'LORD-ICON'){\n label = e.target.parentElement;\n } else {\n label = e.target;\n }\n\n label.classList.toggle('icon-favorite_selected');\n label.classList.toggle('icon--lord-unselected');\n if (isMobile)\n label.classList.toggle('icon-unselected');\n\n card = e.target.closest(`.${CardTypes.Similar}-card__container`);\n dataEngineID = card.getAttribute('data-engineid');\n\n const {crmDataOfFlat} = findSelectionAndCrmData(dataEngineID);\n const storageData = getObjectFromLocalStorage(crmDataOfFlat.engineId);\n\n storageData ? removeObjectFromLocalStorage(crmDataOfFlat) : addObjectToLocalStorage(crmDataOfFlat);\n const target = findTargetOfSearch(dataEngineID);\n\n if (target)\n toggleClassFavoritesInSearch(target, storageData, true);\n\n analytics('favorites', {storageData, crmDataOfFlat});\n}\n\nconst findTargetOfSearch = (dataEngineID) => {\n const searchList = document.querySelectorAll('.search__result-item');\n let targetLi, targetSpan;\n searchList.forEach(elem => {\n if (elem.getAttribute('data-engineid') === dataEngineID) {\n targetLi = elem;\n }\n });\n\n targetSpan = targetLi?.querySelector('span[data-favorite=favorite]');\n\n return targetSpan;\n}\n\nexport const recreateBlockWhenLangSwitch = () => {\n const container = document.querySelector('.similar__main__container');\n if (container) {\n container.remove();\n findSimilarApartments();\n }\n}\n","'use strict';\n\nimport { getUrlParam } from '../../functions';\n\nexport class BmbyMode {\n static active = getUrlParam('mode') === 'bmby';\n}\n","'use strict';\n\nimport { Cloudflare } from '../api/Cloudflare';\nimport {\n\tColor,\n\tFloatType,\n\tGroup,\n\tLinearFilter,\n\tLinearSRGBColorSpace,\n\tLoadingManager,\n\tMesh,\n\tMeshBasicMaterial,\n\tNearestFilter,\n\tPlaneGeometry,\n\tRGBAFormat,\n\tShaderMaterial,\n\tTextureLoader,\n\tVector2,\n\tWebGLRenderTarget,\n} from 'three';\nimport { Buildings, isDesktop, isMobile, projectMode, resourcesFolder, threeJsVariables } from '../../settings';\nimport vertex from '../threejs/Shaders/Rotor/vertex.glsl';\nimport fragment from '../threejs/Shaders/Rotor/fragment.glsl';\nimport { getCanvasWidthDiff } from '../../app';\nimport { CSS2DObject } from '../../libs/CSS2DRenderer';\nimport { getBuildingLabel, labelContainerClickHandler } from '../components/building-switch/buildingLabels';\n\nconst _color = new Color();\nconst _vec2 = new Vector2();\nconst _tl = new TextureLoader();\n\nconst DEFAULT_PARAMS = {\n\timages: [],\n\tstartImage: 0,\n\tdragTolerance: 10,\n\thighResolutionTimeout: 800,\n\tinvert: false\n};\n\nconst LOW_RESOLUTION_SETTINGS = {\n\twidth: isDesktop ? 1024 : isMobile ? 512 : 512\n};\n\nexport class Rotor {\n\t#dragOrigin;\n\t#lazyLoading = null;\n\t#lazyProgress = 0;\n\n\tconstructor (scope,loader) {\n\t\tthis.liteMode = scope;\n\t\tthis.resources = `${this.liteMode.resourcesUrl}rotor`;\n\t\tthis.enabled = true;\n\t\tthis.highResolutuion = {\n\t\t\tweb: `${config.cdnRepository}/resize/image/width=4000/${config.projectFolder}/${resourcesFolder}/litemod/rotor`,\n\t\t\tmobile: `${config.cdnRepository}/resize/image/width=2000/${config.projectFolder}/${resourcesFolder}/litemod/rotor`,\n\t\t\tdesktop: `${config.cdnRepository}/resize/image/width=4000/$${config.projectFolder}/${resourcesFolder}/litemod/rotor`\n\t\t};\n\n\t\tthis.config = null;\n\t\tthis.slides = null;\n\t\tthis.mapping = [];\n\t\tthis.labels = {};\n\t\tthis.activeLabel = null;\n\t\tthis.currentIndex = 0;\n\t\tthis.selectedBuilding = null;\n\t\tthis.timeout = null;\n\t\tthis.pressed = false;\n\t\tthis.move = false;\n\t\tthis.coords = {\n\t\t\tdown: new Vector2(),\n\t\t\tup: new Vector2(),\n\t\t\tpoint: new Vector2()\n\t\t};\n\t\tthis.size = {\n\t\t\twidth: 0,\n\t\t\theight: 0\n\t\t};\n\t\tthis.pixel = {\n\t\t\tx: 0,\n\t\t\ty: 0\n\t\t};\n\n\t\tthis.selectionMaterial = new ShaderMaterial({\n\t\t\tvertexShader: vertex,\n\t\t\tfragmentShader: fragment,\n\t\t\tuniforms: {\n\t\t\t\thighlightsMap: {value: null},\n\t\t\t\tvisible: {value: false},\n\t\t\t\tcolor: {value: new Color()}\n\t\t\t},\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: true\n\t\t});\n\t\tthis.selections = new Mesh(new PlaneGeometry(2,2,1,1),this.selectionMaterial);\n\t\tthis.selections.position.set(0,0,-0.2);\n\t\tthis.selections.name = 'selections layer';\n\t\tthis.liteMode.overlay.add(this.selections);\n\n\t\tthis.colorBuffer = new Float32Array(4);\n\t\tthis.selectionIntersect = new Mesh(new PlaneGeometry(2,2,1,1),new MeshBasicMaterial());\n\t\tthis.selectionsRT = new WebGLRenderTarget(1,1,{\n\t\t\tminFilter: LinearFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\tformat: RGBAFormat,\n\t\t\ttype: FloatType\n\t\t});\n\t\tthis.liteMode.overlay.add(this.selectionIntersect);\n\t\tthis.mainLoader = loader;\n\t\tthis.swap = {\n\t\t\thighResolutionSlide: null,\n\t\t\tlowResolutionSlide: null\n\t\t};\n\t\t\n\t\t// const fileLoader = loader.fileLoader;\n\t\t// const textureLoader = loader.textureLoader;\n\n\n\t\t// const highTextureManager = new LoadingManager(() => {\n\t\t// \tconst loadedAllSlides = this.#lazyLoading.every(slide => slide.loaded);\n\t\t// \tif (loadedAllSlides) {\n\t\t// \t\tthis.#lazyProgress = 100;\n\t\t// \t\tthis.#lazyLoading = null;\n\t\t// \t}\n\t\t// });\n\t\t// const highTextureLoader = new TextureLoader(highTextureManager);\n\n\t\tthreeJsVariables.renderer.domElement.addEventListener('pointerdown',this.#pointerDown.bind(this));\n\t\tthreeJsVariables.renderer.domElement.addEventListener('pointerup',this.#pointerUp.bind(this));\n\t\tthreeJsVariables.renderer.domElement.addEventListener('pointermove',this.#pointerMove.bind(this));\n\t\tthreeJsVariables.renderer.domElement.addEventListener('touchstart',this.#touchStart.bind(this));\n\t\tthreeJsVariables.renderer.domElement.addEventListener('touchmove',this.#touchMove.bind(this));\n\t\tthreeJsVariables.renderer.domElement.addEventListener('touchend',this.#touchEnd.bind(this));\n\n\t\t// loader.addCallback = () => this.start();\n\n\t\t// fileLoader.load(`${this.resources}/rotor.json?v=${Cloudflare.version}`,(cfg) => {\n\t\t// \tthis.config = Object.assign({},DEFAULT_PARAMS,JSON.parse(cfg));\n\t\t//\n\t\t// \tthis.currentIndex = this.config.startImage;\n\t\t// \tconst startSlide = this.config.images[this.config.startImage];\n\t\t//\n\t\t// \tthis.slides = new Array(this.config.images.length);\n\t\t// \tthis.#lazyLoading = new Array(this.config.images.length);\n\t\t// \tthis.#parseMapping();\n\t\t//\n\t\t// \tthis.slides[this.config.startImage] = this.#loadSlide(startSlide,'high',textureLoader,(texture) => {\n\t\t// \t\ttexture.colorSpace = LinearSRGBColorSpace;\n\t\t// \t\tthis.size.width = texture.image.width;\n\t\t// \t\tthis.size.height = texture.image.height;\n\t\t// \t\tthis.liteMode.imageWidth = this.size.width;\n\t\t// \t\tthis.liteMode.imageHeight = this.size.height;\n\t\t// \t\tthis.liteMode.updateAspect();\n\t\t// \t\tthis.liteMode.resizeContainer();\n\t\t// \t});\n\t\t//\n\t\t// \tthis.config.images.forEach((slide,index) => {\n\t\t// \t\tif (index !== this.config.startImage) {\n\t\t// \t\t\tthis.slides[index] = this.#loadSlide(slide,'low',textureLoader,(texture) => {\n\t\t// \t\t\t\ttexture.colorSpace = LinearSRGBColorSpace;\n\t\t// \t\t\t});\n\t\t//\n\t\t// \t\t\tthis.#lazyLoading[index] = {\n\t\t// \t\t\t\tloaded: false,\n\t\t// \t\t\t\tpending: false,\n\t\t// \t\t\t\tcallback: () => {\n\t\t// \t\t\t\t\tif (!this.#lazyLoading[index].pending) {\n\t\t// \t\t\t\t\t\tthis.#lazyLoading[index].pending = true;\n\t\t// \t\t\t\t\t\tconst highResolutionSlide = this.#loadSlide(slide,'high',highTextureLoader,(texture) => {\n\t\t// \t\t\t\t\t\t\ttexture.colorSpace = LinearSRGBColorSpace;\n\t\t// \t\t\t\t\t\t\tlet oldSlide = this.slides[index];\n\t\t// \t\t\t\t\t\t\tthis.#disposeSlide(oldSlide);\n\t\t// \t\t\t\t\t\t\toldSlide = null;\n\t\t// \t\t\t\t\t\t\tthis.slides[index] = highResolutionSlide;\n\t\t// \t\t\t\t\t\t\tthis.#lazyLoading[index].loaded = true;\n\t\t// \t\t\t\t\t\t\tif (index === this.currentIndex) {\n\t\t// \t\t\t\t\t\t\t\tthis.render();\n\t\t// \t\t\t\t\t\t\t}\n\t\t// \t\t\t\t\t\t});\n\t\t// \t\t\t\t\t}\n\t\t// \t\t\t\t}\n\t\t// \t\t\t}\n\t\t// \t\t} else {\n\t\t// \t\t\tthis.#lazyLoading[index] = {loaded: true, callback: null, pending: true};\n\t\t// \t\t}\n\t\t// \t});\n\t\t// });\n\t}\n\n\t#hoverIn(color) {\n\t\tthis.selectedBuilding = this.#findSelected(color);\n\t\tif (this.selectedBuilding) {\n\t\t\tthis.selectionMaterial.uniforms.color.value.copy(color);\n\t\t\tthis.selectionMaterial.uniforms.visible.value = true;\n\t\t\tthreeJsVariables.renderer.domElement.style.cursor = 'pointer';\n\t\t\tif (this.selectedBuilding.buildingEngineId !== this.activeLabel?.userData.buildingEngineId) {\n\t\t\t\tthis.#labelHoverToggle(false,this.activeLabel);\n\t\t\t}\n\t\t\tthis.activeLabel = this.labels[this.selectedBuilding.buildingEngineId];\n\t\t\tthis.#labelHoverToggle(true,this.activeLabel);\n\t\t}\n\t}\n\n\t#labelHoverToggle(state,label) {\n\t\tif (label) {\n\t\t\tif (state) {\n\t\t\t\tlabel.element.querySelector('.building-labels_wrapper').classList.add('building__hovered');\n\t\t\t} else {\n\t\t\t\tlabel.element.querySelector('.building-labels_wrapper').classList.remove('building__hovered');\n\t\t\t}\n\t\t}\n\t}\n\n\t#findSelected(color) {\n\t\tconst distances = this.mapping.map(data => this.#calculateDistance(data.color,color));\n\t\tconst min = Math.min(...distances);\n\t\tif (min < 0.05) {\n\t\t\tconst index = distances.indexOf(min);\n\t\t\treturn this.mapping[index];\n\t\t}\n\t\treturn null;\n\t}\n\n\t#calculateDistance(c1,c2) {\n\t\treturn Math.sqrt((c1.r - c2.r) ** 2 + (c1.g - c2.g) ** 2 + (c1.b - c2.b) ** 2);\n\t}\n\n\t#hoverOut() {\n\t\tthis.selectionMaterial.uniforms.visible.value = false;\n\t\tthis.selectedBuilding = null;\n\t\tthreeJsVariables.renderer.domElement.style.cursor = '';\n\t\tthis.#labelHoverToggle(false,this.activeLabel);\n\t\tthis.activeLabel = null;\n\t}\n\n\t#parseMapping() {\n\t\tthis.config.mapping.forEach(mapping => {\n\t\t\tconst data = JSON.parse(JSON.stringify(mapping));\n\t\t\tdata.color = new Color().fromArray(data.color);\n\t\t\tthis.mapping.push(data);\n\t\t});\n\t}\n\n\t#loadSlide(slide,resolution,loader,callback) {\n\t\tlet url;\n\t\tif (resolution === 'high') {\n\t\t\turl = isDesktop ? this.highResolutuion.desktop : isMobile ? this.highResolutuion.mobile : this.highResolutuion.web;\n\t\t} else {\n\t\t\turl = Cloudflare.resize(this.resources,LOW_RESOLUTION_SETTINGS,false,false);\n\t\t}\n\n\t\tconst loadedSlide = {};\n\n\t\tObject.entries(slide).forEach(([key,value]) => {\n\t\t\tloadedSlide[key] = loader.load(`${url}/${value}?v=${Cloudflare.version}`,(texture) => {\n\t\t\t\tthreeJsVariables.renderer.initTexture(texture);\n\t\t\t\ttexture.colorSpace = LinearSRGBColorSpace;\n\t\t\t\tif (callback) {\n\t\t\t\t\tcallback(key,texture);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn loadedSlide;\n\t}\n\n\t#disposeSlide(slide) {\n\t\tObject.values(slide).forEach(texture => texture.dispose());\n\t}\n\n\tenable(state) {\n\t\tthis.enabled = state;\n\t\tthis.selections.visible = state;\n\t\tthis.selectionIntersect.visible = state;\n\t\tthis.#hoverOut();\n\t}\n\n\t#calculatePointer(x,y) {\n\t\tconst canvasSize = threeJsVariables.renderer.getSize(_vec2);\n\t\tconst canvasDiff = getCanvasWidthDiff();\n\t\tthis.coords.point.x = ((x - canvasDiff.x) / canvasSize.x) * 2 - 1;\n\t\tthis.coords.point.y = -(y / canvasSize.y) * 2 + 1;\n\t}\n\n\t#pointerDown(e) {\n\t\tif (!this.enabled || e.pointerType === 'touch')\n\t\t\treturn;\n\n\t\tif (e.button === 0) {\n\t\t\tthis.#dragOrigin = e.pageX;\n\t\t\tthis.coords.down.set(e.pageX,e.pageY);\n\t\t}\n\n\t\tthis.pressed = true;\n\t}\n\n\t#pointerUp(e) {\n\t\tif (!this.enabled || e.pointerType === 'touch')\n\t\t\treturn;\n\n\t\tthis.#dragOrigin = null;\n\n\t\tif (e.button === 0) {\n\t\t\tthis.coords.up.set(e.pageX,e.pageY);\n\n\t\t\tif (this.coords.down.equals(this.coords.up)) {\n\t\t\t\tthis.#click();\n\t\t\t}\n\t\t}\n\n\t\tthis.pressed = false;\n\n\t\t// if (this.#lazyProgress !== 100) {\n\t\t// \tthis.#loadSiblingSlides(this.currentIndex);\n\t\t// }\n\t}\n\n\t#pointerMove(e) {\n\t\tif (!this.enabled || e.pointerType === 'touch')\n\t\t\treturn;\n\n\t\tif (this.#dragOrigin && Math.abs(this.#dragOrigin - e.pageX) > this.config.dragTolerance) {\n\t\t\tthis.#dragOrigin > e.pageX ? this.prev() : this.next();\n\t\t\tthis.#dragOrigin = e.pageX;\n\t\t} else if (!this.pressed) {\n\t\t\tthis.pixel.x = threeJsVariables.renderer.domElement.width / 2 + threeJsVariables.mouse.x * threeJsVariables.renderer.domElement.width / 2;\n\t\t\tthis.pixel.y = threeJsVariables.renderer.domElement.height / 2 + threeJsVariables.mouse.y * threeJsVariables.renderer.domElement.height / 2;\n\t\t\tthis.#intersectSelection();\n\t\t}\n\t}\n\n\tresize() {\n\t\tthis.selectionsRT.setSize(threeJsVariables.renderer.domElement.width,threeJsVariables.renderer.domElement.height);\n\t}\n\n\t#intersectSelection() {\n\t\tthreeJsVariables.renderer.setRenderTarget(this.selectionsRT);\n\t\tthreeJsVariables.renderer.render(this.selectionIntersect,this.liteMode.camera);\n\t\tthreeJsVariables.renderer.setRenderTarget(null);\n\t\tthreeJsVariables.renderer.readRenderTargetPixels(this.selectionsRT,this.pixel.x,this.pixel.y,1,1,this.colorBuffer);\n\n\t\tif (this.colorBuffer[0] !== 0 || this.colorBuffer[1] !== 0 || this.colorBuffer[2] !== 0) {\n\t\t\t_color.set(this.colorBuffer[0],this.colorBuffer[1],this.colorBuffer[2]);\n\t\t\tthis.#hoverIn(_color);\n\t\t} else {\n\t\t\tthis.#hoverOut();\n\t\t}\n\t}\n\n\t#touchStart(e) {\n\t\tif (!this.enabled)\n\t\t\treturn;\n\n\t\tif (e.touches.length === 1) {\n\t\t\tthis.#dragOrigin = e.touches[0].pageX;\n\t\t\tthis.coords.down.set(e.touches[0].pageX,e.touches[0].pageY);\n\t\t\tthis.pressed = true;\n\t\t}\n\t}\n\n\t#touchEnd(e) {\n\t\tif (!this.enabled)\n\t\t\treturn;\n\n\t\tthis.#dragOrigin = null;\n\t\tthis.pressed = false;\n\t\tthis.move = false;\n\n\t\tif (e.changedTouches.length === 1) {\n\t\t\tthis.coords.up.set(e.changedTouches[0].pageX,e.changedTouches[0].pageY);\n\t\t\tif (this.coords.down.equals(this.coords.up)) {\n\t\t\t\tthis.#calculatePointer(this.coords.down.x,this.coords.down.y);\n\t\t\t\tthis.pixel.x = threeJsVariables.renderer.domElement.width / 2 + this.coords.point.x * threeJsVariables.renderer.domElement.width / 2;\n\t\t\t\tthis.pixel.y = threeJsVariables.renderer.domElement.height / 2 + this.coords.point.y * threeJsVariables.renderer.domElement.height / 2;\n\t\t\t\tthis.#intersectSelection();\n\t\t\t\tthis.#click();\n\t\t\t} else {\n\t\t\t\tthis.loadHighResolutionSlide();\n\t\t\t}\n\t\t}\n\n\t\t\n\t\t// if (this.#lazyProgress !== 100) {\n\t\t// \tthis.#loadSiblingSlides(this.currentIndex);\n\t\t// }\n\t}\n\n\t#touchMove(e) {\n\t\tif (!this.enabled)\n\t\t\treturn;\n\n\t\tif (e.touches.length === 1) {\n\t\t\tif (this.#dragOrigin && Math.abs(this.#dragOrigin - e.touches[0].pageX) > this.config.dragTolerance) {\n\t\t\t\tif (!this.move) {\n\t\t\t\t\tthis.disposeHighResolutionSlide();\n\t\t\t\t}\n\t\t\t\tthis.move = true;\n\t\t\t\tthis.#dragOrigin > e.touches[0].pageX ? this.prev() : this.next();\n\t\t\t\tthis.#dragOrigin = e.touches[0].pageX;\n\t\t\t}\n\t\t}\n\t}\n\n\t#click() {\n\t\tif (this.selectedBuilding) {\n\t\t\tconst building = Buildings.getBuilding(this.selectedBuilding.buildingEngineId);\n\t\t\tprojectMode.Cylinder.enter(building);\n\t\t}\n\t}\n\n\trunLazyLoading() {\n\t\tif (!this.enabled)\n\t\t\treturn;\n\n\t\tconst forward = (index) => {\n\t\t\tif (index < this.slides.length) {\n\t\t\t\tthis.#loadSiblingSlides(index + 2);\n\t\t\t\tsetTimeout(() => forward(index + 2),0);\n\t\t\t}\n\t\t}\n\t\tconst backward = (index) => {\n\t\t\tif (index > 0) {\n\t\t\t\tthis.#loadSiblingSlides(index - 2);\n\t\t\t\tsetTimeout(() => backward(index - 2),0);\n\t\t\t}\n\t\t}\n\n\t\tforward(this.currentIndex);\n\t\tbackward(this.currentIndex);\n\t}\n\n\t#loadSiblingSlides(index) {\n\t\tif (!this.#lazyLoading)\n\t\t\treturn;\n\n\t\tconst center = this.#lazyLoading[index];\n\t\tconst left = this.#lazyLoading[index - 1];\n\t\tconst right = this.#lazyLoading[index + 1];\n\n\t\tif (center && !center.loaded && !center.pending) {\n\t\t\tcenter.callback();\n\t\t}\n\n\t\tif (left && !left.loaded && !left.pending) {\n\t\t\tleft.callback();\n\t\t}\n\n\t\tif (right && !right.loaded && !right.pending) {\n\t\t\tright.callback();\n\t\t}\n\t}\n\n\trender() {\n\t\tthis.currentIndex = (this.slides.length + this.currentIndex) % this.slides.length;\n\n\t\tconst slide = this.slides[this.currentIndex];\n\t\tif (slide) {\n\t\t\tthis.liteMode.material.uniforms.generalTexture.value = slide.general;\n\t\t\tthis.selectionMaterial.uniforms.highlightsMap.value = slide.selections;\n\t\t\t// this.selectionMaterial.uniforms.highlightsMap.value = this.selectionsRT.texture;\n\n\t\t\tif (slide.selections) {\n\t\t\t\tthis.selectionIntersect.material.map = slide.selections;\n\t\t\t\tthis.selectionIntersect.material.color.set(1,1,1);\n\t\t\t} else {\n\t\t\t\tthis.selectionIntersect.material.map = null;\n\t\t\t\tthis.selectionIntersect.material.color.set(0,0,0);\n\t\t\t}\n\t\t}\n\t\tthis.updateLabels();\n\t}\n\n\tnext() {\n\t\tthis.currentIndex = this.config.invert ? this.currentIndex - 1 : this.currentIndex + 1;\n\t\tthis.render();\n\t}\n\n\tprev() {\n\t\tthis.currentIndex = this.config.invert ? this.currentIndex + 1 : this.currentIndex - 1;\n\t\tthis.render();\n\t}\n\n\tinitLabels() {\n\t\tconst buildings = Buildings.getBuildingsArray();\n\t\tconst colors = config.threejs.label.colors || {};\n\t\tconst hideClickHere = config.threejs.label.hideClickHere;\n\t\tconst scopeGroup = this.liteMode.group;\n\t\tconst labelGroup = new Group();\n\t\tlabelGroup.name = 'Labels';\n\t\tscopeGroup.add(labelGroup);\n\t\tconst zoomRule = config.threejs.label.size || 0.6;\n\n\t\tbuildings.forEach(building => {\n\n\t\t\tif (!Object.keys(building.info).length) return;\n\n\t\t\tconst labelTowerNumber = building.info.labelName;\n\t\t\tconst labelContainer = document.createElement('div');\n\t\t\tlabelContainer.className = 'building-labels';\n\t\t\tlabelContainer.setAttribute('data-attribute', labelTowerNumber);\n\t\t\tconst buildingColor = building.info.color;\n\t\t\tconst labelBGColor = Boolean(buildingColor)\n\t\t\t\t? buildingColor\n\t\t\t\t: undefined;\n\n\t\t\tif (building.info.buildingIcon.length) {\n\t\t\t\tlabelContainer.innerHTML = `\n
\n
${getBuildingLabel(labelBGColor)}
\n
\n
\n `;\n\n\t\t\t} else {\n\n\t\t\t\tlabelContainer.innerHTML = `\n
\n
${getBuildingLabel(labelBGColor)}
\n ${labelTowerNumber}\n
\n `;\n\t\t\t}\n\n\t\t\tif (colors.text) {\n\t\t\t\tlabelContainer.querySelector('.building-labels_wrapper').style = `color: ${colors.text}`;\n\t\t\t}\n\n\t\t\tlabelContainer.classList.add('active');\n\t\t\tconst label = new CSS2DObject(labelContainer);\n\t\t\tlabel.name = `labelTower-${building.info.labelName}`;\n\t\t\tlabel.userData.buildingEngineId = building.name;\n\t\t\tlabelContainer.addEventListener('click', labelContainerClickHandler);\n\n\t\t\tif (config.features.liteMode.settings.buildingLabelDiff) {\n\t\t\t\tlabel.userData.zoom = 1 - config.features.liteMode.settings.buildingLabelDiff;\n\t\t\t} else {\n\t\t\t\tlabel.userData.zoom = zoomRule;\n\t\t\t}\n\n\t\t\tlabelGroup.add(label);\n\t\t\tthis.labels[building.name] = label;\n\t\t});\n\t\tthis.updateLabels();\n\t}\n\n\tupdateLabels() {\n\t\tconst data = this.config.labels[this.currentIndex];\n\t\tif (!this.enabled) {\n\t\t\tObject.entries(this.labels).forEach(([name,label]) => {\n\t\t\t\tconst labelPosition = data[name];\n\t\t\t\tlabel.element.classList.add('hidden');\n\t\t\t\tlabel.position.set(labelPosition[0],labelPosition[1],0)\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tObject.entries(this.labels).forEach(([name,label]) => {\n\t\t\tconst labelPosition = data[name];\n\t\t\tif (labelPosition.length === 0) {\n\t\t\t\tlabel.element.classList.add('hidden');\n\t\t\t} else {\n\t\t\t\tlabel.element.classList.remove('hidden');\n\t\t\t\tlabel.position.set(labelPosition[0],labelPosition[1],0)\n\t\t\t}\n\t\t});\n\t}\n\n\tinit(cfg) {\n\t\tconst textureLoader = this.mainLoader.textureLoader;\n\t\t// const highTextureManager = new LoadingManager(() => {\n\t\t// \t\t// \tconst loadedAllSlides = this.#lazyLoading.every(slide => slide.loaded);\n\t\t// \t\t// \tif (loadedAllSlides) {\n\t\t// \t\t// \t\tthis.#lazyProgress = 100;\n\t\t// \t\t// \t\tthis.#lazyLoading = null;\n\t\t// \t\t// \t}\n\t\t// \t\t// });\n\t\t// const highTextureLoader = new TextureLoader(highTextureManager);\n\n\t\tthis.mainLoader.addCallback = () => this.start();\n\t\tthis.config = Object.assign({},DEFAULT_PARAMS,JSON.parse(cfg));\n\n\t\tthis.currentIndex = this.config.startImage;\n\t\tconst startSlide = this.config.images[this.config.startImage];\n\n\t\tthis.slides = new Array(this.config.images.length);\n\t\t// this.#lazyLoading = new Array(this.config.images.length);\n\t\tthis.#parseMapping();\n\n\t\tthis.slides[this.config.startImage] = this.#loadSlide(startSlide, 'high', textureLoader, (key,texture) => {\n\t\t\tif (key === 'general') {\n\t\t\t\tthis.size.width = texture.image.width;\n\t\t\t\tthis.size.height = texture.image.height;\n\t\t\t\tthis.liteMode.imageWidth = this.size.width;\n\t\t\t\tthis.liteMode.imageHeight = this.size.height;\n\t\t\t\tthis.liteMode.updateAspect();\n\t\t\t\tthis.liteMode.resizeContainer();\n\t\t\t}\n\t\t});\n\n\t\tthis.config.images.forEach((slide, index) => {\n\t\t\tif (index !== this.config.startImage) {\n\t\t\t\tthis.slides[index] = this.#loadSlide(slide, 'low', textureLoader);\n\n\t\t\t\t// this.#lazyLoading[index] = {\n\t\t\t\t// \tloaded: false,\n\t\t\t\t// \tpending: false,\n\t\t\t\t// \tcallback: () => {\n\t\t\t\t// \t\tif (!this.#lazyLoading[index].pending) {\n\t\t\t\t// \t\t\tthis.#lazyLoading[index].pending = true;\n\t\t\t\t// \t\t\tconst highResolutionSlide = this.#loadSlide(slide, 'high', highTextureLoader, (texture) => {\n\t\t\t\t// \t\t\t\ttexture.colorSpace = LinearSRGBColorSpace;\n\t\t\t\t// \t\t\t\tlet oldSlide = this.slides[index];\n\t\t\t\t// \t\t\t\tthis.#disposeSlide(oldSlide);\n\t\t\t\t// \t\t\t\toldSlide = null;\n\t\t\t\t// \t\t\t\tthis.slides[index] = highResolutionSlide;\n\t\t\t\t// \t\t\t\tthis.#lazyLoading[index].loaded = true;\n\t\t\t\t// \t\t\t\tif (index === this.currentIndex) {\n\t\t\t\t// \t\t\t\t\tthis.render();\n\t\t\t\t// \t\t\t\t}\n\t\t\t\t// \t\t\t});\n\t\t\t\t// \t\t}\n\t\t\t\t// \t},\n\t\t\t\t// };\n\t\t\t}\n\t\t\t// else {\n\t\t\t\t// this.#lazyLoading[index] = {loaded: true, callback: null, pending: true};\n\t\t\t// }\n\t\t});\n\t}\n\t\n\tdisposeHighResolutionSlide() {\n\t\tif (this.swap.highResolutionSlide) {\n\t\t\tthis.slides[this.currentIndex] = this.swap.lowResolutionSlide;\n\t\t\tthis.#disposeSlide(this.swap.highResolutionSlide);\n\t\t\tthis.swap.highResolutionSlide = null;\n\t\t\tthis.render();\n\t\t}\n\t\t\n\t\tif (this.timeout) {\n\t\t\tclearTimeout(this.timeout);\n\t\t}\n\t}\n\t\n\tloadHighResolutionSlide() {\n\t\tif (this.currentIndex !== this.config.startImage) {\n\t\t\tconst index = this.currentIndex;\n\t\t\tthis.timeout = setTimeout(() => {\n\t\t\t\tconst slide = this.#loadSlide(this.config.images[this.currentIndex],'high',_tl,(key,texture) => {\n\t\t\t\t\tif (index === this.currentIndex) {\n\t\t\t\t\t\tif (key === 'general') {\n\t\t\t\t\t\t\tthis.swap.lowResolutionSlide = this.slides[index];\n\t\t\t\t\t\t\tthis.swap.highResolutionSlide = slide;\n\t\t\t\t\t\t\tthis.slides[index] = slide;\n\t\t\t\t\t\t\tthis.render();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttexture.dispose();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},this.config.highResolutionTimeout);\n\t\t}\n\t}\n\n\tstart() {\n\t\tthis.render();\n\t\t// this.#loadSiblingSlides(this.currentIndex);\n\t}\n\n}\n","import {\n Buildings, components, GSAPAnimationMixer,\n isDesktop,\n isMobile, isNoMenu,\n projectMode,\n settingsData,\n threeJsVariables, TRoot,\n UIRoot\n} from '../../settings';\nimport {ViewMode} from '../../common';\nimport {\n execGlobalThrottle,\n findSelectionAndCrmData,\n flatClick, getCylinderModeControlsType, isCylinderDisplayModeEqual, isOneMesh, lockScreenOrientation,\n removeSelectionBoxesLockColor,\n userPrevent,\n} from '../../functions';\nimport {closePoiInfoWindowCardInOrbit, dealsToggle, poiIntersection, poiToggle} from '../poi/poiCss';\nimport {getHighlights} from '../threejs/autoSelectionBoxes';\nimport {autoZoomIsActive, fitModelInViewport, getZoomParams} from '../controls/zoomControl';\nimport {Vector3, Box3} from 'three';\nimport {\n autoRotateTimerAction,\n getOrbitControlsDistanceAndPan,\n getPolarAngleFromViewMode,\n getWorldData, hideOrbitToMapButton,\n resetPanLimits,\n setMinAndMaxControlsDistance,\n setOrbitControls,\n setPanLimits,\n setPolarAngle,\n} from '../controls/orbitControls';\nimport {animateCamera} from '../threejs/animation';\nimport TWEEN from '../../libs/tween.umd';\nimport {toggleStreetNames} from '../components/street-names/addStreetNames';\nimport {hideRightNavBar, moveElements, showRightNavBar} from '../menu/navigation/right-nav-bar';\nimport {\n addAsideContainerOnMouseHandlers,\n additionalMenuToggle,\n mobileBurgerStyleToggle,\n setMenuActive, setMenuElementsState,\n toggleMenuWidth\n} from '../menu/menu';\nimport {\n closeUnitCard,\n hideBuildings, hideBuildingSwitcher,\n showBuildingSwitcher,\n showAllBuildings, enterToTheBuildingWithMaxAvailableApartments,\n} from '../components/building-switch/building_switch';\nimport {\n cylinderFloorNumbers,\n removeCylinderFloorNumbers, rotateCylinderFloorNumbers\n} from '../components/cylinderFloorNumbers/cylinderFloorNumbers';\nimport {buildingHoverOut} from '../threejs/raycast';\nimport {\n buildingsLabelHideWhenAnimationStart, buildingsLabelResize, hideBuildingLabels,\n showBuildingLabels,\n} from '../components/building-switch/buildingLabels';\nimport {disposeTiles, environmentHide, environmentShowV2} from '../threejs/environment';\nimport {backgroundHide, backgroundShow} from '../threejs/sceneBackground';\nimport {\n changeSelectionBoxesStatusColor,\n markSelectedApartments,\n openSearchHandler,\n removeSearchContainer, scrollSearchListToActiveBuildingGroup\n} from '../menu/search/search';\nimport {updateShadowMap} from '../threejs/lights';\nimport {\n applySafariFixForFlatLabels,\n removeSafariFixForFlatLabels,\n renderUpdateValuesOnDemand\n} from '../../app';\nimport {hideTooltip} from '../components/flatTooltip/flatTooltip';\nimport {Amenities} from '../components/Amenities/Amenities';\nimport {analytics} from '../analytics/analytics';\nimport { hideObjectsInCylinder, hideSceneObjects, showSceneObjects } from '../points/points';\nimport {compassVisibleToggle} from '../components/compass/compass';\nimport {CylinderBase} from '../cylinderGrid/CylinderBase';\nimport {StaticClouds} from '../components/weather/StaticClouds';\nimport {BuildingOutline} from '../building/BuildingOutline';\nimport {DisplayOptions} from \"../components/displayOptions/DisplayOptions\";\nimport {PublicLayers} from '../components/publicLayers/PublicLayers';\nimport {OrbitDayAndNight} from '../liveAnimations/DayNight/OrbitDayAndNight';\nimport {Favorite} from '../components/Favorite/Favorite';\nimport {widgetsResize} from \"../widgets/widgets\";\nimport {Fullscreen} from '../components/Fullscreen/Fullscreen';\nimport {ScreenLogo} from \"../components/ScreenLogo\";\nimport {IntersectionLegenda} from \"../components/IntersectionLegenda\";\nimport {CylinderFlatLabels} from \"../components/flatLabels/CylinderFlatLabels\";\nimport {Environment} from '../components/Environment/Environment';\nimport gsap from 'gsap';\nimport {closeMultiCards} from \"../cards/unitCards/unitCardFunctions\";\nimport {Joystick} from '../controls/Joystick';\nimport {restoreFogParams, saveFogPreset, setFogParams} from '../post-processing/Passes/Fog';\nimport {MobileSearch} from \"../menu/search/MobileSearch/MobileSearch\";\nimport {EnvironmentLayer} from \"../components/Environment/EnvironmentLayers/EnvironmentLayer\";\nimport {CylinderBuildingLabels} from '../components/building-switch/CylinderBuildingLabels';\nimport {Objects} from '../threejs/Objects/Objects';\nimport { SalesPlane } from '../threejs/SalesPlane';\nimport { BmbyMode } from './BmbyMode';\n\nexport class Cylinder {\n constructor() {\n this.minAngle = getPolarAngleFromViewMode(ViewMode.Cylinder).minAngle;\n this.minDistance = null;\n this.maxDistance = null;\n this.selectionBoxes = null;\n this.switchBuildingDuration = 1000;\n this.cylinderEnterDuration = projectMode.LiteMode.isActive() ? 0.1 : 1500;\n this.cylinderBuildingLabels = new CylinderBuildingLabels();\n }\n\n async enter(building) {\n settingsData.objects_to_intersection = [];\n await threeJsVariables.cloth.removeCloth();\n\n if (config.features?.blockCylinderMode || userPrevent())\n return;\n\n if (building?.isMesh) {\n if (projectMode.LiteMode.isActive() && (projectMode.LiteMode.modeIs('picture') || projectMode.LiteMode.modeIs('empty'))) {\n const findBuilding = Buildings.getBuilding(building.name);\n if (!findBuilding)\n enterToTheBuildingWithMaxAvailableApartments();\n return;\n } else {\n if (isDesktop && settingsData.isTouchEvent && !settingsData.doubleClick)\n return;\n\n !projectMode.LiteMode.isActive() ?\n building = Buildings.getBuilding(building.parent.name) :\n building = Buildings.getBuilding(building.name.split('_')[0]);\n if (building && !Object.keys(building.info).length)\n return;\n }\n }\n\n if (!building)\n return;\n\n return new Promise(async resolve => {\n // if (!config.features.dayNight.checked)\n // await OrbitDayAndNight.turnOff();\n\n if (BmbyMode.active) {\n GSAPAnimationMixer.duration = 0.0001;\n }\n\n document.getElementById('app').classList.add('cylinder-mode');\n\n if (isMobile) {\n components.mobileSearch = new MobileSearch();\n ScreenLogo.hide();\n const pwa = document.querySelector('.pwa');\n pwa && pwa.classList.add('hidden');\n }\n\n document.querySelector('#NotiflixNotifyWrap:has( .sold-apartment-from__text)')?.classList.add('hidden');\n applySafariFixForFlatLabels();\n userPrevent(true);\n \n saveFogPreset();\n PublicLayers.hide();\n Environment.hide();\n hideOrbitToMapButton();\n StaticClouds.toggle('hide');\n\n const disclaimer = document.querySelector('#threejs > .disclaimer');\n if (isMobile && disclaimer)\n disclaimer.classList.add('hidden');\n\n\n BuildingOutline.toggle(false);\n DisplayOptions.hide();\n Fullscreen.visibilityToggle('hide');\n settingsData.activeModeSwitching = true;\n hideBuildingLabels();\n Buildings.activateBuilding(building.name);\n IntersectionLegenda.build();\n threeJsVariables.googleMiniMap.activateBuilding();\n threeJsVariables.schematicBuilding?.updateBuildingsRotationUI();\n projectMode.LiteMode.switchSelections();\n if (projectMode.LiteMode.isActive()) {\n projectMode.LiteMode.hideLiteMode();\n if (projectMode.LiteMode.modeIs('picture') || projectMode.LiteMode.modeIs('empty')) {\n this.setApartmentsToIntersection();\n userPrevent(false);\n settingsData.activeViewMode = ViewMode.Cylinder;\n widgetsResize();\n projectMode.LiteMode.activeViewMode();\n if (isMobile) {\n components.mobileSearch.build();\n new IntersectionLegenda(isDesktop ? document.querySelector('.aside__container') : TRoot);\n } else {\n await openSearchHandler()\n .then(() => {\n toggleMenuWidth({action: 'mini', source: 'eventListener'});\n new IntersectionLegenda(isDesktop ? document.querySelector('.aside__container') : TRoot);\n addAsideContainerOnMouseHandlers();\n scrollSearchListToActiveBuildingGroup(building.name);\n\n resolve(true);\n });\n }\n showRightNavBar();\n setMenuActive('search');\n analytics('page_entrance', 'search');\n projectMode.Pagination.paginate({source: 'menuHandler', note: 'cylinderMode', menuItem: 'search'});\n settingsData.activeModeSwitching = false;\n if (isNoMenu) {\n document.querySelector('.aside__navigation-menu__item[data-menu-item=\"search\"]')?.classList.add('hidden');\n document.querySelector('.button-modes--back[data-button=\"back\"]')?.classList.remove('hidden');\n }\n\n return;\n }\n compassVisibleToggle('show');\n }\n\n buildingHoverOut();\n autoRotateTimerAction('cancel');\n removeSelectionBoxesLockColor(undefined, true);\n\n isMobile ?\n closePoiInfoWindowCardInOrbit(true) :\n closePoiInfoWindowCardInOrbit(false);\n\n const currentBuilding = building.selectionsGroup;\n const buildingBox = new Box3().setFromObject(currentBuilding);\n await fitModelInViewport(false, currentBuilding);\n this.updateVariables();\n const buildingBoxCenter = buildingBox.getCenter(new Vector3());\n const buildingCenterPoint = currentBuilding.getWorldPosition(new Vector3()).setY(buildingBoxCenter.y);\n const {cameraVector, orbitControlsVector} = getWorldData();\n let length;\n this.selectionBoxes = currentBuilding.parent;\n\n if (autoZoomIsActive()) {\n const {foreshortening} = getZoomParams();\n length = foreshortening;\n } else {\n length = (this.maxDistance + this.minDistance) / 2;\n }\n const position = new Vector3()\n .subVectors(cameraVector, buildingCenterPoint)\n .normalize()\n .setY(0)\n .setLength(length)\n .add(buildingCenterPoint);\n buildingCenterPoint.y = buildingCenterPoint.y / 1.2;\n settingsData.activeViewMode = ViewMode.Cylinder;\n \n // threeJsVariables.miniMap.hide();\n widgetsResize();\n additionalMenuToggle();\n\n const mixer = GSAPAnimationMixer.registerNewMixer('cylinderEnter');\n mixer.addCallback('onComplete', () => {\n threeJsVariables.scene.add(this.selectionBoxes);\n threeJsVariables.renderList.reorder();\n if (BmbyMode.active) {\n GSAPAnimationMixer.duration = 1;\n }\n disposeTiles();\n if (config.features.privateHouseMode) {\n setOrbitControls(ViewMode.Orbit);\n setPolarAngle(ViewMode.Orbit);\n setMinAndMaxControlsDistance(ViewMode.Orbit);\n setPanLimits(ViewMode.Orbit);\n } else if (isCylinderDisplayModeEqual('show all')) {\n const controlsType = getCylinderModeControlsType();\n setOrbitControls(controlsType);\n setPolarAngle(controlsType);\n setMinAndMaxControlsDistance(controlsType);\n setPanLimits(controlsType);\n } else {\n setOrbitControls(ViewMode.Cylinder);\n setPolarAngle(ViewMode.Cylinder);\n setMinAndMaxControlsDistance(ViewMode.Cylinder);\n setPanLimits(ViewMode.Cylinder);\n }\n cylinderFloorNumbers().then(() => rotateCylinderFloorNumbers());\n this.cylinderBuildingLabels.create();\n if (isMobile) {\n setMenuActive('search');\n this.setApartmentsToIntersection(building);\n\n if (config.features.privateHouseMode)\n components.mobileSearch.build();\n } else {\n openSearchHandler()\n .then(() => {\n setMenuActive('search');\n toggleMenuWidth({action: 'mini', source: 'eventListener'});\n new IntersectionLegenda(isDesktop ? document.querySelector('.aside__container') : TRoot);\n // addFilterInteractionListeners();\n this.setApartmentsToIntersection(building);\n addAsideContainerOnMouseHandlers();\n scrollSearchListToActiveBuildingGroup(building.name);\n\n buildingsLabelHideWhenAnimationStart();\n\n resolve(true);\n });\n }\n\n if (!projectMode.LiteMode.isActive())\n userPrevent(false);\n });\n\n if (threeJsVariables.sceneObjectsSlicer.active) {\n threeJsVariables.sceneObjectsSlicer.target = currentBuilding;\n mixer.addAnimation(threeJsVariables.sceneObjectsSlicer.cropXZ());\n }\n\n if (isOneMesh() && threeJsVariables.slicer.active) {\n threeJsVariables.slicer.target = currentBuilding;\n mixer.addAnimation(threeJsVariables.slicer.cropXZ());\n }\n\n const animation = animateCamera(\n cameraVector,\n config.features.privateHouseMode ? cameraVector : position,\n orbitControlsVector,\n buildingCenterPoint,\n undefined,\n this.minDistance,\n this.minAngle,\n config.threejs.orbitControls.polarCameraCorrection,\n this.cylinderEnterDuration,\n TWEEN.Easing.Sinusoidal.InOut,\n () => {\n buildingsLabelHideWhenAnimationStart();\n OrbitDayAndNight.presetsToggle('reset');\n toggleStreetNames(false);\n poiToggle(false);\n resetPanLimits();\n },\n );\n mixer.addAnimation(animation);\n\n const cylinderPass = threeJsVariables.composer.getPass('cylinderPass');\n const fadeProgress = {\n value: 0\n };\n\n if (!config.features.privateHouseMode && !isCylinderDisplayModeEqual('show all')) {\n const fadeAnimation = gsap.to(fadeProgress, {\n value: config.features.buildingOpacity === 0 ? 1 : config.features.buildingOpacity,\n duration: GSAPAnimationMixer.duration,\n ease: GSAPAnimationMixer.ease,\n onStart: () => {\n cylinderPass.active = true;\n Objects.visibilityToggle(false);\n },\n onUpdate: () => cylinderPass.setProgress(fadeProgress.value),\n onComplete: () => {\n hideSceneObjects(building);\n hideObjectsInCylinder(true);\n OrbitDayAndNight.toggle('hide');\n environmentHide();\n hideBuildings();\n buildingsLabelHideWhenAnimationStart();\n toggleStreetNames(false);\n setFogParams({\n active: false\n });\n SalesPlane.scope?.hide();\n cylinderPass.active = Boolean(config.features.buildingOpacity);\n\n if (isMobile) {\n components.mobileSearch.build();\n new IntersectionLegenda(TRoot);\n }\n }\n });\n mixer.addAnimation(fadeAnimation);\n } else {\n const plugProgress = {\n value: 0\n };\n const plugAnimation = gsap.to(plugProgress, {\n value: 1,\n duration: GSAPAnimationMixer.duration,\n ease: GSAPAnimationMixer.ease,\n onStart: () => Objects.visibilityToggle(false),\n onComplete: () => {\n hideSceneObjects(building);\n hideObjectsInCylinder(true);\n environmentHide();\n hideBuildings();\n toggleStreetNames(false);\n setFogParams({\n active: false\n });\n }\n\n });\n mixer.addAnimation(plugAnimation);\n }\n\n\n backgroundHide();\n EnvironmentLayer.resetToDefault();\n CylinderBase.show(building);\n\n mixer.play();\n poiToggle(false);\n dealsToggle(false);\n toggleStreetNames(false);\n Amenities.createMainContainer();\n new Amenities(building).add();\n lockScreenOrientation();\n Favorite.toggle('show');\n new CylinderFlatLabels();\n analytics('page_entrance', 'search');\n projectMode.Pagination.paginate({source: 'menuHandler', note: 'cylinderMode', menuItem: 'search'});\n settingsData.activeModeSwitching = false;\n showRightNavBar();\n if (isNoMenu) {\n document.querySelector('.aside__navigation-menu__item[data-menu-item=\"search\"]')?.classList.add('hidden');\n document.querySelector('.button-modes--back[data-button=\"back\"]')?.classList.remove('hidden');\n }\n\n if (!isMobile)\n showBuildingSwitcher();\n Favorite.intersect();\n if (isDesktop)\n setMenuElementsState('hidden');\n mobileBurgerStyleToggle();\n\n if (projectMode.LiteMode.isActive() && (projectMode.LiteMode.modeIs('regular') || projectMode.LiteMode.modeIs('schematic') || projectMode.LiteMode.modeIs('rotate')))\n userPrevent(false);\n });\n }\n\n async switchBuilding(name, dataEngineID, isPostMessageSwitch) {\n if (userPrevent() || settingsData.globalThrottle || projectMode.LiteMode.modeIs('picture'))\n return;\n\n return new Promise(async (resolve) => {\n execGlobalThrottle(750);\n userPrevent(true);\n removeSelectionBoxesLockColor(undefined, true);\n if (isDesktop)\n Amenities.unselectAmenities();\n const mixer = GSAPAnimationMixer.registerNewMixer('switchingBuilding');\n Favorite.toggle('hide');\n const oldBuilding = Buildings.getActiveBuilding();\n const building = Buildings.getBuilding(name);\n const cylinderPass = threeJsVariables.composer.getPass('cylinderPass');\n const fadeProgress = {\n value: config.features.buildingOpacity === 0 ? 1 : config.features.buildingOpacity\n };\n\n if (BmbyMode.active && !isPostMessageSwitch) {\n const buildingId = config.buildings.find(b => b.buildingEngineId === building.name)?.buildingId;\n if (buildingId) {\n const message = {\n action: 'SwitchBuilding',\n data: {\n buildingId\n }\n };\n window.parent.postMessage(JSON.stringify(message),\"*\");\n }\n }\n\n if (!config.features.privateHouseMode && !isCylinderDisplayModeEqual('show all')) {\n const fadeAnimation = gsap.to(fadeProgress, {\n value: config.features.buildingOpacity === 0 ? 0 : config.features.buildingOpacity,\n duration: GSAPAnimationMixer.duration,\n ease: GSAPAnimationMixer.ease,\n onStart: () => {\n closeMultiCards(true);\n hideSceneObjects();\n cylinderPass.active = true;\n building.modelGroup.visible = true;\n building.isHide = false;\n },\n onUpdate: () => {\n cylinderPass.setProgress(fadeProgress.value);\n\n if (fadeProgress.value <= 0.5) {\n oldBuilding.modelGroup.visible = Boolean(config.features.buildingOpacity);\n }\n\n },\n onComplete: () => {\n Buildings.deactivateBuilding();\n Buildings.activateBuilding(building.name);\n threeJsVariables.schematicBuilding?.updateBuildingsRotationUI();\n threeJsVariables.googleMiniMap.activateBuilding();\n projectMode.LiteMode.switchSelections();\n hideBuildings();\n showSceneObjects(building);\n IntersectionLegenda.build();\n Amenities.show();\n cylinderPass.active = Boolean(config.features.buildingOpacity);\n scrollSearchListToActiveBuildingGroup(building.name);\n }\n });\n mixer.addAnimation(fadeAnimation);\n } else {\n const plugProgress = {\n value: 0\n };\n\n const plugAnimation = gsap.to(plugProgress,{\n value: 1,\n duration: GSAPAnimationMixer.duration,\n ease: GSAPAnimationMixer.ease,\n onStart: () => {\n closeMultiCards(true);\n hideSceneObjects();\n },\n onComplete: () => {\n Buildings.deactivateBuilding();\n Buildings.activateBuilding(building.name);\n threeJsVariables.googleMiniMap.activateBuilding();\n threeJsVariables.schematicBuilding?.updateBuildingsRotationUI();\n projectMode.LiteMode.switchSelections();\n hideBuildings();\n showSceneObjects(building);\n IntersectionLegenda.build();\n Amenities.show();\n // if (isMobile && !UIRoot.querySelector('.search__container-main'))\n // openSearchHandler();\n scrollSearchListToActiveBuildingGroup(building.name);\n }\n });\n mixer.addAnimation(plugAnimation);\n }\n\n new Amenities(building).add();\n\n if (document.getElementById('building-switcher')) {\n document.querySelectorAll('#building-switcher .building-item.active').forEach(item => item.classList.remove('active'));\n document.querySelectorAll(`.building-item[data-building=\"${building.name}\"]`).forEach(item => item.classList.add('active'));\n }\n\n const buildingSelectionBoxes = building.selectionsGroup;\n const selectionBox = new Box3().setFromObject(buildingSelectionBoxes);\n await fitModelInViewport(false, buildingSelectionBoxes);\n this.updateVariables();\n const buildingBoxCenter = selectionBox.getCenter(new Vector3());\n const buildingCenterPoint = buildingSelectionBoxes.getWorldPosition(new Vector3()).setY(buildingBoxCenter.y);\n const {cameraVector, orbitControlsVector} = getWorldData();\n let length;\n\n if (autoZoomIsActive()) {\n const {foreshortening} = getZoomParams();\n length = foreshortening;\n } else {\n length = (this.maxDistance + this.minDistance) / 2;\n }\n\n const position = new Vector3()\n .subVectors(cameraVector, buildingCenterPoint)\n .normalize()\n .setLength(length)\n .add(buildingCenterPoint);\n buildingCenterPoint.y = buildingCenterPoint.y / 1.2;\n\n mixer.addCallback('onComplete', () => {\n cylinderFloorNumbers().then(() => rotateCylinderFloorNumbers());\n changeSelectionBoxesStatusColor(settingsData.searchResult, Buildings.getActiveBuilding());\n\n if (config.features.privateHouseMode) {\n setPolarAngle(ViewMode.Orbit);\n setMinAndMaxControlsDistance(ViewMode.Orbit);\n setPanLimits(ViewMode.Orbit);\n } else if (isCylinderDisplayModeEqual('show all')) {\n const controlsType = getCylinderModeControlsType();\n setPolarAngle(controlsType);\n setMinAndMaxControlsDistance(controlsType);\n setPanLimits(controlsType);\n } else {\n setPolarAngle(ViewMode.Cylinder);\n setMinAndMaxControlsDistance(ViewMode.Cylinder);\n setPanLimits(ViewMode.Cylinder);\n }\n\n this.setApartmentsToIntersection(building);\n userPrevent(false);\n if (!isMobile && UIRoot.querySelector('.search__result-item.active')) {\n markSelectedApartments(dataEngineID);\n const {selectedMesh} = findSelectionAndCrmData(dataEngineID);\n flatClick(selectedMesh);\n }\n\n resolve(true);\n });\n\n const cameraAnimation = animateCamera(\n cameraVector,\n config.features.privateHouseMode ? cameraVector : position,\n orbitControlsVector,\n buildingCenterPoint,\n undefined,\n this.minDistance,\n this.minAngle,\n config.threejs.orbitControls.polarCameraCorrection,\n this.switchBuildingDuration,\n TWEEN.Easing.Sinusoidal.InOut,\n () => {\n buildingHoverOut();\n resetPanLimits();\n removeCylinderFloorNumbers();\n }\n );\n\n if (threeJsVariables.sceneObjectsSlicer.active) {\n threeJsVariables.sceneObjectsSlicer.target = building.selectionsGroup;\n const slicerAnimation = threeJsVariables.sceneObjectsSlicer.cropXZ(0.1);\n mixer.addAnimation(slicerAnimation);\n }\n\n if (isOneMesh() && threeJsVariables.slicer.active) {\n threeJsVariables.slicer.target = building.selectionsGroup;\n const slicerAnimation = threeJsVariables.slicer.cropXZ(0.1);\n mixer.addAnimation(slicerAnimation);\n }\n\n CylinderBase.hide();\n CylinderBase.show(building);\n\n mixer.addAnimation(cameraAnimation);\n mixer.play();\n\n Favorite.toggle('show');\n\n settingsData.activeModeSwitching = false;\n Favorite.intersect();\n });\n }\n\n async exitFromMode() {\n if (userPrevent())\n return;\n\n document.getElementById('app').classList.remove('cylinder-mode');\n removeSafariFixForFlatLabels();\n // removeFilterInteractionListeners();\n userPrevent(true);\n toggleMenuWidth({action: 'full', source: 'cylinder'});\n settingsData.activeModeSwitching = true;\n renderUpdateValuesOnDemand(false);\n hideRightNavBar();\n Amenities.hide();\n IntersectionLegenda.remove();\n const disclaimer = document.querySelector('#threejs > .disclaimer')\n if (isMobile) {\n disclaimer.classList.remove('hidden');\n const pwa = document.querySelector('.pwa');\n pwa && pwa.classList.remove('hidden');\n }\n\n CylinderFlatLabels.remove();\n hideBuildingSwitcher();\n Favorite.toggle('hide');\n if (isMobile) {\n // await removeSearchContainer('immediately');\n components.mobileSearch.remove();\n components.mobileSearch = null;\n } else {\n await removeSearchContainer('immediately');\n }\n closeUnitCard();\n removeSelectionBoxesLockColor(undefined, true);\n settingsData.activeViewMode = ViewMode.Orbit;\n UIRoot.querySelector('.aside__container')?.classList.remove('fixed')\n widgetsResize();\n // Buildings.deactivateBuilding();\n showBuildingLabels();\n if (isMobile)\n ScreenLogo.show();\n SalesPlane.scope?.show();\n\n let buildingSize = new Vector3();\n let sBoxSize = new Vector3();\n\n if (projectMode.LiteMode.isActive()) {\n if (projectMode.LiteMode.modeIs('picture') || projectMode.LiteMode.modeIs('empty')) {\n userPrevent(false);\n settingsData.objects_to_intersection = projectMode.LiteMode.pictureModeOrbitIntersections;\n settingsData.activeModeSwitching = false;\n projectMode.LiteMode.activeViewMode();\n projectMode.LiteMode.showLiteMode();\n setMenuActive('3dModel');\n DisplayOptions.show();\n if (isNoMenu) {\n document.querySelector('.aside__navigation-menu__item[data-menu-item=\"search\"]')?.classList.remove('hidden');\n document.querySelector('.button-modes--back[data-button=\"back\"]')?.classList.add('hidden');\n }\n\n return;\n }\n compassVisibleToggle('hide');\n } else if (projectMode.LiteMode.isActive() && projectMode.LiteMode.modeIs('schematic')) {\n const sBoxes = getHighlights();\n new Box3().setFromObject(sBoxes).getSize(sBoxSize);\n buildingSize.copy(sBoxSize);\n } else {\n const buildings = threeJsVariables.scene.getObjectByName('Project Buildings');\n new Box3().setFromObject(buildings).getSize(buildingSize);\n const sBoxes = getHighlights();\n new Box3().setFromObject(sBoxes).getSize(sBoxSize);\n }\n\n const totalSize = new Vector3(buildingSize.x, sBoxSize.y, buildingSize.z);\n await fitModelInViewport(false, totalSize);\n\n const {cameraVector, orbitControlsVector} = getWorldData();\n const target = config.threejs.orbitControls.target;\n const {minAngle} = getPolarAngleFromViewMode(ViewMode.Orbit);\n const {minDistance, maxDistance} = getOrbitControlsDistanceAndPan(ViewMode.Orbit);\n const foreshortening = config.threejs.orbitControls.autoZoomSettings.foreshortening;\n let length;\n\n autoZoomIsActive() ?\n length = foreshortening :\n length = (maxDistance + minDistance) / 2;\n\n const defaultTarget = new Vector3(target.x, target.y, target.z);\n const position = new Vector3().subVectors(cameraVector, orbitControlsVector).normalize().setY(0).setLength(length).add(orbitControlsVector);\n\n removeCylinderFloorNumbers();\n\n if (config.threejs.orbitControls.returnToDefaultView === false) {\n defaultTarget.copy(orbitControlsVector);\n defaultTarget.setY(target.y);\n position.setY(target.y);\n }\n\n settingsData.customSelections = [];\n settingsData.objects_to_intersection = [];\n settingsData.instanced_floors = [];\n settingsData.floor_obj = {};\n\n const mixer = GSAPAnimationMixer.registerNewMixer('exitToOrbit');\n mixer.addCallback('onComplete', () => {\n Joystick.updatePosition();\n showBuildingLabels();\n updateShadowMap();\n // threeJsVariables.miniMap.show();\n userPrevent(false);\n });\n\n if (!projectMode.LiteMode.isActive() && !Environment.getActivePublicLayer()?.animateCamera && !PublicLayers.activeLayer?.animateCamera) {\n const cameraAnimation = animateCamera(\n cameraVector,\n config.features.privateHouseMode ?\n cameraVector : position,\n orbitControlsVector,\n config.features.privateHouseMode ? orbitControlsVector : defaultTarget,\n undefined,\n config.features.privateHouseMode ? this.minDistance : length,\n minAngle,\n 0,\n 1000,\n TWEEN.Easing.Sinusoidal.InOut,\n () => {\n threeJsVariables.trackballControls.maxDistance = maxDistance;\n setOrbitControls(ViewMode.Orbit);\n setPolarAngle(ViewMode.Orbit);\n setPanLimits(ViewMode.Orbit);\n hideTooltip();\n this.cylinderBuildingLabels.remove();\n },\n () => {\n setMinAndMaxControlsDistance(ViewMode.Orbit);\n hideTooltip();\n },\n );\n\n mixer.addAnimation(cameraAnimation);\n }\n\n if (threeJsVariables.sceneObjectsSlicer.active) {\n mixer.addAnimation(threeJsVariables.sceneObjectsSlicer.restoreXZ(0.5));\n }\n\n if (isOneMesh() && threeJsVariables.slicer.active) {\n mixer.addAnimation(threeJsVariables.slicer.restoreXZ(0.5));\n }\n\n threeJsVariables.scene.remove(this.selectionBoxes);\n this.selectionBoxes = null;\n\n const cylinderPass = threeJsVariables.composer.getPass('cylinderPass');\n const fadeProgress = {\n value: config.features.buildingOpacity === 0 ? 1 : config.features.buildingOpacity\n };\n\n if (!config.features.privateHouseMode && !isCylinderDisplayModeEqual('show all')) {\n const fadeAnimation = gsap.to(fadeProgress, {\n value: 0,\n duration: GSAPAnimationMixer.duration,\n ease: GSAPAnimationMixer.ease,\n onStart: () => {\n cylinderPass.active = true;\n poiIntersection();\n showAllBuildings();\n showSceneObjects();\n hideObjectsInCylinder(false);\n environmentShowV2();\n CylinderBase.hide();\n OrbitDayAndNight.toggle('show');\n Objects.visibilityToggle(true);\n restoreFogParams();\n // backgroundShow();\n },\n onUpdate: () => {\n cylinderPass.setProgress(fadeProgress.value);\n // buildingsLabelResize();\n },\n onComplete: () => {\n Buildings.deactivateBuilding();\n threeJsVariables.googleMiniMap.activateBuilding();\n threeJsVariables.schematicBuilding?.updateBuildingsRotationUI();\n cylinderPass.active = false;\n document.getElementById('app').classList.remove('cylinder-mode');\n buildingsLabelResize();\n }\n });\n mixer.addAnimation(fadeAnimation);\n } else {\n const plugProgress = {\n value: 0\n };\n\n const plugAnimation = gsap.to(plugProgress, {\n value: 1,\n ease: GSAPAnimationMixer.ease,\n duration: GSAPAnimationMixer.duration,\n onStart: () => {\n poiIntersection();\n showAllBuildings();\n showSceneObjects();\n hideObjectsInCylinder(false);\n environmentShowV2();\n Objects.visibilityToggle(true);\n CylinderBase.hide();\n OrbitDayAndNight.toggle('show');\n restoreFogParams();\n // backgroundShow();\n },\n // onUpdate: () => {buildingsLabelResize()},\n onComplete: () => {\n Buildings.deactivateBuilding();\n threeJsVariables.googleMiniMap.activateBuilding();\n threeJsVariables.schematicBuilding?.updateBuildingsRotationUI();\n cylinderPass.active = false;\n document.getElementById('app').classList.remove('cylinder-mode');\n buildingsLabelResize();\n }\n });\n mixer.addAnimation(plugAnimation);\n }\n backgroundShow();\n\n projectMode.LiteMode.isActive() && projectMode.LiteMode.showLiteMode();\n PublicLayers.show();\n Environment.show();\n Environment.mouseOverHandler();\n BuildingOutline.toggle(true);\n DisplayOptions.show();\n Fullscreen.visibilityToggle('show');\n StaticClouds.toggle('show');\n OrbitDayAndNight.presetsToggle('restore');\n lockScreenOrientation();\n // threeJsVariables.miniMap.show();\n\n mixer.play();\n moveElements();\n\n if (isNoMenu) {\n document.querySelector('.aside__navigation-menu__item[data-menu-item=\"search\"]')?.classList.remove('hidden');\n document.querySelector('.button-modes--back[data-button=\"back\"]')?.classList.add('hidden');\n }\n\n setMenuActive('3dModel');\n additionalMenuToggle();\n autoRotateTimerAction('update');\n settingsData.activeModeSwitching = false;\n toggleStreetNames(true);\n poiToggle(true);\n dealsToggle(true);\n mobileBurgerStyleToggle();\n\n if (isDesktop)\n setMenuElementsState('visible');\n }\n\n updateVariables() {\n this.minDistance = getOrbitControlsDistanceAndPan(ViewMode.Cylinder).minDistance;\n this.maxDistance = getOrbitControlsDistanceAndPan(ViewMode.Cylinder).maxDistance;\n }\n\n setApartmentsToIntersection(building) {\n if (projectMode.LiteMode.isActive() && projectMode.LiteMode.modeIs('picture')) {\n const buildings = Buildings.getBuildingsArray();\n const apartments = [];\n\n buildings.forEach(building => apartments.push(...building.getApartments()));\n projectMode.LiteMode.pictureModeOrbitIntersections.forEach(mesh => mesh.material.opacity = 0);\n settingsData.objects_to_intersection = apartments;\n\n return;\n } else if (projectMode.LiteMode.isActive() && projectMode.LiteMode.modeIs('empty')) {\n return;\n }\n\n if (config.features.privateHouseMode) {\n const buildings = Buildings.getBuildingsArray();\n const objects_to_intersection = [];\n const customSelections = [];\n const instanced_floors = [];\n const floor_obj = [];\n buildings.forEach(building => {\n objects_to_intersection.push(...building.apartments);\n objects_to_intersection.push(...building.getFloorPlugMeshes());\n objects_to_intersection.push(...building.customSelections.filter(selection => selection?.isObject3D));\n customSelections.push(...building.customSelections);\n instanced_floors.push(...settingsData.instanced_floors_switch[building.name]);\n floor_obj.push(...building.selections);\n });\n objects_to_intersection.push(...settingsData.additionalIntersectionObjects);\n settingsData.objects_to_intersection = objects_to_intersection;\n settingsData.customSelections = customSelections;\n settingsData.instanced_floors = instanced_floors;\n settingsData.floor_obj = floor_obj;\n } else {\n settingsData.objects_to_intersection = building.apartments.concat(building.getFloorPlugMeshes());\n settingsData.customSelections = building.customSelections.filter(selection => selection?.isObject3D);\n settingsData.objects_to_intersection = settingsData.objects_to_intersection.concat(settingsData.customSelections);\n settingsData.objects_to_intersection = settingsData.objects_to_intersection.concat(settingsData.additionalIntersectionObjects);\n settingsData.instanced_floors = settingsData.instanced_floors_switch[building.name];\n settingsData.floor_obj = building.selections;\n }\n\n\n if (document.querySelector('.search-btn_tooltip'))\n settingsData.isSwitched = true;\n }\n}\n","import {\n getCurrentCameraDistance,\n getOrbitControlsDistanceAndPan,\n getPolarAngleFromViewMode,\n getWorldData,\n setMinAndMaxControlsDistance,\n setOrbitControls, setPanLimits,\n setPolarAngle,\n} from '../controls/orbitControls';\nimport { ViewMode } from '../../common';\nimport {\n Buildings,\n components,\n GSAPAnimationMixer,\n isMobile,\n projectMode,\n settingsData,\n threeJsVariables, TRoot\n} from '../../settings';\nimport { moveElements } from '../menu/navigation/right-nav-bar';\nimport {\n cylinderFloorNumbers,\n removeCylinderFloorNumbers, rotateCylinderFloorNumbers, showOrHideCylinderFloorNumbers,\n} from '../components/cylinderFloorNumbers/cylinderFloorNumbers';\nimport { FloorSlider } from '../components/floorSlider/floorSlider';\nimport {\n enableSwitcherBtns, getCylinderModeControlsType, isCylinderDisplayModeEqual, isOneMesh,\n rotation_to_flat,\n setColorsKeyPlan,\n userPrevent,\n} from '../../functions';\nimport {\n floorMoveAnimation\n} from '../controls/destroyBuilding';\nimport {\n disableArrowButtons,\n moveCardWhenBuildingDestroyed\n} from '../cards/unitCards/unitCardFunctions';\nimport {Box3, Vector3} from 'three';\nimport { animateCamera } from '../threejs/animation';\nimport TWEEN from '../../libs/tween.umd';\nimport { flatLabels, flatLabelsRemove } from '../components/flatLabels/flatLabels';\nimport { renderUpdateValuesOnDemand } from '../../app';\nimport { Amenities } from '../components/Amenities/Amenities';\nimport { CylinderBase } from '../cylinderGrid/CylinderBase';\nimport { Favorite } from '../components/Favorite/Favorite';\nimport { FloorAmenities } from '../components/Amenities/FloorAmenities';\nimport { hideSceneObjects, showSceneObjects } from '../points/points';\nimport {BaseElement} from \"../interfaces/BaseElement\";\nimport {changeLangToCurrent} from \"../components/langSwitcher/langSwitcher\";\n\nexport class FloorPlan {\n #backButton;\n\n constructor () {\n this.minAngle = getPolarAngleFromViewMode(ViewMode.FloorPlan).minAngle;\n this.minDistance = null;\n this.maxDistance = null;\n this.buildingSwitcher = null;\n this.floorSlider = null;\n this.floorAmenities = new FloorAmenities();\n this.startHeight = null;\n }\n\n async enter(){\n if (userPrevent())\n return;\n\n return new Promise(resolve => {\n userPrevent(true);\n\n if (config.resources.sceneObjects.hideAttachedModelInKeyPlan)\n hideSceneObjects();\n\n settingsData.activeModeSwitching = true;\n\n if (!isMobile) {\n this.buildingSwitcher = document.getElementById('building-switcher');\n this.buildingSwitcher && this.buildingSwitcher.classList.add('hide');\n enableSwitcherBtns(true);\n }\n\n this.updateVariables();\n const activeBuilding = Buildings.getActiveBuilding();\n if (!projectMode.LiteMode.isActive() || projectMode.LiteMode.isActive() && (projectMode.LiteMode.modeIs('regular') || projectMode.LiteMode.modeIs('rotate'))) {\n if (!threeJsVariables.slicer.active){\n const roof = activeBuilding.amenities['Roof'].mesh;\n roof.position.y = roof.position.y + 400;\n }\n }\n\n settingsData.buildingDestroyed = true;\n\n if (!isMobile)\n Amenities.hide();\n Amenities.hideAmenitiesSelectionBoxes();\n\n if (!isMobile)\n disableArrowButtons();\n\n removeCylinderFloorNumbers();\n Favorite.toggle('hide');\n this.startHeight = threeJsVariables.orbitControls.target.y;\n threeJsVariables.perspectiveCamera.userData.startAnimationDistance = getCurrentCameraDistance();\n const {floorVector,flatVector} = getWorldData(settingsData.lastClickedFlat);\n const destroyTarget = new Vector3(flatVector.x,floorVector.y,flatVector.z);\n document.getElementById('app').classList.remove('cylinder-mode');\n document.getElementById('app').classList.add('floor-plan-mode');\n\n const mixer = GSAPAnimationMixer.registerNewMixer('floorPlan');\n mixer.addCallback('onComplete',() => {\n CylinderBase.rotateTexts();\n flatLabels({currentFloor: settingsData.currentFloor});\n userPrevent(false);\n setOrbitControls(ViewMode.FloorPlan);\n setPolarAngle(ViewMode.FloorPlan);\n setMinAndMaxControlsDistance(ViewMode.FloorPlan);\n projectMode.QA.tests.Vantages?.initFloorValidator();\n this.#addBackButton();\n if (isMobile) {\n components.mobileSearch.filterCards(activeBuilding.name);\n }\n resolve(true);\n });\n\n if (threeJsVariables.slicer.active && !isOneMesh()) {\n const copyBuildingAnimation = threeJsVariables.slicer.keyPlanEnter(activeBuilding);\n mixer.addAnimation(copyBuildingAnimation);\n }\n\n this.destroyBuilding(settingsData.currentFloor,destroyTarget,'enter');\n\n moveElements();\n settingsData.activeViewMode = 'floorplan';\n setColorsKeyPlan(settingsData.currentFloor);\n // if (isMobile) {\n // components.mobileSearch.setStateTo('hidden');\n // components.mobileSearch.update('orientation');\n // }\n mixer.play();\n\n setTimeout(() => {\n this.floorSlider = new FloorSlider();\n this.floorSlider.create().then(() => {\n moveCardWhenBuildingDestroyed();\n });\n }, 200);\n settingsData.activeModeSwitching = false;\n });\n }\n\n async up(floor, apartment){\n return new Promise(resolve => {\n userPrevent(true);\n this.floorSlider.block();\n flatLabelsRemove();\n \n let mixer = GSAPAnimationMixer.getMixer('floorPlan');\n if (!mixer) {\n mixer = GSAPAnimationMixer.registerNewMixer('floorPlan');\n }\n \n mixer.addCallback('onComplete',() => {\n flatLabels({currentFloor: floor});\n userPrevent(false);\n projectMode.QA.tests.Vantages?.initFloorValidator();\n this.floorSlider.unblock();\n resolve();\n });\n \n const flat = this.#flatWithCrmData(floor);\n settingsData.aptFloorNum = flat.userData.crm_data.floorNum;\n floorMoveAnimation(settingsData.currentFloor, 'appear', floor);\n \n settingsData.currentFloor = floor;\n this.floorSlider.updateScroll(floor);\n setColorsKeyPlan(floor);\n const {cameraVector} = getWorldData(flat);\n let target = new Vector3().copy(cameraVector).setY(flat.userData.baseWorldPosition.y);\n this.destroyCameraAnimation(target, `appear`,flat);\n \n if (apartment && apartment.isMesh)\n rotation_to_flat(apartment);\n mixer.play();\n })\n }\n\n async down(floor,apartment){\n return new Promise(resolve => {\n userPrevent(true);\n this.floorSlider.block();\n flatLabelsRemove();\n \n let mixer = GSAPAnimationMixer.getMixer('floorPlan');\n if (!mixer) {\n mixer = GSAPAnimationMixer.registerNewMixer('floorPlan');\n }\n \n mixer.addCallback('onComplete',() => {\n flatLabels({currentFloor: floor});\n userPrevent(false);\n projectMode.QA.tests.Vantages?.initFloorValidator();\n this.floorSlider.unblock();\n resolve();\n });\n \n // const activeBuilding = Buildings.getActiveBuilding();\n // const flat = activeBuilding.getFloorSelections(floor,false)[0];\n const flat = this.#flatWithCrmData(floor);\n settingsData.currentFloor = floor;\n settingsData.aptFloorNum = flat.userData.crm_data.floorNum;\n flat.updateWorldMatrix(true, false);\n const {cameraVector} = getWorldData(flat);\n let targetPosition =\n new Vector3()\n .copy(cameraVector)\n .setY(flat.userData.baseWorldPosition.y);\n \n setColorsKeyPlan(floor);\n this.destroyBuilding(floor, targetPosition);\n \n this.floorSlider.updateScroll(settingsData.currentFloor);\n if (apartment && apartment.isMesh)\n rotation_to_flat(apartment,true);\n mixer.play();\n // userPrevent(false);\n // this.floorSlider.unblock();\n // selectFirstAvailableApartmentOnTheFloor(floor);\n })\n }\n\n #flatWithCrmData(floor) {\n const activeBuilding = Buildings.getActiveBuilding();\n const flat = activeBuilding.getFloorSelections(floor,false).find(flat => flat.userData.crm_data);\n if (!flat) {\n console.log(`%cThe whole ${floor} floor of the ${activeBuilding.name} doesn't have CRM data`, 'color: orange');\n return false;\n } else {\n return flat;\n }\n }\n\n destroyBuilding(currentFloor_var, targetPosition,state){\n enableSwitcherBtns(false);\n settingsData.tween_animations = [];\n floorMoveAnimation(currentFloor_var, 'destroy',undefined,state);\n this.destroyCameraAnimation(targetPosition);\n }\n\n destroyCameraAnimation(targetPosition, upper, flat){\n const apt = flat ? flat : settingsData.lastClickedFlat;\n const {cameraVector, orbitControlsVector, flatVector} = getWorldData(apt);\n const distanceCorrection = config.threejs.orbitControls.floorplan.minDistanceCorrection;\n const position = targetPosition ? targetPosition : flatVector;\n const aptTarget = new Vector3().copy(orbitControlsVector).setY(position.y);\n const aptPosition =\n new Vector3()\n .subVectors(position,aptTarget)\n .normalize()\n .setY(position.y)\n // .setLength((this.minDistance + this.maxDistance) / 2 * distanceCorrection)\n .setLength(this.minDistance * distanceCorrection)\n .add(aptTarget);\n\n let mixer = GSAPAnimationMixer.getMixer('floorPlan');\n\n const cameraAnimation = animateCamera(\n cameraVector,\n aptPosition,\n orbitControlsVector,\n aptTarget,\n undefined,\n // (this.minDistance + this.maxDistance) / 2,\n this.minDistance,\n this.minAngle,\n 0,\n 1000,\n TWEEN.Easing.Linear.None,\n () => {\n threeJsVariables.trackballControls.minDistance = this.minDistance;\n },\n () => {\n setMinAndMaxControlsDistance(ViewMode.FloorPlan);\n threeJsVariables.orbitControls.saveState();\n }\n );\n\n mixer.addAnimation(cameraAnimation);\n }\n\n async appearCameraAnimation(){\n const {minDistance,maxDistance} = getOrbitControlsDistanceAndPan(ViewMode.Cylinder);\n const {cameraVector, orbitControlsVector} = getWorldData();\n const {minAngle} = getPolarAngleFromViewMode(ViewMode.Cylinder);\n const cameraStartAnimationDistance = threeJsVariables.perspectiveCamera.userData.startAnimationDistance;\n const orbitSaveState = threeJsVariables.orbitControls.target0;\n orbitSaveState.y = this.startHeight;\n const position = new Vector3().subVectors(cameraVector,orbitControlsVector).normalize().setLength(cameraStartAnimationDistance).add(orbitSaveState);\n\n const animation = animateCamera(\n cameraVector,\n position,\n orbitControlsVector,\n orbitSaveState,\n undefined,\n minDistance,\n minAngle,\n config.threejs.orbitControls.polarCameraCorrection,\n 1000,\n TWEEN.Easing.Sinusoidal.InOut,\n () => {\n threeJsVariables.trackballControls.maxDistance = maxDistance;\n },\n () => {\n });\n\n GSAPAnimationMixer.addToMixer('floorPlan',animation);\n }\n\n updateVariables(){\n if (isMobile) {\n const boundingBox = new Box3(\n new Vector3(-15.561922073364258, 0.05396155267953873, -17.564775466918945),\n new Vector3(15.561922073364258, 30.06883430480957, 17.564775466918945)\n );\n\n const size = new Vector3();\n boundingBox.getSize(size);\n const center = new Vector3();\n boundingBox.getCenter(center);\n\n const maxSize = Math.max(size.x, size.y, size.z);\n // const fov = threeJsVariables.perspectiveCamera.fov * (Math.PI / 180);\n // const distance = maxSize / (2 * Math.tan(fov / 2));\n\n this.minDistance = maxSize * 2;\n this.maxDistance = maxSize * 2;\n } else {\n this.minDistance = getOrbitControlsDistanceAndPan(ViewMode.FloorPlan).minDistance;\n this.maxDistance = getOrbitControlsDistanceAndPan(ViewMode.FloorPlan).maxDistance;\n }\n }\n\n async exitFromMode(){\n if (userPrevent())\n return;\n\n return new Promise((resolve => {\n userPrevent(true);\n settingsData.activeModeSwitching = true;\n const mixer = GSAPAnimationMixer.registerNewMixer('floorPlan');\n document.getElementById('app').classList.remove('floor-plan-mode');\n document.getElementById('app').classList.add('cylinder-mode');\n mixer.addCallback('onStart', () => { this.#removeBackButton() });\n mixer.addCallback('onComplete',async () => {\n if (!projectMode.LiteMode.isActive() ||\n projectMode.LiteMode.isActive() && (projectMode.LiteMode.modeIs('regular') || projectMode.LiteMode.modeIs('rotate'))) {\n if (!threeJsVariables.slicer.active) {\n const roof = Buildings.getActiveBuilding().amenities['Roof'].mesh;\n roof.position.y = roof.position.y - 400;\n }\n }\n\n if (isCylinderDisplayModeEqual('show all')) {\n const controlsType = getCylinderModeControlsType();\n setOrbitControls(controlsType);\n setPolarAngle(controlsType);\n setPanLimits(controlsType);\n setMinAndMaxControlsDistance(controlsType);\n } else {\n setOrbitControls(ViewMode.Cylinder);\n setPolarAngle(ViewMode.Cylinder);\n setPanLimits(ViewMode.Cylinder);\n setMinAndMaxControlsDistance(ViewMode.Cylinder);\n }\n\n if (config.resources.sceneObjects.hideAttachedModelInKeyPlan) {\n const building = Buildings.getActiveBuilding();\n showSceneObjects(building);\n }\n\n Favorite.toggle('show');\n settingsData.activeViewMode = 'cylinder';\n setColorsKeyPlan();\n CylinderBase.rotateTexts();\n settingsData.activeModeSwitching = false;\n Favorite.intersect();\n projectMode.QA.tests.Vantages?.removeFloorValidator();\n cylinderFloorNumbers().then(() => {\n showOrHideCylinderFloorNumbers();\n rotateCylinderFloorNumbers();\n });\n userPrevent(false);\n resolve(true);\n });\n\n renderUpdateValuesOnDemand(false);\n settingsData.buildingDestroyed = false;\n settingsData.aptFloorNum = false;\n disableArrowButtons();\n Amenities.show();\n Amenities.showAmenitiesSelectionBoxes();\n if (!isMobile && Buildings.getBuildingsInfoLength() > 1) {\n this.buildingSwitcher.classList.remove('hide');\n enableSwitcherBtns(true);\n }\n flatLabelsRemove();\n if (this.floorSlider)\n this.floorSlider.remove();\n this.appearCameraAnimation();\n floorMoveAnimation(settingsData.currentFloor, 'appear',undefined,'exit');\n if (isMobile) {\n components.mobileSearch.setStateTo('focused');\n components.mobileSearch.update();\n }\n mixer.play();\n }));\n }\n\n #addBackButton() {\n if (!isMobile)\n return;\n\n this.#backButton = new BaseElement('button')\n .addClass('floor-plan__back-button', 'mobile-search__collapse-button', 'icon-back', 'language-string')\n .addAttribute('data-dictionary', 'Back')\n .innerHtml(changeLangToCurrent('Back'))\n .event('click', () => {\n this.exitFromMode();\n components.mobileSearch.unfold();\n components.mobileSearch.filterCards();\n })\n .appendTo(TRoot);\n }\n\n #removeBackButton() {\n if (!isMobile)\n return;\n\n this.#backButton.remove();\n this.#backButton = null;\n }\n}\n","'use strict';\n\nimport {\n Buildings,\n isDesktop, isIOS,\n isMobile,\n isTablet, resourcesFolder,\n settingsData,\n threeJsVariables,\n} from '../../settings';\nimport {\n Mesh,\n ShaderMaterial,\n Vector2,\n TOUCH,\n Group,\n Color,\n Vector3,\n OrthographicCamera,\n MOUSE,\n MeshBasicMaterial,\n TextureLoader,\n EdgesGeometry,\n LineSegments,\n LineBasicMaterial,\n Box3,\n PlaneGeometry,\n Object3D,\n UniformsUtils, LinearSRGBColorSpace, Quaternion, Euler, RepeatWrapping,\n} from 'three';\nimport liteModeVertex from '../threejs/Shaders/liteMode/liteModeVertex.glsl';\nimport liteModeFragment from '../threejs/Shaders/liteMode/liteModeFragment_2.glsl';\nimport * as dat from 'dat.gui';\nimport { compassVisibleToggle } from '../components/compass/compass';\nimport {\n createOrbitToMapButton,\n hideOrbitToMapButton,\n showOrbitToMapButton\n} from '../controls/orbitControls';\nimport gsap from 'gsap';\nimport {\n OrbitToMap\n} from '../threejs/camera';\nimport {\n checkHighlightsAndCrmDataAreInPlace,\n concatPropsAndHighlights,\n createBuildingInfo, setAttributeToPlug, setDataToAmenities,\n setDataToApartment, setDataToPlug, setHardcodeDataToApartment, setHighlights,\n} from '../threejs/autoSelectionBoxes';\nimport {\n addAmenitiesWithoutEngineId, checkImageExists,\n createMaterialAndSetBaseColor,\n getUrlParam, isPortraitMode,\n} from '../../functions';\nimport { Building, BuildingWithoutModel } from '../building/Building';\nimport { ViewMode } from '../../common';\nimport {OrbitControls} from '../../libs/OrbitControls';\nimport { Sea } from '../liveAnimations/litemode/sea/Sea';\nimport { Cars } from '../liveAnimations/litemode/cars/Cars';\nimport { Sky } from '../liveAnimations/litemode/sky/Sky';\nimport { Windows } from '../liveAnimations/litemode/windows/Windows';\nimport { Trees } from '../liveAnimations/litemode/trees/Trees';\nimport { flatLabelPictureLiteMode } from '../components/flatLabels/flatLabels';\nimport { buildingLabelLiteMode } from '../components/building-switch/buildingLabels';\nimport { Plug } from '../liveAnimations/litemode/plug/Plug';\nimport { Loader } from '../threejs/loader/Loader';\nimport { Pass } from 'three/examples/jsm/postprocessing/Pass';\nimport { createTooltip } from '../components/flatTooltip/flatTooltip';\nimport { BaseElement as Button, BaseElement } from '../interfaces/BaseElement';\nimport { Cloudflare } from '../api/Cloudflare';\nimport { CSS2DObject } from '../../libs/CSS2DRenderer';\nimport { getCurrentLang } from '../components/langSwitcher/langSwitcher';\nimport { PhotoSwiperGallery } from '../menu/gallery/galleryDesktop';\nimport { DreamsPreloader } from '../components/preloader/DreamsPreloader';\nimport { BmbyMode } from './BmbyMode';\nimport { SchematicBuilding } from '../threejs/SchematicBuilding/SchematicBuilding';\nimport { getBuildingShape, getGalleryData, getMarketingProps, setBuildingShape } from '../crm/crm-requests';\nimport { Rotor } from './Rotor';\nimport {CylinderBase} from '../cylinderGrid/CylinderBase';\n\nexport class LiteMode extends Pass{\n #renderSizeVec = new Vector2();\n #pointDown = new Vector2();\n #pointUp = new Vector2();\n #maxPan = new Vector3();\n #minPan = new Vector3();\n #vMin = new Vector3();\n #vMax = new Vector3();\n #box = new Box3();\n #zoomTargetSize = new Vector3();\n #zoomTargetCenter = new Vector3();\n #bounceZoom = 0;\n #tryCount = 0;\n #increaseBtn = null;\n #decreaseBtn = null;\n\n constructor () {\n super();\n this.active = config.features.liteMode?.active || false;\n this.material = null;\n this.overlay = null;\n this.imageWidth = 0;\n this.imageHeight = 0;\n this.aspect = new Vector2(1.0, 1.0);\n this.camera = new OrthographicCamera(-1, 1, 1, -1, 0, 1);\n // this.raycaster = new Raycaster();\n this.intersections = [];\n this.intersectedObject = null;\n this.controls = new OrbitControls(this.camera,threeJsVariables.renderer.domElement);\n this.models = [];\n this.blockPointerEvents = false;\n this.settings = {};\n this.currentZoom = 1.0;\n this.prevZoom = 1;\n this.canvas = document.querySelector('#c');\n this.blockEvents = false;\n this.debugActive = getUrlParam('lite-mode-debug');\n this.resourcesUrl = `${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/litemod/`;\n this.mode = 'picture';\n this.textureLoader = new TextureLoader();\n this.debug = config.features.liteMode?.debug || false;\n this.zoomTarget = null;\n this.pictureModeOrbitIntersections = [];\n this.debug = config.features.liteMode?.debug || false;\n this.debugFolder = null;\n this.depthUpdate = true;\n this.flatLabelsForPictureMode = [];\n\n switch (config.features.liteMode?.mode) {\n case 'regular':\n this.mode = 'regular';\n break;\n case 'schematic':\n this.mode = 'schematic';\n break;\n case 'empty':\n this.mode = 'empty';\n break;\n case 'rotate':\n this.mode = 'rotate';\n break;\n }\n\n if (isMobile || isTablet) {\n this.imageUrl = `${config.cdnRepository}/resize/image/width=2000,quality=70/${config.projectFolder}/${resourcesFolder}/litemod/`;\n } else if (isDesktop) {\n this.imageUrl = `${config.cdnRepository}/resize/image/width=4000,quality=95/${config.projectFolder}/${resourcesFolder}/litemod/`;\n } else {\n this.imageUrl = `${config.cdnRepository}/resize/image/width=4000,quality=70/${config.projectFolder}/${resourcesFolder}/litemod/`;\n }\n }\n\n async init (loader) {\n if (!this.isActive()) return;\n\n const { images, settings, mapping,models } = config.features.liteMode;\n this.settings = settings;\n this.models = models;\n this.amenities = config.features.liteMode.amenities || [];\n\n this.controls.screenSpacePanning = true;\n this.controls.minZoom = 1;\n this.controls.maxZoom = settings.zoom.max;\n this.controls.mouseButtons = {\n LEFT: MOUSE.PAN,\n MIDDLE: MOUSE.DOLLY\n };\n\n this.controls.touches = {\n ONE: TOUCH.PAN,\n TWO: TOUCH.DOLLY_PAN\n };\n\n this.controls.enableDamping = isMobile ? false : settings.damping.active;\n this.controls.dampingFactor = settings.damping.dampingFactor;\n this.controls.zoomSpeed = settings.zoom.step;\n\n this.controls.maxPan = this.#maxPan;\n this.controls.minPan = this.#minPan;\n this.controls.object.zoom = settings.zoom.initial;\n this.controls.object.updateProjectionMatrix();\n\n this.controls.addEventListener('change', this.#controlsHandler.bind(this));\n\n if (this.debug) {\n const gui = new dat.GUI();\n this.debugFolder = gui.addFolder('LiteMode');\n }\n\n // Load selections\n const textureLoader = loader.textureLoader;\n const fbxLoader = loader.fbxLoader;\n const versionedMapping = `${mapping}?v=${Cloudflare.version}`;\n if (!this.modeIs('empty') && !this.modeIs('rotate')) {\n fbxLoader.load(this.resourcesUrl + versionedMapping, selections => {\n selections.traverse(el => {\n if (el.isMesh) {\n\n const newMaterial = new MeshBasicMaterial({\n depthTest: false,\n depthWrite: false,\n transparent: true,\n opacity: 0\n });\n\n const geom = el.geometry.clone();\n const mesh = new Mesh(geom,newMaterial);\n mesh.name = el.name;\n mesh.scale.copy(el.scale);\n mesh.position.set(el.position.x,el.position.y,-0.2);\n\n sceneObjects.add(mesh);\n\n if (this.mode !== 'picture'){\n mesh.userData.type = 'building';\n }\n\n this.intersections.push(mesh);\n settingsData.objects_to_intersection.push(mesh);\n }\n });\n });\n }\n\n const sceneObjects = new Group();\n this.group = sceneObjects;\n\n let depthImage = null;\n let nightTexture = null;\n let generalImage = null;\n \n let url = `${this.imageUrl}${images.general}?v=${Cloudflare.version}`;\n if (this.modeIs('empty')) {\n const response = await getGalleryData();\n const mainImage = response.data && response.data\n .flatMap(dataItem => dataItem?.pictures || [])\n .find(picture => picture?.mainImage);\n \n if (mainImage) {\n url = mainImage.imageUrl;\n }\n }\n \n if (!this.modeIs('rotate')) {\n generalImage = textureLoader.load(url, loadedImage => {\n loadedImage.colorSpace = LinearSRGBColorSpace;\n threeJsVariables.renderer.initTexture(loadedImage);\n this.imageWidth = loadedImage.image.width;\n this.imageHeight = loadedImage.image.height;\n \n this.updateAspect();\n });\n }\n\n this.depthSettings = {\n depthTexture: { value: null },\n depthFocus: { value: 0 },\n depthStrength: { value:0 },\n uDepthMouse: { value: new Vector2() },\n gyroscope: 1\n };\n\n if (typeof images.depth === 'object' && images.depth.image && !this.modeIs('rotate')){\n\n if ((isMobile || isTablet)) {\n if (!DeviceMotionEvent) {\n console.warn(\"This browser does not support requesting DeviceMotionEvent permission.\");\n return;\n }\n window.gsens = -2.5;\n this.gimbal = new Gimbal();\n\n if (!isIOS) {\n window.addEventListener('deviceorientation', () => {\n this.gimbal.update();\n threeJsVariables.gyroscope.x = Math.min(Math.max( this.gimbal.yaw * this.depthSettings.gyroscope,-1),1);\n threeJsVariables.gyroscope.y = Math.min(Math.max( this.gimbal.pitch * this.depthSettings.gyroscope,-1),1);\n\n this.updateDepthPosition(threeJsVariables.gyroscope,'gyroscope');\n }, false);\n\n this.gimbal.enable();\n this.gimbal.recalibrate();\n }\n }\n\n this.depthSettings.depthTexture.value = textureLoader.load(this.imageUrl + images.depth.image,loadedTexture => {\n loadedTexture.colorSpace = LinearSRGBColorSpace;\n });\n this.depthSettings.depthFocus.value = images.depth.focus || 0;\n this.depthSettings.depthStrength.value = images.depth.strength || 0;\n\n if (this.debug) {\n const depthFolder = this.debugFolder.addFolder('Depth');\n depthFolder.add(this.depthSettings.depthFocus,'value',-1,0,0.001).name('Focus').onChange(v => this.material.uniforms.depthFocus.value = v);\n depthFolder.add(this.depthSettings.depthStrength,'value',0,5,0.001).name('Strength').onChange(v => this.material.uniforms.depthStrength.value = v);\n depthFolder.add(this.depthSettings,'gyroscope',-5,5,0.1);\n }\n }\n\n if (images.night && !this.modeIs('rotate')) {\n nightTexture = textureLoader.load(`${this.imageUrl}${images.night}?v=${Cloudflare.version}`);\n nightTexture.colorSpace = LinearSRGBColorSpace;\n }\n\n this.sky = new Sky(this.resourcesUrl,fbxLoader);\n this.sky.create().then(model => {\n if (typeof model === 'string') return;\n sceneObjects.add(model);\n threeJsVariables.renderList.reorder();\n });\n\n this.sea = new Sea(this.resourcesUrl,generalImage,nightTexture,fbxLoader,depthImage);\n this.sea.create().then((mesh)=>{\n if (typeof mesh === 'string') return;\n sceneObjects.add(mesh);\n threeJsVariables.renderList.reorder();\n });\n\n this.cars = new Cars(this.resourcesUrl,fbxLoader);\n this.cars.create().then(model => {\n if (typeof model === 'string') return;\n sceneObjects.add(model);\n threeJsVariables.renderList.reorder();\n });\n\n this.plug = new Plug(this.resourcesUrl,generalImage,nightTexture,fbxLoader);\n this.plug.create().then((mesh) => {\n if (typeof mesh === 'string') return;\n sceneObjects.add(mesh);\n threeJsVariables.renderList.reorder();\n });\n\n this.windows = new Windows(this.resourcesUrl,fbxLoader);\n this.windows.create().then(model => {\n if (typeof model === 'string') return;\n sceneObjects.add(model);\n threeJsVariables.renderList.reorder();\n });\n\n this.trees = new Trees(this.resourcesUrl,generalImage,nightTexture,fbxLoader,depthImage);\n this.trees.create().then(model => {\n if (typeof model === 'string') return;\n sceneObjects.add(model);\n threeJsVariables.renderList.reorder();\n });\n\n const geometry = new PlaneGeometry(2, 2, 1, 1);\n\n this.material = new ShaderMaterial({\n vertexShader: liteModeVertex,\n transparent: true,\n fragmentShader: liteModeFragment,\n uniforms: {\n generalTexture: {\n value: generalImage,\n },\n readBufferTexture: {\n value: null\n },\n readBufferSize: {\n value: new Vector2()\n },\n generalNightTexture: {\n value: nightTexture\n },\n orbitToMapProgress: {\n value: 0.0\n },\n uCircleScale: {\n value: 0.0\n },\n uSubstrateOpacity: {\n value: 0.0\n },\n progress: {\n value: 0.0\n },\n uTime: {\n value: 0.0,\n },\n uTimesOfDay: {\n value: 0.0\n }\n },\n });\n\n this.material.uniforms = UniformsUtils.merge([this.material.uniforms,this.depthSettings]);\n\n this.overlay = new Mesh(geometry, this.material);\n this.overlay.scale.set(1 / this.aspect.x, 1 / this.aspect.y, 1);\n this.overlay.name = 'Lite mode';\n this.overlay.add(sceneObjects);\n\n threeJsVariables.scene.add(this.overlay);\n threeJsVariables.renderList.reorder();\n\n this.#controlsHandler(undefined,true);\n\n this.controls.target.set(this.settings.zoom.position.x,this.settings.zoom.position.y,0);\n this.camera.position.set(this.settings.zoom.position.x,this.settings.zoom.position.y,0);\n this.createAmenities();\n \n if (this.modeIs('rotate')) {\n this.controls.mouseButtons.LEFT = null;\n this.controls.touches.ONE = null;\n this.controls.mouseButtons.RIGHT = MOUSE.PAN;\n this.controls.maxZoom /= 2;\n this.rotor = new Rotor(this,loader);\n }\n }\n\n iosGyroscopePermission() {\n if (isMobile && isIOS && this.isActive() && this.modeIs('empty') && this.gimbal) {\n DeviceMotionEvent.requestPermission && DeviceOrientationEvent.requestPermission().then(response => {\n if (response === 'granted') {\n window.addEventListener('deviceorientation', () => {\n this.gimbal.update();\n threeJsVariables.gyroscope.x = Math.min(Math.max( this.gimbal.yaw,-1),1);\n threeJsVariables.gyroscope.y = Math.min(Math.max( this.gimbal.pitch,-1),1);\n this.updateDepthPosition(threeJsVariables.gyroscope,'gyroscope');\n }, false);\n this.gimbal.enable();\n this.gimbal.recalibrate();\n }\n });\n }\n }\n\n #controlsHandler(e,manualUpdate = false) {\n if (!this.isActive() || !this.isVisible() || this.currentZoom === this.camera.zoom && !manualUpdate) return;\n\n this.currentZoom = this.camera.zoom;\n\n const planeSizeX = 2 * this.overlay.scale.x;\n const planeSizeY = 2 * this.overlay.scale.y;\n const x = (planeSizeX * this.currentZoom - 2) / 2 / this.currentZoom;\n const y = (planeSizeY * this.currentZoom - 2) / 2 / this.currentZoom;\n\n this.#vMin.set(-x,-y,0);\n this.#vMax.set(x,y,0);\n\n this.controls.target.clamp(this.#vMin,this.#vMax);\n this.controls.object.position.clamp(this.#vMin,this.#vMax);\n\n this.#maxPan.set(x,y,0);\n this.#minPan.set(-x,-y ,0);\n\n this.zoomListener();\n this.prevZoom = this.currentZoom;\n this.resizeFlatLabels();\n }\n\n createAmenities() {\n if (!this.amenities.length) return;\n\n this.amenitiesGroup = new Group();\n this.amenitiesGroup.name = 'Amenities';\n this.overlay.add(this.amenitiesGroup);\n\n this.amenities.forEach(amenity => {\n const label = new LiteModeAmenities(amenity);\n label.position.set(amenity.position.x,amenity.position.y,0);\n this.amenitiesGroup.add(label);\n });\n }\n\n amenitiesToggle(state) {\n if (!this.amenitiesGroup) return;\n\n this.amenitiesGroup.traverse(el => {\n if (el.type === 'Object3D') {\n if (state === 'show') {\n el.element.classList.remove('hidden');\n } else {\n el.element.classList.add('hidden');\n }\n }\n });\n }\n\n buildingLabelsToggle(state) {\n const labels = this.group.getObjectByName('Labels');\n if (labels) {\n labels.traverse(el => {\n if (el.type === 'Object3D') {\n if (state === 'show') {\n el.element.classList.remove('hidden');\n } else {\n el.element.classList.add('hidden');\n }\n }\n });\n }\n }\n\n resizeFlatLabels() {\n if (!this.modeIs('picture') || !this.flatLabelsForPictureMode.length) return;\n\n if (isMobile) {\n let zoom = 1;\n if (isPortraitMode()) {\n zoom = Math.min(Math.max(this.camera.zoom - 1, 0.4), 1);\n } else {\n zoom = 1 - 1 / this.camera.zoom;\n }\n this.flatLabelsForPictureMode.forEach(label => {\n label.userData.zoom = this.camera.zoom > 1.5 ? zoom : 0;\n });\n } else {\n this.flatLabelsForPictureMode.forEach(label => {\n label.userData.zoom = Math.min(Math.max(this.camera.zoom - 1, 0.6), 1);\n });\n }\n }\n\n async loadBuildingModel() {\n if (this.mode === 'picture'){\n const edgesColor = new Color().setStyle(config.features.liteMode.settings.edges?.color || '#000000',LinearSRGBColorSpace);\n const allBuildings = config.crmProjectSettings.buildings;\n\n allBuildings.forEach(building => {\n const buildingObject = new BuildingWithoutModel(building.buildingEngineId,settingsData.allCrmData,{data: config.crmProjectSettings});\n buildingObject.apartments = settingsData.objects_to_intersection.filter(mesh => mesh.name.startsWith(building.buildingEngineId));\n\n buildingObject.apartments.forEach(apt => {\n const existProp = settingsData.allCrmData.find(prop => prop.engineId === apt.name);\n if (existProp) {\n setDataToApartment(apt, existProp);\n\n const edges = new EdgesGeometry(apt.geometry);\n const line = new LineSegments(edges, new LineBasicMaterial({\n color: edgesColor ,\n transparent: true,\n opacity: 0,\n depthTest: false\n }));\n line.name = 'edges';\n\n apt.add(line);\n }\n });\n\n settingsData.objects_to_intersection = settingsData.objects_to_intersection.filter(mesh => !mesh.name.startsWith(building.buildingEngineId));\n settingsData.objects_to_intersection.forEach(obj => obj.userData.type = 'building');\n\n Buildings.addBuilding(building.buildingEngineId,buildingObject);\n });\n\n this.zoomTarget = settingsData.objects_to_intersection.find(el => el.name === config.resources.bundle.building.name) || null;\n this.pictureModeOrbitIntersections = settingsData.objects_to_intersection;\n if (!isMobile) createTooltip();\n\n } else if (this.mode === 'schematic'){\n const projectModels = config.features.liteMode.models;\n const loader = new Loader();\n \n function prepareSelections (selBox,currentBuilding) {\n selBox.traverse((element) => {\n if (element.isMesh) {\n\n const currentFloor = parseInt(element.parent.name.split('_')[1]);\n\n if (!element.name.startsWith(config.resources.bundle.selectionBoxes.floorPlugName)){\n\n const existProp = settingsData.allCrmData.find(prop => prop.engineId === element.name);\n if (existProp) {\n setDataToApartment(element, existProp);\n createMaterialAndSetBaseColor(element);\n currentBuilding.apartments.push(element);\n } else {\n setHardcodeDataToApartment(element, currentFloor);\n createMaterialAndSetBaseColor(element);\n }\n\n } else {\n setAttributeToPlug(element, currentFloor);\n setDataToPlug(element, currentFloor);\n currentBuilding.floorsPlug.push({floor: currentFloor, data: element});\n }\n\n if (element.name.match(/_amenity_/g)) {\n createMaterialAndSetBaseColor(element);\n setDataToAmenities(element);\n if (element.userData.crm_data)\n currentBuilding.customSelections.push(element);\n }\n }\n });\n \n selBox.children.forEach((child) => {\n const currentFloor = parseInt(child.name.split('_')[1]);\n child.userData.basePosition = new Vector3(child.position.x, child.position.y, child.position.z);\n currentBuilding.selections.push({floor: currentFloor, data: child.children});\n currentBuilding.floorSliderNumbers.push(currentFloor);\n });\n \n currentBuilding.floorSliderNumbers.sort((a,b) => b - a);\n }\n \n if (projectModels.length === 0) {\n config.threejs.compass.correction = 0;\n threeJsVariables.slicer.params.distance = 500000;\n threeJsVariables.slicer.setDefaultPlanes();\n threeJsVariables.sceneObjectsSlicer.params.distance = 500000;\n threeJsVariables.sceneObjectsSlicer.setDefaultPlanes();\n CylinderBase.updateRotation();\n \n threeJsVariables.schematicBuilding = new SchematicBuilding(settingsData.allCrmData);\n const type = config.features.liteMode.buildingType;\n \n if (type) {\n if (Array.isArray(type)) {\n threeJsVariables.schematicBuilding.type = 'custom';\n threeJsVariables.schematicBuilding.setShape(type);\n } else {\n threeJsVariables.schematicBuilding.type = type;\n }\n } else {\n const response = await getBuildingShape();\n if (response && response.data) {\n threeJsVariables.schematicBuilding.type = response.data.type;\n if (threeJsVariables.schematicBuilding.type === 'custom') {\n threeJsVariables.schematicBuilding.setShape(response.data.shape);\n }\n \n if (response.data.advanced) {\n threeJsVariables.schematicBuilding.advancedSettings = response.data.advanced;\n }\n }\n }\n \n if (getUrlParam('mode') === 'tools') {\n threeJsVariables.schematicBuilding.createUI();\n }\n threeJsVariables.schematicBuilding.create();\n const selections = [];\n \n Object.entries(threeJsVariables.schematicBuilding.buildings).forEach(([name,data]) => {\n selections.push(data.selectionsGroup);\n const model = data.buildingGroup.children[0];\n model.layers.set(0);\n const building = new Building(model);\n const modelGroup = building.create();\n data.buildingGroup.removeFromParent();\n threeJsVariables.schematicBuilding.buildingGroup.add(modelGroup);\n building.amenities.Roof = new Object3D();\n threeJsVariables.slicer.add(model);\n });\n \n concatPropsAndHighlights({data:settingsData.allCrmData},selections,{data: config.crmProjectSettings});\n threeJsVariables.scene.add(threeJsVariables.schematicBuilding.buildingGroup);\n\n setHighlights(threeJsVariables.schematicBuilding.selectionsGroup);\n\n buildingLabelLiteMode();\n if (!isMobile) createTooltip();\n return;\n }\n \n const fbxLoader = loader.fbxLoader;\n const selectionBoxesModels = {};\n const selectionBoxesCrmData = {};\n const projectGroup = new Group();\n projectGroup.name = 'Project Selection Boxes';\n\n for (let i = 0; i < projectModels.length; i++) {\n const url = this.resourcesUrl + projectModels[i].building + '_selectBoxes.fbx';\n fbxLoader.load(url,loadedModel => {\n projectGroup.add(loadedModel);\n loadedModel.name = loadedModel.name.split('_')[0];\n selectionBoxesModels[loadedModel.name.split('_')[0]] = loadedModel;\n });\n }\n\n loader.addCallback = () => {\n for (let key in selectionBoxesModels) {\n // const floorsPlug = [];\n new Building(selectionBoxesModels[key]).create();\n const currentBuilding = Buildings.getBuilding(key);\n \n prepareSelections(selectionBoxesModels[key],currentBuilding);\n\n addAmenitiesWithoutEngineId(currentBuilding);\n \n currentBuilding.selectionsGroup = selectionBoxesModels[key];\n currentBuilding.model = null;\n currentBuilding.instances = null;\n currentBuilding.info = createBuildingInfo(selectionBoxesModels[key], settingsData.allCrmData, {data: config.crmProjectSettings});\n }\n\n setHighlights(projectGroup);\n buildingLabelLiteMode();\n if (!isMobile) createTooltip();\n };\n } else if (this.mode === 'empty') {\n const allBuildings = config.crmProjectSettings.buildings;\n\n allBuildings.forEach(building => {\n const buildingObject = new BuildingWithoutModel(building.buildingEngineId, settingsData.allCrmData, {data: config.crmProjectSettings});\n buildingObject.apartments = buildingObject.info.crm_data.map((el,index) => {\n const obj = new Object3D();\n obj.name = el.engineId;\n obj.material = new MeshBasicMaterial();\n setDataToApartment(obj,el,index);\n return obj;\n });\n Buildings.addBuilding(building.buildingEngineId,buildingObject);\n });\n buildingLabelLiteMode();\n }\n\n checkHighlightsAndCrmDataAreInPlace(settingsData.allCrmData);\n }\n\n activeViewMode() {\n if (!this.isActive()) return;\n\n switch (this.mode) {\n case 'picture':\n case 'empty':\n\n switch (settingsData.activeViewMode) {\n case ViewMode.Cylinder:\n\n this.#pictureCylinderLogic();\n\n break;\n case ViewMode.Orbit:\n\n this.#pictureOrbitLogic();\n\n break;\n\n }\n\n break;\n case 'schematic':\n\n break;\n }\n }\n\n updateDepthPosition(vec2 = threeJsVariables.mouse,type = 'pointer') {\n if (this.material.uniforms.depthTexture.value && this.depthUpdate) {\n if (isMobile || isTablet) {\n if (type === 'gyroscope') {\n this.material.uniforms.uDepthMouse.value.copy(vec2);\n this.sea.updateDepthPosition(vec2);\n this.trees.updateDepthPosition(vec2);\n }\n } else {\n this.material.uniforms.uDepthMouse.value.copy(vec2);\n this.sea.updateDepthPosition(vec2);\n this.trees.updateDepthPosition(vec2);\n }\n }\n }\n\n #pictureOrbitLogic() {\n // Remove flat labels\n this.depthUpdate = true;\n this.intersections.forEach(mesh => {\n mesh.traverse(child => {\n if (child.name === 'edges'){\n child.material.opacity = 0;\n } else if (child.name === 'label'){\n child.removeFromParent();\n }\n });\n });\n\n // Restore overlay color\n const substrate = {value: 0.5};\n\n gsap.to(substrate,{\n value: 0.0,\n duration: 0.5,\n onUpdate: () => {\n this.material.uniforms.uSubstrateOpacity.value = substrate.value;\n }\n });\n\n }\n\n #pictureAutoZoom() {\n if (!this.zoomTarget) return;\n\n this.#box.setFromObject(this.zoomTarget).getSize(this.#zoomTargetSize);\n this.#box.setFromObject(this.zoomTarget).getCenter(this.#zoomTargetCenter);\n\n this.controls.target.set(this.#zoomTargetCenter.x,this.#zoomTargetCenter.y,0);\n this.camera.position.set(this.#zoomTargetCenter.x,this.#zoomTargetCenter.y,0);\n\n const maxSize = Math.max(this.#zoomTargetSize.x,this.#zoomTargetSize.y);\n\n this.camera.zoom = 1 / (maxSize / 2) - 0.05;\n this.camera.updateProjectionMatrix();\n }\n\n #pictureCylinderLogic() {\n\n // Create flat labels\n this.depthUpdate = false;\n this.intersections.forEach(mesh => {\n mesh.traverse(child => {\n if (child.name === 'edges'){\n child.material.opacity = 1;\n const label = flatLabelPictureLiteMode(mesh);\n this.flatLabelsForPictureMode.push(label);\n }\n });\n });\n\n // Change overlay color\n const substrate = {value: 0};\n\n gsap.to(substrate,{\n value: 0.5,\n duration: 0.5,\n onUpdate: () => {\n this.material.uniforms.uSubstrateOpacity.value = substrate.value;\n this.#pictureAutoZoom();\n }\n });\n\n\n }\n\n switchSelections() {\n return;\n if (this.isActive() && this.modeIs('schematic')){\n const buildings = Buildings.getBuildingsArray();\n buildings.forEach(building => {\n if (!building.isActive) {\n building.selectionsGroup.traverse(el => {\n if (el.isMesh && el.visible && !el.name.startsWith(config.resources.bundle.selectionBoxes.floorPlugName)){\n gsap.to(el.material,{\n transparent: true,\n opacity: 0,\n onStart:() => {\n const edges = el.getObjectByName('Outline');\n if (edges) {\n edges.visible = false;\n }\n },\n onComplete: () => {\n el.visible = false;\n }\n });\n }\n });\n } else {\n building.selectionsGroup.traverse(el => {\n if (el.isMesh && !el.visible && !el.name.startsWith(config.resources.bundle.selectionBoxes.floorPlugName)){\n gsap.to(el.material,{\n transparent: true,\n opacity: 1,\n onStart: () => {\n el.visible = true;\n const edges = el.getObjectByName('Outline');\n if (edges) {\n edges.visible = true;\n }\n },\n onComplete: () => {\n el.material.transparent = false;\n }\n });\n }\n });\n }\n });\n }\n }\n\n render(renderer, writeBuffer, readBuffer) {\n if (this.isActive() && this.isVisible()){\n renderer.setRenderTarget(writeBuffer);\n renderer.render(this.overlay, this.camera);\n // this.material.uniforms.readBufferTexture.value = threeJsVariables.composer.composer.passes[0].over.texture;\n // this.material.uniforms.readBufferSize.value.set(readBuffer.width,readBuffer.height);\n }\n }\n\n zoomListener(target){\n if (!this.isVisible() || this.blockEvents) return;\n\n this.#decreaseBtn = document.querySelector('.zoom__controls__btn[data-zoom-btn=\"decrease\"]');\n this.#increaseBtn = document.querySelector('.zoom__controls__btn[data-zoom-btn=\"increase\"]');\n\n if (target){\n switch (target.dataset.zoomBtn) {\n case 'decrease':\n !this.#decreaseBtn?.classList.contains('disabled') && this.controls.dollyOutCamera();\n break;\n case 'increase':\n !this.#increaseBtn?.classList.contains('disabled') && this.controls.dollyInCamera();\n break;\n }\n }\n\n if (this.currentZoom === this.controls.minZoom) {\n this.#decreaseBtn?.classList.add('disabled');\n\n // if (this.#tryCount > 1){\n // OrbitToMap();\n // this.#decreaseBtn?.classList.remove('disabled');\n // this.#tryCount = 0;\n // return;\n // }\n\n showOrbitToMapButton();\n\n // this.#borderBounce();\n\n } else if (this.currentZoom > this.#bounceZoom && this.currentZoom < this.controls.maxZoom) {\n hideOrbitToMapButton();\n this.#increaseBtn?.classList.remove('disabled');\n //this.#decreaseBtn?.classList.remove('disabled');\n this.#tryCount = 0;\n this.blockEvents = false;\n } else if (this.currentZoom === this.controls.maxZoom){\n this.#increaseBtn?.classList.add('disabled');\n this.blockEvents = false;\n }\n }\n\n #borderBounce(){\n if (this.blockEvents || settingsData.activeViewMode !== ViewMode.Orbit ) return;\n this.blockEvents = true;\n\n const bounce = { value: this.currentZoom};\n\n gsap.to(bounce,{\n value: this.currentZoom * 1.1,\n duration: 0.2,\n onStart: () => {\n this.#bounceZoom = this.currentZoom * 1.1;\n },\n onUpdate: () => {\n this.currentZoom = bounce.value;\n this.camera.zoom = this.currentZoom;\n this.camera.updateProjectionMatrix();\n },\n onComplete: () => {\n this.blockEvents = false;\n this.#decreaseBtn?.classList.remove('disabled');\n this.#tryCount ++;\n }\n });\n }\n\n runProjectStartAdditionalFunctions(){\n if (!this.isActive() || BmbyMode.active) return;\n\n compassVisibleToggle('hide');\n createOrbitToMapButton();\n\n threeJsVariables.orbitControls.enabled = false;\n threeJsVariables.trackballControls.enabled = false;\n\n }\n\n updateAspect () {\n if (!this.isActive() || this.debugActive) return;\n threeJsVariables.renderer.getSize(this.#renderSizeVec);\n const imageAspect = this.imageWidth / this.imageHeight;\n const renderAspect = this.#renderSizeVec.x / this.#renderSizeVec.y;\n\n if (renderAspect < imageAspect) {\n this.aspect.set(renderAspect / imageAspect, 1.0);\n } else {\n this.aspect.set(1.0, imageAspect / renderAspect);\n }\n }\n\n preventPointerEvents(action = undefined){\n if (!this.isActive()) return false;\n\n if (action !== undefined){\n this.blockPointerEvents = action;\n } else {\n return this.blockPointerEvents;\n }\n }\n\n controlsToggle(enable){\n if (!this.isActive()) return;\n threeJsVariables.orbitControls.enabled = enable;\n threeJsVariables.trackballControls.enabled = enable;\n }\n\n resizeContainer () {\n if (!this.isActive() || !this.isVisible()) return;\n this.updateAspect();\n this.overlay.scale.set(1 / this.aspect.x, 1 / this.aspect.y, 1);\n this.rotor?.resize();\n // if (isMobile || isTablet) {\n // this.#pictureAutoZoom();\n // }\n this.#controlsHandler(undefined,true);\n this.gimbal?.recalibrate();\n }\n\n setDefaultPosition(){\n if (!this.isActive() || !this.isVisible()) return;\n\n this.updateAspect();\n this.overlay.scale.set(1 / this.aspect.x, 1 / this.aspect.y, 1);\n\n this.currentZoom = this.settings.zoom.initial;\n this.camera.zoom = this.currentZoom;\n this.controls.target.set(this.settings.zoom.position.x,this.settings.zoom.position.y,0);\n this.camera.position.set(this.settings.zoom.position.x,this.settings.zoom.position.y,0);\n this.camera.updateProjectionMatrix();\n\n const planeSizeX = 2 * this.overlay.scale.x;\n const planeSizeY = 2 * this.overlay.scale.y;\n const x = (planeSizeX * this.currentZoom - 2) / 2 / this.currentZoom;\n const y = (planeSizeY * this.currentZoom - 2) / 2 / this.currentZoom;\n\n const vMin = new Vector3(-x ,-y ,0);\n const vMax = new Vector3(x,y ,0);\n\n this.controls.target.clamp(vMin,vMax);\n this.controls.object.position.clamp(vMin,vMax);\n\n this.#maxPan.set(x,y,0);\n this.#minPan.set(-x,-y ,0);\n\n this.intersections.forEach(mesh => {\n mesh.traverse(child => {\n if (child.name.startsWith('labelTower')){\n child.element.classList.add('active');\n }\n });\n });\n\n }\n\n updateTime (delta) {\n if (!this.isActive() || !this.isVisible()) return;\n this.controls.update();\n this.material.uniforms.uTime.value += delta;\n this.sea.updateTime(delta);\n this.cars.updateTime(delta);\n this.sky.updateTime(delta);\n this.windows.updateTime(delta);\n this.trees.updateTime(delta);\n }\n\n updateTimesOfDay(time) {\n if (!this.isActive() || !this.isVisible()) return;\n\n this.material.uniforms.uTimesOfDay.value = time;\n }\n\n showLiteMode () {\n if (this.blockEvents) return;\n\n if (this.modeIs('picture') || this.modeIs('empty')){\n this.resizeContainer();\n this.cars.switcher('show');\n this.sea.switcher('show');\n this.plug.switcher('show');\n this.sky.switcher('show');\n this.trees.switcher('show');\n this.windows.switcher('show');\n\n return;\n }\n\n this.blockEvents = true;\n\n const scale = { value: this.material.uniforms.uCircleScale.value};\n\n gsap.to(scale,{\n value: 0,\n duration: 1.0,\n onUpdate: () => {\n this.material.uniforms.uCircleScale.value = scale.value;\n this.resizeContainer();\n },\n onStart: () => {\n this.#layerVisibility(true);\n this.rotor?.enable(true);\n this.enabled = true;\n this.updateAspect();\n this.preventPointerEvents(true);\n threeJsVariables.orbitControls.enabled = false;\n threeJsVariables.trackballControls.enabled = false;\n },\n onComplete: () => {\n settingsData.objects_to_intersection = settingsData.objects_to_intersection.concat(this.intersections);\n this.intersections.forEach(mesh => {\n mesh.traverse(child => {\n if (child.name.startsWith('labelTower')){\n child.element.classList.add('active');\n }\n });\n });\n this.amenitiesToggle('show');\n this.buildingLabelsToggle('show');\n this.blockEvents = false;\n this.controls.enabled = true;\n this.preventPointerEvents(false);\n this.resizeContainer();\n this.cars.switcher('show');\n this.sea.switcher('show');\n this.plug.switcher('show');\n this.sky.switcher('show');\n this.trees.switcher('show');\n this.windows.switcher('show');\n this.sceneVisibility(false);\n }\n })\n }\n\n #layerVisibility(state){\n this.overlay.visible = state;\n }\n\n hideLiteMode () {\n if (this.blockEvents) return;\n\n if (this.modeIs('picture') || this.modeIs('empty')) {\n this.cars.switcher('hide');\n this.sea.switcher('hide');\n this.plug.switcher('hide');\n this.sky.switcher('hide');\n this.trees.switcher('hide');\n this.windows.switcher('hide');\n\n return;\n }\n\n this.blockEvents = true;\n this.controls.enabled = false;\n this.preventPointerEvents(true);\n this.amenitiesToggle('hide');\n this.buildingLabelsToggle('hide');\n this.sceneVisibility(true);\n\n const scale = { value: 0};\n const duration = BmbyMode.active ? 0.00001 : 2;\n\n gsap.to(scale,{\n value: 1.5,\n duration: duration,\n onStart: () => {\n this.cars.switcher('hide');\n this.sea.switcher('hide');\n this.plug.switcher('hide');\n this.sky.switcher('hide');\n this.trees.switcher('hide');\n this.windows.switcher('hide');\n this.rotor?.enable(false);\n },\n onUpdate: () => {\n this.material.uniforms.uCircleScale.value = scale.value;\n if (scale.value > 1.15) {\n this.enabled = false;\n }\n this.resizeContainer();\n },\n onComplete: () => {\n // this.enabled = false;\n this.#layerVisibility(false);\n this.intersections.forEach(mesh => {\n mesh.traverse(child => {\n if (child.name.startsWith('labelTower')){\n child.element.classList.remove('active');\n }\n });\n });\n this.preventPointerEvents(false);\n threeJsVariables.orbitControls.enabled = true;\n threeJsVariables.trackballControls.enabled = true;\n this.blockEvents = false;\n }\n })\n }\n \n sceneVisibility(state) {\n if (!this.isActive())\n return;\n \n ['Project Buildings','Scene objects','Background'].forEach(name => {\n const object = threeJsVariables.scene.getObjectByName(name);\n if (object) {\n object.visible = state;\n }\n });\n }\n\n cloudsToggle(action) {\n this.sky.cloudsToggle(action);\n }\n\n rainbowToggle(action) {\n this.sky.rainbowToggle(action);\n }\n\n mapAnimation(state){\n if (this.blockEvents)\n return;\n\n this.blockEvents = true;\n this.controls.enabled = false;\n this.preventPointerEvents(true);\n this.amenitiesToggle('hide');\n this.buildingLabelsToggle('hide');\n\n const progress = { start: 0, end: 0 };\n\n this.intersections.forEach(mesh => {\n mesh.traverse(child => {\n if (child.name.startsWith('labelTower')){\n child.element.classList.remove('active');\n }\n });\n });\n\n switch (state) {\n case 'toMap':\n progress.end = 1.3;\n this.controls.enabled = false;\n break;\n case 'toOrbit':\n progress.start = 1.3;\n progress.end = 0.0;\n this.controls.enabled = true;\n break;\n\n }\n\n return new Promise(resolve => {\n gsap.to(progress,{\n start: progress.end,\n duration: 2.0,\n onUpdate: () => {\n this.material.uniforms.orbitToMapProgress.value = progress.start;\n },\n onComplete: () => {\n this.material.uniforms.orbitToMapProgress.value = 0;\n this.currentZoom = this.settings.zoom.initial;\n this.camera.zoom = this.currentZoom;\n this.blockEvents = false;\n this.controls.enabled = true;\n this.preventPointerEvents(false);\n if (state === 'toOrbit'){\n this.intersections.forEach(mesh => {\n mesh.traverse(child => {\n if (child.name.startsWith('labelTower')){\n child.element.classList.add('active');\n }\n });\n });\n this.amenitiesToggle('show');\n this.buildingLabelsToggle('show');\n }\n\n this.#controlsHandler(undefined,true);\n this.sea.switcher('show');\n this.plug.switcher('show');\n this.sky.switcher('show');\n this.trees.switcher('show');\n this.cars.switcher('show');\n this.windows.switcher('show');\n resolve();\n },\n onStart: () => {\n hideOrbitToMapButton();\n this.#decreaseBtn?.classList.remove('disabled');\n this.#increaseBtn?.classList.remove('disabled');\n this.sea.switcher('hide');\n this.plug.switcher('hide');\n this.cars.switcher('hide');\n this.sky.switcher('hide');\n this.trees.switcher('hide');\n this.windows.switcher('hide');\n }\n });\n });\n }\n\n moveCameraToBuilding(name) {\n // console.log('move camera to building');\n // return;\n // const start = {\n // zoom: this.currentZoom,\n // x: this.material.uniforms.uMouse.value.x,\n // y: this.material.uniforms.uMouse.value.y\n // };\n //\n // const buildingObject = this.maps.find(el => el.building === name);\n // const buildingCoords = buildingObject.coords[0];\n //\n // gsap.to(start,{\n // zoom: this.settings.maxZoom,\n // x: buildingCoords[0],\n // y: buildingCoords[1],\n // duration: 1,\n // onUpdate: () => {\n // this.currentZoom = start.zoom;\n // this.material.uniforms.zoom.value = this.currentZoom;\n //\n // this.#dragMousePosition.set(start.x,start.y);\n //\n // this.#dragMousePosition.clamp(\n // this.#dragV1.set(-((this.currentZoom - 1) / this.currentZoom) ,-((this.currentZoom - 1) / this.currentZoom)),\n // this.#dragV2.set((this.currentZoom - 1) / this.currentZoom, (this.currentZoom - 1) / this.currentZoom)\n // );\n //\n // this.material.uniforms.uMouse.value.copy(this.#dragMousePosition);\n // },\n // onStart: () => {\n // this.blockHover = true;\n // this.material.uniforms.hoverTexture.value = null;\n // },\n // onComplete: () => {\n // this.#resizeHoverPoints();\n // this.material.uniforms.hoverTexture.value = this.hoverTextures[buildingObject.building];\n // }\n // });\n //\n }\n //\n moveCameraFromBuilding() {\n // console.log('move camera from building');\n // return;\n // const start = {\n // zoom: this.currentZoom,\n // x: this.material.uniforms.uMouse.value.x,\n // y: this.material.uniforms.uMouse.value.y\n // };\n //\n // gsap.to(start, {\n // zoom: this.settings.initialZoom,\n // x: 0,\n // y: 0,\n // duration: 0.5,\n // onUpdate: () => {\n // this.currentZoom = start.zoom;\n // this.material.uniforms.zoom.value = this.currentZoom;\n //\n // this.#dragMousePosition.set(start.x,start.y);\n // //\n // this.#dragMousePosition.clamp(\n // this.#dragV1.set(-((this.currentZoom - 1) / this.currentZoom) ,-((this.currentZoom - 1) / this.currentZoom)),\n // this.#dragV2.set((this.currentZoom - 1) / this.currentZoom, (this.currentZoom - 1) / this.currentZoom)\n // );\n //\n // this.material.uniforms.uMouse.value.copy(this.#dragMousePosition);\n // },\n // onComplete: () => {\n // this.#resizeHoverPoints();\n // this.material.uniforms.hoverTexture.value = null;\n // this.blockHover = false;\n // }\n // })\n }\n\n isVisible(){\n return this.overlay?.visible;\n }\n\n isActive () {\n return this.active;\n }\n\n modeIs (name) {\n if (!this.active) return false;\n\n return this.mode === name;\n }\n\n}\n\nclass LiteModeAmenities {\n\n constructor (data) {\n if (!data.url.length) return;\n this.data = data;\n this.url = new URL(data.url);\n this.type = this.url.pathname.match(/\\.(htm|html)/g) ? '360' : 'img';\n this.preview360Url = data?.preview360;\n this.gallery = data?.gallery && data?.gallery.length > 0 ? data.gallery : null;\n this.label = this.createLabel();\n return this.label;\n }\n\n createLabel() {\n const container = new BaseElement()\n .addClass('orbit-360-label');\n const titles = this.data.title;\n if (titles && Object.keys(titles).length) {\n const title = new BaseElement('span')\n .addClass('poi__title','orbit-360__title','language-string')\n .innerHtml(titles[getCurrentLang()])\n .appendTo(container.DOMElement);\n Object.entries(titles).forEach(([lang,text]) => {\n title.addAttribute(`data-lang-${lang}`,text);\n });\n }\n const icon = new BaseElement()\n .appendTo(container.DOMElement);\n\n if (this.type === '360') {\n if (Boolean(this.preview360Url)) {\n this.#addPreviewImageToLabel(container, this.preview360Url);\n } else {\n icon.addClass('icon-360');\n }\n } else {\n this.#addPreviewImageToLabel(container, this.url);\n }\n\n const label = new CSS2DObject(container.DOMElement);\n label.userData.zoom = 1;\n label.element.addEventListener('click',this.clickHandler.bind(this));\n label.name =`layer-poi__orbit-360`;\n return label;\n }\n\n #addPreviewImageToLabel(container, imageUrl) {\n container.addClass('image-icon');\n const labelDOM = container.DOMElement;\n const previewIconImage = Cloudflare.resize(imageUrl,{\n width: 42,\n quality: 60\n });\n labelDOM.style.backgroundImage = `url(${previewIconImage})`;\n }\n\n clickHandler() {\n settingsData.stopRender = true;\n this.mainContainer = new BaseElement()\n .addClass('orbit-360-viewer')\n .appendTo(document.body);\n const content = new BaseElement()\n .addClass('orbit-360-viewer__content')\n .appendTo(this.mainContainer.DOMElement);\n\n let viewer;\n\n if (this.type === '360') {\n new Button()\n .addClass('icon-close')\n .event('click', this.closeHandler.bind(this))\n .appendTo(content.DOMElement);\n this.preloader = new BaseElement()\n .addClass('orbit-360-preloader')\n .appendTo(content.DOMElement);\n new DreamsPreloader(this.preloader.DOMElement,'orbit-360-pr').show();\n viewer = new BaseElement('iframe')\n .addClass('orbit-360-viewer__player','player-iframe')\n .addAttribute('src',this.url.href)\n .appendTo(content.DOMElement);\n viewer.DOMElement.onload = () => this.preloader.remove();\n } else {\n viewer = new BaseElement('div')\n .addClass('orbit-360-viewer__player','player-img')\n .appendTo(content.DOMElement);\n\n const data = this.gallery && this.gallery.length ? this.gallery : [this.url.href];\n const gallery = new PhotoSwiperGallery(data,0,viewer.DOMElement);\n gallery.onClose = () => this.closeHandler();\n gallery.open();\n }\n }\n\n closeHandler() {\n this.mainContainer.remove();\n settingsData.stopRender = false;\n }\n}\n\nclass SensorData {\n constructor() {\n this.alpha = 0;\n this.beta = 0;\n this.gamma = 0;\n this.orientation = window.orientation ? window.orientation : 0;\n }\n}\n\n// Transforms accelerometer alpha, beta, gamma information,\n// then returns readable angles via yaw, pitch & roll\n// yaw: y-axis rotations\n// pitch: x-axis rotations\n// roll: z-axis rotations\n\nclass Gimbal {\n constructor() {\n this.quaternion = new Quaternion();\n this.quatOrigin = new Quaternion();\n this.axisUp = new Vector3(0, 1, 0);\n this.axisFwd = new Vector3(0, 0, 1);\n this.vectorUp = new Vector3();\n this.vectorFwd = new Vector3();\n this.sensorRotations = new Object3D();\n this.data = new SensorData();\n this.requestRecal = false;\n\n this.RAD = Math.PI / 180;\n this.DEG = 180 / Math.PI;\n\n this.eulerOrigin = new Euler();\n\n if (typeof window.orientation !== \"undefined\") {\n this.eulerOrigin.set(\n 90 * this.RAD,\n 180 * this.RAD,\n (180 + window.orientation) * this.RAD\n );\n }\n }\n\n enable() {\n this.onDeviceReorientation();\n\n window.addEventListener(\"deviceorientation\", this.onSensorMove.bind(this), false);\n window.addEventListener(\"orientationchange\", this.onDeviceReorientation.bind(this), false);\n }\n\n disable() {\n window.removeEventListener(\"deviceorientation\", this.onSensorMove.bind(this), false);\n window.removeEventListener(\"orientationchange\", this.onDeviceReorientation.bind(this), false);\n }\n\n // (experimental)\n recalibrateYPR() {\n this.axisUp.set(0, 1, 0);\n this.axisFwd.set(0, 0, 1);\n this.axisUp.applyQuaternion(this.sensorRotations.quaternion);\n this.axisFwd.applyQuaternion(this.sensorRotations.quaternion);\n }\n\n // Recalibrates gimbal axes to match current phone orientation\n recalibrate() {\n this.sensorRotations.setRotationFromEuler(this.eulerOrigin);\n\n // Apply gyroscope rotations\n this.sensorRotations.rotateZ(this.data.alpha * this.RAD);\n this.sensorRotations.rotateX(this.data.beta * this.RAD);\n this.sensorRotations.rotateY(this.data.gamma * this.RAD);\n this.sensorRotations.rotation.z -= this.data.orientation;\n\n this.quatOrigin.copy(this.sensorRotations.quaternion);\n this.quatOrigin.invert();\n }\n\n //////////////////////////////////////////// EVENT LISTENERS /////////////////////////////////////////////\n // When switching from portrait <---> landscape\n onDeviceReorientation() {\n this.data.orientation = (window.orientation * this.RAD) || 0;\n // this.recalibrateYPR();\n }\n\n // Update data when device detects movement\n onSensorMove(event) {\n // Alpha = z axis [0 ,360]\n // Beta = x axis [-180 , 180]\n // Gamma = y axis [-90 , 90]\n this.data.alpha = event.alpha;\n this.data.beta = event.beta;\n this.data.gamma = event.gamma;\n }\n\n // Called once per frame\n update() {\n // Reset rotation\n this.sensorRotations.setRotationFromEuler(this.eulerOrigin);\n this.sensorRotations.applyQuaternion(this.quatOrigin);\n\n // Apply gyroscope rotations\n this.sensorRotations.rotateZ(this.data.alpha * this.RAD);\n this.sensorRotations.rotateX(this.data.beta * this.RAD);\n this.sensorRotations.rotateY(this.data.gamma * this.RAD);\n this.sensorRotations.rotation.z -= this.data.orientation;\n\n // Extract quaternion from object\n this.quaternion.copy(this.sensorRotations.quaternion);\n this.quaternion.invert();\n\n // Apply quat to axes\n this.vectorUp.copy(this.axisUp);\n this.vectorUp.applyQuaternion(this.quaternion);\n this.vectorFwd.copy(this.axisFwd);\n this.vectorFwd.applyQuaternion(this.quaternion);\n\n // Yaw is heading east (-) or west (+) rotation around y-axis.\n this.yaw = Math.atan2(this.vectorFwd.x, this.vectorFwd.z);\n\n // Pitch is pointing above or below (+/-) horizon line\n this.pitch = Math.atan2(this.vectorUp.z, this.vectorUp.y);\n\n // Roll is left (-) or right (+) rotation around local z-axis\n this.roll = Math.atan2(-this.vectorUp.x, this.vectorUp.y);\n }\n}\n","'use strict';\n\nimport { BufferGeometry, CatmullRomCurve3, Group, LinearSRGBColorSpace, Vector3, Color } from 'three';\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\nimport { LineMaterial } from 'three/examples/jsm/lines/LineMaterial';\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\nimport { latLngAltToVector3 } from '../components/publicLayers/Layer';\nimport { Terrain } from '../components/Terrain/Terrain';\nimport { threeJsVariables } from '../../settings';\n\nexport class Route extends Terrain{\n constructor () {\n super();\n const { position,rotation } = config.features.publicLayers.routs || { position: { x:0,y:0,z:0 },rotation: { x:0,y:0,z:0 } };\n this.routes = {};\n this.position = position;\n this.rotation = rotation;\n this.drawGroup = new Group();\n this.drawGroup.name = 'Route';\n this.drawGroup.position.set(position.x,position.y,position.z);\n this.drawGroup.rotation.set(rotation.x,rotation.y,rotation.z);\n }\n\n drawRoute(route,id){\n this.removeRoute();\n\n if (!this.routes[id]) {\n\n const routePath = route.routes[0].overview_path;\n const highwayPreset = config.features.publicLayers.layers.find(layer => layer.type === 'highway');\n const colors = {\n primary: highwayPreset?.colors.primary || '#ffd000',\n secondary: highwayPreset?.colors.secondary || '#ffffff',\n };\n this.routes[id] = {\n active: true,\n path: []\n };\n const points = [];\n const center = {lat: Number(config.localization.latitude), lng: Number(config.localization.longitude)};\n const vectorToIntersect = new Vector3();\n const axis = new Vector3(0,1,0).normalize();\n\n routePath.forEach(coords => {\n const point = {lat: coords.lat(), lng: coords.lng()};\n const vector = latLngAltToVector3(point,center);\n vectorToIntersect.copy(vector);\n vectorToIntersect.applyAxisAngle(axis,this.rotation.y);\n vectorToIntersect.add(this.drawGroup.position);\n !config.features.publicLayers.routs?.preventRaycasting\n ? vector.y = this.intersectHeightFromVector3(vectorToIntersect)\n : vector.y = 0;\n points.push(vector);\n });\n\n // const geometry = new BufferGeometry().setFromPoints(points);\n // const curve = new CatmullRomCurve3(points);\n // curve.curveType = 'centripetal';\n // curve.tension = 0.5;\n // const curvedPoint = curve.getPoints(10);\n const geometry = new BufferGeometry().setFromPoints(points);\n const lineGeometry = new LineGeometry().setPositions(geometry.getAttribute('position').array);\n const lineMaterial = new LineMaterial({\n color: new Color().setStyle(colors.primary,LinearSRGBColorSpace),\n linewidth: 5,\n dashed: false,\n opacity: 0.9,\n alphaToCoverage: true\n });\n\n lineMaterial.resolution.set( window.innerWidth / 4, window.innerHeight / 4 );\n\n const dashLineMaterial = new LineMaterial({\n color: new Color().setStyle(colors.secondary,LinearSRGBColorSpace),\n linewidth: 5,\n dashed: true,\n dashOffset: 1,\n opacity: 0.6,\n gapSize: 20,\n dashSize: 10,\n alphaToCoverage: true\n });\n\n dashLineMaterial.resolution.set( window.innerWidth / 4, window.innerHeight / 4 );\n\n const dashLine = new Line2(lineGeometry,dashLineMaterial);\n dashLine.name = 'route_dash';\n dashLine.computeLineDistances();\n dashLine.scale.set(1,1,1);\n\n dashLineMaterial.tick = () => {\n dashLineMaterial.dashOffset -= 1;\n };\n\n const line = new Line2(lineGeometry,lineMaterial);\n line.name = 'route_line';\n line.computeLineDistances();\n line.scale.set(1,1,1);\n this.routes[id].path.push(line,dashLine);\n }\n\n this.routes[id].active = true;\n this.drawGroup.add(...this.routes[id].path);\n threeJsVariables.scene.add(this.drawGroup);\n\n return this.routes[id].path.find(el => el.name === 'route_dash').material;\n }\n\n removeRoute() {\n const activeRoute = Object.values(this.routes)?.find(route => route.active);\n if (activeRoute) {\n activeRoute.active = false;\n activeRoute.path.forEach(el => {\n el.removeFromParent();\n el.geometry.dispose();\n el.material.dispose();\n });\n }\n this.drawGroup.removeFromParent();\n }\n\n}\n","import { getCurrentLang } from '../components/langSwitcher/langSwitcher';\nimport { settingsData, threeJsVariables } from '../../settings';\n\nimport { lazyLoadingData } from '../../functions';\nimport { ViewMode } from '../../common';\nimport { Group, LineBasicMaterial, Texture, BufferGeometry, Line } from 'three';\nimport { SpriteMaterial } from 'three';\nimport { Sprite } from 'three';\nimport { TextureLoader } from 'three';\nimport { Vector3 } from 'three';\nimport { getWorldData } from '../controls/orbitControls';\n\n\nexport async function initPoiData () {\n const {active} = settingsData.poiOrbitSettings;\n if (!active){\n return ;\n }\n\n const poiData = config.poiData;\n const poiCategoriesData = config.poiCategories;\n const poiSettingsData = {localization: config.localization};\n\n document.fonts.ready.then(async function () {\n addPoiToCategory(poiCategoriesData, poiData, poiSettingsData);\n\n // const scriptInterval = setInterval(async ()=>{\n // // addScripts();\n // if (scriptsChecker()){\n // clearInterval(scriptInterval);\n // await addPoiOnScene(poiCategoriesData, poiData);\n // }\n // },200);\n\n });\n\n}\n\nasync function addPoiOnScene (categories, poi) {\n const poiIdOnOrbit = [...new Set(poi.filter(poi => poi.orbit === 1).map(poi => poi.categoryId))];\n const usedCategories = categories.filter(category => poiIdOnOrbit.includes(Number(category.categoryId)));\n\n const poiGroup = new Group();\n poiGroup.name = 'Poi group';\n poiGroup.visible = false;\n\n const icons = await loadCategoryIcons(usedCategories);\n // const defaultPoiIcon = await loadDefaultPoiIcon();\n\n for (let i = 0; i < categories.length; i++) {\n\n for (let k = 0; k < categories[i].data.length; k++) {\n\n if (categories[i].data[k].orbit === 1) {\n const label = await createPoiLabel(categories[i].data[k],categories[i],icons);\n // const label = await createPoiLabel(categories[i].data[k], categories[i], defaultPoiIcon);\n poiGroup.add(label);\n }\n }\n }\n\n settingsData.objects_to_intersection.push(...settingsData.poiIntersection);\n\n // categories.forEach(category =>{\n // category.data.forEach(poi =>{\n // if (poi.orbit === 1){\n // const label = createPoiLabel(poi,category,icons);\n // poiGroup.add(label);\n // }\n // });\n // });\n\n threeJsVariables.scene.add(poiGroup);\n threeJsVariables.renderList.reorder();\n\n showPoi();\n showPoiInfo();\n}\n\nexport function poiIntersectionHandler(selectedPoi){\n if (!settingsData.poiOrbitSettings.active || !selectedPoi.name.startsWith('poi')){\n return;\n }\n\n console.log(selectedPoi);\n\n // const latLng = selectedPoi.userData.latLng;\n // const isPanoramaExist = checkMapPanoramaInOrbit();\n //\n // isPanoramaExist && isPanoramaExist.remove();\n //\n // const orbitPanoramaContainer = createHtmlElement(document.body,'','div',['map__panorama__orbit']);\n // const panoramaWrapper = createHtmlElement(orbitPanoramaContainer,'','div',['panorama__wrapper__orbit']);\n // panoramaWrapper.setAttribute('id','orbitPanorama');\n //\n // addCloseBtnInStreetView(panoramaWrapper);\n //\n // const panorama = getStreetPanorama(latLng,'orbitMarker','orbitPanorama');\n // panorama.then((pano) =>{\n // orbitPanoramaContainer.classList.add('map__panorama__orbit__show');\n // pano.setVisible(true);\n // showRightNavBar();\n // });\n\n}\n\nexport function checkMapPanoramaInOrbit(){\n return document.querySelector('.map__panorama__orbit__show');\n}\n\nasync function loadDefaultPoiIcon () {\n const PATH = '/img/icons/poi/sprites/';\n const {iconScale} = settingsData.poiOrbitSettings;\n\n const textureLoader = new TextureLoader();\n const texture = await lazyLoadingData(textureLoader, PATH + 'default-poi' + '.png');\n\n const poiMaterial = new SpriteMaterial(\n {\n map: texture,\n alphaTest: 0.4,\n color: 0xffffff,\n fog: true,\n });\n\n const poiModel = new Sprite(poiMaterial);\n poiModel.renderOrder = 1;\n poiModel.name = 'poi icon';\n poiModel.scale.set(iconScale.x,iconScale.y, 1);\n\n return poiModel;\n}\n\nasync function loadCategoryIcons (categories) {\n const loadedIcons = {};\n const {iconScale} = settingsData.poiOrbitSettings;\n const PATH = '/img/icons/poi/sprites/';\n\n for (let category of categories) {\n const categoryIcon = category.icon;\n\n const textureLoader = new TextureLoader();\n const texture = await lazyLoadingData(textureLoader, PATH + categoryIcon + '.png');\n\n const poiMaterial = new SpriteMaterial(\n {\n map: texture,\n alphaTest: 0.4,\n color: 0xffffff,\n fog: true,\n });\n\n const poiModel = new Sprite(poiMaterial);\n poiModel.renderOrder = 1;\n poiModel.name = 'poi icon';\n poiModel.scale.set(iconScale.x, iconScale.y, 1);\n\n loadedIcons[categoryIcon] = poiModel;\n\n }\n\n return loadedIcons;\n}\n\nasync function makeTextSprite (message, parameters) {\n\n if (parameters === undefined) parameters = {};\n\n const fontface = parameters.hasOwnProperty('fontface') ?\n parameters['fontface'] : 'Arial';\n\n const fontsize = parameters.hasOwnProperty('fontsize') ?\n parameters['fontsize'] : 18;\n\n const borderThickness = parameters.hasOwnProperty('borderThickness') ?\n parameters['borderThickness'] : 4;\n\n const borderColor = parameters.hasOwnProperty('borderColor') ?\n parameters['borderColor'] : {r: 0, g: 0, b: 0, a: 1.0};\n\n const backgroundColor = parameters.hasOwnProperty('backgroundColor') ?\n parameters['backgroundColor'] : {r: 255, g: 255, b: 255, a: 1.0};\n\n const textWidth = getWidthOfText(message, fontface, fontsize);\n\n const canvas = document.createElement('canvas');\n canvas.width = textWidth + borderThickness;\n canvas.height = canvas.width / 2;\n const context = canvas.getContext('2d');\n\n context.font = 'Bold ' + fontsize + 'px ' + fontface;\n\n context.lineWidth = borderThickness;\n\n context.shadowColor = 'black';\n context.shadowBlur = 2;\n context.strokeText(message, borderThickness, fontsize + 2);\n context.shadowBlur = 0;\n context.fillStyle = 'rgba(255, 255, 255, 1.0)';\n context.fillText(message, borderThickness, fontsize);\n\n\n const texture = new Texture(canvas);\n texture.needsUpdate = true;\n\n const spriteMaterial = new SpriteMaterial({map: texture});\n\n const sprite = new Sprite(spriteMaterial);\n sprite.renderOrder = 1;\n\n return {\n textWidth,\n sprite\n };\n}\n\nfunction getWidthOfText (text, fontface, fontsize) {\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n\n context.font = 'Bold ' + fontsize + 'px ' + fontface;\n\n return context.measureText(text).width;\n\n}\n\nfunction createPoiInfoText (poi) {\n const lang = getCurrentLang();\n const poiName = poi.name.filter(name => name.lang === lang)[0].value;\n // const distance = Math.ceil(poi.distance);\n // const template = ` ${poiName + ' '}\\n Dist: ${distance} m `;\n\n return poiName;\n}\n\n\nasync function createPoiLabel (poi, category, icons) {\n const poiGroup = new Group();\n poiGroup.name = 'poi';\n\n const lineMaterial = new LineBasicMaterial({color: 0xffffff});\n const lineGeomerty = new BufferGeometry().setFromPoints([\n new Vector3(poi.coords3dScene.x, 0, poi.coords3dScene.z),\n new Vector3(poi.coords3dScene.x, poi.coords3dScene.y + 2, poi.coords3dScene.z),\n ]);\n const verticalLine = new Line(lineGeomerty, lineMaterial);\n verticalLine.name = 'poi line';\n\n let spriteIcon;\n\n spriteIcon = icons[category.icon].clone();\n // spriteIcon = icons.clone();\n\n spriteIcon.position.set(poi.coords3dScene.x, poi.coords3dScene.y + spriteIcon.scale.y / 2, poi.coords3dScene.z);\n spriteIcon.userData.poiCoords = new Vector3(poi.coords3dScene.x,poi.coords3dScene.y,poi.coords3dScene.z);\n spriteIcon.userData.initialScale = spriteIcon.scale;\n spriteIcon.userData.latLng = { lat: Number(poi.latitude), lng: Number(poi.longitude)};\n\n settingsData.poiIntersection.push(spriteIcon);\n\n const sprite = await createPoiText(poi,spriteIcon);\n sprite.userData.poi = poi;\n\n poiGroup.add(spriteIcon, verticalLine, sprite);\n\n return poiGroup;\n}\n\nasync function createPoiText (poi,spriteIcon) {\n const {fontSize,borderThickness,textVerticalCorrection,textScaleCoefficient} = settingsData.poiOrbitSettings;\n\n const text = createPoiInfoText(poi);\n\n const {sprite,textWidth} = await makeTextSprite(text,\n {fontSize, fontface: config.style.font, borderThickness});\n\n const scaleX = textWidth / textScaleCoefficient;\n const scaleY = scaleX / 2;\n\n sprite.name = 'poi info';\n sprite.visible = false;\n sprite.scale.set(scaleX, scaleY, 1);\n sprite.position.set(poi.coords3dScene.x,spriteIcon.position.y + spriteIcon.scale.y - scaleY / 2 + textVerticalCorrection, poi.coords3dScene.z);\n\n return sprite;\n}\n\n// export async function changePoiLanguage () {\n// const poiGroup = threeJsVariables.scene.getObjectByName('Poi group');\n// if (!poiGroup){\n// return;\n// }\n//\n// poiGroup.traverse(async (poi) =>{\n// if (poi.name === 'poi info'){\n// const parent = poi.parent;\n// const poiIcon = parent.getObjectByName('poi icon');\n// const newSpriteText = await createPoiText(poi.userData.poi,poiIcon);\n// newSpriteText.userData.poi = poi.userData.poi;\n// parent.remove(poi);\n// parent.add(newSpriteText);\n// showPoiInfo();\n// }\n// });\n// }\n\nexport function showPoiInfo () {\n const poiGroup = threeJsVariables.scene.getObjectByName('Poi group');\n if (!poiGroup || settingsData.activeViewMode !== ViewMode.Orbit || !settingsData.poiOrbitSettings.active) {\n return;\n }\n\n const minDistance = settingsData.poiOrbitSettings.minDistance;\n const nearestMinDistance = settingsData.poiOrbitSettings.nearestMinDistance;\n\n poiGroup.traverse(poi => {\n if (poi.name === 'poi icon') {\n const {cameraVector} = getWorldData();\n const vector = new Vector3().copy(poi.position);\n const distance = cameraVector.distanceTo(vector);\n\n let info;\n\n if (distance <= minDistance && distance > nearestMinDistance) {\n info = poi.parent.getObjectByName('poi info');\n info.visible = true;\n } else if (distance <= nearestMinDistance) {\n info = poi.parent.getObjectByName('poi info');\n info.visible = false;\n } else {\n info = poi.parent.getObjectByName('poi info');\n info.visible = false;\n }\n }\n });\n}\n\nfunction addPoiToCategory (categories, poiData, mainBuildingData) {\n let sizeY = 20;\n\n poiData.forEach(poi => {\n const {coords, distance} = calcPoiCoordsAndDistance(poi, mainBuildingData, 0);\n poi.coords3dScene = coords;\n poi.distance = distance;\n });\n\n poiData.sort((prev, next) => prev.distance - next.distance);\n\n poiData.forEach(poi => {\n poi.coords3dScene.y = sizeY;\n sizeY += 10;\n });\n\n categories.forEach(category => {\n category.data = [];\n poiData.forEach(poi => {\n if (Number(category.categoryId) === poi.categoryId) {\n category.data.push(poi);\n }\n });\n });\n}\n\nexport function poiLabelHideWhenAnimationStart () {\n const poiGroup = threeJsVariables.scene.getObjectByName('Poi group');\n if (poiGroup) {\n poiGroup.visible = false;\n\n // poiGroup.traverse(el =>{\n // if (el.name === 'poi line' || el.name === 'poi label'){\n // el.visible = false;\n // }\n // });\n }\n}\n\nexport function showPoi () {\n const poiGroup = threeJsVariables.scene.getObjectByName('Poi group');\n if (settingsData.activeViewMode === ViewMode.Orbit && poiGroup) {\n poiGroup.visible = true;\n // poiGroup.traverse(el =>{\n // if (el.name === 'poi line' || el.name === 'poi label'){\n // el.visible = true;\n // }\n // });\n }\n}\n\nfunction calcPoiCoordsAndDistance (poi, buildingPoi) {\n const poiLatitude = Number(poi.coords3d.x);\n const poiLongitude = Number(poi.coords3d.y);\n const latKmConstant = 111.134861111 * 1000;\n const lonKmConstant = (111.321377778 * Math.cos(poiLatitude)) * 1000;\n\n let {latitude, longitude} = buildingPoi.localization;\n\n const posX = (latitude - poiLatitude) * latKmConstant;\n const posZ = (longitude - poiLongitude) * lonKmConstant;\n const distance = Math.max(...[Math.abs(posX), Math.abs(posZ)]);\n\n return {\n coords: new Vector3(posX, 0, posZ),\n distance: distance,\n };\n}\n\nfunction getPoiIcon (categoryIcon) {\n const poiStorage = {\n leisure_i: 'icon-lotus',\n healthcare_i: 'icon-healthcare',\n park_i: 'icon-park',\n office_i: 'icon-construction-site',\n kosher_i: 'icon-kosher',\n kids_i: 'icon-kids',\n education_i: 'icon-education',\n culture_i: 'icon-culture-object',\n construction_i: 'icon-construction-site',\n cafes_i: 'icon-coffee',\n business_i: 'icon-business',\n busStation_i: 'icon-bus',\n beaches_i: 'icon-summer',\n restaurants_i: 'icon-restaurant',\n shopping_i: 'icon-shopping',\n sports_i: 'icon-sport',\n streets_i: 'icon-street',\n subway_i: 'icon-subway2',\n supermarkets_i: 'icon-shopping',\n synagogue_i: 'icon-kosher',\n transport_i: 'icon-bus',\n };\n\n const iconClass = poiStorage[categoryIcon];\n\n return iconClass ? iconClass : 'none-icon';\n}\n\n","import {getCurrentLang, getCurrentLangDirection} from '../components/langSwitcher/langSwitcher';\nimport { isDesktop, isMobile, isNoMenu, projectMode, settingsData, threeJsVariables, UIRoot, TRoot } from '../../settings';\nimport {CSS2DObject} from '../../libs/CSS2DRenderer';\nimport { createHtmlElement, isOneMesh, labelVisibility, rgbaToHexA } from '../../functions';\nimport {Drag} from \"../interfaces/Drag\";\nimport {Group, LineBasicMaterial, Raycaster, BufferGeometry, Line, MeshBasicMaterial, Frustum, Matrix4} from 'three';\nimport {Vector3} from 'three';\nimport {ViewMode} from '../../common';\nimport {\n\tbuildInfoWindowContent,\n\tbuildInfoWindowMobileContent,\n\tcheckPoiResponse,\n\tclosePrevInfoWindow,\n\tgetPlacePhoto,\n\tmap,\n\topenMiniCard,\n\topenMiniCardFullscreen,\n\tresetMapRenderer,\n\tsetMobileFullscreenCardSize,\n\tsmoothlyAnimatePanTo,\n\tSwipe,\n} from '../widgets/poi/poiv3';\nimport {mobileBurgerStyleToggle, pageResize} from '../menu/menu';\nimport gsap from \"gsap\";\nimport {PublicLayers} from '../components/publicLayers/PublicLayers';\nimport {latLngAltToVector3} from '../components/publicLayers/Layer';\nimport {PoiLayer} from '../components/publicLayers/PoiLayer';\nimport {Terrain} from '../components/Terrain/Terrain';\nimport {Environment} from '../components/Environment/Environment';\nimport {Cloudflare} from '../api/Cloudflare';\nimport {BaseElement} from \"../interfaces/BaseElement\";\nimport {mobileBuildingLabelsHideLogic} from \"../components/building-switch/buildingLabels\";\n\nconst poiRaycaster = new Raycaster();\npoiRaycaster.firstHitOnly = true;\n// let drag = null;\nlet swipe = null;\nconst INTERSECTIONS = [];\nconst LABELS = [];\nlet POI = [];\n\nexport function addBuildingsIntersections(model) {\n\tif (!isOneMesh() && !model) {\n\t\tINTERSECTIONS.push(...settingsData.objects_to_intersection);\n\t} else if (model){\n\t\tINTERSECTIONS.push(model);\n\t}\n\tpoiIntersection();\n}\n\nexport function isBuildingIntersectionsSet() {\n\treturn INTERSECTIONS.length;\n}\n\nexport function addPoiToIntersection(label) {\n\tPOI.push(label);\n\tpoiIntersection();\n}\n\nexport function removePoiFromIntersection(label) {\n\tPOI = POI.filter(poi => poi !== label);\n}\n\nexport function initPoiData(response) {\n\tif (!config.features.poi.active || projectMode.LiteMode.isActive())\n\t\treturn;\n\n\tconst [poi, poiCategories, poiSettings] = response;\n\tconst poiData = poi.data;\n\tconst poiCategoriesData = poiCategories.data;\n\tconst poiSettingsData = poiSettings.data;\n\tconst hide = config.features.poi.hide;\n\n\tif (!checkPoiResponse(poiData, poiCategoriesData))\n\t\treturn;\n\n\taddPoiToCategory(poiCategoriesData, poiData, poiSettingsData);\n\taddPoiOnScene(poiCategoriesData);\n\n\tif (poiData.some(el => el.orbit === 1)) {\n\t\tif (PublicLayers.isActive) {\n\t\t\tconst poisLayer = new PoiLayer(document.querySelector('.public-layers__elements'));\n\t\t\t!PublicLayers.activeLayer && poisLayer.show();\n\t\t\tPublicLayers.addLayer(poisLayer);\n\t\t\t!PublicLayers.activeLayer && (PublicLayers.activeLayer = poisLayer);\n\t\t} else if (Environment.isActive()) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tconst poisLayer = new PoiLayer(document.querySelector('.public-layers__elements'));\n\t\t\t\t!Environment.getActivePublicLayer() && poisLayer.show();\n\t\t\t\tEnvironment.addCustomLayer('poi', poisLayer);\n\t\t\t\t!Environment.getActivePublicLayer() && Environment.setActivePublicLayer(poisLayer);\n\t\t\t}, 500);\n\t\t}\n\t}\n\n\thide && addBuildingsIntersections();\n\tpoiIntersection();\n\tmobileBuildingLabelsHideLogic();\n}\n\nfunction addPoiOnScene(categories) {\n\tconst rotation = new Vector3();\n\tconst scale = new Vector3(1,1,1);\n\n\tif (config.features.poi.rotation) {\n\t\trotation.set(\n\t\t\tconfig.features.poi.rotation.x,\n\t\t\tconfig.features.poi.rotation.y,\n\t\t\tconfig.features.poi.rotation.z\n\t\t)\n\t} else {\n\t\trotation.y = config.threejs.compass.correction - Math.PI / 2;\n\t}\n\n\tif (config.features.poi.scale) {\n\t\tscale.set(\n\t\t\tconfig.features.poi.scale.x,\n\t\t\tconfig.features.poi.scale.y,\n\t\t\tconfig.features.poi.scale.z\n\t\t)\n\t}\n\n\tconst position = config.features.poi.position || {x: 0, y: 0, z: 0};\n\tconst poiGroup = new Group();\n\tpoiGroup.name = 'Poi group';\n\tpoiGroup.rotation.setFromVector3(rotation);\n\tpoiGroup.position.set(position.x, 0, position.z);\n\tpoiGroup.scale.copy(scale);\n\n\tcategories.forEach(category => {\n\t\tconst categoryColor = category.color;\n\t\tcategory.data.forEach(poi => {\n\t\t\tif (poi.orbit === 1) {\n\t\t\t\tconst label = createPoiLabel(poi, categoryColor, category);\n\t\t\t\tpoiGroup.add(label);\n\t\t\t\tPOI.push(label.getObjectByName('poi label'));\n\t\t\t}\n\t\t});\n\t});\n\n\tpoiGroup.children.sort((prev, next) => prev.userData.order - next.userData.order);\n\tthreeJsVariables.scene.add(poiGroup);\n\tthreeJsVariables.renderList.reorder();\n\tanimatePoi(poiGroup);\n\tpoiIntersection();\n\n\tif (settingsData.activeViewMode !== ViewMode.Orbit)\n\t\tpoiToggle(false);\n}\n\nfunction animatePoi(group) {\n\tlet count = 0.5;\n\tconst lineDuration = 1;\n\tconst labelDuration = 0.2;\n\n\tconst tl = gsap.timeline({paused: true});\n\n\tgroup.traverse(el => {\n\t\tif (el.name === 'poi') {\n\t\t\tconst line = el.getObjectByName('poi line');\n\t\t\tconst label = el.getObjectByName('poi label');\n\n\t\t\tconst lineAnimation = gsap.fromTo(line.position, {\n\t\t\t\ty: -300\n\t\t\t}, {\n\t\t\t\ty: line.position.y,\n\t\t\t\tduration: lineDuration,\n\t\t\t\tdelay: count,\n\t\t\t\tonStart: () => {\n\t\t\t\t\tif (settingsData.activeModeSwitching || settingsData.activeViewMode !== ViewMode.Orbit) {\n\t\t\t\t\t\tpoiToggle(false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\n\t\t\tconst labelAnimation = gsap.to(label.element, {\n\t\t\t\topacity: 1,\n\t\t\t\tduration: labelDuration,\n\t\t\t\tdelay: count + lineDuration - labelDuration,\n\t\t\t\tonComplete: () => {\n\t\t\t\t\tlabel.element.style.opacity = '';\n\t\t\t\t}\n\t\t\t});\n\n\t\t\ttl.add(lineAnimation, 0);\n\t\t\ttl.add(labelAnimation, 0);\n\n\t\t\tcount += 0.5;\n\t\t}\n\t});\n\n\ttl.play(0);\n}\n\nfunction createPoiLabel(poi, categoryColor, category) {\n\tconst hide = config.features.poi.hide;\n\tconst lineStart = typeof config.features.poi.lineStart === 'number' ? config.features.poi.lineStart : -500;\n\tconst poiGroup = new Group();\n\tpoiGroup.name = 'poi';\n\tpoiGroup.userData.distance = poi.distance;\n\tpoiGroup.userData.order = poi.order;\n\n\tconst designType = config.features?.poi?.designType;\n\tconst customColors = config.features?.poi?.colors;\n\tlet lineColor = 0xffffff;\n\n\n\tif (designType === 'flat-sign' && !isMobile) {\n\t\tif (customColors && customColors.line) {\n\t\t\tlineColor = customColors.line;\n\t\t} else {\n\t\t\tconst brandColor = document.querySelector(':root').style.getPropertyValue('--brand1');\n\t\t\t// trunc rgba(x,x,x,x) color to x,x,x,x then makes it array [x,x,x,x] and exec in rgbaToHexA\n\t\t\tlineColor = rgbaToHexA(\n\t\t\t\tbrandColor\n\t\t\t\t\t.replace(\"rgba(\", \"\")\n\t\t\t\t\t.replace(\")\", \"\")\n\t\t\t\t\t.split(','),\n\t\t\t\tfalse\n\t\t\t);\n\t\t}\n\t}\n\n\tconst heightCorrection = (poi) => {\n\t\tconst poisForCorrection = config.features.poi?.poisForHeightCorrection;\n\t\tif (!poisForCorrection || poisForCorrection.length === 0)\n\t\t\treturn 0;\n\n\t\tlet correction = 0;\n\t\tpoisForCorrection.forEach(item => {\n\t\t\tif (item.id === poi.id) {\n\t\t\t\tcorrection = parseInt(item.correction);\n\t\t\t}\n\n\t\t});\n\t\treturn correction;\n\t}\n\n\tconst lineMaterial = new LineBasicMaterial({color: lineColor, transparent: true, depthWrite: true});\n\tconst lineGeomerty = new BufferGeometry().setFromPoints([\n\t\tnew Vector3(poi.coords3dScene.x, lineStart, poi.coords3dScene.z),\n\t\tnew Vector3(poi.coords3dScene.x, poi.coords3dScene.y + heightCorrection(poi), poi.coords3dScene.z)\n\t]);\n\tconst line = new Line(lineGeomerty, lineMaterial);\n\tline.name = 'poi line';\n\n\tconst name = poi.name.filter(el => el.lang === getCurrentLang())[0].value;\n\tconst poiContainer = document.createElement('div');\n\tpoiContainer.classList.add('poi__label');\n\n\tif (projectMode.LiteMode.isActive())\n\t\tpoiContainer.classList.add('lite-mode__line');\n\n\tpoiContainer.setAttribute('data-latitude', poi.latitude);\n\tpoiContainer.setAttribute('data-longitude', poi.longitude);\n\n\n\tconst poiText = new BaseElement('span')\n\t\t.addClass('poi__title', 'language-string', isMobile ? 'hidden' : null)\n\t\t.innerHtml(name)\n\t\t.appendTo(poiContainer);\n\n\tif (!isMobile && designType !== 'flat-sign' ) {\n\t\tpoiText.addClass('invisible');\n\t\tpoiContainer.addEventListener('mouseenter',() => poiText.removeClass('invisible'));\n\t\tpoiContainer.addEventListener('mouseleave',() => poiText.addClass('invisible'));\n\t}\n\n\tpoi.name.forEach(obj => {\n\t\tpoiText.addAttribute(`data-lang-${obj.lang}`, obj.value);\n\t});\n\n\n\tif (designType === 'flat-sign' && !isMobile) {\n\t\tpoiContainer.classList.add(designType);\n\n\t\tif (customColors) {\n\t\t\tif (customColors.bg) {\n\t\t\t\tpoiText.addStyle('background',customColors.bg);\n\t\t\t}\n\t\t\tif (customColors.text) {\n\t\t\t\tpoiText.addStyle('color',customColors.text);\n\t\t\t}\n\t\t}\n\t}\n\n\n\tfunction addPlaceholderImage() {\n\t\tnew BaseElement()\n\t\t\t.addClass('poi__icon', designType === 'flat-sign' && !isMobile ? 'hidden' : null)\n\t\t\t.addStyle('background-image', `url(/img/icons/poi/${category.iconMenu}.svg)`)\n\t\t\t.addStyle('background-color', categoryColor)\n\t\t\t.appendTo(poiContainer);\n\t}\n\n\tfunction loadImage(link) {\n\t\tconst mapMarker = settingsData.mapMarkers.allPoiMarkersWithoutCategory.filter(marker => marker.title === name)[0];\n\t\tif (link) {\n\t\t\taddPlaceholderImage();\n\t\t\tmapMarker.data.sendPhotoRequest = true;\n\t\t\tmapMarker.data.infoWindowImg = link;\n\t\t\t// const i = new Image();\n\t\t\t// i.onload = () => {\n\t\t\t// \ti.classList.add('poi__icon');\n\t\t\t// \tif (designType === 'flat-sign')\n\t\t\t// \t\ti.classList.add('hidden');\n\t\t\t// \tpoiContainer.appendChild(i);\n\t\t\t// \tmapMarker.data.infoWindowImg = link;\n\t\t\t// };\n\t\t\t// i.onerror = () => {\n\t\t\t// \taddPlaceholderImage();\n\t\t\t// };\n\t\t\t// i.src = link;\n\t\t} else {\n\t\t\taddPlaceholderImage();\n\t\t}\n\t}\n\n\t/*if (isMobile || designType === 'flat-sign') {\n\t\taddPlaceholderImage();\n\t} else*/ if (poi.customImage.trim().length) {\n\t\tloadImage(Cloudflare.resize(poi.customImage, {\n\t\t\twidth: 255\n\t\t}));\n\t} else {\n\t\tloadImage();\n\t\t// const placePhoto = getPlacePhoto(poi, {maxHeight: 255, maxWidth: 255});\n\t\t// placePhoto.then(img => loadImage(img));\n\t}\n\n\tconst label = new CSS2DObject(poiContainer);\n\tlabel.name = 'poi label';\n\tlabel.material = new MeshBasicMaterial({color: 0xffffff});\n\tlabel.position.set(poi.coords3dScene.x, poi.coords3dScene.y + heightCorrection(poi), poi.coords3dScene.z);\n\tlabel.userData.zoom = 1;\n\tlabel.element.style.opacity = 0;\n\n\tLABELS.push({\n\t\tlabel,\n\t\tline,\n\t\tdistance: poi.distance\n\t});\n\n\tpoiGroup.add(label);\n\tpoiGroup.add(line);\n\tlineGeomerty.dispose();\n\tlineMaterial.dispose();\n\n\treturn poiGroup;\n}\n\nexport function hidePOILabelsByDistance (state) {\n\tconst labels = LABELS.filter(label => label.distance > 400);\n\tlabels.forEach(data => labelVisibility(data,state));\n}\n\nfunction addPoiToCategory(categories, poiData, mainBuildingData) {\n\tconst terrain = new Terrain();\n\tpoiData.forEach(poi => {\n\t\tconst {coords, distance, altitude} = calcPoiCoordsAndDistance(poi, mainBuildingData, terrain);\n\t\tpoi.coords3dScene = coords;\n\t\tpoi.distance = distance;\n\t\tpoi.altitude = altitude;\n\t});\n\n\tpoiData.sort((prev, next) => prev.distance - next.distance);\n\n\tlet {position, distanceCoefficientCorrection} = config.features.poi;\n\tif (distanceCoefficientCorrection === undefined)\n\t\tdistanceCoefficientCorrection = 5;\n\tpoiData.forEach(poi => {\n\t\tpoi.coords3dScene.y = (position?.y || 0) + poi.altitude + poi.distance / distanceCoefficientCorrection;\n\t});\n\n\tcategories.forEach(category => {\n\t\tcategory.data = [];\n\t\tpoiData.forEach(poi => {\n\t\t\tif (Number(category.categoryId) === poi.categoryId) {\n\t\t\t\tcategory.data.push(poi);\n\t\t\t}\n\t\t});\n\t});\n}\n\n// export function poiLineUpdate (visible = true) {\n// const poiGroup = threeJsVariables.scene.getObjectByName('Poi group');\n// poiGroup.traverse(el =>{\n// if (el.name === 'poi line'){\n// el.visible = visible;\n// }\n// });\n// }\n\nexport function cssPoiHandler(e) {\n\tlet target = e.target;\n\tif (!config.features.poi.active)\n\t\treturn;\n\n\tif (target.classList.contains('poi__icon') || target.classList.contains('poi__title')) {\n\t\ttarget = target.parentElement;\n\t} else if (!target.classList.contains('poi__label')) {\n\t\treturn;\n\t}\n\n\tif (target.classList.contains('hide__label'))\n\t\treturn;\n\n\topenMarkerInfoWindowInOrbit(target, e);\n}\n\nexport function poiOrbitCardSwitchingLang() {\n\tconst openedCard = document.querySelector('.poi__info-window');\n\tif (!openedCard)\n\t\treturn;\n\n\tconst title = openedCard.getAttribute('data-poi-title');\n\tconst poiLabel = document.querySelector(`.poi__title[data-lang-en=\"${title}\"]`);\n\tconst element = poiLabel.parentElement;\n\n\topenedCard.remove();\n\n\tconst clickObj = {\n\t\tclientX: element.getBoundingClientRect().x,\n\t\tclientY: element.getBoundingClientRect().y\n\t};\n\n\topenMarkerInfoWindowInOrbit(element, clickObj);\n}\n\n// function calcPoiCoords (poi,buildingPoi,poiY) {\n// const poiLatitude = Number(poi.coords3d.x);\n// const poiLongitude = Number(poi.coords3d.y);\n// const latKmConstant = 111.134861111 * 1000;\n// const lonKmConstant = (111.321377778 * Math.cos(poiLatitude)) * 1000;\n//\n// const {latitude,longitude} = buildingPoi;\n//\n// const posX = (latitude - poiLatitude) * latKmConstant;\n// const posZ = (longitude - poiLongitude) * lonKmConstant;\n//\n// return new THREE.Vector3(posX,poiY,posZ);\n// }\n\nexport function calcPoiCoordsAndDistance(poi, buildingPoi, terrain) {\n\tconst point = latLngAltToVector3(\n\t\t{lat: Number(poi.coords3d.x), lng: Number(poi.coords3d.y)},\n\t\t{lat: buildingPoi.latitude, lng: buildingPoi.longitude}\n\t);\n\n\tconst intersectionVector = new Vector3().copy(point);\n\tconst axis = new Vector3(0, 1, 0).normalize();\n\tconst angle = config.features.poi.rotation?.y || 0;\n\tconst poisPosition = config.features.poi.position;\n\tconst position = new Vector3(0, 0, 0);\n\tif (poisPosition) {\n\t\tposition.set(poisPosition.x, poisPosition.y, poisPosition.z);\n\t}\n\n\tintersectionVector.applyAxisAngle(axis, angle);\n\tintersectionVector.add(position);\n\n\tconst height = config.features.poi.preventRaycasting ? 0 : terrain.intersectHeightFromVector3(intersectionVector);\n\tconst distance = new Vector3().distanceTo(point);\n\n\treturn {\n\t\tcoords: point,\n\t\tdistance: distance,\n\t\taltitude: height\n\t};\n}\n\n// function getLengthOfDegree (coords) {\n// const length = {};\n//\n// // Latitude\n// if (coords.lat > 0 && coords.lat < 15){\n// length.latKm = 110.574;\n// } else if (coords.lat >= 15 && coords.lat < 30){\n// length.latKm = 110.649;\n// } else if (coords.lat >=30 && coords.lat < 45){\n// length.latKm = 110.852;\n// } else if (coords.lat >=45 && coords.lat < 60){\n// length.latKm = 111.133;\n// } else if (coords.lat >=60 && coords.lat < 75){\n// length.latKm = 111.412;\n// } else if (coords.lat >=75 && coords.lat < 90){\n// length.latKm = 111.618;\n// } else if (coords.lat >=90){\n// length.latKm = 111.694;\n// }\n//\n// // Longitude\n// if (coords.lng > 0 && coords.lng < 15){\n// length.lngKm = 111.320;\n// } else if (coords.lng >=15 && coords.lng < 30){\n// length.lngKm = 107.551;\n// } else if (coords.lng >=30 && coords.lng < 45){\n// length.lngKm = 96.486;\n// } else if (coords.lng >=45 && coords.lng < 60){\n// length.lngKm = 78.847;\n// } else if (coords.lng >=60 && coords.lng < 75){\n// length.lngKm = 55.800;\n// } else if (coords.lng >=75 && coords.lng < 90){\n// length.lngKm = 28.902;\n// } else if (coords.lng >=90){\n// length.lngKm = 0;\n// }\n//\n// return length;\n// }\n\nconst worldPosition = new Vector3();\nconst worldPositionCopy = new Vector3();\nconst cameraMatrix = new Matrix4();\nconst poiFrustum = new Frustum();\nlet intersects = [];\nlet poiInFieldOfView = null;\n\nexport function poiIntersection() {\n const isPoiActive = config.features.poi.active;\n const isLiteModeActive = projectMode.LiteMode.isActive();\n const isModeNotOrbit = settingsData.activeViewMode !== ViewMode.Orbit;\n if (!isPoiActive || isLiteModeActive || isModeNotOrbit)\n return;\n\n cameraMatrix.multiplyMatrices(\n threeJsVariables.perspectiveCamera.projectionMatrix,\n threeJsVariables.perspectiveCamera.matrixWorldInverse\n );\n poiFrustum.setFromProjectionMatrix(cameraMatrix);\n\n\tconst POI_DESIGN = config.features.poi?.designType;\n\tlet amountOfPoiInFOV = 0;\n\tconst listOfPoiToCheck = [\n\t\t'poi__label'\n\t];\n\n\tPOI.forEach(label => {\n\t\tlabel.getWorldPosition(worldPosition);\n\t\tpoiInFieldOfView = poiFrustum.containsPoint(worldPosition);\n\n\t\tif (config.features.poi.hide) {\n\t\t\tif (poiInFieldOfView) {\n\t\t\t\tworldPositionCopy.copy(worldPosition);\n\t\t\t\tworldPosition.project(threeJsVariables.perspectiveCamera);\n\n\t\t\t\tpoiRaycaster.setFromCamera(worldPosition, threeJsVariables.perspectiveCamera);\n\t\t\t\tintersects = poiRaycaster.intersectObjects(INTERSECTIONS);\n\n\t\t\t\tconst mobileBuildingLabelsHideLogic = label.element.getAttribute('mobile-hide-logic');\n\t\t\t\tif (intersects.length === 0 && mobileBuildingLabelsHideLogic !== 'hide') {\n\t\t\t\t\tlabel.element.classList.remove('hide__label');\n\t\t\t\t} else {\n\t\t\t\t\tconst originIntersectionRule = intersects.length > 0 && (intersects[0].distance < worldPositionCopy.distanceTo(threeJsVariables.perspectiveCamera.position));\n\t\t\t\t\tif (originIntersectionRule || mobileBuildingLabelsHideLogic === 'hide') {\n\t\t\t\t\t\tlabel.element.classList.add('hide__label');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlabel.element.classList.remove('hide__label');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst isAllowedPoiType = listOfPoiToCheck.some(className => label.element.classList.contains(className))\n\t\tif (isMobile && isAllowedPoiType) {\n\t\t\tif (poiInFieldOfView)\n\t\t\t\tamountOfPoiInFOV++;\n\n\t\t\tif (POI_DESIGN !== 'flat-sign' && poiInFieldOfView) {\n\t\t\t\tconst labelTitleElement = label.element.querySelector('.poi__title');\n\t\t\t\tif (calculatePOIDistanceToCamera(label) < (config.features.poi?.titleShowDistance || 50)) {\n\t\t\t\t\tlabelTitleElement.classList.remove('hidden');\n\t\t\t\t} else {\n\t\t\t\t\tlabelTitleElement.classList.add('hidden');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (POI_DESIGN === 'flat-sign' && amountOfPoiInFOV > 3 || POI_DESIGN !== 'flat-sign' && amountOfPoiInFOV > 5) {\n\t\t\t\tlabel.parent.children[1].visible = false;\n\t\t\t\t// label.element.classList.add('hide__label');\n\t\t\t\tlabel.element.setAttribute('hide-by-amount', true);\n\t\t\t} else {\n\t\t\t\tlabel.parent.children[1].visible = true;\n\t\t\t\t// label.element.classList.remove('hide__label');\n\t\t\t\tlabel.element.setAttribute('hide-by-amount', false);\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction calculatePOIDistanceToCamera(css2DObject) {\n\tconst css2DObjectPosition = new Vector3();\n\tcss2DObject.getWorldPosition(css2DObjectPosition);\n\tconst cameraPosition = threeJsVariables.perspectiveCamera.position;\n\treturn cameraPosition.distanceTo(css2DObjectPosition);\n}\n\nexport function poiToggle(visible, layerVisible) {\n\tif (!config.features.poi.active)\n\t\treturn;\n\n\tconst group = threeJsVariables.scene.getObjectByName('Poi group');\n\tif (!group)\n\t\treturn;\n\n\n\tif ((visible && PublicLayers.isActive && !layerVisible) || (visible && Environment.isActive() && !layerVisible)) {\n\t\treturn;\n\t}\n\n\t// if (group.visible === visible){\n\t// return;\n\t// }\n\n\tgroup.traverse(el => {\n\t\tif (el.name !== 'poi anchor1' && el.name !== 'poi anchor2') {\n\t\t\tel.visible = visible;\n\t\t}\n\t});\n\n\tvisible && poiIntersection();\n}\n\nexport function dealsToggle(visible) {\n\tconst group = threeJsVariables.scene.getObjectByName('Deals group');\n\tif (!group)\n\t\treturn;\n\n\tgroup.traverse(el => {\n\t\tel.visible = visible;\n\t});\n\n\tvisible && poiIntersection();\n}\n\nexport function openMarkerInfoWindowInOrbit(element, e) {\n\tconst title = element.querySelector('.poi__title').getAttribute('data-lang-en');\n\tconst poiName = element.textContent;\n\tconst poiImg = element.querySelector('.poi__icon');\n\tconst poiData = config.poiData.find(poi => poi.name.find(name => name.value === poiName));\n\tconst poiMarker = settingsData.mapMarkers.allPoiMarkersWithoutCategory.find(marker => marker.title === poiName);\n\tif (!poiMarker || !poiData) return;\n\tpoiMarker.data['360'] = poiData['360'];\n\tpoiMarker.data['customImage'] = poiData['customImage'];\n\tlet infoCardContainer;\n\n\tconst infoWindow = document.querySelector('.poi__info-window');\n\tinfoWindow && closePoiInfoWindowCardInOrbit();\n\n\tconst mainContainer = createHtmlElement(UIRoot, '', 'div', ['poi__info-window']);\n\tmainContainer.setAttribute('data-poi-title', title);\n\tif (isNoMenu)\n\t\tmainContainer.classList.add('no-menu-mode');\n\n\tif (poiImg && poiImg.tagName !== 'DIV')\n\t\tpoiMarker.data.infoWindowImg = poiImg.src;\n\n\tif (isMobile) {\n\t\tinfoCardContainer = buildInfoWindowMobileContent(poiMarker, true);\n\t\taddLanguageContent(infoCardContainer, poiData);\n\t\tmainContainer.appendChild(infoCardContainer);\n\t\tswipe = new Swipe(mainContainer);\n\t\tsetPoiCardSwipeFunctions(swipe, poiMarker, mainContainer);\n\n\t\tsetTimeout(() => {\n\t\t\topenMiniCard(mainContainer, false, true);\n\t\t}, 100);\n\n\t} else {\n\t\tinfoCardContainer = buildInfoWindowContent(poiMarker, true);\n\t\taddLanguageContent(infoCardContainer, poiData);\n\t\tmainContainer.appendChild(infoCardContainer);\n\t\tcalculateAndSetCardPosition(mainContainer, e);\n\t\tpoiCardAnimation('open');\n\t\tnew Drag(mainContainer, {\n\t\t\tupdateElementPositionAfterDragEnd: true,\n\t\t\ttouchSupport: true\n\t\t});\n\t}\n\n\t// Draw route\n\tif (!config.features.poi?.hideRoutes && !isMobile) {\n\t\tlet poiLayer;\n\t\tif (Environment.isActive()) {\n\t\t\tpoiLayer = Environment.getLayer('poi');\n\t\t} else {\n\t\t\tpoiLayer = PublicLayers.getLayer('poi');\n\t\t}\n\t\tpoiLayer && poiLayer.drawRoute(poiMarker, poiData.order);\n\t}\n}\n\nexport function resizeOrbitPoiCard() {\n\tif (!isMobile)\n\t\treturn;\n\n\tconst card = document.querySelector('.poi__info-window');\n\tif (!card)\n\t\treturn;\n\n\tif (!settingsData.isLandscape && !card.classList.contains('orbit__mode')) {\n\t\tcard.firstElementChild.style.maxWidth = 'unset';\n\t\tcard.firstElementChild.style.width = '100%';\n\t}\n\tconst poiMarker = settingsData.mapMarkers.allPoiMarkersWithoutCategory.filter(marker => marker.title === card.getAttribute('data-poi-title'))[0];\n\n\tcard.classList.contains('orbit__mode') ?\n\t\tsetMobileFullscreenCardSize(true) :\n\t\topenMiniCard(card, false, true);\n\n\tsetPoiCardSwipeFunctions(swipe, poiMarker, card);\n}\n\nexport function setActiveRouteInOrbitCard(route) {\n\tconst orbitCard = document.querySelector('.poi__info-window');\n\tif (orbitCard) {\n\t\tconst routeContainer = orbitCard.querySelector(`.route[data-route-type=\"${route}\"]`);\n\t\trouteContainer && routeContainer.classList.add('active-route');\n\t}\n}\n\nexport function resetOrbitActiveRoute() {\n\tconst orbitCard = document.querySelector('.poi__info-window');\n\tif (orbitCard) {\n\t\tconst activeOrbitRoute = orbitCard.querySelector('.route.active-route');\n\t\tactiveOrbitRoute && activeOrbitRoute.classList.remove('active-route');\n\t}\n}\n\nfunction addLanguageContent(element, poiData) {\n\tconst category = config.poiCategories.filter(category => parseInt(category.categoryId) === poiData.categoryId)[0];\n\tconst categoryTitle = element.querySelector('.snazzy-content__category-title');\n\tconst times = element.querySelectorAll('.snazzy-content__time-route');\n\tconst streetView = element.querySelector('.snazzy-content__street-view');\n\tconst title = element.querySelector('.snazzy-content__title');\n\tconst description = element.querySelector('.snazzy-content__description');\n\tconst address = element.querySelector('.snazzy-content__address');\n\n\tcategoryTitle.classList.add('language-string');\n\tcategoryTitle.setAttribute('data-dictionary', category.name.filter(name => name.lang === 'en')[0].value);\n\n\tif (streetView) {\n\t\tstreetView.classList.add('language-string');\n\t\tstreetView.setAttribute('data-dictionary', config.dictionary['Street view'].en);\n\t}\n\n\ttitle.classList.add('language-string');\n\taddress.classList.add('language-string');\n\tdescription.classList.add('language-string');\n\n\tpoiData.name.forEach(obj => {\n\t\ttitle.setAttribute(`data-lang-${obj.lang}`, obj.value);\n\t});\n\n\tpoiData.address.forEach(obj => {\n\t\taddress.setAttribute(`data-lang-${obj.lang}`, obj.value);\n\t});\n\n\tpoiData.description.forEach(obj => {\n\t\tdescription.setAttribute(`data-lang-${obj.lang}`, obj.value);\n\t});\n\n\tfor (let time of times) {\n\t\ttime.classList.add('language-string');\n\t\ttime.setAttribute('data-dictionary-parse', 'mins');\n\t}\n}\n\nfunction calculateAndSetCardPosition(container, event) {\n\tlet left, top;\n\n\tconst direction = getCurrentLangDirection();\n\n\tlet menuWidth = 0;\n\tconst asideMenuWidth = document.querySelector('.aside__container');\n\tif (asideMenuWidth)\n\t\tmenuWidth = parseFloat(asideMenuWidth.dataset.initialWidth);\n\n\tconst width = container.getBoundingClientRect().width;\n\tconst height = container.getBoundingClientRect().height;\n\tconst halfCardWidth = width / 2;\n\tconst halfCardHeight = height / 2;\n\tconst eventX = event.clientX;\n\tconst eventY = event.clientY;\n\tconst cardCenterX = eventX - halfCardWidth;\n\tconst cardCenterY = eventY - halfCardHeight;\n\n\tconst windowSize = {\n\t\tminX: (direction === 'ltr') ? menuWidth : 0,\n\t\tmaxX: (direction === 'ltr') ? window.innerWidth : window.innerWidth - menuWidth,\n\t\tminY: 0,\n\t\tmaxY: window.innerHeight\n\t};\n\n\tconst cardSize = {\n\t\tminX: eventX - halfCardWidth,\n\t\tmaxX: eventX + halfCardWidth,\n\t\tminY: eventY - halfCardHeight,\n\t\tmaxY: eventY + halfCardHeight\n\t};\n\n\tif (cardSize.minX < windowSize.minX) {\n\t\tleft = windowSize.minX;\n\t} else if (cardSize.maxX > windowSize.maxX) {\n\t\tleft = windowSize.maxX - width;\n\t} else {\n\t\tleft = cardCenterX;\n\t}\n\n\n\tif (cardSize.minY < windowSize.minY) {\n\t\ttop = windowSize.minY;\n\t} else if (cardSize.maxY > windowSize.maxY) {\n\t\ttop = windowSize.maxY - height;\n\t} else {\n\t\ttop = cardCenterY;\n\t}\n\n\tcontainer.style.left = left + 'px';\n\tcontainer.style.top = top + 'px';\n\n\tcontainer.setAttribute('clickX', cardCenterX);\n\tcontainer.setAttribute('clickY', cardCenterY);\n\tcontainer.setAttribute('initialLeft', left);\n\tcontainer.setAttribute('initialTop', top);\n}\n\nexport function closePoiInfoWindowCardInOrbit(smoothClose = false, returnMapToBuilding = true) {\n\tif (settingsData.activeViewMode !== ViewMode.Orbit)\n\t\treturn;\n\n\tconst mainContainer = document.querySelector('.poi__info-window');\n\tif (!mainContainer)\n\t\treturn;\n\n\tif (isMobile) {\n\t\tmainContainer.classList.remove('open-mobile-card');\n\t\tif (smoothClose) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tmainContainer.remove();\n\t\t\t\tmobileBurgerStyleToggle();\n\t\t\t\tresetMapRenderer();\n\t\t\t\treturnMapToBuilding && smoothlyAnimatePanTo(map, settingsData.mapCenter);\n\t\t\t}, 200);\n\t\t} else {\n\t\t\tmainContainer.remove();\n\t\t\tmobileBurgerStyleToggle();\n\t\t\tresetMapRenderer();\n\t\t\treturnMapToBuilding && smoothlyAnimatePanTo(map, settingsData.mapCenter);\n\t\t}\n\t} else {\n\t\tif (smoothClose) {\n\t\t\tpoiCardAnimation('close');\n\t\t\tsetTimeout(() => {\n\t\t\t\tmainContainer.remove();\n\t\t\t\tresetMapRenderer();\n\t\t\t\treturnMapToBuilding && smoothlyAnimatePanTo(map, settingsData.mapCenter);\n\t\t\t}, 200);\n\t\t} else {\n\t\t\tmainContainer.remove();\n\t\t\tresetMapRenderer();\n\t\t\treturnMapToBuilding && smoothlyAnimatePanTo(map, settingsData.mapCenter);\n\t\t}\n\t}\n\tclosePrevInfoWindow();\n\n\tlet poiLayer;\n\n\tif (Environment.isActive()) {\n\t\tpoiLayer = Environment.getLayer('poi');\n\t} else {\n\t\tpoiLayer = PublicLayers.getLayer('poi');\n\t}\n\tpoiLayer && poiLayer.removeRoute();\n}\n\nexport function setPoiCardSwipeFunctions(classVariable, ...args) {\n\tconst dir = getCurrentLangDirection();\n\tclassVariable.stop();\n\tif (!settingsData.isLandscape) {\n\t\tclassVariable.onDown(() => {\n\t\t\tclosePoiInfoWindowCardInOrbit(true)\n\t\t});\n\t\tclassVariable.onUp(() => {\n\t\t\topenMiniCardFullscreen(args[0], true);\n\t\t\targs[1].classList.add('orbit__mode');\n\t\t\tmobileBurgerStyleToggle();\n\t\t\tclassVariable.onDown = () => {\n\t\t\t};\n\t\t});\n\t} else {\n\t\tswitch (dir) {\n\t\t\tcase 'rtl':\n\t\t\t\tclassVariable.onLeft(() => closePoiInfoWindowCardInOrbit(true));\n\t\t\t\tclassVariable.onRight(() => {\n\t\t\t\t\topenMiniCardFullscreen(args[0], true);\n\t\t\t\t\targs[1].classList.add('orbit__mode');\n\t\t\t\t\tmobileBurgerStyleToggle();\n\t\t\t\t\tclassVariable.onDown = () => {\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase 'ltr':\n\t\t\t\tclassVariable.onRight(() => closePoiInfoWindowCardInOrbit(true));\n\t\t\t\tclassVariable.onLeft(() => {\n\t\t\t\t\topenMiniCardFullscreen(args[0], true);\n\t\t\t\t\targs[1].classList.add('orbit__mode');\n\t\t\t\t\tmobileBurgerStyleToggle();\n\t\t\t\t\tclassVariable.onDown = () => {\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tclassVariable.run();\n}\n\nfunction poiCardAnimation(action) {\n\tconst card = document.querySelector('.poi__info-window');\n\tif (!card)\n\t\treturn;\n\n\t// let left = isDesktop ? window.innerWidth - card.getBoundingClientRect().width - 37 : getCurrentLangDirection() === 'ltr' ? window.innerWidth - card.getBoundingClientRect().width - 37 : 37;\n\n\tconst cardBounds = card.getBoundingClientRect();\n\tconst windowBounds = TRoot.getBoundingClientRect();\n\tconst menu = window.innerWidth - windowBounds.width;\n\tconst clickX = parseFloat(card.getAttribute('clickX'));\n\tconst clickY = parseFloat(card.getAttribute('clickY'));\n\tlet left = clickX;\n\tlet top = clickY;\n\tconst padding = 10;\n\n\tif (clickX + cardBounds.width - menu > windowBounds.width) {\n\t\tleft = menu + windowBounds.width - cardBounds.width + padding;\n\t} else if (clickX < windowBounds.x) {\n\t\tleft = windowBounds.x + padding;\n\t}\n\n\tif (getCurrentLangDirection() === 'rtl') {\n\t\tif (clickX + cardBounds.width > windowBounds.width) {\n\t\t\tleft = windowBounds.width - cardBounds.width - padding;\n\t\t}\n\t}\n\n\tif (clickY + cardBounds.height + 80 > windowBounds.height) {\n\t\ttop = windowBounds.height - cardBounds.height - 80 - padding;\n\t} else if (clickY < 0) {\n\t\ttop = padding;\n\t}\n\n\tswitch (action) {\n\t\tcase 'open':\n\t\t\tgsap.fromTo(card, {\n\t\t\t\ttransform: 'scale(0)',\n\t\t\t\tleft: card.getAttribute('clickX'),\n\t\t\t\ttop: card.getAttribute('clickY')\n\t\t\t}, {\n\t\t\t\tleft: left,\n\t\t\t\t// left: card.getAttribute('initialLeft'),\n\t\t\t\t// top: card.getAttribute('initialTop'),\n\t\t\t\t// top: 110,\n\t\t\t\ttop: top,\n\t\t\t\ttransform: 'scale(1)',\n\t\t\t\tduration: .2,\n\t\t\t\tdelay: 0,\n\t\t\t});\n\t\t\tbreak;\n\t\tcase 'close':\n\t\t\tgsap.to(card, {\n\t\t\t\tduration: .2,\n\t\t\t\tdelay: 0,\n\t\t\t\tleft: card.getAttribute('clickX'),\n\t\t\t\ttop: card.getAttribute('clickY'),\n\t\t\t\ttransform: 'scale(0)'\n\t\t\t});\n\t\t\tbreak;\n\t}\n}\n\nexport function updateMapPanoramaInOrbit() {\n\tconst container = document.querySelector('.map__panorama__orbit');\n\tif (!container)\n\t\treturn;\n\n\tpageResize(container);\n}\n\n","import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader';\nimport { disposeObject, isCylinderDisplayModeEqual, lazyLoadingData } from '../../functions';\nimport {\n Box3,\n Color,\n Euler,\n Group,\n InstancedMesh,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n MeshStandardMaterial,\n Quaternion,\n Raycaster,\n TextureLoader,\n Vector3,\n LinearFilter,\n LinearMipmapLinearFilter,\n RepeatWrapping,\n MeshPhongMaterial,\n EquirectangularReflectionMapping, LinearSRGBColorSpace,\n} from 'three';\nimport {globalTextures, resourcesFolder, settingsData, threeJsVariables} from '../../settings';\nimport gsap from \"gsap\";\nimport { basic_tile } from '../threejs/environment';\nimport StandardFragment from '../threejs/Shaders/meshstandard_fragment_full_130'\nimport { ColorCorrection } from '../threejs/colorCorrection';\nimport { ViewMode } from '../../common';\nimport { fixModelUV } from '../threejs/autoProjectScript';\n\nconst axios = require('axios').default;\n\nlet platePoints;\n// ../../../resources/sceneObjects/platePoints\n\nexport const sceneObjectsGroup = new Group();\nsceneObjectsGroup.name = 'Scene objects';\n\nexport function addSceneObjects (loader,textureLoader,gltfLoader,projectGroup) {\n const { active, models } = config.resources.sceneObjects;\n\n if (!active) return;\n\n const {cdnRepository,projectFolder} = config;\n const url = `${cdnRepository}/${projectFolder}/${resourcesFolder}/sceneObjects/models/`;\n const textureUrl = `${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/textures/building/`;\n const fbxLoader = loader.fbxLoader;\n const colors = new ColorCorrection().getColors('buildings');\n\n\n models.forEach(modelObject => {\n\n const extension = modelObject.path.split('.')[1];\n\n switch (extension) {\n\n case 'glb':\n\n gltfLoader.load(url + modelObject.path, (gltf) =>{\n let meshMaterial;\n\n if (modelObject.material){\n\n if (modelObject.material.specularMap){\n meshMaterial = new MeshPhongMaterial();\n } else {\n meshMaterial = new MeshStandardMaterial();\n // meshMaterial.onBeforeCompile((shader,renderer)=>{\n // shader.fragmentShader = StandardFragment\n // })\n }\n\n const materials = modelObject.material;\n\n for (let key in materials) {\n\n let value = materials[key];\n\n if ( value instanceof Object){\n let texture;\n\n const fullUrl = textureUrl + value.path;\n\n if (globalTextures.hasOwnProperty(fullUrl)){\n texture = globalTextures[fullUrl];\n } else {\n texture = textureLoader.load(fullUrl);\n globalTextures[fullUrl] = texture;\n }\n\n texture.name = key;\n\n switch (key) {\n case 'envMap':\n texture.mapping = EquirectangularReflectionMapping;\n break;\n case 'lightMap':\n case 'aoMap':\n texture.channel = 1;\n break\n\n }\n\n\n Object.entries(value).forEach(([key,value])=>{\n if (key !== 'path'){\n texture[key] = value;\n texture.colorSpace = LinearSRGBColorSpace;\n texture.wrapS = RepeatWrapping;\n texture.wrapT = RepeatWrapping;\n texture.offset.set(0,0);\n texture.repeat.set(1,1);\n }\n });\n\n meshMaterial[key] = texture;\n }else{\n if (key === 'lightMapIntensity') {\n value = value * Math.PI;\n }\n meshMaterial[key] = value;\n }\n\n }\n\n }\n\n const objectGroup = new Group();\n\n gltf.scene.traverse(el => {\n if (el.material) {\n el.material = meshMaterial.clone();\n fixModelUV(el,el.material);\n el.material.color.setStyle(colors.color,LinearSRGBColorSpace);\n el.material.emissive.setStyle(colors.emissive,LinearSRGBColorSpace);\n\n const mesh = new Mesh(el.geometry,el.material);\n mesh.castShadow = true;\n mesh.receiveShadow = true;\n mesh.position.copy(el.position);\n mesh.scale.copy(el.scale);\n mesh.rotation.copy(el.rotation);\n mesh.name = modelObject.name;\n\n objectGroup.add(mesh);\n }\n });\n\n // if (modelObject.attach){\n // objectGroup.name = modelObject.name;\n // const target = threeJsVariables.scene.getObjectByName(modelObject.attach);\n // target.attach(objectGroup);\n // objectGroup.rotation.set(modelObject.rotation.x,modelObject.rotation.y,modelObject.rotation.z);\n // objectGroup.name = modelObject.name;\n // } else {\n objectGroup.position.set(modelObject.position.x,modelObject.position.y,modelObject.position.z);\n objectGroup.rotation.set(modelObject.rotation.x,modelObject.rotation.y,modelObject.rotation.z);\n objectGroup.scale.set(modelObject.scale.x,modelObject.scale.y,modelObject.scale.z);\n objectGroup.name = modelObject.name;\n\n sceneObjectsGroup.add(objectGroup);\n // }\n\n });\n\n\n break;\n\n case 'fbx':\n\n fbxLoader.load(url + modelObject.path,(loadedModel)=>{\n let model;\n let meshMaterial;\n\n if (!loadedModel.isMesh){\n model = loadedModel.children[0];\n } else {\n model = loadedModel;\n }\n\n if (modelObject.material){\n\n if (modelObject.material.specularMap){\n meshMaterial = new MeshPhongMaterial();\n } else {\n meshMaterial = new MeshStandardMaterial();\n // meshMaterial.onBeforeCompile = (shader,renderer)=>{\n // shader.fragmentShader = StandardFragment\n // }\n }\n\n const materials = modelObject.material;\n\n for (let key in materials) {\n\n let value = materials[key];\n\n if ( value instanceof Object){\n let texture;\n\n const fullUrl = textureUrl + value.path;\n\n if (globalTextures.hasOwnProperty(fullUrl)){\n texture = globalTextures[fullUrl];\n } else {\n texture = textureLoader.load(fullUrl);\n globalTextures[fullUrl] = texture;\n }\n\n texture.name = key;\n\n // if (key==='envMap'){\n // texture.mapping = EquirectangularReflectionMapping;\n // }\n //\n switch (key) {\n case 'envMap':\n texture.mapping = EquirectangularReflectionMapping;\n break;\n case 'lightMap':\n case 'aoMap':\n texture.channel = 1;\n break\n\n }\n\n Object.entries(value).forEach(([key,value])=>{\n if (key !== 'path'){\n texture[key] = value;\n texture.colorSpace = LinearSRGBColorSpace;\n texture.wrapS = RepeatWrapping;\n texture.wrapT = RepeatWrapping;\n texture.offset.set(0,0);\n texture.repeat.set(1,1);\n }\n });\n\n meshMaterial[key] = texture;\n }else{\n if (key === 'lightMapIntensity') {\n value = value * Math.PI;\n }\n meshMaterial[key] = value;\n }\n\n }\n\n fixModelUV(model,meshMaterial);\n model.material = meshMaterial;\n model.material.color.setStyle(colors.color,LinearSRGBColorSpace);\n model.material.emissive.setStyle(colors.emissive,LinearSRGBColorSpace);\n model.position.set(0,0,0);\n model.rotation.set(0,0,0);\n model.scale.set(1,1,1);\n model.castShadow = true;\n model.receiveShadow = true;\n\n\n } else {\n meshMaterial = model.material.map;\n\n model.castShadow = false;\n meshMaterial.colorSpace = LinearSRGBColorSpace;\n meshMaterial.wrapS = RepeatWrapping;\n meshMaterial.wrapT = RepeatWrapping;\n meshMaterial.offset.set(0,0);\n meshMaterial.repeat.set(1,1);\n\n meshMaterial.anisotropy = 2;\n meshMaterial.magFilter = LinearFilter;\n meshMaterial.minFilter = LinearMipmapLinearFilter;\n\n model.material = basic_tile.clone();\n model.material.uniforms.map.value = meshMaterial;\n }\n\n loadedModel.position.set(modelObject.position.x,modelObject.position.y,modelObject.position.z);\n loadedModel.rotation.set(modelObject.rotation.x,modelObject.rotation.y,modelObject.rotation.z);\n loadedModel.scale.set(modelObject.scale.x,modelObject.scale.y,modelObject.scale.z);\n loadedModel.name = modelObject.name;\n\n sceneObjectsGroup.add(loadedModel);\n\n });\n\n break;\n\n }\n\n });\n\n // if (sceneObjectsGroup.children.length!==0){\n threeJsVariables.scene.add(sceneObjectsGroup);\n threeJsVariables.renderList.reorder();\n\n // if (config.resources.sceneObjects.order === 0) {\n // let indA = threeJsVariables.scene.children.indexOf(sceneObjectsGroup);\n // let indB = threeJsVariables.scene.children.indexOf(projectGroup);\n // threeJsVariables.scene.children[indB] = sceneObjectsGroup;\n // threeJsVariables.scene.children[indA] = projectGroup;\n // }\n // }\n\n\n\n // const lightMap = loadTexturesForModels();\n // lightMap.then(texture =>{\n // config.resources.sceneObjects.textures.lightMap = texture;\n //\n // const models = loadSceneObjectsModels();\n // models.then(response => {\n // setModelsAtPoints(response);\n // startGeneratePoints(response);\n // });\n // });\n\n}\n\n// export function lazyHideSceneObject (model) {\n// if (!config.resources.sceneObjects.active || settingsData.activeViewMode === ViewMode.Orbit) return;\n//\n// model.traverse(obj => {\n// if (obj.isMesh) {\n// const object = config.resources.sceneObjects.models.find(model => model.name === obj.name);\n// if (object && object.attach) return;\n//\n// obj.visible = false\n// // gsap.to(obj.material,{\n// // duration: 0,\n// // transparent: true,\n// // opacity: 0,\n// // onComplete: () => obj.visible = false\n// // });\n// }\n// });\n// }\n\nexport function hideObjectsInCylinder (state) {\n const names = config.resources.sceneObjects.hideObjectsInCylinder || [];\n names.forEach(name => {\n const obj = threeJsVariables.scene.getObjectByName(name);\n if (obj) {\n obj.visible = !state;\n }\n });\n}\n\nexport function removeObjectsFromScene () {\n const names = config.resources.sceneObjects.removeObjectsFromScene || [];\n const hideObjectsInCylinder = config.resources.sceneObjects.hideObjectsInCylinder || [];\n \n names.forEach(name => {\n if (hideObjectsInCylinder.includes(name)) {\n config.resources.sceneObjects.hideObjectsInCylinder = config.resources.sceneObjects.hideObjectsInCylinder.filter(objName => objName !== name);\n }\n const object = threeJsVariables.scene.getObjectByName(name);\n object && disposeObject(object);\n });\n}\n\n\nexport function hideSceneObjects(building,hideWithoutAnimation = false ){\n if (!config.resources.sceneObjects.active\n || config.features.privateHouseMode\n || isCylinderDisplayModeEqual('show all')) return;\n\n if (hideWithoutAnimation) {\n sceneObjectsGroup.visible = false;\n return;\n }\n\n let attachedModels = [];\n\n if (building) {\n attachedModels = config.resources.sceneObjects.models.filter(model => model.attach === building.name);\n }\n\n sceneObjectsGroup.traverse(obj =>{\n if (obj.isMesh){\n const object = attachedModels.find(model => model.name === obj.name);\n if (object) {\n return;\n }\n\n obj.visible = false;\n }\n });\n}\n\n\nexport function showSceneObjects(building){\n if (!config.resources.sceneObjects.active\n || config.features.privateHouseMode\n || isCylinderDisplayModeEqual('show all')) return;\n\n let attachedModels = [];\n //\n if (building) {\n attachedModels = config.resources.sceneObjects.models.filter(model => model.attach === building.name);\n }\n\n sceneObjectsGroup.traverse(obj =>{\n if (obj.isMesh){\n const object = attachedModels.find(model => model.name === obj.name);\n\n if (building) {\n obj.visible = !!(object && object.attach === building.name);\n obj.visible && obj.layers.set(0);\n\n } else {\n obj.visible = true;\n obj.layers.set(0);\n }\n }\n });\n}\n\nasync function startGeneratePoints (models) {\n const isEnabled = settingsData.calculatePoints;\n if (!isEnabled){\n return;\n }\n\n console.log('%c Points calculating has been started....','color: #32a852');\n\n const loader = new FBXLoader();\n const baseAreas = config.resources.sceneObjects.baseAreas;\n const {cdnRepository,projectFolder} = config;\n const url = `${cdnRepository}/${projectFolder}/${resourcesFolder}/sceneObjects/models/`;\n\n for (const model of baseAreas) {\n const baseArea = await lazyLoadingData(loader, url + model.path);\n baseArea.position.set(model.position.x,model.position.y,model.position.z);\n baseArea.rotation.set(model.rotation.x,model.rotation.y,model.rotation.z);\n baseArea.scale.set(model.scale.x,model.scale.y,model.scale.z);\n const usedModels = getUsedModels(models, model.models);\n startConstruct(usedModels,baseArea, model);\n }\n\n}\n\nasync function setModelsAtPoints (models) {\n const sceneMapping = config.resources.sceneObjects.sceneMapping;\n const isActive = config.resources.sceneObjects.active;\n const isConstructEnabled = settingsData.calculatePoints;\n if (!isActive || isConstructEnabled){\n return;\n }\n const {cdnRepository,projectFolder} = config;\n const platePointsUrl = `${cdnRepository}/${projectFolder}/${resourcesFolder}/sceneObjects/platePoints.json`;\n const plateResponse = await axios.get(platePointsUrl);\n platePoints = plateResponse.data;\n\n sceneMapping.forEach(object =>{\n const points = platePoints[object.key];\n const usedModels = getUsedModels(models, object.models);\n addModelsOnPoints(usedModels,points,object.name,object.position);\n });\n}\n\nfunction getUsedModels (allModels, usedModelsArray) {\n const usedModels = [];\n\n allModels.forEach(model =>{\n if (usedModelsArray.includes(model.name)){\n usedModels.push(model);\n }\n });\n\n return usedModels;\n}\n\nasync function loadSceneObjectsModels () {\n const models = [];\n const modelsArray = config.resources.sceneObjects.models;\n const loader = new FBXLoader();\n const {cdnRepository,projectFolder} = config;\n const url = `${cdnRepository}/${projectFolder}/${resourcesFolder}/sceneObjects/models/`;\n\n for (const model of modelsArray) {\n const response = await lazyLoadingData(loader, url + model.path);\n const loadedModel = response.children[0];\n setInitialModelState(loadedModel,model);\n models.push(loadedModel);\n }\n\n return models;\n}\n\nfunction loadTexturesForModels () {\n return new Promise(resolve => {\n if (config.resources.sceneObjects.textures.lightMap){\n const textureLoader = new TextureLoader();\n const {cdnRepository,projectFolder} = config;\n const url = `${cdnRepository}/${projectFolder}/${resourcesFolder}/sceneObjects/models/`;\n const lightMapTexture = lazyLoadingData(textureLoader,url + config.resources.sceneObjects.textures.lightMap);\n lightMapTexture.then(texture =>{\n resolve(texture);\n });\n } else {\n resolve(null);\n }\n });\n}\n\nexport function showPointsModels (name) {\n const models = threeJsVariables.scene.getObjectByName(name);\n\n if (models){\n models.visible = true;\n models.traverse(mesh => {\n if (mesh.isMesh) {\n const animation = gsap.to(mesh.material, {\n duration: 1,\n transparent: true,\n opacity: 1,\n onStart: () => {\n\n },\n onComplete: () => {\n\n },\n });\n }\n });\n }\n}\n\nexport function hidePointsModels (name) {\n const models = threeJsVariables.scene.getObjectByName(name);\n\n if (models && models.visible){\n\n models.traverse(mesh => {\n if (mesh.isMesh) {\n const animation = gsap.to(mesh.material, {\n duration: 1,\n transparent: true,\n opacity: 0,\n onStart: () => {\n\n },\n onComplete: () => {\n models.visible = false;\n },\n });\n }\n });\n\n }\n}\n\n\nfunction setInitialModelState (model, modelProperties) {\n model.scale.set(modelProperties.scale.x,modelProperties.scale.y,modelProperties.scale.z);\n model.material.map.colorSpace = LinearSRGBColorSpace;\n model.material.transparent = true;\n model.material.alphaTest = 0.5;\n model.material.shininess = 0;\n model.material.specular = new Color().setHex(0x000000,LinearSRGBColorSpace);\n model.name = modelProperties.name;\n\n Object.entries(modelProperties.material).forEach(([key,value]) =>{\n switch (key) {\n case 'color':\n model.material[key] = new Color().setStyle(value,LinearSRGBColorSpace);\n break;\n case 'lightMap':\n if (value){\n model.material.lightMap = config.resources.sceneObjects.textures.lightMap;\n }\n break;\n default:\n model.material[key] = value;\n break;\n }\n });\n}\n\nexport function addModelsOnPoints (models, arrayOfPoints,name, position) {\n const group = new Group();\n group.name = name;\n group.position.set(position.x,position.y,position.z);\n\n const maxArrayIndex = arrayOfPoints.length - 1;\n const elementsInOneArray = Math.floor(maxArrayIndex / models.length);\n\n const slicedArrays = sliceArray(arrayOfPoints, elementsInOneArray);\n\n slicedArrays.forEach((array, index) =>{\n const model = models[index];\n if (model){\n const instance = createInstanceModel(models[index],array,array.length);\n group.add(instance);\n }\n });\n\n threeJsVariables.scene.add(group);\n threeJsVariables.renderList.reorder();\n\n}\n\n\nfunction startConstruct (models, baseArea, modelProperties) {\n const maxSquare = getMaxSquare(models);\n\n const raycaster = new Raycaster();\n\n const allPoints = [];\n\n threeJsVariables.scene.add(baseArea);\n threeJsVariables.renderList.reorder();\n\n\n baseArea.children.forEach(childPlate =>{\n const points = calculatePoints(childPlate,modelProperties.squareModification,raycaster,maxSquare);\n allPoints.push(...points);\n });\n\n shuffleArray(allPoints);\n\n console.log(`%c Total points at plate-${modelProperties.name}: ${allPoints.length}. The result you can get from localStorage`,'color:' +\n ' #32a852');\n\n localStorage.setItem(`points-${modelProperties.name}`,JSON.stringify(allPoints));\n\n const group = new Group();\n group.name = `plate-${modelProperties.name}`;\n\n const maxArrayIndex = allPoints.length - 1;\n const elementsInOneArray = Math.floor(maxArrayIndex / models.length);\n\n const slicedArrays = sliceArray(allPoints, elementsInOneArray);\n\n slicedArrays.forEach((array, index) =>{\n const model = models[index];\n if (model){\n const instanceTrees = createInstanceModel(models[index],array,array.length);\n group.add(instanceTrees);\n }\n });\n\n threeJsVariables.scene.add(group);\n threeJsVariables.renderList.reorder();\n\n}\n\nfunction calculatePoints (plate, squareModification,raycaster,maxSquare) {\n const points =[];\n const size = getPlateSize(plate);\n const maxX = size.x / 2;\n const minX = (size.x / 2) * -1;\n const maxZ = size.z / 2;\n const minZ = (size.z / 2) * -1;\n const directionToPlant = maxX > maxZ ? 'x' : 'z';\n\n let firstMin, firstMax, secondMin, secondMax;\n\n switch (directionToPlant) {\n case 'x':\n firstMin = minZ;\n firstMax = maxZ;\n secondMin = minX;\n secondMax = maxX;\n break;\n case 'z':\n firstMin = minX;\n firstMax = maxX;\n secondMin = minZ;\n secondMax = maxZ;\n break;\n }\n\n for (let min = firstMin; min < firstMax; min +=squareModification * maxSquare){\n for (let sMin = secondMin; sMin < secondMax; sMin +=squareModification * maxSquare){\n\n const rZ = min * Math.random() * 5;\n const rX = sMin * Math.random() * 5;\n\n // const geometry = new BoxBufferGeometry(1,1,1);\n const material = new MeshBasicMaterial({color: 0x000000});\n const cube = new Mesh(geometry,material);\n cube.position.set(rX,rZ,0);\n plate.add(cube);\n\n const cubeWorldPosition = cube.getWorldPosition(new Vector3());\n\n const origin = new Vector3().copy(cubeWorldPosition);\n origin.y = 1000;\n const direction = new Vector3().copy(cubeWorldPosition);\n direction.y = -1000;\n raycaster.set(origin, direction.sub(origin).normalize());\n\n const intersects = raycaster.intersectObjects([plate]);\n if (intersects.length){\n points.push(cubeWorldPosition);\n plate.remove(cube);\n } else {\n plate.remove(cube);\n }\n\n geometry.dispose();\n material.dispose();\n\n }\n\n }\n\n if (!points.length){\n if (plate.geometry){\n const arrayValue = [0,1,2,3];\n const random = Math.floor(Math.random() * arrayValue.length);\n const vertices = plate.geometry.getAttribute('position');\n const point = new Vector3().fromBufferAttribute(vertices,arrayValue[random]);\n\n // const geometry = new BoxBufferGeometry(1,1,1);\n const material = new MeshBasicMaterial({color: 0x030bfc});\n const cube = new Mesh(geometry,material);\n cube.position.set(point.x,point.y,point.z);\n plate.add(cube);\n\n const cubeWorldPosition = cube.getWorldPosition(new Vector3());\n points.push(cubeWorldPosition);\n\n geometry.dispose();\n material.dispose();\n plate.remove(cube);\n }\n }\n\n return points;\n\n}\n\n\nfunction sliceArray (array, pieces) {\n const newArr = [];\n for (let i = 0; i < array.length; i +=pieces){\n newArr.push(array.slice(i,i + pieces));\n }\n return newArr;\n}\n\nfunction randomRotation (min,max) {\n return min + ((max - min) * Math.random());\n}\n\nfunction createInstanceModel (model,arrayOfPoints, count) {\n const instanceMesh = new InstancedMesh(model.geometry,model.material,count);\n instanceMesh.castShadow = false;\n instanceMesh.receiveShadow = false;\n instanceMesh.frustumCulled = false;\n instanceMesh.scale.set(1,1,1);\n\n let i = 0;\n\n arrayOfPoints.forEach(point=>{\n const matrix = new Matrix4();\n const rotation = new Euler(0, 2 * Math.PI * Math.random(),randomRotation(0,0.2),'XYZ');\n const quaternion = new Quaternion().setFromEuler(rotation);\n const randomScale = model.scale.x * Math.random() + model.scale.x;\n const scaleVector = new Vector3(randomScale,randomScale,randomScale);\n // const scaleVector = new Vector3(model.scale.x,model.scale.x,model.scale.x);\n const position = new Vector3(point.x,point.y - Math.random() * 5 ,point.z);\n // const scaleVector = new Vector3(model.scale.x, model.scale.y,model.scale.z);\n matrix.compose(position,quaternion,scaleVector);\n instanceMesh.setMatrixAt(i,matrix);\n i++;\n });\n\n instanceMesh.renderOrder = 1;\n instanceMesh.name = `instanceTree${model.name}`;\n\n return instanceMesh;\n}\n\nfunction shuffleArray (array) {\n return array.sort(() => Math.random() - 0.5);\n}\n\nfunction getPlateSize (plate) {\n return new Box3().setFromObject(plate).getSize(new Vector3());\n}\n\nfunction getPlateCenter (plate) {\n return new Box3().setFromObject(plate).getCenter(new Vector3());\n}\n\nfunction getPlateSquare (plate) {\n const box = new Box3().setFromObject(plate).getSize(new Vector3());\n return Math.floor(box.x * box.z);\n}\n\nfunction getMaxSquare (treesArray) {\n const squares = [];\n treesArray.forEach(tree=>{\n const box = new Box3().setFromObject(tree).getSize(new Vector3());\n const square = box.x * box.z;\n squares.push(square);\n });\n\n return Math.ceil(Math.max(...squares));\n}\n","'use strict';\n\nimport { DepthFormat, DepthTexture, FloatType, NearestFilter, Vector2, WebGLRenderTarget } from 'three';\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer';\nimport { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass';\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass';\nimport { FXAAShader } from 'three/examples/jsm/shaders/FXAAShader';\nimport { CopyShader } from 'three/examples/jsm/shaders/CopyShader';\nimport { DOF } from './Passes/DOF';\nimport { ScreenSpaceAmbientOcclusion } from './Passes/SSAO';\nimport { Bloom } from './Passes/Bloom';\nimport { ToneMapping } from './Passes/ToneMapping';\nimport { TransitionPass } from './Passes/TransitionPass';\nimport { isDev, isMobile, threeJsVariables } from '../../settings';\nimport { CylinderAnimation } from './Passes/CylinderAnimation';\nimport { FogEffect } from './Passes/Fog';\nimport { GTAOLite } from './Passes/GTAOLite';\nimport { SceneLUT } from './Passes/SceneLUT';\nimport { OutputPass } from 'three/examples/jsm/postprocessing/OutputPass';\nimport { MaskObject } from './Passes/MaskObjectPass';\n\nexport class Composer {\n #samples = config.threejs.effectComposer?.samples || 0;\n #effects = config.threejs.effectComposer?.effects || [\n {\n \"name\": \"ssao\",\n \"active\": false,\n \"params\": {\n \"kernelRadius\": 8,\n \"minDistance\": 0.005,\n \"maxDistance\": 0.1\n }\n },\n {\n \"name\": \"gtao\",\n \"active\": false,\n \"params\": {\n \"aoRadius\": 0.25,\n \"distanceExponent\": 1,\n \"thickness\": 1,\n \"scale\": 1,\n \"aoSamples\": 16,\n \"distanceFallOff\": 1,\n \"screenSpaceRadius\": true,\n \"lumaPhi\": 10,\n \"depthPhi\": 2,\n \"normalPhi\": 3,\n \"pdRadius\": 4,\n \"radiusExponent\": 1,\n \"rings\": 2,\n \"pdSamples\": 16\n }\n },\n {\n \"name\": \"fog\",\n \"active\": false,\n \"params\": {\n \"fogColor\": '#dedede',\n \"fogNear\": 0.7,\n \"fogFar\": 0.35,\n \"fogDensity\": 1\n }\n },\n {\n \"name\": \"dof\",\n \"active\": false,\n \"params\": {\n \"aperture\": 0.025,\n \"maxblur\": 0.01\n }\n },\n {\n \"name\": \"bloom\",\n \"active\": false,\n \"params\": {\n \"strength\": 1.5,\n \"radius\": 0.4,\n \"threshold\": 0.85\n }\n },\n {\n \"name\": \"toneMapping\",\n \"active\": false,\n \"params\": {\n \"middleGrey\": 0.6,\n \"maxLuminance\": 16,\n \"averageLuminance\": 1\n }\n },\n {\n \"name\": \"lut\",\n \"active\": false,\n \"params\": {\n \"intensity\": 1\n }\n }\n ];\n\n constructor (renderer,scene,camera) {\n this.renderer = renderer;\n this.scene = scene;\n this.camera = camera;\n this.updatables = [];\n this.passes = {};\n let needFXAA = false;\n \n this.registerNewEffects();\n\n const depthTexture = new DepthTexture();\n depthTexture.magFilter = NearestFilter;\n depthTexture.minFilter = NearestFilter;\n depthTexture.format = DepthFormat;\n depthTexture.type = FloatType;\n const size = this.renderer.getSize( new Vector2() );\n\n if (this.renderer.capabilities.isWebGL2 && !isMobile) {\n const samples = Number(this.#samples) === 0 ? Math.trunc(this.renderer.capabilities.maxSamples / 2) : Number(this.#samples);\n const renderTarget = new WebGLRenderTarget( size.width, size.height, { samples: samples, depthTexture } );\n this.composer = new EffectComposer(this.renderer,renderTarget);\n } else {\n const renderTarget = new WebGLRenderTarget( size.width, size.height, { depthTexture } );\n this.composer = new EffectComposer(this.renderer,renderTarget);\n needFXAA = true;\n }\n\n this.setPixelRatio(Math.min(window.devicePixelRatio,2));\n\n const scenePass = new RenderPass(this.scene,this.camera);\n scenePass.name = 'ScenePass';\n this.composer.addPass(scenePass);\n\n this.fxaaPass = new ShaderPass(FXAAShader);\n this.fxaaPass.name = 'FXAA';\n const pixelRatio = this.renderer.getPixelRatio();\n this.fxaaPass.material.uniforms[ 'resolution' ].value.x = 1 / ( this.renderer.domElement.offsetWidth * pixelRatio );\n this.fxaaPass.material.uniforms[ 'resolution' ].value.y = 1 / ( this.renderer.domElement.offsetHeight * pixelRatio );\n this.fxaaPass.enabled = needFXAA;\n this.composer.addPass(this.fxaaPass);\n this.copyPass = new OutputPass();\n this.copyPass.name = 'CopyPass';\n this.composer.addPass(this.copyPass);\n\n this.position = 1;\n\n this.addEffects();\n this.#debug();\n }\n\n addEffects() {\n this.#effects.forEach(effect => {\n let scope = null;\n switch (effect.name) {\n case 'lut':\n scope = new SceneLUT();\n scope.config = effect.params;\n break;\n case 'toneMapping':\n scope = new ToneMapping(effect.params);\n break;\n case 'bloom':\n scope = new Bloom(this.renderer,effect.params);\n break;\n // case 'sao':\n // scope = new ScalableAmbientOcclusion(this.renderer,this.scene,this.camera,effect.params);\n // break;\n case 'ssao':\n scope = new ScreenSpaceAmbientOcclusion(this.camera,effect.params);\n break;\n case 'gtao':\n scope = new GTAOLite(this.camera);\n scope.config = effect.params;\n break;\n case 'dof':\n scope = new DOF(this.camera,effect.params);\n break;\n case 'fog':\n scope = new FogEffect(this.camera,window.innerWidth,window.innerHeight,effect.params);\n scope.defaultParams.active = effect.active;\n break;\n default:\n console.warn(`Unregistered effect - ${effect.name}`);\n break;\n }\n\n if (scope) {\n scope.active = effect.active;\n this.addPass(effect.name,scope);\n }\n\n });\n\n // Registering other effects\n const mapTransition = new TransitionPass();\n mapTransition.active = false;\n this.addPass('map',mapTransition);\n \n const size = this.renderer.getSize( new Vector2() );\n const cylinderTransition = new CylinderAnimation(this.camera,size.x,size.y);\n this.addPass('cylinderPass',cylinderTransition);\n \n const maskObject = new MaskObject(this.camera,size.x,size.y);\n this.addPass('maskObjectPass',maskObject);\n // this.composer.insertPass(cylinderTransition.effect,2);\n \n }\n \n registerNewEffects() {\n if (!this.#effects.find(effect => effect.name === 'gtao')) {\n this.#effects.splice(1,0,{\n \"name\": \"gtao\",\n \"active\": false,\n \"params\": {\n \"aoRadius\": 0.25,\n \"distanceExponent\": 1,\n \"thickness\": 1,\n \"scale\": 1,\n \"aoSamples\": 16,\n \"distanceFallOff\": 1,\n \"screenSpaceRadius\": true,\n \"lumaPhi\": 10,\n \"depthPhi\": 2,\n \"normalPhi\": 3,\n \"pdRadius\": 4,\n \"radiusExponent\": 1,\n \"rings\": 2,\n \"pdSamples\": 16\n }\n });\n }\n \n if (!this.#effects.find(effect => effect.name === 'fog')) {\n this.#effects.splice(2,0,{\n \"name\": \"fog\",\n \"active\": false,\n \"params\": {\n \"fogColor\": '#dedede',\n \"fogNear\": 0.7,\n \"fogFar\": 0.35,\n \"fogDensity\": 1\n }\n })\n }\n \n if (!this.#effects.find(effect => effect.name === 'lut')) {\n this.#effects.push({\n \"name\": 'lut',\n \"active\": false,\n \"params\": {\n \"intensity\": 1\n }\n });\n }\n }\n\n addPass(name,effectScope) {\n this.composer.insertPass(effectScope.effect,this.position);\n this.passes[name] = effectScope;\n this.position++;\n }\n \n addUpdatableElement(element) {\n this.updatables.push(element);\n }\n \n removeUpdatableElement(element) {\n this.updatables = this.updatables.filter(el => el !== element);\n }\n\n passToggle(name,state) {\n if (this.passes[name]) {\n this.passes[name].enabled = state;\n }\n }\n\n getPass(name) {\n return this.passes[name];\n }\n\n setPixelRatio(ratio) {\n this.composer.setPixelRatio(ratio);\n }\n \n getPixelRatio() {\n return this.composer._pixelRatio;\n }\n\n setSize(x,y) {\n this.composer.setSize(x,y);\n }\n\n render(delta) {\n for (let i = 0; i < this.updatables.length; i++) {\n this.updatables[i].tick(delta);\n }\n this.composer.render(delta);\n }\n\n #debug() {\n if (!isDev || !this.#effects.length) return;\n\n this.debugParams = {};\n const functions = {\n export: () => this.#download()\n };\n\n const mainFolder = threeJsVariables.gui.addFolder('Effect composer');\n this.#effects.forEach(effect => {\n const effectFolder = mainFolder.addFolder(effect.name);\n this.debugParams[effect.name] = {};\n this.debugParams[effect.name] = JSON.parse(JSON.stringify(effect.params));\n this.debugParams[effect.name].active = effect.active;\n\n Object.entries(this.debugParams[effect.name]).forEach(([key,value]) => {\n if (typeof value === 'boolean') {\n effectFolder.add(this.debugParams[effect.name],key).onChange((v) => this.#debugListener(effect.name,key,v));\n } else {\n effectFolder.add(this.debugParams[effect.name],key).onChange((v) => this.#debugListener(effect.name,key,v));\n }\n });\n });\n\n mainFolder.add(functions,'export');\n }\n\n #debugListener(effectName,key,value) {\n const pass = this.getPass(effectName);\n if (!pass) return;\n\n if (key === 'active') {\n pass.active = value;\n } else {\n switch (effectName) {\n case 'toneMapping':\n\n switch (key) {\n case 'middleGrey':\n pass.effect.setMiddleGrey(value);\n break;\n case 'maxLuminance':\n pass.effect.setMaxLuminance(value);\n break;\n case 'averageLuminance':\n pass.effect.setAverageLuminance(value);\n break;\n\n }\n\n break;\n case 'dof':\n pass.effect.uniforms[key].value = value;\n break;\n case 'sao':\n pass.effect.params[key] = value;\n break;\n case 'ssao':\n pass.effect.uniforms[key].value = value;\n break;\n case 'fog':\n switch (key) {\n case 'fogColor':\n pass.setColor(value);\n break;\n case 'fogNear':\n pass.setNear(value);\n break;\n case 'fogFar':\n pass.setFar(value);\n break;\n case 'fogDensity':\n pass.setDensity(value);\n break;\n }\n break;\n default:\n pass.effect[key] = value;\n break;\n\n }\n }\n }\n\n #download() {\n const dataStr = \"data:text/json;charset=utf-8,\" + encodeURIComponent(JSON.stringify(this.debugParams));\n const href = document.createElement('a');\n href.setAttribute('href',dataStr);\n href.setAttribute('download',`${config.projectTitle}_effects.json`);\n href.click();\n }\n\n disableAll() {\n Object.values(this.passes).forEach(pass => pass.active = false);\n }\n\n}\n","'use strict';\n\nimport { Vector2 } from 'three';\nimport { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass';\nimport { assignDeep } from '../../../settings';\nimport { Effect } from './Effect';\n\nconst DEFAULT_PARAMS = {\n strength: 1.5,\n radius: 0.4,\n threshold: 0.85\n};\n\nexport class Bloom extends Effect {\n constructor (renderer,params = {}) {\n super();\n const settings = assignDeep(DEFAULT_PARAMS,params);\n this.effect = new UnrealBloomPass(renderer.getSize( new Vector2()),settings.strength,settings.radius,settings.threshold);\n }\n\n set config(conf) {\n this.effect.strength = conf.strength;\n this.effect.radius = conf.radius;\n this.effect.threshold = conf.threshold;\n this.active = conf.hasOwnProperty('enabled') ? conf.enabled : conf.active;\n }\n \n get config() {\n return {\n strength: this.effect.strength,\n radius: this.effect.radius,\n threshold: this.effect.threshold,\n enabled: this.active\n }\n }\n\n}\n","'use strict';\n\n\nimport { Effect } from './Effect';\nimport { FullScreenQuad, Pass } from 'three/examples/jsm/postprocessing/Pass';\nimport {\n\tColor,\n\tShaderMaterial,\n\tUniformsUtils,\n\tWebGLRenderTarget,\n} from 'three';\nimport { CopyShader } from 'three/examples/jsm/shaders/CopyShader';\nimport vertex from '../Passes/Shaders/CylinderAnimation/vertex.glsl';\nimport fragment from '../Passes/Shaders/CylinderAnimation/fragment.glsl';\nimport { threeJsVariables } from '../../../settings';\n\nexport class CylinderAnimation extends Effect{\n\tconstructor (camera,width,height) {\n\t\tsuper();\n\t\t\n\t\tthis.effect = new CylinderPass(camera,width,height);\n\t\tthis.active = false;\n\t}\n\t\n\tsetProgress(value) {\n\t\tthis.effect.setProgress(value);\n\t}\n}\n\nclass CylinderPass extends Pass{\n\tconstructor (camera,width,height) {\n\t\tsuper();\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.camera = camera;\n\t\t\n\t\tthis.mainLayer = new ShaderMaterial({\n\t\t\tuniforms: UniformsUtils.clone(CopyShader.uniforms),\n\t\t\tvertexShader: CopyShader.vertexShader,\n\t\t\tfragmentShader: CopyShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false\n\t\t});\n\t\t\n\t\tthis.mainRt = new WebGLRenderTarget(this.width,this.height);\n\t\tthis.secondRt = new WebGLRenderTarget(this.width,this.height);\n\t\t\n\t\tthis.mixedLayer = new ShaderMaterial({\n\t\t\tuniforms: {\n\t\t\t\tmainLayer: { value: this.mainRt.texture },\n\t\t\t\tsecondLayer: { value: this.secondRt.texture },\n\t\t\t\tprogress: { value: 0.0 }\n\t\t\t},\n\t\t\tvertexShader: vertex,\n\t\t\tfragmentShader: fragment,\n\t\t\ttransparent: true,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false\n\t\t});\n\t\t\n\t\tthis.fsQuad = new FullScreenQuad(null);\n\t\tthis.originalClearColor = new Color();\n\t\tthis.needsSwap = false;\n\t}\n\t\n\tsetProgress(value) {\n\t\tthis.mixedLayer.uniforms.progress.value = value;\n\t}\n\t\n\tsetSize( width, height) {\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.mainRt.setSize(width,height);\n\t\tthis.secondRt.setSize(width,height);\n\t}\n\t\n\trender( renderer, writeBuffer, readBuffer) {\n\t\tthis.mainLayer.uniforms.tDiffuse.value = readBuffer.texture;\n\t\tthis.renderPass(renderer,this.mainLayer,this.mainRt);\n\t\t\n\t\tthis.camera.layers.set(1);\n\t\tthis.secondRt.samples = readBuffer.samples;\n\t\trenderer.setRenderTarget(this.secondRt);\n\t\trenderer.render(threeJsVariables.scene,this.camera);\n\t\tthis.camera.layers.enableAll();\n\t\t\n\t\tthis.renderPass(renderer,this.mixedLayer,this.renderToScreen ? null : readBuffer);\n\t}\n\t\n\trenderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {\n\t\t// save original state\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\t\t\n\t\trenderer.setRenderTarget( renderTarget );\n\t\t\n\t\t// setup pass state\n\t\trenderer.autoClear = false;\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\t\t\n\t\tthis.fsQuad.material = passMaterial;\n\t\tthis.fsQuad.render( renderer );\n\t\t\n\t\t// restore original state\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\t\t\n\t}\n}","'use strict';\n\nimport { assignDeep } from '../../../settings';\nimport { Effect } from './Effect';\nimport {ShaderPass} from 'three/examples/jsm/postprocessing/ShaderPass';\nimport vertex from './Shaders/DOF/vertex.glsl';\nimport fragment from './Shaders/DOF/fragment.glsl';\nimport {\n Color,\n ShaderMaterial,\n UniformsUtils,\n WebGLRenderTarget,\n} from 'three';\nimport { CopyShader } from 'three/examples/jsm/shaders/CopyShader';\n\nconst DEFAULT_PARAMS = {\n aperture: 0.025,\n maxblur: 0.01\n};\n\nexport class DOF extends Effect{\n static scope = null;\n constructor (camera,params = {}) {\n super();\n const settings = assignDeep(DEFAULT_PARAMS,params);\n this.camera = camera;\n const material = new ShaderMaterial({\n vertexShader: vertex,\n fragmentShader: fragment,\n uniforms: {\n tDiffuse : { value: null },\n tDepth : { value: null },\n focus : { value: 1.0 },\n aspect : { value: this.camera.aspect },\n aperture: { value: settings.aperture },\n maxblur : { value: settings.maxblur },\n far : { value: this.camera.far },\n near : { value: this.camera.near },\n }\n });\n this.effect = new DOFLite(material,window.innerWidth,window.innerHeight);\n DOF.scope = this;\n }\n\n set config(conf) {\n this.effect.uniforms.aperture.value = conf.aperture;\n this.effect.uniforms.maxblur.value = conf.maxblur;\n this.active = conf.hasOwnProperty('enabled') ? conf.enabled : conf.active;\n }\n\n updateFocus() {\n this.effect.uniforms.focus.value = this.camera.position.length();\n }\n\n static updateFocus() {\n if (DOF.scope && DOF.scope.active) {\n DOF.scope.updateFocus();\n }\n }\n\n}\n\nclass DOFLite extends ShaderPass{\n constructor (material,width,height) {\n super(material);\n\n this.defaultRt = new WebGLRenderTarget(width,height);\n this.originalClearColor = new Color();\n this.copyMaterial = new ShaderMaterial( {\n uniforms: UniformsUtils.clone( CopyShader.uniforms ),\n vertexShader: CopyShader.vertexShader,\n fragmentShader: CopyShader.fragmentShader,\n transparent: true,\n depthTest: false,\n depthWrite: false\n });\n\n }\n\n render (renderer, writeBuffer, readBuffer) {\n if ( this.uniforms[ this.textureID ] ) {\n this.uniforms[ this.textureID ].value = readBuffer.texture;\n this.uniforms.tDepth.value = readBuffer.depthTexture;\n }\n\n this.renderPass(renderer,this.material,this.defaultRt);\n this.copyMaterial.uniforms.tDiffuse.value = this.defaultRt.texture;\n this.fsQuad.material = this.copyMaterial;\n\n if ( this.renderToScreen ) {\n\n renderer.setRenderTarget( null );\n this.fsQuad.render( renderer );\n\n } else {\n\n renderer.setRenderTarget( writeBuffer );\n // TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n if ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n this.fsQuad.render( renderer );\n\n }\n }\n\n renderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {\n // save original state\n renderer.getClearColor( this.originalClearColor );\n const originalClearAlpha = renderer.getClearAlpha();\n const originalAutoClear = renderer.autoClear;\n\n renderer.setRenderTarget( renderTarget );\n\n // setup pass state\n renderer.autoClear = false;\n if ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n renderer.setClearColor( clearColor );\n renderer.setClearAlpha( clearAlpha || 0.0 );\n renderer.clear();\n\n }\n\n this.fsQuad.material = passMaterial;\n this.fsQuad.render( renderer );\n\n // restore original state\n renderer.autoClear = originalAutoClear;\n renderer.setClearColor( this.originalClearColor );\n renderer.setClearAlpha( originalClearAlpha );\n\n }\n\n}\n","'use strict';\n\nimport { FullScreenQuad, Pass } from 'three/examples/jsm/postprocessing/Pass';\nimport {\n\tColor, DepthFormat,\n\tDepthTexture, FloatType, Frustum, Group, LinearSRGBColorSpace, Matrix4, Mesh, MeshBasicMaterial,\n\tNearestFilter,\n\tNoBlending,\n\tShaderMaterial, SphereGeometry,\n\tUniformsUtils, Vector3,\n\tWebGLRenderTarget,\n} from 'three';\nimport { SSAODepthShader } from 'three/examples/jsm/shaders/SSAOShader';\nimport { CopyShader } from 'three/examples/jsm/shaders/CopyShader';\nimport vertex from './Shaders/DayNight/vertex.glsl';\nimport fragment from './Shaders/DayNight/fragment.glsl';\nimport { Effect } from './Effect';\n\n\nclass DayNightPass extends Pass{\n\tconstructor (camera,width,height) {\n\t\tsuper();\n\n\t\tthis.camera = camera;\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t\tthis.depthRenderMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSAODepthShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( SSAODepthShader.uniforms ),\n\t\t\tvertexShader: SSAODepthShader.vertexShader,\n\t\t\tfragmentShader: SSAODepthShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t});\n\n\t\tthis.depthRenderMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\tthis.depthRenderMaterial.uniforms.cameraFar.value = this.camera.far;\n\n\t\tthis.defaultMaterial = new ShaderMaterial({\n\t\t\tuniforms: UniformsUtils.clone( CopyShader.uniforms ),\n\t\t\tvertexShader: CopyShader.vertexShader,\n\t\t\tfragmentShader: CopyShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t});\n\n\t\tthis.dayNightMaterial = new ShaderMaterial({\n\t\t\tdefines: {\n\t\t\t\tPOINTS_LIGHT_COUNT: 1,\n\t\t\t},\n\t\t\tuniforms: {\n\t\t\t\ttDiffuse: { value: null },\n\t\t\t\ttDepth: { value: null },\n\t\t\t\ttDepthRGB: {value: null},\n\t\t\t\ttSky: { value: null },\n\n\t\t\t\tlights: {\n\t\t\t\t\tvalue: [{\n\t\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\t\trotation: new Vector3(),\n\t\t\t\t\t\t\tintensity: 0,\n\t\t\t\t\t\t\tradius: 0\n\t\t\t\t\t\t}]\n\t\t\t\t},\n\n\t\t\t\tfogNear: {value: 0.673},\n\t\t\t\tfogFar: {value: 0.37},\n\t\t\t\tuProjectionMatrix: {value: this.camera.projectionMatrix},\n\t\t\t\tuMatrixWorldInverse: {value: this.camera.matrixWorldInverse},\n\n\t\t\t\tnightLut: {value: null},\n\t\t\t\tnightLutSize: {value: 0},\n\t\t\t\tnightLutIntensity: {value: 0},\n\n\t\t\t\tdayLut: {value: null},\n\t\t\t\tdayLutSize: {value: 0.0},\n\t\t\t\tdayLutIntensity: {value: 0.0},\n\n\t\t\t\tsunriseTime: {value: 0.0},\n\t\t\t\tsunsetTime: {value: 0.0},\n\t\t\t\tcurrentTime: {value: 0.0},\n\t\t\t\tdayStartTime: {value: 0.0},\n\t\t\t\tdayEndTime: {value: 0.0},\n\t\t\t\tuTime: {value: 0.0}\n\t\t\t},\n\t\t\tvertexShader: vertex,\n\t\t\tfragmentShader: fragment,\n\t\t\ttransparent: true,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false\n\t\t});\n\n\t\tthis.sky = null;\n\n\t\tthis.uniforms = this.dayNightMaterial.uniforms;\n\n\t\tthis.defaultRt = new WebGLRenderTarget(this.width,this.height);\n\t\tthis.depthRt = new WebGLRenderTarget(this.width,this.height);\n\t\tthis.skyRt = new WebGLRenderTarget(this.width,this.height);\n\n\t\tthis.fsQuad = new FullScreenQuad(null);\n\t\tthis.originalClearColor = new Color();\n\t\tthis.needsSwap = false;\n\t}\n\n\tsetDayTime(times) {\n\t\tthis.dayNightMaterial.uniforms.sunriseTime.value = times.sunrise;\n\t\tthis.dayNightMaterial.uniforms.sunsetTime.value = times.sunset;\n\t\tthis.dayNightMaterial.uniforms.dayStartTime.value = times.dayStart;\n\t\tthis.dayNightMaterial.uniforms.dayEndTime.value = times.dayEnd;\n\t}\n\n\tsetTime(time) {\n\t\tthis.dayNightMaterial.uniforms.currentTime.value = time;\n\t}\n\n\tsetSize( width, height) {\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.defaultRt.setSize(width,height);\n\t\tthis.depthRt.setSize(width,height);\n\t\tthis.skyRt.setSize(width,height);\n\t}\n\n\ttick(delta) {\n\t\tif (this.enabled && this.sky) {\n\t\t\tthis.sky.material.uniforms.uTime.value += delta;\n\t\t\tthis.dayNightMaterial.uniforms.uTime.value += delta;\n\t\t}\n\t}\n\n\tsetSky(sky) {\n\t\tthis.sky = sky;\n\t}\n\n\tsetLights(arrayOfLights) {\n\t\tthis.dayNightMaterial.defines.POINTS_LIGHT_COUNT = arrayOfLights.length;\n\t\tthis.dayNightMaterial.uniforms.lights.value = arrayOfLights;\n\t\tthis.dayNightMaterial.needsUpdate = true;\n\t}\n\n\trender( renderer, writeBuffer, readBuffer) {\n\t\tthis.dayNightMaterial.uniforms.uProjectionMatrix.value = this.camera.projectionMatrix;\n\t\tthis.dayNightMaterial.uniforms.uMatrixWorldInverse.value = this.camera.matrixWorldInverse;\n\t\tthis.depthRenderMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\tthis.depthRenderMaterial.uniforms.cameraFar.value = this.camera.far;\n\n\t\t//RenderSky\n\t\tif (this.sky) {\n\t\t\trenderer.setRenderTarget(this.skyRt);\n\t\t\trenderer.render(this.sky,this.camera);\n\t\t\tthis.dayNightMaterial.uniforms[ 'tSky' ].value = this.skyRt.texture;\n\t\t\trenderer.setRenderTarget(null);\n\t\t}\n\n\t\t//Render beauty\n\t\tthis.defaultMaterial.uniforms.tDiffuse.value = readBuffer.texture;\n\t\tthis.renderPass(renderer,this.defaultMaterial,this.defaultRt);\n\t\t// Depth\n\t\tthis.depthRenderMaterial.uniforms.tDepth.value = readBuffer.depthTexture;\n\t\tthis.renderPass(renderer,this.depthRenderMaterial,this.depthRt);\n\n\t\tthis.dayNightMaterial.uniforms[ 'tDiffuse' ].value = this.defaultRt.texture;\n\t\tthis.dayNightMaterial.uniforms[ 'tDepthRGB' ].value = readBuffer.depthTexture;\n\t\tthis.dayNightMaterial.uniforms[ 'tDepth' ].value = this.depthRt.texture;\n\n\t\tthis.renderPass( renderer, this.dayNightMaterial, this.renderToScreen ? null : readBuffer );\n\t}\n\n\trenderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {\n\t\t// save original state\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t// setup pass state\n\t\trenderer.autoClear = false;\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.fsQuad.material = passMaterial;\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// restore original state\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n}\n\n\nexport class DayNightEffect extends Effect{\n\tconstructor (camera) {\n\t\tsuper();\n\t\tthis.effect = new DayNightPass(camera,window.innerWidth,window.innerHeight);\n\t\tthis.active = false;\n\t}\n\n\tsetSky(sky) {\n\t\tthis.effect.setSky(sky);\n\t}\n\n\tsetDayTime(times) {\n\t\tthis.effect.setDayTime(times);\n\t}\n\n\tsetTime(time) {\n\t\tthis.effect.setTime(time);\n\t}\n\n\tget config() {\n\n\t}\n\n\tset config(conf) {\n\n\t}\n}\n","'use strict';\n\n\nexport class Effect {\n constructor () {}\n\n set active(state) {\n this.effect.enabled = state;\n }\n\n get active() {\n return this.effect.enabled;\n }\n\n}\n","'use strict';\n\n\nimport { FullScreenQuad, Pass } from 'three/examples/jsm/postprocessing/Pass';\nimport { Color, LinearSRGBColorSpace, NoBlending, ShaderMaterial, UniformsUtils, WebGLRenderTarget } from 'three';\nimport { SSAODepthShader } from 'three/examples/jsm/shaders/SSAOShader';\nimport { CopyShader } from 'three/examples/jsm/shaders/CopyShader';\nimport vertex from './Shaders/Fog/vertex.glsl';\nimport fragment from './Shaders/Fog/fragment.glsl';\nimport { Effect } from './Effect';\nimport { threeJsVariables } from '../../../settings';\n\nclass Fog extends Pass{\n\tconstructor (camera,width,height) {\n\t\tsuper();\n\t\t\n\t\tthis.camera = camera;\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\t\n\t\tthis.depthRenderMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSAODepthShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( SSAODepthShader.uniforms ),\n\t\t\tvertexShader: SSAODepthShader.vertexShader,\n\t\t\tfragmentShader: SSAODepthShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t} );\n\t\t\n\t\tthis.depthRenderMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\tthis.depthRenderMaterial.uniforms.cameraFar.value = this.camera.far;\n\t\t\n\t\tthis.defaultMaterial = new ShaderMaterial({\n\t\t\tuniforms: UniformsUtils.clone( CopyShader.uniforms ),\n\t\t\tvertexShader: CopyShader.vertexShader,\n\t\t\tfragmentShader: CopyShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t});\n\t\t\n\t\tthis.fogMaterial = new ShaderMaterial({\n\t\t\tuniforms: {\n\t\t\t\ttDiffuse: {value: null},\n\t\t\t\ttDepth: {value: null},\n\t\t\t\tfogColor: {value: new Color()},\n\t\t\t\tfogDensity: {value: 0.88},\n\t\t\t\tfogNear: {value: 0.95},\n\t\t\t\tfogFar: {value: 0.83}\n\t\t\t},\n\t\t\tvertexShader: vertex,\n\t\t\tfragmentShader: fragment,\n\t\t\ttransparent: true,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false\n\t\t});\n\t\t\n\t\tthis.uniforms = this.fogMaterial.uniforms;\n\t\t\n\t\tthis.defaultRt = new WebGLRenderTarget(this.width,this.height);\n\t\tthis.depthRt = new WebGLRenderTarget(this.width,this.height);\n\t\tthis.fsQuad = new FullScreenQuad(null);\n\t\tthis.originalClearColor = new Color();\n\t\tthis.needsSwap = false;\n\t}\n\t\n\tsetSize( width, height) {\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.defaultRt.setSize(width,height);\n\t\tthis.depthRt.setSize(width,height);\n\t}\n\t\n\trender( renderer, writeBuffer, readBuffer) {\n\t\t//Render beauty\n\t\tthis.defaultMaterial.uniforms.tDiffuse.value = readBuffer.texture;\n\t\tthis.renderPass(renderer,this.defaultMaterial,this.defaultRt);\n\t\t// Depth\n\t\tthis.depthRenderMaterial.uniforms.tDepth.value = readBuffer.depthTexture;\n\t\tthis.renderPass(renderer,this.depthRenderMaterial,this.depthRt);\n\t\t\n\t\tthis.fogMaterial.uniforms[ 'tDiffuse' ].value = this.defaultRt.texture;\n\t\tthis.fogMaterial.uniforms[ 'tDepth' ].value = this.depthRt.texture;\n\t\t\n\t\tthis.renderPass( renderer, this.fogMaterial, this.renderToScreen ? null : readBuffer );\n\t}\n\t\n\trenderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {\n\t\t// save original state\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\t\t\n\t\trenderer.setRenderTarget( renderTarget );\n\t\t\n\t\t// setup pass state\n\t\trenderer.autoClear = false;\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\t\t\t\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\t\t\t\n\t\t}\n\t\t\n\t\tthis.fsQuad.material = passMaterial;\n\t\tthis.fsQuad.render( renderer );\n\t\t\n\t\t// restore original state\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\t\t\n\t}\n\t\n}\n\nexport class FogEffect extends Effect{\n\tconstructor (camera,width,height,params) {\n\t\tsuper();\n\t\t\n\t\tthis.effect = new Fog(camera,width,height);\n\t\tthis.defaultParams = params;\n\t\tthis.params = {};\n\t\tthis.active = false;\n\t\tthis.setConfig(params);\n\t}\n\t\n\tsetColor(color) {\n\t\tif (typeof color === 'string') {\n\t\t\tthis.effect.uniforms.fogColor.value.setStyle(color,LinearSRGBColorSpace);\n\t\t} else {\n\t\t\tthis.effect.uniforms.fogColor.value.copy(color);\n\t\t}\n\t}\n\t\n\tsetDensity(density) {\n\t\tthis.effect.uniforms.fogDensity.value = density;\n\t}\n\t\n\tsetNear(value) {\n\t\tthis.effect.uniforms.fogNear.value = value;\n\t}\n\t\n\tsetFar(value) {\n\t\tthis.effect.uniforms.fogFar.value = value;\n\t}\n\t\n\tsetSky(sky) {\n\t\tif (sky) {\n\t\t\tthis.effect.sky = sky;\n\t\t\tthis.effect.fogMaterial.defines.USE_SKY = 1;\n\t\t} else {\n\t\t\tthis.sky = null;\n\t\t\tthis.effect.fogMaterial.defines.USE_SKY = 0;\n\t\t}\n\t\tthis.effect.fogMaterial.needsUpdate = true;\n\t}\n\t\n\tgetConfig() {\n\t\treturn {\n\t\t\tactive: this.active,\n\t\t\tfogColor: `#${this.effect.uniforms.fogColor.value.getHexString(LinearSRGBColorSpace)}`,\n\t\t\tfogNear: this.effect.uniforms.fogNear.value,\n\t\t\tfogFar: this.effect.uniforms.fogFar.value,\n\t\t\tfogDensity: this.effect.uniforms.fogDensity.value\n\t\t};\n\t}\n\t\n\tsetConfig(config) {\n\t\tObject.entries(config).forEach(([key,value]) => {\n\t\t\tif (key === 'active') {\n\t\t\t\tthis.active = value;\n\t\t\t} else {\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'fogColor':\n\t\t\t\t\t\tthis.setColor(value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'fogNear':\n\t\t\t\t\t\tthis.setNear(value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'fogFar':\n\t\t\t\t\t\tthis.setFar(value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'fogDensity':\n\t\t\t\t\t\tthis.setDensity(value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t\n\tget preset() {\n\t\treturn {\n\t\t\tactive: this.active,\n\t\t\tfogColor: `#${this.effect.uniforms.fogColor.value.getHexString(LinearSRGBColorSpace)}`,\n\t\t\tfogNear: this.effect.uniforms.fogNear.value,\n\t\t\tfogFar: this.effect.uniforms.fogFar.value,\n\t\t\tfogDensity: this.effect.uniforms.fogDensity.value,\n\t\t\t// sky: this.effect.sky\n\t\t}\n\t}\n\t\n\tset preset(params) {\n\t\tthis.setConfig(params);\n\t\t// this.effect.sky = params.sky;\n\t}\n}\n\n\nexport function setFogParams (params) {\n\tconst fogPass = threeJsVariables.composer.getPass('fog');\n\tif (fogPass) {\n\t\tfogPass.setConfig(params);\n\t}\n}\n\nexport function restoreFogParams () {\n\tconst fogPass = threeJsVariables.composer.getPass('fog');\n\tif (fogPass) {\n\t\tfogPass.preset = fogPass.params;\n\t}\n}\n\nexport function saveFogPreset () {\n\tconst fogPass = threeJsVariables.composer.getPass('fog');\n\tif (fogPass) {\n\t\tfogPass.params = fogPass.preset;\n\t}\n}\n\nexport function resetFogToDefault () {\n\tconst fogPass = threeJsVariables.composer.getPass('fog');\n\tif (fogPass) {\n\t\tfogPass.setConfig(fogPass.defaultParams);\n\t}\n}\n","import {\n\tAddEquation,\n\tColor,\n\tCustomBlending,\n\tDataTexture,\n\tDstAlphaFactor,\n\tDstColorFactor,\n\tHalfFloatType,\n\tNoBlending,\n\tRepeatWrapping,\n\tRGBAFormat,\n\tShaderMaterial,\n\tUniformsUtils,\n\tUnsignedByteType,\n\tWebGLRenderTarget,\n\tZeroFactor,\n} from 'three';\n\nimport {generateMagicSquareNoise, GTAOShader, GTAOBlendShader } from 'three/examples/jsm/shaders/GTAOShader';\nimport {PoissonDenoiseShader, generatePdSamplePointInitializer} from 'three/examples/jsm/shaders/PoissonDenoiseShader';\nimport {CopyShader} from 'three/examples/jsm/shaders/CopyShader';\nimport { FullScreenQuad, Pass } from 'three/examples/jsm/postprocessing/Pass';\nimport {SimplexNoise} from 'three/examples/jsm/math/SimplexNoise';\nimport { Effect } from './Effect';\n\nclass LiteGTAO extends Pass {\n\t\n\tconstructor(camera, width, height) {\n\t\t\n\t\tsuper();\n\t\t\n\t\tthis.width = ( width !== undefined ) ? width : 512;\n\t\tthis.height = ( height !== undefined ) ? height : 512;\n\t\tthis.camera = camera;\n\t\tthis.blendIntensity = 1.;\n\t\tthis.output = 0;\n\t\t\n\t\tthis.pdRings = 2.;\n\t\tthis.pdRadiusExponent = 2.;\n\t\tthis.pdSamples = 16;\n\t\t\n\t\tthis.gtaoNoiseTexture = generateMagicSquareNoise();\n\t\tthis.pdNoiseTexture = this.generateNoise();\n\t\t\n\t\tthis.gtaoRenderTarget = new WebGLRenderTarget( this.width, this.height, { type: HalfFloatType } );\n\t\tthis.pdRenderTarget = this.gtaoRenderTarget.clone();\n\t\t\n\t\tthis.gtaoMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, GTAOShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( GTAOShader.uniforms ),\n\t\t\tvertexShader: GTAOShader.vertexShader,\n\t\t\tfragmentShader: GTAOShader.fragmentShader,\n\t\t\tblending: NoBlending,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t} );\n\t\tthis.gtaoMaterial.defines.PERSPECTIVE_CAMERA = this.camera.isPerspectiveCamera ? 1 : 0;\n\t\tthis.gtaoMaterial.uniforms.tNoise.value = this.gtaoNoiseTexture;\n\t\tthis.gtaoMaterial.uniforms.resolution.value.set( this.width, this.height );\n\t\tthis.gtaoMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\tthis.gtaoMaterial.uniforms.cameraFar.value = this.camera.far;\n\t\t\n\t\tthis.pdMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, PoissonDenoiseShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( PoissonDenoiseShader.uniforms ),\n\t\t\tvertexShader: PoissonDenoiseShader.vertexShader,\n\t\t\tfragmentShader: PoissonDenoiseShader.fragmentShader,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t} );\n\t\tthis.pdMaterial.uniforms.tDiffuse.value = this.gtaoRenderTarget.texture;\n\t\tthis.pdMaterial.uniforms.tNoise.value = this.pdNoiseTexture;\n\t\tthis.pdMaterial.uniforms.resolution.value.set( this.width, this.height );\n\t\tthis.pdMaterial.uniforms.lumaPhi.value = 10;\n\t\tthis.pdMaterial.uniforms.depthPhi.value = 2;\n\t\tthis.pdMaterial.uniforms.normalPhi.value = 3;\n\t\tthis.pdMaterial.uniforms.radius.value = 8;\n\t\t\n\t\tthis.copyMaterial = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( CopyShader.uniforms ),\n\t\t\tvertexShader: CopyShader.vertexShader,\n\t\t\tfragmentShader: CopyShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tblendSrc: DstColorFactor,\n\t\t\tblendDst: ZeroFactor,\n\t\t\tblendEquation: AddEquation,\n\t\t\tblendSrcAlpha: DstAlphaFactor,\n\t\t\tblendDstAlpha: ZeroFactor,\n\t\t\tblendEquationAlpha: AddEquation\n\t\t} );\n\t\t\n\t\tthis.blendMaterial = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( GTAOBlendShader.uniforms ),\n\t\t\tvertexShader: GTAOBlendShader.vertexShader,\n\t\t\tfragmentShader: GTAOBlendShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tblending: CustomBlending,\n\t\t\tblendSrc: DstColorFactor,\n\t\t\tblendDst: ZeroFactor,\n\t\t\tblendEquation: AddEquation,\n\t\t\tblendSrcAlpha: DstAlphaFactor,\n\t\t\tblendDstAlpha: ZeroFactor,\n\t\t\tblendEquationAlpha: AddEquation\n\t\t} );\n\t\t\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\t\t\n\t\tthis.originalClearColor = new Color();\n\t\t\n\t\tthis.gtaoMaterial.defines.NORMAL_VECTOR_TYPE = 0;\n\t\tthis.gtaoMaterial.defines.DEPTH_SWIZZLING = 'x';\n\t\t\n\t\tthis.pdMaterial.defines.NORMAL_VECTOR_TYPE = 0;\n\t\tthis.pdMaterial.defines.DEPTH_SWIZZLING = 'x';\n\t\t\n\t\tthis.needsSwap = false;\n\t}\n\t\n\tdispose() {\n\t\tthis.gtaoNoiseTexture.dispose();\n\t\tthis.pdNoiseTexture.dispose();\n\t\tthis.gtaoRenderTarget.dispose();\n\t\tthis.pdRenderTarget.dispose();\n\t\tthis.pdMaterial.dispose();\n\t\tthis.copyMaterial.dispose();\n\t\tthis.fsQuad.dispose();\n\t}\n\t\n\tget gtaoMap() {\n\t\t\n\t\treturn this.pdRenderTarget.texture;\n\t\t\n\t}\n\t\n\tsetSceneClipBox( box ) {\n\t\t\n\t\tif ( box ) {\n\t\t\t\n\t\t\tthis.gtaoMaterial.needsUpdate = this.gtaoMaterial.defines.SCENE_CLIP_BOX !== 1;\n\t\t\tthis.gtaoMaterial.defines.SCENE_CLIP_BOX = 1;\n\t\t\tthis.gtaoMaterial.uniforms.sceneBoxMin.value.copy( box.min );\n\t\t\tthis.gtaoMaterial.uniforms.sceneBoxMax.value.copy( box.max );\n\t\t\t\n\t\t} else {\n\t\t\t\n\t\t\tthis.gtaoMaterial.needsUpdate = this.gtaoMaterial.defines.SCENE_CLIP_BOX === 0;\n\t\t\tthis.gtaoMaterial.defines.SCENE_CLIP_BOX = 0;\n\t\t\t\n\t\t}\n\t\t\n\t}\n\t\n\tupdateGtaoMaterial( parameters ) {\n\t\t\n\t\tif ( parameters.radius !== undefined ) {\n\t\t\t\n\t\t\tthis.gtaoMaterial.uniforms.radius.value = parameters.radius;\n\t\t\t\n\t\t}\n\t\t\n\t\tif ( parameters.distanceExponent !== undefined ) {\n\t\t\t\n\t\t\tthis.gtaoMaterial.uniforms.distanceExponent.value = parameters.distanceExponent;\n\t\t\t\n\t\t}\n\t\t\n\t\tif ( parameters.thickness !== undefined ) {\n\t\t\t\n\t\t\tthis.gtaoMaterial.uniforms.thickness.value = parameters.thickness;\n\t\t\t\n\t\t}\n\t\t\n\t\tif ( parameters.distanceFallOff !== undefined ) {\n\t\t\t\n\t\t\tthis.gtaoMaterial.uniforms.distanceFallOff.value = parameters.distanceFallOff;\n\t\t\tthis.gtaoMaterial.needsUpdate = true;\n\t\t\t\n\t\t}\n\t\t\n\t\tif ( parameters.scale !== undefined ) {\n\t\t\t\n\t\t\tthis.gtaoMaterial.uniforms.scale.value = parameters.scale;\n\t\t\t\n\t\t}\n\t\t\n\t\tif ( parameters.samples !== undefined && parameters.samples !== this.gtaoMaterial.defines.SAMPLES ) {\n\t\t\t\n\t\t\tthis.gtaoMaterial.defines.SAMPLES = parameters.samples;\n\t\t\tthis.gtaoMaterial.needsUpdate = true;\n\t\t\t\n\t\t}\n\t\t\n\t\tif ( parameters.screenSpaceRadius !== undefined && ( parameters.screenSpaceRadius ? 1 : 0 ) !== this.gtaoMaterial.defines.SCREEN_SPACE_RADIUS ) {\n\t\t\t\n\t\t\tthis.gtaoMaterial.defines.SCREEN_SPACE_RADIUS = parameters.screenSpaceRadius ? 1 : 0;\n\t\t\tthis.gtaoMaterial.needsUpdate = true;\n\t\t\t\n\t\t}\n\t\t\n\t}\n\t\n\tupdatePdMaterial( parameters ) {\n\t\t\n\t\tlet updateShader = false;\n\t\t\n\t\tif ( parameters.lumaPhi !== undefined ) {\n\t\t\t\n\t\t\tthis.pdMaterial.uniforms.lumaPhi.value = parameters.lumaPhi;\n\t\t\t\n\t\t}\n\t\t\n\t\tif ( parameters.depthPhi !== undefined ) {\n\t\t\t\n\t\t\tthis.pdMaterial.uniforms.depthPhi.value = parameters.depthPhi;\n\t\t\t\n\t\t}\n\t\t\n\t\tif ( parameters.normalPhi !== undefined ) {\n\t\t\t\n\t\t\tthis.pdMaterial.uniforms.normalPhi.value = parameters.normalPhi;\n\t\t\t\n\t\t}\n\t\t\n\t\tif ( parameters.radius !== undefined && parameters.radius !== this.radius ) {\n\t\t\t\n\t\t\tthis.pdMaterial.uniforms.radius.value = parameters.radius;\n\t\t\t\n\t\t}\n\t\t\n\t\tif ( parameters.radiusExponent !== undefined && parameters.radiusExponent !== this.pdRadiusExponent ) {\n\t\t\t\n\t\t\tthis.pdRadiusExponent = parameters.radiusExponent;\n\t\t\tupdateShader = true;\n\t\t\t\n\t\t}\n\t\t\n\t\tif ( parameters.rings !== undefined && parameters.rings !== this.pdRings ) {\n\t\t\t\n\t\t\tthis.pdRings = parameters.rings;\n\t\t\tupdateShader = true;\n\t\t\t\n\t\t}\n\t\t\n\t\tif ( parameters.samples !== undefined && parameters.samples !== this.pdSamples ) {\n\t\t\t\n\t\t\tthis.pdSamples = parameters.samples;\n\t\t\tupdateShader = true;\n\t\t\t\n\t\t}\n\t\t\n\t\tif ( updateShader ) {\n\t\t\t\n\t\t\tthis.pdMaterial.defines.SAMPLES = this.pdSamples;\n\t\t\tthis.pdMaterial.defines.SAMPLE_VECTORS = generatePdSamplePointInitializer( this.pdSamples, this.pdRings, this.pdRadiusExponent );\n\t\t\tthis.pdMaterial.needsUpdate = true;\n\t\t\t\n\t\t}\n\t\t\n\t}\n\t\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\t\t// render AO\n\t\tthis.gtaoMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\tthis.gtaoMaterial.uniforms.cameraFar.value = this.camera.far;\n\t\tthis.gtaoMaterial.uniforms.tDepth.value = readBuffer.depthTexture;\n\t\tthis.gtaoMaterial.uniforms.cameraProjectionMatrix.value.copy( this.camera.projectionMatrix );\n\t\tthis.gtaoMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );\n\t\tthis.gtaoMaterial.uniforms.cameraWorldMatrix.value.copy( this.camera.matrixWorld );\n\t\tthis.renderPass( renderer, this.gtaoMaterial, this.gtaoRenderTarget, 0xffffff, 1.0 );\n\t\t//\n\t\t// // render poisson denoise\n\t\tthis.pdMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );\n\t\tthis.pdMaterial.uniforms.tDepth.value = readBuffer.depthTexture;\n\t\tthis.renderPass( renderer, this.pdMaterial, this.pdRenderTarget, 0xffffff, 1.0 );\n\t\t\n\t\tswitch ( this.output ) {\n\t\t\t\n\t\t\tcase 0:\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = readBuffer.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );\n\t\t\t\t\n\t\t\t\tthis.blendMaterial.uniforms.intensity.value = this.blendIntensity;\n\t\t\t\tthis.blendMaterial.uniforms.tDiffuse.value = this.pdRenderTarget.texture;\n\t\t\t\tthis.renderPass( renderer, this.blendMaterial, this.renderToScreen ? null : readBuffer );\n\t\t\t\t\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase 1:\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = readBuffer.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase 2:\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = this.gtaoRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase 3:\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = this.pdRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t\n\trenderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {\n\t\t\n\t\t// save original state\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\t\t\n\t\trenderer.setRenderTarget( renderTarget );\n\t\t\n\t\t// setup pass state\n\t\trenderer.autoClear = false;\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\t\t\t\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\t\t\t\n\t\t}\n\t\t\n\t\tthis.fsQuad.material = passMaterial;\n\t\tthis.fsQuad.render( renderer );\n\t\t\n\t\t// restore original state\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\t\t\n\t}\n\t\n\tsetSize( width, height ) {\n\t\t\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\t\n\t\tthis.gtaoRenderTarget.setSize( width, height );\n\t\tthis.pdRenderTarget.setSize( width, height );\n\t\t\n\t\tthis.gtaoMaterial.uniforms.resolution.value.set( width, height );\n\t\tthis.gtaoMaterial.uniforms.cameraProjectionMatrix.value.copy( this.camera.projectionMatrix );\n\t\tthis.gtaoMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );\n\t\t\n\t\tthis.pdMaterial.uniforms.resolution.value.set( width, height );\n\t\tthis.pdMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );\n\t\t\n\t}\n\t\n\tgenerateNoise( size = 64 ) {\n\t\t\n\t\tconst simplex = new SimplexNoise();\n\t\t\n\t\tconst arraySize = size * size * 4;\n\t\tconst data = new Uint8Array( arraySize );\n\t\t\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\t\t\t\n\t\t\tfor ( let j = 0; j < size; j ++ ) {\n\t\t\t\t\n\t\t\t\tconst x = i;\n\t\t\t\tconst y = j;\n\t\t\t\t\n\t\t\t\tdata[ ( i * size + j ) * 4 ] = ( simplex.noise( x, y ) * 0.5 + 0.5 ) * 255;\n\t\t\t\tdata[ ( i * size + j ) * 4 + 1 ] = ( simplex.noise( x + size, y ) * 0.5 + 0.5 ) * 255;\n\t\t\t\tdata[ ( i * size + j ) * 4 + 2 ] = ( simplex.noise( x, y + size ) * 0.5 + 0.5 ) * 255;\n\t\t\t\tdata[ ( i * size + j ) * 4 + 3 ] = ( simplex.noise( x + size, y + size ) * 0.5 + 0.5 ) * 255;\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\tconst noiseTexture = new DataTexture( data, size, size, RGBAFormat, UnsignedByteType );\n\t\tnoiseTexture.wrapS = RepeatWrapping;\n\t\tnoiseTexture.wrapT = RepeatWrapping;\n\t\tnoiseTexture.needsUpdate = true;\n\t\t\n\t\treturn noiseTexture;\n\t\t\n\t}\n\t\n}\n\nexport class GTAOLite extends Effect{\n\tconstructor (camera) {\n\t\tsuper();\n\t\t\n\t\tthis.effect = new LiteGTAO(camera,window.innerWidth,window.innerHeight);\n\t\t\n\t\tthis.aoParameters = {\n\t\t\tradius: 0.25,\n\t\t\tdistanceExponent: 1.,\n\t\t\tthickness: 1.,\n\t\t\tscale: 1.,\n\t\t\tsamples: 16,\n\t\t\tdistanceFallOff: 1.,\n\t\t\tscreenSpaceRadius: true,\n\t\t};\n\t\tthis.pdParameters = {\n\t\t\tlumaPhi: 10.,\n\t\t\tdepthPhi: 2.,\n\t\t\tnormalPhi: 3.,\n\t\t\tradius: 4.,\n\t\t\tradiusExponent: 1.,\n\t\t\trings: 2.,\n\t\t\tsamples: 16,\n\t\t};\n\t\t\n\t\tthis.effect.updateGtaoMaterial(this.aoParameters);\n\t\tthis.effect.updatePdMaterial(this.pdParameters);\n\t\tthis.active = false;\n\t}\n\t\n\tget config() {\n\t\treturn {\n\t\t\tenabled: this.active,\n\t\t\taoRadius: this.aoParameters.radius,\n\t\t\tdistanceExponent: this.aoParameters.distanceExponent,\n\t\t\tthickness: this.aoParameters.thickness,\n\t\t\tscale: this.aoParameters.scale,\n\t\t\taoSamples: this.aoParameters.samples,\n\t\t\tdistanceFallOff: this.aoParameters.distanceFallOff,\n\t\t\tscreenSpaceRadius: this.aoParameters.screenSpaceRadius,\n\t\t\t\n\t\t\tlumaPhi: this.pdParameters.lumaPhi,\n\t\t\tdepthPhi: this.pdParameters.depthPhi,\n\t\t\tnormalPhi: this.pdParameters.normalPhi,\n\t\t\tpdRadius: this.pdParameters.radius,\n\t\t\tradiusExponent: this.pdParameters.radiusExponent,\n\t\t\trings: this.pdParameters.rings,\n\t\t\tpdSamples: this.pdParameters.samples,\n\t\t}\n\t}\n\t\n\tset config(conf) {\n\t\tthis.aoParameters = {\n\t\t\tradius: conf.aoRadius,\n\t\t\tdistanceExponent: conf.distanceExponent,\n\t\t\tthickness: conf.thickness,\n\t\t\tscale: conf.scale,\n\t\t\tsamples: conf.aoSamples,\n\t\t\tdistanceFallOff: conf.distanceFallOff,\n\t\t\tscreenSpaceRadius: conf.screenSpaceRadius\n\t\t};\n\t\t\n\t\tthis.pdParameters = {\n\t\t\tlumaPhi: conf.lumaPhi,\n\t\t\tdepthPhi: conf.depthPhi,\n\t\t\tnormalPhi: conf.normalPhi,\n\t\t\tradius: conf.pdRadius,\n\t\t\tradiusExponent: conf.radiusExponent,\n\t\t\trings: conf.rings,\n\t\t\tsamples: conf.pdSamples\n\t\t};\n\t\t\n\t\tthis.effect.updateGtaoMaterial(this.aoParameters);\n\t\tthis.effect.updatePdMaterial(this.pdParameters);\n\t\tthis.active = conf.enabled;\n\t}\n}\n\n","'use strict';\n\nimport { Hmap } from '../../threejs/Hmap';\nimport { TerrainEnvironment } from '../../components/Terrain/Terrain';\n\nconst head = `\n uniform float lutSize;\n uniform float nightLutSize;\n\t\t#if USE_3DTEXTURE\n\t\tprecision highp sampler3D;\n\t\tuniform sampler3D lut3d;\n\t\tuniform sampler3D nightLut3d;\n\t\t#else\n\t\tuniform sampler2D lut;\n\t\tuniform sampler2D nightLut;\n\t\t\n\t\tvec3 lutLookup( sampler2D tex, float size, vec3 rgb ) {\n\n\t\t\tfloat sliceHeight = 1.0 / size;\n\t\t\tfloat yPixelHeight = 1.0 / ( size * size );\n\n\t\t\t// Get the slices on either side of the sample\n\t\t\tfloat slice = rgb.b * size;\n\t\t\tfloat interp = fract( slice );\n\t\t\tfloat slice0 = slice - interp;\n\t\t\tfloat centeredInterp = interp - 0.5;\n\n\t\t\tfloat slice1 = slice0 + sign( centeredInterp );\n\n\t\t\t// Pull y sample in by half a pixel in each direction to avoid color\n\t\t\t// bleeding from adjacent slices.\n\t\t\tfloat greenOffset = clamp( rgb.g * sliceHeight, yPixelHeight * 0.5, sliceHeight - yPixelHeight * 0.5 );\n\n\t\t\tvec2 uv0 = vec2(\n\t\t\t\trgb.r,\n\t\t\t\tslice0 * sliceHeight + greenOffset\n\t\t\t);\n\t\t\tvec2 uv1 = vec2(\n\t\t\t\trgb.r,\n\t\t\t\tslice1 * sliceHeight + greenOffset\n\t\t\t);\n\n\t\t\tvec3 sample0 = texture2D( tex, uv0 ).rgb;\n\t\t\tvec3 sample1 = texture2D( tex, uv1 ).rgb;\n\n\t\t\treturn mix( sample0, sample1, abs( centeredInterp ) );\n\n\t\t}\n\t\t\n\t\t#endif\n\t\tuniform float lutIntensity;\n\t\tuniform float nightLutIntensity;\n\t\tuniform float timeAlpha;\n\t\t\n\t\tvec3 calculateUVW(vec4 color,float size){\n\t\t float pixelWidth = 1.0 / size;\n float halfPixelWidth = 0.5 / size;\n vec3 uvw = vec3( halfPixelWidth ) + color.rgb * ( 1.0 - pixelWidth );\n \n return uvw;\n\t\t}\n\t\t\n\t\t\n\t\tvec4 getLutLookup(vec4 color,sampler3D lut,float size) {\n vec3 uvw = calculateUVW(color,size);\n vec4 lutVal = vec4( texture( lut, uvw ).rgb, color.a );\n\n return lutVal;\n }\n\t`;\nconst body = `\n vec4 val = gl_FragColor;\n vec4 dayLookup;\n vec4 nightLookup;\n\n #if USE_3DTEXTURE\n \n dayLookup = getLutLookup(val,lut3d,lutSize);\n nightLookup = getLutLookup(val,nightLut3d,nightLutSize);\n\n #else\n vec3 dayUVw = calculateUVW(val,lutSize);\n vec3 nightUVw = calculateUVW(val,nightLutSize);\n dayLookup = vec4( lutLookup( lut, lutSize, dayUVw ), val.a );\n nightLookup = vec4( lutLookup( nightLut, nightLutSize, nightUVw ), val.a );\n\n #endif\n \n vec4 dayColor = mix(val,dayLookup,lutIntensity);\n vec4 nightColor = mix(val,nightLookup,nightLutIntensity);\n gl_FragColor = mix(dayColor,nightColor,timeAlpha);\n\t`;\n\nexport class LUT {\n static scopes = {};\n #shaders = {};\n\n constructor (type) {\n this.type = type;\n this.lutsPresets = {\n dayLut: {\n name: null,\n intensity: 0,\n lut: null\n },\n nightLut: {\n name: null,\n intensity: 0,\n lut: null\n }\n };\n this.timeAlpha = 0;\n LUT.scopes[type] = this;\n }\n \n updateTime(alpha) {\n if (this.lutsPresets.nightLut.lut) {\n this.timeAlpha = 1 - alpha;\n \n for (let id in this.#shaders) {\n this.#shaders[id].uniforms.timeAlpha.value = this.timeAlpha;\n }\n }\n }\n\n set lutConfig(data) {\n if (data.lutsPresets) {\n Object.keys(data.lutsPresets).forEach(dayTime => {\n Object.entries(data.lutsPresets[dayTime]).forEach(([lutKey,lutValue]) => {\n this.lutsPresets[dayTime][lutKey] = lutValue;\n })\n });\n } else {\n // Old lut type\n this.lutsPresets.dayLut.name = data.name;\n this.lutsPresets.dayLut.intensity = data.intensity;\n this.lutsPresets.dayLut.lut = data.lut;\n }\n }\n\n include(material) {\n //if (!this.lutsPresets.dayLut.lut) return;\n \n if (material.isShaderMaterial) {\n material.uniforms.lut3d = {\n value: this.lutsPresets.dayLut.lut.texture3D\n };\n\n material.uniforms.lutSize = {\n value: this.lutsPresets.dayLut.lut.texture3D.image.width\n };\n\n material.uniforms.lutIntensity = {\n value: this.lutsPresets.dayLut.intensity\n };\n\n } else if (Array.isArray(material)){\n material.map(subMaterial => {\n if (subMaterial.customPrograms) {\n subMaterial.customPrograms.push(this.upgradeShader.bind(this));\n } else {\n subMaterial.customPrograms = [this.upgradeShader.bind(this)];\n }\n });\n } else {\n if (material.customPrograms) {\n material.customPrograms.push(this.upgradeShader.bind(this));\n } else {\n material.customPrograms = [this.upgradeShader.bind(this)];\n }\n }\n }\n\n upgradeShader(shader,material) {\n if (shader.defines) {\n shader.defines.USE_3DTEXTURE = 1;\n } else {\n shader.defines = {\n USE_3DTEXTURE: 1\n };\n }\n \n shader.uniforms.lutIntensity = {\n value: this.lutsPresets.dayLut.intensity\n };\n \n shader.uniforms.nightLutIntensity = {\n value: this.lutsPresets.nightLut.intensity\n };\n \n shader.uniforms.nightLut = {\n value: null\n };\n \n shader.uniforms.lut = {\n value: null\n };\n \n if (this.lutsPresets.dayLut.lut) {\n shader.uniforms.lut3d = {\n value: this.lutsPresets.dayLut.lut.texture3D\n };\n \n shader.uniforms.lutSize = {\n value: this.lutsPresets.dayLut.lut.texture3D.image.width\n };\n } else {\n shader.uniforms.lut3d = {\n value: null\n };\n \n shader.uniforms.lutSize = {\n value: 0.0\n };\n }\n \n if (this.lutsPresets.nightLut.lut) {\n shader.uniforms.nightLut3d = {\n value: this.lutsPresets.nightLut.lut.texture3D\n };\n shader.uniforms.nightLutSize = {\n value: this.lutsPresets.nightLut.lut.texture3D.image.width\n }\n } else {\n shader.uniforms.nightLut3d = {\n value: null\n };\n shader.uniforms.nightLutSize = {\n value: 0.0\n }\n }\n \n shader.uniforms.timeAlpha = {\n value: this.timeAlpha\n };\n \n shader.fragmentShader = shader.fragmentShader.replace(\n '#include ',\n [\n '#include ',\n head\n ].join( '\\n' )\n );\n \n shader.fragmentShader = shader.fragmentShader.replace(\n '#include ',\n [\n '#include ',\n body\n ].join( '\\n' )\n );\n\n if (this.type === 'tiles') {\n Hmap.upgradeShader(shader);\n } else if (this.type === 'terrain') {\n TerrainEnvironment.upgradeShader(shader);\n }\n \n this.#shaders[material.uuid] = shader;\n }\n \n removeShader(uuid) {\n delete this.#shaders[uuid];\n }\n\n static getScope(type) {\n return LUT.scopes[type];\n }\n\n}\n","'use strict';\n\n\nimport { FullScreenQuad, Pass } from 'three/examples/jsm/postprocessing/Pass';\nimport {\n\tColor,\n\tDepthTexture,\n\tMeshBasicMaterial,\n\tNoBlending,\n\tShaderMaterial,\n\tUniformsUtils,\n\tWebGLRenderTarget,\n} from 'three';\nimport { CopyShader } from 'three/examples/jsm/shaders/CopyShader';\nimport vertex from './Shaders/MaskObject/vertex.glsl';\nimport fragment from './Shaders/MaskObject/fragment.glsl';\nimport { Effect } from './Effect';\nimport { SSAODepthShader } from 'three/examples/jsm/shaders/SSAOShader';\n\n\nexport class MaskObject extends Effect{\n\tconstructor (camera,width,height) {\n\t\tsuper();\n\n\t\tthis.effect = new MaskObjectPass(camera,width,height);\n\t\tthis.active = false;\n\t}\n\n\tsetObject(object) {\n\t\tthis.effect.setObject(object);\n\t}\n\n}\n\nclass MaskObjectPass extends Pass{\n\tconstructor (camera,width,height) {\n\t\tsuper();\n\n\t\tthis.camera = camera;\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.object = null;\n\n\t\tthis.defaultMaterial = new ShaderMaterial({\n\t\t\tuniforms: UniformsUtils.clone( CopyShader.uniforms ),\n\t\t\tvertexShader: CopyShader.vertexShader,\n\t\t\tfragmentShader: CopyShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t});\n\n\t\tthis.depthRenderMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSAODepthShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( SSAODepthShader.uniforms ),\n\t\t\tvertexShader: SSAODepthShader.vertexShader,\n\t\t\tfragmentShader: SSAODepthShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t});\n\n\t\tthis.depthRenderMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\tthis.depthRenderMaterial.uniforms.cameraFar.value = this.camera.far;\n\n\t\tthis.maskMaterial = new ShaderMaterial({\n\t\t\tuniforms: {\n\t\t\t\ttDiffuse: {\n\t\t\t\t\tvalue: null\n\t\t\t\t},\n\t\t\t\ttDiffuseDepth: {\n\t\t\t\t\tvalue: null\n\t\t\t\t},\n\t\t\t\ttMask: {\n\t\t\t\t\tvalue: null\n\t\t\t\t},\n\t\t\t\ttObjectDepth: {\n\t\t\t\t\tvalue: null\n\t\t\t\t}\n\t\t\t},\n\t\t\tvertexShader: vertex,\n\t\t\tfragmentShader: fragment,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t});\n\n\n\t\tconst depthTexture = new DepthTexture();\n\n\t\tthis.defaultRt = new WebGLRenderTarget(this.width,this.height);\n\t\tthis.masktRt = new WebGLRenderTarget(this.width,this.height,{\n\t\t\tdepthTexture: depthTexture\n\t\t});\n\t\tthis.depthDiffuseRt = new WebGLRenderTarget(this.width,this.height);\n\t\tthis.depthObjectRt = new WebGLRenderTarget(this.width,this.height);\n\n\t\tthis.fsQuad = new FullScreenQuad(null);\n\t\tthis.originalClearColor = new Color();\n\t\tthis.visibilityCache = new Map();\n\t\tthis.objectMaterial = new MeshBasicMaterial();\n\t\tthis.needsSwap = false;\n\t}\n\n\tsetObject(object) {\n\t\tthis.object = object;\n\t}\n\n\tsetSize( width, height) {\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.defaultRt.setSize(width,height);\n\t\tthis.masktRt.setSize(width,height);\n\t\tthis.depthDiffuseRt.setSize(width,height);\n\t\tthis.depthObjectRt.setSize(width,height);\n\t}\n\n\trender( renderer, writeBuffer, readBuffer) {\n\t\tthis.depthRenderMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\tthis.depthRenderMaterial.uniforms.cameraFar.value = this.camera.far;\n\n\t\t//Render beauty\n\t\tthis.defaultMaterial.uniforms.tDiffuse.value = readBuffer.texture;\n\t\tthis.renderPass(renderer,this.defaultMaterial,this.defaultRt);\n\n\t\t//Render object\n\t\tif (this.object) {\n\t\t\trenderer.setRenderTarget(this.masktRt);\n\t\t\tthis.overrideVisibility();\n\t\t\trenderer.render(this.object,this.camera);\n\t\t\tthis.maskMaterial.uniforms[ 'tMask' ].value = this.masktRt.texture;\n\t\t\tthis.maskMaterial.uniforms[ 'tObjectDepth' ].value = this.masktRt.depthTexture;\n\n\t\t\trenderer.setRenderTarget(null);\n\t\t\tthis.restoreVisibility();\n\t\t}\n\n\t\tthis.maskMaterial.uniforms[ 'tDiffuse' ].value = this.defaultRt.texture;\n\t\tthis.maskMaterial.uniforms[ 'tDiffuseDepth' ].value = readBuffer.depthTexture;\n\t\tthis.renderPass( renderer, this.maskMaterial, this.renderToScreen ? null : readBuffer );\n\t}\n\n\toverrideVisibility() {\n\t\tconst cache = this.visibilityCache;\n\n\t\tthis.object.traverse(el => {\n\t\t\tif (el.isMesh) {\n\t\t\t\tcache.set(el, el.material);\n\t\t\t\tel.material = this.objectMaterial;\n\t\t\t}\n\t\t})\n\t}\n\n\trestoreVisibility() {\n\t\tconst cache = this.visibilityCache;\n\n\t\tthis.object.traverse(el => {\n\t\t\tif (el.isMesh) {\n\t\t\t\tel.material = cache.get(el);\n\t\t\t}\n\t\t});\n\n\t\tcache.clear();\n\t}\n\n\trenderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {\n\t\t// save original state\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t// setup pass state\n\t\trenderer.autoClear = false;\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.fsQuad.material = passMaterial;\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// restore original state\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\t}\n\n}\n","'use strict';\n\nimport { Effect } from './Effect';\nimport { assignDeep } from '../../../settings';\nimport {\n AddEquation,\n CustomBlending, DstAlphaFactor,\n DstColorFactor,\n NoBlending,\n ShaderMaterial,\n UniformsUtils, WebGLRenderTarget,\n Color,\n ZeroFactor, Vector3, MathUtils, DataTexture, RedFormat, FloatType, RepeatWrapping,\n} from 'three';\nimport { SSAOBlurShader, SSAOShader } from 'three/examples/jsm/shaders/SSAOShader';\nimport { CopyShader } from 'three/examples/jsm/shaders/CopyShader';\nimport { SimplexNoise } from 'three/examples/jsm/math/SimplexNoise';\nimport { FullScreenQuad, Pass } from 'three/examples/jsm/postprocessing/Pass';\n\nconst DEFAULT_PARAMS = {\n kernelRadius: 8,\n minDistance: 0.005,\n maxDistance: 0.1\n};\n\nexport class ScreenSpaceAmbientOcclusion extends Effect{\n constructor (camera,params = {}) {\n super();\n const settings = assignDeep(DEFAULT_PARAMS,params);\n this.effect = new LiteSAO(camera,window.innerWidth,window.innerHeight);\n }\n\n set config(conf) {\n this.active = conf.hasOwnProperty('enabled') ? conf.enabled : conf.active;\n this.effect.uniforms.kernelRadius.value = conf.kernelRadius;\n this.effect.uniforms.minDistance.value = conf.minDistance;\n this.effect.uniforms.maxDistance.value = conf.maxDistance;\n }\n}\n\nclass LiteSAO extends Pass {\n constructor (camera,width,height) {\n super();\n this.camera = camera;\n this.width = width;\n this.height = height;\n this.noiseTexture = null;\n this.kernel = [];\n this.kernelSize = 32;\n\n this.generateSampleKernel();\n this.generateRandomKernelRotations();\n\n this.sao = new ShaderMaterial({\n defines: Object.assign( {}, SSAOShader.defines ),\n uniforms: UniformsUtils.clone( SSAOShader.uniforms ),\n vertexShader: SSAOShader.vertexShader,\n fragmentShader: SSAOShader.fragmentShader,\n blending: NoBlending,\n depthTest: false,\n depthWrite: false\n });\n\n this.uniforms = this.sao.uniforms;\n\n this.sao.uniforms.kernel.value = this.kernel;\n this.sao.uniforms.tNoise.value = this.noiseTexture;\n this.sao.uniforms.cameraProjectionMatrix.value.copy(this.camera.projectionMatrix);\n this.sao.uniforms.cameraInverseProjectionMatrix.value.copy( this.camera.projectionMatrixInverse );\n this.sao.uniforms.resolution.value.set(this.width,this.height);\n this.sao.uniforms.cameraNear.value = this.camera.near;\n this.sao.uniforms.cameraFar.value = this.camera.far;\n\n this.saoBlur = new ShaderMaterial({\n defines: Object.assign( {}, SSAOBlurShader.defines ),\n uniforms: UniformsUtils.clone( SSAOBlurShader.uniforms ),\n vertexShader: SSAOBlurShader.vertexShader,\n fragmentShader: SSAOBlurShader.fragmentShader,\n depthTest: false,\n depthWrite: false\n });\n\n this.copyMaterial = new ShaderMaterial( {\n uniforms: UniformsUtils.clone( CopyShader.uniforms ),\n vertexShader: CopyShader.vertexShader,\n fragmentShader: CopyShader.fragmentShader,\n transparent: true,\n depthTest: false,\n depthWrite: false,\n blendSrc: DstColorFactor,\n blendDst: ZeroFactor,\n blendEquation: AddEquation,\n blendSrcAlpha: DstAlphaFactor,\n blendDstAlpha: ZeroFactor,\n blendEquationAlpha: AddEquation\n } );\n\n this.defaultMaterial = new ShaderMaterial({\n uniforms: UniformsUtils.clone( CopyShader.uniforms ),\n vertexShader: CopyShader.vertexShader,\n fragmentShader: CopyShader.fragmentShader,\n transparent: true,\n depthTest: false,\n depthWrite: false,\n });\n\n this.saoBlur.uniforms.resolution.value.set(this.width,this.height);\n this.defaultRt = new WebGLRenderTarget(this.width,this.height);\n this.saoRt = new WebGLRenderTarget(this.width,this.height);\n this.blurRt = new WebGLRenderTarget(this.width,this.height);\n\n this.fsQuad = new FullScreenQuad(null);\n this.originalClearColor = new Color();\n this.needsSwap = false;\n }\n\n generateSampleKernel() {\n\n const kernelSize = this.kernelSize;\n const kernel = this.kernel;\n\n for ( let i = 0; i < kernelSize; i ++ ) {\n\n const sample = new Vector3();\n sample.x = ( Math.random() * 2 ) - 1;\n sample.y = ( Math.random() * 2 ) - 1;\n sample.z = Math.random();\n\n sample.normalize();\n\n let scale = i / kernelSize;\n scale = MathUtils.lerp( 0.1, 1, scale * scale );\n sample.multiplyScalar( scale );\n\n kernel.push( sample );\n\n }\n\n }\n\n generateRandomKernelRotations() {\n\n const width = 4, height = 4;\n\n if ( SimplexNoise === undefined ) {\n\n console.error( 'THREE.SSAOPass: The pass relies on SimplexNoise.' );\n\n }\n\n const simplex = new SimplexNoise();\n\n const size = width * height;\n const data = new Float32Array( size );\n\n for ( let i = 0; i < size; i ++ ) {\n\n const x = ( Math.random() * 2 ) - 1;\n const y = ( Math.random() * 2 ) - 1;\n const z = 0;\n\n data[ i ] = simplex.noise3d( x, y, z );\n\n }\n\n this.noiseTexture = new DataTexture( data, width, height, RedFormat, FloatType );\n this.noiseTexture.wrapS = RepeatWrapping;\n this.noiseTexture.wrapT = RepeatWrapping;\n this.noiseTexture.needsUpdate = true;\n\n }\n\n setSize( width, height) {\n this.uniforms.resolution.value.set(width,height);\n this.defaultRt.setSize(width,height);\n this.saoRt.setSize(width,height);\n this.blurRt.setSize(width,height);\n this.uniforms.cameraProjectionMatrix.value.copy(this.camera.projectionMatrix);\n this.uniforms.cameraInverseProjectionMatrix.value.copy( this.camera.projectionMatrixInverse );\n }\n\n render( renderer, writeBuffer, readBuffer) {\n //Render beauty\n this.defaultMaterial.uniforms.tDiffuse.value = readBuffer.texture;\n this.renderPass(renderer,this.defaultMaterial,this.defaultRt);\n //Sao render\n // this.sao.uniforms.tDiffuse.value = readBuffer.texture;\n this.sao.uniforms.tDepth.value = readBuffer.depthTexture;\n this.sao.uniforms.tNormal.value = readBuffer.depthTexture;\n this.renderPass(renderer,this.sao,this.saoRt);\n //Blur render\n this.saoBlur.uniforms[ 'tDiffuse' ].value = this.saoRt.texture;\n this.renderPass(renderer,this.saoBlur,this.blurRt);\n\n this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.defaultRt.texture;\n this.copyMaterial.blending = NoBlending;\n this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );\n\n this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRt.texture;\n this.copyMaterial.blending = CustomBlending;\n this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );\n }\n\n renderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {\n // save original state\n renderer.getClearColor( this.originalClearColor );\n const originalClearAlpha = renderer.getClearAlpha();\n const originalAutoClear = renderer.autoClear;\n\n renderer.setRenderTarget( renderTarget );\n\n // setup pass state\n renderer.autoClear = false;\n if ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n renderer.setClearColor( clearColor );\n renderer.setClearAlpha( clearAlpha || 0.0 );\n renderer.clear();\n\n }\n\n this.fsQuad.material = passMaterial;\n this.fsQuad.render( renderer );\n\n // restore original state\n renderer.autoClear = originalAutoClear;\n renderer.setClearColor( this.originalClearColor );\n renderer.setClearAlpha( originalClearAlpha );\n\n }\n\n}","'use strict';\n\nimport { Effect } from './Effect';\nimport { LUTPass } from 'three/examples/jsm/postprocessing/LUTPass';\nimport { Loader } from '../../threejs/loader/Loader';\nimport { LinearSRGBColorSpace } from 'three';\n\nexport class SceneLUT extends Effect{\n\tconstructor () {\n\t\tsuper();\n\t\t\n\t\tthis.effect = new LUTPass();\n\t\tthis.active = false;\n\t}\n\t\n\tset config(conf) {\n\t\tthis.active = conf.active;\n\t\tthis.effect.intensity = conf.intensity;\n\t\t\n\t\tif (conf.lut) {\n\t\t\tconst loader = new Loader().luteLoader;\n\t\t\tconst lut = loader.parse(conf.lut);\n\t\t\tconst texture = lut.texture3D;\n\t\t\ttexture.colorSpace = LinearSRGBColorSpace;\n\t\t\ttexture.needsUpdate = true;\n\t\t\tthis.effect.lut = texture;\n\t\t}\n\t}\n\t\n}\n","'use strict';\n\nimport { AdaptiveToneMappingPass } from '../../../libs/AdaptiveToneMappingPass'\nimport { Effect } from './Effect';\nimport { assignDeep } from '../../../settings';\n\nconst DEFAULT_PARAMS = {\n middleGrey: 0.6,\n maxLuminance: 16,\n averageLuminance: 1\n};\n\nexport class ToneMapping extends Effect {\n constructor (params = {}) {\n super();\n const settings = assignDeep(DEFAULT_PARAMS,params);\n this.effect = new AdaptiveToneMappingPass(false);\n this.effect.setMiddleGrey(settings.middleGrey);\n this.effect.setMaxLuminance(settings.maxLuminance);\n this.effect.setAverageLuminance(settings.averageLuminance);\n }\n\n set config(conf) {\n this.effect.setMiddleGrey(conf.middleGrey);\n this.effect.setMaxLuminance(conf.maxLuminance);\n this.effect.setAverageLuminance(conf.averageLuminance);\n this.active = conf.hasOwnProperty('enabled') ? conf.enabled : conf.active;\n }\n}\n","'use strict';\n\nimport vertex from '../../threejs/Shaders/transition/transition_vertex.glsl';\nimport fragment from '../../threejs/Shaders/transition/transition_fragment.glsl';\nimport { DoubleSide, RawShaderMaterial } from 'three';\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass';\nimport { Effect } from './Effect';\n\nexport class TransitionPass extends Effect{\n constructor () {\n super();\n const material = new RawShaderMaterial({\n vertexShader: vertex,\n fragmentShader: fragment,\n uniforms: {\n tDiffuse: { value: null },\n scale : { value: 1.0 },\n opacity : { value: 0.0 },\n },\n side : DoubleSide,\n depthTest : false,\n depthWrite : false,\n transparent: true,\n });\n\n this.effect = new ShaderPass(material);\n this.effect.enabled = false;\n }\n\n set scale(value) {\n this.effect.uniforms.scale.value = value;\n }\n\n set opacity(value) {\n this.effect.uniforms.opacity.value = value;\n }\n\n}\n","/**\n * Post-Processing Script. to apply one or more graphical effects like Depth-Of-Field, Bloom, Film Grain or various types of Anti-aliasing\n */\n\nimport {\n\tMesh,\n\tDoubleSide,\n\tNearestFilter,\n\tLinearFilter,\n\tRGBAFormat,\n\tOrthographicCamera,\n\tBufferGeometry,\n\tBufferAttribute,\n\tShaderMaterial,\n\tWebGLRenderTarget,\n\tVector2,\n DepthTexture,\n DepthFormat,\n DepthStencilFormat,\n UnsignedInt248Type,\n RawShaderMaterial,\n\tFloatType,\n\n AnimationMixer,\n} from 'three'\n\nimport { settingsData, threeJsVariables } from '../../settings';\nimport { ViewMode } from '../../common';\nimport { AnimationObject } from '../liveAnimations/AnimateObject';\n\nlet renderer = null\nlet camera = null\nlet canvas = null\nlet scene = null\nlet dirLight = null\n\nlet WIDTH = 64\nlet HEIGHT = 64\nlet aspect = 1.0\n\nlet rt1 = null\nlet rt2 = null\nlet rt3 = null\n\nlet postprocessing_active = false\n\nlet bokeh_active = false\nlet bokeh_focus = 80\nlet bokeh_aperture = 0.5/10000.0\nlet bokeh_maxblur = 0.005\n\nlet trans_active = false\nlet trans_scale = 0.0\nlet trans_opacity = 0.0\n\nlet lut_active = false\n\nlet mixers = []\n\nlet renderPasses = []\n\nconst _vector2 = new Vector2()\n\nconst orto_camera = new OrthographicCamera(-1, 1, 1, -1, 0, 1)\n\nconst pass_geometry = new BufferGeometry()\npass_geometry.setAttribute('position', new BufferAttribute(new Float32Array([-1, -1, 0, -1, 1, 0, 1, -1, 0, 1, -1, 0, -1, 1, 0, 1, 1, 0]), 3))\npass_geometry.setAttribute('uv', new BufferAttribute(new Float32Array([0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1]), 2))\n\nconst screen_copy = new Mesh(pass_geometry, new ShaderMaterial({\n uniforms: {\n map : { value: null },\n },\n vertexShader: [\n 'varying vec2 vUv;',\n 'void main() {',\n 'vUv = uv;',\n 'gl_Position = vec4(position,1.0);',\n '}'].join(''),\n fragmentShader: [\n 'uniform sampler2D map;',\n 'varying vec2 vUv;',\n //'const vec4 UnpackFactors = 1.0 / vec4( 256. * 256. * 256., 256. * 256., 256., 1. );',\n //'float unpackRGBAToDepth( const in vec4 v ) { return dot( v, UnpackFactors ); }',\n 'void main(){',\n //'float depth = unpackRGBAToDepth(texture2D( map, vUv));',\n\t\t\t//'gl_FragColor = vec4(depth,depth,depth,1.0);',\n\t\t\t'gl_FragColor = texture2D( map, vUv);',\n '}'].join(''),\n side : DoubleSide,\n depthTest : false,\n depthWrite : false,\n transparent : false,\n}))\n\n/**\n * Depth-of-field shader with bokeh\n * ported from GLSL shader by Martins Upitis\n * http://artmartinsh.blogspot.com/2010/02/glsl-lens-blur-filter-with-bokeh.html\n */\nconst Bokeh = new Mesh(pass_geometry,new ShaderMaterial({\n uniforms: {\n tColor : { value: null },\n tDepth : { value: null },\n focus : { value: 1.0 },\n aspect : { value: 1.0 },\n aperture: { value: 0.025 },\n maxblur : { value: 0.01 },\n far : { value: 4000 },\n },\n vertexShader:[\n 'varying vec2 vUv;',\n 'void main() {',\n 'vUv = uv;',\n 'gl_Position = vec4( position, 1.0 );',\n '}'].join(''),\n fragmentShader:`\n varying vec2 vUv;\n uniform sampler2D tColor;\n uniform sampler2D tDepth;\n uniform float maxblur; // max blur amount\n uniform float aperture; // aperture - bigger values for shallower depth of field\n uniform float focus;\n uniform float aspect;\n uniform float far;\n float perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n return ( near * far ) / ( ( far - near ) * invClipZ - far );\n }\n void main() {\n vec2 aspectcorrect = vec2( 1.0, aspect );\n float viewZ = perspectiveDepthToViewZ(texture2D( tDepth, vUv).x, 1.0, far );\n float factor = ( focus + viewZ ); // viewZ is <= 0, so this is a difference equation\n vec2 dofblur = vec2 ( clamp( factor * aperture, -maxblur, maxblur ) );\n vec2 dofblur9 = dofblur * 0.9;\n vec2 dofblur7 = dofblur * 0.7;\n vec2 dofblur4 = dofblur * 0.4;\n vec4 col = vec4( 0.0 );\n col += texture2D( tColor, vUv.xy );\n col += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur );\n col += texture2D( tColor, vUv.xy + ( vec2( 0.15, 0.37 ) * aspectcorrect ) * dofblur );\n col += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur );\n col += texture2D( tColor, vUv.xy + ( vec2( -0.37, 0.15 ) * aspectcorrect ) * dofblur );\n col += texture2D( tColor, vUv.xy + ( vec2( 0.40, 0.0 ) * aspectcorrect ) * dofblur );\n col += texture2D( tColor, vUv.xy + ( vec2( 0.37, -0.15 ) * aspectcorrect ) * dofblur );\n col += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur );\n col += texture2D( tColor, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur );\n col += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur );\n col += texture2D( tColor, vUv.xy + ( vec2( -0.15, 0.37 ) * aspectcorrect ) * dofblur );\n col += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur );\n col += texture2D( tColor, vUv.xy + ( vec2( 0.37, 0.15 ) * aspectcorrect ) * dofblur );\n col += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur );\n col += texture2D( tColor, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur );\n col += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur );\n col += texture2D( tColor, vUv.xy + ( vec2( 0.15, -0.37 ) * aspectcorrect ) * dofblur );\n\n col += texture2D( tColor, vUv.xy + ( vec2( 0.15, 0.37 ) * aspectcorrect ) * dofblur9 );\n col += texture2D( tColor, vUv.xy + ( vec2( -0.37, 0.15 ) * aspectcorrect ) * dofblur9 );\n col += texture2D( tColor, vUv.xy + ( vec2( 0.37, -0.15 ) * aspectcorrect ) * dofblur9 );\n col += texture2D( tColor, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur9 );\n col += texture2D( tColor, vUv.xy + ( vec2( -0.15, 0.37 ) * aspectcorrect ) * dofblur9 );\n col += texture2D( tColor, vUv.xy + ( vec2( 0.37, 0.15 ) * aspectcorrect ) * dofblur9 );\n col += texture2D( tColor, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur9 );\n col += texture2D( tColor, vUv.xy + ( vec2( 0.15, -0.37 ) * aspectcorrect ) * dofblur9 );\n\n col += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur7 );\n col += texture2D( tColor, vUv.xy + ( vec2( 0.40, 0.0 ) * aspectcorrect ) * dofblur7 );\n col += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur7 );\n col += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur7 );\n col += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur7 );\n col += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur7 );\n col += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur7 );\n col += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur7 );\n\n col += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur4 );\n col += texture2D( tColor, vUv.xy + ( vec2( 0.4, 0.0 ) * aspectcorrect ) * dofblur4 );\n col += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur4 );\n col += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur4 );\n col += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur4 );\n col += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur4 );\n col += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur4 );\n col += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur4 );\n\n gl_FragColor = col / 41.0;\n gl_FragColor.a = 1.0;\n }`,\n side : DoubleSide,\n depthTest : false,\n depthWrite : false,\n transparent : false,\n}))\n\nconst layer_mesh_opacity2 = new Mesh(pass_geometry, new RawShaderMaterial({\n uniforms: {\n map : { value: null },\n scale : { value: 1.0 },\n opacity : { value: 0.0 },\n },\n vertexShader: [\n 'precision highp float;',\n 'precision highp int;',\n 'attribute vec3 position;',\n 'attribute vec2 uv;',\n 'varying vec2 lUv;',\n 'varying vec2 lp;',\n 'void main() {',\n 'lUv = uv;',\n 'lp.x = position.x;',\n 'lp.y = position.y;',\n 'gl_Position = vec4(position,1.0);',\n '}'].join(''),\n fragmentShader: [\n 'precision highp float;',\n 'precision highp int;',\n 'uniform sampler2D map;',\n 'uniform float opacity;',\n 'uniform float scale;',\n 'varying vec2 lUv;',\n 'varying vec2 lp;',\n 'void main(){',\n 'vec4 cmap = texture2D(map, lUv);',\n 'vec3 color = vec3(0.0);',\n 'float total = 0.0;',\n 'vec2 toCenter = vec2(0.5, 0.5) - lUv;',\n 'for (float t = 0.0; t <= 50.0; t++) {',\n 'float percent = t / 50.0;',\n 'float weight = 4.0 * (percent - percent * percent);',\n 'color += texture2D(map, lUv + toCenter * percent* (0.5-opacity*0.5)).rgb*weight;',\n 'total += weight;',\n '}',\n 'gl_FragColor = vec4(mix(color/total,vec3(1.0,1.0,1.0),scale), 1.0 );',\n '}'].join(''),\n side : DoubleSide,\n depthTest : false,\n depthWrite : false,\n transparent: true,\n}))\n\nconst lutPass = new Mesh(pass_geometry,new ShaderMaterial({\n defines: {\n\t\tUSE_3DTEXTURE: 1,\n\t},\n\tuniforms: {\n\t\ttDiffuse : { value: null },\n intensity : { value: 0.0 },\n\t\tlut : { value: null },\n\t\tlut3d : { value: null },\n\t\tlutSize : { value: 0.0 },\n\t},\n\tvertexShader: `\n\t\tvarying vec2 vUv;\n\t\tvoid main() {\n\t\t\tvUv = uv;\n gl_Position = vec4(position,1.0);\n\t\t}`,\n\tfragmentShader: `\n\t\tuniform float lutSize;\n\t\t#if USE_3DTEXTURE\n\t\tprecision highp sampler3D;\n\t\tuniform sampler3D lut3d;\n\t\t#else\n\t\tuniform sampler2D lut;\n\n\t\tvec3 lutLookup( sampler2D tex, float size, vec3 rgb ) {\n\n\t\t\tfloat sliceHeight = 1.0 / size;\n\t\t\tfloat yPixelHeight = 1.0 / ( size * size );\n\n\t\t\t// Get the slices on either side of the sample\n\t\t\tfloat slice = rgb.b * size;\n\t\t\tfloat interp = fract( slice );\n\t\t\tfloat slice0 = slice - interp;\n\t\t\tfloat centeredInterp = interp - 0.5;\n\n\t\t\tfloat slice1 = slice0 + sign( centeredInterp );\n\n\t\t\t// Pull y sample in by half a pixel in each direction to avoid color\n\t\t\t// bleeding from adjacent slices.\n\t\t\tfloat greenOffset = clamp( rgb.g * sliceHeight, yPixelHeight * 0.5, sliceHeight - yPixelHeight * 0.5 );\n\n\t\t\tvec2 uv0 = vec2(\n\t\t\t\trgb.r,\n\t\t\t\tslice0 * sliceHeight + greenOffset\n\t\t\t);\n\t\t\tvec2 uv1 = vec2(\n\t\t\t\trgb.r,\n\t\t\t\tslice1 * sliceHeight + greenOffset\n\t\t\t);\n\n\t\t\tvec3 sample0 = texture2D( tex, uv0 ).rgb;\n\t\t\tvec3 sample1 = texture2D( tex, uv1 ).rgb;\n\n\t\t\treturn mix( sample0, sample1, abs( centeredInterp ) );\n\n\t\t}\n\t\t#endif\n\n\t\tvarying vec2 vUv;\n\t\tuniform float intensity;\n\t\tuniform sampler2D tDiffuse;\n\t\tvoid main() {\n\n\t\t\tvec4 val = texture2D( tDiffuse, vUv );\n\t\t\tvec4 lutVal;\n\n\t\t\t// pull the sample in by half a pixel so the sample begins\n\t\t\t// at the center of the edge pixels.\n\t\t\tfloat pixelWidth = 1.0 / lutSize;\n\t\t\tfloat halfPixelWidth = 0.5 / lutSize;\n\t\t\tvec3 uvw = vec3( halfPixelWidth ) + val.rgb * ( 1.0 - pixelWidth );\n\n\t\t\t#if USE_3DTEXTURE\n\t\t\tlutVal = vec4( texture( lut3d, uvw ).rgb, val.a );\n\t\t\t#else\n\t\t\tlutVal = vec4( lutLookup( lut, lutSize, uvw ), val.a );\n\t\t\t#endif\n\t\t\tgl_FragColor = vec4( mix( val, lutVal, intensity ) );\n\t\t}\n\t`,\n side : DoubleSide,\n depthTest : false,\n depthWrite : false,\n transparent: false,\n}))\n\nexport const postProcessingResize = (width,height)=>{\n threeJsVariables.composer.setSize(width,height);\n return;\n if (WIDTH===width && HEIGHT===height){\n return\n }\n\n //const dpr = renderer.getPixelRatio()\n\n WIDTH = width\n HEIGHT = height\n aspect = WIDTH/HEIGHT\n\n //camera.aspect = aspect\n //camera.updateProjectionMatrix()\n\n //renderer.setSize( WIDTH, HEIGHT )\n\n rt1.setSize(WIDTH, HEIGHT)\n rt2.setSize(WIDTH, HEIGHT)\n rt3.setSize(WIDTH, HEIGHT)\n\n /*\n // --------- bloom\n let resx = Math.round( WIDTH / 2 )\n let resy = Math.round( HEIGHT / 2 )\n\n bloom_rt.setSize( resx, resy )\n for ( let i=0; i{\n const rt = new WebGLRenderTarget(\n width, height,\n {\n minFilter : LinearFilter,\n magFilter : LinearFilter,\n format : RGBAFormat,\n depthBuffer : true,\n stencilBuffer : false\n }\n )\n\n rt.texture.generateMipmaps = false\n rt.depthTexture = new DepthTexture()\n rt.depthTexture.format = DepthStencilFormat\n rt.depthTexture.type = UnsignedInt248Type\n return rt\n}\n\n/**\n * Init Post-Processing and add it to render\n */\n\nconst createRenderTargets = ()=>{\n\n\tif (renderer.capabilities.isWebGL2){\n\t\trt1 = new WebGLRenderTarget( //new WebGLRenderTarget(\n\t\t\tWIDTH, HEIGHT,\n\t\t\t{\n\t\t\t\tminFilter : LinearFilter,\n\t\t\t\tmagFilter : NearestFilter,\n\t\t\t\tformat : RGBAFormat,\n\t\t\t\tdepthBuffer : true,\n\t\t\t\tstencilBuffer : false,\n\t\t\t}\n\t\t)\n\n let samples = renderer.capabilities.maxSamples\n if (window.devicePixelRatio>=2){\n samples = Math.trunc(samples / 2)\n }\n rt1.samples = samples\n\n\t\trt1.texture.generateMipmaps = false\n\t\trt1.depthTexture = new DepthTexture()\n rt1.depthTexture.format = DepthFormat //DepthFormat\n\t rt1.depthTexture.type = FloatType //UnsignedIntType //FloatType\n\n }else{\n\n\t\trt1 = new WebGLRenderTarget(\n\t\t\tWIDTH, HEIGHT,\n\t\t\t{\n\t\t\t\tminFilter : LinearFilter,\n\t\t\t\tmagFilter : NearestFilter,\n\t\t\t\tformat : RGBAFormat,\n\t\t\t\tdepthBuffer : true,\n\t\t\t\tstencilBuffer : false\n\t\t\t}\n\t\t)\n\n\t\trt1.texture.generateMipmaps = false\n\t\t// настройки для webgl1\n\t\trt1.depthTexture = new DepthTexture()\n \trt1.depthTexture.format = DepthFormat //DepthStencilFormat\n\t rt1.depthTexture.type = FloatType //UnsignedShortType //UnsignedInt248Type\n }\n\n\n //--------------------------------------------\n rt2 = new WebGLRenderTarget(\n WIDTH, HEIGHT,\n {\n minFilter : NearestFilter,\n magFilter : NearestFilter,\n format : RGBAFormat,\n depthBuffer : false,\n stencilBuffer : false\n }\n )\n //--------------------------------------------\n rt3 = new WebGLRenderTarget(\n WIDTH, HEIGHT,\n {\n minFilter : NearestFilter,\n magFilter : NearestFilter,\n format : RGBAFormat,\n depthBuffer : false,\n stencilBuffer : false\n }\n )\n}\n\nexport const setAnimations = (obj,animations,instanceId=null)=>{\n let mixer = new AnimationObject(obj,instanceId)\n let action = mixer.clipAction( animations[0] )\n action.play()\n mixers.push(mixer)\n}\n\nexport const isPostProcessingActive = ()=>postprocessing_active\n\n// export const postProcessing = (_renderer,_camera,_canvas,_scene,_dirlight = null) => {\n// return;\n// renderer = _renderer\n// camera = _camera\n// canvas = _canvas\n// scene = _scene\n// \tdirLight = _dirlight\n//\n// WIDTH = canvas.width\n// HEIGHT = canvas.height\n// aspect = WIDTH/HEIGHT\n//\n// postprocessing_active = true\n//\n// createRenderTargets()\n//\n// //DOFMipMap.material.uniforms.tColor.value = rt1.texture\n// //DOFMipMap.material.uniforms.tDepth.value = rt1.depthTexture\n//\n// Bokeh.material.uniforms.tColor.value = rt1.texture\n// Bokeh.material.uniforms.tDepth.value = rt1.depthTexture\n// Bokeh.material.uniforms.far.value = camera.far\n//\n// //prepareBloom()\n//\n// //renderResize()\n//\n// /*\n// const {renderer, scene, perspectiveCamera: camera} = threeJsVariables;\n// const {depthOfFields: dof, depthOfFields2: dof2, ambientOcclusion: ao, effectFXAA} = settingsData.postProcessing;\n//\n// if (dof || ao || effectFXAA) {\n// const composer = new EffectComposer( renderer );\n// threeJsVariables.composer = composer;\n//\n// const renderPass = new RenderPass( scene, camera );\n// composer.addPass( renderPass );\n//\n// ao && ambientOcclusion(composer, scene, camera);\n// dof && depthOfFields(composer, scene, camera);\n// effectFXAA && highlightsElements(composer, scene, camera);\n// }\n//\n// dof2 && depthOfFields2(scene, camera)\n// */\n// }\n\n// export const setTransEffect = (active,scale,opacity)=>{\n// trans_active = active\n// trans_scale = scale\n// trans_opacity = opacity\n// }\n\n\n// export const renderSceneToRT = (renderer,scene,camera)=>{\n// renderer.autoClear = false\n// renderer.getSize(_vector2)\n// //const rt = createRenderTarget(_u.x*0.25,_u.y*0.25)\n// rt2 = createRenderTarget(_vector2.x,_vector2.y)\n//\n// renderer.setRenderTarget(rt2)\n// renderer.render(scene,camera)\n// }\n\n// export const renderTransition = (renderer)=>{\n// renderer.setRenderTarget( null )\n// layer_mesh_opacity2.material.uniforms.map.value = rt2.texture\n// layer_mesh_opacity2.material.uniforms.opacity.value = trans_opacity\n// layer_mesh_opacity2.material.uniforms.scale.value = trans_scale\n// renderer.render(layer_mesh_opacity2, orto_camera)\n//\n// rt2.dispose()\n// renderer.autoClear = true\n// }\n\n// const renderTransition2 = (rt)=>{\n// layer_mesh_opacity2.material.uniforms.map.value = rt.texture\n// layer_mesh_opacity2.material.uniforms.opacity.value = trans_opacity\n// layer_mesh_opacity2.material.uniforms.scale.value = trans_scale\n// renderer.render(layer_mesh_opacity2, orto_camera)\n// }\n\nexport const setBokeh = (active,aperture,maxblur)=>{\n bokeh_active = active\n bokeh_aperture = aperture/10000.0\n bokeh_maxblur = maxblur\n}\n\nconst renderBokeh = ()=>{\n let y = 50 - camera.position.y\n let d = Math.sqrt(camera.position.x*camera.position.x+y*y+camera.position.z*camera.position.z)\n Bokeh.material.uniforms.focus.value = d\n Bokeh.material.uniforms.aspect.value = aspect\n Bokeh.material.uniforms.aperture.value = bokeh_aperture\n Bokeh.material.uniforms.maxblur.value = bokeh_maxblur\n renderer.render( Bokeh, orto_camera )\n}\n\nexport const setLut = (active,t,intensity)=>{\n lut_active = active\n\n let m = lutPass.material\n if (t.isData3DTexture){\n m.defines.USE_3DTEXTURE = 1\n m.uniforms.lut3d.value = t\n }else{\n m.defines.USE_3DTEXTURE = 0\n m.uniforms.lut.value = t\n }\n\t//m.needsUpdate = true\n m.uniforms.lutSize.value = t.image.width\n m.uniforms.intensity.value = intensity\n}\n\nexport const addPass = (pass)=>{\n renderPasses.push(pass)\n}\n\nexport function animationMixerUpdate (delta) {\n if (mixers.length && settingsData.activeViewMode === ViewMode.Orbit) {\n for (let i=0;i selection.status === prop.status.toLowerCase());\n if (selectionStatus) {\n notifyColor.setStyle(`#${selectionStatus.basic}`,LinearSRGBColorSpace);\n // const color = notifyColor.convertLinearToSRGB().getHexString();\n const color = 'fab446';\n const dir = getCurrentLangDirection();\n const notifySettings = {\n timeout: 6 * 1000,\n position: 'center-top',\n rtl: (dir !== 'ltr'),\n info:{\n background: `#${color}`,\n }\n };\n const pattern = {\n aptNum: {},\n roomNum: {},\n floor: {}\n };\n const dictionaryKey = prop.status === 'Saved' ? 'savedNotificationText' : 'soldNotificationText';\n Object.keys(config.dictionary[dictionaryKey]).forEach(lang => {\n pattern.aptNum[lang] = prop.propNum;\n pattern.roomNum[lang] = prop.roomNum;\n pattern.floor[lang] = prop.floorNum;\n });\n\n const text = changeLangToCurrent(dictionaryKey,[pattern]);\n const html = Notification.template(text,dictionaryKey);\n Notiflix.Notify.merge(notifySettings);\n Notiflix.Notify.info(html.innerHTML);\n }\n }\n\n static template(message,dictionaryKey) {\n const container = new BaseElement()\n .addClass('notification')\n .DOMElement;\n new BaseElement('span')\n .addClass('notification__text','language-string')\n .innerHtml(message)\n .addAttribute('data-dictionary',dictionaryKey)\n .appendTo(container);\n\n return container;\n }\n\n}\n\nclass PushEvents extends Notification{\n constructor () {\n super();\n }\n\n updateProp(prop) {\n const {selectedMesh,crmDataOfFlat} = findSelectionAndCrmData(prop.engineId);\n const prevStatus = crmDataOfFlat.status;\n parseFacing(prop);\n Object.entries(prop).forEach(([key,value]) => {\n if (key === 'status' && (crmDataOfFlat[key] !== value &&\n (value === 'Saved' || value === 'Sold'))) {\n this.notifyStatus(prop);\n }\n\n if (key === 'status' && crmDataOfFlat[key] !== value) {\n value === 'InSaving'\n ? Prepayment.disable(prop)\n : Prepayment.enable(prop);\n }\n\n crmDataOfFlat[key] = value;\n });\n\n const needsEdges = prevStatus !== 'Available' && crmDataOfFlat.status === 'Available';\n\n if (projectMode.LiteMode.isActive() && projectMode.LiteMode.modeIs('picture')) {\n const label = selectedMesh.getObjectByName('label');\n label.element.remove();\n label.removeFromParent();\n flatLabelPictureLiteMode(selectedMesh);\n } else {\n createMaterialAndSetBaseColor(selectedMesh,needsEdges);\n }\n\n const outline = selectedMesh.getObjectByName('Outline');\n if (outline && crmDataOfFlat.status !== 'Available') {\n outline.removeFromParent();\n }\n\n if (settingsData.activeViewMode !== ViewMode.Orbit) {\n searchGetResults();\n const unitCard = UnitCardClass.findCard(prop.engineId);\n const optionCard = document.querySelector(`.options-card[data-engineid=\"${prop.engineId}\"]`);\n if (unitCard) {\n updateUnitCardProps(unitCard,prop);\n }\n\n if (optionCard) {\n const object = prop;\n optionCard.remove();\n if (isMobile) {\n openOptionsCard({object, settings: config, isForeCompare: false});\n } else {\n createOptionsCard({object, settings: config, isForeCompare: false});\n }\n }\n }\n }\n}\n\nexport class PushNotifications extends PushEvents {\n\n constructor () {\n super();\n this.connected = false;\n }\n\n async connect() {\n let response;\n try {\n response = await getWSToken();\n }catch (e) {\n console.log(`WS Token: Can't get the token. Error: ` + e.message);\n return;\n }\n\n this.token = response.data;\n if (!this.token) return;\n\n try {\n this.webSocket = new WebSocket('wss://wss.bmby.com:8443/events?tokenId=' + this.token);\n } catch (e) {\n throw new Error('Push notifications: ' + e.message);\n }\n\n this.webSocket.addEventListener('open', this.openHandler.bind(this));\n this.webSocket.addEventListener('message', this.messageHandler.bind(this));\n }\n\n openHandler() {\n this.connected = true;\n console.log('Connected');\n }\n\n messageHandler(e) {\n const message = JSON.parse(e.data);\n if (message.type !== 6060 || !message.data.objData) return;\n\n switch (message.data.objData.eventType) {\n case 'updateProp':\n message.data.objData.propData.forEach(prop => this.updateProp(prop));\n setTimeout(() => {IntersectionLegenda.build()}, 1000);\n break;\n case 'generalUpdate':\n break;\n }\n }\n\n}","'use strict';\n\n\nimport { Exposure } from './QAExposure';\nimport { getUrlParam } from '../../functions';\nimport * as dat from 'dat.gui';\nimport { PoiQA } from './QAPoi';\nimport { QAPublicLayers } from './QAPublicLayers';\nimport { VantagesQA } from './QAVantages';\nimport { ObjectsQA } from './QAObjects';\nimport { QAApartmentsPlan } from './QAApartmentsPlan';\nimport { QARotor } from './QARotor';\n\nexport class QA {\n\tstatic active = getUrlParam('mode') === 'qa';\n\t\n\tconstructor () {\n\t\tthis.tests = {};\n\t\tthis.gui = null\n\t}\n\t\n\tinit() {\n\t\tif (!QA.active)\n\t\t\treturn this;\n\t\t\n\t\tthis.tests.Exposure = new Exposure();\n\t\tthis.tests.Poi = new PoiQA();\n\t\tthis.tests.PublicLayers = new QAPublicLayers();\n\t\tif (config.features.vantage?.type === 'photographic') {\n\t\t\tconfig.features.hideKeyPlanButton = false;\n\t\t\tconfig.features.cylinderDisplayMode = {mode: 'show all'};\n\t\t\tthis.tests.Vantages = new VantagesQA();\n\t\t}\n\t\tthis.tests.Viewpoints = new ObjectsQA();\n\t\tthis.tests.Plans2D = new QAApartmentsPlan();\n\t\tthis.tests.Rotor = new QARotor();\n\t\t\n\t\tthis.gui = new dat.GUI();\n\t\tObject.entries(this.tests).forEach(([key,scope]) => {\n\t\t\tthis.gui.add({[key]:() => scope.validate()},key);\n\t\t});\n\t\t\n\t\treturn this;\n\t}\n}\n\n\n\n\n","'use strict';\n\n\nimport { Report } from './QAReport';\nimport { settingsData } from '../../settings';\n\nexport class QAApartmentsPlan extends Report{\n\tconstructor () {\n\t\tsuper('2D Plans');\n\t}\n\t\n\tvalidate() {\n\t\tif (this.jsonReport.length) {\n\t\t\tthis.showReport();\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif (!Array.isArray(settingsData.allCrmData) || settingsData.allCrmData.length === 0) {\n\t\t\tthis.jsonReport.push('CRM data is absent');\n\t\t\tthis.showReport();\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tsettingsData.allCrmData.forEach(prop => {\n\t\t\tif (prop.assets.plan2D.trim().length === 0) {\n\t\t\t\tthis.addError(prop,'Plan 2D is absent.')\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.normalize();\n\t\tthis.showReport();\n\t}\n\t\n\tnormalize () {\n\t\tif (!this.log.length) {\n\t\t\tthis.jsonReport.push('OK');\n\t\t} else {\n\t\t\tthis.log.forEach(report => {\n\t\t\t\tconst apartmentString = super.normalize(report.apt);\n\t\t\t\tlet dataString = apartmentString + ' - ' + report.message;\n\t\t\t\tthis.jsonReport.push(dataString);\n\t\t\t});\n\t\t}\n\t}\n}\n","'use strict';\n\nimport { settingsData } from '../../settings';\nimport { getHighlights } from '../threejs/autoSelectionBoxes';\nimport {\n\tBox3,\n\tMathUtils,\n\tSpherical,\n\tVector3,\n} from 'three';\nimport { Report } from './QAReport';\n\nconst FACING = {\n\t\"דרום\": {\n\t\t\"en\": \"South\",\n\t\t\"ru\": \"\",\n\t\t\"he\": \"דרום\"\n\t},\n\t\n\t\"צפון\": {\n\t\t\"en\": \"North\",\n\t\t\"ru\": \"\",\n\t\t\"he\": \"צפון\"\n\t},\n\t\"מזרח\": {\n\t\t\"en\": \"East\",\n\t\t\"ru\": \"\",\n\t\t\"he\": \"מזרח\"\n\t},\n\t\n\t\"מערב\": {\n\t\t\"en\": \"West\",\n\t\t\"ru\": \"\",\n\t\t\"he\": \"מער\"\n\t}\n};\n\nconst North = new Vector3();\nconst East = new Vector3();\nconst South = new Vector3();\nconst West = new Vector3();\nconst _vec1 = new Vector3();\nconst _vec2 = new Vector3();\nconst _box = new Box3();\nconst _axis = new Vector3(0,-1,0).normalize();\nconst Distance = 100;\n\n\nexport class Exposure extends Report{\n\tconstructor () {\n\t\tsuper('Exposure');\n\t\tthis.message = 'Invalid exposure direction';\n\t\tthis.compass = config.threejs.compass.correction;\n\t\tthis.crm = JSON.parse(JSON.stringify(settingsData.allCrmData));\n\t\tthis.hightlights = getHighlights();\n\t\tthis.from = new Vector3();\n\t\tthis.to = new Vector3();\n\t\tthis.direction = new Vector3();\n\t\tthis.sperical = new Spherical();\n\t}\n\t\n\tvalidate() {\n\t\tif (this.jsonReport.length) {\n\t\t\tthis.showReport();\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.crm.forEach(apt => {\n\t\t\tthis.#translateFacing(apt);\n\t\t\tconst selectionBox = this.hightlights.getObjectByName(apt.engineId);\n\t\t\tif (selectionBox) {\n\t\t\t\tselectionBox.parent.getWorldPosition(this.from);\n\t\t\t\t_box.setFromObject(selectionBox);\n\t\t\t\t_box.getCenter(this.to);\n\t\t\t\t// selectionBox.getWorldPosition(this.to);\n\t\t\t\tthis.from.setY(this.to.y);\n\t\t\t\tthis.#setExposures(this.from);\n\t\t\t\tthis.direction\n\t\t\t\t\t.subVectors(this.to,this.from)\n\t\t\t\t\t.normalize()\n\t\t\t\t\t.setLength(Distance)\n\t\t\t\t\t.add(this.from)\n\t\t\t\t\t.setY(this.from.y);\n\t\t\t\t\n\t\t\t\tconst worldExposure = this.#getWorldExposure(this.direction,this.from);\n\t\t\t\tif (worldExposure.length === 0) {\n\t\t\t\t\tthis.addError(apt,`World facing is empty`);\n\t\t\t\t} else {\n\t\t\t\t\tif (apt.facing.length === 1) {\n\t\t\t\t\t\tapt.facing.forEach(facing => {\n\t\t\t\t\t\t\tif (!worldExposure.includes(facing)) {\n\t\t\t\t\t\t\t\tthis.addError(apt,null, worldExposure);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tworldExposure.forEach(facing => {\n\t\t\t\t\t\t\tif (!apt.facing.includes(facing)) {\n\t\t\t\t\t\t\t\tthis.addError(apt,null,worldExposure);\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}\n\t\t\t} else {\n\t\t\t\tthis.addError(apt,`Selection box is absent`);\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.normalize();\n\t\tthis.showReport();\n\t}\n\t\n\tnormalize () {\n\t\tif (!this.log.length) {\n\t\t\tthis.jsonReport.push('OK');\n\t\t} else {\n\t\t\tthis.log.forEach(report => {\n\t\t\t\tconst apartmentString = super.normalize(report.apt);\n\t\t\t\tlet dataString = apartmentString + ' - ' + report.message + '. Current facing: ' + report.apt.facing.join(',');\n\t\t\t\tif (report.expected) {\n\t\t\t\t\tdataString += '. Expected: ' + report.expected.join(',');\n\t\t\t\t}\n\t\t\t\tthis.jsonReport.push(dataString);\n\t\t\t});\n\t\t}\n\t}\n\t\n\t#setExposures(floorVector) {\n\t\tthis.sperical.setFromVector3(floorVector);\n\t\tNorth.copy(floorVector)\n\t\t\t.applyAxisAngle(_axis,this.sperical.theta - this.compass + Math.PI)\n\t\t\t.normalize()\n\t\t\t.setLength(Distance)\n\t\t\t.add(floorVector)\n\t\t\t.setY(floorVector.y);\n\t\t\n\t\tEast.copy(floorVector)\n\t\t\t.applyAxisAngle(_axis,this.sperical.theta - this.compass + Math.PI + Math.PI / 2)\n\t\t\t.normalize()\n\t\t\t.setLength(Distance)\n\t\t\t.add(floorVector)\n\t\t\t.setY(floorVector.y);\n\t\t\n\t\tWest.copy(floorVector)\n\t\t\t.applyAxisAngle(_axis,this.sperical.theta - this.compass + Math.PI - Math.PI / 2)\n\t\t\t.normalize()\n\t\t\t.setLength(Distance)\n\t\t\t.add(floorVector)\n\t\t\t.setY(floorVector.y);\n\t\t\n\t\tSouth.copy(floorVector)\n\t\t\t.applyAxisAngle(_axis,this.sperical.theta - this.compass + Math.PI * 2)\n\t\t\t.normalize()\n\t\t\t.setLength(Distance)\n\t\t\t.add(floorVector)\n\t\t\t.setY(floorVector.y);\n\t}\n\t\n\t#getWorldExposure(direction,center) {\n\t\tconst angles = {\n\t\t\tNorth: this.#getAngle(North,direction,center),\n\t\t\tEast: this.#getAngle(East,direction,center),\n\t\t\tSouth: this.#getAngle(South,direction,center),\n\t\t\tWest: this.#getAngle(West,direction,center)\n\t\t};\n\t\t\n\t\tconst exposure = [];\n\t\t\n\t\tObject.entries(angles).forEach(([direction,angle]) => {\n\t\t\tif (angle >= 0 && angle <= 90) {\n\t\t\t\texposure.push(direction);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn exposure;\n\t}\n\t\n\t#getAngle(from,to,center) {\n\t\t_vec1.copy(from).sub(center);\n\t\t_vec2.copy(to).sub(center);\n\t\treturn MathUtils.radToDeg(_vec1.angleTo(_vec2));\n\t}\n\t\n\t#translateFacing(apt) {\n\t\tapt.facing.forEach((face,index) => {\n\t\t\tapt.facing[index] = FACING[face].en\n\t\t});\n\t}\n}\n","'use strict';\n\n\nimport { Buildings, settingsData, threeJsVariables, UIRoot } from '../../settings';\nimport { BaseElement } from '../interfaces/BaseElement';\nimport { Vantages } from '../components/vantage/Vantage';\nimport {\n\tClampToEdgeWrapping,\n\tGroup,\n\tLinearSRGBColorSpace,\n\tLoadingManager, MathUtils,\n\tMatrix4,\n\tPerspectiveCamera,\n\tScene,\n\tTextureLoader, Vector3,\n\tWebGLRenderer,\n} from 'three';\nimport {Draggable} from \"gsap/Draggable\";\nimport { OrbitControls } from '../../libs/OrbitControls';\nimport { disposeObject, isBetaResourcesFolder } from '../../functions';\nimport { generateRegion } from '../threejs/sceneBackground';\nimport { Cloudflare } from '../api/Cloudflare';\nimport { DreamsPreloader } from '../components/preloader/DreamsPreloader';\nimport gsap from \"gsap\";\nimport { zoom } from '../../libs/directive';\nimport { Compass } from '../components/compass/compass';\n\nexport class QAFloorValidator {\n\tconstructor (renderer) {\n\t\tthis.renderer = renderer;\n\t\tthis.floor = settingsData.currentFloor;\n\t\tconst ls = localStorage.getItem('floorValidator');\n\t\tthis.ls = ls ? JSON.parse(ls) : {};\n\t\tthis.cards = [];\n\t\tthis.container = new BaseElement()\n\t\t\t.addClass('qa__floor-validator')\n\t\t\t.DOMElement;\n\t\t\n\t\tconst header = new BaseElement()\n\t\t\t.addClass('qa__floor-validator__drag')\n\t\t\t.innerHtml(`Floor validator: ${this.floor}`)\n\t\t\t.appendTo(this.container)\n\t\t\t.DOMElement;\n\t\t\n\t\tgsap.registerPlugin(Draggable);\n\t\tDraggable.create(this.container, {\n\t\t\t\ttype: \"x,y\",\n\t\t\t\ttrigger: header\n\t\t\t}\n\t\t);\n\t}\n\t\n\tbuild() {\n\t\tconst building = Buildings.getActiveBuilding();\n\t\tconst apartments = building.getFloorSelections(this.floor,false);\n\t\tconst props = apartments.map(apt => apt.userData.crm_data);\n\t\tlet prevValid = [];\n\t\t\n\t\tif (this.ls[building.name] && this.ls[building.name][this.floor]) {\n\t\t\tprevValid = this.ls[building.name][this.floor];\n\t\t}\n\t\t\n\t\tprops.forEach(prop => {\n\t\t\tconst status = prevValid.find(data => data.apt === prop.propNum) || {valid: false,message: 'Not checked'};\n\t\t\tconst card = new AptCardValidator(prop,status,this.renderer);\n\t\t\tcard.build(this.container);\n\t\t\tthis.cards.push(card);\n\t\t});\n\t\t\n\t\tUIRoot.appendChild(this.container);\n\t}\n\t\n\tsave() {\n\t\tconst activeBuilding = Buildings.getActiveBuilding();\n\t\tif (!this.ls[activeBuilding.name]) {\n\t\t\tthis.ls[activeBuilding.name] = {};\n\t\t}\n\t\t\n\t\tthis.ls[activeBuilding.name][this.floor] = this.cards.map(card => card.status);\n\t\tlocalStorage.setItem('floorValidator',JSON.stringify(this.ls));\n\t}\n\t\n\tdestroy() {\n\t\tfor (let i = 0; i < this.cards.length; i++) {\n\t\t\tthis.cards[i].destroy();\n\t\t}\n\t\t\n\t\tthis.cards = null;\n\t\tthis.ls = null;\n\t\tthis.floor = null;\n\t\tthis.container.remove();\n\t\tthis.container = null;\n\t}\n\t\n}\n\n\nclass AptCardValidator {\n\tconstructor (props,status,renderer) {\n\t\tthis.data = props;\n\t\tthis.renderer = renderer;\n\t\tthis.vantage = null;\n\t\tthis.status = {\n\t\t\tapt: this.data.propNum,\n\t\t\tmessage: status.message,\n\t\t\tvalid: status.valid\n\t\t};\n\t\tthis.card = new BaseElement()\n\t\t\t.addClass('qa__floor-validator__card')\n\t\t\t.DOMElement;\n\t}\n\t\n\tbuild(parent) {\n\t\tconst header = new BaseElement('h5')\n\t\t\t.addClass('qa__floor-validator__card__header')\n\t\t\t.innerHtml('APT: ' + this.data.propNum)\n\t\t\t.appendTo(this.card)\n\t\t\t.DOMElement;\n\t\t\n\t\tconst status = new BaseElement()\n\t\t\t.addClass('qa__floor-validator__card__valid', this.status.valid ? '--floor-validator__valid' : '--floor-validator__invalid')\n\t\t\t.appendTo(header);\n\t\t\n\t\tconst content = new BaseElement()\n\t\t\t.addClass('qa__floor-validator__card__content')\n\t\t\t.appendTo(this.card)\n\t\t\t.DOMElement;\n\t\t\n\t\tconst plan2D = new BaseElement()\n\t\t\t.addClass('qa__floor-validator__card__element')\n\t\t\t.appendTo(content)\n\t\t\t.DOMElement;\n\t\t\n\t\tconst vantageViewer = new BaseElement()\n\t\t\t.addClass('qa__floor-validator__card__element','qa__floor-validator__vantage-viewer')\n\t\t\t.appendTo(content)\n\t\t\t.DOMElement;\n\t\t\n\t\tconst buttons = new BaseElement()\n\t\t\t.addClass('qa__floor-validator__card__buttons')\n\t\t\t.appendTo(this.card)\n\t\t\t.DOMElement;\n\t\t\n\t\tnew BaseElement('button')\n\t\t\t.addClass('qa__floor-validator__card__btn','icon-close','button')\n\t\t\t.event('click',() => {\n\t\t\t\tstatus.removeClass('--floor-validator__valid');\n\t\t\t\tstatus.addClass('--floor-validator__invalid');\n\t\t\t\tthis.status.valid = false;\n\t\t\t})\n\t\t\t.appendTo(buttons);\n\t\t\n\t\tnew BaseElement('button')\n\t\t\t.addClass('qa__floor-validator__card__btn','icon-check-mark','button')\n\t\t\t.event('click',() => {\n\t\t\t\tstatus.addClass('--floor-validator__valid');\n\t\t\t\tstatus.removeClass('--floor-validator__invalid');\n\t\t\t\tthis.status.valid = true;\n\t\t\t})\n\t\t\t.appendTo(buttons);\n\t\t\n\t\tconst img = new Image();\n\t\timg.classList.add('qa__floor-validator__card__plan2D');\n\t\timg.alt = `APT: ${this.data.propNum} 2D plan`;\n\t\timg.onload = () => {\n\t\t\tplan2D.appendChild(img);\n\t\t\tplan2D.classList.add('zoom');\n\t\t\tplan2D.addEventListener('mouseenter',() => parent.classList.add('--prevent-scroll'));\n\t\t\tplan2D.addEventListener('mouseleave',() => parent.classList.remove('--prevent-scroll'));\n\t\t\tzoom();\n\t\t};\n\t\timg.onerror = () => {\n\t\t\tQAErrorMessageElement(plan2D,`2D plan is absent`);\n\t\t\tthis.status.message = '2D plan is absent';\n\t\t};\n\t\timg.src = Cloudflare.resize(this.data.assets.plan2D,{width: 4096});\n\t\t\n\t\tconst bundleVantages = threeJsVariables.bundleConfig?.vantage || {};\n\t\t\n\t\tconst loadVantageIframe = () => {\n\t\t\tif (this.data.vantage.length) {\n\t\t\t\tnew BaseElement('iframe')\n\t\t\t\t\t.addClass('qa__floor-validator__vantage-iframe')\n\t\t\t\t\t.addAttribute('src',this.data.vantage)\n\t\t\t\t\t.appendTo(vantageViewer);\n\t\t\t} else {\n\t\t\t\tQAErrorMessageElement(vantageViewer,'Vantage is absent');\n\t\t\t\tthis.status.message = 'Vantage is absent';\n\t\t\t}\n\t\t};\n\t\t\n\t\tif (Vantages.isPhotographic() && bundleVantages && Object.keys(bundleVantages).length) {\n\t\t\tconst activeBuilding = Buildings.getActiveBuilding();\n\t\t\tconst vantage = bundleVantages[activeBuilding.name].find(vantage => vantage.name === this.data.engineId);\n\t\t\tif (vantage) {\n\t\t\t\tthis.vantage = new QAVantageViewer(vantage,vantageViewer,this.renderer);\n\t\t\t\tthis.vantage.loadVantage();\n\t\t\t} else {\n\t\t\t\tloadVantageIframe();\n\t\t\t}\n\t\t} else {\n\t\t\tloadVantageIframe();\n\t\t}\n\t\t\n\t\tparent.appendChild(this.card);\n\t}\n\t\n\tdestroy() {\n\t\tthis.vantage?.destroy();\n\t\tthis.card = null;\n\t\tthis.data = null;\n\t\tthis.status = null;\n\t\tthis.vantage = null;\n\t}\n\t\n}\n\n\nclass QAVantageViewer {\n\tconstructor (vantage,container,renderer) {\n\t\tthis.vantage = vantage;\n\t\tthis.params = {\n\t\t\tmatrix: new Matrix4().fromArray(this.vantage.matrix),\n\t\t\tfrom: new Vector3().fromArray(this.vantage.pointFrom),\n\t\t\tto: new Vector3().fromArray(this.vantage.pointTo),\n\t\t\tparts: ['nz','pz','px','nx','py','ny'],\n\t\t\turl: `${config.cdnRepository}/${config.projectFolder}/`\n\t\t};\n\t\t\n\t\tthis.container = container;\n\t\t\n\t\tthis.canvas = new BaseElement('canvas')\n\t\t\t.appendTo(this.container)\n\t\t\t.DOMElement;\n\t\t\n\t\tthis.context = null;\n\t\t\n\t\tthis.scene = new Scene();\n\t\tthis.camera = new PerspectiveCamera(90);\n\t\tthis.renderer = renderer;\n\t\t\n\t\tthis.sphere = null;\n\t\t\n\t\t// this.container.appendChild(this.renderer.domElement);\n\t\tthis.controls = new OrbitControls(this.camera,this.container);\n\t\tthis.controls.rotateSpeed = 0.15;\n\t\tthis.controls.enablePan = false;\n\t\tthis.controls.enableZoom = false;\n\t\tthis.controls.reverseControls = true;\n\t\tthis.controls.minAzimuthAngle = -Infinity;\n\t\tthis.controls.maxAzimuthAngle = Infinity;\n\t\tthis.controls.update();\n\t\t\n\t\tthis.params.from.applyMatrix4(this.params.matrix);\n\t\tthis.params.to.applyMatrix4(this.params.matrix);\n\t\tthis.camera.position.copy(this.params.from);\n\t\tthis.controls.target.copy(this.params.to);\n\t\tthis.controls.update();\n\t\t\n\t\tconst limit = MathUtils.degToRad(this.vantage.limit);\n\t\t\n\t\tif (limit === Math.PI * 2) {\n\t\t\tthis.controls.minAzimuthAngle = - Infinity;\n\t\t\tthis.controls.maxAzimuthAngle = Infinity;\n\t\t} else {\n\t\t\tconst currentAzimuth = this.controls.getAzimuthalAngle();\n\t\t\tthis.controls.minAzimuthAngle = currentAzimuth - limit / 2;\n\t\t\tthis.controls.maxAzimuthAngle = currentAzimuth + limit / 2;\n\t\t}\n\t\t\n\t\tthis.compass = new Compass(this.container,this.vantage.name,this.camera,this.controls);\n\t\tthis.compass.addClass('vantage-compass');\n\t\tthis.compass.rotate();\n\t\t\n\t\tthis.controls.addEventListener('change',this.render.bind(this));\n\t}\n\t\n\tloadVantage() {\n\t\tconst manager = new LoadingManager();\n\t\tconst textureLoader = new TextureLoader(manager);\n\t\tconst preloader = new DreamsPreloader(this.container);\n\t\tpreloader.substrate().absolute();\n\t\t\n\t\tmanager.onStart = () => {\n\t\t\tpreloader.show();\n\t\t};\n\t\t\n\t\tmanager.onLoad = () => {\n\t\t\tif (this.container) {\n\t\t\t\tpreloader.remove();\n\t\t\t\tconst {width} = this.container.getBoundingClientRect();\n\t\t\t\tconst aspect = 1.541902573131066;\n\t\t\t\tconst height = width / aspect;\n\t\t\t\tconst ratio = Math.min(window.devicePixelRatio, 2);\n\t\t\t\tthis.canvas.width = width * ratio;\n\t\t\t\tthis.canvas.height = height * ratio;\n\t\t\t\tthis.context = this.canvas.getContext('2d');\n\t\t\t\tthis.camera.aspect = width / height;\n\t\t\t\tthis.camera.updateProjectionMatrix();\n\t\t\t\tthis.render();\n\t\t\t}\n\t\t};\n\t\t\n\t\tthis.sphere = new Group();\n\t\tthis.sphere.name = 'Vantage';\n\t\tconst vantageURL = isBetaResourcesFolder() ?\n\t\t\tthis.vantage.url.replace(/vantages3D/g,'vantages3D_beta') :\n\t\t\tthis.vantage.url;\n\t\tconst url = `${this.params.url}/${vantageURL}/`;\n\t\t\n\t\tthis.params.parts.forEach(name => {\n\t\t\tlet mesh;\n\t\t\tlet modifiedUrl;\n\t\t\t\n\t\t\tswitch (name) {\n\t\t\t\tcase 'nz':\n\t\t\t\t\tmesh = generateRegion([0,0,-1],[0,1,0],[ 1,0,0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'pz':\n\t\t\t\t\tmesh = generateRegion([0,0, 1],[0,1,0],[-1,0,0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'px':\n\t\t\t\t\tmesh = generateRegion([ 1,0,0],[0,1,0],[0,0, 1]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'nx':\n\t\t\t\t\tmesh = generateRegion([-1,0,0],[0,1,0],[0,0,-1]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'py':\n\t\t\t\t\tmesh = generateRegion([0,0, 1],[1,0,0],[0, 1,0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ny':\n\t\t\t\t\tmesh = generateRegion([0,0,-1],[1,0,0],[0,-1,0]);\n\t\t\t\t\tmesh.rotation.y = Math.PI;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tmodifiedUrl = url + name + '.jpg';\n\t\t\tmodifiedUrl = Cloudflare.resize(modifiedUrl,{width: 1024});\n\t\t\tconst texture = textureLoader.load(modifiedUrl);\n\t\t\ttexture.wrapS = ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = ClampToEdgeWrapping;\n\t\t\tmesh.material.uniforms.map1.value = texture;\n\t\t\tmesh.name = name;\n\t\t\tthis.sphere.position.copy(this.params.from);\n\t\t\tthis.sphere.add(mesh);\n\t\t});\n\t\t\n\t\tthis.scene.add(this.sphere);\n\t}\n\t\n\trender() {\n\t\tthis.compass.rotate();\n\t\tthis.renderer.render(this.scene,this.camera);\n\t\tthis.context.drawImage(this.renderer.domElement,0,0);\n\t}\n\t\n\tdestroy() {\n\t\tthis.sphere.removeFromParent();\n\t\tthis.sphere.traverse(el => {\n\t\t\tif (el.isMesh) {\n\t\t\t\tel.geometry.dispose();\n\t\t\t\tel.material.uniforms.map1.value.dispose();\n\t\t\t\tel.material.dispose();\n\t\t\t}\n\t\t});\n\t\tthis.controls.dispose();\n\t\tthis.controls = null;\n\t\tthis.canvas.remove();\n\t\tthis.canvas = null;\n\t\tthis.context = null;\n\t\tthis.renderer = null;\n\t\tthis.camera = null;\n\t\tthis.container = null;\n\t\tthis.scene = null;\n\t\tthis.sphere = null;\n\t\tthis.params = null;\n\t\tthis.vantage = null;\n\t}\n\t\n}\n\n\nfunction QAErrorMessageElement (parent,message) {\n\tnew BaseElement('span')\n\t\t.addClass('qa__floor-validator__message')\n\t\t.innerHtml(message)\n\t\t.appendTo(parent);\n}\n","'use strict';\n\n\nimport { Report } from './QAReport';\nimport { Objects } from '../threejs/Objects/Objects';\nimport { Buildings } from '../../settings';\n\nexport class ObjectsQA extends Report{\n\tconstructor () {\n\t\tsuper('Viewpoints');\n\t}\n\t\n\tvalidate() {\n\t\tif (this.jsonReport.length) {\n\t\t\tthis.showReport();\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tconst languages = config.languages;\n\t\t\n\t\tObjects.elements.forEach(scope => {\n\t\t\tswitch (scope.objectType) {\n\t\t\t\tcase 'Text':\n\t\t\t\t\tlanguages.forEach(lang => {\n\t\t\t\t\t\tconst value = scope.translations[lang];\n\t\t\t\t\t\tif (!value) {\n\t\t\t\t\t\t\tthis.addError(scope.translations.en,`Invalid translation`,lang);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'CSSLabel':\n\t\t\t\t\tlanguages.forEach(lang => {\n\t\t\t\t\t\tconst value = scope.data.title[lang];\n\t\t\t\t\t\tif (!value) {\n\t\t\t\t\t\t\tthis.addError(scope.data.title.en,`Invalid translation`,lang);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t\t\n\t\tBuildings.getBuildingsArray().forEach(building => {\n\t\t\tbuilding.cylinderLabels.forEach(label => {\n\t\t\t\tlanguages.forEach(lang => {\n\t\t\t\t\tconst value = label.data.title[lang];\n\t\t\t\t\tif (!value) {\n\t\t\t\t\t\tthis.addError(label.data.title.en,`Invalid translation`,lang);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t\t\n\t\tthis.normalize();\n\t\tthis.showReport();\n\t}\n\t\n\tnormalize () {\n\t\tif (!this.log.length) {\n\t\t\tthis.jsonReport.push('OK');\n\t\t} else {\n\t\t\tthis.log.forEach(errorData => this.jsonReport.push(`Label ${errorData.apt}: ${errorData.message}. Expected translation for ${errorData.expected} language.`));\n\t\t}\n\t}\n\t\n}\n","'use strict';\n\n\nimport { Report } from './QAReport';\nimport { threeJsVariables } from '../../settings';\nimport { MathUtils } from 'three';\n\nexport class PoiQA extends Report{\n\tconstructor () {\n\t\tsuper('Poi');\n\t\tthis.message = 'Invalid poi rotation';\n\t\tthis.compass = config.threejs.compass.correction;\n\t}\n\n\tvalidate() {\n\t\tif (this.jsonReport.length) {\n\t\t\tthis.showReport();\n\t\t\treturn;\n\t\t}\n\n\t\tnew Promise(resolve => {\n\t\t\tlet poiGroup;\n\t\t\tconst interval = setInterval(() => {\n\t\t\t\tpoiGroup = threeJsVariables.scene.getObjectByName('Poi group');\n\t\t\t\tif (poiGroup) {\n\t\t\t\t\tclearInterval(interval);\n\t\t\t\t\tresolve(poiGroup)\n\t\t\t\t}\n\t\t\t},200)\n\t\t}).then(poiGroup => {\n\t\t\tconst currentRotation = MathUtils.radToDeg(poiGroup.rotation.y);\n\t\t\tconst expectedRotation = MathUtils.radToDeg(this.compass - Math.PI / 2);\n\t\t\tif (currentRotation !== expectedRotation) {\n\t\t\t\tthis.addError(currentRotation,`Current rotation ${currentRotation} deg. Expected rotation ${expectedRotation} deg.`,expectedRotation);\n\t\t\t}\n\n\t\t\tconst poiData = config.poiData.filter(poi => poi.orbit === 1);\n\t\t\tif (poiData.length) {\n\t\t\t\tconst moreThan400Meters = poiData.filter(poi => poi.distance > 400);\n\t\t\t\tif (moreThan400Meters.length) {\n\t\t\t\t\tmoreThan400Meters.forEach(poi => {\n\t\t\t\t\t\tconst name = poi.name.find(names => names.lang === 'en') || {value: poi.id};\n\t\t\t\t\t\tthis.addError(poi,`Distance to point \"${name.value}\" more than 400m.`,'<= 400')\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.normalize();\n\t\t\tthis.showReport();\n\t\t});\n\t}\n\n\tnormalize () {\n\t\tif (!this.log.length) {\n\t\t\tthis.jsonReport.push('OK');\n\t\t} else {\n\t\t\tthis.log.forEach(errorData => this.jsonReport.push(errorData.message));\n\t\t}\n\t}\n\n}\n","'use strict';\n\n\nimport { Report } from './QAReport';\nimport { PublicLayers } from '../components/publicLayers/PublicLayers';\nimport { Environment } from '../components/Environment/Environment';\n\nexport class QAPublicLayers extends Report{\n\tconstructor () {\n\t\tsuper('Public layers');\n\t\t\n\t}\n\t\n\tvalidate() {\n\t\tif (this.jsonReport.length) {\n\t\t\tthis.showReport();\n\t\t\treturn;\n\t\t}\n\t\tconst checkLayers = ['highway','education','leisure','parks','railway','fun'];\n\t\t\n\t\tconst scope = this;\n\t\t\n\t\tfunction checkEnvironment (env) {\n\t\t\tconst id = env.type ? env.type : env.id;\n\t\t\tconst type = id.toLowerCase();\n\t\t\tif (checkLayers.includes(type)) {\n\t\t\t\tconst data = env.hasOwnProperty('data') ? env.data : env.objects;\n\t\t\t\tif (data && !data.length) {\n\t\t\t\t\tscope.addError(env,`${id} - is empty.`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (Environment.fromBundle()) {\n\t\t\tnew Promise(resolve => {\n\t\t\t\tconst awaitInterval = setInterval(() => {\n\t\t\t\t\tif (Environment.scope?.bundleLoaded) {\n\t\t\t\t\t\tclearInterval(awaitInterval);\n\t\t\t\t\t\tresolve(Environment.scope.environments);\n\t\t\t\t\t}\n\t\t\t\t},200);\n\t\t\t})\n\t\t\t\t.then(environments => {\n\t\t\t\t\tObject.values(environments).forEach(env => checkEnvironment(env));\n\t\t\t\t\tthis.normalize();\n\t\t\t\t\tthis.showReport();\n\t\t\t\t});\n\t\t} else if (PublicLayers.scope) {\n\t\t\tnew Promise(resolve => {\n\t\t\t\tconst awaitInterval = setInterval(() => {\n\t\t\t\t\tif (PublicLayers.layerScopes.length) {\n\t\t\t\t\t\tclearInterval(awaitInterval);\n\t\t\t\t\t\tresolve(PublicLayers.layerScopes);\n\t\t\t\t\t}\n\t\t\t\t}, 200);\n\t\t\t}).then(environments => {\n\t\t\t\tenvironments.forEach(env => checkEnvironment(env));\n\t\t\t\tthis.normalize();\n\t\t\t\tthis.showReport();\n\t\t\t});\n\t\t}\n\t}\n\t\n\tnormalize () {\n\t\tif (!this.log.length) {\n\t\t\tthis.jsonReport.push('OK');\n\t\t} else {\n\t\t\tthis.log.forEach(errorData => this.jsonReport.push(errorData.message));\n\t\t}\n\t}\n\t\n}\n","'use strict';\n\nimport { Buildings } from '../../settings';\nimport { PopUp } from '../interfaces/pages/PopUp';\nimport { BaseElement } from '../interfaces/BaseElement';\nimport Notiflix from 'notiflix';\n\nexport class Report {\n\tconstructor (title) {\n\t\tthis.log = [];\n\t\tthis.message = '';\n\t\tthis.title = title;\n\t\tthis.jsonReport = [];\n\t}\n\t\n\taddError(apt,message = this.message,expected) {\n\t\tthis.log.push({\n\t\t\tmessage: message ? message : this.message,\n\t\t\tapt,\n\t\t\texpected\n\t\t});\n\t}\n\t\n\tshowReport() {\n\t\tconst popUp = new PopUp({\n\t\t\tid: 'QA',\n\t\t\tneedsCloseBtn: true,\n\t\t\tdestroy: true\n\t\t});\n\t\tpopUp.setTitle(this.title);\n\t\t\n\t\tconst container = new BaseElement()\n\t\t\t.addClass('qa-report__container')\n\t\t\t.DOMElement;\n\t\t\n\t\tconst area = new BaseElement('textarea')\n\t\t\t.addAttribute('cols',50)\n\t\t\t.addAttribute('rows',10)\n\t\t\t.addStyle('width','800px')\n\t\t\t.addStyle('height','400px')\n\t\t\t.appendTo(container)\n\t\t\t.DOMElement;\n\t\tarea.value = JSON.stringify(this.jsonReport,undefined,4);\n\t\t\n\t\tnew BaseElement('button')\n\t\t\t.addClass('button')\n\t\t\t.innerHtml('Copy to clipboard')\n\t\t\t.event('click',() => {\n\t\t\t\twindow.navigator.clipboard.writeText(area.value)\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\tNotiflix.Notify.success(`copied`);\n\t\t\t\t\t});\n\t\t\t})\n\t\t\t.appendTo(container);\n\t\t\n\t\tpopUp.setContent(container);\n\t\tpopUp.show();\n\t}\n\t\n\tnormalize(apt) {\n\t\tconst buildingId = apt.buildingEngineId;\n\t\tconst building = Buildings.getBuilding(buildingId);\n\t\tconst towerName = building.info.labelName;\n\t\tconst floor = apt.floorNum;\n\t\tconst aptNumber = apt.propNum;\n\t\t\n\t\treturn `Building: ${towerName}, Floor: ${floor}, Apt.№ ${aptNumber}`;\n\t}\n}\n","'use strict';\n\n\nimport { Report } from './QAReport';\nimport { resourcesFolder } from '../../settings';\nimport { Cloudflare } from '../api/Cloudflare';\n\nexport class QARotor extends Report{\n\tconstructor () {\n\t\tsuper('Rotor');\n\t}\n\t\n\tasync validate() {\n\t\tif (this.jsonReport.length) {\n\t\t\tthis.showReport();\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tconst response = await fetch(`${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/litemod/rotor/rotor.json?v=${Cloudflare.version}`);\n\t\t\n\t\tif (response.status !== 200) {\n\t\t\tthis.addError('Rotor: rotor.json','Not found');\n\t\t}\n\t\t\n\t\tthis.normalize();\n\t\tthis.showReport();\n\t}\n\t\n\tnormalize () {\n\t\tif (!this.log.length) {\n\t\t\tthis.jsonReport.push('OK');\n\t\t} else {\n\t\t\tthis.log.forEach(errorData => {\n\t\t\t\tthis.jsonReport.push(`${errorData.apt} - ${errorData.message}`);\n\t\t\t});\n\t\t}\n\t}\n\t\n}\n","'use strict';\n\n\nimport { Report } from './QAReport';\nimport { settingsData, threeJsVariables } from '../../settings';\nimport { QAFloorValidator } from './QAFloorValidator';\nimport { LinearSRGBColorSpace, WebGLRenderer } from 'three';\n\nexport class VantagesQA extends Report{\n\tconstructor () {\n\t\tsuper('Vantages');\n\t\t\n\t\tthis.crm = settingsData.allCrmData;\n\t\tthis.bundleVantages = threeJsVariables.bundleConfig.vantage;\n\t\tthis.floorValidator = null;\n\t\tthis.renderer = new WebGLRenderer({\n\t\t\tantialias: false,\n\t\t\tautoClear: true,\n\t\t\tstencil: false,\n\t\t\tdepth: false,\n\t\t});\n\t\tthis.renderer.shadowMap.enabled = false;\n\t\tthis.renderer.sortObjects = false;\n\t\tthis.renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));\n\t\tthis.renderer.setSize(334,216);\n\t\tthis.renderer.outputColorSpace = LinearSRGBColorSpace;\n\t}\n\t\n\tinitFloorValidator() {\n\t\tthis.removeFloorValidator();\n\t\tthis.floorValidator = new QAFloorValidator(this.renderer);\n\t\tthis.floorValidator.build();\n\t}\n\t\n\tremoveFloorValidator() {\n\t\tif (this.floorValidator) {\n\t\t\tthis.floorValidator.save();\n\t\t\tthis.floorValidator.destroy();\n\t\t\tthis.floorValidator = null;\n\t\t}\n\t}\n\t\n\tvalidate() {\n\t\tthis.jsonReport = [];\n\t\tconst buildings = [...new Set(this.crm.map(apt => apt.buildingEngineId))];\n\t\tbuildings.forEach(buildingId => {\n\t\t\tconst bundleVantages = this.bundleVantages[buildingId];\n\t\t\tif (!bundleVantages) {\n\t\t\t\tthis.addError(buildingId,`No available photographic vantages.`,null);\n\t\t\t}\n\t\t\t\n\t\t\tconst apartments = this.crm.filter(apt => apt.buildingEngineId === buildingId);\n\t\t\tapartments.forEach(apt => {\n\t\t\t\tif (apt.assets.vantage.length === 0) {\n\t\t\t\t\tconst photoVantages = bundleVantages?.find(vApt => vApt.name === apt.engineId);\n\t\t\t\t\tif (!photoVantages || (photoVantages && !photoVantages.url)) {\n\t\t\t\t\t\tthis.addError(apt,`empty vantage URL.`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\t\n\t\tconst ls = localStorage.getItem('floorValidator');\n\t\tif (ls) {\n\t\t\tconst data = JSON.parse(ls);\n\t\t\tObject.entries(data).forEach(([building,floors]) => {\n\t\t\t\tObject.values(floors).forEach(floor => {\n\t\t\t\t\tconst invalid = floor.filter(apt => apt.valid === false);\n\t\t\t\t\tinvalid.forEach(data => {\n\t\t\t\t\t\tthis.addError(`Building: ${building}, Apt: ${data.apt}`,data.message);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\t\n\t\tthis.normalize();\n\t\tthis.showReport();\n\t}\n\t\n\tnormalize () {\n\t\tif (!this.log.length) {\n\t\t\tthis.jsonReport.push('OK');\n\t\t} else {\n\t\t\tthis.log.forEach(errorData => {\n\t\t\t\tif (typeof errorData.apt === 'string') {\n\t\t\t\t\tthis.jsonReport.push(`${errorData.apt} - ${errorData.message}`);\n\t\t\t\t} else {\n\t\t\t\t\tconst normalizeData = super.normalize(errorData.apt);\n\t\t\t\t\tthis.jsonReport.push(`${normalizeData} - ${errorData.message}`);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\t\n}\n","'use strict';\n\nimport { assignDeep, GSAPAnimationMixer, settingsData, threeJsVariables } from '../../settings';\nimport { Box3, Box3Helper, Vector3 } from 'three';\nimport { ViewMode } from '../../common';\nimport gsap from 'gsap';\n\nconst DEFAULT_PARAMS = {\n active: false,\n scalar: 0\n};\n\nexport class CameraCollision {\n static scope = null;\n static prevent = false;\n\n constructor () {\n this.params = assignDeep(DEFAULT_PARAMS,config.threejs.cameraCollision || {});\n this.camera = threeJsVariables.perspectiveCamera;\n this.orbitControls = threeJsVariables.orbitControls;\n this.box = new Box3();\n this.isBounce = false;\n this.position = new Vector3();\n this.target = new Vector3();\n CameraCollision.scope = this;\n }\n\n checkCollision() {\n if (!this.params.active) return;\n if (this.box.containsPoint(this.camera.position) && !this.isBounce) {\n this.box.clampPoint(this.camera.position,this.position);\n this.bounce();\n }\n }\n\n bounce() {\n this.isBounce = true;\n this.target.subVectors(this.position,this.orbitControls.target).normalize().setLength(5).add(this.position);\n this.camera.position.copy(this.target);\n this.orbitControls.update();\n this.isBounce = false;\n\n // gsap.to(this.camera.position,{\n // x: this.target.x,\n // y: this.target.y,\n // z: this.target.z,\n // ease: GSAPAnimationMixer.ease,\n // duration: 0.5,\n // onComplete: () => this.isBounce = false\n // });\n\n }\n\n addObject(object) {\n const box = new Box3();\n box.setFromObject(object,true).expandByScalar(this.params.scalar);\n this.box.union(box);\n }\n\n static checkCollision() {\n if (CameraCollision.scope && settingsData.activeViewMode === ViewMode.Orbit && !CameraCollision.prevent) {\n CameraCollision.scope.checkCollision();\n }\n }\n\n}\n","'use strict';\n\n\nimport {\n BoxGeometry,\n MeshPhongMaterial,\n Mesh,\n PlaneGeometry,\n DoubleSide,\n Vector2,\n Vector3,\n Box3,\n TextureLoader, MeshStandardMaterial, Color, LinearSRGBColorSpace, ClampToEdgeWrapping, Clock, Plane,\n RepeatWrapping,\n EquirectangularReflectionMapping\n} from 'three';\nimport {\n World,\n DistanceConstraint,\n Vec3,\n Sphere,\n Body,\n Box\n} from 'cannon-es';\nimport { assignDeep, Buildings, isMobile, settingsData, threeJsVariables } from '../../../settings';\nimport { getCSSVarValue } from '../../../functions';\nimport { addBuildingsIntersections, poiIntersection } from '../../poi/poiCss';\nimport { SelectedObjectType } from '../../../common';\nimport { updateShadowMap } from '../lights';\nimport { BmbyMode } from '../../mode/BmbyMode';\n\n\nconst DEFAULT_SETTINGS = {\n clothSegments: 26,\n coverAllBuildings: true,\n buildingsList: [],\n boxMarginTop: 0.10,\n boxMarginSides: 0.02,\n frontSideCoverage: 0.5,\n laterialSideCoverage: 0.25,\n logoMargin: 0.05,\n showBoundingBox: false\n};\n\n\nexport class ClothSimulation {\n\n constructor() {\n this.params = assignDeep(DEFAULT_SETTINGS,config.features.cloth || {});\n this.active = (config.crmProjectSettings?.general?.status === 'delivery' || this.params?.active) && !isMobile && !BmbyMode.active;\n if (!this.active) return;\n this.speedUpCycles = 130;\n this.removed = false;\n this.animationEnabled = false;\n this.hovered = false;\n // vars\n this.clothParticles = [];\n this.constraints = [];\n this.clothMesh = null;\n this.clothGeometry = null;\n this.clothMaterial = null;\n this.clock = new Clock();\n this.delta = 0;\n this.elapsedTime = 0;\n this.color = null;\n // world vars\n this.world = new World();\n this.world.gravity.set(0, -110, 0);\n this.world.solver.iterations = 15; // 10 - 20\n this.indexGrab = new Vector2();\n this.vectorGrab = new Vec3(0.15, -2, 0.15);\n // box vars\n this.boxSize = new Vector3();\n this.boxCenter = new Vector3();\n // cloth vars\n this.clothSegmentsX = null;\n this.clothSegmentsZ = null;\n this.particleRadius = 0.4; // 0 - 0.5\n this.clothMass = 100;\n this.clothAngle = Math.PI / 180 * 0;\n this.clothLength = null;\n this.clothWidth = null;\n this.distance = null;\n }\n\n setup() {\n if (!this.active) return;\n this.#processData();\n this.#setupBox();\n this.#setupCloth();\n this.preSimulate();\n this.animate();\n }\n\n #processData() {\n const buildingsArray = Buildings.getBuildingsArray();\n const boundingBox = new Box3();\n buildingsArray.forEach(building => {\n if (!this.params.coverAllBuildings && !this.params.buildingsList.includes(building.name))\n return;\n\n const mesh = building.instances[0];\n mesh.updateMatrixWorld(true);\n const bBox = new Box3().setFromObject(mesh);\n boundingBox.union(bBox);\n });\n\n boundingBox.getSize(this.boxSize);\n boundingBox.getCenter(this.boxCenter);\n this.clothLength = this.boxSize.x + (this.boxCenter.y * 0.5 + this.boxSize.y) * this.params.laterialSideCoverage * 2;\n this.clothWidth = this.boxSize.z + (this.boxCenter.y * 0.5 + this.boxSize.y) * this.params.frontSideCoverage * 2;\n if (this.clothLength > this.clothWidth) {\n this.clothSegmentsX = this.params.clothSegments;\n this.clothSegmentsZ = Math.floor(this.clothSegmentsX * this.clothWidth / this.clothLength);\n }else {\n this.clothSegmentsZ = this.params.clothSegments;\n this.clothSegmentsX = Math.floor(this.clothSegmentsZ / this.clothWidth * this.clothLength);\n }\n this.indexGrab = new Vector2(0, this.clothSegmentsZ);\n }\n\n #setupBox() {\n if (this.params.showBoundingBox) {\n const boxGeometry = new BoxGeometry(this.boxSize.x * 1.01, this.boxSize.y * 1.01, this.boxSize.z * 1.01);\n const boxMaterial = new MeshPhongMaterial({\n color: 0xfa8e05,\n transparent: true,\n opacity: 0.6\n });\n const boxMesh = new Mesh(boxGeometry, boxMaterial);\n boxMesh.position.copy(this.boxCenter);\n threeJsVariables.scene.add(boxMesh);\n settingsData.objects_to_intersection.push(boxMesh);\n }\n\n const boxBody = new Body({\n mass: 0,\n position: new Vec3(0, 0, 0)\n });\n boxBody.addShape(new Box(new Vec3(\n this.boxSize.x * (0.5 + this.params.boxMarginSides),\n this.boxSize.y * (0.5),\n this.boxSize.z * (0.5 + this.params.boxMarginSides)\n )));\n this.world.addBody(boxBody);\n }\n\n #setupCloth() {\n this.clothGeometry = new PlaneGeometry(this.clothWidth, this.clothLength, this.clothSegmentsZ, this.clothSegmentsX);\n\n const loader = new TextureLoader();\n const cloth = this;\n const logo = loader.load(config.general.logo, (texture) => {\n const aspectRatio = logo.image.width / logo.image.height;\n logo.wrapS = ClampToEdgeWrapping;\n logo.wrapT = ClampToEdgeWrapping;\n logo.rotation = -Math.PI / 2;\n\n const maxWidth = cloth.boxSize.x / cloth.clothLength;\n const maxHeight = (1 - cloth.boxSize.z / cloth.clothWidth) / 2;\n\n let width = maxWidth * (1 - this.params.logoMargin * 2);\n let height = maxHeight * (1 - this.params.logoMargin * 2);\n\n const newAspectRatio = width / height * cloth.clothLength / cloth.clothWidth;\n\n if (newAspectRatio > aspectRatio) {\n width *= aspectRatio / newAspectRatio;\n }else {\n height *= newAspectRatio / aspectRatio;\n }\n\n logo.repeat.set(1 / width, 1 / height);\n logo.offset.set(0.5 + 0.5 / width, 0.5 - 0.5 * maxHeight / height);\n });\n \n function updateShader (shader) {\n shader.fragmentShader = shader.fragmentShader.replace('#include ',[\n 'vec4 sampledDiffuseColor = texture2D( map, vMapUv );',\n 'diffuseColor = mix(diffuseColor * 1.2,sampledDiffuseColor,sampledDiffuseColor.a);'\n ].join('\\n'));\n }\n\n const aomap = loader.load('https://dreamsimages.bmby.com/DreamsGeneralStorage/textures/clothmaps/Velvet_Mask_Bump_1K.jpg');\n const lightmap = loader.load('https://dreamsimages.bmby.com/DreamsGeneralStorage/textures/clothmaps/Velvet_Mask_Bump_1K_con.jpg');\n const normalmap = loader.load('https://dreamsimages.bmby.com/DreamsGeneralStorage/textures/clothmaps/Untitled material_Normal.jpg');\n const roughnessmap = loader.load('https://dreamsimages.bmby.com/DreamsGeneralStorage/textures/clothmaps/ullnchdew_1K_Roughness.jpg');\n const envmap = loader.load('https://dreamsimages.bmby.com/DreamsGeneralStorage/textures/clothmaps/Flip_center 40m mini_v6.jpg');\n normalmap.wrapS = RepeatWrapping;\n normalmap.wrapT = RepeatWrapping;\n normalmap.repeat.set(1.5,1.5);\n envmap.mapping = EquirectangularReflectionMapping;\n\n const clothClippingPlane = new Plane(new Vector3(0, 1, 0), 0);\n this.clothMaterial = new MeshStandardMaterial({\n aoMap: aomap,\n aoMapIntensity: 0.2,\n lightMap: lightmap,\n lightMapIntensity: 0.3,\n normalMap: normalmap,\n normalScale: new Vector2(4,4),\n roughness: 1.00,\n roughnessMap: roughnessmap,\n side: DoubleSide,\n envMap: envmap,\n envMapIntensity: 1.0,\n map: logo,\n clippingPlanes: [clothClippingPlane],\n //color: new Color().setStyle('#9b2d30',LinearSRGBColorSpace),\n flatShading: true\n });\n if (this.color) this.clothMaterial.color = this.color;\n this.clothMaterial.customPrograms = [updateShader];\n this.clothMesh = new Mesh(this.clothGeometry, this.clothMaterial);\n this.clothMesh.scale.set(-1,1,1);\n this.clothMesh.position.set(this.boxCenter.x, this.boxCenter.y + this.boxSize.y * (0.01 + this.params.boxMarginTop), this.boxCenter.z);\n this.clothMesh.castShadow = true;\n this.clothMesh.receiveShadow = true;\n this.clothMesh.name = SelectedObjectType.Cloth;\n this.clothMesh.userData.type = SelectedObjectType.Cloth;\n threeJsVariables.scene.add(this.clothMesh);\n addBuildingsIntersections(this.clothMesh);\n settingsData.objects_to_intersection.push(this.clothMesh);\n\n this.#createClothPhysics();\n }\n\n updateColor() {\n if (!this.active) return;\n this.color = new Color().setStyle(getCSSVarValue('--menuBg'),LinearSRGBColorSpace);\n if (this.clothMaterial) this.clothMaterial.color = this.color;\n }\n\n #createClothPhysics() {\n this.distance = this.clothLength / this.clothSegmentsX;\n const particleRadius = this.distance * this.particleRadius;\n\n // create particles\n for (let i = 0; i <= this.clothSegmentsX; i++) {\n this.clothParticles.push([]);\n for (let j = 0; j <= this.clothSegmentsZ; j++) {\n // setup cloth rectangle coordinates\n let x = (i / this.clothSegmentsX - 0.5) * this.clothLength;\n let y = this.boxCenter.y + this.boxSize.y * (0.01 + this.params.boxMarginTop);\n let z = (j / this.clothSegmentsZ - 0.5) * this.clothWidth;\n // rotate particles\n // const newx = (x - this.boxCenter.x) * Math.cos(this.clothAngle) -\n // (z - this.boxCenter.z) * Math.sin(this.clothAngle) +\n // this.boxCenter.x;\n // const newz = (x - this.boxCenter.x) * Math.sin(this.clothAngle) +\n // (z - this.boxCenter.z) * Math.cos(this.clothAngle) +\n // this.boxCenter.z;\n // x = newx;\n // z = newz;\n const particle = new Body({\n mass: this.clothMass / (this.clothSegmentsX * this.clothSegmentsZ),\n position: new Vec3(x, y, z),\n shape: new Sphere(particleRadius)\n });\n if (i == this.indexGrab.x && j == this.indexGrab.y) {\n this.particleGrab = particle;\n }\n this.world.addBody(particle);\n this.clothParticles[i].push(particle);\n }\n }\n\n this.#createConstraints();\n }\n\n #createConstraints() {\n for (let i = 0; i <= this.clothSegmentsX; i++) {\n for (let j = 0; j <= this.clothSegmentsZ; j++) {\n const nextI = (i + 1) % (this.clothSegmentsX + 1);\n const nextJ = (j + 1) % (this.clothSegmentsZ + 1);\n\n const p1 = this.clothParticles[i][j];\n const p2 = this.clothParticles[nextI][j];\n const p3 = this.clothParticles[i][nextJ];\n const p4 = this.clothParticles[nextI][nextJ];\n\n // add distance constraints\n if (i < this.clothSegmentsX)\n connect.call(this, p1, p2, this.distance);\n if (j < this.clothSegmentsZ)\n connect.call(this, p1, p3, this.distance);\n\n // add bending constraints\n if (i < this.clothSegmentsX - 1 && j < this.clothSegmentsZ - 1) {\n if ( (i - this.clothSegmentsX * 0.5) * (j - this.clothSegmentsZ * 0.5) < 0 )\n connect.call(this, p1, p4, this.distance * Math.sqrt(2));\n else\n connect.call(this, p2, p3, this.distance * Math.sqrt(2));\n }\n }\n }\n \n function connect(p1, p2, dist) {\n const c = new DistanceConstraint(p1, p2, dist);\n this.world.addConstraint(c);\n this.constraints.push(c);\n }\n }\n\n disposeCloth() {\n if (!this.animationEnabled)\n settingsData.objects_to_intersection = settingsData.objects_to_intersection.filter(mesh => mesh.userData.type !== SelectedObjectType.Cloth);\n this.clothMesh.geometry.dispose();\n this.clothMesh.material.dispose();\n threeJsVariables.scene.remove(this.clothMesh);\n this.clothParticles.forEach(row => row.forEach(particle => this.world.removeBody(particle)));\n this.constraints.forEach(constraint => this.world.removeConstraint(constraint));\n // dispose this.world cannon\n this.removed = true;\n poiIntersection();\n }\n\n removeClothIfBelowYZero() {\n if (this.clothParticles.every(row => row.every(particle => particle.position.y < -this.boxSize.y * 0.5))) {\n this.disposeCloth();\n }\n }\n\n updateClothMesh() {\n const positionAttribute = this.clothGeometry.attributes.position;\n for (let i = 0; i < this.clothParticles.length; i++) {\n for (let j = 0; j < this.clothParticles[i].length; j++) {\n const index = this.clothParticles[i].length * i + j;\n const position = this.clothParticles[i][j].position;\n positionAttribute.setXYZ(index, position.x, position.y, position.z);\n }\n }\n this.clothGeometry.attributes.position.needsUpdate = true;\n \n }\n\n removeCloth() {\n if (this.removed || !this.active)\n return new Promise(resolve => resolve());\n this.animationEnabled = true;\n settingsData.objects_to_intersection = settingsData.objects_to_intersection.filter(mesh => mesh.userData.type !== SelectedObjectType.Cloth);\n return new Promise(resolve => {\n const interval = setInterval(() => {\n if (this.removed) {\n clearInterval(interval);\n resolve();\n }\n }, 200);\n });\n }\n\n removeClothAnimation() {\n if (!this.animationEnabled) return;\n \n if (this.particleGrab.mass != 0) {\n this.particleGrab.mass = 0;\n this.particleGrab.updateMassProperties();\n }\n this.particleGrab.position.vadd(this.vectorGrab, this.particleGrab.position);\n }\n\n preSimulate() {\n for (let cycles = 0; cycles < this.speedUpCycles; cycles++) {\n this.world.step(1 / 30);\n }\n }\n\n animate() {\n this.delta = this.clock.getDelta();\n\t this.elapsedTime = this.clock.elapsedTime;\n\n this.world.step(clamp(this.delta, 1 / 60, 1 / 30));\n this.updateClothMesh();\n this.removeClothAnimation();\n this.removeClothIfBelowYZero();\n updateShadowMap();\n if (!this.removed)\n requestAnimationFrame(this.animate.bind(this));\n\n function clamp(value, min, max) {\n return Math.min( Math.max(min, value), max );\n }\n }\n\n}\n","'use strict';\n\n\nimport {CSS2DObject} from '../../../libs/CSS2DRenderer';\nimport {Box3, Vector3} from 'three';\nimport {BaseElement} from '../../interfaces/BaseElement';\nimport {\n threeJsVariables,\n GSAPAnimationMixer,\n Buildings,\n settingsData,\n projectMode,\n isMobile,\n} from '../../../settings';\nimport gsap from 'gsap';\nimport {getBuildingLabel} from \"../../components/building-switch/buildingLabels\";\nimport {ViewMode} from \"../../../common\";\nimport {enterToTheBuildingWithMaxAvailableApartments} from \"../../components/building-switch/building_switch\";\nimport {getCurrentCameraDistance} from \"../../controls/orbitControls\";\n\nclass CSS2DCluster extends CSS2DObject {\n constructor(element = document.createElement('div'), camera) {\n super(element);\n\n this.isCSS2DCluster = true;\n this.distance = 100;\n this.camera = camera;\n this.currentDistance = 0;\n this.update = true;\n this.preventUpdate = false;\n this._camera = new Vector3();\n this._position = new Vector3();\n }\n\n add(object) {\n object.userData._position = new Vector3().copy(object.position);\n super.add(object);\n this.updateClusterPosition();\n }\n\n updateClusterPosition() {\n const box = new Box3();\n this.children.forEach(object => {\n const vector = new Vector3().copy(object.userData._position);\n // vector.applyMatrix4(this.matrixWorld);\n box.expandByPoint(vector);\n });\n const center = new Vector3();\n const size = new Vector3();\n box.getCenter(center);\n box.getSize(size);\n\n this.position.set(center.x, center.y + size.y / 2, center.z);\n const offset = new Vector3().sub(this.position);\n this.children.forEach(object => {\n const position = new Vector3().copy(object.userData._position).add(offset);\n object.position.copy(position)\n });\n }\n\n split() {\n this.visible = false;\n this.children.forEach(object => object.visible = true);\n // if (this.children.length === 1) {\n // this.preventUpdate = true;\n // }\n }\n\n merge() {\n this.children.forEach(object => object.visible = false);\n this.visible = true;\n }\n\n tick() {\n if (!this.update || this.preventUpdate) return;\n\n this._camera.copy(this.camera.position).setY(0);\n this._position.copy(this.position).setY(0);\n this.currentDistance = this._position.distanceTo(this._camera);\n if (this.currentDistance > this.distance && !this.visible) {\n this.merge();\n }\n // if (this.currentDistance <= this.distance && this.visible) {\n // this.split();\n // } else if (this.currentDistance > this.distance && !this.visible) {\n // this.merge();\n // }\n }\n}\n\n\nexport class Cluster extends CSS2DCluster {\n static scope = [];\n static active = config.features.cluster?.active;\n static buildingLabelMode = config.features.cluster?.buildingLabelMode;\n\n constructor(lot) {\n\n const html = new BaseElement()\n .addClass('building-cluster')\n .addAttribute('id', lot);\n\n if (Cluster.buildingLabelMode) {\n const hideClickHere = config.threejs.label.hideClickHere;\n const colors = config.threejs.label.colors || {};\n const building = Buildings.getBuildingsArray()[0];\n const labelBGColor = Boolean(building.info.color)\n ? building.info.color\n : undefined;\n\n html\n .addClass('building-labels')\n .removeClass('building-cluster')\n .addAttribute('data-attribute', lot)\n .event('click', async (e) => {\n if (!e.target.closest('.building-labels_wrapper'))\n return;\n\n const wrapper = e.target.closest('.building-labels_wrapper');\n const clickedLabelDataName = wrapper.getAttribute('data-name');\n const clickedLabelBuilding = Buildings.getBuildingsArray().find(building => building.info.buildingLot === clickedLabelDataName);\n const clickedBuilding = Buildings.getBuilding(clickedLabelBuilding.name);\n await projectMode.Cylinder.enter(clickedBuilding);\n })\n\n if (building.info.buildingIcon.length) {\n html.innerHtml(`\n\t\t\t\t\t
\n\t\t\t\t\t\t
${getBuildingLabel(labelBGColor)}
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n \t\t`);\n\n } else {\n html.innerHtml(`\n\t\t\t\t\t
\n\t\t\t\t\t\t
${getBuildingLabel(labelBGColor)}
\n\t\t\t\t\t\t${lot}\n\t\t\t\t\t
`\n );\n }\n\n html.addClass('active');\n\n if (colors.text) {\n html.DOMElement.querySelector('.building-labels_wrapper').style = `color: ${colors.text}`;\n }\n\n const labelWrapper = html.DOMElement.querySelector('.building-labels_wrapper');\n html.event('pointerenter', () => {\n if (settingsData.activeViewMode === ViewMode.Orbit) {\n labelWrapper.classList.add('building__hovered');\n }\n });\n html.event('pointerleave', () => {\n labelWrapper.classList.remove('building__hovered');\n });\n // html.event('click', () => {\n // if (settingsData.activeViewMode === ViewMode.Orbit) {\n // enterToTheBuildingWithMaxAvailableApartments();\n // }\n // });\n }\n\n // new BaseElement('span')\n // \t.addClass('building-cluster__lot')\n // \t.innerHtml(lot)\n // \t.appendTo(html);\n\n !Cluster.buildingLabelMode && new BaseElement()\n .addClass('building-cluster__icon', 'icon-cluster_buildings')\n .appendTo(html.DOMElement);\n\n super(html.DOMElement, threeJsVariables.perspectiveCamera);\n\n const lots = config.features.cluster?.lots || {};\n this.lot = lot;\n const minDistance = isMobile ? config.threejs.orbitControls.orbit.mobile.portrait.min : config.threejs.orbitControls.orbit.desktop.min;\n this.distance = Cluster.buildingLabelMode ? 0 : lots[lot] ? lots[lot].distance : minDistance * 1.25;\n !Cluster.buildingLabelMode && this.element.addEventListener('click', this.fly.bind(this));\n this.name = 'cluster_' + this.lot;\n\n if (!Cluster.buildingLabelMode) {\n // this.countElement = new BaseElement('span')\n // .addClass('building-cluster__count')\n // .innerHtml(0)\n // .appendTo(html.DOMElement);\n\n this.lotElement = new BaseElement('span')\n .addClass('building-cluster__lot')\n .innerHtml(this.lot)\n .appendTo(html.DOMElement);\n }\n\n threeJsVariables.composer.addUpdatableElement(this);\n Cluster.scope.push(this);\n }\n\n updateCount() {\n if (Cluster.buildingLabelMode)\n return;\n\n //this.countElement.innerHtml(this.children.length);\n }\n\n fly() {\n const controls = threeJsVariables.orbitControls;\n const destination = new Vector3(this.position.x, controls.target.y, this.position.z);\n const direction = new Vector3().subVectors(this.camera.position, this.position).normalize().setLength(this.distance * 0.9).add(destination);\n \n const openedClusters = Cluster.scope.filter(scope => scope.visible === false);\n openedClusters.forEach(scope => scope.merge());\n\n const mixer = GSAPAnimationMixer.registerNewMixer('cluster');\n mixer.addCallback('onComplete',() => this.split());\n\n const target = gsap.to(controls.target, {\n x: destination.x,\n y: destination.y,\n z: destination.z,\n duration: GSAPAnimationMixer.duration,\n ease: GSAPAnimationMixer.ease\n });\n\n const position = gsap.to(this.camera.position, {\n x: direction.x,\n y: direction.y,\n z: direction.z,\n duration: GSAPAnimationMixer.duration,\n ease: GSAPAnimationMixer.ease\n });\n\n mixer.addAnimation(target);\n mixer.addAnimation(position);\n\n mixer.play();\n }\n\n static hide() {\n Cluster.scope.forEach(scope => {\n scope.update = false;\n scope.visible = false;\n });\n }\n\n static show() {\n Cluster.scope.forEach(scope => {\n scope.update = true;\n });\n }\n\n}\n","'use strict';\n\n\nimport { Environment } from '../../components/Environment/Environment';\nimport { BaseElement } from '../../interfaces/BaseElement';\nimport { Switch } from '../../interfaces/switchers/Switch';\nimport { OrbitDayAndNight } from '../../liveAnimations/DayNight/OrbitDayAndNight';\nimport gsap from 'gsap';\nimport { DisplayOptions } from '../../components/displayOptions/DisplayOptions';\n\nexport class DayNightButton {\n\n static scope = null;\n\n constructor(container) {\n this.switcher = new Switch(container);\n this.switcher.checked = true;\n this.switcherState = true;\n this.switcher.listener = this.#switcherHandler.bind(this);\n this.blockSwitcher = false;\n this.prevState = false;\n this.nightTime = null;\n this.toggler3D = null;\n\n new BaseElement()\n .addClass('icon-night')\n .appendTo(this.switcher.slider);\n new BaseElement()\n .addClass('icon-day')\n .appendTo(this.switcher.slider);\n\n DayNightButton.scope = this;\n\n let switcher3D;\n const interval = setInterval(() => {\n switcher3D = document.querySelector('.environment-toggle-switcher');\n this.toggler3D = switcher3D?.querySelector('.switch__checkbox');\n if (this.toggler3D) {\n clearInterval(interval);\n }\n }, 100);\n }\n\n async #switcherHandler(e) {\n // e.stopPropagation();\n if (this.blockSwitcher) {\n this.switcher.checkbox.checked = this.switcherState;\n return;\n }\n\n const switcherRealTime = document.querySelector('.current-time__toggle');\n const togglerRealTime = switcherRealTime?.querySelector('.switch__checkbox');\n\n if (togglerRealTime?.checked) {\n togglerRealTime.checked = false;\n OrbitDayAndNight.scope.range.removeClass('disabled');\n OrbitDayAndNight.scope.currentTimeToggle(false);\n OrbitDayAndNight.scope.showCurrentTimeBubble();\n }\n\n this.switcherState = e.target.checked;\n switch (this.switcherState) {\n case false: {\n this.prevState = this.toggler3D.checked;\n this.blockSwitcher = true;\n\n OrbitDayAndNight.turnOn();\n\n await new Promise(resolve => {\n const interval = setInterval(() => {\n if (OrbitDayAndNight.scope?.range) {\n clearInterval(interval);\n resolve();\n }\n }, 200);\n });\n\n const time = {value: Number(OrbitDayAndNight.scope.range.element.value)};\n\n gsap.to(time,{\n value: new Date(OrbitDayAndNight.scope.currentTime).setHours(23,59),\n duration: .7,\n onStart: () => {\n this.blockSwitcher = true;\n },\n onUpdate: () => {\n OrbitDayAndNight.scope.range.element.value = time.value\n OrbitDayAndNight.scope.updateTimesOfDay(time.value, true);\n },\n onComplete: () => {\n this.blockSwitcher = false;\n this.nightTime = Number(OrbitDayAndNight.scope.range.element.value);\n }\n });\n\n break;\n }\n case true: {\n \n if (DisplayOptions.isOpened) {\n const time = {value: Number(OrbitDayAndNight.scope.range.element.value)};\n gsap.to(time,{\n value: new Date(OrbitDayAndNight.scope.currentTime).setHours(12,0),\n duration: .7,\n onStart: () => {\n this.blockSwitcher = true;\n },\n onUpdate: () => {\n OrbitDayAndNight.scope.range.element.value = time.value;\n OrbitDayAndNight.scope.updateTimesOfDay(time.value, true);\n },\n onComplete: () => {\n this.blockSwitcher = false;\n if (!this.prevState && !config.features.dayNight.checked) {\n OrbitDayAndNight.turnOff();\n }\n }\n });\n } else {\n OrbitDayAndNight.turnOff();\n }\n break;\n }\n }\n }\n\n setSwitcherState(state, ignoreBlock = false) {\n if (state !== this.switcherState && (ignoreBlock || !this.blockSwitcher)) {\n this.switcher.checked = state;\n this.switcherState = state;\n }\n }\n\n resetToDefault() {\n if (!DayNightButton.canActivate()) return;\n const time = Number(OrbitDayAndNight.scope?.range?.element.value);\n if (!this.switcherState && time === this.nightTime) {\n const value = new Date(OrbitDayAndNight.scope.currentTime).setHours(12,0);\n OrbitDayAndNight.scope.range.element.value = value;\n OrbitDayAndNight.scope.updateTimesOfDay(value, true);\n }\n this.switcher.checked = true;\n this.switcherState = true;\n this.blockSwitcher = false;\n this.prevState = false;\n }\n\n updatePreviousState(action) {\n switch(action) {\n case 'show':\n this.prevState = true;\n break;\n }\n }\n\n static canActivate() {\n return Boolean(OrbitDayAndNight.isActive && Environment.scope?.config && Environment.scope?.bundleScene);\n }\n\n}\n","'use strict';\n\nimport gsap from 'gsap';\nimport { GSAPAnimationMixer } from '../../settings';\n\nexport class GSAPMixers {\n constructor () {\n this.mixers = {};\n this.defaultEase = 'Power2.easeInOut';\n this.defaultDuration = 1;\n }\n\n registerNewMixer(name,deleteAfterEnd = true) {\n this.mixers[name] = new GSAPMixer(name,deleteAfterEnd);\n return this.mixers[name];\n }\n\n addToMixer(name,animation,time = 0) {\n const mixer = this.getMixer(name);\n mixer && mixer.addAnimation(animation,time);\n }\n\n play(name) {\n const mixer = this.getMixer(name);\n mixer && mixer.play();\n }\n\n deleteMixer(name) {\n if (this.mixers[name]) {\n this.mixers[name].dispose();\n delete this.mixers[name];\n }\n }\n\n getMixer(name) {\n return this.mixers[name];\n }\n\n get ease() {\n return this.defaultEase;\n }\n\n get duration() {\n return this.defaultDuration;\n }\n\n set ease(value) {\n this.defaultEase = value;\n }\n\n set duration(value) {\n this.defaultDuration = value;\n }\n\n}\n\nclass GSAPMixer {\n constructor (name,deleteAfterEnd) {\n this.onStartCallback = [];\n this.onUpdateCallback = [];\n this.onCompleteCallback = [];\n this.animations = [];\n this.name = name;\n this.deleteAfterEnd = deleteAfterEnd;\n }\n\n addAnimation(animation,time = 0) {\n if (Array.isArray(this.animations)) {\n if (Array.isArray(animation)) {\n animation.forEach(animation => {\n this.animations.push({\n animation,\n time\n });\n })\n } else if (animation) {\n this.animations.push({\n animation,\n time\n });\n }\n }\n }\n\n addCallback(target,func) {\n switch (target) {\n case 'onStart':\n this.onStartCallback.push(func);\n break;\n case 'onUpdate':\n this.onUpdateCallback.push(func);\n break;\n case 'onComplete':\n this.onCompleteCallback.push(func);\n break;\n }\n }\n\n dispose() {\n this.onStartCallback = null;\n this.onUpdateCallback = null;\n this.onCompleteCallback = null;\n this.deleteAfterEnd = null;\n this.timeLine.kill();\n this.timeLine = null;\n }\n\n createTimeLine() {\n this.timeLine = gsap.timeline({\n paused: true,\n onStart: this.onStartCallback.length ? () => this.onStartCallback.forEach(func => func()) : null,\n onUpdate: this.onUpdateCallback.length ? () => this.onUpdateCallback.forEach(func => func()) : null,\n onComplete: () => {\n this.onCompleteCallback.forEach(func => func());\n this.deleteAfterEnd && GSAPAnimationMixer.deleteMixer(this.name);\n }\n });\n\n this.animations.forEach(obj => {\n this.timeLine.add(obj.animation,obj.time);\n });\n\n this.animations = null;\n\n return this.timeLine;\n }\n\n play() {\n if (!this.timeLine) {\n this.createTimeLine();\n }\n this.timeLine.play(0);\n }\n}\n","import { Mesh, IcosahedronGeometry, ShaderMaterial, DoubleSide, Color, LinearSRGBColorSpace } from 'three';\n\n/**\n * Ground projected env map adapted from @react-three/drei.\n * https://github.com/pmndrs/drei/blob/master/src/core/Environment.tsx\n */\n\n\nexport class GroundProjectedSkybox2 extends Mesh {\n\t\n\tconstructor( texture, options = {} ) {\n\t\t\n\t\tconst isCubeMap = texture.isCubeTexture;\n\t\t\n\t\tconst defines = [\n\t\t\tisCubeMap ? '#define ENVMAP_TYPE_CUBE' : ''\n\t\t];\n\t\t\n\t\tconst vertexShader = /* glsl */ `\n\t\t\tvarying vec3 vWorldPosition;\n\t\t\tvarying mat4 vModelMatrix;\n\t\t\tvarying float z;\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t\tvec4 worldPosition = ( modelMatrix * vec4( position, 1.0 ));\n\t\t\t\tvWorldPosition = worldPosition.xyz;\n\t\t\t\tvModelMatrix = modelMatrix;\n\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\tz = -gl_Position.z;\n\t\t\t}\n\t\t\t`;\n\t\tconst fragmentShader = defines.join( '\\n' ) + /* glsl */ `\n\n\t\t\t\tvarying vec3 vWorldPosition;\n\t\t\t\tvarying mat4 vModelMatrix;\n\n\t\t\t\tuniform float radius;\n\t\t\t\tuniform float height;\n\t\t\t\tuniform float angle;\n\t\t\t\tuniform float rotation;\n\t\t\t\t\n\t\t\t\tuniform float t;\n\t\t\t\tuniform vec3 fogColor;\n\t\t\t\tuniform float fogDensity;\n\t\t\t\tvarying float z;\n\t\t\t\tuniform vec3 clouds;\n\t\t\t\tuniform float cloudsScale;\n\t\t\t\tuniform float cloudsDark;\n\t\t\t\tuniform float cloudsLight;\n\t\t\t\tuniform float cloudsCover;\n\t\t\t\tuniform float cloudsAlpha;\n\t\t\t\tuniform float cloudsTint;\n\t\t\t\tuniform float horizon;\n\t\t\t\tuniform float uTime;\n\t\t\t\tuniform float uSpeed;\n\t\t\t\tuniform float cloudsActive;\n\n\t\t\t\t#ifdef ENVMAP_TYPE_CUBE\n\n\t\t\t\t\tuniform samplerCube map;\n\t\t\t\t\tuniform samplerCube map2;\n\n\t\t\t\t#else\n\n\t\t\t\t\tuniform sampler2D map;\n\t\t\t\t\tuniform sampler2D map2;\n\n\t\t\t\t#endif\n\n\t\t\t\t// From: https://www.shadertoy.com/view/4tsBD7\n\t\t\t\tfloat diskIntersectWithBackFaceCulling( vec3 ro, vec3 rd, vec3 c, vec3 n, float r )\n\t\t\t\t{\n\n\t\t\t\t\tfloat d = dot ( rd, n );\n\n\t\t\t\t\tif( d > 0.0 ) { return 1e6; }\n\n\t\t\t\t\tvec3 o = ro - c;\n\t\t\t\t\tfloat t = - dot( n, o ) / d;\n\t\t\t\t\tvec3 q = o + rd * t;\n\n\t\t\t\t\treturn ( dot( q, q ) < r * r ) ? t : 1e6;\n\n\t\t\t\t}\n\n\t\t\t\t// From: https://www.iquilezles.org/www/articles/intersectors/intersectors.htm\n\t\t\t\tfloat sphereIntersect( vec3 ro, vec3 rd, vec3 ce, float ra ) {\n\n\t\t\t\t\tvec3 oc = ro - ce;\n\t\t\t\t\tfloat b = dot( oc, rd );\n\t\t\t\t\tfloat c = dot( oc, oc ) - ra * ra;\n\t\t\t\t\tfloat h = b * b - c;\n\n\t\t\t\t\tif( h < 0.0 ) { return -1.0; }\n\n\t\t\t\t\th = sqrt( h );\n\n\t\t\t\t\treturn - b + h;\n\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvec3 project() {\n\n\t\t\t\t\tvec3 p = normalize( vWorldPosition);\n\t\t\t\t\tvec3 camPos = cameraPosition;\n\t\t\t\t\tfloat camDistance = distance(camPos.y,height) / 2.0;\n\t\t\t\t\tfloat sphereHeight = clamp(camDistance, height,height + camDistance);\n\t\t\t\t\tcamPos.y -= sphereHeight;\n\n\t\t\t\t\tfloat intersection = sphereIntersect( camPos, p, vec3( 0.0 ), radius );\n\t\t\t\t\tif( intersection > 0.0 ) {\n\n\t\t\t\t\t\tvec3 h = vec3( 0.0, -sphereHeight, 0.0 );\n\t\t\t\t\t\tfloat intersection2 = diskIntersectWithBackFaceCulling( camPos, p, h, vec3( 0.0, 1.0, 0.0 ), radius );\n\t\t\t\t\t\tp = ( camPos + min( intersection, intersection2 ) * p ) / radius;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tp = vec3( 0.0, 1.0, 0.0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn p;\n\n\t\t\t\t}\n\n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t\n\t\t\t\tconst mat2 m = mat2( 1.6, 1.2, -1.2, 1.6 );\n\t\t\t\tconst float pi = 3.141592653589793238462643383279502884197169;\n\t\t\t\t\n\t\t\t\tfloat hash(vec2 uv) {\n\t\t\t\t return fract(sin(dot(uv, vec2(124.0, 678.0))) * 987654.0);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfloat noise(vec2 uv) {\n\t\t\t\t vec2 i = floor(uv);\n\t\t\t\t vec2 f = fract(uv);\n\t\t\t\t vec2 b = smoothstep(0.0, 1.0, f);\n\t\t\t\t return 2.0 * mix(\n\t\t\t\t mix(hash(i), hash(i + vec2(1.0, 0.0)), b.x),\n\t\t\t\t mix(hash(i + vec2(0.0, 1.0)), hash(i + vec2(1.0, 1.0)), b.x), b.y) - 1.0;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfloat fbm(bool do_abs, vec2 n, float amp_init, float amp_step, float q, float base_octave) {\n\t\t\t\t //float time = uTime * 0.002 * 0.03 * base_octave;\n\t\t\t\t\n\t\t\t\t n *= vec2(1.0) * cloudsScale * base_octave;\n\t\t\t\t// n -= q - cloudsProgress;\n\t\t\t\t\n\t\t\t\t n -= q;\n\t\t\t\t\n\t\t\t\t float total = 0.0, amplitude = amp_init;\n\t\t\t\t for (int i = 0; i < 7; i++) {\n\t\t\t\t float v = noise(n) * amplitude;\n\t\t\t\t v = do_abs ? abs(v) : v;\n\t\t\t\t\n\t\t\t\t total += v;\n\t\t\t\t\n\t\t\t\t// n = m * n + cloudsProgress;\n\t\t\t\t n = m * n;\n\t\t\t\t amplitude *= amp_step;\n\t\t\t\t }\n\t\t\t\t return total;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfloat fbmManual(bool do_abs, vec2 n, float amp_init, float amp_step, float q, float base_octave) {\n\t\t\t\t //float time = uTime * 0.002 * 0.03 * base_octave;\n\t\t\t\t\n\t\t\t\t n *= vec2(1.0) * 2.7 * base_octave;\n\t\t\t\t // n -= q - time;\n\t\t\t\t n -= q;\n\t\t\t\t\n\t\t\t\t float total = 0.0, amplitude = amp_init;\n\t\t\t\t for (int i = 0; i < 7; i++) {\n\t\t\t\t float v = noise(n) * amplitude;\n\t\t\t\t v = do_abs ? abs(v) : v;\n\t\t\t\t\n\t\t\t\t total += v;\n\t\t\t\t\n\t\t\t\t //n = m * n + time;\n\t\t\t\t n = m * n;\n\t\t\t\t amplitude *= amp_step;\n\t\t\t\t }\n\t\t\t\t return total;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfloat calcF(vec2 p, float q) {\n\t\t\t\t //ridged noise shape\n\t\t\t\t float r = fbm(true, p, 0.8, 0.7, q, 1.0);\n\t\t\t\t\n\t\t\t\t //noise shape\n\t\t\t\t float f = fbm(false, p, 0.7, 0.6, q, 1.0);\n\t\t\t\t\n\t\t\t\t f *= r + f;\n\t\t\t\t\n\t\t\t\t f = cloudsCover + cloudsAlpha * f * r;\n\t\t\t\t\n\t\t\t\t return f;\n\t\t\t\t}\n\t\t\t\tfloat calcC(vec2 p, float q) {\n\t\t\t\t //noise colour\n\t\t\t\t float c = fbm(false, p, 0.4, 0.6, q, 2.0);\n\t\t\t\t\n\t\t\t\t //noise ridge colour\n\t\t\t\t float c1 = fbm(true, p, 0.4, 0.6, q, 3.0);\n\t\t\t\t\n\t\t\t\t return c + c1;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 projectedWorldPosition = (vec4(project(),0.0) * vModelMatrix).xyz;\n\t\t\t\t\tvec4 diffuseColor = vec4(0.0,0.0,0.0,1.0);\n\t\t\t\t\tvec3 outgoingLight1 = vec3(0.0);\n\t\t\t\t\tvec3 outgoingLight2 = vec3(0.0);\n\t\t\t\t\tvec3 outgoingLight = vec3(0.0);\n\n\t\t\t\t\t#ifdef ENVMAP_TYPE_CUBE\n\n\t\t\t\t\t\toutgoingLight1 = textureCube( map, projectedWorldPosition ).rgb;\n\t\t\t\t\t\toutgoingLight2 = textureCube( map2, projectedWorldPosition ).rgb;\n\t\t\t\t\t\toutgoingLight = mix(outgoingLight1,outgoingLight2,t);\n\n\t\t\t\t\t#else\n\n\t\t\t\t\t\tvec3 direction = normalize( projectedWorldPosition );\n\t\t\t\t\t\tvec2 uv = equirectUv( direction );\n\t\t\t\t\t\toutgoingLight1 = texture2D( map, uv ).rgb;\n\t\t\t\t\t\toutgoingLight2 = texture2D( map2, uv ).rgb;\n\t\t\t\t\t\toutgoingLight = mix(outgoingLight1,outgoingLight2,t);\n\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\tfloat fogDepth = z;\n float fogFactor = 1.0 - exp(-fogDensity * fogDensity * fogDepth * fogDepth);\n outgoingLight = mix(outgoingLight, fogColor, fogFactor);\n\t\t\t\t\t\n\t\t\t\t\t#include \n\t\t\t\t\t\n\t\t\t\t\tif (cloudsActive == 1.0) {\n\t\t\t\t vec4 fragLut = gl_FragColor;\n\t\t\t\t vec3 direction = normalize( vWorldPosition - vec3( 0.0, 0.0, 0.0 ) );\n\t\t\t\t\n\t\t\t\t float theta = acos( direction.y );\n\t\t\t\t float phi = atan( direction.z, direction.x );\n\t\t\t\t vec2 cloudsUV = vec2( phi, theta ) * 4.0;\n\t\t\t\t float time = uTime * uSpeed;\n\t\t\t\t cloudsUV.x *= 0.5;\n\t\t\t\t cloudsUV.x -= time;\n\t\t\t\t\n\t\t\t\t float q = fbm(false, cloudsUV, 0.1, 0.4, 0.0, 1.0);\n\t\t\t\t float f = calcF(cloudsUV, q);\n\t\t\t\t float c = calcC(cloudsUV, q);\n\t\t\t\t\n\t\t\t\t vec3 cloudcolour = clouds * clamp((cloudsTint + cloudsDark + cloudsLight * c), 0.0, 1.0);\n\t\t\t\t vec4 mixed = mix( fragLut, vec4(cloudcolour,1.0), clamp(f + c, 0.0, 1.0) );\n\t\t\t\t\n\t\t\t\t vec4 finalColor = mix(mixed,fragLut,smoothstep(0.0, 1.0, cloudsUV.y - horizon ));\n\t\t\t\t\n\t\t\t\t finalColor = mix(fragLut,finalColor,smoothstep(0.0, 1.0, cloudsUV.x + 2.0 * pi + time));\n\t\t\t\t finalColor = mix(finalColor,fragLut,smoothstep(0.0, 1.0, cloudsUV.x - 1.7 * pi + time));\n\t\t\t\t\n\t\t\t\t gl_FragColor = finalColor;\n\t\t\t\t }\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\t\t\t\t}\n\t\t\t\t`;\n\t\t\n\t\tconst uniforms = {\n\t\t\tmap: { value: texture },\n\t\t\tmap2 : { value: null },\n\t\t\tt : { value: 0.0 },\n\t\t\tfogColor : { value: new Color() },\n\t\t\tfogDensity : { value: 0.0 },\n\t\t\theight: { value: options.height || 15 },\n\t\t\tradius: { value: options.radius || 100 },\n\t\t\tcloudsActive: {value: 0.0},\n\t\t\tclouds: {value: new Color().setStyle('#ffffff',LinearSRGBColorSpace)},\n\t\t\tcloudsScale: {value: 2.7},\n\t\t\tcloudsDark: {value: 0.0},\n\t\t\tcloudsLight: {value: 0.16},\n\t\t\tcloudsCover: {value: 0.5},\n\t\t\tcloudsAlpha: {value: 4.0},\n\t\t\tcloudsTint: {value: 0.91},\n\t\t\thorizon: {value: 0.0},\n\t\t\tuSpeed: {value: 0.0},\n\t\t\tuTime: {value: 0.0}\n\t\t};\n\t\t\n\t\tconst geometry = new IcosahedronGeometry( 1, 16 );\n\t\tconst material = new ShaderMaterial( {\n\t\t\tuniforms,\n\t\t\tfragmentShader,\n\t\t\tvertexShader,\n\t\t\tside: DoubleSide,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: true\n\t\t} );\n\t\t\n\t\tsuper( geometry, material );\n\t\t\n\t}\n\t\n\tset radius( radius ) {\n\t\t\n\t\tthis.material.uniforms.radius.value = radius;\n\t\t\n\t}\n\t\n\tget radius() {\n\t\t\n\t\treturn this.material.uniforms.radius.value;\n\t\t\n\t}\n\t\n\tset height( height ) {\n\t\t\n\t\tthis.material.uniforms.height.value = height;\n\t\t\n\t}\n\t\n\tget height() {\n\t\t\n\t\treturn this.material.uniforms.height.value;\n\t\t\n\t}\n\t\n\tset secondTexture(texture) {\n\t\tthis.material.uniforms.map2.value = texture;\n\t}\n\t\n}\n","'use strict';\n\nconst vertexVariables = [\n 'varying vec2 hoUv;'\n].join('\\n');\n\nconst vertexMain = [\n 'vec4 rp = modelMatrix * vec4( position, 1.0 );',\n 'float size = 512.0;',\n 'float scale = 1.0/1024.0;',\n 'hoUv = vec2((rp.x+size)*scale,(rp.z+size)*scale);',\n 'gl_Position = projectionMatrix * viewMatrix * rp; '\n].join('\\n');\n\nconst fragmentVariables = [\n 'uniform sampler2D hmap;',\n 'uniform sampler2D overlayMap;',\n 'varying vec2 hoUv;',\n].join('\\n');\n\nconst fragmentMap = [\n 'vec4 sampledDiffuseColor = texture2D( map, vMapUv );',\n 'vec4 overlay = texture2D(overlayMap, hoUv);',\n 'if (overlay.r != 0.0) {',\n 'diffuseColor *= overlay;',\n '} else {',\n 'diffuseColor *= sampledDiffuseColor;}'\n].join('\\n');\n\nconst fragmentMain = [\n 'float h = texture2D(hmap, hoUv).r;',\n 'if (h != 0.0) {',\n 'discard;}'\n].join('\\n');\n\n\nexport class Hmap {\n static texture = null;\n static overlay = null;\n\n static upgradeMaterial(material) {\n if (!Hmap.texture && !Hmap.overlay) return;\n\n material.onBeforeCompile = (shader) => Hmap.upgradeShader(shader);\n }\n\n static upgradeShader(shader) {\n if (!Hmap.texture && !Hmap.overlay) return;\n\n shader.uniforms.hmap = {\n value: Hmap.texture\n };\n \n shader.uniforms.overlayMap = {\n value: Hmap.overlay\n };\n\n shader.vertexShader = shader.vertexShader.replace(\n '#include ',\n [\n '#include ',\n vertexVariables\n ].join( '\\n' )\n );\n\n shader.vertexShader = shader.vertexShader.replace(\n '#include ',\n [\n '#include ',\n vertexMain\n ].join( '\\n' )\n );\n\n shader.fragmentShader = shader.fragmentShader.replace(\n '#include ',\n [\n '#include ',\n fragmentVariables\n ].join( '\\n' )\n );\n \n shader.fragmentShader = shader.fragmentShader.replace(\n '#include ',\n fragmentMap\n );\n\n shader.fragmentShader = shader.fragmentShader.replace(\n '#include ',\n [\n fragmentMain,\n '#include '\n ].join( '\\n' )\n );\n }\n}\n","import { Frustum, InstancedBufferAttribute, Matrix4, Object3D, Vector3 } from 'three';\nimport { threeJsVariables } from '../../../settings';\n\nconst DEFAULT_SETTINGS = {\n\toffset: 0,\n\tautoUpdate: true\n};\nconst _position = new Vector3();\nconst _frustum = new Frustum();\nconst _camMatrix = new Matrix4();\n\nexport class InstanceLOD extends Object3D {\n\tstatic scopes = [];\n\t\n\tconstructor () {\n\t\tsuper();\n\t\tconst params = config.threejs.instanceLOD || DEFAULT_SETTINGS;\n\t\tthis.instancesLevels = [];\n\t\tthis.matrices = [];\n\t\tthis.levelsRange = [];\n\t\tthis.minLevel = null;\n\t\tthis.maxLevel = null;\n\t\tthis.count = 0;\n\t\tthis.frustumOffset = params.offset;\n\t\tthis.isLOD = true;\n\t\tthis.isInstanceLODObject = true;\n\t\tthis.autoUpdate = params.autoUpdate;\n\t\tthis.frustumCulled = false;\n\t\tthis.matrixAutoUpdate = false;\n\t\t\n\t\tif (!this.autoUpdate) {\n\t\t\tInstanceLOD.scopes.push(this);\n\t\t}\n\t}\n\t\n\taddLevel( object, distance = 0 ) {\n\t\tobject.isInstanceLOD = true;\n\t\t\n\t\tif (!this.matrices.length) {\n\t\t\tfor (let i = 0; i < object.count; i ++) {\n\t\t\t\tconst matrix = new Matrix4();\n\t\t\t\tobject.getMatrixAt(i,matrix);\n\t\t\t\tthis.matrices.push(matrix);\n\t\t\t\tthis.count++;\n\t\t\t}\n\t\t}\n\t\t\n\t\tconst data = {\n\t\t\tmesh: object,\n\t\t\tcount: 0,\n\t\t\tmatrix4: [],\n\t\t\tdistance\n\t\t};\n\t\t\n\t\tthis.instancesLevels.push(data);\n\t\tthis.levelsRange.push(distance);\n\t\tthis.levelsRange = [...new Set(this.levelsRange)];\n\t\tthis.minLevel = Math.min(...this.levelsRange);\n\t\tthis.maxLevel = Math.max(...this.levelsRange);\n\t\t\n\t\tthis.add( object );\n\t\t\n\t\tif (!this.autoUpdate) this.update(threeJsVariables.perspectiveCamera);\n\t\t\n\t\treturn this;\n\t}\n\t\n\tclamp(num,min,max) {\n\t\treturn Math.min(Math.max(num, min), max);\n\t}\n\t\n\tgetMatrixAt( index ) {\n\t\treturn this.matrices[index].clone();\n\t}\n\t\n\tsetMatrixAt( index, matrix ) {\n\t\tthis.matrices[index] = matrix.clone();\n\t}\n\t\n\tmerge(distance,matrix) {\n\t\tconst clamped = this.clamp(distance,this.minLevel,this.maxLevel);\n\t\t\n\t\tfor (let i = 0; i < this.instancesLevels.length; i++) {\n\t\t\tif (this.instancesLevels[i].distance >= clamped) {\n\t\t\t\tthis.instancesLevels[i].count++;\n\t\t\t\tthis.instancesLevels[i].matrix4.push(matrix);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t\n\tupdate(camera) {\n\t\tlet distance;\n\t\t\n\t\t//Clear\n\t\tfor (let i = 0; i < this.instancesLevels.length; i++) {\n\t\t\tthis.instancesLevels[i].count = 0;\n\t\t\tthis.instancesLevels[i].matrix4 = [];\n\t\t}\n\t\t\n\t\t_camMatrix.multiplyMatrices(camera.projectionMatrix,camera.matrixWorldInverse);\n\t\t_frustum.setFromProjectionMatrix(_camMatrix);\n\t\t\n\t\tif (this.frustumOffset > 0) {\n\t\t\t\n\t\t\tfor (let f = 0; f < _frustum.planes.length; f ++) {\n\t\t\t\t_frustum.planes[f].constant += this.frustumOffset;\n\t\t\t}\n\t\t}\n\t\t\n\t\tfor (let i = 0; i < this.matrices.length; i++) {\n\t\t\t\n\t\t\t_position.set(\n\t\t\t\tthis.matrices[i].elements[12],\n\t\t\t\tthis.matrices[i].elements[13],\n\t\t\t\tthis.matrices[i].elements[14]\n\t\t\t);\n\t\t\t\n\t\t\tif (_frustum.containsPoint(_position)) {\n\t\t\t\tdistance = _position.distanceTo(camera.position);\n\t\t\t\tthis.merge(distance,new Matrix4().copy(this.matrices[i]));\n\t\t\t}\n\t\t}\n\t\t\n\t\t\n\t\tfor (let i = 0; i < this.instancesLevels.length; i++) {\n\t\t\tthis.children[i].count = this.instancesLevels[i].count;\n\t\t\tthis.children[i].instanceMatrix = new InstancedBufferAttribute( new Float32Array( this.instancesLevels[i].count * 16 ), 16 );\n\t\t\tfor (let j = 0; j < this.instancesLevels[i].count; j++) {\n\t\t\t\tthis.children[i].setMatrixAt(j,this.instancesLevels[i].matrix4[j]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tstatic manualUpdate() {\n\t\tif (InstanceLOD.scopes.length) {\n\t\t\tInstanceLOD.scopes.forEach(scope => scope.update(threeJsVariables.perspectiveCamera));\n\t\t}\n\t}\n}\n","import { MeshStandardMaterial, Vector3 } from 'three';\n\nconst var_pars_vertex = `\n\tuniform float deltaTime;\n\tuniform float speed;\n\tuniform float frequency;\n\tuniform float radius;\n\t// uniform float normalBiasOffset;\n\tuniform vec3 amplitude;\n\t\n //\n // Description : Array and textureless GLSL 2D/3D/4D simplex\n // noise functions.\n // Author : Ian McEwan, Ashima Arts.\n // Maintainer : ijm\n // Lastmod : 20110822 (ijm)\n // License : Copyright (C) 2011 Ashima Arts. All rights reserved.\n // Distributed under the MIT License. See LICENSE file.\n // https://github.com/ashima/webgl-noise\n //\n\n vec3 mod289(vec3 x) {\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n }\n\n vec4 mod289(vec4 x) {\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n }\n\n vec4 permute(vec4 x) {\n return mod289(((x*34.0)+1.0)*x);\n }\n\n vec4 taylorInvSqrt(vec4 r)\n {\n return 1.79284291400159 - 0.85373472095314 * r;\n }\n\t\n\tfloat noise(vec3 v) {\n\t const vec2 C = vec2(1.0/6.0, 1.0/3.0) ;\n\t const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);\n\t\n\t // First corner\n\t vec3 i = floor(v + dot(v, C.yyy) );\n\t vec3 x0 = v - i + dot(i, C.xxx) ;\n\t\n\t // Other corners\n\t vec3 g = step(x0.yzx, x0.xyz);\n\t vec3 l = 1.0 - g;\n\t vec3 i1 = min( g.xyz, l.zxy );\n\t vec3 i2 = max( g.xyz, l.zxy );\n\t\n\t // x0 = x0 - 0.0 + 0.0 * C.xxx;\n\t // x1 = x0 - i1 + 1.0 * C.xxx;\n\t // x2 = x0 - i2 + 2.0 * C.xxx;\n\t // x3 = x0 - 1.0 + 3.0 * C.xxx;\n\t vec3 x1 = x0 - i1 + C.xxx;\n\t vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y\n\t vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y\n\t\n\t // Permutations\n\t i = mod289(i);\n\t vec4 p = permute( permute( permute(\n\t i.z + vec4(0.0, i1.z, i2.z, 1.0 ))\n\t + i.y + vec4(0.0, i1.y, i2.y, 1.0 ))\n\t + i.x + vec4(0.0, i1.x, i2.x, 1.0 ));\n\t\n\t // Gradients: 7x7 points over a square, mapped onto an octahedron.\n\t // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)\n\t float n_ = 0.142857142857; // 1.0/7.0\n\t vec3 ns = n_ * D.wyz - D.xzx;\n\t\n\t vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7)\n\t\n\t vec4 x_ = floor(j * ns.z);\n\t vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N)\n\t\n\t vec4 x = x_ *ns.x + ns.yyyy;\n\t vec4 y = y_ *ns.x + ns.yyyy;\n\t vec4 h = 1.0 - abs(x) - abs(y);\n\t\n\t vec4 b0 = vec4( x.xy, y.xy );\n\t vec4 b1 = vec4( x.zw, y.zw );\n\t\n\t //vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;\n\t //vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;\n\t vec4 s0 = floor(b0)*2.0 + 1.0;\n\t vec4 s1 = floor(b1)*2.0 + 1.0;\n\t vec4 sh = -step(h, vec4(0.0));\n\t\n\t vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;\n\t vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;\n\t\n\t vec3 p0 = vec3(a0.xy,h.x);\n\t vec3 p1 = vec3(a0.zw,h.y);\n\t vec3 p2 = vec3(a1.xy,h.z);\n\t vec3 p3 = vec3(a1.zw,h.w);\n\t\n\t //Normalise gradients\n\t vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));\n\t p0 *= norm.x;\n\t p1 *= norm.y;\n\t p2 *= norm.z;\n\t p3 *= norm.w;\n\t\n\t // Mix final noise value\n\t vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);\n\t m = m * m;\n\t return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1),\n\t dot(p2,x2), dot(p3,x3) ) );\n\t}\n\t\n\tfloat displace(vec3 point) {\n return noise(vec3(point.x * frequency, point.z * frequency, deltaTime * speed));\n }\n \n vec3 orthogonal(vec3 v) {\n return normalize(abs(v.x) > abs(v.z) ? vec3(-v.y, v.x, 0.0)\n : vec3(0.0, -v.z, v.y));\n }\n\t\n`;\n\nconst main_displace = `\n vec3 displacedNormal = normal;\n vec3 displacedPosition = position;\n vec4 displacedPositionRadius = vec4(position,1.0);\n \n #ifdef USE_INSTANCING\n\n\t displacedPositionRadius = instanceMatrix * displacedPositionRadius;\n\n #endif\n \n float displacedDistance = length(modelViewMatrix * displacedPositionRadius);\n \n if (displacedDistance < radius) {\n vec3 displacedNoise = displace(position) * amplitude;\n displacedPosition = position + normal * displacedNoise;\n \n vec3 tangent = orthogonal(normal);\n vec3 bitangent = normalize(cross(normal, tangent));\n vec3 neighbour1 = position + tangent;\n vec3 neighbour2 = position + bitangent;\n vec3 displacedNeighbour1 = neighbour1 + normal * (displace(neighbour1) * amplitude);\n vec3 displacedNeighbour2 = neighbour2 + normal * (displace(neighbour2) * amplitude);\n vec3 displacedTangent = displacedNeighbour1 - displacedPosition;\n vec3 displacedBitangent = displacedNeighbour2 - displacedPosition;\n displacedNormal = normalize(cross(displacedTangent, displacedBitangent));\n }\n`;\n\nconst begin_pars_vertex = `\n transformed = displacedPosition;\n`;\n\nconst begin_normal = `\n\tobjectNormal = displacedNormal;\n`;\n\nexport class DisplacementMaterial extends MeshStandardMaterial {\n\t#shader;\n\t\n\tconstructor (parameters) {\n\t\tsuper(parameters);\n\t\t\n\t\tthis.speed = 1;\n\t\tthis.frequency = 1;\n\t\tthis.radius = 100;\n\t\t// this.normalBiasOffset = 1;\n\t\tthis.amplitude = new Vector3(0,0.3,0);\n\t\tthis.customPrograms = [this.upgradeShader.bind(this)];\n\t}\n\t\n\tupgradeShader(shader) {\n\t\tshader.uniforms.deltaTime = {\n\t\t\tvalue: 0\n\t\t};\n\t\t\n\t\tshader.uniforms.speed = {\n\t\t\tvalue: this.speed\n\t\t};\n\t\t\n\t\tshader.uniforms.radius = {\n\t\t\tvalue: this.radius\n\t\t};\n\t\t\n\t\tshader.uniforms.frequency = {\n\t\t\tvalue: this.frequency\n\t\t};\n\t\t\n\t\t// shader.uniforms.normalBiasOffset = {\n\t\t// value: this.normalBiasOffset\n\t\t// };\n\t\t\n\t\tshader.uniforms.amplitude = {\n\t\t\tvalue: this.amplitude\n\t\t};\n\t\t\n\t\tshader.vertexShader = shader.vertexShader.replace('#include ',[\n\t\t\tmain_displace,\n\t\t\t'#include '\n\t\t].join('\\n'));\n\t\t\n\t\tshader.vertexShader = shader.vertexShader.replace('#include ',[\n\t\t\t'#include ',\n\t\t\tbegin_normal\n\t\t].join('\\n'));\n\t\t\n\t\tshader.vertexShader = shader.vertexShader.replace('#include ',[\n\t\t\t'#include ',\n\t\t\tvar_pars_vertex\n\t\t].join('\\n'));\n\t\t\n\t\tshader.vertexShader = shader.vertexShader.replace('#include ',[\n\t\t\tbegin_pars_vertex,\n\t\t\t'#include '\n\t\t].join('\\n'));\n\t\t\n\t\tthis.#shader = shader;\n\t\tthis.#shader.defines.DISPLACED_MATERIAL = '';\n\t\tthis.needsUpdate = true;\n\t}\n\t\n\ttick(delta) {\n\t\tif (this.#shader) {\n\t\t\tthis.#shader.uniforms.deltaTime.value += delta;\n\t\t}\n\t}\n}\n","'use strict';\n\nimport { DoubleSide, MeshStandardMaterial } from 'three';\n\nconst fluffy_vertex_vars = `\nuniform float intensity;\nuniform bool uNormalize;\nuniform float inflate;\nuniform float windSpeed;\nuniform float uTime;\nuniform bool flip;\nvarying vec3 fluffyNormal;\n`;\n\nconst fluffy_vertex_func = `\nfloat inverseLerp(float v, float minValue, float maxValue) {\n return (v - minValue) / (maxValue - minValue);\n}\n\nfloat remap(float v, float prevMin, float prevMax, float newMin, float newMax) {\n float t = inverseLerp(v, prevMin, prevMax);\n return mix(newMin, newMax, t);\n}\n\nfloat getScalar(mat4 matrix) {\n float scaleX = length(vec3(matrix[0]));\n float scaleY = length(vec3(matrix[1]));\n float scaleZ = length(vec3(matrix[2]));\nreturn length(vec3(scaleX,scaleY,scaleZ)) / 1.7320508075688772;\n}\n\nmat4 rotateZ(float radians) {\n float c = cos(radians);\n float s = sin(radians);\n\nreturn mat4(\n c, -s, 0, 0,\n s, c, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1\n );\n}\n\nvec4 applyWind(vec4 v) {\n float boundedYNormal = remap(normal.y, -1.0, 1.0, 0.0, 1.0);\n float posXZ = position.x + position.z;\n float power = windSpeed / 5.0 * -0.5;\n\n float topFacing = remap(sin(uTime + posXZ), -1.0, 1.0, 0.0, power);\n float bottomFacing = remap(cos(uTime + posXZ), -1.0, 1.0, 0.0, 0.05);\n float radians = mix(bottomFacing, topFacing, boundedYNormal);\n\n return rotateZ(radians) * v;\n}\n`;\n\nconst fluffy_vertex_projectVertex = `\nvec4 mvPosition = vec4( transformed, 1.0 );\nfloat mScale = getScalar(modelMatrix);\n\n#ifdef USE_BATCHING\n mScale = getScalar(batchingMatrix);\n\tmvPosition = batchingMatrix * mvPosition;\n\n#endif\n\n#ifdef USE_INSTANCING\n\n mScale = getScalar(instanceMatrix);\n\tmvPosition = instanceMatrix * mvPosition;\n\n#endif\n\n vec2 vertexOffset = vec2(\n remap(uv.x, 0.0, 1.0, -1.0, 1.0),\n remap(uv.y, 0.0, 1.0, -1.0, 1.0)\n );\n \n if (flip) {\n vertexOffset *= vec2(-1.0, 1.0);\n }\n\n if (uNormalize) {\n vertexOffset = normalize(vertexOffset);\n }\n \n vec3 fluffyTransformPosition = vec3(vertexOffset, 1.0) * mScale;\n vec3 fluffyTransformNormal = fluffyNormal * mScale;\n vec4 windPosition = applyWind(vec4(fluffyTransformPosition,1.0));\n \n mvPosition = modelViewMatrix * mvPosition;\n mvPosition += vec4(mix(vec3(0.0), windPosition.xyz + fluffyTransformNormal, intensity), 0.0);\n gl_Position = projectionMatrix * mvPosition;\n`;\n\nexport class FluffyMaterial extends MeshStandardMaterial{\n\t#shader;\n\t\n\tconstructor (parameters) {\n\t\tsuper(parameters);\n\t\t\n\t\tthis.side = DoubleSide;\n\t\tthis.intensity = 1;\n\t\tthis.inflate = 0;\n\t\tthis.windSpeed = 0;\n\t\tthis.flip = false;\n\t\tthis.normalize = true;\n\t\tthis.defines.FLUFFY_MATERIAL = '';\n\t\tthis.customPrograms = [this.upgradeShader.bind(this)];\n\t}\n\t\n\tupgradeShader(shader) {\n\t\tshader.uniforms.intensity = {value: this.intensity};\n\t\tshader.uniforms.uNormalize = {value: this.normalize};\n\t\tshader.uniforms.inflate = {value: this.inflate};\n\t\tshader.uniforms.flip = {value: this.flip};\n\t\tshader.uniforms.windSpeed = {value: this.windSpeed};\n\t\tshader.uniforms.uTime = {value: 0};\n\t\t\n\t\tshader.vertexShader = fluffy_vertex_vars + shader.vertexShader;\n\t\tshader.vertexShader = shader.vertexShader.replace('#include ',[\n\t\t\t'#include ',\n\t\t\tfluffy_vertex_func\n\t\t].join('\\n'));\n\t\t\n\t\tshader.vertexShader = shader.vertexShader.replace('#include ',[\n\t\t\t'#include ',\n\t\t\t'fluffyNormal = transformedNormal * inflate;'\n\t\t].join('\\n'));\n\t\t\n\t\tshader.vertexShader = shader.vertexShader.replace('#include ',fluffy_vertex_projectVertex);\n\t\tthis.#shader = shader;\n\t}\n\t\n\ttick(delta) {\n\t\tif (this.#shader) {\n\t\t\tthis.#shader.uniforms.uTime.value += delta * this.windSpeed;\n\t\t}\n\t}\n\t\n}\n","'use strict';\n\nimport { MeshBasicMaterial } from 'three';\nimport {mergeVertices} from 'three/examples/jsm/utils/BufferGeometryUtils';\n\nconst int_pars_vertex = `\n varying vec3 vViewDirTangent;\n`;\n\nconst int_void_vertex = `\n vec3 vNormal = normalMatrix * normal;\n vec3 vTangent = normalMatrix * tangent.xyz;\n vec3 vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n \n mat3 mTBN = transpose(mat3(vTangent, vBitangent, vNormal));\n vec4 mvPos = modelViewMatrix * vec4( position, 1.0 );\n vec3 viewDir = -mvPos.xyz;\n vViewDirTangent = mTBN * viewDir;\n`;\n\nconst int_pars_fragment = `\n varying vec3 vViewDirTangent;\n uniform float midgroundDepth;\n uniform float roomDepth;\n uniform float brightness;\n uniform float contrast;\n`;\n\nconst int_before_void_fragment = `\nvec2 intersect(vec3 ro, vec3 rd, vec3 Axis, float d, float id1, float id2){\n float rd_weight = dot( rd, Axis );\n float ro_weight = dot( ro ,Axis );\n float pointer = ceil( ro_weight / d );\n\n if( rd_weight > 0.0 ) // look up\n {\n float h = pointer * d;\n float t = ( h - ro_weight ) / rd_weight;\n return vec2( t, id1 );\n }\n else // look down\n {\n float h = ( pointer - 1.0 ) * d;\n float t = ( h - ro_weight ) / rd_weight;\n return vec2( t, id2 );\n }\n}\nvec2 nearest( vec2 c1, vec2 c2, vec2 c3){\n if( c1.x < c2.x )\n {\n return c1.x0.9 && id<1.1)\n {\n vec2 topUV = fract(vec2(pos.x,pos.z)) * vec2(1.0/3.0,1.0/3.0) + vec2(1.0/3.0,1.0/3.0 * 2.0);\n finalColor = texture2D( map, topUV);\n }\n else if (id>1.9 && id<2.1)\n {\n vec2 bottomUV = fract(vec2(pos.x,-pos.z)) * vec2(1.0/3.0,1.0/3.0) + vec2(1.0/3.0,0.0);\n finalColor = texture2D( map, bottomUV );\n }\n else if (id>2.9 && id<3.1)\n {\n vec2 rightUV = fract(vec2(pos.z,pos.y)) * vec2(1.0/3.0,1.0/3.0) + vec2(1.0/3.0 * 2.0,1.0/3.0);\n finalColor = texture2D( map, rightUV );\n }\n else if (id>3.9 && id<4.1)\n {\n vec2 leftUV = fract(vec2(-pos.z,pos.y)) * vec2(1.0/3.0,1.0/3.0) + vec2(0.0,1.0/3.0);\n finalColor = texture2D( map, leftUV );\n }\n else if (id>4.9 && id<5.1)\n {\n vec2 frontUV = fract(pos.xy) * vec2(1.0/3.0,1.0/3.0);\n finalColor = texture2D( map, frontUV);\n }\n else if (id>5.9 && id<6.1)\n {\n vec2 backUV = fract(pos.xy) * vec2(1.0/3.0,1.0/3.0) + vec2(1.0/3.0,1.0/3.0);\n finalColor = texture2D( map, backUV );\n } else if (id >6.9 && id <8.1) {\n vec2 midUV = fract(pos.xy) * vec2(1.0/3.0,1.0/3.0) + vec2(0.0,1.0/3.0 * 2.0);\n finalColor = texture2D( map, midUV );\n }\n\n return finalColor;\n}\n`;\n\nconst int_void_fragment = `\n #ifdef USE_MAP\n\t vec3 ro = vec3( vMapUv, 1.0 );\n vec3 rd = normalize(ro - vViewDirTangent);\n rd.z /= roomDepth;\n \n vec3 size = vec3(1.0);\n float midgroundDepthMult = clamp(midgroundDepth,0.01,size.z-0.01);\n \n vec3 up = vec3(0.0, 1.0, 0.0);\n vec3 right = vec3(1.0, 0.0, 0.0);\n vec3 back = vec3(0.0, 0.0, 1.0);\n vec3 front = vec3(0.0, 0.0, -1.0);\n vec3 mid = vec3(0.0,0.0,1.0);\n \n // interset\n vec2 tID1 = intersect(ro,rd,up,size.y, 1.0, 2.0);\n vec2 tID2 = intersect(ro,rd,right,size.x, 3.0, 4.0);\n vec2 tBack = intersect(ro,rd,back,size.z, 5.0, 6.0);\n vec2 tFront = intersect(ro,rd,front,size.z, 5.0, 6.0);\n vec2 tMid = intersect(ro - midgroundDepthMult,rd,mid,size.z, 7.0, 8.0);\n \n vec2 tIDCube = nearest(tID1,tID2,tBack);\n vec2 tIDFront = nearest(tID1,tID2,tFront);\n vec2 tIDMid = nearest(tID1,tID2,tMid);\n \n // render\n vec4 sampledDiffuseColor = renderColor(tIDCube,ro,rd,size,map);\n \n #if MIDGROUND == 1\n \n vec4 midColor = renderColor(tIDMid,ro,rd,size,map);\n sampledDiffuseColor = mix(sampledDiffuseColor,midColor,midColor.a);\n \n #endif\n \n #if CURTAINS == 1\n \n vec4 frontColor = renderColor(tIDFront,ro,rd,size,map);\n sampledDiffuseColor = mix(sampledDiffuseColor,frontColor,frontColor.a);\n \n #endif\n\t \n\t sampledDiffuseColor.rgb /= sampledDiffuseColor.a;\n sampledDiffuseColor.rgb = ((sampledDiffuseColor.rgb - 0.5f) * contrast) + 0.5f;\n\t sampledDiffuseColor.rgb += brightness;\n\t sampledDiffuseColor.rgb *= sampledDiffuseColor.a;\n\t \n\t diffuseColor *= sampledDiffuseColor;\n\n #endif\n`;\n\n\nexport class InteriorMaterial extends MeshBasicMaterial{\n\t#shader;\n\t\n\tconstructor (parameters) {\n\t\tsuper(parameters);\n\t\t\n\t\tthis.midgroundDepth = 0.5;\n\t\tthis.roomDepth = 1;\n\t\tthis.contrast = 1;\n\t\tthis.brightness = 0;\n\t\tthis.enableMidground = true;\n\t\tthis.enableCurtains = false;\n\t\tthis.defines = {\n\t\t\tINTERIOR_MATERIAL:'',\n\t\t\tUSE_TANGENT: '',\n\t\t\tMIDGROUND: 1,\n\t\t\tCURTAINS: 0\n\t\t};\n\t\t\n\t\tthis.customPrograms = [this.upgradeShader.bind(this)];\n\t}\n\t\n\tupgradeShader(shader) {\n\t\tshader.defines.MIDGROUND = Number(this.enableMidground);\n\t\tshader.defines.CURTAINS = Number(this.enableCurtains);\n\t\t\n\t\tshader.uniforms.midgroundDepth = {\n\t\t\tvalue: this.midgroundDepth\n\t\t};\n\t\t\n\t\tshader.uniforms.roomDepth = {\n\t\t\tvalue: this.roomDepth\n\t\t};\n\t\t\n\t\tshader.uniforms.brightness = {\n\t\t\tvalue: this.brightness\n\t\t};\n\t\t\n\t\tshader.uniforms.contrast = {\n\t\t\tvalue: this.contrast\n\t\t};\n\t\t\n\t\tshader.vertexShader = shader.vertexShader.replace('#include ',[\n\t\t\t'#include ',\n\t\t\tint_pars_vertex\n\t\t].join('\\n'));\n\t\t\n\t\tshader.vertexShader = shader.vertexShader.replace('#include ',[\n\t\t\tint_void_vertex,\n\t\t\t'#include '\n\t\t].join('\\n'));\n\t\t\n\t\tshader.fragmentShader = int_pars_fragment + shader.fragmentShader;\n\t\t\n\t\tshader.fragmentShader = shader.fragmentShader.replace('#include ',[\n\t\t\t'#include ',\n\t\t\tint_before_void_fragment\n\t\t].join('\\n'));\n\t\t\n\t\tshader.fragmentShader = shader.fragmentShader.replace('#include ',int_void_fragment);\n\t\t\n\t\tthis.#shader = shader;\n\t}\n\t\n\tstatic prepareMesh(mesh) {\n\t\tif (mesh.geometry.index === null) {\n\t\t\tmesh.geometry = mergeVertices(mesh.geometry);\n\t\t}\n\t\t\n\t\tif (!mesh.geometry.hasAttribute('tangent')) {\n\t\t\tmesh.geometry.computeTangents();\n\t\t}\n\t}\n\t\n}\n","'use strict';\n\nimport { Matrix3, MeshStandardMaterial } from 'three';\n\nconst layer_vertex_vars = `\nvarying vec2 vMaskUv;\nuniform mat3 uMaskTransform;\n`;\n\nconst layer_vertex_main = `\nvMaskUv = ( uMaskTransform * vec3( MASK_UV, 1 ) ).xy;\n`;\n\nconst layer_fragment_vars = `\nvarying vec2 vMaskUv;\nuniform sampler2D uMask;\n`;\n\nconst layer_fragment_main = `\n vec4 mask = texture2D(uMask,vMaskUv);\n gl_FragColor.a = mask.r;\n`;\n\n\nexport class LayerMaterial extends MeshStandardMaterial{\n\tconstructor (parameters) {\n\t\tsuper(parameters);\n\t\n\t\tthis.transparent = true;\n\t\tthis.defines.LAYER_MATERIAL = '';\n\t\tthis.defines.MASK_UV = 'uv';\n\t\tthis.defines.USE_UV1 = '';\n\t\tthis.mask = parameters?.mask ? parameters.mask : null;\n\t\tthis.customPrograms = [this.upgradeShader.bind(this)];\n\t}\n\t\n\tupgradeShader(shader) {\n\t\tif (this.mask) {\n\t\t\tthis.mask.updateMatrix();\n\t\t}\n\t\t\n\t\tshader.uniforms.uMask = {value:this.mask};\n\t\tshader.uniforms.uMaskTransform = {value: this.mask ? this.mask.matrix.clone() : new Matrix3()};\n\t\tshader.defines.MASK_UV = this.mask ? this.#getActiveChannel(this.mask.channel) : this.#getActiveChannel(0);\n\t\t\n\t\tshader.vertexShader = layer_vertex_vars + shader.vertexShader;\n\t\tshader.vertexShader = shader.vertexShader.replace('#include ',[\n\t\t\tlayer_vertex_main,\n\t\t\t'#include '\n\t\t].join('\\n'));\n\t\t\n\t\tshader.fragmentShader = layer_fragment_vars + shader.fragmentShader;\n\t\tshader.fragmentShader = shader.fragmentShader.replace('#include ',[\n\t\t\t'#include ',\n\t\t\tlayer_fragment_main\n\t\t].join('\\n'));\n\t}\n\t\n\t#getActiveChannel(value) {\n\t\tif ( value === 0 ) return 'uv';\n\t\t\n\t\treturn `uv${ value }`;\n\t}\n\t\n}\n","'use strict';\n\nimport { MeshStandardMaterial, Color, DoubleSide, Vector2, ShaderMaterial } from 'three';\n\nconst sea_pars_fragment = `\n uniform sampler2D uWave;\n\tuniform float uTime;\n\tuniform float uScale;\n uniform float uSpeed;\n uniform vec2 uFlow;\n uniform float uDistortion;\n uniform vec3 uSunDirection;\n uniform float uReflection;\n uniform float uReflectionPower;\n uniform vec3 uSunColor;\n \n uniform float sunriseTime;\n uniform float sunsetTime;\n uniform float currentTime;\n uniform float dayStartTime;\n uniform float dayEndTime;\n`;\n\nconst sea_map_fragment = `\n#ifdef USE_MAP\n vec2 seaUV = (vMapUv - 0.5) * uScale + 0.5;\n vec2 seaFlow = uTime * uSpeed * uFlow;\n seaUV += seaFlow;\n vec4 waterNoise = texture2D(uWave,seaUV);\n \n vec2 seaDisplacement = clamp((waterNoise.xy - 0.5) * uDistortion, -1., 1.);\n seaDisplacement += seaFlow * 5.0;\n \n\tvec4 sampledDiffuseColor = texture2D(map, vMapUv + seaDisplacement);\n\tfloat alpha = 0.0;\n\tfloat oneHour = 3600000.0;\n\t\n\tif (currentTime > sunsetTime - oneHour) {\n alpha = ((currentTime - (sunsetTime - oneHour)) / (sunsetTime - (sunsetTime - oneHour)));\n } else if (currentTime < sunriseTime + oneHour) {\n alpha = (sunriseTime + oneHour - currentTime) / (sunriseTime + oneHour - sunriseTime);\n }\n \n if (currentTime > sunsetTime) {\n alpha = 0.0;\n }\n \n if (currentTime < sunriseTime) {\n alpha = 0.0;\n }\n \n alpha = clamp(alpha,0.0,1.0);\n\t\n\tvec3 specularLight = vec3(0.0);\n vec3 refraction = uSunDirection-vSeaPosition.xyz;\n vec3 refractionDirection = normalize( refraction );\n sunLight( vSeaNormal, refractionDirection, uReflection, uReflectionPower, specularLight );\n specularLight = mix(vec3(0.0),specularLight,alpha);\n sampledDiffuseColor.rgb += specularLight;\n\t\n\tdiffuseColor *= sampledDiffuseColor;\n\n#endif\n`;\n\nconst sea_pars_vertex = `\n varying vec3 vSeaNormal;\n varying vec4 vSeaPosition;\n`;\n\nconst sea_world_pos = `\n vSeaPosition = modelMatrix * vec4( position, 1.0 );\n`;\n\nconst sea_default_normal_vertex = `\n vSeaNormal = transformedNormal;\n`;\n\nconst sea_reflection_fragment = `\nvoid sunLight( const vec3 surfaceNormal, const vec3 refractionDirection, float shiny, float spec,inout vec3 specularColor ) {\n vec3 reflection = normalize( reflect( -uSunDirection, surfaceNormal ) );\n float direction = max( 0.0, dot( refractionDirection, reflection ) );\n specularColor += pow( direction, shiny ) * uSunColor * spec;\n}\n`;\n\nexport class SeaMaterial extends MeshStandardMaterial{\n\t#shader;\n\t\n\tconstructor (directionalLight) {\n\t\tsuper();\n\t\t\n\t\tthis.side = DoubleSide;\n\t\tthis.customPrograms = [this.upgradeShader.bind(this)];\n\t\tthis.noise = null;\n\t\tthis.scale = 5;\n\t\tthis.speed = 0.002;\n\t\tthis.flow = new Vector2(-1,0.45);\n\t\tthis.reflection = 80;\n\t\tthis.reflectionPower = 1.5;\n\t\tthis.sunColor = new Color('#FFA741');\n\t\tthis.distortion = 0.08;\n\t\tthis.dayInfo = {};\n\t\tthis.currentTime = 0;\n\t\tthis.light = directionalLight;\n\t}\n\t\n\tsetDayTime(times) {\n\t\tthis.dayInfo = times;\n\t}\n\t\n\tsetTime(time) {\n\t\tthis.currentTime = time;\n\t}\n\t\n\ttick(delta) {\n\t\tif (this.#shader) {\n\t\t\tthis.#shader.uniforms.uTime.value += delta;\n\t\t\tthis.#shader.uniforms.uSunDirection.value = this.light.position;\n\t\t\tthis.#shader.uniforms.currentTime.value = this.currentTime;\n\t\t\tthis.#shader.uniforms.sunriseTime.value = this.dayInfo.sunrise;\n\t\t\tthis.#shader.uniforms.sunsetTime.value = this.dayInfo.sunset;\n\t\t\tthis.#shader.uniforms.dayStartTime.value = this.dayInfo.dayStart;\n\t\t\tthis.#shader.uniforms.dayEndTime.value = this.dayInfo.dayEnd;\n\t\t}\n\t}\n\t\n\tupgradeShader(shader) {\n\t\tshader.uniforms.uScale = {value: this.scale};\n\t\tshader.uniforms.uSpeed = {value: this.speed};\n\t\tshader.uniforms.uTime = {value: 0.0};\n\t\tshader.uniforms.uFlow = {value: this.flow};\n\t\tshader.uniforms.uDistortion = {value: this.distortion};\n\t\tshader.uniforms.uWave = {value: this.noise};\n\t\tshader.uniforms.uSunColor = {value: this.sunColor};\n\t\tshader.uniforms.uReflection = {value: this.reflection};\n\t\tshader.uniforms.uReflectionPower = {value: this.reflectionPower};\n\t\tshader.uniforms.uSunDirection = {value: this.light.position};\n\t\tshader.uniforms.sunriseTime = {value: this.dayInfo.sunrise};\n\t\tshader.uniforms.sunsetTime = {value: this.dayInfo.sunset};\n\t\tshader.uniforms.currentTime = {value: this.dayInfo.currentTime};\n\t\tshader.uniforms.dayStartTime = {value: this.dayInfo.dayStart};\n\t\tshader.uniforms.dayEndTime = {value: this.dayInfo.dayEnd};\n\t\t\n\t\tshader.vertexShader = sea_pars_vertex + shader.vertexShader;\n\t\t\n\t\tshader.vertexShader = shader.vertexShader.replace('#include ',[\n\t\t\t'#include ',\n\t\t\tsea_default_normal_vertex\n\t\t].join('\\n'));\n\t\t\n\t\tshader.vertexShader = shader.vertexShader.replace('#include ',[\n\t\t\t'#include ',\n\t\t\tsea_world_pos\n\t\t].join('\\n'));\n\t\t\n\t\tshader.fragmentShader = sea_pars_vertex + shader.fragmentShader;\n\t\tshader.fragmentShader = sea_pars_fragment + shader.fragmentShader;\n\t\t\n\t\tshader.fragmentShader = shader.fragmentShader.replace('#include ',[\n\t\t\t'#include ',\n\t\t\tsea_reflection_fragment\n\t\t].join('\\n'));\n\t\t\n\t\tshader.fragmentShader = shader.fragmentShader.replace('#include ',[\n\t\t\tsea_map_fragment\n\t\t].join('\\n'));\n\t\t\n\t\tthis.#shader = shader;\n\t}\n\t\n}\n","'use strict';\n\nimport { ConeGeometry, CylinderGeometry } from 'three';\nimport { ObjectCore } from './ObjectCore';\nimport { mergeGeometries } from 'three/examples/jsm/utils/BufferGeometryUtils';\n\n\nexport class Arrow extends ObjectCore{\n\n constructor (data,textureLoader) {\n\n const cone = new ConeGeometry(0.2,1,12);\n cone.center();\n cone.translate(0,1,0);\n const cylinder = new CylinderGeometry(0.1,0.1,1,12);\n const merge = mergeGeometries([cone,cylinder]);\n\n super(data,merge,textureLoader);\n\n this.objectType = 'Arrow';\n }\n\n}\n","'use strict';\n\nimport { BoxGeometry } from 'three';\nimport { ObjectCore } from './ObjectCore';\n\nexport class Box extends ObjectCore{\n\n constructor (data,textureLoader) {\n const geometry = new BoxGeometry(5,5,5);\n\n super(data,geometry,textureLoader);\n\n this.objectType = 'Box';\n }\n\n}\n","'use strict';\n\n\nimport { prepareMaterial } from '../autoProjectScript';\nimport { Mesh } from 'three';\n\n\nexport class ObjectCore {\n\n constructor (data,geometry,textureLoader) {\n const material = prepareMaterial(data.material.config,textureLoader,data.material.type);\n this.mesh = new Mesh(geometry,material);\n this.mesh.name = data.id;\n this.mesh.position.fromArray(data.position);\n this.mesh.rotation.fromArray(data.rotation);\n this.mesh.scale.fromArray(data.scale);\n }\n\n visibilityToggle(state) {\n this.mesh = state;\n }\n\n}\n","'use strict';\n\nimport { Text3D } from './Text3D';\nimport { Arrow } from './Arrow';\nimport { Group } from 'three';\nimport { isMobile, threeJsVariables } from '../../../settings';\nimport { Box } from './Box';\nimport { Sphere } from './Sphere';\nimport { Orbit360Viewer } from '../../components/publicLayers/Orbit360Viewer';\nimport { addPoiToIntersection } from '../../poi/poiCss';\nimport { PointView } from './PointView';\n\nexport class Objects {\n static elements = [];\n static cylinderCSSLabels = [];\n static scope = null;\n static tl = null;\n static useLabelsFromBundle = false;\n\n constructor (config) {\n this.config = config;\n this.group = new Group();\n this.group.name = 'Additional objects';\n threeJsVariables.scene.add(this.group);\n Objects.scope = this;\n }\n\n add(textureLoader) {\n this.config.forEach(data => {\n let scope = null;\n switch (data.type) {\n case 'PointView':\n scope = new PointView(data);\n const label = scope.createLabel();\n addPoiToIntersection(label);\n this.group.add(label);\n break;\n case 'Text':\n scope = new Text3D(data);\n this.group.add(scope);\n break;\n case 'Arrow':\n scope = new Arrow(data,textureLoader);\n this.group.add(scope.mesh);\n break;\n case 'Box':\n scope = new Box(data,textureLoader);\n this.group.add(scope.mesh);\n break;\n case 'Sphere':\n scope = new Sphere(data,textureLoader);\n this.group.add(scope.mesh);\n break;\n case 'CSSLabel':\n if (data.data.url) {\n Objects.useLabelsFromBundle = true;\n scope = new Orbit360Viewer(data.data);\n scope.label.position.fromArray(data.position);\n scope.label.name = data.id;\n addPoiToIntersection(scope.label);\n this.group.add(scope.label);\n }\n break;\n case 'CylinderCSSLabel':\n // Allow only for web/desktop. Waiting for mobile fix.\n if (data.data.url && !isMobile) {\n Objects.cylinderCSSLabels.push(data);\n }\n break;\n }\n\n if (scope) {\n Objects.elements.push(scope);\n }\n });\n }\n\n static visibilityToggle(state) {\n if (Objects.scope) {\n Objects.elements.forEach(scope => scope.visibilityToggle(state));\n }\n }\n\n static visibilityCSSLabels(state) {\n if (Objects.scope) {\n const cssScopes = Objects.elements.filter(scope => scope.objectType === 'CSSLabel');\n cssScopes.forEach(scope => scope.visibilityToggle(state));\n }\n }\n\n static translate() {\n if (Objects.scope) {\n Objects.elements.forEach(scope => {\n if (scope.translateText) {\n scope.translateText();\n }\n });\n }\n }\n\n}\n","'use strict';\n\n\nimport { MathUtils, Spherical, Vector3 } from 'three';\nimport { BaseElement } from '../../interfaces/BaseElement';\nimport { CSS2DObject } from '../../../libs/CSS2DRenderer';\nimport { GSAPAnimationMixer, threeJsVariables, UIRoot } from '../../../settings';\nimport { calculateDeltaFromVec3, clamp } from '../../../functions';\nimport { Lerp } from '../../projectTime/Lerp';\nimport { getCurrentCameraDistance } from '../../controls/orbitControls';\nimport gsap from \"gsap\";\nimport { CameraCollision } from '../CameraCollision';\nimport { changeLangToCurrent } from '../../components/langSwitcher/langSwitcher';\n\nexport class PointView {\n\tconstructor (data) {\n\t\tthis.position = new Vector3().fromArray(data.position);\n\t\tthis.direction = new Vector3().fromArray(data.direction);\n\t\tthis.theta = MathUtils.degToRad(data.theta);\n\t\tthis.phi = MathUtils.degToRad(data.phi);\n\t\tthis.cachedOrbitControls = new Map();\n\t\tthis.cachedCamera = new Map();\n\t\tthis.cachedTrackball = new Map();\n\t\tthis.cachedLabels = new Map();\n\t\tthis.label = null;\n\t\tthis.btn = null;\n\t\tthis.objectType = 'PointView';\n\t}\n\t\n\tcreateLabel() {\n\t\tconst container = new BaseElement()\n\t\t\t.addClass('orbit-360-label')\n\t\t\t.DOMElement;\n\t\t\n\t\tnew BaseElement()\n\t\t\t.addClass('icon-360')\n\t\t\t.appendTo(container);\n\t\t\n\t\tthis.label = new CSS2DObject(container);\n\t\tthis.label.userData.zoom = 1;\n\t\tthis.label.name =`layer-poi__orbit-360`;\n\t\tthis.label.element.addEventListener('click',this.viewIn.bind(this));\n\t\tthis.label.position.copy(this.position);\n\t\t\n\t\t\n\t\tthis.btn = new BaseElement('button')\n\t\t\t.addClass('control-button','point-view__back-btn','language-string')\n\t\t\t.addAttribute('data-dictionary','Back to orbit')\n\t\t\t.innerHtml(changeLangToCurrent('Back to orbit'))\n\t\t\t.event('click',this.viewOut.bind(this))\n\t\t\t.DOMElement;\n\t\t\n\t\treturn this.label;\n\t}\n\t\n\tvisibilityToggle(state) {\n\t\tthis.label.visible = state;\n\t}\n\t\n\t#calculateDelta(from,to) {\n\t\tconst tempD = to - from;\n\t\tlet delta;\n\t\t\n\t\tif (tempD < 0 && tempD < -Math.PI) {\n\t\t\tdelta = tempD + 2 * Math.PI;\n\t\t} else if (tempD > 0 && tempD > Math.PI) {\n\t\t\tdelta = tempD - 2 * Math.PI;\n\t\t} else {\n\t\t\tdelta = tempD;\n\t\t}\n\t\t\n\t\treturn delta;\n\t}\n\t\n\t#saveSettings() {\n\t\tconst trackballControls = threeJsVariables.trackballControls;\n\t\tconst controls = threeJsVariables.orbitControls;\n\t\tconst camera = threeJsVariables.perspectiveCamera;\n\t\t\n\t\tthis.cachedOrbitControls.clear();\n\t\tthis.cachedOrbitControls.set('maxSphere',controls.maxSphere);\n\t\tthis.cachedOrbitControls.set('minPolarAngle',controls.minPolarAngle);\n\t\tthis.cachedOrbitControls.set('maxPolarAngle',controls.maxPolarAngle);\n\t\tthis.cachedOrbitControls.set('minAzimuthAngle',controls.minAzimuthAngle);\n\t\tthis.cachedOrbitControls.set('maxAzimuthAngle',controls.maxAzimuthAngle);\n\t\tthis.cachedOrbitControls.set('minPan',controls.minPan);\n\t\tthis.cachedOrbitControls.set('maxPan',controls.maxPan);\n\t\tthis.cachedOrbitControls.set('rotateSpeed',controls.rotateSpeed);\n\t\tthis.cachedOrbitControls.set('target',controls.target.clone());\n\t\t\n\t\tthis.cachedCamera.clear();\n\t\tthis.cachedCamera.set('position',camera.position.clone());\n\t\t\n\t\tthis.cachedTrackball.clear();\n\t\tthis.cachedTrackball.set('minDistance',trackballControls.minDistance);\n\t\tthis.cachedTrackball.set('maxDistance',trackballControls.maxDistance);\n\t\t\n\t\tthis.cachedLabels.clear();\n\t\tthis.cachedLabels.set('resize',config.threejs.label.resize);\n\t}\n\t\n\t#applyPointSettings() {\n\t\tCameraCollision.prevent = true;\n\t\tconst trackballControls = threeJsVariables.trackballControls;\n\t\tconst controls = threeJsVariables.orbitControls;\n\t\t\n\t\ttrackballControls.minDistance = 0.01;\n\t\ttrackballControls.noZoom = true;\n\t\tcontrols.maxSphere = undefined;\n\t\tcontrols.maxPan = undefined;\n\t\tcontrols.minPan = undefined;\n\t\tcontrols.maxPolarAngle = Math.PI;\n\t\tcontrols.minPolarAngle = 0;\n\t\tcontrols.rotateSpeed = 0.25;\n\t}\n\t\n\t#applyAzimuthPolarLimits() {\n\t\tconst controls = threeJsVariables.orbitControls;\n\t\tconst azimuth = controls.getAzimuthalAngle();\n\t\tconst polar = controls.getPolarAngle();\n\t\t\n\t\tif (this.theta === Math.PI * 2) {\n\t\t\tcontrols.minAzimuthAngle = -Infinity;\n\t\t\tcontrols.maxAzimuthAngle = Infinity;\n\t\t} else {\n\t\t\tcontrols.minAzimuthAngle = azimuth + this.#calculateDelta(azimuth,azimuth - this.theta / 2);\n\t\t\tcontrols.maxAzimuthAngle = azimuth + this.#calculateDelta(azimuth,azimuth + this.theta / 2);\n\t\t}\n\t\t\n\t\tlet min = clamp(polar + this.#calculateDelta(polar,polar - this.phi / 2),0,Math.PI);\n\t\tlet max = clamp(polar + this.#calculateDelta(polar,polar + this.phi / 2),0,Math.PI);\n\t\t\n\t\tif ((min === 0 && max === 0) || (min === Math.PI && max === Math.PI)) {\n\t\t\tmin = 0;\n\t\t\tmax = Math.PI;\n\t\t}\n\t\t\n\t\tcontrols.minPolarAngle = min;\n\t\tcontrols.maxPolarAngle = max;\n\t}\n\t\n\tviewIn() {\n\t\tthis.#saveSettings();\n\t\tthis.#applyPointSettings();\n\t\tthis.visibilityToggle(false);\n\t\tconfig.threejs.label.resize = false;\n\t\t\n\t\tconst trackballControls = threeJsVariables.trackballControls;\n\t\tconst controls = threeJsVariables.orbitControls;\n\t\tconst camera = threeJsVariables.perspectiveCamera;\n\t\tconst direction = new Vector3().subVectors(this.position,this.direction).normalize();\n\t\tconst delta = calculateDeltaFromVec3(this.position,this.direction);\n\t\tconst spherical = new Spherical().setFromVector3(direction);\n\t\t\n\t\tconst currentDelta = controls.getAzimuthalAngle();\n\t\tconst currentPolarAngle = controls.getPolarAngle();\n\t\tconst thetaLerp = new Lerp(currentDelta,currentDelta + delta);\n\t\tconst phiLerp = new Lerp(currentPolarAngle,spherical.phi);\n\t\tconst distanceLerp = new Lerp(getCurrentCameraDistance(),trackballControls.minDistance);\n\t\tconst transition = threeJsVariables.composer.getPass('map');\n\t\ttransition.scale = 0;\n\t\ttransition.opacity = 1;\n\t\ttransition.active = true;\n\t\t\n\t\tgsap.to(controls.target,{\n\t\t\tx: this.position.x,\n\t\t\ty: this.position.y,\n\t\t\tz: this.position.z,\n\t\t\tduration: GSAPAnimationMixer.duration,\n\t\t\tease: GSAPAnimationMixer.ease\n\t\t});\n\t\t\n\t\tconst cameraProgress = {\n\t\t\tvalue: 0\n\t\t};\n\t\t\n\t\tconst dir = new Vector3();\n\t\t\n\t\tgsap.to(cameraProgress,{\n\t\t\tvalue: 1,\n\t\t\tduration: GSAPAnimationMixer.duration,\n\t\t\tease: GSAPAnimationMixer.ease,\n\t\t\tonUpdate: () => {\n\t\t\t\tif (cameraProgress.value < 0.5) {\n\t\t\t\t\ttransition.opacity = clamp(1 - cameraProgress.value,0.5,1);\n\t\t\t\t} else {\n\t\t\t\t\ttransition.opacity = clamp(cameraProgress.value,0.5,1);\n\t\t\t\t}\n\t\t\t\tcontrols.setAzimuthAngle(thetaLerp.lerp(cameraProgress.value));\n\t\t\t\tcontrols.setPolarAngle(phiLerp.lerp(cameraProgress.value));\n\t\t\t\tdir.subVectors(camera.position,controls.target);\n\t\t\t\tdir.normalize().setLength(distanceLerp.lerp(cameraProgress.value)).add(controls.target);\n\t\t\t\tcamera.position.copy(dir);\n\t\t\t},\n\t\t\tonComplete: () => {\n\t\t\t\ttransition.active = false;\n\t\t\t\tthis.#applyAzimuthPolarLimits();\n\t\t\t\tUIRoot.appendChild(this.btn);\n\t\t\t}\n\t\t});\n\t\t\n\t\t\n\t}\n\t\n\tviewOut() {\n\t\tthis.btn.remove();\n\t\tthis.visibilityToggle(true);\n\t\tconst trackballControls = threeJsVariables.trackballControls;\n\t\tconst controls = threeJsVariables.orbitControls;\n\t\tconst camera = threeJsVariables.perspectiveCamera;\n\t\tconst transition = threeJsVariables.composer.getPass('map');\n\t\t\n\t\ttrackballControls.noZoom = false;\n\t\tcontrols.maxPolarAngle = Math.PI;\n\t\tcontrols.minPolarAngle = 0;\n\t\tcontrols.rotateSpeed = 1;\n\t\tcontrols.maxAzimuthAngle = Infinity;\n\t\tcontrols.minAzimuthAngle = -Infinity;\n\t\t\n\t\tconst target = this.cachedOrbitControls.get('target');\n\t\tconst position = this.cachedCamera.get('position');\n\t\tconst direction = new Vector3().subVectors(position,target).normalize();\n\t\tconst spherical = new Spherical().setFromVector3(direction);\n\t\t\n\t\tconst delta = calculateDeltaFromVec3(position,target);\n\t\tconst currentDelta = controls.getAzimuthalAngle();\n\t\tconst currentPolarAngle = controls.getPolarAngle();\n\t\tconst thetaLerp = new Lerp(currentDelta,currentDelta + delta);\n\t\tconst distanceLerp = new Lerp(trackballControls.minDistance,position.distanceTo(target));\n\t\tconst phiLerp = new Lerp(currentPolarAngle,spherical.phi);\n\t\t\n\t\ttransition.scale = 0;\n\t\ttransition.opacity = 1;\n\t\ttransition.active = true;\n\t\t\n\t\tgsap.to(controls.target,{\n\t\t\tx: target.x,\n\t\t\ty: target.y,\n\t\t\tz: target.z,\n\t\t\tduration: GSAPAnimationMixer.duration,\n\t\t\tease: GSAPAnimationMixer.ease\n\t\t});\n\t\t\n\t\tconst cameraProgress = {\n\t\t\tvalue: 0\n\t\t};\n\t\t\n\t\tconst dir = new Vector3();\n\t\t\n\t\tgsap.to(cameraProgress,{\n\t\t\tvalue: 1,\n\t\t\tduration: GSAPAnimationMixer.duration,\n\t\t\tease: GSAPAnimationMixer.ease,\n\t\t\tonUpdate: () => {\n\t\t\t\tif (cameraProgress.value < 0.5) {\n\t\t\t\t\ttransition.opacity = clamp(1 - cameraProgress.value,0.5,1);\n\t\t\t\t} else {\n\t\t\t\t\ttransition.opacity = clamp(cameraProgress.value,0.5,1);\n\t\t\t\t}\n\t\t\t\tcontrols.setAzimuthAngle(thetaLerp.lerp(cameraProgress.value));\n\t\t\t\tcontrols.setPolarAngle(phiLerp.lerp(cameraProgress.value));\n\t\t\t\tdir.subVectors(camera.position,controls.target);\n\t\t\t\tdir.normalize().setLength(distanceLerp.lerp(cameraProgress.value)).add(controls.target);\n\t\t\t\tcamera.position.copy(dir);\n\t\t\t},\n\t\t\tonComplete: () => {\n\t\t\t\ttransition.active = false;\n\t\t\t\tCameraCollision.prevent = false;\n\t\t\t\tthis.cachedOrbitControls.forEach((value,key) => {\n\t\t\t\t\tcontrols[key] = value;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.cachedTrackball.forEach((value,key) => {\n\t\t\t\t\ttrackballControls[key] = value;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tconfig.threejs.label.resize = this.cachedLabels.get('resize');\n\t\t\t}\n\t\t});\n\t\t\n\t}\n\t\n}\n","'use strict';\n\nimport { ObjectCore } from './ObjectCore';\nimport { SphereGeometry } from 'three';\n\nexport class Sphere extends ObjectCore{\n\n constructor (data,textureLoader) {\n const geometry = new SphereGeometry(5);\n\n super(data,geometry,textureLoader);\n\n this.objectType = 'Sphere';\n }\n\n}\n","'use strict';\n\n\nimport { DoubleSide, MathUtils, Matrix4, MeshBasicMaterial, Object3D, Quaternion, Spherical, Vector3 } from 'three';\nimport { Text } from '../../components/preloader/DreamsSlider/Text/Troika';\nimport { getCurrentLang } from '../../components/langSwitcher/langSwitcher';\nimport { threeJsVariables } from '../../../settings';\n\nconst spherical = new Spherical();\nconst direction = new Vector3();\nconst cameraDirection = new Vector3();\nconst target = new Vector3();\nconst matrix = new Matrix4();\nconst quaternion = new Quaternion();\n\nlet angle = 0;\nlet phi = 0;\nlet theta = 0;\nlet _phiAngle = 0;\nlet distance = 0;\n\nexport class Text3D extends Object3D{\n\n constructor (data) {\n super();\n\n this.position.fromArray(data.position);\n this.rotation.fromArray(data.rotation);\n this.scale.fromArray(data.scale);\n this.name = data.id;\n this.objectType = 'Text';\n\n this.translations = data.translations;\n this.rotations = data.rotations;\n this.hideDistance = data.hideDistance || 0;\n this.update = true;\n\n this.text = new Text();\n this.text.material = new MeshBasicMaterial({ side: DoubleSide});\n this.text.font = './fonts/assistant/Assistant-Regular.woff';\n Object.entries(data.options).forEach(([key,value]) => {\n if (value === null) {\n value = Infinity;\n }\n this.text[key] = value;\n });\n\n this.translateText();\n this.add(this.text);\n threeJsVariables.composer.addUpdatableElement(this);\n }\n\n translateText() {\n let translate = this.translations[getCurrentLang()];\n if (!translate) {\n translate = Object.values(this.translations)[0] || 'Default text';\n }\n this.text.text = translate;\n this.text.sync();\n }\n\n tick() {\n if (!this.update)\n return;\n\n if (this.hideDistance > 0) {\n distance = threeJsVariables.perspectiveCamera.position.distanceTo(this.position);\n if (distance > this.hideDistance) {\n this.visible = false;\n return;\n } else {\n this.visible = true;\n }\n } else {\n this.visible = true;\n }\n\n if (this.rotations.autoRotate) {\n phi = threeJsVariables.orbitControls.getPolarAngle();\n theta = threeJsVariables.orbitControls.getAzimuthalAngle();\n this.text.getWorldDirection(direction);\n spherical.setFromVector3(direction);\n\n if (this.rotations.longitude) {\n spherical.phi = phi;\n\n if (this.rotations.flip) {\n threeJsVariables.perspectiveCamera.getWorldDirection(cameraDirection);\n cameraDirection.setY(0);\n direction.setY(0);\n angle = MathUtils.radToDeg(direction.angleTo(cameraDirection));\n if (angle < 90) {\n spherical.theta = Math.PI + spherical.theta;\n }\n }\n }\n\n if (this.rotations.latitude) {\n spherical.theta = theta;\n }\n\n if (this.rotations.hide && (this.rotations.longitude || this.rotations.latitude)) {\n threeJsVariables.perspectiveCamera.getWorldDirection(cameraDirection);\n\n if (this.rotations.longitude && !this.rotations.latitude) {\n cameraDirection.setY(0);\n direction.setY(0);\n angle = MathUtils.radToDeg(direction.angleTo(cameraDirection));\n _phiAngle = MathUtils.radToDeg(Math.abs(phi));\n this.visible = !(angle > 70 && angle < 120 && (_phiAngle > 30 && _phiAngle < 120));\n }\n\n if (this.rotations.latitude && !this.rotations.longitude) {\n angle = MathUtils.radToDeg(direction.angleTo(cameraDirection));\n this.visible = angle >= 120;\n }\n\n } else if (!this.visible) {\n this.visible = true;\n }\n\n target.setFromSpherical(spherical);\n matrix.lookAt(target,this.text.position,this.text.up);\n this.text.quaternion.setFromRotationMatrix(matrix);\n matrix.extractRotation(this.matrixWorld);\n quaternion.setFromRotationMatrix(matrix);\n this.text.quaternion.premultiply(quaternion.invert());\n }\n }\n\n visibilityToggle(state) {\n if (state) {\n this.visible = true;\n this.update = true;\n } else {\n this.update = false;\n this.visible = false;\n }\n }\n\n}\n","'use strict';\n\nexport class RenderList {\n #active = config.threejs.renderList?.active || false;\n #list = config.threejs.renderList?.list || [];\n\n constructor (scene,renderer) {\n this.sortType = renderer.sortObjects ? 'renderOrder': 'order';\n this.scene = scene;\n }\n\n reorder() {\n if (!this.#list.length || !this.#active) return;\n\n this.#list.forEach(el => {\n const onScene = this.scene.getObjectByName(el.name);\n if (onScene) {\n if (this.sortType === 'order'){\n const parent = onScene.parent;\n const currentPosition = parent.children.indexOf(onScene);\n if (currentPosition !== -1 && currentPosition !== el.order){\n const target = parent.children[el.order];\n if (target) {\n parent.children[el.order] = onScene;\n parent.children[currentPosition] = target;\n }\n }\n } else {\n onScene.renderOrder = el.order;\n }\n }\n });\n }\n}\n","'use strict';\n\n\nimport {Buildings, isMobile, settingsData, threeJsVariables} from \"../../settings\";\nimport {Loader} from \"./loader/Loader\";\nimport { Vector3, Mesh, PlaneGeometry, CanvasTexture, MeshStandardMaterial, CylinderGeometry, Raycaster, Box3, Vector2, RepeatWrapping } from \"three\";\nimport { degToRad, euclideanModulo } from \"three/src/math/MathUtils.js\";\nimport { getCurrentLang, getCurrentLangDirection } from \"../components/langSwitcher/langSwitcher\";\nimport { Object3D } from \"three\";\n\n\nexport class SalesPlane {\n\n\tstatic scope = null;\n\n\tconstructor() {\n\t\tthis.cameraAngle = euclideanModulo(-threeJsVariables.perspectiveCamera.rotation.y + degToRad(270), Math.PI * 2);\n\t\tthis.angle = this.cameraAngle + degToRad(70);\n\t\tthis.radius = 300;\n\t\tthis.height = 100;\n\t\tthis.speed = 0.002;\n\t\tthis.scale = 6;\n\t\tthis.angleWings = degToRad(30);\n\t\tthis.propellerSpeed = 1.2;\n\t\tthis.planeScene = new Object3D();\n\t\tthis.bannerHeight = 5;\n\t\tthis.distance = 0;\n\t\tthis.messageIndex = 0;\n\t\tthis.canvas = document.createElement('canvas');\n\t\tthis.planeMesh = null;\n\t\tthis.propellerMesh = null;\n\t\tthis.bannerMesh = null;\n\t\tthis.bannerSegments = null;\n\t\tthis.visible = true;\n\t\tthis.direction = null;\n\t\tthis.tickPlaneAnimation = this.tickCircleAnimation.bind(this);\n\t\tSalesPlane.scope = this;\n\t\tthis.setHeight();\n\t\tthis.#setup();\n\t}\n\n\tsetHeight() {\n\t\tlet buildingsArray = Buildings.getBuildingsArray();\n const boundingBox = new Box3();\n buildingsArray.forEach(building => {\n const mesh = building.instances[0];\n mesh.updateMatrixWorld(true);\n const bBox = new Box3().setFromObject(mesh);\n boundingBox.union(bBox);\n });\n\t\tconst boxSize = new Vector3();\n const size = boundingBox.getSize(boxSize);\n\n\t\tconst screenTop = new Vector2(0, 1);\n\t\tconst raycaster = new Raycaster();\n\t\traycaster.setFromCamera(screenTop, threeJsVariables.perspectiveCamera);\n\t\tconst rayDir = raycaster.ray.direction.clone().normalize();\n\t\tconst origin = raycaster.ray.origin.clone();\n\t\tlet t = 0;\n\t\tlet step = 1;\n\t\tlet point = new Vector3().copy(origin);\n\t\twhile ( Math.pow(point.x, 2) + Math.pow(point.z, 2) < Math.pow(this.radius, 2) ) {\n\t\t\tpoint.copy(rayDir).multiplyScalar(t).add(origin);\n\t\t\tt += step;\n\t\t}\n\t\tpoint.y -= 10;\n\t\t(point.y < size.y) ?\n\t\t\tthis.height = size.y:\n\t\t\tthis.height = (size.y + point.y) / 2;\n\t}\n\n\t#setup() {\n\t\tconst loader = new Loader();\n\t\tconst draco = loader.dracoLoader;\n\t\tdraco.load('/assets/model/plane.glb', (gltf) => {\n\t\t\tthis.planeMesh = gltf.scene;\n\t\t\tthis.propellerMesh = this.planeMesh.getObjectByName('Cessna_Exterior_Body_MAT_0001');\n\n\t\t\tthis.planeMesh.traverse(el => {\n\t\t\t\tif (el.isMesh) {\n\t\t\t\t\tel.rotateY(degToRad(90));\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.planeMesh.rotation.x = this.angleWings;\n\n this.canvas.width = 1840;\n this.canvas.height = 200;\n\n\t\t\tconst texture = new CanvasTexture(this.canvas);\n\t\t\ttexture.wrapS = RepeatWrapping;\n\n\t\t\tconst bannerWidth = this.bannerHeight / this.canvas.height * this.canvas.width;\n\t\t\tthis.bannerSegments = Math.floor(bannerWidth * 0.5);\n const bannerGeometry = new PlaneGeometry(bannerWidth, this.bannerHeight, this.bannerSegments, 2);\n\n\t\t\tbannerGeometry.attributes.position.array[3 * ((this.bannerSegments + 1) * 0 + this.bannerSegments) + 0] += this.bannerHeight * 0.5;\n\t\t\tbannerGeometry.attributes.position.array[3 * ((this.bannerSegments + 1) * 2 + this.bannerSegments) + 0] += this.bannerHeight * 0.5;\n\n const bannerMaterial = new MeshStandardMaterial({ map: texture, side: 2 });\n this.bannerMesh = new Mesh(bannerGeometry, bannerMaterial);\n\n\t\t\tthis.bannerMesh.position.x = bannerWidth * 0.5;\n\t\t\tthis.planeScene.add(this.bannerMesh);\n\t\t\tthis.planeScene.scale.set(this.scale, this.scale, this.scale);\n\t\t\tthis.planeScene.position.y = this.height;\n\t\t\tthis.planeScene.visible = false;\n\n\t\t\tthis.#addRopes();\n\t\t\tthis.messageIndex = -1;\n\t\t\tthis.drawNextMessage();\n\n\t\t\t// this.canvas.style['position'] = 'absolute';\n\t\t\t// this.canvas.style['z-index'] = '100';\n\t\t\t// this.canvas.style['bottom'] = '0';\n\t\t\t// document.querySelector('#app').append(this.canvas);\n\n\t\t\t\n\t\t\tthis.planeScene.add(this.planeMesh);\n\t\t\tthreeJsVariables.scene.add(this.planeScene);\n\n\t\t\tconst interval = setInterval(() => {\n\t\t\t\tif (!document.querySelector('.mc_id__consolto-anchor')) {\n\t\t\t\t\tclearInterval(interval);\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.changeLanguage();\n\t\t\t\t\t\tthis.updateVisibility();\n\t\t\t\t\t\tthreeJsVariables.composer.addUpdatableElement(this);\n\t\t\t\t\t}, 2000);\n\t\t\t\t}\n\t\t\t}, 500);\n\t\t}, undefined, (error) => {\n\t\t\tconsole.error('An error occurred loading the model:', error);\n\t\t});\n\t}\n\n\ttick() {\n\t\tthis.tickPlaneAnimation();\n\t\tthis.tickPropellerAnimation();\n\t\tthis.tickBannerAnimation();\n\t}\n\t\n\ttickCircleAnimation() {\n\t\tthis.angle -= this.speed;\n\t\tconst angle = (this.direction === 'rtl') ? this.cameraAngle * 2 - this.angle : this.angle;\n\t\tthis.planeScene.position.x = this.radius * Math.cos(angle);\n\t\tthis.planeScene.position.z = this.radius * Math.sin(angle);\n\t\t\n\t\tthis.planeScene.rotation.y = -angle - degToRad(90);\n\t\t\n\t\tif (this.angle < this.cameraAngle - degToRad(270)) {\n\t\t\tthis.angle += Math.PI * 2;\n\t\t\tif (!this.drawNextMessage()) {\n\t\t\t\tthis.tickPlaneAnimation = this.tickFlyAwayAnimation.bind(this);\n\t\t\t}\n\t\t}\n\t}\n\t\n\ttickPropellerAnimation() {\n\t\tthis.propellerMesh.rotation.x += this.propellerSpeed;\n\t}\n\n\ttickFlyAwayAnimation() {\n\t\tthis.distance += this.radius * this.speed;\n\t\tconst angle = (this.direction === 'rtl') ? this.cameraAngle * 2 - this.angle : this.angle;\n\t\tthis.planeScene.position.x = this.radius * Math.cos(angle) + this.distance * Math.sin(this.angle);\n\t\tthis.planeScene.position.z = this.radius * Math.sin(angle) - this.distance * Math.cos(this.angle);\n\t\tthis.planeScene.rotation.y = -angle - degToRad(90);\n\t\tif (this.planeMesh.rotation.x > degToRad(-20))\n\t\t\tthis.planeMesh.rotation.x -= this.speed;\n\t\tif (this.planeScene.position.x * this.planeScene.position.x +\n\t\t\tthis.planeScene.position.z * this.planeScene.position.z > 1000 * 1000)\n\t\t\tthis.dispose();\n\t}\n\n\ttickBannerAnimation() {\n\t\tconst time = Date.now() * 0.002;\n\t\tconst vertices = this.bannerMesh.geometry.attributes.position.array;\n\t\tfor (let i = 0; i < vertices.length; i += 3) {\n\t\t\tconst x = vertices[i];\n\t\t\tconst y = (1 - Math.floor(i / 3 / (this.bannerSegments + 1))) * this.bannerHeight * 0.5 + 1.71;\n\t\t\tvertices[i + 1] = y;\n\t\t\tif (i % (3 * (this.bannerSegments + 1)) !== 0) {\n\t\t\t\tvertices[i + 1] += Math.sin(-x / 2 + time) * 0.15;\n\t\t\t\tvertices[i + 2] = 0.15 + Math.sin(-x / 2 + time) * 0.8;\n\t\t\t}\n\t\t}\n\t\tthis.bannerMesh.geometry.attributes.position.needsUpdate = true;\n\t}\n\n\tdrawNextMessage() {\n\t\tdo {\n\t\t\tthis.messageIndex++;\n\t\t\tif (this.messageIndex >= config['crmProjectSettings']['sales'].length) {\n\t\t\t\tthis.messageIndex--;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (config['crmProjectSettings']['sales'][this.messageIndex].active) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} while (true);\n\t\tthis.redrawCanvas();\n\t\treturn true;\n\t}\n\n\t#addRopes() {\n\t\tconst ropeMaterial = new MeshStandardMaterial({ color: 0xc4af96 });\n\n\t\tfunction createRope(length, addTo) {\n\t\t\tconst radius = 0.04;\n\t\t\tconst ropeGeometry = new CylinderGeometry(radius, radius, length, 6);\n\t\t\tconst rope = new Mesh(ropeGeometry, ropeMaterial);\n\t\t\trope.geometry.translate(0, -length / 2, 0);\n\t\t\taddTo.add(rope);\n\t\t\treturn rope;\n\t\t}\n\n\t\tconst firstRopeLength = 5;\n\t\tconst firstRope = createRope(firstRopeLength, this.planeScene);\n\t\tfirstRope.rotation.z = Math.PI / 2;\n\t\tfirstRope.position.set(5.0, 1.71, 0.15);\n\n\t\tconst secondRopeLength = 4.5;\n\t\tconst secondRope = createRope(secondRopeLength, this.planeScene);\n\t\tsecondRope.rotation.set(0, 0, Math.PI / 2 + Math.asin(this.bannerHeight / 2 / secondRopeLength));\n\t\tsecondRope.position.set(5.0 + firstRopeLength, 1.71, 0.15);\n\n\t\tconst thirdRope = createRope(secondRopeLength, this.planeScene);\n\t\tthirdRope.rotation.set(0, 0, Math.PI / 2 + -Math.asin(this.bannerHeight / 2 / secondRopeLength));\n\t\tthirdRope.position.set(5.0 + firstRopeLength, 1.71, 0.15);\n\n\t\tthis.bannerMesh.position.x += 5 + firstRopeLength + Math.sqrt(secondRopeLength * secondRopeLength - this.bannerHeight * this.bannerHeight / 4);\n\t}\n\n\tredrawCanvas() {\n\t\tconst ctx = this.canvas.getContext('2d');\n\n\t\tctx.fillStyle = '#f1e8de';\n\t\tctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n\n\t\tctx.fillStyle = '#db341a';\n\t\tctx.textAlign = 'center';\n\t\tctx.textBaseline = 'middle';\n\t\tctx.font = '130px Brush Script MT';\n\t\tctx.fillText(config['crmProjectSettings']['sales'][this.messageIndex].text[getCurrentLang()], this.canvas.width / 2, this.canvas.height / 2);\n\t\tthis.bannerMesh.material.map.needsUpdate = true;\n\t\tthis.bannerMesh.material.map.repeat.x = (getCurrentLangDirection() === 'rtl') ? -1 : 1;\n\t}\n\n\thide() {\n\t\tthis.visible = false;\n\t\tthis.updateVisibility();\n\t}\n\n\tshow() {\n\t\tthis.visible = true;\n\t\tthis.updateVisibility();\n\t}\n\n\tupdateVisibility(visible = this.visible) {\n\t\tif (this.planeScene)\n\t\t\tthis.planeScene.visible = visible;\n\t}\n\n\tchangeLanguage() {\n\t\tthis.direction = getCurrentLangDirection();\n\t\tif (!this.direction) return;\n\t\tthis.planeScene.scale.x = (this.direction === 'rtl') ? -this.scale : this.scale;\n\t\tthis.redrawCanvas();\n\t}\n\n\tstatic canActivate() {\n\t\treturn ( 'sales' in config['crmProjectSettings'] && config['crmProjectSettings']['sales'].length > 0 && !isMobile );\n\t}\n\t\n\tdispose() {\n\t\tthreeJsVariables.composer.removeUpdatableElement(this);\n\t\tthis.planeScene.removeFromParent();\n\t\tthis.planeScene.traverse(el => {\n\t\t\tif (el.isMesh) {\n\t\t\t\tel.geometry.dispose();\n\t\t\t\tel.material.dispose();\n\t\t\t}\n\t\t});\n\t\t\n\t\tPromise.resolve()\n\t\t\t.then(() => {\n\t\t\t\tthis.cameraAngle = null;\n\t\t\t\tthis.angle = null;\n\t\t\t\tthis.radius = null;\n\t\t\t\tthis.height = null;\n\t\t\t\tthis.speed = null;\n\t\t\t\tthis.scale = null;\n\t\t\t\tthis.angleWings = null;\n\t\t\t\tthis.propellerSpeed = null;\n\t\t\t\tthis.planeScene = null;\n\t\t\t\tthis.distance = null;\n\t\t\t\tthis.planeMesh = null;\n\t\t\t\tthis.propellerMesh = null;\n\t\t\t\tthis.bannerMesh = null;\n\t\t\t\tthis.bannerHeight = null;\n\t\t\t\tthis.bannerSegments = null;\n\t\t\t\tthis.messageIndex = null;\n\t\t\t\tthis.canvas = null;\n\t\t\t\tthis.visible = true;\n\t\t\t\tthis.direction = null;\n\t\t\t\tthis.tickPlaneAnimation = null;\n\t\t\t\tSalesPlane.scope = null;\n\t\t\t});\n\t}\n}\n","'use strict';\n\nimport {\n\tBox3, DoubleSide,\n\tExtrudeGeometry,\n\tMesh,\n\tMeshBasicMaterial,\n\tShape, Spherical,\n\tVector3,\n} from 'three';\nimport { EXTRUDE_SETTINGS, FLOOR_HEIGHT, SCHEMATIC_SCALE } from './SchematicBuildingModel';\nimport { Polygon } from '../../../libs/Polygon';\nimport { polyLabel } from '../../../libs/PolyLabel';\nimport { Text } from '../../components/preloader/DreamsSlider/Text/Troika';\n\nconst _axis = new Vector3(1,0,0);\n\nexport class Apartment {\n\tconstructor (points,props) {\n\t\tthis.points = removeDuplicate(points);\n\t\tthis.props = props;\n\t\tthis.holes = [];\n\t\tthis.mesh = null;\n\t\tthis.outPath = null;\n\t}\n\t\n\tcreateMesh() {\n\t\tconst _halfFloor = FLOOR_HEIGHT / 2;\n\t\t\n\t\tconst poly = new Polygon(this.points);\n\t\tpoly.offset(-0.3,1);\n\t\tconst points = poly.getPoints();\n\n\t\tconst polyArray = this.points.map(vec => vec.toArray());\n\n\t\tconst label = polyLabel([polyArray]);\n\t\tconst centroid = new Vector3(label[0],label[1],0);\n\t\tcentroid.multiplyScalar(SCHEMATIC_SCALE);\n\t\tcentroid.applyAxisAngle(_axis,-Math.PI / 2);\n\t\tcentroid.y = 0;\n\n\t\tconst shape = new Shape(points);\n\t\tshape.holes = this.holes;\n\t\t\n\t\tconst geometry = new ExtrudeGeometry(shape,EXTRUDE_SETTINGS);\n\t\tgeometry.rotateX(-Math.PI / 2);\n\t\tgeometry.scale(SCHEMATIC_SCALE,1,SCHEMATIC_SCALE);\n\t\tgeometry.computeBoundingBox();\n\t\tconst center = new Vector3();\n\t\tgeometry.boundingBox.getCenter(center);\n\t\tcenter.y = 0;\n\t\tconst labelPos = new Vector3();\n\t\t\n\t\tif (this.holes.length) {\n\t\t\tconst shapeV3 = points.map(vec2 => new Vector3(vec2.x,0,vec2.y).multiplyScalar(SCHEMATIC_SCALE));\n\t\t\tconst shapeSize = new Vector3();\n\t\t\tconst holeSize = new Vector3();\n\t\t\tconst boxHoles = new Box3();\n\t\t\tconst boxShape = new Box3();\n\t\t\tconst {holes} = shape.extractPoints();\n\t\t\tconst holesV3 = holes[0].map(vec2 => new Vector3(vec2.x,0,vec2.y).multiplyScalar(SCHEMATIC_SCALE));\n\t\t\tboxHoles.setFromPoints(holesV3);\n\t\t\tboxHoles.getSize(holeSize);\n\t\t\tboxShape.setFromPoints(shapeV3);\n\t\t\tboxShape.getSize(shapeSize);\n\t\t\tlabelPos.x = (shapeSize.x / 2 + holeSize.x / 2) / 2;\n\t\t}\n\t\tconst geoPosition = new Vector3().subVectors(center,centroid).sub(labelPos);\n\n\t\tgeometry.center();\n\t\tgeometry.translate(geoPosition.x,_halfFloor,geoPosition.z);\n\n\t\tconst material = new MeshBasicMaterial({color: '#ffdada',transparent: true,\n\t\t\topacity: 1,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: true});\n\t\tthis.mesh = new Mesh(geometry,material);\n\t\tthis.mesh.position.copy(centroid).add(labelPos);\n\t\tthis.mesh.name = this.props.engineId;\n\t\t\n\t\tconst curvesLength = this.outPath.curves.map(curve => curve.v1.distanceTo(curve.v2));\n\t\tconst maxLength = Math.max(...curvesLength);\n\t\tconst curveIndex = curvesLength.indexOf(maxLength);\n\t\tconst curve = this.outPath.curves[curveIndex];\n\t\t\n\t\tconst curveStart = new Vector3().set(curve.v1.x,curve.v1.y,0);\n\t\tcurveStart.applyAxisAngle(_axis,-Math.PI / 2);\n\t\tcurveStart.multiplyScalar(SCHEMATIC_SCALE);\n\t\tcurveStart.y = _halfFloor;\n\t\t\n\t\tconst curveEnd = new Vector3().set(curve.v2.x,curve.v2.y,0);\n\t\tcurveEnd.applyAxisAngle(_axis,-Math.PI / 2);\n\t\tcurveEnd.multiplyScalar(SCHEMATIC_SCALE);\n\t\tcurveEnd.y = _halfFloor;\n\t\t\n\t\tconst curveCenter = curve.getPoint(0.5);\n\t\tconst vec3 = new Vector3().set(curveCenter.x,curveCenter.y,0);\n\t\tvec3.applyAxisAngle(_axis,-Math.PI / 2);\n\t\tvec3.multiplyScalar(SCHEMATIC_SCALE);\n\t\tvec3.y = _halfFloor;\n\t\t\n\t\tthis.mesh.worldToLocal(vec3);\n\t\tconst text = new Text();\n\t\ttext.material = new MeshBasicMaterial({ side: DoubleSide});\n\t\ttext.fontSize = 2;\n\t\ttext.color = '#ffffff';\n\t\ttext.anchorX = 'center';\n\t\ttext.anchorY = 'middle';\n\t\ttext.font = './fonts/assistant/Assistant-Regular.woff';\n\t\ttext.text = this.props.propNum;\n\t\ttext.position.copy(vec3);\n\t\ttext.name = 'AptNum';\n\t\ttext.visible = false;\n\t\tthis.mesh.add(text);\n\t\tconst direction = new Vector3().subVectors(curveStart,curveEnd).normalize();\n\t\tconst spherical = new Spherical().setFromVector3(direction);\n\t\ttext.rotation.y = spherical.theta - Math.PI / 2;\n\t\ttext.sync();\n\t\t\n\n\t\treturn this.mesh;\n\t}\n}\n\nfunction removeDuplicate (points) {\n\tconst uniquePoints = new Set();\n\tconst result = [];\n\t\n\tpoints.forEach(point => {\n\t\tif (![...uniquePoints].some(p => p.equals(point))) {\n\t\t\tuniquePoints.add(point);\n\t\t\tresult.push(point);\n\t\t}\n\t});\n\t\n\tresult.push(result[0]);\n\t\n\treturn result;\n}\n","'use strict';\n\nimport { Vector2 } from 'three';\n\nexport class BuildingShape {\n\t\n\tstatic square() {\n\t\treturn [\n\t\t\tnew Vector2(60,-60),\n\t\t\tnew Vector2(240,-60),\n\t\t\tnew Vector2(240,-240),\n\t\t\tnew Vector2(60,-240),\n\t\t\tnew Vector2(60,-60),\n\t\t]\n\t}\n\t\n\tstatic corner() {\n\t\treturn [\n\t\t\tnew Vector2(60,-60),\n\t\t\tnew Vector2(240,-60),\n\t\t\tnew Vector2(240,-270),\n\t\t\tnew Vector2(150,-270),\n\t\t\tnew Vector2(150,-150),\n\t\t\tnew Vector2(60,-150),\n\t\t\tnew Vector2(60,-60),\n\t\t]\n\t}\n\t\n\tstatic rectangle() {\n\t\treturn [\n\t\t\tnew Vector2(60,-60),\n\t\t\tnew Vector2(240,-60),\n\t\t\tnew Vector2(240,-180),\n\t\t\tnew Vector2(60,-180),\n\t\t\tnew Vector2(60,-60),\n\t\t]\n\t}\n\t\n\tstatic circle() {\n\t\tconst radius = 500 / Math.PI / 2;\n\t\tconst segments = Math.floor(radius);\n\t\tconst step = Math.PI * 2 / segments;\n\t\tlet angle = 0;\n\t\tconst points = [];\n\t\t\n\t\tfor (let i = 0; i < segments; i++) {\n\t\t\tpoints.push(new Vector2(radius * Math.cos(angle),radius * Math.sin(angle)));\n\t\t\tangle -= step;\n\t\t}\n\t\t\n\t\treturn points;\n\t}\n}\n","'use strict';\n\nconst FACING = {\n\t\"דרום\": {\n\t\t\"en\": \"South\",\n\t\t\"ru\": \"\",\n\t\t\"he\": \"דרום\"\n\t},\n\t\n\t\"צפון\": {\n\t\t\"en\": \"North\",\n\t\t\"ru\": \"\",\n\t\t\"he\": \"צפון\"\n\t},\n\t\"מזרח\": {\n\t\t\"en\": \"East\",\n\t\t\"ru\": \"\",\n\t\t\"he\": \"מזרח\"\n\t},\n\t\n\t\"מערב\": {\n\t\t\"en\": \"West\",\n\t\t\"ru\": \"\",\n\t\t\"he\": \"מער\"\n\t}\n};\n\n\nexport class Facing {\n\tstatic parse(data) {\n\t\tconst facing = data.facing.split(/,|-/);\n\t\tconst unique = [...new Set(facing)];\n\t\tunique.forEach((face,index) => {\n\t\t\tunique[index] = FACING[face].en\n\t\t});\n\t\tdata.facing = unique;\n\t\t\n\t\tconst facingInLine = data.facing.join('');\n\t\tlet order = null;\n\t\t\n\t\tswitch (facingInLine) {\n\t\t\tcase 'WestNorth':\n\t\t\tcase 'NorthWest':\n\t\t\t\torder = 0;\n\t\t\t\tbreak;\n\t\t\tcase 'EastNorth':\n\t\t\tcase 'NorthEast':\n\t\t\t\torder = 2;\n\t\t\t\tbreak;\n\t\t\tcase 'WestSouth':\n\t\t\tcase 'SouthWest':\n\t\t\t\torder = 6;\n\t\t\t\tbreak;\n\t\t\tcase 'EastSouth':\n\t\t\tcase 'SouthEast':\n\t\t\t\torder = 4;\n\t\t\t\tbreak;\n\t\t\tcase 'WestNorthEast':\n\t\t\tcase 'NorthWestEast':\n\t\t\tcase 'NorthEastWest':\n\t\t\tcase 'WestEastNorth':\n\t\t\tcase 'EastWestNorth':\n\t\t\tcase 'EastNorthWest':\n\t\t\t\torder = 1;\n\t\t\t\tbreak;\n\t\t\tcase 'NorthEastSouth':\n\t\t\tcase 'NorthSouthEast':\n\t\t\tcase 'EastNorthSouth':\n\t\t\tcase 'EastSouthNorth':\n\t\t\tcase 'SouthEastNorth':\n\t\t\tcase 'SouthNorthEast':\n\t\t\t\torder = 3;\n\t\t\t\tbreak;\n\t\t\tcase 'SouthWestNorth':\n\t\t\tcase 'SouthNorthWest':\n\t\t\tcase 'WestSouthNorth':\n\t\t\tcase 'WestNorthSouth':\n\t\t\tcase 'NorthSouthWest':\n\t\t\tcase 'NorthWestSouth':\n\t\t\t\torder = 7;\n\t\t\t\tbreak;\n\t\t\tcase 'WestSouthEast':\n\t\t\tcase 'WestEastSouth':\n\t\t\tcase 'EastSouthWest':\n\t\t\tcase 'EastWestSouth':\n\t\t\tcase 'SouthEastWest':\n\t\t\tcase 'SouthWestEast':\n\t\t\t\torder = 5;\n\t\t\t\tbreak;\n\t\t\tcase 'North':\n\t\t\t\torder = 1;\n\t\t\t\tbreak;\n\t\t\tcase 'West':\n\t\t\t\torder = 7;\n\t\t\t\tbreak;\n\t\t\tcase 'South':\n\t\t\t\torder = 5;\n\t\t\t\tbreak;\n\t\t\tcase 'East':\n\t\t\t\torder = 3;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\torder = 8;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\tdata.facingOrder = order;\n\t}\n\t\n\tstatic startCheckpointT(apt) {\n\t\tconst facingInLine = apt.facing.join('');\n\t\tconst half = 1 / 2;\n\t\tconst quarter = 1 / 4;\n\t\tconst octet = 1 / 8;\n\t\t\n\t\tlet t = null;\n\t\t\n\t\tswitch (facingInLine) {\n\t\t\tcase 'WestNorth':\n\t\t\tcase 'NorthWest':\n\t\t\t\tt = 0;\n\t\t\t\tbreak;\n\t\t\tcase 'EastNorth':\n\t\t\tcase 'NorthEast':\n\t\t\t\tt = quarter;\n\t\t\t\tbreak;\n\t\t\tcase 'WestSouth':\n\t\t\tcase 'SouthWest':\n\t\t\t\tt = half + quarter;\n\t\t\t\tbreak;\n\t\t\tcase 'EastSouth':\n\t\t\tcase 'SouthEast':\n\t\t\t\tt = half;\n\t\t\t\tbreak;\n\t\t\tcase 'WestNorthEast':\n\t\t\tcase 'NorthWestEast':\n\t\t\tcase 'NorthEastWest':\n\t\t\tcase 'WestEastNorth':\n\t\t\tcase 'EastWestNorth':\n\t\t\tcase 'EastNorthWest':\n\t\t\t\tt = octet;\n\t\t\t\tbreak;\n\t\t\tcase 'NorthEastSouth':\n\t\t\tcase 'NorthSouthEast':\n\t\t\tcase 'EastNorthSouth':\n\t\t\tcase 'EastSouthNorth':\n\t\t\tcase 'SouthEastNorth':\n\t\t\tcase 'SouthNorthEast':\n\t\t\t\tt = quarter + octet;\n\t\t\t\tbreak;\n\t\t\tcase 'SouthWestNorth':\n\t\t\tcase 'SouthNorthWest':\n\t\t\tcase 'WestSouthNorth':\n\t\t\tcase 'WestNorthSouth':\n\t\t\tcase 'NorthSouthWest':\n\t\t\tcase 'NorthWestSouth':\n\t\t\t\tt = 1 - octet;\n\t\t\t\tbreak;\n\t\t\tcase 'WestSouthEast':\n\t\t\tcase 'WestEastSouth':\n\t\t\tcase 'EastSouthWest':\n\t\t\tcase 'EastWestSouth':\n\t\t\tcase 'SouthEastWest':\n\t\t\tcase 'SouthWestEast':\n\t\t\t\tt = half + octet;\n\t\t\t\tbreak;\n\t\t\tcase 'North':\n\t\t\t\tt = octet;\n\t\t\t\tbreak;\n\t\t\tcase 'West':\n\t\t\t\tt = 1 - octet;\n\t\t\t\tbreak;\n\t\t\tcase 'South':\n\t\t\t\tt = half + octet;\n\t\t\t\tbreak;\n\t\t\tcase 'East':\n\t\t\t\tt = quarter + octet;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tt = 0;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\treturn t;\n\t}\n\t\n\tstatic sort(apartments) {\n\t\tapartments.sort((a,b) => a.facingOrder - b.facingOrder);\n\t}\n\t\n}\n","'use strict';\n\n\nimport {\n\tBox3, BoxGeometry, DoubleSide,\n\tExtrudeGeometry,\n\tGroup,\n\tMesh,\n\tMeshBasicMaterial, Path,\n\tShape, Spherical,\n\tVector2, Vector3,\n} from 'three';\n\nimport { Apartment } from './Apartment';\nimport { EXTRUDE_SETTINGS, FLOOR_HEIGHT, SCHEMATIC_SCALE } from './SchematicBuildingModel';\nimport { Polygon } from '../../../libs/Polygon';\nimport { BuildingShape } from './BuildingShape';\nimport { isPerpendicularLines } from '../../../functions';\nimport { polyLabel } from '../../../libs/PolyLabel';\nimport { Facing } from './Facing';\n// import Worker from '../Worker/apt.worker';\n\nconst MIN_DISTANCE = 15;\n\nexport class Floor {\n\tconstructor (floorData,scope) {\n\t\tthis.floorData = floorData;\n\t\t// this.maxSpace = maxSpace;\n\t\tthis.bboxSpace = scope.maxTotalSpace;\n\t\tthis.maxSpace = this.floorData.totalSpace;\n\t\tthis.buildingScope = scope;\n\t\tthis.shape = scope.schematicScope.shape;\n\t\tthis.maxApartments = scope.maxApartmentsOnTheFloor;\n\t\tthis.useExposure = this.floorData.apartments.every(el => el.facing.length);\n\t\t\n\t\t// this.worker = new Worker();\n\t\t// this.worker.addEventListener('message',this.#workerResponse.bind(this));\n\t\tthis.sizeIn = 0;\n\t\t\n\t\tswitch (this.floorData.type) {\n\t\t\tcase 'custom':\n\t\t\tcase 'corner':\n\t\t\t\tthis.sizeIn = -this.maxSpace / 14;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.sizeIn = 0.5;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\tif (this.useExposure) {\n\t\t\tthis.floorData.apartments.forEach(apt => Facing.parse(apt));\n\t\t\tFacing.sort(this.floorData.apartments);\n\t\t}\n\t\t\n\t\tconst fit = this.buildingScope.schematicScope.advancedSettings.fit;\n\t\t\n\t\tif (fit) {\n\t\t\tthis.maxSpace = this.bboxSpace;\n\t\t\tif (this.floorData.apartments.length === this.maxApartments) {\n\t\t\t\tconst diff = (this.maxSpace - this.floorData.totalSpace) / this.floorData.apartments.length;\n\t\t\t\tthis.floorData.apartments.forEach(apt => apt.schematicSize += diff);\n\t\t\t}\n\t\t}\n\n\t\t// if (this.floorData.apartments.length === this.maxApartments) {\n\t\t// \tconst diff = (this.maxSpace - this.floorData.totalSpace) / this.floorData.apartments.length;\n\t\t// \tthis.floorData.apartments.forEach(apt => apt.schematicSize += diff);\n\t\t// }\n\n\t\tthis.group = new Group();\n\t\tthis.group.name = `F_${floorData.floor}`;\n\n\t\tthis.polygons = {\n\t\t\tin: null,\n\t\t\tout: null,\n\t\t\tbbox: null\n\t\t};\n\n\t\tthis.apartments = [];\n\t\t\n\t\tif (this.maxSpace === 0 || this.floorData.apartments.every(apt => apt.schematicSize === 0)){\n\t\t\tthis.floorData.apartments.forEach(apt => {\n\t\t\t\tconst plug = new Mesh(new BoxGeometry(0.01,0.01,0.01));\n\t\t\t\tplug.name = apt.engineId;\n\t\t\t\tthis.group.add(plug);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\t\n\n\t\tthis.createPolygons();\n\t\tthis.align();\n\t\tthis.createApartments();\n\t}\n\t\n\talign() {\n\t\tconst align = this.buildingScope.schematicScope.advancedSettings.align;\n\t\tif (align === 'Center')\n\t\t\treturn;\n\t\t\n\t\tconst floorSizes = this.getSizes(false);\n\t\tconst difference = floorSizes.bbox.x / 2 + floorSizes.floor.x / 2;\n\t\t\n\t\tswitch (align) {\n\t\t\tcase 'West':\n\t\t\t\tthis.polygons.out.moveToCenter(new Vector2(difference,0));\n\t\t\t\tthis.polygons.in.moveToCenter(new Vector2(difference,0));\n\t\t\t\tbreak;\n\t\t\tcase 'East':\n\t\t\t\tthis.polygons.out.moveToCenter(new Vector2(-difference,0));\n\t\t\t\tthis.polygons.in.moveToCenter(new Vector2(-difference,0));\n\t\t\t\tbreak;\n\t\t\tcase 'North':\n\t\t\t\tthis.polygons.out.moveToCenter(new Vector2(0,-difference));\n\t\t\t\tthis.polygons.in.moveToCenter(new Vector2(0,-difference));\n\t\t\t\tbreak;\n\t\t\tcase 'South':\n\t\t\t\tthis.polygons.out.moveToCenter(new Vector2(0,difference));\n\t\t\t\tthis.polygons.in.moveToCenter(new Vector2(0,difference));\n\t\t\t\tbreak;\n\t\t\tcase 'NorthWest':\n\t\t\t\tthis.polygons.out.moveToCenter(new Vector2(difference,-difference));\n\t\t\t\tthis.polygons.in.moveToCenter(new Vector2(difference,-difference));\n\t\t\t\tbreak;\n\t\t\tcase 'NorthEast':\n\t\t\t\tthis.polygons.out.moveToCenter(new Vector2(-difference,-difference));\n\t\t\t\tthis.polygons.in.moveToCenter(new Vector2(-difference,-difference));\n\t\t\t\tbreak;\n\t\t\tcase 'SouthEast':\n\t\t\t\tthis.polygons.out.moveToCenter(new Vector2(-difference,difference));\n\t\t\t\tthis.polygons.in.moveToCenter(new Vector2(-difference,difference));\n\t\t\t\tbreak;\n\t\t\tcase 'SouthWest':\n\t\t\t\tthis.polygons.out.moveToCenter(new Vector2(difference,difference));\n\t\t\t\tthis.polygons.in.moveToCenter(new Vector2(difference,difference));\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t}\n\t\n\tgetBoxes(useScale) {\n\t\tconst floorPoints = this.polygons.out.getPoints();\n\t\tconst maxPoints = this.polygons.bbox.getPoints();\n\t\tlet floorPointsV3;\n\t\tlet maxPointsV3;\n\t\tif (useScale) {\n\t\t\tfloorPointsV3 = floorPoints.map(vec2 => new Vector3(vec2.x,0,vec2.y).multiplyScalar(SCHEMATIC_SCALE));\n\t\t\tmaxPointsV3 = maxPoints.map(vec2 => new Vector3(vec2.x,0,vec2.y).multiplyScalar(SCHEMATIC_SCALE));\n\t\t} else {\n\t\t\tfloorPointsV3 = floorPoints.map(vec2 => new Vector3(vec2.x,0,vec2.y));\n\t\t\tmaxPointsV3 = maxPoints.map(vec2 => new Vector3(vec2.x,0,vec2.y));\n\t\t}\n\t\tconst maxBox = new Box3();\n\t\tconst floorBox = new Box3();\n\t\tmaxBox.setFromPoints(maxPointsV3);\n\t\tfloorBox.setFromPoints(floorPointsV3);\n\t\t\n\t\treturn {\n\t\t\tfloor: floorBox,\n\t\t\tbbox: maxBox\n\t\t}\n\t}\n\t\n\tgetSizes(useScale) {\n\t\tconst {floor,bbox} = this.getBoxes(useScale);\n\t\tconst sizeFloor = new Vector3();\n\t\tconst sizeBbox = new Vector3();\n\t\tfloor.getSize(sizeFloor);\n\t\tbbox.getSize(sizeBbox);\n\t\t\n\t\treturn {\n\t\t\tfloor: sizeFloor,\n\t\t\tbbox: sizeBbox\n\t\t}\n\t}\n\t\n\t// #workerResponse(e) {\n\t// \tconst { result } = e.data;\n\t//\n\t// \tresult.forEach(data => {\n\t// \t\tconst points = data.shape.map(ar => new Vector2().fromArray(ar));\n\t// \t\tconst aptScope = new Apartment(points,data.apt);\n\t// \t\tthis.group.add(aptScope.createMesh());\n\t// \t\tthis.apartments.push(aptScope);\n\t// \t});\n\t//\n\t// \tthis.worker.terminate();\n\t// \tthis.worker = null;\n\t// }\n\n\tcreateApartments() {\n\t\tconst outPoly = this.polygons.out;\n\t\tconst inPoly = this.polygons.in;\n\t\t\n\t\t// this.worker.postMessage({\n\t\t// \toutPolyPoints: outPoly.getPoints().map(vec => vec.toArray()),\n\t\t// \tinPolyPoints: inPoly.getPoints().map(vec => vec.toArray()),\n\t\t// \ttype: this.floorData.type,\n\t\t// \tapartments: this.floorData.apartments,\n\t\t// \tmaxSpace: this.maxSpace\n\t\t// });\n\n\t\tfunction findApartmentPlace (apt,checkpoint,checkIn = true,checkOut = true,minDistance = MIN_DISTANCE) {\n\t\t\tlet checkpointDistance = outPoly.getFullDistance(checkpoint);\n\t\t\tconst data = {\n\t\t\t\tout1: null,\n\t\t\t\tout2: null,\n\t\t\t\tin1: null,\n\t\t\t\tin2: null,\n\t\t\t\tcurve1: false,\n\t\t\t\tcurve2: false,\n\t\t\t\toffset: 0,\n\t\t\t\tcp: new Vector2().copy(checkpoint),\n\t\t\t\tapt: apt\n\t\t\t};\n\n\t\t\tfunction getPoints() {\n\t\t\t\tdata.out1 = outPoly.getPointFromDistance(checkpointDistance - apt.schematicSize / 2);\n\t\t\t\tdata.out2 = outPoly.getPointFromDistance(checkpointDistance + apt.schematicSize / 2);\n\t\t\t\tdata.in1 = inPoly.intersects(data.out1);\n\t\t\t\tdata.in2 = inPoly.intersects(data.out2);\n\t\t\t}\n\n\t\t\tgetPoints();\n\n\t\t\tif (checkIn) {\n\t\t\t\tif (data.in1.equals(data.in2) || data.in1.distanceTo(data.in2) < minDistance / 2) {\n\t\t\t\t\tdata.offset += minDistance;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (checkOut) {\n\t\t\t\tif (outPoly.getDistance(data.out2) < minDistance || outPoly.getDistance(data.out1) < minDistance) {\n\t\t\t\t\tdata.offset += minDistance;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst curve1 = outPoly.findCurveFromVec(data.out1);\n\t\t\tconst curve2 = outPoly.findCurveFromVec(data.out2);\n\n\t\t\tdata.curve1 = isPerpendicularLines(curve1.v1,curve1.v2,data.out1,data.in1);\n\t\t\tdata.curve2 = isPerpendicularLines(curve2.v1,curve2.v2,data.out2,data.in2);\n\n\n\t\t\treturn data;\n\t\t}\n\n\t\tfunction getApartmentsData (apartments,checkpoint,checkIn,checkOut,minDistance,direction = 'clockwise') {\n\t\t\tconst apartmentsData = [];\n\t\t\tlet offset = 0;\n\n\t\t\tfor (let i = 0; i < apartments.length; i++) {\n\t\t\t\tlet j = (i + 1) % apartments.length;\n\t\t\t\tconst current = apartments[i];\n\t\t\t\tconst next = apartments[j];\n\t\t\t\tconst data = findApartmentPlace(current,checkpoint,checkIn,checkOut,minDistance);\n\t\t\t\tlet d = null;\n\t\t\t\t\n\t\t\t\tif (direction === 'clockwise') {\n\t\t\t\t\td = outPoly.getFullDistance(data.out2) + next.schematicSize / 2;\n\t\t\t\t} else {\n\t\t\t\t\td = outPoly.getFullDistance(data.out1) - next.schematicSize / 2;\n\t\t\t\t}\n\t\t\t\tcheckpoint.copy(outPoly.getPointFromDistance(d));\n\t\t\t\tapartmentsData.push(data);\n\t\t\t\toffset += data.offset;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdata: apartmentsData,\n\t\t\t\toffset\n\t\t\t};\n\t\t}\n\n\t\tlet calculatedPoints = [];\n\t\tlet globalOffset = 0;\n\t\tlet count = 0;\n\t\tconst apartments = this.floorData.apartments;\n\t\tconst USE_EXPOSURE = this.useExposure;\n\t\tconst stepCount = USE_EXPOSURE ? 1 / this.maxSpace : 1 / this.maxSpace * 10;\n\t\tconst TYPE = this.floorData.type;\n\t\tconst OFFSET = this.buildingScope.schematicScope.advancedSettings.offset;\n\t\t\n\t\t\n\t\tif (apartments.length === 1 && apartments[0].schematicSize === this.maxSpace) {\n\t\t\tconst outPoints = outPoly.getPoints();\n\t\t\tconst inPoints = inPoly.getPoints();\n\t\t\t\n\t\t\tconst aptScope = new Apartment(outPoints,apartments[0]);\n\t\t\taptScope.outPath = new Path(outPoints);\n\t\t\taptScope.holes = [new Path().setFromPoints(inPoints)];\n\t\t\tthis.group.add(aptScope.createMesh());\n\t\t\tthis.apartments.push(aptScope);\n\t\t\tthis.createFloorPlug();\n\t\t\treturn;\n\t\t}\n\n\t\tfunction fitApartments (checkIn,checkOut,minDistance) {\n\t\t\tglobalOffset = 0;\n\t\t\tcount = 0;\n\t\t\tconst calculated = [];\n\t\t\tlet start = 0;\n\t\t\t\n\t\t\tif (USE_EXPOSURE) {\n\t\t\t\tstart = Facing.startCheckpointT(apartments[0]);\n\t\t\t\tif (OFFSET > 0) {\n\t\t\t\t\tstart += OFFSET;\n\t\t\t\t\tif (start >= 1) {\n\t\t\t\t\t\tstart = Math.abs(Math.trunc(start) - start);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst next = apartments[1];\n\t\t\t\tlet direction = 'clockwise';\n\t\t\t\t\n\t\t\t\tif (next) {\n\t\t\t\t\tconst nextT = Facing.startCheckpointT(next);\n\t\t\t\t\t\n\t\t\t\t\tif (Math.abs(start - nextT) > 0.5) {\n\t\t\t\t\t\tdirection = 'counterclockwise';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (OFFSET > 0) {\n\t\t\t\t\tconst checkpoint = outPoly.getPoint(start);\n\t\t\t\t\tconst {data,offset} = getApartmentsData(apartments,checkpoint,checkIn,checkOut,minDistance,direction);\n\t\t\t\t\tcalculatedPoints = data;\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor (let i = start; i < 1; i += stepCount) {\n\t\t\t\t\tconst checkpoint = outPoly.getPoint(i);\n\t\t\t\t\tconst {data,offset} = getApartmentsData(apartments,checkpoint,checkIn,checkOut,minDistance,direction);\n\t\t\t\t\tconst curves = data.reduce((acc,v) => {\n\t\t\t\t\t\tif (!v.curve1) {\n\t\t\t\t\t\t\tacc++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!v.curve2) {\n\t\t\t\t\t\t\tacc++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},0);\n\t\t\t\t\t\n\t\t\t\t\tif ((offset === 0) || TYPE === 'circle') {\n\t\t\t\t\t\tcalculatedPoints = data;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcalculated.push({\n\t\t\t\t\t\t\toffset,\n\t\t\t\t\t\t\tcurves,\n\t\t\t\t\t\t\tdistance: minDistance,\n\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\tif (OFFSET > 0) {\n\t\t\t\t\tstart += OFFSET;\n\t\t\t\t\tif (start >= 1) {\n\t\t\t\t\t\tstart = Math.abs(Math.trunc(start) - start);\n\t\t\t\t\t}\n\t\t\t\t\tconst checkpoint = outPoly.getPoint(start);\n\t\t\t\t\tconst {data,offset} = getApartmentsData(apartments,checkpoint,checkIn,checkOut,minDistance);\n\t\t\t\t\tcalculatedPoints = data;\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor (let i = start; i < 1; i += stepCount) {\n\t\t\t\t\tconst checkpoint = outPoly.getPoint(i);\n\t\t\t\t\tconst {data,offset} = getApartmentsData(apartments,checkpoint,checkIn,checkOut,minDistance);\n\t\t\t\t\tconst curves = data.reduce((acc,v) => {\n\t\t\t\t\t\tif (!v.curve1) {\n\t\t\t\t\t\t\tacc++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!v.curve2) {\n\t\t\t\t\t\t\tacc++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},0);\n\t\t\t\t\t\n\t\t\t\t\tif ((offset === 0 && curves === 0) || TYPE === 'circle') {\n\t\t\t\t\t\tcalculatedPoints = data;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcalculated.push({\n\t\t\t\t\t\t\toffset,\n\t\t\t\t\t\t\tcurves,\n\t\t\t\t\t\t\tdistance: minDistance,\n\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn calculated;\n\t\t}\n\n\t\tif (this.floorData.type !== 'circle') {\n\t\t\tlet distance = MIN_DISTANCE;\n\t\t\tconst calculated = [];\n\t\t\t\n\t\t\tfunction findOptimalResult (offset = 0) {\n\t\t\t\tconst minElements = calculated.filter(el => el.offset === offset);\n\t\t\t\tif (minElements.length) {\n\t\t\t\t\tminElements.sort((a,b) => a.curves - b.curves && a.distance > b.distance);\n\t\t\t\t\tcalculatedPoints = minElements[0].data;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile (distance !== 0) {\n\t\t\t\tif (calculatedPoints.length) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst data = fitApartments(true,true,distance);\n\t\t\t\tif (data) {\n\t\t\t\t\tcalculated.push(...data);\n\t\t\t\t\tif (!calculatedPoints.length) {\n\t\t\t\t\t\tfindOptimalResult();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdistance--;\n\t\t\t}\n\t\t\t\n\t\t\tif (!calculatedPoints.length) {\n\t\t\t\tconst minOffset = Math.min(...calculated.map(el => el.offset));\n\t\t\t\tfindOptimalResult(minOffset);\n\t\t\t}\n\n\t\t} else {\n\t\t\tfitApartments(false,false,0);\n\t\t}\n\t\t\n\t\tfor (let i = 0; i < calculatedPoints.length; i++) {\n\t\t\tconst data = calculatedPoints[i];\n\t\t\tlet path2;\n\t\t\tlet path3;\n\t\t\t\n\t\t\tconst path1 = outPoly.getPointsFromRange(data.out1,data.out2,data.cp);\n\t\t\tif (this.floorData.type === 'circle') {\n\t\t\t\tpath2 = [data.out2,data.in2];\n\t\t\t\tpath3 = [data.in1,data.out1];\n\t\t\t} else {\n\t\t\t\tpath2 = Polygon.findPath(data.out2,data.in2,outPoly,inPoly,outPoly);\n\t\t\t\tpath3 = Polygon.findPath(data.in1,data.out1,inPoly,outPoly,outPoly);\n\t\t\t}\n\t\t\t\n\t\t\tconst intersectedPoints = inPoly.getPointsFromRange(data.in2,data.in1,data.cp);\n\t\t\t\n\t\t\tlet aptPoints = [];\n\t\t\taptPoints.push(...path1);\n\t\t\taptPoints.push(...path2);\n\t\t\taptPoints.push(...intersectedPoints);\n\t\t\taptPoints.push(...path3);\n\t\t\t\n\t\t\t// const checkPoly = new Polygon(aptPoints);\n\t\t\t// if (Polygon.isCrossLines(checkPoly)) {\n\t\t\t// \tswitch (this.floorData.type) {\n\t\t\t// \t\tcase 'custom':\n\t\t\t// \t\tcase 'corner':\n\t\t\t// \t\t\tthis.sizeIn += MIN_DISTANCE;\n\t\t\t// \t\t\tbreak;\n\t\t\t// \t\tdefault:\n\t\t\t// \t\t\tthis.sizeIn += 0.1;\n\t\t\t// \t\t\tbreak;\n\t\t\t//\n\t\t\t// \t}\n\t\t\t//\n\t\t\t// \tthis.apartments = [];\n\t\t\t// \twhile (this.group.children.length) {\n\t\t\t// \t\tthis.group.children[0].removeFromParent();\n\t\t\t// \t}\n\t\t\t// \tthis.createPolygons();\n\t\t\t// \tthis.createApartments();\n\t\t\t// \treturn;\n\t\t\t// }\n\t\t\t\n\t\t\tconst aptScope = new Apartment(aptPoints,data.apt);\n\t\t\taptScope.outPath = new Path(path1);\n\t\t\tthis.group.add(aptScope.createMesh());\n\t\t\tthis.apartments.push(aptScope);\n\t\t}\n\t\t\n\t\tthis.createFloorPlug();\n\t}\n\n\tcreatePolygons() {\n\t\tlet points = [];\n\n\t\tswitch (this.floorData.type) {\n\t\t\tcase 'square':\n\t\t\t\tpoints = BuildingShape.square();\n\t\t\t\tthis.polygons.bbox = new Polygon(points);\n\t\t\t\tthis.polygons.bbox.moveToCenter(new Vector2());\n\t\t\t\tthis.polygons.bbox.setLength(this.bboxSpace);\n\t\t\t\t\n\t\t\t\tthis.polygons.out = new Polygon(points);\n\t\t\t\tthis.polygons.out.moveToCenter(new Vector2());\n\t\t\t\tthis.polygons.out.setLength(this.maxSpace);\n\t\t\t\t\n\t\t\t\tthis.polygons.in = new Polygon(points);\n\t\t\t\tthis.polygons.in.moveToCenter(new Vector2());\n\t\t\t\tthis.polygons.in.setLength(this.maxSpace);\n\t\t\t\tthis.polygons.in.multiplyScalar(this.sizeIn);\n\t\t\tbreak;\n\t\t\tcase 'rectangle':\n\t\t\t\tpoints = BuildingShape.rectangle();\n\t\t\t\tthis.polygons.bbox = new Polygon(points);\n\t\t\t\tthis.polygons.bbox.moveToCenter(new Vector2());\n\t\t\t\tthis.polygons.bbox.setLength(this.bboxSpace);\n\t\t\t\t\n\t\t\t\tthis.polygons.out = new Polygon(points);\n\t\t\t\tthis.polygons.out.moveToCenter(new Vector2());\n\t\t\t\tthis.polygons.out.setLength(this.maxSpace);\n\t\t\t\t\n\t\t\t\tthis.polygons.in = new Polygon(points);\n\t\t\t\tthis.polygons.in.moveToCenter(new Vector2());\n\t\t\t\tthis.polygons.in.setLength(this.maxSpace);\n\t\t\t\tthis.polygons.in.multiplyScalar(this.sizeIn);\n\t\t\t\tbreak;\n\t\t\tcase 'circle':\n\t\t\t\tpoints = BuildingShape.circle();\n\t\t\t\tthis.polygons.bbox = new Polygon(points);\n\t\t\t\tthis.polygons.bbox.setLength(this.bboxSpace);\n\t\t\t\t\n\t\t\t\tthis.polygons.out = new Polygon(points);\n\t\t\t\tthis.polygons.out.setLength(this.maxSpace);\n\t\t\t\t\n\t\t\t\tthis.polygons.in = new Polygon(points);\n\t\t\t\tthis.polygons.in.setLength(this.maxSpace);\n\t\t\t\tthis.polygons.in.multiplyScalar(this.sizeIn);\n\t\t\t\tbreak;\n\t\t\tcase 'corner':\n\t\t\t\tpoints = BuildingShape.corner();\n\t\t\t\tthis.polygons.bbox = new Polygon(points);\n\t\t\t\tthis.polygons.bbox.moveToCenter(new Vector2());\n\t\t\t\tthis.polygons.bbox.setLength(this.bboxSpace);\n\t\t\t\t\n\t\t\t\tthis.polygons.out = new Polygon(points);\n\t\t\t\tthis.polygons.out.moveToCenter(new Vector2());\n\t\t\t\tthis.polygons.out.setLength(this.maxSpace);\n\t\t\t\t\n\t\t\t\tthis.polygons.in = new Polygon(points);\n\t\t\t\tthis.polygons.in.moveToCenter(new Vector2());\n\t\t\t\tthis.polygons.in.setLength(this.maxSpace);\n\t\t\t\tthis.polygons.in.offset(this.sizeIn);\n\t\t\t\t\n\t\t\t\tbreak;\n\t\t\tcase 'custom':\n\t\t\t\tthis.polygons.bbox = new Polygon(this.shape);\n\t\t\t\tthis.polygons.bbox.moveToCenter(new Vector2());\n\t\t\t\tthis.polygons.bbox.setLength(this.bboxSpace);\n\t\t\t\t\n\t\t\t\tthis.polygons.out = new Polygon(this.shape);\n\t\t\t\tthis.polygons.out.moveToCenter(new Vector2());\n\t\t\t\tthis.polygons.out.setLength(this.maxSpace);\n\n\t\t\t\tthis.polygons.in = new Polygon(this.shape);\n\t\t\t\tthis.polygons.in.moveToCenter(new Vector2());\n\t\t\t\tthis.polygons.in.setLength(this.maxSpace);\n\t\t\t\tthis.sizeIn = this.polygons.in.offset(this.sizeIn,0,true);\n\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthis.type = 'square';\n\t\t\t\t\tpoints = BuildingShape.square();\n\t\t\t\t\tthis.polygons.bbox = new Polygon(points);\n\t\t\t\t\tthis.polygons.bbox.moveToCenter(new Vector2());\n\t\t\t\t\tthis.polygons.bbox.setLength(this.bboxSpace);\n\t\t\t\t\t\n\t\t\t\t\tthis.polygons.out = new Polygon(points);\n\t\t\t\t\tthis.polygons.out.moveToCenter(new Vector2());\n\t\t\t\t\tthis.polygons.out.setLength(this.maxSpace);\n\t\t\t\t\t\n\t\t\t\t\tthis.polygons.in = new Polygon(points);\n\t\t\t\t\tthis.polygons.in.moveToCenter(new Vector2());\n\t\t\t\t\tthis.polygons.in.setLength(this.maxSpace);\n\t\t\t\t\tthis.polygons.in.multiplyScalar(this.sizeIn);\n\t\t\t\t\tbreak;\n\t\t}\n\t}\n\t\n\tcreateFloorPlug() {\n\t\tconst extrude = JSON.parse(JSON.stringify(EXTRUDE_SETTINGS));\n\t\textrude.depth = 0.1;\n\t\tconst points = this.polygons.in.getPoints();\n\t\t\n\t\tconst polyArray = points.map(vec => vec.toArray());\n\t\t\n\t\tconst label = polyLabel([polyArray]);\n\t\tconst centroid = new Vector3(label[0],label[1],0);\n\t\tcentroid.multiplyScalar(SCHEMATIC_SCALE);\n\t\tcentroid.applyAxisAngle(new Vector3(1,0.0),-Math.PI / 2);\n\t\tcentroid.y = 0;\n\t\t\n\t\tconst shape = new Shape(points);\n\t\t\n\t\tconst geometry = new ExtrudeGeometry(shape,extrude);\n\t\tgeometry.rotateX(-Math.PI / 2);\n\t\tgeometry.scale(SCHEMATIC_SCALE,1,SCHEMATIC_SCALE);\n\t\tconst center = new Vector3();\n\t\tgeometry.computeBoundingBox();\n\t\tgeometry.boundingBox.getCenter(center);\n\t\tcenter.y = 0;\n\t\tconst geoPosition = new Vector3().subVectors(center,centroid);\n\t\t\n\t\tgeometry.center();\n\t\tgeometry.translate(geoPosition.x,0,geoPosition.z);\n\t\tcentroid.y = FLOOR_HEIGHT - 0.2;\n\t\t\n\t\tconst mesh = new Mesh(geometry,new MeshBasicMaterial());\n\t\tmesh.name = `zero_${this.floorData.floor}`;\n\t\tmesh.position.copy(centroid);\n\t\tthis.group.add(mesh);\n\t}\n\n}\n\n\n\n","'use strict';\n\nimport { Box3, Group, MathUtils, Object3D, Vector2, Vector3 } from 'three';\nimport { SchematicBuildingModel } from './SchematicBuildingModel';\nimport { BaseElement } from '../../interfaces/BaseElement';\nimport { assignDeep, Buildings, projectMode, settingsData, threeJsVariables, TRoot } from '../../../settings';\nimport { concatPropsAndHighlights } from '../autoSelectionBoxes';\nimport { Building } from '../../building/Building';\nimport { removeSelectionBoxesLockColor } from '../../../functions';\nimport { searchGetResults } from '../../menu/search/search';\nimport { SchematicDraw } from './SchematicDraw/SchematicDraw';\nimport { hideBuildings } from '../../components/building-switch/building_switch';\nimport { DreamsPreloader } from '../../components/preloader/DreamsPreloader';\nimport { changeLangToCurrent } from '../../components/langSwitcher/langSwitcher';\nimport { setBuildingShape } from '../../crm/crm-requests';\nimport { Range } from '../../interfaces/switchers/Range';\nimport { DropDown } from '../../interfaces/DropDown';\nimport { Switch } from '../../interfaces/switchers/Switch';\nimport { BmbyMode } from '../../mode/BmbyMode';\n\nconst position = new Vector3();\nconst size = new Vector3();\nconst box = new Box3();\n\nconst ADVANCED_SETTINGS = {\n\tquantization: 10,\n\tglobalRotation: 0,\n\toffset: 0,\n\talign: 'Center',\n\tfit: false,\n\tbuildingsRotation: {}\n};\n\nexport class SchematicBuilding {\n\tconstructor (crm) {\n\t\tthis.crm = JSON.parse(JSON.stringify(crm));\n\t\tthis.type = 'square';\n\t\tthis.prevType = 'square';\n\t\tthis.shape = [];\n\t\tthis.container = null;\n\t\tthis.draw = null;\n\t\tthis.advancedUI = null;\n\t\tthis.selectionsGroup = new Group();\n\t\tthis.selectionsGroup.name = 'Project Selection Boxes';\n\t\tthis.advancedSettings = assignDeep({},ADVANCED_SETTINGS,config.features.liteMode.buildingAdvancedSettings || {});\n\t\t\n\t\tthis.buildingGroup = new Group();\n\t\tthis.buildingGroup.name = 'Project Buildings';\n\t\t\n\t\tthis.buildingGroup.rotateY(this.advancedSettings.globalRotation);\n\t\tthis.selectionsGroup.rotateY(this.advancedSettings.globalRotation);\n\t\t\n\t\tthis.buildingNames = [...new Set(this.crm.map(apt => apt.buildingEngineId))];\n\t\tthis.buildings = {};\n\t\tthis.buildingsUI = {};\n\t}\n\t\n\tcreateUI() {\n\t\tthis.container = new BaseElement()\n\t\t\t.addClass('schematic-building')\n\t\t\t.appendTo(TRoot)\n\t\t\t.DOMElement;\n\t\t\n\t\tthis.draw = new SchematicDraw();\n\t\t\n\t\tconst shapes = new BaseElement()\n\t\t\t.addClass('schematic-building__shapes')\n\t\t\t.event('change',this.#shapesHandler.bind(this))\n\t\t\t.appendTo(this.container)\n\t\t\t.DOMElement;\n\t\t\n\t\tthis.advancedUI = new BaseElement('input')\n\t\t\t.addClass('schematic-building__advanced-input')\n\t\t\t.addAttribute('type','checkbox')\n\t\t\t.addAttribute('id','schematicAdvanced')\n\t\t\t.event('change',() => {\n\t\t\t\tif (this.draw.active) {\n\t\t\t\t\tthis.draw.hide();\n\t\t\t\t\tthis.#restorePreviouslyType();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.appendTo(this.container)\n\t\t\t.DOMElement;\n\t\t\n\t\tnew BaseElement('label')\n\t\t\t.addClass('schematic-building__advanced-label','language-string')\n\t\t\t.addAttribute('data-dictionary','Advanced')\n\t\t\t.addAttribute('for','schematicAdvanced')\n\t\t\t.innerHtml(changeLangToCurrent('Advanced'))\n\t\t\t.appendTo(this.container)\n\t\t\t.DOMElement;\n\t\t\n\t\tconst advanced = new BaseElement()\n\t\t\t.addClass('schematic-building__advanced-content')\n\t\t\t.appendTo(this.container)\n\t\t\t.DOMElement;\n\t\t\n\t\t['Align','Fit','Offset','Quantization','Global rotation','Building rotation'].forEach(name => {\n\t\t\tconst container = new BaseElement('fieldset')\n\t\t\t\t.addClass('schematic-building__advanced-element')\n\t\t\t\t.appendTo(advanced)\n\t\t\t\t.DOMElement;\n\t\t\t\n\t\t\tnew BaseElement('legend')\n\t\t\t\t.addClass('schematic-building__advanced-element-text','language-string')\n\t\t\t\t.addAttribute('data-dictionary',name)\n\t\t\t\t.innerHtml(changeLangToCurrent(name))\n\t\t\t\t.appendTo(container);\n\t\t\t\n\t\t\tswitch (name) {\n\t\t\t\tcase 'Fit':\n\t\t\t\t\tconst switcher = new Switch(container);\n\t\t\t\t\tswitcher.checked = this.advancedSettings.fit;\n\t\t\t\t\tswitcher.listener = (e) => this.advancedSettings.fit = e.target.checked;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Align':\n\t\t\t\t\tconst selector = new DropDown(container,'schematic-building__select',{placeholder: true});\n\t\t\t\t\tselector.create();\n\t\t\t\t\t['Center','North','East','South','West','NorthWest','NorthEast','SouthEast','SouthWest'].forEach(facing => {\n\t\t\t\t\t\tconst element = new BaseElement()\n\t\t\t\t\t\t\t.addClass('schematic-building__select-element','language-string')\n\t\t\t\t\t\t\t.event('click',() => {\n\t\t\t\t\t\t\t\tthis.advancedSettings.align = facing;\n\t\t\t\t\t\t\t\tselector.changePlaceholder(changeLangToCurrent(facing));\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.addAttribute('data-dictionary',facing)\n\t\t\t\t\t\t\t.innerHtml(changeLangToCurrent(facing))\n\t\t\t\t\t\t\t.DOMElement;\n\t\t\t\t\t\tselector.add(element);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (this.advancedSettings.align === facing) {\n\t\t\t\t\t\t\tselector.changePlaceholder(changeLangToCurrent(facing));\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Offset':\n\t\t\t\t\tnew Range(container,0,1,0.001,this.advancedSettings.offset)\n\t\t\t\t\t\t.addListener('input',(e) => {\n\t\t\t\t\t\t\tthis.advancedSettings.offset = Number(e.target.value);\n\t\t\t\t\t\t\toutOffset.innerHtml(this.advancedSettings.offset);\n\t\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tconst outOffset = new BaseElement('span')\n\t\t\t\t\t\t.addClass('schematic-building__advanced-element-out')\n\t\t\t\t\t\t.innerHtml(this.advancedSettings.offset)\n\t\t\t\t\t\t.appendTo(container);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Quantization':\n\t\t\t\t\tnew Range(container,1,30,1,this.advancedSettings.quantization)\n\t\t\t\t\t\t.addListener('input',(e) => {\n\t\t\t\t\t\t\tthis.advancedSettings.quantization = Number(e.target.value);\n\t\t\t\t\t\t\toutQuantization.innerHtml(this.advancedSettings.quantization);\n\t\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tconst outQuantization = new BaseElement('span')\n\t\t\t\t\t\t.addClass('schematic-building__advanced-element-out')\n\t\t\t\t\t\t.innerHtml(this.advancedSettings.quantization)\n\t\t\t\t\t\t.appendTo(container);\n\t\t\t\t\t\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Global rotation':\n\t\t\t\t\tnew Range(container,0,Math.PI * 2,0.01,this.advancedSettings.globalRotation)\n\t\t\t\t\t\t.addListener('input',(e) => {\n\t\t\t\t\t\t\tthis.advancedSettings.globalRotation = Number(e.target.value);\n\t\t\t\t\t\t\tthis.buildingGroup.rotation.y = this.advancedSettings.globalRotation;\n\t\t\t\t\t\t\tthis.selectionsGroup.rotation.y = this.advancedSettings.globalRotation;\n\t\t\t\t\t\t\tconst deg = Math.round(MathUtils.radToDeg(this.advancedSettings.globalRotation));\n\t\t\t\t\t\t\toutGlobalRotation.innerHtml(deg);\n\t\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tconst outGlobalRotation = new BaseElement('span')\n\t\t\t\t\t\t.addClass('schematic-building__advanced-element-out')\n\t\t\t\t\t\t.innerHtml(Math.round(MathUtils.radToDeg(this.advancedSettings.globalRotation)))\n\t\t\t\t\t\t.appendTo(container);\n\t\t\t\t\t\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Building rotation':\n\t\t\t\t\tif (this.buildingNames.length >= 2) {\n\t\t\t\t\t\tconst buildingsContainer = new BaseElement()\n\t\t\t\t\t\t\t.addClass('schematic-building__advanced__buildings')\n\t\t\t\t\t\t\t.appendTo(container)\n\t\t\t\t\t\t\t.DOMElement;\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.buildingNames.forEach(buildingName => {\n\t\t\t\t\t\t\tconst buildingContainer = new BaseElement()\n\t\t\t\t\t\t\t\t.addClass('schematic-building__advanced-element__building-container','hidden')\n\t\t\t\t\t\t\t\t.appendTo(buildingsContainer)\n\t\t\t\t\t\t\t\t.DOMElement;\n\t\t\t\t\t\t\tnew BaseElement('span')\n\t\t\t\t\t\t\t\t.addClass('schematic-building__advanced-element__building-name')\n\t\t\t\t\t\t\t\t.innerHtml(buildingName)\n\t\t\t\t\t\t\t\t.appendTo(buildingContainer);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.buildingsUI[buildingName] = buildingContainer;\n\t\t\t\t\t\t\tconst rotation = this.advancedSettings.buildingsRotation[buildingName] || 0;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tnew Range(buildingContainer,0,Math.PI * 2,0.01,rotation)\n\t\t\t\t\t\t\t\t.addListener('input',(e) => {\n\t\t\t\t\t\t\t\t\tthis.advancedSettings.buildingsRotation[buildingName] = Number(e.target.value);\n\t\t\t\t\t\t\t\t\tconst deg = Math.round(MathUtils.radToDeg(this.advancedSettings.buildingsRotation[buildingName]));\n\t\t\t\t\t\t\t\t\toutBuilding.innerHtml(deg);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tconst building = threeJsVariables.scene.getObjectByName(buildingName);\n\t\t\t\t\t\t\t\t\tconst selections = threeJsVariables.scene.getObjectByName(buildingName + '_selectionBoxes');\n\t\t\t\t\t\t\t\t\tif (building) {\n\t\t\t\t\t\t\t\t\t\tbuilding.rotation.y = this.advancedSettings.buildingsRotation[buildingName];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (selections) {\n\t\t\t\t\t\t\t\t\t\tselections.rotation.y = this.advancedSettings.buildingsRotation[buildingName];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tconst outBuilding = new BaseElement('span')\n\t\t\t\t\t\t\t\t.addClass('schematic-building__advanced-element-out')\n\t\t\t\t\t\t\t\t.innerHtml(Math.round(MathUtils.radToDeg(rotation)))\n\t\t\t\t\t\t\t\t.appendTo(buildingContainer);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontainer.remove();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t\t\n\t\tnew BaseElement('button')\n\t\t\t.addClass('schematic-building__apply','language-string')\n\t\t\t.addAttribute('data-dictionary','Rebuild')\n\t\t\t.innerHtml(changeLangToCurrent('Rebuild'))\n\t\t\t.event('click',this.rebuild.bind(this))\n\t\t\t.appendTo(advanced);\n\t\t\n\t\t\n\t\tnew BaseElement('button')\n\t\t\t.addClass('schematic-building__apply','language-string')\n\t\t\t.addAttribute('data-dictionary','Save shape')\n\t\t\t.event('click',this.#sendBuildingShape.bind(this))\n\t\t\t.innerHtml(changeLangToCurrent('Save shape'))\n\t\t\t.appendTo(this.container);\n\t\t\n\t\t['square','rectangle','circle','corner','custom'].forEach((type,index) => {\n\t\t\tconst input = new BaseElement('input')\n\t\t\t\t.addClass('schematic-building__shape-input')\n\t\t\t\t.addAttribute('id',`shape_${type}`)\n\t\t\t\t.addAttribute('name','shape')\n\t\t\t\t.addAttribute('data-type',type)\n\t\t\t\t.addAttribute('type','radio')\n\t\t\t\t.appendTo(shapes);\n\t\t\tnew BaseElement('label')\n\t\t\t\t.addClass('schematic-building__shape',type === 'custom' ? 'icon-pencil' : null)\n\t\t\t\t.addAttribute('data-type',type)\n\t\t\t\t.addAttribute('for',`shape_${type}`)\n\t\t\t\t.appendTo(shapes);\n\t\t\t\n\t\t\t// if (index < 4 ) {\n\t\t\t// \tnew BaseElement()\n\t\t\t// \t\t.addClass('schematic-building__separator')\n\t\t\t// \t\t.appendTo(shapes);\n\t\t\t// }\n\t\t\t\n\t\t\tif (type === 'custom') {\n\t\t\t\tinput.event('click',this.#drawHandler.bind(this));\n\t\t\t}\n\t\t\t\n\t\t\tif (type === this.type) {\n\t\t\t\tinput.addAttribute('checked',true);\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.updateBuildingsRotationUI();\n\t}\n\t\n\tupdateBuildingsRotationUI() {\n\t\tconst activeBuilding = Buildings.getActiveBuilding();\n\t\tObject.entries(this.buildingsUI).forEach(([name,ui]) => {\n\t\t\tif (activeBuilding && activeBuilding.name === name) {\n\t\t\t\tui.classList.remove('hidden');\n\t\t\t} else {\n\t\t\t\tui.classList.add('hidden');\n\t\t\t}\n\t\t});\n\t}\n\t\n\trebuild() {\n\t\tconst preloader = new DreamsPreloader(document.body);\n\t\tpreloader\n\t\t\t.absolute()\n\t\t\t.substrate()\n\t\t\t.blur()\n\t\t\t.show();\n\t\tpreloader.element.style.left = 0;\n\t\tpreloader.element.style.top = 0;\n\t\tpreloader.element.style.zIndex = 20000;\n\t\t\n\t\tsetTimeout(() => {\n\t\t\tthis.create();\n\t\t\t\n\t\t\tconst selections = [];\n\t\t\tconst prevActiveBuilding = Buildings.getActiveBuilding();\n\t\t\t\n\t\t\tObject.entries(this.buildings).forEach(([name,data]) => {\n\t\t\t\tselections.push(data.selectionsGroup);\n\t\t\t\tconst model = data.buildingGroup.children[0];\n\t\t\t\tmodel.layers.set(0);\n\t\t\t\t// model.material.map = texture;\n\t\t\t\tconst building = new Building(model);\n\t\t\t\tconst modelGroup = building.create();\n\t\t\t\tdata.buildingGroup.removeFromParent();\n\t\t\t\tthis.buildingGroup.add(modelGroup);\n\t\t\t\tbuilding.amenities.Roof = new Object3D();\n\t\t\t\tthreeJsVariables.slicer.add(model);\n\t\t\t\tbuilding.deactivate();\n\t\t\t});\n\t\t\t\n\t\t\thideBuildings();\n\t\t\tconcatPropsAndHighlights({data:JSON.parse(JSON.stringify(this.crm))},selections,{data: config.crmProjectSettings});\n\t\t\t\n\t\t\tif (prevActiveBuilding) {\n\t\t\t\tprojectMode.Cylinder.switchBuilding(prevActiveBuilding.name);\n\t\t\t}\n\t\t\t\n\t\t\tpreloader.remove();\n\t\t},10);\n\t}\n\t\n\tsetShape(points) {\n\t\tif (Array.isArray(points)) {\n\t\t\tthis.shape = points.map(arr => new Vector2().fromArray(arr));\n\t\t}\n\t}\n\t\n\t#sendBuildingShape() {\n\t\tconst data = {\n\t\t\ttype: this.type,\n\t\t\tadvanced: this.advancedSettings,\n\t\t\tshape: this.type === 'custom' ? this.shape.map(vec => vec.toArray()) : []\n\t\t};\n\t\t\n\t\tsetBuildingShape(data).then(() => {\n\t\t\tif (!BmbyMode.active)\n\t\t\t\tthis.container?.remove()\n\t\t});\n\t}\n\t\n\t#restorePreviouslyType() {\n\t\tthis.type = this.prevType;\n\t\tconst prevElement = this.container.querySelector(`.schematic-building__shape-input[data-type=\"${this.type}\"]`);\n\t\tif (prevElement) {\n\t\t\tprevElement.checked = true;\n\t\t}\n\t}\n\t\n\tasync #drawHandler(e) {\n\t\te.preventDefault();\n\t\tsetTimeout(() => {\n\t\t\tif (!this.draw.active) {\n\t\t\t\te.target.checked = true;\n\t\t\t\tthis.#shapesHandler(e);\n\t\t\t} else {\n\t\t\t\tthis.draw.hide();\n\t\t\t\tthis.#restorePreviouslyType();\n\t\t\t}\n\t\t},0);\n\t}\n\t\n\tasync #shapesHandler(e) {\n\t\tthis.type = e.target.getAttribute('data-type');\n\t\t\n\t\tif (this.type === 'custom') {\n\t\t\tthis.advancedUI.checked = false;\n\t\t\tthis.draw.show(this.container);\n\t\t\tthis.shape = await this.draw.getPoints();\n\t\t\tthis.draw.clear();\n\t\t\tthis.draw.hide();\n\t\t} else {\n\t\t\tthis.draw.hide();\n\t\t\tthis.shape = [];\n\t\t}\n\t\t\n\t\tthis.rebuild();\n\t\tthis.prevType = this.type;\n\t}\n\t\n\tcreate() {\n\t\tconst numberInRow = 4;\n\t\tlet count = 0;\n\t\tlet offsetZ = 0;\n\t\tlet offset = 10;\n\t\tlet maxSpace = 0;\n\t\tposition.set(0,0,0);\n\t\t\n\t\tthis.dispose();\n\t\tthis.buildingNames.forEach(building => {\n\t\t\tconst props = this.crm.filter(apt => apt.buildingEngineId === building);\n\t\t\tconst buildingScope = new SchematicBuildingModel(JSON.parse(JSON.stringify(props)),this);\n\t\t\tbuildingScope.selectionsGroup.position.copy(position);\n\t\t\tbuildingScope.buildingGroup.position.copy(position);\n\t\t\t\n\t\t\tbox.setFromObject(buildingScope.buildingGroup);\n\t\t\tbox.getSize(size);\n\t\t\t\n\t\t\tconst max = Math.max(size.x,size.z);\n\t\t\tmaxSpace = Math.max(max,maxSpace);\n\t\t\t\n\t\t\tif (count === numberInRow - 1) {\n\t\t\t\toffsetZ += maxSpace + offset;\n\t\t\t\tposition.setX(0);\n\t\t\t\tposition.setZ(offsetZ);\n\t\t\t\tcount = -1;\n\t\t\t} else {\n\t\t\t\tposition.setX(position.x + maxSpace + offset);\n\t\t\t}\n\t\t\t\n\t\t\tcount++;\n\t\t\t\n\t\t\tthis.selectionsGroup.add(buildingScope.selectionsGroup);\n\t\t\tthis.buildingGroup.add(buildingScope.buildingGroup);\n\t\t\t\n\t\t\tthis.buildings[building] = buildingScope;\n\t\t});\n\t}\n\t\n\tdispose() {\n\t\tif (this.buildingGroup.children.length) {\n\t\t\tlet meshes = [];\n\t\t\tthis.buildingGroup.traverse(el => {\n\t\t\t\tif (el.isMesh) {\n\t\t\t\t\tmeshes.push(el);\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.selectionsGroup.traverse(el => {\n\t\t\t\tif (el.isMesh) {\n\t\t\t\t\tmeshes.push(el);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\twhile (this.buildingGroup.children.length) {\n\t\t\t\tthis.buildingGroup.children[0].removeFromParent();\n\t\t\t}\n\t\t\t\n\t\t\twhile (this.selectionsGroup.children.length) {\n\t\t\t\tthis.selectionsGroup.children[0].removeFromParent();\n\t\t\t}\n\t\t\t\n\t\t\tmeshes.forEach(mesh => {\n\t\t\t\tmesh.geometry.dispose();\n\t\t\t\tmesh.material.dispose();\n\t\t\t});\n\t\t\t\n\t\t\tmeshes = null;\n\t\t\t\n\t\t\tthis.buildings = {};\n\t\t}\n\t}\n\t\n}\n\n","'use strict';\n\nimport {\n\tGroup,\n\tMesh,\n\tShape, ExtrudeGeometry, MeshStandardMaterial, Object3D, Vector3, Box3, Box3Helper, Path,\n} from 'three';\nimport { Floor } from './Floor';\nimport { mergeGeometries } from 'three/examples/jsm/utils/BufferGeometryUtils';\nimport { Polygon } from '../../../libs/Polygon';\nimport { threeJsVariables } from '../../../settings';\n\nexport const SCHEMATIC_SCALE = 0.2;\nexport const FLOOR_HEIGHT = 3;\nexport const EXTRUDE_SETTINGS = {\n\tsteps: 1,\n\tcurveSegments: 1,\n\tdepth: FLOOR_HEIGHT,\n\tbevelEnabled: false,\n\tbevelThickness: 0,\n\tbevelSize: 0,\n\tbevelOffset: 0,\n\tbevelSegments: 1\n};\n\nexport class SchematicBuildingModel {\n\tconstructor (props,scope) {\n\t\tthis.props = props;\n\t\tthis.schematicScope = scope;\n\t\tthis.type = this.schematicScope.type;\n\t\tthis.selectionsGroup = new Group();\n\t\tthis.name = this.props[0].buildingEngineId;\n\t\tthis.selectionsGroup.name = this.name + '_selectionBoxes';\n\t\t\n\t\tthis.buildingGroup = new Group();\n\t\tthis.buildingGroup.name = this.name;\n\t\t\n\t\tconst rotation = this.schematicScope.advancedSettings.buildingsRotation[this.name];\n\t\t\n\t\tif (rotation) {\n\t\t\tthis.selectionsGroup.rotation.y = rotation;\n\t\t\tthis.buildingGroup.rotation.y = rotation;\n\t\t}\n\t\t\n\t\tthis.floors = [];\n\t\t\n\t\tconst floorData = [];\n\n\t\tconst floorNum = [...new Set(this.props.map(apt => apt.floorNum))];\n\t\tfloorNum.sort((a,b) => a - b);\n\t\t\n\t\tthis.floorsCount = floorNum.length;\n\t\t\n\t\tfloorNum.forEach(floorNum => {\n\t\t\tconst floorApts = this.props.filter(apt => apt.floorNum === floorNum);\n\t\t\tfloorApts.forEach(apt => {\n\t\t\t\tapt.schematicSize = Math.floor(apt.totalSpace / this.schematicScope.advancedSettings.quantization) * this.schematicScope.advancedSettings.quantization;\n\t\t\t});\n\t\t\tconst data = {\n\t\t\t\tfloor: floorNum,\n\t\t\t\ttype: this.type,\n\t\t\t\ttotalSpace: floorApts.reduce((acc,apt) => acc += apt.schematicSize,0),\n\t\t\t\tapartments: floorApts\n\t\t\t};\n\t\t\tfloorData.push(data);\n\t\t});\n\n\t\tthis.maxTotalSpace = Math.max(...floorData.map(floor => floor.totalSpace));\n\t\tthis.maxApartmentsOnTheFloor = Math.max(...floorData.map(floor => floor.apartments.length));\n\t\t\n\t\tif (this.type === 'auto') {\n\t\t\tif (this.maxApartmentsOnTheFloor <= 4) {\n\t\t\t\tthis.type = 'square';\n\t\t\t} else if (this.maxApartmentsOnTheFloor > 4 && this.maxApartmentsOnTheFloor <= 6) {\n\t\t\t\tthis.type = 'rectangle';\n\t\t\t} else {\n\t\t\t\tthis.type = 'corner';\n\t\t\t}\n\t\t\tfloorData.forEach(data => data.type = this.type);\n\t\t}\n\t\t\n\t\tfor (let i = 0; i < floorData.length; i++) {\n\t\t\tconst data = floorData[i];\n\t\t\tconst floor = new Floor(data,this);\n\t\t\tfloor.group.position.y = FLOOR_HEIGHT * i;\n\t\t\tthis.floors.push(floor);\n\t\t\tthis.selectionsGroup.add(floor.group);\n\t\t}\n\t\t\n\t\tthis.#createBuildingForm();\n\t\tthis.#applyAlignReposition();\n\t}\n\t\n\t#applyAlignReposition() {\n\t\t// const size = new Vector3();\n\t\t// box.getSize(size);\n\t\t// const scale = Math.sqrt(this.maxTotalSpace / (size.x * size.z));\n\t\t// console.log(scale);\n\t\t// this.selectionsGroup.scale.set(scale,1,scale);\n\t\t// this.buildingGroup.scale.set(scale,1,scale);\n\t\t\n\t\tconst align = this.schematicScope.advancedSettings.align;\n\t\tif (align === 'Center')\n\t\t\treturn;\n\t\t\n\t\tconst box = new Box3();\n\t\tbox.setFromObject(this.selectionsGroup,true);\n\t\tconst center = new Vector3();\n\t\tbox.getCenter(center);\n\t\tcenter.y = 0;\n\t\t\n\t\tconst position = new Vector3().sub(center);\n\t\tthis.selectionsGroup.children.forEach(floor => {\n\t\t\tfloor.position.add(position);\n\t\t});\n\t\t\n\t\tthis.buildingGroup.children[0].position.copy(position);\n\t}\n\t\n\t#createBuildingForm() {\n\t\tconst geometries = [];\n\t\t\n\t\tthis.floors.forEach(floor => {\n\t\t\tif (!floor.polygons.out)\n\t\t\t\treturn;\n\t\t\tconst polyOutPoints = floor.polygons.out.getPoints();\n\t\t\tconst poly = new Polygon(polyOutPoints);\n\t\t\tpoly.offset(-3);\n\t\t\tconst points = poly.getPoints();\n\t\t\tconst shape = new Shape(points);\n\t\t\tshape.holes = [new Path(points)];\n\t\t\t\n\t\t\tconst wall = new ExtrudeGeometry(shape,EXTRUDE_SETTINGS);\n\t\t\twall.rotateX( - Math.PI / 2);\n\t\t\twall.translate(0,floor.group.position.y + 0.1,0);\n\t\t\twall.scale(SCHEMATIC_SCALE,1,SCHEMATIC_SCALE);\n\t\t\t\n\t\t\t\n\t\t\tconst plugShape = new Shape(points);\n\t\t\tconst extrude = JSON.parse(JSON.stringify(EXTRUDE_SETTINGS));\n\t\t\textrude.depth = 0.1;\n\t\t\tconst plugGeometry = new ExtrudeGeometry(plugShape,extrude);\n\t\t\tplugGeometry.rotateX( - Math.PI / 2);\n\t\t\tplugGeometry.translate(0,floor.group.position.y + FLOOR_HEIGHT - 0.2,0);\n\t\t\tplugGeometry.scale(SCHEMATIC_SCALE,1,SCHEMATIC_SCALE);\n\t\t\t\n\t\t\tgeometries.push(wall,plugGeometry);\n\t\t\t// geometries.push(wall);\n\t\t});\n\t\t\n\t\tconst geometry = mergeGeometries(geometries);\n\t\t\n\t\tconst material = new MeshStandardMaterial({color: '#dadada'});\n\t\tconst mesh = new Mesh(geometry,material);\n\t\tmesh.name = this.name;\n\t\tthis.buildingGroup.add(mesh);\n\t}\n\n}\n","'use strict';\n\n\nexport class Grid {\n\tconstructor (context,width,height,cellSize,color,lineWidth) {\n\t\tthis.context = context;\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.cellSize = cellSize;\n\t\tthis.color = color;\n\t\tthis.lineWidth = lineWidth;\n\t\tthis.gridCanvas = document.createElement('canvas');\n\t\tthis.gridCanvas.style.position = 'absolute';\n\t\tthis.gridCanvas.style.left = 0;\n\t\tthis.gridCanvas.style.top = 0;\n\t\tthis.gridCanvas.style.zIndex = -1;\n\t\tthis.gridCanvas.width = this.width;\n\t\tthis.gridCanvas.height = this.height;\n\t\tthis.gridContext = this.gridCanvas.getContext('2d');\n\t\tthis.cells = [];\n\t}\n\t\n\tdraw() {\n\t\tthis.clear();\n\t\tthis.cells = [];\n\t\tthis.gridContext.save();\n\t\tthis.gridContext.beginPath();\n\t\tthis.gridContext.lineWidth = this.lineWidth;\n\t\tthis.gridContext.strokeStyle = this.color;\n\t\t\n\t\tfor (let x = 0; x < this.width; x += this.cellSize) {\n\t\t\tfor (let y = 0; y < this.height; y += this.cellSize) {\n\t\t\t\tthis.gridContext.strokeRect(x, y, this.cellSize, this.cellSize);\n\t\t\t\tthis.cells.push(new GridCell(this.context,x,y,this.cellSize));\n\t\t\t}\n\t\t}\n\t\tthis.gridContext.closePath();\n\t\tthis.gridContext.restore();\n\t}\n\t\n\tclear() {\n\t\tthis.gridContext.clearRect(0,0,this.width,this.height);\n\t}\n\t\n\tgetCell(x,y) {\n\t\treturn this.cells.find(cell => cell.contains(x,y));\n\t}\n}\n\n\nclass GridCell {\n\tconstructor (context,x,y,size) {\n\t\tthis.context = context;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.size = size;\n\t\tthis.width = this.x + size;\n\t\tthis.height = this.y + size;\n\t}\n\t\n\tcontains(x,y) {\n\t\treturn x >= this.x && x <= this.width &&\n\t\t\ty >= this.y && y <= this.height;\n\t}\n\t\n\tgetClosestPoint(x,y,minDist) {\n\t\tconst distances = this.distance(x,y);\n\t\tconst minDistance = Math.min(...distances);\n\t\t\n\t\tif (minDistance > minDist) {\n\t\t\treturn null;\n\t\t}\n\t\t\n\t\tconst index = distances.indexOf(minDistance);\n\t\tlet coordX = null;\n\t\tlet coordY = null;\n\t\t\n\t\tswitch (index) {\n\t\t\tcase 0:\n\t\t\t\tcoordX = this.x;\n\t\t\t\tcoordY = this.y;\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tcoordX = this.width;\n\t\t\t\tcoordY = this.y;\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tcoordX = this.width;\n\t\t\t\tcoordY = this.height;\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tcoordX = this.x;\n\t\t\t\tcoordY = this.height;\n\t\t\t\tbreak\n\t\t}\n\t\t\n\t\treturn {x: coordX, y: coordY};\n\t}\n\t\n\tdistance(x,y) {\n\t\t// const dx = this.x - x, dy = this.y - y;\n\t\t// return Math.sqrt(dx * dx + dy * dy);\n\t\treturn [\n\t\t\tMath.sqrt((this.x - x) * (this.x - x) + (this.y - y) * (this.y - y)),\n\t\t\tMath.sqrt((this.width - x) * (this.width - x) + (this.y - y) * (this.y - y)),\n\t\t\tMath.sqrt((this.width - x) * (this.width - x) + (this.height - y) * (this.height - y)),\n\t\t\tMath.sqrt((this.x - x) * (this.x - x) + (this.height - y) * (this.height - y))\n\t\t]\n\t}\n\t\n\tdraw(color) {\n\t\tthis.context.fillStyle = color;\n\t\tthis.context.fillRect(this.x - 1, this.y - 1, this.size + 1, this.size + 1);\n\t}\n\t\n}\n","'use strict';\n\nimport { Vector2 } from 'three';\nimport { Grid } from './Grid';\nimport { Polygon } from '../../../../libs/Polygon';\nimport { BaseElement } from '../../../interfaces/BaseElement';\nimport { changeLangToCurrent } from '../../../components/langSwitcher/langSwitcher';\n\n\nexport class SchematicDraw {\n\tconstructor () {\n\t\tthis.width = 300;\n\t\tthis.height = 300;\n\t\tthis.container = new BaseElement()\n\t\t\t.addClass('schematic-draw')\n\t\t\t.DOMElement;\n\t\t\n\t\tthis.canvasBlock = new BaseElement()\n\t\t\t.addClass('schematic-draw__canvas-block')\n\t\t\t.appendTo(this.container)\n\t\t\t.DOMElement;\n\t\t\n\t\tthis.canvas = new BaseElement('canvas')\n\t\t\t.addClass('schematic-draw__canvas')\n\t\t\t.appendTo(this.canvasBlock)\n\t\t\t.DOMElement;\n\t\t\n\t\tthis.canvas.width = this.width;\n\t\tthis.canvas.height = this.height;\n\t\tthis.color = null;\n\t\tthis.active = false;\n\t\t\n\t\tconst buttons = new BaseElement()\n\t\t\t.addClass('schematic-draw__buttons')\n\t\t\t.appendTo(this.container)\n\t\t\t.DOMElement;\n\t\t\n\t\tnew BaseElement('button')\n\t\t\t.addClass('schematic-draw__clear-btn','schematic-draw__btn','language-string')\n\t\t\t.addAttribute('data-dictionary','Clear')\n\t\t\t.text(changeLangToCurrent('Clear'))\n\t\t\t.appendTo(buttons)\n\t\t\t.event('click',this.clear.bind(this));\n\t\t\n\t\tnew BaseElement('button')\n\t\t\t.addClass('schematic-draw__apply-btn','schematic-draw__btn','language-string')\n\t\t\t.addAttribute('data-dictionary','Clear')\n\t\t\t.text(changeLangToCurrent('Apply'))\n\t\t\t.appendTo(buttons)\n\t\t\t.event('click',this.#apply.bind(this));\n\t\t\n\t\tthis.model = null;\n\t\tthis.cell = null;\n\t\tthis.complete = false;\n\t\tthis.pointsInterval = null;\n\t\t\n\t\tthis.points = {\n\t\t\tui: [],\n\t\t\tcoords: [],\n\t\t};\n\t\t\n\t\tthis.cellSize = 30;\n\t\t\n\t\tthis.pointHelper = new BaseElement()\n\t\t\t.addClass('schematic-draw__point-helper')\n\t\t\t.appendTo(this.canvasBlock)\n\t\t\t.DOMElement;\n\t\t\n\t\tthis.pointHelper.style.width = `${this.cellSize / 2}px`;\n\t\tthis.pointHelper.style.height = `${this.cellSize / 2}px`;\n\t\t\n\t\tthis.context = this.canvas.getContext('2d');\n\t\tthis.grid = new Grid(this.context,this.width,this.height,this.cellSize,'#000000',1);\n\t\tthis.canvasBlock.appendChild(this.grid.gridCanvas);\n\t\tthis.grid.draw();\n\t\t\n\t\tthis.coord = {\n\t\t\tx: 0,\n\t\t\ty: 0\n\t\t};\n\t\t\n\t\tthis.drawHandler = (e) => this.#move(e);\n\t\t\n\t\tthis.canvas.addEventListener('mousedown',this.#down.bind(this));\n\t\tthis.canvas.addEventListener('mousemove',this.drawHandler);\n\t\tthis.canvas.addEventListener('mouseleave',this.#mouseLeave.bind(this));\n\t}\n\t\n\tshow(parent) {\n\t\tthis.color = getComputedStyle(document.querySelector(':root')).getPropertyValue('--brand2');\n\t\tparent.appendChild(this.container);\n\t\tthis.active = true;\n\t}\n\t\n\thide() {\n\t\tthis.container.remove();\n\t\tclearInterval(this.pointsInterval);\n\t\tthis.complete = false;\n\t\tthis.active = false;\n\t}\n\t\n\t#mouseLeave() {\n\t\tthis.pointHelper.style.display = 'none';\n\t}\n\t\n\tgetPoints() {\n\t\treturn new Promise(resolve => {\n\t\t\tthis.pointsInterval = setInterval(() => {\n\t\t\t\tif (this.complete) {\n\t\t\t\t\tclearInterval(this.pointsInterval);\n\t\t\t\t\tconst points = [];\n\t\t\t\t\tthis.points.coords.forEach(point => points.push(new Vector2(point[0],point[1] * -1)));\n\t\t\t\t\t\n\t\t\t\t\tconst polyOut = new Polygon(points);\n\t\t\t\t\tpolyOut.setLength(500);\n\t\t\t\t\tconst polyIn = new Polygon(points);\n\t\t\t\t\tpolyIn.setLength(500);\n\t\t\t\t\tpolyIn.offset(-500 / 14,0,true);\n\t\t\t\t\t\n\t\t\t\t\tlet contains = true;\n\t\t\t\t\t\n\t\t\t\t\tfor (let i = 0; i < polyIn.curves.length; i++) {\n\t\t\t\t\t\tconst curve = polyIn.curves[i];\n\t\t\t\t\t\tconst v1 = polyOut.containsPoint(curve.v1) || polyOut.pointOnSegment(curve.v1);\n\t\t\t\t\t\tconst v2 = polyOut.containsPoint(curve.v2) || polyOut.pointOnSegment(curve.v2);\n\t\t\t\t\t\tif (!v1 || !v2) {\n\t\t\t\t\t\t\tcontains = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (!contains) {\n\t\t\t\t\t\tpoints.reverse();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tresolve(points);\n\t\t\t\t}\n\t\t\t},500)\n\t\t});\n\t}\n\t\n\t#apply() {\n\t\tthis.complete = true;\n\t}\n\t\n\tclear() {\n\t\tif (this.model && this.model.parent) {\n\t\t\tthis.model.removeFromParent();\n\t\t}\n\t\t\n\t\tthis.points.ui.forEach(el => el.remove());\n\t\tthis.points.coords = [];\n\t\tthis.context.clearRect(0,0,this.width,this.height);\n\t\tthis.grid.draw();\n\t}\n\t\n\t#reposition (e) {\n\t\tconst x = e.touches ? e.touches[0].clientX : e.clientX;\n\t\tconst y = e.touches ? e.touches[0].clientY : e.clientY;\n\t\tthis.bounding = this.canvas.getBoundingClientRect();\n\t\tthis.coord.x = (x - this.bounding.left) / this.bounding.width * this.width;\n\t\tthis.coord.y = (y - this.bounding.top) / this.bounding.height * this.height;\n\t}\n\t\n\t#down(e) {\n\t\tthis.#addPoint();\n\t\tthis.#drawPath();\n\t}\n\t\n\t#move(e) {\n\t\tthis.#reposition(e);\n\t\tthis.#showPoint();\n\t}\n\t\n\t#addPoint() {\n\t\tif (this.cell) {\n\t\t\tconst coords = this.cell.getClosestPoint(this.coord.x,this.coord.y,this.cellSize / 4);\n\t\t\tif (coords) {\n\t\t\t\tconst point = this.pointHelper.cloneNode();\n\t\t\t\tpoint.style.left = coords.x - this.cellSize / 4 + 'px';\n\t\t\t\tpoint.style.top = coords.y - this.cellSize / 4 + 'px';\n\t\t\t\tpoint.style.display = 'block';\n\t\t\t\tthis.canvasBlock.appendChild(point);\n\t\t\t\tthis.points.ui.push(point);\n\t\t\t\tthis.points.coords.push([coords.x,coords.y]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t#drawPath() {\n\t\tif (this.points.coords.length >= 2) {\n\t\t\tthis.context.beginPath();\n\t\t\tthis.context.lineWidth = 5;\n\t\t\tthis.context.lineCap = \"round\";\n\t\t\tthis.context.strokeStyle = this.color;\n\t\t\tconst start = this.points.coords[0];\n\t\t\tthis.context.moveTo(start[0], start[1]);\n\t\t\t\n\t\t\tfor (let i = 1; i < this.points.coords.length; i++) {\n\t\t\t\tconst point = this.points.coords[i];\n\t\t\t\tthis.context.lineTo(point[0], point[1]);\n\t\t\t}\n\t\t\t\n\t\t\tthis.context.stroke();\n\t\t}\n\t}\n\t\n\t#showPoint() {\n\t\tthis.cell = this.grid.getCell(this.coord.x,this.coord.y);\n\t\tif (this.cell) {\n\t\t\tconst coords = this.cell.getClosestPoint(this.coord.x,this.coord.y,this.cellSize / 4);\n\t\t\tif (coords) {\n\t\t\t\tthis.pointHelper.style.left = coords.x - this.cellSize / 4 + 'px';\n\t\t\t\tthis.pointHelper.style.top = coords.y - this.cellSize / 4 + 'px';\n\t\t\t\tthis.pointHelper.style.display = 'block';\n\t\t\t} else {\n\t\t\t\tthis.pointHelper.style.display = 'none';\n\t\t\t}\n\t\t} else {\n\t\t\tthis.pointHelper.style.display = 'none';\n\t\t}\n\t}\n\t\n}\n","/*\n#version 300 es\n#define varying in\nout highp vec4 pc_fragColor;\n#define gl_FragColor pc_fragColor\n#define gl_FragDepthEXT gl_FragDepth\n#define texture2D texture\n#define textureCube texture\n#define texture2DProj textureProj\n#define texture2DLodEXT textureLod\n#define texture2DProjLodEXT textureProjLod\n#define textureCubeLodEXT textureLod\n#define texture2DGradEXT textureGrad\n#define texture2DProjGradEXT textureProjGrad\n#define textureCubeGradEXT textureGrad\nprecision highp float;\nprecision highp int;\n#define HIGH_PRECISION\n#define SHADER_NAME MeshStandardMaterial\n#define STANDARD \n#define GAMMA_FACTOR 2\n#define USE_FOG\n#define FOG_EXP2\n#define USE_MAP\n#define USE_LIGHTMAP\n#define USE_UV\n#define USE_SHADOWMAP\n#define SHADOWMAP_TYPE_PCF_SOFT\nuniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\nuniform bool isOrthographic;\n\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\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}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}\n\n*/\nexport default `\nvec4 lightMapTexelToLinear( vec4 value ) { return LinearToLinear( value ); }\nvec4 mapTexelToLinear( vec4 value ) { return LinearToLinear( value ); }\nvec4 envMapTexelToLinear( vec4 value ) { return LinearToLinear( value ); }\n\n#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform vec3 attenuationColor;\n\tuniform float attenuationDistance;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#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#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; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\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 max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\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 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}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\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 linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.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}\nvec3 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}\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#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#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif\n#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif\n#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif\n#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif\n#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif\nvec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\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\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotVH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_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_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\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}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\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_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif\n#ifdef USE_TRANSMISSION\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 vec4 vWorldPosition;\n\tvec3 getVolumeTransmissionRay(vec3 n, vec3 v, float thickness, float ior, 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(float roughness, float ior) {\n\t\treturn roughness * clamp(ior * 2.0 - 2.0, 0.0, 1.0);\n\t}\n\tvec3 getTransmissionSample(vec2 fragCoord, float roughness, float ior) {\n\t\tfloat framebufferLod = log2(transmissionSamplerSize.x) * applyIorToRoughness(roughness, ior);\n\t\treturn texture2DLodEXT(transmissionSamplerMap, fragCoord.xy, framebufferLod).rgb;\n\t}\n\tvec3 applyVolumeAttenuation(vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance) {\n\t\tif (attenuationDistance == 0.0) {\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\tvec3 getIBLVolumeRefraction(vec3 n, vec3 v, float perceptualRoughness, vec3 baseColor, vec3 specularColor,\n\t\tvec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness,\n\t\tvec3 attenuationColor, 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\tvec3 transmittedLight = getTransmissionSample(refractionCoords, perceptualRoughness, ior);\n\t\tvec3 attenuatedColor = applyVolumeAttenuation(transmittedLight, length(transmissionRay), attenuationColor, attenuationDistance);\n\t\treturn (1.0 - specularColor) * attenuatedColor * baseColor;\n\t}\n#endif\n#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 7.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.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\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\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\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + 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 ), m0, cubeUV_maxMipLevel );\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#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\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#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness);\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif\n#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\nuniform 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 GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if 1 > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ 1 ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if 0 > 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[ 0 ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if 0 > 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[ 0 ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if 0 > 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[ 0 ];\n#endif\n#if 0 > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ 0 ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif\nstruct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if 0 > 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.specularRoughness;\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#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_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_Diffuse_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 CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * 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#ifdef USE_SHADOWMAP\n\t#if 1 > 0\n\t\tuniform sampler2D directionalShadowMap[ 1 ];\n\t\tvarying vec4 vDirectionalShadowCoord[ 1 ];\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[ 1 ];\n\t#endif\n\t#if 0 > 0\n\t\tuniform sampler2D spotShadowMap[ 0 ];\n\t\tvarying vec4 vSpotShadowCoord[ 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[ 0 ];\n\t#endif\n\t#if 0 > 0\n\t\tuniform sampler2D pointShadowMap[ 0 ];\n\t\tvarying vec4 vPointShadowCoord[ 0 ];\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[ 0 ];\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\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\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#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 = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\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#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 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\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#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#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif\n#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif\n#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif\n#if 0 > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ 0 ];\n#endif\nvoid main() {\n#if 0 > 0\n\tvec4 plane;\n\t\n\t#if 0 < 0\n\t\tbool clipped = true;\n\t\t\n\t\tif ( clipped ) discard;\n\t#endif\n#endif\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#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#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif\n#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif\nfloat roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif\nfloat metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif\nfloat faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\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#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#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif\n#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#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif\nPhysicalMaterial 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.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\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_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif\n\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( 0 > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && 0 > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t\n#endif\n#if ( 0 > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && 0 > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t\n#endif\n#if ( 1 > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && 1 > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t\n\t\tdirectionalLight = directionalLights[ 0 ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( 0 < 1 )\n\t\tdirectionalLightShadow = directionalLightShadows[ 0 ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ 0 ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ 0 ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t\n#endif\n#if ( 0 > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( 0 > 0 )\n\t\t\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#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif\n#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#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.specularRoughness );\n\t#endif\n#endif\n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n#ifdef USE_TRANSMISSION\n\tfloat transmissionFactor = transmission;\n\tfloat thicknessFactor = thickness;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\ttransmissionFactor *= texture2D( transmissionMap, vUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSNMAP\n\t\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition.xyz / vWorldPosition.w;\n\tvec3 v = normalize( cameraPosition - pos );\n\tfloat ior = ( 1.0 + 0.4 * reflectivity ) / ( 1.0 - 0.4 * reflectivity );\n\tvec3 transmission = transmissionFactor * getIBLVolumeRefraction(\n\t\tnormal, v, roughnessFactor, material.diffuseColor, totalSpecular,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\n\t\tattenuationColor, attenuationDistance );\n\ttotalDiffuse = mix( totalDiffuse, transmission, transmissionFactor );\n#endif\n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\ngl_FragColor = linearToOutputTexel( gl_FragColor );\n#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#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif\n#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif\n}\n`","'use strict';\n\n\nimport { Box3, Matrix4, Plane, Quaternion, Vector3 } from 'three';\nimport gsap from \"gsap\";\nimport { Buildings, GSAPAnimationMixer, isMobile, projectMode, threeJsVariables } from '../../settings';\nimport { getUrlParam, isCylinderDisplayModeEqual, isOneMesh, multimaterialNeedsUpdate } from '../../functions';\nimport {updateShadowMap} from \"./lights\";\nimport { sceneObjectsGroup } from '../points/points';\n\nconst DEFAULT_PARAMS = {\n active: false,\n geometricCenter: false,\n distance: 500,\n offset: 2,\n introHeight: 20,\n heightOffset: 0\n};\n\nexport class Slicer {\n constructor (renderer,params) {\n this.params = params || DEFAULT_PARAMS;\n\n if (this.active) {\n renderer.localClippingEnabled = true;\n }\n\n this.presets = {};\n this.selectedPreset = null;\n this.bbox = new Box3();\n this.size = new Vector3();\n this.center = new Vector3();\n this.numberOfPlanes = 5;\n this.planes = [];\n this.setDefaultPlanes();\n }\n\n setDefaultPlanes() {\n this.planes.length = 0;\n const x1 = new Plane( new Vector3( - 1, 0, 0 ), this.params.distance );\n x1.defaultNormal = new Vector3().copy(x1.normal);\n const x2 = new Plane( new Vector3( - 1, 0, 0 ), -this.params.distance ).negate();\n x2.defaultNormal = new Vector3().copy(x2.normal);\n const y = new Plane( new Vector3( 0, - 1, 0 ), this.params.distance );\n y.defaultNormal = new Vector3().copy(y.normal);\n const z1 = new Plane( new Vector3( 0, 0, - 1 ), this.params.distance );\n z1.defaultNormal = new Vector3().copy(z1.normal);\n const z2 = new Plane( new Vector3( 0, 0, - 1 ), -this.params.distance ).negate();\n z2.defaultNormal = new Vector3().copy(z2.normal);\n\n this.planes.push(x1,x2,y,z1,z2);\n\n const defaultPlanesCount = 5;\n const count = this.numberOfPlanes - defaultPlanesCount;\n if (count > 0) {\n for (let i = 0; i < count; i++) {\n this.addNewPlane();\n }\n }\n }\n\n addNewPlane() {\n const plane = new Plane( new Vector3( - 1, 0, 0 ), this.params.distance );\n plane.defaultNormal = new Vector3().copy(plane.normal);\n this.planes.push(plane);\n }\n\n add(mesh) {\n if (!this.active) return;\n if (Array.isArray(mesh.material)) {\n mesh.material.forEach(subMaterial => {\n subMaterial.clippingPlanes = this.planes;\n subMaterial.clipShadows = true;\n\n });\n } else {\n mesh.material.clipShadows = true;\n mesh.material.clippingPlanes = this.planes;\n }\n }\n\n keyPlanEnter(building) {\n if (projectMode.LiteMode.isActive() && projectMode.LiteMode.modeIs('schematic'))\n return;\n const copy = building.modelGroup.clone(true);\n let clonedMaterial = [];\n let material = copy.children[0]?.material;\n\n if (Array.isArray(material)) {\n material.forEach(subMaterial => {\n const clone = subMaterial.clone();\n clone.clippingPlanes = null;\n clone.depthWrite = false;\n clone.transparent = true;\n clone.opacity = 0.7;\n clonedMaterial.push(clone);\n });\n\n } else {\n const clone = material.clone();\n clone.depthWrite = false;\n clone.clippingPlanes = null;\n clone.transparent = true;\n clone.opacity = 0.7;\n clonedMaterial = clone;\n }\n\n copy.traverse(el => {\n if (el.isMesh) {\n el.castShadow = false;\n el.receiveShadow = false;\n el.material = clonedMaterial;\n }\n });\n\n threeJsVariables.scene.add(copy);\n\n return gsap.to(clonedMaterial,{\n opacity: 0,\n duration: GSAPAnimationMixer.duration,\n ease: GSAPAnimationMixer.ease,\n onUpdate: multimaterialNeedsUpdate,\n onComplete: () => {\n copy.removeFromParent();\n }\n });\n }\n\n restoreXZ(duration) {\n if (config.features.privateHouseMode) return;\n const animations = [];\n this.planes.forEach(plane => {\n animations.push(Slicer.#getAnimationNormal(plane,duration));\n animations.push(Slicer.#getAnimationConstant(plane,duration,this.params.distance));\n });\n\n return animations;\n }\n\n intro() {\n if (!this.active) return;\n\n const buildings = Buildings.getBuildingsArray();\n\n if (this.y === this.distance) {\n buildings.forEach(building => building.showSceneObjectsOfCurrentBuilding());\n return;\n }\n\n buildings.forEach(building => building.hideSceneObjectsOfCurrentBuilding());\n\n const start = {\n value: this.params.introHeight\n };\n\n const box = new Box3();\n const size = new Vector3();\n let showObjects = false;\n buildings.forEach(building => box.expandByObject(building.modelGroup));\n box.getSize(size);\n\n return gsap.to(start,{\n value: this.params.distance,\n ease: GSAPAnimationMixer.ease,\n duration: GSAPAnimationMixer.duration * 5,\n onUpdate: () => {\n this.y = start.value;\n if (start.value > size.y && !showObjects) {\n showObjects = true;\n buildings.forEach(building => building.showSceneObjectsOfCurrentBuilding());\n }\n\n updateShadowMap();\n }\n });\n }\n\n setInitialIntroHeight() {\n if (!this.active) return;\n\n const inSearch = getUrlParam('p') === 'search';\n if (inSearch) {\n this.y = this.params.distance;\n return;\n }\n\n this.y = this.params.introHeight;\n }\n\n cropXZ(duration) {\n if (config.features.privateHouseMode || isCylinderDisplayModeEqual('show all')) return;\n const animations = [];\n\n if (this.selectedPreset) {\n this.planes.forEach((plane,index) => {\n const presetPlane = this.selectedPreset[index];\n const vec = presetPlane ? presetPlane.normal : null;\n const constant = presetPlane ? presetPlane.constant : this.params.distance;\n animations.push(Slicer.#getAnimationNormal(plane,duration,vec));\n animations.push(Slicer.#getAnimationConstant(plane,duration,constant));\n });\n } else {\n const offset = this.params.offset;\n const end = {\n 0: (this.center.x + this.size.x / 2) + offset,\n 1: (this.size.x / 2 - this.center.x) + offset,\n 3: (this.center.z + this.size.z / 2) + offset,\n 4: (this.size.z / 2 - this.center.z) + offset\n };\n\n this.planes.forEach((plane,index) => {\n const planeConstant = end[index] ? end[index] : this.params.distance;\n animations.push(Slicer.#getAnimationNormal(plane,duration));\n animations.push(Slicer.#getAnimationConstant(plane,duration,planeConstant));\n });\n }\n\n return animations;\n }\n\n setSlicerPresets(data) {\n this.presets = data;\n }\n\n set target(object) {\n this.bbox.setFromObject(object).getSize(this.size);\n if (this.params?.geometricCenter) {\n this.bbox.getCenter(this.center);\n } else {\n object.getWorldPosition(this.center);\n }\n\n this.selectedPreset = this.presets[object.name];\n }\n\n set y(y) {\n this.planes[2].constant = y + this.heightOffset;\n }\n\n set x1(x) {\n this.planes[0].constant = x;\n }\n\n set x2(x) {\n this.planes[1].constant = x;\n }\n\n set z1(z) {\n this.planes[3].constant = z;\n }\n\n set z2(z) {\n this.planes[4].constant = z;\n }\n\n get y() {\n return this.planes[2].constant;\n }\n\n get active() {\n return this.params.active;\n }\n\n get distance() {\n return this.params.distance;\n }\n\n get heightOffset() {\n return this.params.heightOffset || DEFAULT_PARAMS.heightOffset;\n }\n\n static #getAnimationNormal(plane, duration, vec) {\n const vector = vec ? vec : plane.defaultNormal;\n \n if (duration === 'immediately') {\n plane.normal.copy(vector);\n return true;\n }\n \n return gsap.to(plane.normal,{\n x: vector.x,\n y: vector.y,\n z: vector.z,\n ease: GSAPAnimationMixer.ease,\n duration: duration || GSAPAnimationMixer.duration\n });\n }\n\n static #getAnimationConstant(plane,duration,constant) {\n const start = {value: plane.constant};\n \n if (duration === 'immediately') {\n plane.constant = constant;\n return true;\n }\n \n return gsap.to(start,{\n value: constant,\n ease: GSAPAnimationMixer.ease,\n duration: duration || GSAPAnimationMixer.duration,\n onUpdate: () => plane.constant = start.value\n });\n }\n\n}\n","'use strict';\n\nimport TWEEN from '../../../js/libs/tween.umd';\nimport { GSAPAnimationMixer, settingsData, threeJsVariables } from '../../settings';\nimport { enableOrbitControls, getCurrentCameraDistance } from '../controls/orbitControls';\nimport gsap from 'gsap';\n\n\nexport function animateCamera(\n currentCameraPosition,\n newCameraPosition,\n currentOrbitControlsTarget,\n newOrbitControlsTarget,\n currentDistance = getCurrentCameraDistance(),\n newDistance = threeJsVariables.orbitControls.minDistance,\n angle = threeJsVariables.orbitControls.getPolarAngle(),\n polarCameraCorrection = threeJsVariables.orbitControls.polarCameraCorrection,\n duration = 1000,\n easing = TWEEN.Easing.Sinusoidal.InOut,\n onStartCallback = ()=>{},\n onCompleteCallback = ()=>{})\n{\n const start = {\n x1: currentCameraPosition.x, // current camera position x\n y1: currentCameraPosition.y, // current camera position y\n z1: currentCameraPosition.z, // current camera position z\n x2: currentOrbitControlsTarget.x, // current control center point x\n y2: currentOrbitControlsTarget.y, // current control center point y\n z2: currentOrbitControlsTarget.z, // current control center point z\n dist: currentDistance,\n angle: threeJsVariables.orbitControls.getPolarAngle(),\n cameraCorrection: threeJsVariables.orbitControls.polarCameraCorrection,\n };\n\n return gsap.to(start,{\n x1: newCameraPosition.x, // a new camera position x\n y1: newCameraPosition.y, // a new camera position y\n z1: newCameraPosition.z, // a new camera position z\n x2: newOrbitControlsTarget.x, // a new control center point x\n y2: newOrbitControlsTarget.y, // a new control center point y\n z2: newOrbitControlsTarget.z, // new control center point z\n dist: newDistance,\n angle: angle,\n cameraCorrection: polarCameraCorrection,\n duration: GSAPAnimationMixer.duration,\n ease: GSAPAnimationMixer.ease,\n onStart: () => {\n settingsData.bombBlock = true;\n enableOrbitControls(false);\n onStartCallback();\n },\n onUpdate: () => {\n threeJsVariables.perspectiveCamera.position.x = start.x1;\n threeJsVariables.perspectiveCamera.position.y = start.y1;\n threeJsVariables.perspectiveCamera.position.z = start.z1;\n threeJsVariables.orbitControls.target.x = start.x2;\n threeJsVariables.orbitControls.target.y = start.y2;\n threeJsVariables.orbitControls.target.z = start.z2;\n // threeJsVariables.orbitControls.minDistance = start.dist;\n threeJsVariables.trackballControls.minDistance = start.dist;\n threeJsVariables.orbitControls.minPolarAngle = start.angle;\n // threeJsVariables.orbitControls.polarCameraCorrection = object.cameraCorrection;\n },\n onComplete: () => {\n enableOrbitControls(true);\n settingsData.bombBlock = false;\n threeJsVariables.renderer.shadowMap.needsUpdate = true;\n onCompleteCallback();\n }\n });\n\n // return new Promise(resolve => {\n\n // const tween = new TWEEN.Tween({\n // x1: currentCameraPosition.x, // current camera position x\n // y1: currentCameraPosition.y, // current camera position y\n // z1: currentCameraPosition.z, // current camera position z\n // x2: currentOrbitControlsTarget.x, // current control center point x\n // y2: currentOrbitControlsTarget.y, // current control center point y\n // z2: currentOrbitControlsTarget.z, // current control center point z\n // dist: currentDistance,\n // angle: threeJsVariables.orbitControls.getPolarAngle(),\n // cameraCorrection: threeJsVariables.orbitControls.polarCameraCorrection,\n // });\n // tween.to({\n // x1: newCameraPosition.x, // a new camera position x\n // y1: newCameraPosition.y, // a new camera position y\n // z1: newCameraPosition.z, // a new camera position z\n // x2: newOrbitControlsTarget.x, // a new control center point x\n // y2: newOrbitControlsTarget.y, // a new control center point y\n // z2: newOrbitControlsTarget.z, // new control center point z\n // dist: newDistance,\n // angle: angle,\n // cameraCorrection: polarCameraCorrection\n // },duration);\n // tween.delay(0);\n // tween.onStart(function() {\n // settingsData.bombBlock = true;\n // enableOrbitControls(false);\n // onStartCallback();\n // });\n // tween.onUpdate(function(object){\n // threeJsVariables.perspectiveCamera.position.x = object.x1;\n // threeJsVariables.perspectiveCamera.position.y = object.y1;\n // threeJsVariables.perspectiveCamera.position.z = object.z1;\n //\n // threeJsVariables.orbitControls.target.x = object.x2;\n // threeJsVariables.orbitControls.target.y = object.y2;\n // threeJsVariables.orbitControls.target.z = object.z2;\n // threeJsVariables.orbitControls.minDistance = object.dist;\n // threeJsVariables.orbitControls.minPolarAngle = object.angle;\n // threeJsVariables.orbitControls.polarCameraCorrection = object.cameraCorrection;\n // });\n // tween.onComplete(function(){\n // enableOrbitControls(true);\n // settingsData.bombBlock = false;\n // threeJsVariables.renderer.shadowMap.needsUpdate = true;\n // onCompleteCallback();\n // resolve();\n // });\n // tween.easing(easing);\n // tween.start();\n // });\n}\n\n// export function animateCanvasResize (\n// newSize,\n// duration = 1000,\n// easing = TWEEN.Easing.Sinusoidal.InOut,\n// onStartCallback = ()=>{},\n// onCompleteCallback = ()=>{}\n// ) {\n// const canvasCurrentSize = threeJsVariables.renderer.getSize(new Vector2());\n//\n// const tween = new TWEEN.Tween({\n// sizeX: canvasCurrentSize.x,\n// sizeY: canvasCurrentSize.y\n// });\n//\n// tween.to({\n// sizeX: newSize.x,\n// sizeY: newSize.y\n// },duration);\n//\n// tween.delay(0);\n//\n// tween.onUpdate(function(object) {\n// threeJsVariables.perspectiveCamera.aspect = object.sizeX / object.sizeY;\n// threeJsVariables.perspectiveCamera.updateProjectionMatrix();\n// threeJsVariables.labelRenderer.setSize(object.sizeX, object.sizeY);\n// threeJsVariables.renderer.setSize(object.sizeX,object.sizeY);\n// });\n//\n// tween.onStart(function() {\n// onStartCallback();\n// });\n//\n// tween.onComplete(function() {\n// onCompleteCallback();\n// });\n//\n// tween.easing(easing);\n// tween.start();\n//\n// return tween;\n// }\n\n// export function animateLightIntensity (\n// light,\n// newIntensity,\n// duration = 1000,\n// easing = TWEEN.Easing.Sinusoidal.InOut,\n// onStartCallback = ()=>{},\n// onCompleteCallback = ()=>{})\n// {\n// const tween = new TWEEN.Tween({\n// int: light.intensity,\n// });\n//\n// tween.to({\n// int: newIntensity\n// },duration);\n//\n// tween.delay(0);\n//\n// tween.onUpdate(function(object) {\n// light.intensity = object.int;\n// });\n//\n// tween.onStart(function() {\n// onStartCallback();\n// });\n//\n// tween.onComplete(function() {\n// onCompleteCallback();\n// });\n//\n// tween.easing(easing);\n// tween.start();\n//\n// return tween;\n// }\n\nexport function add_tween_animation(args, callback, on_complete_callback,onStartCallback) {\n const animation_obj = args.animation_obj;\n const start = args.start;\n const target = args.target;\n const duration = args.duration;\n const easing = args.easing;\n const delay = args.delay;\n settingsData.animation_name = 'animation_' + animation_obj.length;\n const animation = new TWEEN.Tween(start).to(target, duration);\n TWEEN.add(animation);\n animation.delay(delay);\n animation.onStart(()=>{\n // rendererAnimationPause(false);\n onStartCallback();\n });\n animation.onUpdate((e)=>{\n enableOrbitControls(false);\n callback(e);\n });\n animation.onComplete(()=>{\n enableOrbitControls(true);\n on_complete_callback();\n });\n animation.easing(easing);\n animation.start();\n}\n\n// function checkTweenAnimationIsDone () {\n// const isPlayed = tweenAnimationArray.filter(animation => animation._isPlaying === false);\n// if (isPlayed.length === 0){\n// enableOrbitControls(false);\n// return;\n// } else if (isPlayed.length === tweenAnimationArray.length -1){\n// enableOrbitControls(true);\n// tweenAnimationArray = [];\n// }\n// }\n\n// export class GsapAnimation {\n// constructor () {\n// this.animations = [];\n// }\n//\n// add(animation){\n// this.animations.push(animation);\n// }\n//\n// check(){\n// const isPlayed = this.animations.filter(animation => animation._time === 1);\n// if (isPlayed.length === this.animations.length){\n// rendererAnimationPause(true);\n// } else {\n// rendererAnimationPause(false);\n// }\n// }\n// }","import { Buildings, resourcesFolder, settingsData, threeJsVariables } from '../../settings';\nimport {GLTFLoader} from 'three/examples/jsm/loaders/GLTFLoader';\nimport { isOneMesh, lazyLoadingData } from '../../functions';\nimport {\n Color,\n EquirectangularReflectionMapping,\n Box3,\n Group,\n Matrix4,\n RepeatWrapping,\n Euler,\n Quaternion, Vector3, DynamicDrawUsage, InstancedMesh, Mesh, BoxGeometry, MeshBasicMaterial, LinearSRGBColorSpace,\n} from 'three';\nimport {SelectedObjectType} from \"../../common\";\nimport { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader';\nimport { Building, OneMeshBuildings } from '../building/Building';\nimport { BuildingOutline } from '../building/BuildingOutline';\nimport { addBuildingsIntersections } from '../poi/poiCss';\n\nlet indexFloor = 0;\n\nexport function loadModelTexturesFromAzure(textureLoader) {\n const texturePromiseArray = [];\n const {cdnRepository,projectFolder} = config;\n const textures = config.resources.buildings.textures;\n const url = `${cdnRepository}/${projectFolder}/${resourcesFolder}/textures/building/`;\n\n for (const key in textures) {\n const texture = lazyLoadingData(textureLoader, url + textures[key].path);\n texture.then(res => res.name = key);\n texturePromiseArray.push(texture);\n }\n\n return texturePromiseArray;\n}\n\nexport function loadBuildingModelsFromAzure(manager,dracoLoader) {\n const {cdnRepository,projectFolder} = config;\n const {folder,name,format,count} = config.resources.buildings;\n let localCount = 0;\n let loader;\n const modelsPromiseArray = [];\n\n switch (format) {\n case 'gltf':\n loader = new GLTFLoader(manager);\n loader.setDRACOLoader(dracoLoader);\n break;\n case 'fbx':\n loader = new FBXLoader(manager);\n break;\n }\n\n for (let i = 1; i <= count; i++){\n const buildName = `${name}_${i < 10 ? '0' + i : i}`;\n\n // if (localCount > domains.length - 1) {\n // localCount = 0;\n // }\n // const url = `${domains[count]}/${buildName}.${buildingModelsFormat}`;\n const url = `${cdnRepository}/${projectFolder}/${folder}/${buildName}.${format}`;\n const model = lazyLoadingData(loader, url);\n modelsPromiseArray.push(model);\n // localCount++;\n }\n\n return modelsPromiseArray;\n}\n\n\nexport const bundle_initAutoBuildingsScript = (group,data,textures)=> {\n\n let building;\n\n if (isOneMesh()) {\n addBuildingsIntersections(data);\n building = Buildings.addOneMeshModel(data);\n } else {\n building = new Building(data).create();\n }\n\n group.add(building);\n\n new BuildingOutline(building.name);\n\n return building;\n\n\n // data.children = sortFloors(data);\n // const model = data\n // indexFloor = 0;\n // const {newModelGroup, instFloors} = createModel(model, textures);\n //\n //\n // instFloors.length && settingsData.instanced_floors_switch.push(instFloors);\n // group.add(newModelGroup)\n // return newModelGroup\n}\n\n\nexport function initAutoBuildingsScript(data) {\n const {format} = config.resources.buildings;\n const {projectRotation} = config.threejs;\n const textures = data.filter(element => element.image);\n let models;\n\n const projectGroup = new Group();\n projectGroup.name = 'Project Buildings';\n projectGroup.rotation.set(projectRotation.x,projectRotation.y,projectRotation.z);\n\n switch (format) {\n case 'gltf':\n\n models = data.filter(element => !element.image).map(element => element.scene.children[0]);\n models.forEach(model => {\n model.children = sortFloors(model);\n indexFloor = 0;\n const {newModelGroup, instFloors} = createModel(model, textures);\n instFloors.length && settingsData.instanced_floors_switch.push(instFloors);\n // threeJsVariables.scene.add(newModelGroup);\n projectGroup.add(newModelGroup);\n });\n threeJsVariables.scene.add(projectGroup);\n threeJsVariables.renderList.reorder();\n\n break;\n case 'fbx':\n models = data.filter(element => !element.image);\n models.forEach(model => {\n model.children = sortFloors(model);\n indexFloor = 0;\n const {newModelGroup, instFloors} = createModel(model, textures);\n instFloors.length && settingsData.instanced_floors_switch.push(instFloors);\n // threeJsVariables.scene.add(newModelGroup);\n projectGroup.add(newModelGroup);\n });\n threeJsVariables.scene.add(projectGroup);\n threeJsVariables.renderList.reorder();\n\n\n break;\n\n }\n\n\n // const models = data.filter(element => !element.image).map(element => element.scene.children[0]);\n // const projectGroup = new Group();\n // projectGroup.name = 'Project Buildings';\n // //For Cnaan env\n // // projectGroup.position.set(19.860,-60,-29.170);\n // // projectGroup.rotation.set(0,1.2,0);\n // // projectGroup.scale.set(1,1,1);\n // models.forEach(model => {\n // model.children = sortFloors(model);\n // indexFloor = 0;\n // const {newModelGroup, instFloors} = createModel(model, textures);\n // instFloors.length && settingsData.instanced_floors_switch.push(instFloors);\n // threeJsVariables.scene.add(newModelGroup);\n // projectGroup.add(newModelGroup);\n // });\n // threeJsVariables.scene.add(projectGroup);\n}\n\nexport function sortFloors(model) {\n return model.children.sort((prev, next) => prev.position.y - next.position.y);\n}\n\nexport function createModel(model, textures) {\n const instFloors = [];\n const disappearArr = [];\n const modelName = model.name;\n\n const newModelGroup = new Group();\n newModelGroup.name = model.name;\n newModelGroup.position.set(model.position.x, model.position.y, model.position.z);\n newModelGroup.scale.set(model.scale.x, model.scale.y, model.scale.z);\n newModelGroup.rotation.set(model.rotation.x, model.rotation.y, model.rotation.z);\n\n if (model.children.length) {\n\n addModelTextures(model.children[0], textures);\n\n model.children.forEach(floor => {\n if (floor.name.match(/floor\\d/g)) {\n // const [buildingName, floorName, floorHeight] = floor.name.split('_');\n // const floorHeightInMeter = parseFloat(floorHeight) / 100;\n // let [floorFrom, floorTo] = floorName.split(/\\D{1,}/g).splice(1, 2);\n // if (floorTo === undefined) {\n // floorTo = floorFrom;\n // }\n // const instanceCount = Number(floorTo - floorFrom + 1);\n // const instanceMesh = makeInstanceMesh(floor, instanceCount, instFloors, 'add', floorHeightInMeter);\n const instanceMesh = makeInstanceMesh(floor, undefined, instFloors, 'add',modelName);\n newModelGroup.add(instanceMesh);\n } else {\n const instanceMesh = makeInstanceMesh(floor, 1, instFloors, '',modelName);\n disappearArr.push(instanceMesh);\n newModelGroup.add(instanceMesh);\n }\n });\n } else {\n createBuildingAmenities(model, newModelGroup, textures);\n }\n\n if (disappearArr.length) {\n settingsData.objectToDisappear.push(disappearArr);\n }\n\n return {\n newModelGroup,\n instFloors\n };\n}\n\n/*\nexport function rebuildMeshMaterial (model) {\n for (let i=0; i < model.children.length; i++){\n const newMaterial = new MeshStandardMaterial({side:THREE.FrontSide});\n model.children[i].material = newMaterial;\n }\n}\n*/\n\nfunction addModelTextures(modelMesh, textures) {\n const globalSettings = config.resources.buildings.texturesSettings;\n const personalSettings = config.resources.buildings.textures;\n\n textures.forEach(texture => {\n const settings = personalSettings[texture.name];\n\n modelMesh.material[texture.name] = texture;\n\n Object.entries(settings).forEach(([key,value])=>{\n if (key !== 'path'){\n modelMesh.material[texture.name][key] = value;\n modelMesh.material[texture.name].wrapS = RepeatWrapping;\n modelMesh.material[texture.name].wrapT = RepeatWrapping;\n modelMesh.material[texture.name].offset.set(0,0);\n modelMesh.material[texture.name].repeat.set(1,1);\n }\n });\n\n if (texture.name === 'envMap') {\n // const pmremGenerator = new THREE.PMREMGenerator(threeJsVariables.renderer);\n // pmremGenerator.compileEquirectangularShader();\n // modelMesh.material[texture.name] = pmremGenerator.fromEquirectangular(texture).texture;\n // pmremGenerator.dispose();\n modelMesh.material.envMap.mapping = EquirectangularReflectionMapping;\n }\n });\n\n modelMesh.material.color = new Color().setHex(0xffffff,LinearSRGBColorSpace);\n\n if (globalSettings){\n Object.entries(globalSettings).forEach(([key,value])=>{\n modelMesh.material[key] = value;\n });\n }\n}\n\nfunction createBuildingAmenities(amenities, projectGroup, textures) {\n const amenitiesName = amenities.name;\n const instanceMesh = makeInstanceMesh(amenities, 1, [], '', amenitiesName);\n projectGroup.add(instanceMesh);\n}\n\nfunction makeInstanceMesh(baseMesh, count, inst_floors, action,modelName) {\n let rotation = new Euler(baseMesh.rotation.x, baseMesh.rotation.y, baseMesh.rotation.z, 'XYZ');\n let rotationQ = new Quaternion().setFromEuler(rotation);\n let matrix = new Matrix4();\n let scale = new Vector3(baseMesh.scale.x, baseMesh.scale.y, baseMesh.scale.z);\n let position;\n let floorHeight = 0;\n let from, to = 0;\n let iteration = (count) ? count : 0;\n let isFloor = false;\n\n if (baseMesh.name.match(/floor\\d/g)) {\n const [buildingName, floorName, modelFloorHeight] = baseMesh.name.split('_');\n const floorHeightInMeter = parseFloat(modelFloorHeight) / 100;\n let [floorFrom, floorTo] = floorName.split(/\\D{1,}/g).splice(1, 2);\n if (floorTo === undefined) {\n floorTo = floorFrom;\n }\n\n from = Number(floorFrom);\n to = Number(floorTo);\n floorHeight = floorHeightInMeter;\n iteration = to - from;\n\n if (iteration === 0){\n iteration = 1;\n } else {\n iteration++;\n }\n isFloor = true;\n }\n\n // const floor = baseMesh.name.split('_')[1];\n // if (floor){\n // if (floor.match(/floor-\\d{1,}/)){\n // startFloor = Number(floor.match(/-\\d{1,}/));\n // } else {\n // startFloor = Number(floor.match(/\\d{1,}/)[0]);\n // }\n // }\n\n let elementBuildingInstance = new InstancedMesh(baseMesh.geometry, baseMesh.material, iteration);\n elementBuildingInstance.instanceMatrix.setUsage(DynamicDrawUsage);\n\n for (let i = 0; i < iteration; i++) {\n const floorPosY = baseMesh.position.y + i * floorHeight;\n position = new Vector3(baseMesh.position.x, floorPosY, baseMesh.position.z);\n matrix.compose(position, rotationQ, scale);\n elementBuildingInstance.setMatrixAt(i, matrix);\n elementBuildingInstance.renderOrder = 1;\n\n if (action) {\n inst_floors[indexFloor++] = {\n 'name': baseMesh.name,\n 'mesh': elementBuildingInstance,\n 'count': i,\n 'position': {x: position.x, y: position.y, z: position.z},\n 'basePosition': {x: position.x, y: position.y, z: position.z},\n 'rotation': rotation,\n 'diff': {\n x: 0,\n y: position.y,\n z: 0,\n },\n 'matrix': matrix,\n 'floor': (isFloor) ? from + i : indexFloor,\n };\n\n }\n }\n elementBuildingInstance.name = `${baseMesh.name}_instance`;\n elementBuildingInstance.userData = {\n type: SelectedObjectType.Building,\n main_building_item: true,\n buildingFloors: true,\n };\n\n //elementBuildingInstance = setCenterMeshFloor(elementBuildingInstance);\n\n elementBuildingInstance.frustumCulled = false;\n elementBuildingInstance.receiveShadow = true;\n elementBuildingInstance.castShadow = true;\n\n return elementBuildingInstance;\n}\n\nfunction setCenterMeshFloor(elementBuildingInstance) {\n\n const centerGeometry = new BoxGeometry(0.0001, 0.0001, 0.0001);\n const centerMaterial = new MeshBasicMaterial({color: 0xffff00});\n const floorCenter = new Mesh(centerGeometry, centerMaterial);\n floorCenter.name = 'floor_center';\n floorCenter.position.set(0, 0, elementBuildingInstance.position.z);\n\n if (elementBuildingInstance.type === 'Group') {\n elementBuildingInstance.children.push(floorCenter);\n } else {\n elementBuildingInstance.add(floorCenter);\n }\n\n return elementBuildingInstance;\n}\n\nconst computeBoundingBox = (m) => {\n\n const geometry = m.geometry;\n const count = m.count;\n\n let box = new Box3()\n\n if ( geometry.boundingBox === null ) {\n geometry.computeBoundingBox()\n }\n\n box.makeEmpty()\n let _instanceLocalMatrix = new Matrix4()\n\n for ( let i = 0; i < count; i ++ ) {\n\n m.getMatrixAt( i, _instanceLocalMatrix );\n\n let _box3 = new Box3()\n _box3.copy( geometry.boundingBox ).applyMatrix4( _instanceLocalMatrix )\n\n box.union( _box3 )\n\n }\n return box\n}\n\nexport function addObjectsToOpacity() {\n // const instFloors = settingsData.instanced_floors_switch;\n\n\n // buildings_info.forEach(building => {\n // for (let i = 0; i < instFloors.length; i++) {\n // const mainBuilding = instFloors[i][0].mesh.parent;\n // if (mainBuilding.name === building.name) {\n // mainBuilding.updateWorldMatrix()\n // let box = new Box3()\n // box.name = building.name\n // for (let i=0;i {\n // console.log(building);\n // const getBuilding = Buildings[building.name];\n //\n // if (getBuilding){\n // settingsData.objects_to_intersection.push(...getBuilding.instances);\n // // building.objects_to_appear.push(...getBuilding.instances);\n // }\n\n\n // for (let i = 0; i < instFloors.length; i++) {\n // const mainBuilding = instFloors[i][0].mesh.parent;\n //\n // if (mainBuilding.name === building.name) {\n // building.objects_to_appear.push(mainBuilding);\n // building.intersections = [...mainBuilding.children];\n //\n // settingsData.objects_to_intersection.push(...mainBuilding.children);\n // } else {\n // building.objects_to_opacity.push(mainBuilding);\n //\n // settingsData.objects_to_intersection.push(...mainBuilding.children);\n // settingsData.additionalIntersectionObjects.push(...mainBuilding.children);\n // }\n // }\n // });\n}\n\n// export function addObjectsToOpacity() {\n// buildings_info.forEach(building => {\n// for (let i = 0; i < settingsData.instanced_floors_switch.length; i++) {\n// const instancedBuildingName = settingsData.instanced_floors_switch[i][0].name;\n// if (!instancedBuildingName.startsWith(building.name)) {\n// settingsData.instanced_floors_switch[i].forEach(item => building.objects_to_opacity.push(item.mesh));\n// const disappearObj = settingsData.Disappear[i];\n// building.objects_to_opacity.push(...disappearObj);\n// } else {\n// settingsData.instanced_floors_switch[i].forEach(item => building.objects_to_appear.push(item.mesh));\n// const disappearObj = settingsData.Disappear[i];\n// building.objects_to_appear.push(...disappearObj);\n// }\n// }\n// });\n// }\n","'use strict';\r\n\r\nimport {\r\n Buildings, components,\r\n globalTextures, isDesktop, isIOS,\r\n isMobile,\r\n isTablet,\r\n projectMode, resourcesFolder,\r\n settingsData,\r\n threeJsVariables\r\n} from '../../settings';\r\nimport {\r\n captureError,\r\n clamp,\r\n getFileExtension,\r\n getUrlParam, getUrlSearchQuery,\r\n isNumeric,\r\n isOneMesh,\r\n lazyLoadingAll,\r\n plugTexture,\r\n} from '../../functions';\r\nimport {\r\n bundle_initAutoBuildingsScript,\r\n initAutoBuildingsScript,\r\n loadBuildingModelsFromAzure,\r\n loadModelTexturesFromAzure,\r\n} from './autoBuildingFunctions';\r\nimport {\r\n bundle_initAutoHighlightsScript,\r\n getHighlights,\r\n initAutoHighlightsScript,\r\n loadHighlightsModelFromAzure,\r\n setHighlights,\r\n setProjectSettings,\r\n} from './autoSelectionBoxes';\r\nimport {getAmenities, getCommonAssets, getCrmData, getProps, getSettings, getSpecifications, sendLogs} from '../crm/crm-requests';\r\nimport {\r\n basic_tile,\r\n environmentToggle,\r\n loadTilesEnvironment,\r\n setColorGamma,\r\n setDefaultTileMaterial,\r\n setFog,\r\n setHMap, setTilesShadowParams,\r\n} from './environment';\r\nimport { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader';\r\nimport { intro } from './camera';\r\nimport { EnvironmentToggle, prepareSphere } from './sceneBackground';\r\nimport { getDreamsSliderScope, removePreloader } from '../components/preloader/preloader';\r\nimport {\r\n addSceneObjects,\r\n hideSceneObjects,\r\n removeObjectsFromScene,\r\n sceneObjectsGroup,\r\n showSceneObjects,\r\n} from '../points/points';\r\nimport {\r\n ClampToEdgeWrapping,\r\n Data3DTexture,\r\n DoubleSide,\r\n EquirectangularReflectionMapping,\r\n Group,\r\n InstancedMesh,\r\n LinearFilter,\r\n LinearMipmapLinearFilter, LinearSRGBColorSpace,\r\n Matrix4,\r\n MeshBasicMaterial,\r\n MeshPhongMaterial,\r\n MeshStandardMaterial, NearestFilter, Plane, PointsMaterial,\r\n RepeatWrapping,\r\n RGBAFormat, SRGBColorSpace, TextureLoader,\r\n UnsignedByteType,\r\n UVMapping, Vector2, Vector3,\r\n} from 'three';\r\nimport { Cylinder } from '../mode/cylinder';\r\nimport { FloorPlan } from '../mode/floorPlan';\r\nimport { bundleSetSun, prepareLight, updateShadowMap } from './lights';\r\nimport { LiteMode } from '../mode/liteMode';\r\nimport { setAnimations, setBokeh, setLut } from '../post-processing/post-processing';\r\nimport { fullClone } from '../threejs/threejs-components';\r\nimport { OrbitDayAndNight } from '../liveAnimations/DayNight/OrbitDayAndNight';\r\nimport { Cloudflare } from '../api/Cloudflare';\r\nimport { ColorCorrection } from './colorCorrection';\r\nimport { Loader } from './loader/Loader';\r\nimport { renderUpdateValuesOnDemand} from '../../app';\r\nimport { LUT } from '../post-processing/Passes/LUT';\r\nimport { AnimateObject } from '../liveAnimations/AnimateObject';\r\nimport { OptimizationTask } from '../gui/FPS';\r\nimport {Hmap} from './Hmap';\r\nimport { Environment } from '../components/Environment/Environment';\r\nimport { InstanceLOD } from './InstanceLOD/InstanceLOD';\r\nimport {ProjectLogs} from \"../components/ProjectLogs\";\r\nimport { DisplacementMaterial } from './Materials/DisplacementMaterial';\r\nimport { ViewMode } from '../../common';\r\nimport { UpdateTask } from '../gui/LoaderTask';\r\nimport { InteriorMaterial } from './Materials/InteriorMaterial';\r\nimport { SeaMaterial } from './Materials/SeaMaterial';\r\nimport { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader';\r\nimport {MobileSearch} from \"../menu/search/MobileSearch/MobileSearch\";\r\nimport {\r\n setOrbitControls,\r\n setPanLimits,\r\n setPolarAngle,\r\n setViewDeviceTargetAndPosition,\r\n} from '../controls/orbitControls';\r\nimport { BmbyMode } from '../mode/BmbyMode';\r\nimport { enterToTheBuildingWithMaxAvailableApartments } from '../components/building-switch/building_switch';\r\nimport { getVars } from '../customStyles/customStyles';\r\nimport { rightNavigationBar } from '../menu/navigation/right-nav-bar';\r\nimport { setInitialHtmlDirection } from '../components/langSwitcher/langSwitcher';\r\nimport { addBuildingsIntersections } from '../poi/poiCss';\r\nimport { Objects } from './Objects/Objects';\r\nimport {FutureDevelopment} from \"../components/futureDevelopment/FutureDevelopment\";\r\nimport { FluffyMaterial } from './Materials/FluffyMaterial';\r\nimport { QA } from '../qa/QA';\r\nimport { LayerMaterial } from './Materials/LayerMaterial';\r\nimport {Pagination} from \"../components/pagination/Pagination\";\r\nimport { prepareObjectsToDisappear } from '../components/Disappear/Disappear';\r\nimport { CameraCollision } from './CameraCollision';\r\n\r\nconst MODELS_TYPE_BUILDING = 0\r\nconst MODELS_TYPE_SEL_BOX \t = 1\r\nconst MODELS_TYPE_SCENE_OBJ = 2\r\nconst MODELS_TYPE_SCENE_OBJ_TREE = 3\r\n\r\nconst multiTextures = {};\r\nexport const bundleTextures = {}\r\nconst bundleTexturesPMREMGenerated = {}\r\nconst bundleMaterials = {}\r\nconst bundleAnimations = {}\r\nlet _bundleTextures_counter = 0\r\nconst _tlLoader = new TextureLoader();\r\nconst hdrLoader = new RGBELoader();\r\n\r\n\r\nexport const setCoordinates = (obj,config)=>{\r\n if (obj) {\r\n obj.position.set(config.position[0],config.position[1],config.position[2])\r\n obj.rotation.set(config.rotation[0],config.rotation[1],config.rotation[2])\r\n obj.scale.set(config.scale[0],config.scale[1],config.scale[2])\r\n }\r\n}\r\n\r\n// const bundleTexturesLoaded = (t)=>{\r\n// _bundleTextures_counter = _bundleTextures_counter - 1\r\n// if (_bundleTextures_counter!==0){\r\n// return\r\n// }\r\n//\r\n// // threeJsVariables.renderer.initTexture(t);\r\n// // генерируем envMap\r\n// for (let link in bundleTextures){\r\n// const t = bundleTextures[link]\r\n// if (t.name==='envMap'){\r\n// let _t = threeJsVariables.pmremgenerator.fromEquirectangular(t).texture\r\n// bundleTexturesPMREMGenerated[link] = _t\r\n// }\r\n// }\r\n//\r\n// // заменяем envMap на сгенерированные\r\n// for (let materialName in bundleMaterials){\r\n// let material = bundleMaterials[materialName]\r\n// if (material.envMap!==null){\r\n//\r\n// for (let link in bundleTextures){\r\n// const t = bundleTextures[link]\r\n// if (t===material.envMap){\r\n// material.envMap = bundleTexturesPMREMGenerated[link]\r\n// }\r\n// }\r\n//\r\n// }\r\n// }\r\n//\r\n// }\r\n\r\nconst bundlePrepareMaterials = (bundleConfig,loader)=>{\r\n\r\n let listMap;\r\n\r\n if (OrbitDayAndNight.isActive) {\r\n listMap = ['map','normalMap','aoMap','roughnessMap','metalnessMap','envMap'];\r\n } else {\r\n listMap = ['map','normalMap','aoMap','roughnessMap','metalnessMap','envMap','lightMap']\r\n }\r\n\r\n const listValue = ['roughness','metalness','aoMapIntensity','envMapIntensity','lightMapIntensity','alphaTest']\r\n // TODO cdnRepository, projectFolder -> bundle\r\n const url = `${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/textures/building/`;\r\n //\r\n for (let modelName in bundleConfig.models) {\r\n let model = bundleConfig.models[modelName]\r\n\r\n let m = null\r\n switch(model.type){\r\n case MODELS_TYPE_SCENE_OBJ:\r\n case MODELS_TYPE_BUILDING:{\r\n m = new MeshStandardMaterial()\r\n m.transparent = true\r\n\r\n listMap.forEach(name=>{\r\n if (model[name]===''){\r\n return\r\n }\r\n\r\n let link = Cloudflare.resize(url + model[name]);\r\n let t = bundleTextures[link]\r\n if (t===undefined){\r\n // _bundleTextures_counter = _bundleTextures_counter + 1\r\n // t = loader.load(link,bundleTexturesLoaded)\r\n t = loader.load(link,loadedTexture => threeJsVariables.renderer.initTexture(loadedTexture));\r\n // t = loader.load(link);\r\n bundleTextures[link] = t\r\n }\r\n if (t.name===''){\r\n t.name = name\r\n }\r\n\r\n switch (name) {\r\n case 'envMap':\r\n t.mapping = EquirectangularReflectionMapping;\r\n break;\r\n case 'aoMap':\r\n case 'lightMap':\r\n t.mapping = UVMapping;\r\n t.channel = 1;\r\n break;\r\n default:\r\n t.mapping = UVMapping;\r\n break;\r\n }\r\n\r\n t.name = name;\r\n t.colorSpace = LinearSRGBColorSpace;\r\n t.wrapS = RepeatWrapping;\r\n t.wrapT = RepeatWrapping;\r\n t.offset.set(0,0);\r\n t.repeat.set(1,1);\r\n\r\n t.anisotropy = 2\r\n t.magFilter = LinearFilter\r\n t.minFilter = LinearMipmapLinearFilter\r\n\r\n m[name] = t\r\n })\r\n\r\n listValue.forEach(name=>{\r\n m[name] = parseFloat(model[name])\r\n if (name === 'lightMapIntensity') {\r\n m[name] *= Math.PI;\r\n }\r\n })\r\n\r\n if (model.alphaTest!==0){\r\n m.side = DoubleSide\r\n }\r\n }\r\n break;\r\n case MODELS_TYPE_SEL_BOX:{\r\n m = new MeshBasicMaterial()\r\n }\r\n break;\r\n case MODELS_TYPE_SCENE_OBJ_TREE:{\r\n\r\n m = new MeshStandardMaterial()\r\n\r\n m.side = DoubleSide\r\n m.transparent = true\r\n\r\n listMap.forEach(name=>{\r\n if (model[name]===''){\r\n return\r\n }\r\n let link = Cloudflare.resize(url + model[name]);\r\n let t = bundleTextures[link]\r\n if (t===undefined){\r\n // _bundleTextures_counter = _bundleTextures_counter + 1\r\n // t = loader.load(link,bundleTexturesLoaded)\r\n t = loader.load(link,loadedTexture => threeJsVariables.renderer.initTexture(loadedTexture));\r\n // t = loader.load(link);\r\n bundleTextures[link] = t\r\n }\r\n if (t.name===''){\r\n t.name = name\r\n }\r\n\r\n\r\n switch (name) {\r\n case 'envMap':\r\n t.mapping = EquirectangularReflectionMapping;\r\n break;\r\n case 'aoMap':\r\n case 'lightMap':\r\n t.mapping = UVMapping;\r\n t.channel = 1;\r\n break;\r\n default:\r\n t.mapping = UVMapping;\r\n break;\r\n }\r\n\r\n t.colorSpace = LinearSRGBColorSpace;\r\n t.wrapS = RepeatWrapping;\r\n t.wrapT = RepeatWrapping;\r\n t.offset.set(0,0);\r\n t.repeat.set(1,1);\r\n\r\n t.anisotropy = 2\r\n t.magFilter = LinearFilter\r\n t.minFilter = LinearMipmapLinearFilter\r\n\r\n m[name] = t\r\n })\r\n\r\n listValue.forEach(name=>{\r\n m[name] = parseFloat(model[name])\r\n if (name === 'lightMapIntensity') {\r\n m[name] *= Math.PI;\r\n }\r\n })\r\n\r\n }\r\n break;\r\n }\r\n\r\n bundleMaterials[modelName] = m\r\n\r\n }\r\n}\r\n\r\nconst bundlePrepareBuildings = (bundleConfig,gltf,projectGroup)=>{\r\n // buildings coordinates\r\n setCoordinates(projectGroup,bundleConfig.building)\r\n\r\n for (let name in bundleConfig.models){\r\n const model = bundleConfig.models[name]\r\n if (model.type!==MODELS_TYPE_BUILDING){\r\n continue\r\n }\r\n\r\n const material = bundleMaterials[name]\r\n\r\n const building = gltf.scene.children.find(e=>e.name===name)\r\n if (!building){\r\n continue\r\n }\r\n const group = bundle_initAutoBuildingsScript(projectGroup,building,[])\r\n\r\n fixModelUV(group,material);\r\n\r\n group.traverse(o=>{\r\n if (o.material){\r\n o.material = material\r\n o.castShadow = true\r\n o.receiveShadow = true\r\n }\r\n })\r\n }\r\n}\r\n\r\nconst bundlePrepareAnimationList = (bundleConfig,gltf)=>{\r\n for (let i=0;i{\r\n let id = 0\r\n const colors = new ColorCorrection().getColors('buildings');\r\n for (let i=0;ie.name===modelName)\r\n if (!model){\r\n continue\r\n }\r\n\r\n let c = new Group()\r\n const m = fullClone(model)\r\n \t c.add(m)\r\n\t\t c.name = 'obj_'+id+'-'+m.name\r\n id = id + 1\r\n const material = bundleMaterials[o.model]\r\n fixModelUV(m,material);\r\n\r\n m.traverse(e=>{\r\n if (e.material){\r\n e.material = material\r\n e.material.color.setStyle(colors.color,LinearSRGBColorSpace);\r\n e.material.emissive.setStyle(colors.emissive,LinearSRGBColorSpace);\r\n e.castShadow = true\r\n e.receiveShadow = true\r\n threeJsVariables.sceneObjectsSlicer.add(e);\r\n }\r\n })\r\n\r\n setCoordinates(c,o)\r\n sceneObjectsGroup.add(c)\r\n let animations = bundleAnimations[model.name]\r\n if (animations && animations.length!==0){\r\n setAnimations(m,animations)\r\n }\r\n\r\n }\r\n\r\n if (sceneObjectsGroup.children.length!==0){\r\n threeJsVariables.scene.add(sceneObjectsGroup);\r\n threeJsVariables.renderList.reorder();\r\n\r\n // if (config.resources.sceneObjects.order === 0) {\r\n // let indA = threeJsVariables.scene.children.indexOf(sceneObjectsGroup);\r\n // let indB = threeJsVariables.scene.children.indexOf(projectGroup);\r\n // threeJsVariables.scene.children[indB] = sceneObjectsGroup;\r\n // threeJsVariables.scene.children[indA] = projectGroup;\r\n // }\r\n }\r\n}\r\n\r\nconst bundlePrepareFog = (bundleConfig)=>{\r\n const fogColor = '#'+bundleConfig.fog.color;\r\n const fogDensity = parseFloat(bundleConfig.fog.density);\r\n threeJsVariables.scene.fog.color.setStyle(fogColor,LinearSRGBColorSpace);\r\n threeJsVariables.scene.fog.density = fogDensity;\r\n setFog(fogColor,fogDensity);\r\n\r\n if (!OrbitDayAndNight.isActive) {\r\n threeJsVariables.background.traverse(o=>{\r\n if (o.material){\r\n o.material.uniforms.fogColor.value.set(fogColor);\r\n o.material.uniforms.fogDensity.value = fogDensity;\r\n }\r\n })\r\n }\r\n}\r\n\r\nconst bundlePrepareSphere = (bundleConfig)=>{\r\n if (BmbyMode.active)\r\n return;\r\n const lut = LUT.getScope('background');\r\n if (lut && threeJsVariables.background) {\r\n threeJsVariables.background.traverse(el => {\r\n if (el.isMesh) {\r\n lut.include(el.material);\r\n }\r\n });\r\n }\r\n\r\n if (bundleConfig.sphere.type === 'projection' && config.resources.background?.type === 'projection') {\r\n const projection = bundleConfig.sphere.projection;\r\n if (projection) {\r\n threeJsVariables.background.children[0].radius = projection.radius;\r\n threeJsVariables.background.children[0].height = projection.height;\r\n }\r\n }\r\n\r\n setCoordinates(threeJsVariables.background,bundleConfig.sphere)\r\n config.resources.background.position.x = bundleConfig.sphere.position[0]\r\n config.resources.background.position.y = bundleConfig.sphere.position[1]\r\n config.resources.background.position.z = bundleConfig.sphere.position[2]\r\n config.resources.background.rotation.x = bundleConfig.sphere.rotation[0]\r\n config.resources.background.rotation.y = bundleConfig.sphere.rotation[1]\r\n config.resources.background.rotation.z = bundleConfig.sphere.rotation[2]\r\n config.resources.background.scale.x = bundleConfig.sphere.scale[0]\r\n config.resources.background.scale.y = bundleConfig.sphere.scale[1]\r\n config.resources.background.scale.z = bundleConfig.sphere.scale[2]\r\n}\r\n\r\nconst bundlePrepareEnvironment = (bundleConfig)=>{\r\n\r\n // if (OrbitDayAndNight.active) return;\r\n\r\n if (config.resources.bundle.minitiles && (isMobile || isTablet)) {\r\n\r\n if (!OrbitDayAndNight.isActive) {\r\n const color = '#'+bundleConfig.tile.color.color\r\n const gamma = parseFloat(bundleConfig.tile.color.gamma)\r\n setColorGamma(color,gamma)\r\n }\r\n\r\n } else {\r\n\r\n\r\n if (bundleConfig.tile.url.length === 0) return;\r\n\r\n if (threeJsVariables.environment){\r\n setCoordinates(threeJsVariables.environment,bundleConfig.tile)\r\n }\r\n if (threeJsVariables.tilesRenderer){\r\n //threeJsVariables.tilesRenderer.errorTarget = bundleConfig.tile.errorTarget\r\n }\r\n const color = '#'+bundleConfig.tile.color.color\r\n const gamma = parseFloat(bundleConfig.tile.color.gamma)\r\n setColorGamma(color,gamma)\r\n //\r\n let list = config.resources.environments.environmentTypes\r\n //console.log(list)\r\n for (let i=0;i type.apply.filter(envType => envType.device === 'desktop')[0])[0]\r\n } else if (isMobile || isTablet){\r\n env = list.filter(type => type.apply.filter(envType => envType.device === 'mobile')[0])[0]\r\n } else {\r\n env = list.filter(type => type.apply.filter(envType => envType.device === 'web')[0])[0]\r\n }\r\n\r\n loadTilesEnvironment(env)\r\n\r\n }\r\n\r\n}\r\n\r\nconst _base64ToBuffer = (base64)=> {\r\n const binary_string = window.atob(base64)\r\n const len = binary_string.length\r\n\r\n const bytes = new Uint8Array(len + Math.trunc(len/3))\r\n let j=0\r\n for (var i = 0; i < len; i=i+3) {\r\n bytes[j+0] = binary_string.charCodeAt(i+0)\r\n bytes[j+1] = binary_string.charCodeAt(i+1)\r\n bytes[j+2] = binary_string.charCodeAt(i+2)\r\n bytes[j+3] = 255\r\n j=j+4\r\n }\r\n return bytes\r\n}\r\n\r\nconst bundlePrepareEffects = (gltf,bundleConfig)=>{\r\n const e = bundleConfig.effects\r\n setBokeh( e.dof.active, e.dof.aperture, e.dof.maxblur)\r\n\r\n if (e.lut.active){\r\n let data = _base64ToBuffer(e.lut.data)\r\n\r\n const t = new Data3DTexture()\r\n\t\tt.image.data = data\r\n t.format = RGBAFormat\r\n\t\tt.image.width = e.lut.height\r\n\t\tt.image.height = e.lut.height\r\n\t\tt.image.depth = e.lut.height\r\n\t\tt.type = UnsignedByteType\r\n\t\tt.magFilter = LinearFilter\r\n\t\tt.minFilter = LinearFilter\r\n\t\tt.wrapS = ClampToEdgeWrapping\r\n\t\tt.wrapT = ClampToEdgeWrapping\r\n\t\tt.wrapR = ClampToEdgeWrapping\r\n\t\tt.generateMipmaps = false\r\n\t\tt.needsUpdate = true\r\n\r\n setLut(e.lut.active,t,e.lut.intensity)\r\n }\r\n}\r\n\r\nconst bundleInit = (bundleConfig,gltf,textureLoader,projectGroup)=>{\r\n\r\n bundlePrepareMaterials(bundleConfig,textureLoader)\r\n\r\n bundlePrepareAnimationList(bundleConfig,gltf)\r\n\r\n bundlePrepareBuildings(bundleConfig,gltf,projectGroup)\r\n\r\n bundlePrepareSceneObjects(bundleConfig,gltf,projectGroup)\r\n\r\n bundlePrepareFog(bundleConfig)\r\n\r\n bundlePrepareSphere(bundleConfig)\r\n\r\n bundlePrepareEnvironment(bundleConfig)\r\n\r\n bundleSetSun(bundleConfig)\r\n\r\n bundlePrepareEffects(gltf,bundleConfig)\r\n\r\n if (settingsData.isConferenceHost) {\r\n bundleConfig.textures ={\r\n \"1.png\": {\r\n \"center\": [\r\n 0,\r\n 0\r\n ],\r\n \"channel\": 0,\r\n \"colorSpace\": \"srgb-linear\",\r\n \"mapping\": 300,\r\n \"offset\": [\r\n 0,\r\n 0\r\n ],\r\n \"repeat\": [\r\n 1,\r\n 1\r\n ],\r\n \"rotation\": 0,\r\n \"wrapS\": 1000,\r\n \"wrapT\": 1000\r\n },\r\n \"2.png\": {\r\n \"center\": [\r\n 0,\r\n 0\r\n ],\r\n \"channel\": 0,\r\n \"colorSpace\": \"srgb-linear\",\r\n \"mapping\": 300,\r\n \"offset\": [\r\n 0,\r\n 0\r\n ],\r\n \"repeat\": [\r\n 1,\r\n 1\r\n ],\r\n \"rotation\": 0,\r\n \"wrapS\": 1000,\r\n \"wrapT\": 1000\r\n },\r\n \"360_1.jpg\": {\r\n \"center\": [\r\n 0,\r\n 0\r\n ],\r\n \"channel\": 0,\r\n \"colorSpace\": \"srgb-linear\",\r\n \"mapping\": 303,\r\n \"offset\": [\r\n 0,\r\n 0\r\n ],\r\n \"repeat\": [\r\n 1,\r\n 1\r\n ],\r\n \"rotation\": 0,\r\n \"wrapS\": 1000,\r\n \"wrapT\": 1000\r\n },\r\n \"5.png\": {\r\n \"center\": [\r\n 0,\r\n 0\r\n ],\r\n \"channel\": 0,\r\n \"colorSpace\": \"srgb-linear\",\r\n \"mapping\": 300,\r\n \"offset\": [\r\n 0,\r\n 0\r\n ],\r\n \"repeat\": [\r\n 1,\r\n 1\r\n ],\r\n \"rotation\": 0,\r\n \"wrapS\": 1000,\r\n \"wrapT\": 1000\r\n },\r\n \"clear_puresky_low.jpg\": {\r\n \"center\": [\r\n 0,\r\n 0\r\n ],\r\n \"channel\": 0,\r\n \"colorSpace\": \"srgb-linear\",\r\n \"mapping\": 303,\r\n \"offset\": [\r\n 0,\r\n 0\r\n ],\r\n \"repeat\": [\r\n 1,\r\n 1\r\n ],\r\n \"rotation\": 0,\r\n \"wrapS\": 1000,\r\n \"wrapT\": 1000\r\n },\r\n \"default_lightMap.jpg\": {\r\n \"center\": [\r\n 0,\r\n 0\r\n ],\r\n \"channel\": 1,\r\n \"colorSpace\": \"srgb-linear\",\r\n \"mapping\": 303,\r\n \"offset\": [\r\n 0,\r\n 0\r\n ],\r\n \"repeat\": [\r\n 1,\r\n 1\r\n ],\r\n \"rotation\": 0,\r\n \"wrapS\": 1000,\r\n \"wrapT\": 1000\r\n },\r\n \"fasad_10.jpg\": {\r\n \"center\": [\r\n 0,\r\n 0\r\n ],\r\n \"channel\": 0,\r\n \"colorSpace\": \"srgb-linear\",\r\n \"mapping\": 300,\r\n \"offset\": [\r\n 0,\r\n 0\r\n ],\r\n \"repeat\": [\r\n 0.07,\r\n 0.04\r\n ],\r\n \"rotation\": 0,\r\n \"wrapS\": 1000,\r\n \"wrapT\": 1000\r\n },\r\n \"fasad_4.jpg\": {\r\n \"center\": [\r\n 0,\r\n 0\r\n ],\r\n \"channel\": 0,\r\n \"colorSpace\": \"srgb-linear\",\r\n \"mapping\": 300,\r\n \"offset\": [\r\n 0,\r\n 0\r\n ],\r\n \"repeat\": [\r\n 0.06,\r\n 0.03\r\n ],\r\n \"rotation\": 0,\r\n \"wrapS\": 1000,\r\n \"wrapT\": 1000\r\n },\r\n \"fasad_4_emissive.jpg\": {\r\n \"center\": [\r\n 0,\r\n 0\r\n ],\r\n \"channel\": 0,\r\n \"colorSpace\": \"srgb-linear\",\r\n \"mapping\": 300,\r\n \"offset\": [\r\n 0,\r\n 0\r\n ],\r\n \"repeat\": [\r\n 0.06,\r\n 0.03\r\n ],\r\n \"rotation\": 0,\r\n \"wrapS\": 1000,\r\n \"wrapT\": 1000\r\n },\r\n \"fasad_5.jpg\": {\r\n \"center\": [\r\n 0,\r\n 0\r\n ],\r\n \"channel\": 0,\r\n \"colorSpace\": \"srgb-linear\",\r\n \"mapping\": 300,\r\n \"offset\": [\r\n 0,\r\n 0\r\n ],\r\n \"repeat\": [\r\n 0.03,\r\n 0.03\r\n ],\r\n \"rotation\": 0,\r\n \"wrapS\": 1000,\r\n \"wrapT\": 1000\r\n },\r\n \"fasad_5_emissive.jpg\": {\r\n \"center\": [\r\n 0,\r\n 0\r\n ],\r\n \"channel\": 0,\r\n \"colorSpace\": \"srgb-linear\",\r\n \"mapping\": 300,\r\n \"offset\": [\r\n 0,\r\n 0\r\n ],\r\n \"repeat\": [\r\n 0.03,\r\n 0.03\r\n ],\r\n \"rotation\": 0,\r\n \"wrapS\": 1000,\r\n \"wrapT\": 1000\r\n },\r\n \"fasad_7.jpg\": {\r\n \"center\": [\r\n 0,\r\n 0\r\n ],\r\n \"channel\": 0,\r\n \"colorSpace\": \"srgb-linear\",\r\n \"mapping\": 300,\r\n \"offset\": [\r\n 0,\r\n 0\r\n ],\r\n \"repeat\": [\r\n 0.05,\r\n 0.07\r\n ],\r\n \"rotation\": 0,\r\n \"wrapS\": 1000,\r\n \"wrapT\": 1000\r\n },\r\n \"fasad_7_emissive.jpg\": {\r\n \"center\": [\r\n 0,\r\n 0\r\n ],\r\n \"channel\": 0,\r\n \"colorSpace\": \"srgb-linear\",\r\n \"mapping\": 300,\r\n \"offset\": [\r\n 0,\r\n 0\r\n ],\r\n \"repeat\": [\r\n 0.05,\r\n 0.07\r\n ],\r\n \"rotation\": 0,\r\n \"wrapS\": 1000,\r\n \"wrapT\": 1000\r\n },\r\n \"fasad_8_emissive.jpg\": {\r\n \"center\": [\r\n 0,\r\n 0\r\n ],\r\n \"channel\": 0,\r\n \"colorSpace\": \"srgb-linear\",\r\n \"mapping\": 300,\r\n \"offset\": [\r\n 0,\r\n 0\r\n ],\r\n \"repeat\": [\r\n 0.07,\r\n 0.04\r\n ],\r\n \"rotation\": 0,\r\n \"wrapS\": 1000,\r\n \"wrapT\": 1000\r\n },\r\n \"fasad_9.jpg\": {\r\n \"center\": [\r\n 0,\r\n 0\r\n ],\r\n \"channel\": 0,\r\n \"colorSpace\": \"srgb-linear\",\r\n \"mapping\": 300,\r\n \"offset\": [\r\n 0,\r\n 0\r\n ],\r\n \"repeat\": [\r\n 0.04,\r\n 0.03\r\n ],\r\n \"rotation\": 0,\r\n \"wrapS\": 1000,\r\n \"wrapT\": 1000\r\n },\r\n \"fasad_9_emissive.jpg\": {\r\n \"center\": [\r\n 0,\r\n 0\r\n ],\r\n \"channel\": 0,\r\n \"colorSpace\": \"srgb-linear\",\r\n \"mapping\": 300,\r\n \"offset\": [\r\n 0,\r\n 0\r\n ],\r\n \"repeat\": [\r\n 1,\r\n 1\r\n ],\r\n \"rotation\": 0,\r\n \"wrapS\": 1000,\r\n \"wrapT\": 1000\r\n },\r\n \"Roof_v5_2.jpg\": {\r\n \"center\": [\r\n 0,\r\n 0\r\n ],\r\n \"channel\": 0,\r\n \"colorSpace\": \"srgb-linear\",\r\n \"mapping\": 300,\r\n \"offset\": [\r\n 0,\r\n 0\r\n ],\r\n \"repeat\": [\r\n 0.01,\r\n 0.01\r\n ],\r\n \"rotation\": 0,\r\n \"wrapS\": 1000,\r\n \"wrapT\": 1000\r\n },\r\n \"Roof_v8.jpg\": {\r\n \"center\": [\r\n 0,\r\n 0\r\n ],\r\n \"channel\": 0,\r\n \"colorSpace\": \"srgb-linear\",\r\n \"mapping\": 300,\r\n \"offset\": [\r\n 0,\r\n 0\r\n ],\r\n \"repeat\": [\r\n 0.01,\r\n 0.01\r\n ],\r\n \"rotation\": 0,\r\n \"wrapS\": 1000,\r\n \"wrapT\": 1000\r\n },\r\n \"roof1new.jpg\": {\r\n \"center\": [\r\n 0,\r\n 0\r\n ],\r\n \"channel\": 0,\r\n \"colorSpace\": \"srgb-linear\",\r\n \"mapping\": 300,\r\n \"offset\": [\r\n 0,\r\n 0\r\n ],\r\n \"repeat\": [\r\n 0.07,\r\n 0.07\r\n ],\r\n \"rotation\": 0,\r\n \"wrapS\": 1000,\r\n \"wrapT\": 1000\r\n },\r\n \"water.jpg\": {\r\n \"center\": [\r\n 0,\r\n 0\r\n ],\r\n \"channel\": 0,\r\n \"colorSpace\": \"\",\r\n \"mapping\": 300,\r\n \"offset\": [\r\n 0,\r\n 0\r\n ],\r\n \"repeat\": [\r\n 1,\r\n 1\r\n ],\r\n \"rotation\": 0,\r\n \"wrapS\": 1000,\r\n \"wrapT\": 1000\r\n }\r\n };\r\n }\r\n\r\n new Environment().load();\r\n}\r\n\r\nconst mipmap = (size, color) => {\r\n const imageCanvas = document.createElement('canvas')\r\n const context = imageCanvas.getContext('2d')\r\n imageCanvas.width = size\r\n imageCanvas.height = size\r\n context.fillStyle = '#888888'\r\n context.fillRect(0, 0, size, size)\r\n context.fillStyle = color\r\n context.fillRect(0, 0, size / 2, size / 2)\r\n context.fillRect(size / 2, size / 2, size / 2, size / 2)\r\n return imageCanvas\r\n}\r\n\r\nconst old_bundleInit = (gltf,textureLoader,projectGroup)=>{\r\n // загружаем текстуры для зданий\r\n let buildingsMaterial;\r\n const materialConfig = config.resources.bundle.material;\r\n if (materialConfig.specularMap) {\r\n buildingsMaterial = new MeshPhongMaterial();\r\n } else {\r\n buildingsMaterial = new MeshStandardMaterial();\r\n // buildingsMaterial.onBeforeCompile = (shader,renderer)=>{\r\n // shader.fragmentShader = StandardFragment\r\n // //shader.vertexShader = StandardVertex\r\n // }\r\n }\r\n const url = `${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/textures/building/`;\r\n for (let key in materialConfig) {\r\n const value = materialConfig[key];\r\n if ( value instanceof Object){\r\n const t = textureLoader.load(Cloudflare.resize(url + value.path),loadedTexture => threeJsVariables.renderer.initTexture(loadedTexture));\r\n t.name = key;\r\n switch (key) {\r\n case 'envMap':\r\n t.mapping = EquirectangularReflectionMapping\r\n break;\r\n case 'lightMap':\r\n case 'aoMap':\r\n t.channel = 1;\r\n break\r\n\r\n }\r\n\r\n Object.entries(value).forEach(([key,value]) => {\r\n if (key !== 'path') {\r\n t[key] = value;\r\n t.colorSpace = LinearSRGBColorSpace;\r\n t.wrapS = RepeatWrapping;\r\n t.wrapT = RepeatWrapping;\r\n t.offset.set(0,0);\r\n t.repeat.set(1,1);\r\n }\r\n });\r\n\r\n globalTextures[url + value.path] = t;\r\n\r\n buildingsMaterial[key] = t\r\n } else {\r\n buildingsMaterial[key] = value\r\n }\r\n }\r\n\r\n buildingsMaterial.lightMapIntensity *= Math.PI;\r\n\r\n // if (buildingsMaterial.specularMap===undefined){\r\n // buildingsMaterial.lightMapIntensity = buildingsMaterial.lightMapIntensity*0.3\r\n // }\r\n\r\n\r\n // Add multiple materials\r\n if (config.resources.bundle.materials?.length) {\r\n const materialsArray = config.resources.bundle.materials;\r\n const url = `${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/textures/building/`;\r\n\r\n materialsArray.forEach(material => {\r\n\r\n multiTextures[material.building] = {};\r\n const textures = material.textures;\r\n\r\n // Load textures;\r\n Object.entries(textures).forEach(([key,value]) =>{\r\n const fullPath = Cloudflare.resize(url + value.path);\r\n let texture;\r\n\r\n if (globalTextures.hasOwnProperty(fullPath)) {\r\n texture = globalTextures[fullPath];\r\n } else {\r\n texture = textureLoader.load(Cloudflare.resize(url + value.path), loadedTexture => threeJsVariables.renderer.initTexture(loadedTexture));\r\n texture.name = key;\r\n texture.colorSpace = LinearSRGBColorSpace;\r\n texture.wrapS = RepeatWrapping;\r\n texture.wrapT = RepeatWrapping;\r\n texture.offset.set(0,0);\r\n texture.repeat.set(1,1);\r\n\r\n switch (key) {\r\n case 'envMap':\r\n texture.mapping = EquirectangularReflectionMapping;\r\n break;\r\n case 'lightMap':\r\n case 'aoMap':\r\n texture.channel = 1;\r\n break\r\n }\r\n\r\n globalTextures[url + value.path] = texture;\r\n }\r\n\r\n multiTextures[material.building][key] = texture;\r\n });\r\n });\r\n }\r\n\r\n const {name,count} = config.resources.bundle.building;\r\n const {projectRotation} = config.threejs;\r\n projectGroup.rotation.set(projectRotation.x,projectRotation.y,projectRotation.z);\r\n\r\n for (let i = 0; i < count; i++){\r\n const building_name = name + String(i+1).padStart(2, '0');\r\n const building = gltf.scene.getObjectByName(building_name);\r\n\r\n if (!building) continue;\r\n\r\n let group = bundle_initAutoBuildingsScript(projectGroup,building,[]);\r\n\r\n const material = buildingsMaterial.clone();\r\n // if (material.specularMap===undefined){\r\n // material.onBeforeCompile = (shader,renderer)=>{\r\n // shader.fragmentShader = StandardFragment\r\n // //shader.vertexShader = StandardVertex\r\n // }\r\n // }\r\n\r\n if (Object.keys(multiTextures).length && multiTextures.hasOwnProperty(building_name)){\r\n const additionalTextures = multiTextures[building_name];\r\n\r\n Object.entries(additionalTextures).forEach(([key,value]) =>{\r\n material[key] = value;\r\n });\r\n }\r\n\r\n fixModelUV(group,material);\r\n\r\n group.traverse(o=>{\r\n if (o.isMesh) {\r\n if (o.material.map) {\r\n o.material = material\r\n }\r\n }\r\n })\r\n }\r\n\r\n}\r\n\r\nconst loadBundle = (manager) => {\r\n renderUpdateValuesOnDemand(true);\r\n const loader = new Loader();\r\n const textureLoader = loader.textureLoader;\r\n const dracoLoader = loader.dracoLoader;\r\n loader.addCallback = async () => {\r\n console.log('%c Bundle assets loaded', 'color: #00FF00');\r\n ProjectLogs.timerStopFor('bundle');\r\n ProjectLogs.timerStartFor('api_settings');\r\n ProjectLogs.timerStartFor('api_props');\r\n const settings = getSettings();\r\n const props = getProps();\r\n\r\n settings.then(response => {\r\n console.log('get settings');\r\n setProjectSettings(response);\r\n const dreamsSlider = getDreamsSliderScope();\r\n if (dreamsSlider) {\r\n const waitingFirstPreloaderAnimation = setInterval(() => {\r\n if (!settingsData.preloaderRemoved) return;\r\n if (!Environment.scope?.active || BmbyMode.active || !config.features.dayNight.checked || Environment.scope?.bundleLoaded) {\r\n clearInterval(waitingFirstPreloaderAnimation);\r\n console.log('update scene and add skip button');\r\n threeJsVariables.composer.render();\r\n dreamsSlider.callbacks.createSkipBtn();\r\n ProjectLogs.timerStopFor('total');\r\n }\r\n },100);\r\n } else {\r\n threeJsVariables.slicer.setInitialIntroHeight();\r\n projectMode.LiteMode.resizeContainer();\r\n intro();\r\n removePreloader();\r\n }\r\n });\r\n\r\n getAmenities().then((response) => {\r\n settingsData.amenities = response.data;\r\n });\r\n\r\n getSpecifications().then((response) => {\r\n settingsData.specifications = response.data;\r\n });\r\n\r\n Promise.all([props,settings]).then(response => {\r\n if (!projectMode.LiteMode.isActive() ||\r\n (projectMode.LiteMode.isActive() && (projectMode.LiteMode.modeIs('regular') || projectMode.LiteMode.modeIs('rotate')))) {\r\n bundle_initAutoHighlightsScript(getHighlights().concat([response]));\r\n } else {\r\n settingsData.allCrmData = response[0].data;\r\n projectMode.LiteMode.loadBuildingModel();\r\n }\r\n\r\n // console.log(`Pagination.modalProp: ${Pagination.modalProp}`);\r\n // if (Pagination.modalProp)\r\n // createModal(Pagination.modalProp);\r\n if (getUrlParam('p') !== 'map' && isNumeric(getUrlParam('p')) && !projectMode.LiteMode.isActive())\r\n projectMode.Pagination.paginate({source: 'widgetsInit'});\r\n\r\n if (BmbyMode.active) {\r\n const buildingsOrder = config.threejs.renderList?.list.find(el => el.name === 'Project Buildings');\r\n const selectionsOrder = config.threejs.renderList?.list.find(el => el.name === 'Project Selection' +\r\n ' Boxes');\r\n if (buildingsOrder && !selectionsOrder) {\r\n const selectionBoxOrder = {\r\n name: 'Project Selection Boxes',\r\n order: buildingsOrder.order + 1\r\n };\r\n config.threejs.renderList.list.push(selectionBoxOrder);\r\n }\r\n getVars(response[1].data);\r\n setInitialHtmlDirection(response[1].data);\r\n rightNavigationBar();\r\n const buildingId = getUrlParam('bid');\r\n if (buildingId) {\r\n const building = config.buildings.find(building => building.buildingId === buildingId);\r\n if (building) {\r\n projectMode.Cylinder.enter(Buildings.getBuilding(building.buildingEngineId));\r\n } else {\r\n enterToTheBuildingWithMaxAvailableApartments();\r\n }\r\n } else {\r\n enterToTheBuildingWithMaxAvailableApartments();\r\n }\r\n threeJsVariables.renderList.reorder();\r\n }\r\n \r\n projectMode.QA = new QA().init();\r\n sendLogs(ProjectLogs.getLogs);\r\n\r\n // if (isMobile)\r\n // components.mobileSearch = new MobileSearch();\r\n }).catch(error => {\r\n captureError(error);\r\n settingsData.loadingError = true;\r\n });\r\n\r\n startProjectWithError();\r\n };\r\n\r\n\r\n projectMode.LiteMode = new LiteMode();\r\n\r\n if (isMobile && isIOS) {\r\n const fileLoader = loader.fileLoader;\r\n fileLoader.load(`${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/litemod/rotor/rotor.json?v=${Cloudflare.version}`,(cfg) => {\r\n config.resources.environments.active = false;\r\n config.features.environment.active = false;\r\n config.features.dayNight.active = false;\r\n projectMode.LiteMode.active = true;\r\n projectMode.LiteMode.mode = 'rotate';\r\n threeJsVariables.composer.composer.insertPass(projectMode.LiteMode,1);\r\n projectMode.LiteMode.init(loader);\r\n projectMode.LiteMode.rotor.init(cfg);\r\n },undefined,() => {\r\n projectMode.LiteMode.init(loader);\r\n if (projectMode.LiteMode.isActive()) {\r\n threeJsVariables.composer.composer.insertPass(projectMode.LiteMode,1);\r\n }\r\n });\r\n\r\n } else {\r\n projectMode.LiteMode.init(loader);\r\n if (projectMode.LiteMode.isActive()) {\r\n threeJsVariables.composer.composer.insertPass(projectMode.LiteMode,1);\r\n }\r\n }\r\n\r\n prepareSphere(textureLoader);\r\n\r\n if (projectMode.LiteMode.isActive() && !projectMode.LiteMode.modeIs('regular') && !projectMode.LiteMode.modeIs('rotate')) {\r\n const envToggle = new EnvironmentToggle();\r\n envToggle.load(manager);\r\n return;\r\n }\r\n\r\n // загружаем текстуры для зданий\r\n // '/assets/bundle.glb'\r\n // config.cdnRepository+'/'+config.projectFolder+'/resources/building/bundle.glb'\r\n // dracoLoader.load(config.cdnRepository+'/'+config.projectFolder+'/resources/building/bundle.glb',(gltf)=>{\r\n dracoLoader.load(`${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/building/bundle.glb?v=${Cloudflare.version}`,(gltf)=>{\r\n const projectGroup = new Group()\r\n projectGroup.name = 'Project Buildings'\r\n threeJsVariables.scene.add(projectGroup)\r\n threeJsVariables.renderList.reorder();\r\n\r\n const bundleConfig = gltf.scene.userData.config\r\n if (bundleConfig && !bundleConfig.version){\r\n threeJsVariables.bundleConfig = bundleConfig\r\n bundleInit(bundleConfig,gltf,textureLoader,projectGroup)\r\n } else if (bundleConfig && bundleConfig.version) {\r\n threeJsVariables.bundleConfig = bundleConfig;\r\n newBundleInit(bundleConfig,gltf,textureLoader,projectGroup);\r\n } else{\r\n old_bundleInit(gltf,textureLoader,projectGroup)\r\n addSceneObjects(loader,textureLoader,dracoLoader,projectGroup)\r\n }\r\n\r\n const envToggle = new EnvironmentToggle();\r\n // envToggle.load(loader);\r\n !BmbyMode.active && envToggle.load();\r\n\r\n //tiles\r\n if (config.resources.environments.minitiles.active && (isMobile||isTablet) && !BmbyMode.active){\r\n const tiles = new Group();\r\n tiles.name = 'async env';\r\n let tileConfig = config.resources.environments.minitiles.tilesConfig;\r\n setCoordinates(tiles,tileConfig)\r\n threeJsVariables.scene.add(tiles);\r\n threeJsVariables.renderList.reorder();\r\n threeJsVariables.environment = tiles;\r\n\r\n let loaded = config.resources.environments.minitiles.tilesCount\r\n\r\n // const textureLoader2 = new TextureLoader()\r\n const dayNightActive = OrbitDayAndNight.active;\r\n\r\n for (let i=0;i{\r\n let g = gltf.scene.children[0]\r\n g.name = i\r\n let _m = g.material\r\n _m.map.colorSpace = LinearSRGBColorSpace;\r\n\r\n if (dayNightActive) {\r\n g.material = new MeshStandardMaterial({\r\n map: _m.map\r\n });\r\n\r\n g.castShadow = true;\r\n g.receiveShadow = true;\r\n\r\n g.geometry.computeVertexNormals();\r\n\r\n } else {\r\n g.material = basic_tile.clone();\r\n g.material.uniforms.map.value = _m.map;\r\n g.material.uniforms.hmap.value = basic_tile.uniforms.hmap.value;\r\n _m.map.updateMatrix();\r\n g.castShadow = false;\r\n g.receiveShadow = false;\r\n g.material.uniforms.uvTransform.value = _m.map.matrix;\r\n }\r\n\r\n tiles.add(g)\r\n\r\n })\r\n }\r\n\r\n\r\n if (OrbitDayAndNight.isActive) {\r\n\r\n const waitingEnvAndTiles = setInterval(() => {\r\n const envMap = Buildings.getBuildingsArray()[0].instances[0].material.envMap;\r\n const tilesExist = tiles.children.length === config.resources.bundle.tilesCount;\r\n\r\n if (envMap && tilesExist) {\r\n clearInterval(waitingEnvAndTiles);\r\n\r\n tiles.traverse(el => {\r\n if (el.isMesh) {\r\n el.material.envMap = envMap;\r\n }\r\n });\r\n }\r\n }, 100);\r\n }\r\n\r\n }else{\r\n !bundleConfig && environmentToggle()\r\n }\r\n\r\n if (!config.threejs.renderer?.logarithmicDepthBuffer && !config.features?.hmap && !BmbyMode.active) {\r\n textureLoader.load(`${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/textures/environment/hmap.png?v=${Cloudflare.version}`,(t)=>{\r\n setHMap(t)\r\n },(err)=>{\r\n //console.log(err)\r\n },(p)=>{\r\n //console.log(p)\r\n })\r\n }\r\n\r\n const sBoxes = [];\r\n const buildingsCount = config.resources.bundle.building.count;\r\n const buildingsName = config.resources.bundle.building.name;\r\n for (let i = 1; i <= buildingsCount; i++) {\r\n const name = `${buildingsName}${i.toString().padStart(2,'0')}_selectionBoxes`;\r\n const selections = gltf.scene.getObjectByName(name);\r\n if (selections) {\r\n sBoxes.push(selections);\r\n }\r\n }\r\n\r\n setHighlights(sBoxes);\r\n\r\n Buildings.getBuildingsArray().forEach(building => building.applyColorCorrection());\r\n\r\n },undefined,(err)=>{\r\n captureError(err);\r\n settingsData.loadingError = true;\r\n });\r\n}\r\n\r\nexport function initProjectMainScript() {\r\n ProjectLogs.timerStartFor('bundle');\r\n if (!config.resources.bundle){\r\n const loader = new Loader();\r\n const textureLoader = loader.textureLoader;\r\n const dracoLoader = new DRACOLoader(loader);\r\n dracoLoader.setDecoderPath('../../../js/libs/gltf/');\r\n\r\n const textures = loadModelTexturesFromAzure(textureLoader);\r\n const models = loadBuildingModelsFromAzure(loader,dracoLoader);\r\n const crmData = getCrmData();\r\n\r\n crmData\r\n .then(response => {\r\n const selectionBoxes = loadHighlightsModelFromAzure(response,dracoLoader);\r\n return selectionBoxes;\r\n })\r\n .then(sBoxes => {\r\n const allForHighlights = lazyLoadingAll(sBoxes.concat(crmData));\r\n allForHighlights.then(response => {\r\n initAutoHighlightsScript(response);\r\n });\r\n\r\n const opacityObjects = lazyLoadingAll([allForBuildings, allForHighlights]);\r\n opacityObjects.then(() => {\r\n // addObjectsToOpacity();\r\n intro();\r\n });\r\n });\r\n\r\n const allForBuildings = lazyLoadingAll(textures.concat(models));\r\n allForBuildings\r\n .then(response => initAutoBuildingsScript(response))\r\n .then( () => ProjectLogs.timerStopFor('bundle') );\r\n prepareSphere(projectMode.LiteMode.isActive(),textureLoader);\r\n environmentToggle();\r\n addSceneObjects(loader);\r\n } else {\r\n loadBundle();\r\n }\r\n\r\n projectMode.Cylinder = new Cylinder();\r\n projectMode.FloorPlan = new FloorPlan();\r\n}\r\n\r\n\r\nasync function startProjectWithError () {\r\n // Check error\r\n if (!settingsData.loadingError) return;\r\n\r\n console.log('%c Project has been started with error', 'color: #ff0000');\r\n\r\n environmentToggle();\r\n intro();\r\n removePreloader();\r\n\r\n ProjectLogs.timerStopFor('total');\r\n}\r\n\r\n/*\r\nNew bundle support\r\n* */\r\n\r\nfunction newBundleInit (bundleConfig,gltf,textureLoader,projectGroup) {\r\n bundleOptimization(bundleConfig);\r\n\r\n if (bundleConfig.priority && Object.keys(bundleConfig.priority).length) {\r\n const splitedBundle = splitBundle(bundleConfig);\r\n\r\n prepareMiniMap(bundleConfig);\r\n prepareCameraAndOrbitControls(bundleConfig);\r\n prepareRenderer(bundleConfig);\r\n prepareCompass(bundleConfig);\r\n prepareSlicer(bundleConfig);\r\n prepareRenderList(bundleConfig);\r\n prepareLUTMesh(bundleConfig);\r\n setSceneEnvironment(bundleConfig,textureLoader);\r\n prepareAdditionalObjects(bundleConfig,textureLoader);\r\n //First bundle\r\n prepareBuildings(splitedBundle.first,gltf.scene,textureLoader,projectGroup);\r\n prepareSceneObjects(splitedBundle.first,gltf.scene,textureLoader);\r\n prepareInstances(splitedBundle.first,gltf.scene,textureLoader);\r\n prepareDecals(splitedBundle.first,textureLoader,gltf.scene);\r\n\r\n bundlePrepareSphere(bundleConfig);\r\n prepareTiles(bundleConfig,textureLoader);\r\n prepareLight(bundleConfig);\r\n\r\n if (!isMobile) {\r\n threeJsVariables.composer.disableAll();\r\n const effectsTask = new OptimizationTask((fps) => {\r\n if (fps > 20 && effectsTask.currentCount >= effectsTask.maxCount - 1) {\r\n prepareEffects(bundleConfig);\r\n effectsTask.finished = true;\r\n }\r\n },1,10);\r\n }\r\n\r\n const mainLoadingManager = Loader.scopes[0];\r\n mainLoadingManager.addCallback = () => {\r\n const loader = new Loader();\r\n new Environment().load();\r\n loader.addCallback = () => {\r\n updateShadowMap();\r\n console.log('stage 2');\r\n // new Environment().load();\r\n };\r\n\r\n const tl = loader.lazyTextureLoader;\r\n const draco = loader.dracoLoader;\r\n\r\n if (isMobile) {\r\n if (config.features.liteMode?.mode !== 'rotate') {\r\n const secondBundleTask = new OptimizationTask((fps) => {\r\n if (fps > settingsData.fps) {\r\n loadSecondBundle();\r\n secondBundleTask.finished = true;\r\n }\r\n },1,5);\r\n }\r\n\r\n let pixelRatio = threeJsVariables.composer.getPixelRatio();\r\n const pixelRatioTask = new OptimizationTask((fps) => {\r\n if (fps < settingsData.fps) {\r\n let clamped = clamp(pixelRatio * 0.85,1,2);\r\n pixelRatio = clamped;\r\n threeJsVariables.composer.setPixelRatio(clamped);\r\n }else {\r\n pixelRatioTask.finished = true;\r\n }\r\n },10,5);\r\n\r\n } else {\r\n loadSecondBundle();\r\n }\r\n\r\n function loadSecondBundle () {\r\n if (BmbyMode.active)\r\n return;\r\n // draco.load(config.cdnRepository+'/'+config.projectFolder+'/resources/building/bundle_second.glb',gltf_second => {\r\n draco.load(`${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/building/bundle_second.glb?v=${Cloudflare.version}`,gltf_second => {\r\n console.log('%csecond bundle loaded', 'color: palegreen');\r\n prepareBuildings(splitedBundle.second,gltf_second.scene,tl,projectGroup);\r\n prepareSceneObjects(splitedBundle.second,gltf_second.scene,tl);\r\n prepareInstances(splitedBundle.second,gltf_second.scene,tl);\r\n prepareDecals(splitedBundle.second,tl,gltf_second.scene);\r\n prepareObjectsToDisappear();\r\n if (isMobile) {\r\n if (threeJsVariables.sceneObjectsSlicer.active) {\r\n Buildings.getBuildingsArray().forEach(building => building.updateAttachedModelsList());\r\n } else if (settingsData.activeViewMode !== ViewMode.Orbit) {\r\n hideSceneObjects(Buildings.getActiveBuilding());\r\n }\r\n\r\n const displayOptions = document.querySelector('.display-options__options');\r\n if (displayOptions)\r\n new FutureDevelopment(displayOptions).createSwitcher();\r\n }\r\n removeObjectsFromScene();\r\n },undefined,error => captureError(error));\r\n }\r\n }\r\n } else {\r\n //Lazy loading\r\n const mainLoadingManager = Loader.scopes[0];\r\n mainLoadingManager.addCallback = () => {\r\n const loader = new Loader();\r\n loader.addCallback = () => {\r\n updateShadowMap();\r\n console.log('stage 2');\r\n };\r\n const tl = loader.lazyTextureLoader;\r\n prepareSceneObjects(bundleConfig,gltf.scene,tl);\r\n prepareInstances(bundleConfig,gltf.scene,tl);\r\n prepareDecals(bundleConfig,tl,gltf.scene);\r\n new Environment().load();\r\n };\r\n prepareLUTMesh(bundleConfig);\r\n prepareEffects(bundleConfig);\r\n setSceneEnvironment(bundleConfig,textureLoader);\r\n prepareBuildings(bundleConfig,gltf.scene,textureLoader,projectGroup);\r\n bundlePrepareSphere(bundleConfig);\r\n prepareTiles(bundleConfig,textureLoader);\r\n prepareLight(bundleConfig);\r\n }\r\n\r\n // Without lazy loading\r\n\r\n // setSceneEnvironment(bundleConfig,textureLoader);\r\n // prepareLUTMesh(bundleConfig);\r\n // prepareEffects(bundleConfig);\r\n // prepareBuildings(bundleConfig,gltf.scene,textureLoader,projectGroup);\r\n // prepareSceneObjects(bundleConfig,gltf.scene,textureLoader);\r\n // prepareInstances(bundleConfig,gltf.scene,textureLoader);\r\n // prepareDecals(bundleConfig,textureLoader,gltf.scene);\r\n // bundlePrepareSphere(bundleConfig);\r\n // prepareTiles(bundleConfig,textureLoader);\r\n // prepareLight(bundleConfig.lights);\r\n}\r\n\r\nfunction splitBundle (config) {\r\n const first = {\r\n animations: config.animations,\r\n materialTypes: config.materialTypes,\r\n buildings: {},\r\n sceneObjects: {},\r\n instances: {},\r\n decals: {},\r\n shadowSettings: {}\r\n };\r\n\r\n const second = {\r\n animations: config.animations,\r\n materialTypes: config.materialTypes,\r\n buildings: {},\r\n sceneObjects: {},\r\n instances: {},\r\n decals: {},\r\n shadowSettings: {}\r\n };\r\n\r\n const priorities = config.priority;\r\n if (!priorities) {\r\n return config;\r\n }\r\n\r\n //Buildings\r\n Object.entries(config.buildings).forEach(([name,data]) => {\r\n const priority = priorities[name];\r\n if (priority === 1) {\r\n first.buildings[name] = data;\r\n } else {\r\n second.buildings[name] = data;\r\n }\r\n });\r\n\r\n //Scene objects\r\n Object.entries(config.sceneObjects).forEach(([parentName,elements]) => {\r\n const priority = priorities[parentName];\r\n if (priority === 1) {\r\n first.sceneObjects[parentName] = elements;\r\n } else {\r\n second.sceneObjects[parentName] = elements;\r\n }\r\n });\r\n\r\n //Instances\r\n Object.entries(config.instances).forEach(([modelName,modelSettings]) => {\r\n const priority = priorities[modelName];\r\n if (priority === 1) {\r\n first.instances[modelName] = modelSettings;\r\n } else {\r\n second.instances[modelName] = modelSettings;\r\n }\r\n });\r\n\r\n //Decals\r\n Object.entries(config.decals).forEach(([name,data]) => {\r\n const priority = priorities[name];\r\n if (priority === 1) {\r\n first.decals[name] = data;\r\n } else {\r\n second.decals[name] = data;\r\n }\r\n });\r\n\r\n\r\n config.shadowSettings && Object.entries(config.shadowSettings).forEach(([name,data]) => {\r\n first.shadowSettings[name] = data;\r\n second.shadowSettings[name] = data;\r\n });\r\n\r\n return {\r\n first,\r\n second\r\n };\r\n}\r\n\r\nfunction bundleOptimization (bundleConfig) {\r\n if (isMobile) {\r\n // Disable effects\r\n Object.values(bundleConfig.effects).forEach(effect => effect.enabled = false);\r\n\r\n //Decrease shadow map size\r\n const mapSize = bundleConfig.lights.directionalLight.shadow.mapSize.x;\r\n const cameraSize = bundleConfig.lights.directionalLight.shadow.camera.size;\r\n bundleConfig.lights.directionalLight.shadow.mapSize.x = Math.min(mapSize,1024);\r\n bundleConfig.lights.directionalLight.shadow.mapSize.y = Math.min(mapSize,1024);\r\n bundleConfig.lights.directionalLight.shadow.camera.size = Math.min(cameraSize,150);\r\n }\r\n}\r\n\r\nfunction prepareDecals (bundleConfig,textureLoader,scene) {\r\n if (bundleConfig.decals && Object.keys(bundleConfig.decals).length) {\r\n Object.entries(bundleConfig.decals).forEach(([name,data]) => {\r\n const object = scene.getObjectByName(name);\r\n if (object) {\r\n let shadowSettings = getShadowParams(bundleConfig,name);\r\n if (!shadowSettings) {\r\n shadowSettings = {\r\n castShadow: false,\r\n receiveShadow: true\r\n }\r\n }\r\n const materialType = getMaterialType(bundleConfig,name);\r\n const material = prepareMaterial(data.material,textureLoader,materialType,true);\r\n fixModelUV(object,material);\r\n fixEnvMapMaterial(material);\r\n material.transparent = true;\r\n material.depthWrite = false;\r\n material.transparent = true;\r\n material.polygonOffset = true;\r\n material.polygonOffsetFactor = -4;\r\n object.material = material;\r\n // threeJsVariables.slicer.add(object);\r\n threeJsVariables.sceneObjectsSlicer.add(object);\r\n object.receiveShadow = shadowSettings.receiveShadow;\r\n object.castShadow = shadowSettings.castShadow;\r\n sceneObjectsGroup.add(object);\r\n // lazyHideSceneObject(object);\r\n }\r\n });\r\n }\r\n\r\n if (sceneObjectsGroup.children.length && sceneObjectsGroup.parent === null){\r\n threeJsVariables.scene.add(sceneObjectsGroup);\r\n threeJsVariables.renderList.reorder();\r\n updateShadowMap();\r\n }\r\n}\r\n\r\nfunction setSceneEnvironment (bundleConfig,textureLoader) {\r\n if (bundleConfig.scene) {\r\n const fileName = bundleConfig.scene.environment;\r\n if (fileName) {\r\n let texture = bundleTextures[fileName];\r\n if (!texture) {\r\n texture = loadTexture(fileName,textureLoader);\r\n bundleTextures[fileName] = texture;\r\n }\r\n const cloneTexture = texture.clone();\r\n cloneTexture.mapping = EquirectangularReflectionMapping;\r\n threeJsVariables.scene.environment = cloneTexture;\r\n\r\n if (bundleVersionEquals(2.0)) {\r\n const environmentPlug = plugTexture();\r\n environmentPlug.name = 'default-envMap.png';\r\n environmentPlug.mapping = EquirectangularReflectionMapping;\r\n environmentPlug.minFilter = NearestFilter;\r\n environmentPlug.magFilter = NearestFilter;\r\n environmentPlug.anisotropy = 0;\r\n environmentPlug.needsUpdate = true;\r\n threeJsVariables.scene.userData.environmentPlug = environmentPlug;\r\n }\r\n\r\n if (bundleConfig.scene.environmentRotation) {\r\n threeJsVariables.scene.environmentRotation.fromArray(bundleConfig.scene.environmentRotation);\r\n }\r\n\r\n if (bundleConfig.scene.hasOwnProperty('environmentIntensity')) {\r\n threeJsVariables.scene.environmentIntensity = bundleConfig.scene.environmentIntensity;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction prepareEffects (bundleConfig) {\r\n if (bundleConfig.effects) {\r\n Object.entries(bundleConfig.effects).forEach(([name,settings]) => {\r\n const effect = threeJsVariables.composer.getPass(name);\r\n if (effect) {\r\n effect.config = settings;\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction prepareLUTMesh (bundleConfig) {\r\n const lut = bundleConfig.lut;\r\n if (!lut || !Object.keys(lut).length) return;\r\n\r\n const lutLoader = new Loader().luteLoader;\r\n const parsedLut = {};\r\n //Source\r\n Object.entries(lut.source).forEach(([name,data]) => {\r\n parsedLut[name] = lutLoader.parse(data);\r\n parsedLut[name].texture3D.colorSpace = LinearSRGBColorSpace;\r\n parsedLut[name].texture3D.needsUpdate = true;\r\n });\r\n\r\n Object.entries(lut).forEach(([key,value]) => {\r\n if (key !== 'source') {\r\n if (value.lutsPresets) {\r\n const lut = new LUT(key);\r\n Object.keys(value.lutsPresets).forEach(dayTime => {\r\n value.lutsPresets[dayTime].lut = parsedLut[value.lutsPresets[dayTime].name];\r\n });\r\n lut.lutConfig = value;\r\n } else {\r\n value.lut = parsedLut[value.name];\r\n const lut = new LUT(key);\r\n lut.lutConfig = value;\r\n }\r\n }\r\n });\r\n}\r\n\r\nfunction prepareTiles (bundleConfig,textureLoader) {\r\n if (config.resources.environments.active) {\r\n if (bundleConfig.tiles.hmap) {\r\n textureLoader.load(`${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/textures/environment/hmap.png?v=${Cloudflare.version}`,texture => {\r\n texture.minFilter = NearestFilter;\r\n texture.magFilter = NearestFilter;\r\n texture.generateMipmaps = false;\r\n texture.flipY = false;\r\n Hmap.texture = texture;\r\n });\r\n }\r\n\r\n if (bundleConfig.tiles.overlay) {\r\n textureLoader.load(`${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/textures/environment/tiles-overlay.png?v=${Cloudflare.version}`,texture => {\r\n texture.minFilter = NearestFilter;\r\n texture.magFilter = NearestFilter;\r\n texture.generateMipmaps = false;\r\n texture.flipY = false;\r\n Hmap.overlay = texture;\r\n });\r\n }\r\n\r\n if (bundleConfig.tiles.material) {\r\n const materialConfig = bundleConfig.tiles.material.config;\r\n const materialType = getMaterialType(bundleConfig,'tiles');\r\n if (Object.keys(materialConfig).length) {\r\n const material = prepareMaterial(materialConfig,textureLoader,materialType);\r\n setDefaultTileMaterial(material);\r\n }\r\n }\r\n\r\n let shadowSettings = getShadowParams(bundleConfig,'tiles');\r\n if (!shadowSettings) {\r\n shadowSettings = {\r\n castShadow: true,\r\n receiveShadow: true\r\n }\r\n }\r\n setTilesShadowParams(shadowSettings);\r\n environmentToggle();\r\n }\r\n}\r\n\r\n\r\nfunction prepareBuildings (config,scene,textureLoader,projectGroup) {\r\n const lut = LUT.getScope('buildings');\r\n\r\n Object.entries(config.buildings).forEach(([name,material]) => {\r\n const n = name.replaceAll(/_/g,'');\r\n const building = scene.getObjectByName(n);\r\n if (building) {\r\n const materialType = getMaterialType(config,name);\r\n const isInterior = findMaterialType('InteriorMaterial',materialType);\r\n const compiledMaterial = prepareMaterial(material,textureLoader,materialType);\r\n fixModelUV(building,compiledMaterial);\r\n fixEnvMapMaterial(compiledMaterial);\r\n let shadowSettings = getShadowParams(config,n);\r\n if (!shadowSettings) {\r\n shadowSettings = {\r\n castShadow: true,\r\n receiveShadow: true\r\n }\r\n }\r\n lut && lut.include(compiledMaterial);\r\n let compiledBuilding = bundle_initAutoBuildingsScript(projectGroup,building);\r\n compiledBuilding.traverse(el => {\r\n if (el.isMesh) {\r\n isInterior && InteriorMaterial.prepareMesh(el);\r\n el.material = compiledMaterial;\r\n threeJsVariables.slicer.add(el);\r\n el.castShadow = shadowSettings.castShadow;\r\n el.receiveShadow = shadowSettings.receiveShadow;\r\n addToPoiIntersections(el);\r\n }\r\n });\r\n }\r\n });\r\n}\r\n\r\nfunction getMaterialType (config,name) {\r\n if (!config.materialTypes) return 'MeshStandardMaterial';\r\n const type = config.materialTypes[name];\r\n if (type) {\r\n return type;\r\n } else {\r\n return 'MeshStandardMaterial';\r\n }\r\n}\r\n\r\nexport function getShadowParams (config,name) {\r\n if (config.shadowSettings && Object.keys(config.shadowSettings).length) {\r\n return config.shadowSettings[name];\r\n }\r\n return null;\r\n}\r\n\r\nfunction prepareInstances (config,scene,textureLoader) {\r\n if (!Object.keys(config.instances).length) return;\r\n\r\n const matrix = new Matrix4();\r\n const lut = LUT.getScope('sceneObjects');\r\n Object.entries(config.instances).forEach(([modelName,modelSettings]) => {\r\n const object = scene.getObjectByName(modelName);\r\n if (object) {\r\n const materialType = getMaterialType(config,modelName);\r\n const material = prepareMaterial(modelSettings.material,textureLoader,materialType,true);\r\n fixModelUV(object,material);\r\n fixEnvMapMaterial(material);\r\n let shadowSettings = getShadowParams(config,object.name);\r\n if (!shadowSettings) {\r\n shadowSettings = {\r\n castShadow: true,\r\n receiveShadow: true\r\n }\r\n }\r\n\r\n const count = modelSettings.points.length;\r\n\r\n if (modelSettings.isLOD) {\r\n const instanceLOD = new InstanceLOD();\r\n instanceLOD.name = modelName;\r\n\r\n object.children.forEach((lod,index) => {\r\n lut && lut.include(material[index]);\r\n if (lod.userData.groups) {\r\n lod.geometry.groups = lod.userData.groups;\r\n }\r\n lod.material = material[index];\r\n const isInterior = findMaterialType('InteriorMaterial',materialType[index]);\r\n isInterior && InteriorMaterial.prepareMesh(lod);\r\n\r\n const instance = new InstancedMesh(lod.geometry,lod.material,count);\r\n instance.name = lod.name;\r\n\r\n modelSettings.points.forEach((point,index) => {\r\n matrix.fromArray(point.matrix);\r\n instance.setMatrixAt(index, matrix);\r\n });\r\n\r\n // threeJsVariables.slicer.add(instance);\r\n instance.receiveShadow = shadowSettings.receiveShadow;\r\n instance.castShadow = shadowSettings.castShadow;\r\n instance.computeBoundingSphere();\r\n addToPoiIntersections(instance);\r\n instanceLOD.addLevel(instance,modelSettings.distances[index]);\r\n let animation;\r\n modelSettings.points.forEach((point,index) => {\r\n animation = config.animations[modelName + '::' + index];\r\n if (animation) {\r\n new AnimateObject(instanceLOD,animation);\r\n }\r\n });\r\n threeJsVariables.sceneObjectsSlicer.add(instance);\r\n });\r\n\r\n sceneObjectsGroup.add(instanceLOD);\r\n threeJsVariables.renderList.reorder();\r\n updateShadowMap();\r\n // lazyHideSceneObject(instanceLOD);\r\n } else {\r\n lut && lut.include(material);\r\n if (object.userData.groups) {\r\n object.geometry.groups = object.userData.groups;\r\n }\r\n\r\n object.material = material;\r\n const isInterior = findMaterialType('InteriorMaterial',materialType);\r\n isInterior && InteriorMaterial.prepareMesh(object);\r\n const instance = new InstancedMesh(object.geometry,object.material,count);\r\n instance.name = object.name;\r\n\r\n let animation;\r\n modelSettings.points.forEach((point,index) => {\r\n matrix.fromArray(point.matrix);\r\n instance.setMatrixAt(index, matrix);\r\n animation = config.animations[modelName + '::' + index];\r\n if (animation) {\r\n new AnimateObject(instance,animation);\r\n }\r\n });\r\n\r\n // threeJsVariables.slicer.add(instance);\r\n instance.receiveShadow = shadowSettings.receiveShadow;\r\n instance.castShadow = shadowSettings.castShadow;\r\n instance.geometry.computeBoundsTree();\r\n instance.computeBoundingSphere();\r\n addToPoiIntersections(instance);\r\n sceneObjectsGroup.add(instance);\r\n threeJsVariables.sceneObjectsSlicer.add(instance);\r\n threeJsVariables.renderList.reorder();\r\n updateShadowMap();\r\n // lazyHideSceneObject(instance);\r\n }\r\n }\r\n });\r\n\r\n if (sceneObjectsGroup.children.length && sceneObjectsGroup.parent === null){\r\n threeJsVariables.scene.add(sceneObjectsGroup);\r\n threeJsVariables.renderList.reorder();\r\n updateShadowMap();\r\n }\r\n}\r\n\r\nfunction prepareSceneObjects (bundleConfig,scene,textureLoader) {\r\n const lut = LUT.getScope('sceneObjects');\r\n const models = config.resources.sceneObjects.models || [];\r\n const attachedNames = models.map(el => el.name);\r\n\r\n Object.entries(bundleConfig.sceneObjects).forEach(([parentName,elements]) => {\r\n const object = scene.getObjectByName(parentName);\r\n if (object) {\r\n object.traverse(el => {\r\n if (el.isMesh) {\r\n if (el.userData.groups) {\r\n el.geometry.groups.push(...el.userData.groups);\r\n }\r\n const settings = elements[el.name];\r\n if (settings) {\r\n const materialType = getMaterialType(bundleConfig,el.name);\r\n const isInterior = findMaterialType('InteriorMaterial',materialType);\r\n isInterior && InteriorMaterial.prepareMesh(el);\r\n const material = prepareMaterial(settings,textureLoader,materialType,false);\r\n fixModelUV(el,material);\r\n fixEnvMapMaterial(material);\r\n lut && lut.include(material);\r\n el.material = material;\r\n // threeJsVariables.slicer.add(el);\r\n }\r\n let shadowSettings = getShadowParams(bundleConfig,el.name);\r\n if (!shadowSettings) {\r\n shadowSettings = {\r\n castShadow: true,\r\n receiveShadow: true\r\n }\r\n }\r\n\r\n el.castShadow = shadowSettings.castShadow;\r\n el.receiveShadow = shadowSettings.receiveShadow;\r\n el.geometry.computeBoundsTree();\r\n addToPoiIntersections(el);\r\n if (!attachedNames.includes(el.name)) {\r\n threeJsVariables.sceneObjectsSlicer.add(el);\r\n }\r\n }\r\n });\r\n\r\n\r\n const animation = bundleConfig.animations[parentName];\r\n if (animation) {\r\n new AnimateObject(object,animation);\r\n }\r\n\r\n sceneObjectsGroup.add(object);\r\n updateShadowMap();\r\n // lazyHideSceneObject(object);\r\n }\r\n });\r\n\r\n if (sceneObjectsGroup.children.length){\r\n threeJsVariables.scene.add(sceneObjectsGroup);\r\n threeJsVariables.renderList.reorder();\r\n updateShadowMap();\r\n }\r\n\r\n}\r\n\r\nexport function prepareMaterial (settings,textureLoader,materialType,manualTextureResize = false) {\r\n let material = [];\r\n if (Array.isArray(settings)) {\r\n settings.forEach((personalMaterialSettings,index) => {\r\n if (Array.isArray(personalMaterialSettings)) {\r\n const thirdMaterials = [];\r\n personalMaterialSettings.forEach((thirdMaterial,thirdIndex) => {\r\n const subMaterialType = materialType[index][thirdIndex];\r\n const singleMaterial = getMaterial(thirdMaterial,textureLoader,subMaterialType,manualTextureResize);\r\n thirdMaterials.push(singleMaterial);\r\n });\r\n material.push(thirdMaterials);\r\n } else {\r\n const subMaterialType = materialType[index];\r\n const singleMaterial = getMaterial(personalMaterialSettings,textureLoader,subMaterialType,manualTextureResize);\r\n material.push(singleMaterial);\r\n }\r\n });\r\n } else {\r\n material = getMaterial(settings,textureLoader,materialType,manualTextureResize);\r\n }\r\n\r\n return material;\r\n}\r\n\r\nfunction getMaterial (settings,textureLoader,materialType,manualTextureResize) {\r\n let material;\r\n switch (materialType) {\r\n case 'MeshStandardMaterial':\r\n material = new MeshStandardMaterial();\r\n break;\r\n case 'MeshBasicMaterial':\r\n material = new MeshBasicMaterial();\r\n break;\r\n case 'DisplacementMaterial':\r\n material = new DisplacementMaterial();\r\n threeJsVariables.composer.addUpdatableElement(material);\r\n break;\r\n case 'InteriorMaterial':\r\n material = new InteriorMaterial();\r\n break;\r\n case 'FluffyMaterial':\r\n material = new FluffyMaterial();\r\n threeJsVariables.composer.addUpdatableElement(material);\r\n break;\r\n case 'LayerMaterial':\r\n material = new LayerMaterial();\r\n break;\r\n case 'SeaMaterial':\r\n material = new SeaMaterial(threeJsVariables.scene.getObjectByName('Dir. Light'));\r\n threeJsVariables.composer.addUpdatableElement(material);\r\n break;\r\n case 'TreeMaterial':\r\n material = new PointsMaterial();\r\n break;\r\n default:\r\n material = new MeshStandardMaterial();\r\n break;\r\n }\r\n\r\n material.userData.defaultSettings = JSON.parse(JSON.stringify(settings));\r\n Object.entries(settings).forEach(([key,value]) => {\r\n if (!material.hasOwnProperty(key) && key !== 'alphaTest') return;\r\n\r\n if (typeof value === 'string') {\r\n if (value.startsWith('#')) {\r\n material[key].setStyle(value,LinearSRGBColorSpace);\r\n } else {\r\n let texture = bundleTextures[value];\r\n\r\n if (!texture) {\r\n if (isMobile) {\r\n texture = loadTexture(value,textureLoader,manualTextureResize);\r\n } else {\r\n const textureSize = {width: 512};\r\n texture = loadTexture(value,textureLoader,manualTextureResize,textureSize,false,(loadedTexture) => {\r\n const width = loadedTexture.source.data.naturalWidth;\r\n if (width === textureSize.width) {\r\n const textureTask = new UpdateTask(async () => {\r\n const newTexture = await loadTexture(value,_tlLoader,manualTextureResize,null,true);\r\n material[key].dispose();\r\n material[key] = null;\r\n bundleTextures[value] = newTexture;\r\n setInitialTextureSettings(key,newTexture);\r\n prepareTexture(value,newTexture);\r\n material[key] = newTexture;\r\n });\r\n\r\n threeJsVariables.tasks.addTask(textureTask);\r\n }\r\n });\r\n }\r\n bundleTextures[value] = texture;\r\n }\r\n\r\n if (value.startsWith('nightLights')) {\r\n const slotKey = key.startsWith('emissive') ? 'emissiveIntensity' : 'lightMapIntensity';\r\n\r\n if (!OrbitDayAndNight.isActiveAndSelected) {\r\n material[slotKey] = 0;\r\n }\r\n\r\n OrbitDayAndNight.buildingMaterials.push({\r\n key: slotKey,\r\n material\r\n });\r\n }\r\n\r\n setInitialTextureSettings(key,texture);\r\n prepareTexture(value,texture);\r\n material[key] = texture;\r\n }\r\n } else if (Array.isArray(value)) {\r\n material[key].fromArray(value);\r\n } else {\r\n if (key === 'lightMapIntensity' && bundleVersionEquals(1)) {\r\n material[key] = value * Math.PI;\r\n } else {\r\n material[key] = value;\r\n }\r\n }\r\n });\r\n\r\n if (material.emissiveMap || (material.lightMap && material.lightMapIntensity === 0 && config.features.dayNight.settings.useLightMapAsEmissiveMap)) {\r\n\r\n if (!OrbitDayAndNight.preloaded) {\r\n OrbitDayAndNight.preloaded = {\r\n materials: []\r\n }\r\n }\r\n\r\n OrbitDayAndNight.preloaded.materials.push(material);\r\n }\r\n\r\n return material;\r\n}\r\n\r\nfunction loadTexture (name,textureLoader,manualTextureResize,preloadParams,async,onLoad) {\r\n const url = `${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/textures/building/`;\r\n const extension = getFileExtension(name);\r\n\r\n if (extension === 'hdr') {\r\n hdrLoader.manager = textureLoader.manager;\r\n return hdrLoader.load(url + name);\r\n } else {\r\n const resized = preloadParams ? Cloudflare.resize(url + name,preloadParams) : manualTextureResize ? Cloudflare.resize(url + name,{\r\n width: 512\r\n }) : Cloudflare.resize(url + name);\r\n // return textureLoader.load(resized,loadedTexture => threeJsVariables.renderer.initTexture(loadedTexture));\r\n if (async) {\r\n return textureLoader.loadAsync(resized);\r\n } else {\r\n if (onLoad) {\r\n return textureLoader.load(resized,onLoad);\r\n } else {\r\n return textureLoader.load(resized);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction prepareTexture (name,texture) {\r\n const bundleConfig = threeJsVariables.bundleConfig;\r\n if (bundleConfig.textures) {\r\n const config = bundleConfig.textures[name];\r\n if (config) {\r\n Object.entries(config).forEach(([key,value]) => {\r\n if (Array.isArray(value)) {\r\n texture[key].fromArray(value);\r\n } else {\r\n texture[key] = value;\r\n }\r\n });\r\n texture.needsUpdate = true;\r\n }\r\n }\r\n}\r\n\r\nfunction prepareAdditionalObjects (bundleConfig,textureLoader) {\r\n if (bundleConfig.additionalObjects && bundleConfig.additionalObjects.length) {\r\n new Objects(bundleConfig.additionalObjects).add(textureLoader);\r\n }\r\n}\r\n\r\nfunction addToPoiIntersections (mesh) {\r\n const config = threeJsVariables.bundleConfig.intersections;\r\n if (config && config.includes(mesh.name)) {\r\n addBuildingsIntersections(mesh);\r\n }\r\n}\r\n\r\nfunction setInitialTextureSettings (key,texture) {\r\n switch (key) {\r\n case 'envMap':\r\n texture.mapping = EquirectangularReflectionMapping;\r\n texture.channel = 0;\r\n break;\r\n case 'aoMap':\r\n case 'lightMap':\r\n texture.channel = 1;\r\n break;\r\n default:\r\n texture.channel = 0;\r\n break;\r\n }\r\n\r\n texture.colorSpace = LinearSRGBColorSpace;\r\n texture.wrapS = RepeatWrapping;\r\n texture.wrapT = RepeatWrapping;\r\n texture.offset.set(0, 0);\r\n texture.repeat.set(1, 1);\r\n\r\n texture.anisotropy = 2;\r\n texture.magFilter = LinearFilter;\r\n texture.minFilter = LinearMipmapLinearFilter;\r\n}\r\n\r\nexport function bundleVersionEquals (version) {\r\n return threeJsVariables.bundleConfig.version === version;\r\n}\r\n\r\nfunction findMaterialType (type,data) {\r\n let result;\r\n if (Array.isArray(data)) {\r\n const join = data.reduce((acc,value) => {\r\n if (Array.isArray(value)) {\r\n acc.push(...value);\r\n } else {\r\n acc.push(value);\r\n }\r\n return acc;\r\n },[]);\r\n\r\n result = join.includes(type);\r\n } else {\r\n result = type === data;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function fixEnvMapMaterial (material) {\r\n function fix (mat) {\r\n if (mat.envMapIntensity === 0) {\r\n mat.envMap = threeJsVariables.scene.userData.environmentPlug;\r\n } else if (mat.envMap === null) {\r\n mat.envMap = threeJsVariables.scene.environment;\r\n }\r\n\r\n mat.needsUpdate = true;\r\n }\r\n\r\n if (threeJsVariables.scene.environment && bundleVersionEquals(2.0)) {\r\n if (Array.isArray(material)) {\r\n material.forEach(subMaterial => fix(subMaterial));\r\n } else {\r\n fix(material);\r\n }\r\n }\r\n}\r\n\r\nexport function fixModelUV (object,material) {\r\n let needsCheck = false;\r\n\r\n if (Array.isArray(material)) {\r\n\r\n for (let i = 0; i < material.length; i++) {\r\n if (material[i].lightMap || material[i].aoMap) {\r\n needsCheck = true;\r\n break;\r\n }\r\n }\r\n\r\n } else {\r\n if (material.lightMap || material.aoMap) {\r\n needsCheck = true;\r\n }\r\n }\r\n\r\n object.traverse(el => {\r\n if (el.isMesh) {\r\n Object.entries(el.geometry.attributes).forEach(([key,value]) => {\r\n if (key.startsWith('_')) {\r\n const attributeKey = key.replace('_','');\r\n el.geometry.setAttribute(attributeKey,value);\r\n el.geometry.deleteAttribute(key);\r\n }\r\n });\r\n\r\n if (needsCheck) {\r\n const attribute = el.geometry.getAttribute('uv1');\r\n if (!attribute) {\r\n el.geometry.setAttribute('uv1',el.geometry.getAttribute('uv').clone())\r\n }\r\n }\r\n }\r\n });\r\n}\r\n\r\nfunction prepareRenderer (bundleConfig) {\r\n if (bundleConfig.renderer) {\r\n threeJsVariables.renderer.toneMapping = bundleConfig.renderer.toneMapping;\r\n threeJsVariables.renderer.toneMappingExposure = bundleConfig.renderer.toneMappingExposure;\r\n\r\n if (bundleConfig.renderer.hasOwnProperty('shadowMap')) {\r\n threeJsVariables.renderer.shadowMap.type = bundleConfig.renderer.shadowMap;\r\n }\r\n\r\n if (bundleConfig.renderer.hasOwnProperty('outputColorSpace')) {\r\n threeJsVariables.renderer.outputColorSpace = bundleConfig.renderer.outputColorSpace;\r\n }\r\n }\r\n}\r\n\r\nfunction prepareCompass (bundleConfig) {\r\n if (bundleConfig.compass) {\r\n config.threejs.compass.correction = bundleConfig.compass.correction;\r\n }\r\n}\r\n\r\nfunction prepareCameraAndOrbitControls (bundleConfig) {\r\n if (config.threejs.orbitControls.fromBundle) {\r\n const orbitControls = bundleConfig.orbitControls;\r\n const camera = bundleConfig.camera;\r\n if (orbitControls) {\r\n config.threejs.orbitControls.target = orbitControls.target;\r\n config.threejs.orbitControls.orbit = orbitControls.orbit;\r\n // config.threejs.orbitControls.cylinder = orbitControls.cylinder;\r\n // config.threejs.orbitControls.floorplan = orbitControls.floorplan;\r\n threeJsVariables.orbitControls.target.set(\r\n orbitControls.target.x,\r\n orbitControls.target.y,\r\n orbitControls.target.z,\r\n );\r\n setOrbitControls(ViewMode.Orbit);\r\n setPolarAngle(ViewMode.Orbit);\r\n setPanLimits(ViewMode.Orbit);\r\n }\r\n\r\n if (camera) {\r\n config.threejs.camera = camera;\r\n threeJsVariables.perspectiveCamera.position.set(\r\n camera.position.x,\r\n camera.position.y,\r\n camera.position.z\r\n );\r\n }\r\n\r\n setViewDeviceTargetAndPosition(ViewMode.Orbit);\r\n }\r\n\r\n if (bundleConfig.cameraProjection) {\r\n // threeJsVariables.perspectiveCamera.fov = bundleConfig.cameraProjection.fov;\r\n threeJsVariables.perspectiveCamera.near = bundleConfig.cameraProjection.near;\r\n threeJsVariables.perspectiveCamera.far = bundleConfig.cameraProjection.far;\r\n threeJsVariables.perspectiveCamera.updateProjectionMatrix();\r\n }\r\n}\r\n\r\nfunction prepareSlicer (bundleConfig) {\r\n if (bundleConfig.slicer && Object.keys(bundleConfig.slicer).length) {\r\n const presets = {};\r\n const defaultPlanes = 5;\r\n const maxPlanes = Math.max(...Object.values(bundleConfig.slicer).map(planes => planes.length));\r\n const planesCount = maxPlanes - defaultPlanes;\r\n\r\n if (planesCount > 0) {\r\n threeJsVariables.slicer.numberOfPlanes += planesCount;\r\n threeJsVariables.sceneObjectsSlicer.numberOfPlanes += planesCount;\r\n threeJsVariables.slicer.setDefaultPlanes();\r\n threeJsVariables.sceneObjectsSlicer.setDefaultPlanes();\r\n }\r\n\r\n Object.entries(bundleConfig.slicer).forEach(([name,planes]) => {\r\n presets[name] = [];\r\n planes.forEach(plane => {\r\n presets[name].push(new Plane(new Vector3().fromArray(plane.normal),plane.constant));\r\n });\r\n });\r\n\r\n threeJsVariables.slicer.setSlicerPresets(presets);\r\n threeJsVariables.sceneObjectsSlicer.setSlicerPresets(presets);\r\n }\r\n}\r\n\r\nfunction prepareRenderList (bundleConfig) {\r\n if (Array.isArray(bundleConfig.renderList) && bundleConfig.renderList.length && config.threejs.renderList?.active) {\r\n config.threejs.renderList.list.push(...bundleConfig.renderList);\r\n }\r\n}\r\n\r\nfunction prepareMiniMap (bundleConfig) {\r\n if (bundleConfig.miniMap) {\r\n threeJsVariables.googleMiniMap.config = bundleConfig.miniMap;\r\n }\r\n}\r\n","'use strict';\n\nimport {GLTFLoader} from 'three/examples/jsm/loaders/GLTFLoader';\nimport {\n addAmenitiesWithoutEngineId,\n createMaterialAndSetBaseColor, filterDisabledLanguages, isOneMesh,\n lazyLoadingData,\n} from '../../functions';\n\nimport { Group, Vector3 } from 'three';\nimport { settingsData, threeJsVariables, isMobile, Buildings } from '../../settings';\nimport {BuildingLabels} from \"../components/building-switch/buildingLabels\";\nimport {SelectedObjectType} from \"../../common\";\nimport {FBXLoader} from 'three/examples/jsm/loaders/FBXLoader';\nimport { calculateBoxForSelectionBoxes } from '../components/building-switch/buildingHover';\nimport { setCoordinates } from './autoProjectScript';\nimport { Vantages } from '../components/vantage/Vantage';\nimport { createTooltip } from '../components/flatTooltip/flatTooltip';\nimport { BuildingBBOX } from '../building/Building';\nimport { CameraCollision } from './CameraCollision';\nimport {sendLogs} from \"../crm/crm-requests\";\n\nlet _hightlights = null;\n\nexport function loadHighlightsModelFromAzure(response, dracoLoader) {\n const [buildingInfo] = response;\n const {cdnRepository, projectFolder} = config;\n const {format} = config.resources.buildings;\n const {folder} = config.resources.selectionBoxes;\n let loader;\n\n const modelsPromiseArray = [];\n\n switch (format) {\n case 'gltf':\n loader = new GLTFLoader();\n loader.setDRACOLoader(dracoLoader);\n break;\n case 'fbx':\n loader = new FBXLoader();\n break;\n\n }\n\n buildingInfo.data.buildings.forEach((building, index) => {\n const url = `${cdnRepository}/${projectFolder}/${folder}/${building.buildingEngineId}_selectBoxes.${format}`;\n const model = lazyLoadingData(loader, url);\n\n modelsPromiseArray.push(model);\n });\n\n return modelsPromiseArray;\n}\n\n\nexport function bundle_initAutoHighlightsScript(response) {\n const crmData = response.filter(el => Array.isArray(el))[0];\n const [crmProps,crmSettings] = crmData;\n const activeBuildings = [];\n const highlightsData = response.filter(el => !Array.isArray(el));\n crmSettings.data.buildings.forEach(building => {\n if (!Buildings.isUsedBuilding(building.buildingEngineId))\n return;\n\n const selections = highlightsData.find(selection => selection.name.startsWith(building.buildingEngineId));\n if (selections) {\n activeBuildings.push(selections);\n } else {\n crmProps.data = crmProps.data.filter(prop => prop.buildingEngineId !== building.buildingEngineId);\n }\n });\n\n settingsData.allCrmData = crmProps.data;\n\n if (highlightsData.length === 0) {\n crmSettings.data.buildings = [];\n activeBuildings.push(new Group());\n\n return;\n }\n\n concatPropsAndHighlights(crmProps, activeBuildings, crmSettings);\n addHighlightsToScene(activeBuildings);\n\n BuildingLabels(activeBuildings);\n\n if (!isMobile)\n createTooltip();\n}\n\n\nexport function initAutoHighlightsScript(response) {\n const crmData = response.filter(el => Array.isArray(el))[0];\n const [crmSettings, crmProps, dictionary] = crmData;\n const highlightsData = response.filter(el => !Array.isArray(el));\n\n settingsData.allCrmData = crmProps.data;\n\n const highlights = getHighlightsFromResponse(highlightsData);\n concatPropsAndHighlights(crmProps, highlights, crmSettings);\n addHighlightsToScene(highlights);\n setProjectSettings(crmSettings, dictionary);\n\n BuildingLabels(highlights);\n\n}\n\nfunction addHighlightsToScene(highlights) {\n const {projectRotation} = config.threejs;\n const projectHighlightsGroup = new Group();\n if (!threeJsVariables.bundleConfig) {\n projectHighlightsGroup.rotation.set(projectRotation.x, projectRotation.y, projectRotation.z);\n } else if (threeJsVariables.bundleConfig && threeJsVariables.bundleConfig.version) {\n setCoordinates(projectHighlightsGroup,threeJsVariables.bundleConfig.project);\n } else {\n setCoordinates(projectHighlightsGroup,threeJsVariables.bundleConfig.building);\n }\n projectHighlightsGroup.name = 'Project Selection Boxes';\n projectHighlightsGroup.add(...highlights);\n calculateBoxForSelectionBoxes(highlights);\n const cameraCollision = new CameraCollision();\n cameraCollision.addObject(projectHighlightsGroup);\n\n // fitModelAndSetMaxMinProperties();\n\n _hightlights = projectHighlightsGroup\n}\n\nexport const getHighlights = () => _hightlights;\n\nexport const getSelectionsByName = (name) => _hightlights.getObjectByName(name + '_selectionBoxes');\n\nexport function setHighlights (highlights) {\n _hightlights = highlights;\n}\n\nfunction getHighlightsFromResponse(highlights) {\n const {format} = config.resources.buildings;\n const highlightsArr = [];\n\n switch (format) {\n case 'gltf':\n highlights.forEach(el => {\n const sBoxBuilding = el.scene.children[0];\n highlightsArr.push(sBoxBuilding);\n });\n break;\n case 'fbx':\n highlights.forEach(el => highlightsArr.push(el));\n break;\n\n }\n\n return highlightsArr;\n}\n\nexport function concatPropsAndHighlights(props, highlights, settings) {\n const dataProps = props.data;\n\n highlights.forEach(building => {\n if (isOneMesh()) {\n const bboxBuilding = new BuildingBBOX(building).create();\n bboxBuilding.updateAttachedModelsList();\n // bboxBuilding.hideSceneObjectsOfCurrentBuilding();\n }\n\n const buildingName = building.name.split('_')[0];\n const buildingClass = Buildings.getBuilding(buildingName);\n const info = createBuildingInfo(building, dataProps, settings);\n //building.children = sortFloors(building);\n building.children = building.children.sort((prev, next) => {\n let n1 = parseInt(prev.name.split('_')[1]);\n let n2 = parseInt(next.name.split('_')[1]);\n return n1 - n2\n });\n\n building.children.forEach((floor, index) => {\n floor.children = floor.children.sort((prev, next) => {\n if (prev.name.startsWith(config.resources.bundle.selectionBoxes.floorPlugName)) {\n return 1\n } else {\n let n1 = parseInt(prev.name.split('_')[2]);\n let n2 = parseInt(next.name.split('_')[2]);\n return n1 - n2\n }\n });\n\n const floorNumber = Number(floor.name.split('_')[1]);\n floor.userData.base_scale = new Vector3(floor.scale.x, floor.scale.y, floor.scale.z);\n floor.userData.basePosition = new Vector3(floor.position.x, floor.position.y, floor.position.z);\n floor.userData.baseWorldPosition = floor.getWorldPosition(new Vector3());\n if (floor.children.length) {\n const floorArr = [];\n floor.children.forEach((apt, index) => {\n apt.layers.enable(1);\n if (!apt.name.startsWith(config.resources.bundle.selectionBoxes.floorPlugName)) {\n const existProp = dataProps.find(prop => prop.engineId === apt.name);\n if (existProp) {\n setDataToApartment(apt, existProp, index);\n createMaterialAndSetBaseColor(apt);\n info && buildingClass.apartments.push(apt);\n } else {\n const amenity = apt.name.split('_').some(word => word === 'amenity');\n if (!amenity)\n console.log(`%cCRM data for ${apt.name} is absent`, 'color: orange');\n setHardcodeDataToApartment(apt, floorNumber);\n createMaterialAndSetBaseColor(apt);\n }\n } else {\n setAttributeToPlug(apt, floorNumber);\n setDataToPlug(apt, floorNumber);\n if (info){\n buildingClass.floorsPlug.push({floor:floorNumber, data: apt});\n }\n }\n\n if (apt.name.match(/_amenity_/g)) {\n createMaterialAndSetBaseColor(apt);\n setDataToAmenities(apt, index);\n if (apt.userData.crm_data)\n buildingClass.customSelections.push(apt);\n }\n\n floorArr.push(apt);\n\n // threeJsVariables.slicer.add(apt);\n });\n\n // Reverse array if first element is CAP\n if (floorArr[0].name.startsWith(config.resources.bundle.selectionBoxes.floorPlugName)) {\n // const reverse = floorArr.reverse();\n if (info){\n buildingClass.addSelection({floor: floorNumber, data: floorArr});\n }\n } else {\n if (info){\n buildingClass.addSelection({floor: floorNumber, data: floorArr});\n }\n }\n\n if (threeJsVariables.slicer.active) {\n buildingClass.addFloor({floor: floorNumber,data: floorArr})\n }\n\n } else {\n\n // floor Amenities\n createMaterialAndSetBaseColor(floor);\n setDataToAmenities(floor, index);\n\n if (floor.name.match(/_amenity_/g) && floor.userData.crm_data) {\n buildingClass.customSelections.push(floor);\n }\n }\n });\n\n buildingClass.addInfo(info);\n\n if (threeJsVariables.slicer.active) {\n buildingClass.floorSliderNumbers = buildingClass.floors.map(el => el.floor).sort((a,b) => b - a);\n }\n\n buildingClass.selectionsGroup = building;\n\n addAmenitiesWithoutEngineId(buildingClass);\n });\n threeJsVariables.cloth.setup();\n checkHighlightsAndCrmDataAreInPlace(dataProps);\n}\n\nexport function setHardcodeDataToApartment(apt, count) {\n apt.userData.floor = count - 1;\n apt.userData.base_position = {\n x: apt.position.x,\n y: apt.position.y,\n z: apt.position.z,\n };\n\n}\n\nfunction generateBuildingInfo (building,data) {\n const buildingEngineId = building.name.split('_')[0];\n const prop = data.find(apt => apt.buildingEngineId === buildingEngineId);\n \n const buildingInfo = {\n \"buildingId\": prop.bmbyPropID.toString(),\n \"buildingEngineId\": buildingEngineId,\n \"buildingName\": prop.buildingName,\n \"buildingLabel\": prop.buildingName,\n \"buildingColor\": \"#ffffff\",\n \"buildingBlock\": \"\",\n \"buildingLot\": \"\",\n \"buildingIcon\": \"\",\n \"buildingTitle\": []\n };\n \n config.languages.forEach(language => {\n buildingInfo.buildingTitle.push({\n lang: language,\n value: prop.buildingName\n });\n });\n\n return buildingInfo;\n}\n\nexport function createBuildingInfo(building, data, settings) {\n const buildingEngineId = building.name.split('_')[0];\n let getBuildingInfo = settings.data.buildings.find(buildingInfo => buildingEngineId === buildingInfo.buildingEngineId);\n\n if (!getBuildingInfo) {\n getBuildingInfo = generateBuildingInfo(building,data);\n config.buildings.push(getBuildingInfo);\n }\n\n let towerName = [];\n\n if (Array.isArray(getBuildingInfo.buildingTitle) && getBuildingInfo.buildingTitle.length){\n getBuildingInfo.buildingTitle.forEach(title => {\n if (!title.value.length){\n title.value = getBuildingInfo.buildingName;\n }\n });\n\n towerName = getBuildingInfo.buildingTitle;\n } else {\n towerName = getBuildingInfo.buildingName;\n }\n\n if (getBuildingInfo) {\n const crm_data = data.filter(prop => prop.engineId.split('_')[0] === getBuildingInfo.buildingEngineId);\n const info = {\n // towerName: getBuildingInfo.buildingName,\n towerName: towerName,\n labelName: getBuildingInfo.buildingLabel,\n buildingIcon: getBuildingInfo.buildingIcon,\n color: getBuildingInfo.buildingColor,\n buildingLot: getBuildingInfo.buildingLot,\n // isActive: false,\n // mouseHover: false,\n // name: getBuildingInfo.buildingEngineId,\n // objects_to_opacity: [],\n // objects_to_appear: [],\n // all_apartments: [],\n // floor_obj: {},\n // flooring_obj: {},\n searchResult: [],\n // customSelections: [],\n crm_data,\n availableApartments: crm_data.filter(apt => apt.status === 'Available').length\n };\n\n return info;\n }\n\n}\n\nexport function setAttributeToPlug(plug, floor) {\n plug.material.transparent = true;\n plug.material.opacity = 0;\n plug.visible = false;\n}\n\nexport function setDataToApartment(apartment, data,index) {\n parseFacing(data);\n parseTenant(data);\n data.hasHighlight = true;\n\n if (settingsData.isConferenceHost) {\n data.assets.sample360 = 'https://dreamsimages.bmby.com/AuraMegadim01/panocontent/tours/test_tour/index.htm';\n if (data.salePrice === 0) {\n const meterCoast = 33000;\n data.salePrice = Math.round(meterCoast * data.totalSpace);\n }\n\n if (data.floorNum % 2 === 0) {\n data.status = (index + data.floorNum) % 3 === 0 ? 'Available' : 'Sold';\n }\n }\n\n if (!data.assets?.plan2D && settingsData.isConferenceHost) {\n const plans = [\n 'https://dreamsimages.bmby.com/AuraMegadim01/content2d/3A.png',\n 'https://dreamsimages.bmby.com/AuraMegadim01/content2d/4A.png',\n 'https://dreamsimages.bmby.com/AuraMegadim01/content2d/3B.png',\n 'https://dreamsimages.bmby.com/AuraMegadim01/content2d/5A.png',\n 'https://dreamsimages.bmby.com/AuraMegadim01/content2d/4B.png',\n 'https://dreamsimages.bmby.com/AuraMegadim01/content2d/5B.png'\n ];\n const selectedPlan = plans[index];\n\n if (selectedPlan) {\n data.assets.plan2D = selectedPlan;\n } else {\n data.assets.plan2D = plans[Math.round(Math.random() * (plans.length - 1))];\n }\n }\n\n if (Vantages.active) {\n data.assets.vantage = '';\n }\n\n\n apartment.userData.crm_data = data;\n const worldPosition = apartment.getWorldPosition(new Vector3());\n apartment.userData.baseWorldPosition = worldPosition;\n apartment.userData.base_position = {\n x: apartment.position.x,\n y: apartment.position.y,\n z: apartment.position.z,\n };\n\n // apartment.userData.floor = data.floorNum - config.resources.selectionBoxes.floorNumberCorrection;\n apartment.userData.floor = data.floorNum;\n apartment.userData.type = SelectedObjectType.SelectionBoxes;\n apartment.userData.isActive = false;\n apartment.userData.isClicked = false;\n\n return apartment;\n}\n\nexport function parseFacing (data) {\n if (data.facing){\n const facing = data.facing.split(/,|-/);\n data.facing = [...new Set(facing)];\n } else {\n data.facing = [];\n }\n}\n\nfunction parseTenant(data) {\n const isTenant = config.features?.isTenant;\n if (!isTenant)\n return;\n\n switch (parseInt(data?.tenantPrice)) {\n case 0:\n data.status = isTenant['0']\n break;\n case 1:\n data.status = isTenant['1']\n break;\n }\n}\n\nexport function setDataToPlug(plug, floorNumber) {\n const worldPosition = plug.getWorldPosition(new Vector3());\n plug.userData.baseWorldPosition = worldPosition;\n plug.userData.base_position = {\n x: plug.position.x,\n y: plug.position.y,\n z: plug.position.z,\n };\n plug.userData.floor = floorNumber;\n plug.userData.type = SelectedObjectType.Plug;\n plug.userData.customSelection = true;\n}\n\nconst dataOfAmenities = (floor) => {\n if ((!config.features.amenities || config.features.amenities.length <= 0) && !settingsData.amenities) return;\n\n const amenityData = settingsData.amenities || config.features.amenities;\n if (floor.name.match(/_amenity_/g)) {\n const amenity = amenityData.find(amen => amen?.engineId === floor.name);\n if (amenity) {\n floor.userData.floor = amenity.floor;\n floor.userData.crm_data = config.features.amenities.find(amen => amen.engineId === floor.name);\n }\n }\n}\n\nexport function setDataToAmenities(amenities, index) {\n amenities.userData.type = SelectedObjectType.SelectionBoxes;\n amenities.userData.customSelection = true;\n dataOfAmenities(amenities, index);\n}\n\nexport function setProjectSettings(settingsFromCrm, dictionary) {\n if (settingsFromCrm && settingsFromCrm.data) {\n const settings = settingsFromCrm.data;\n settings.languages = filterDisabledLanguages(settings.languages);\n config['crmProjectSettings'] = settings;\n\n // remove the line after API is removed\n delete config.crmProjectSettings?.contactWidget;\n\n for (const key in settings) {\n config[key] = settings[key];\n }\n }\n\n if (dictionary && dictionary.data) {\n config.dictionary = dictionary.data;\n }\n}\n\nexport function checkHighlightsAndCrmDataAreInPlace(aptData) {\n const aptsWithoutSelectionBoxes = [];\n settingsData.allCrmData = aptData.filter((apt) => {\n if (!apt?.hasHighlight) {\n aptsWithoutSelectionBoxes.push(apt.propNum);\n return false;\n }\n return true;\n });\n\n if (aptsWithoutSelectionBoxes.length > 0)\n sendLogs(`propNums: ${aptsWithoutSelectionBoxes.join(',')}`, 'error');\n}\n","import { restrictUserInteractions, userPrevent} from '../../functions';\nimport { GSAPAnimationMixer, isDesktop, isIOS, isMobile, isTablet, projectMode } from '../../settings';\nimport { settingsData, threeJsVariables } from '../../settings';\nimport { ViewMode } from '../../common';\nimport { startProject, renderUpdateValuesOnDemand } from '../../app';\nimport { fitModelInViewport } from '../controls/zoomControl';\nimport { degToRad } from \"three/src/math/MathUtils\";\nimport TWEEN from '../../libs/tween.umd';\nimport { autoRotateTimerAction,\n setMinAndMaxControlsDistance } from '../controls/orbitControls'\nimport {\n PerspectiveCamera, Vector3\n} from 'three';\nimport { centerMarker, setInitialMapCenter } from '../widgets/poi/poiv3'\nimport { updateShadowMap } from './lights';\nimport { menuHandler } from '../menu/menu';\nimport { BuildingOutline } from '../building/BuildingOutline';\nimport { disposeTiles } from './environment';\nimport { McID } from '../menu/contactUs/McID';\n\nexport const MODE_ORBIT = 0\nexport const MODE_ANIMATION = 3\n\nexport const ANIMATION_EMPTY = 0\nexport const ANIMATION_INTRO = 1\nexport const ANIMATION_MAP_TO_ORBIT = 2\n\nlet camera_angle_h = 0\nlet camera_angle_v = 0\nlet camera_mode = MODE_ORBIT\nlet camera_animation = 0\nlet camera_animation_duration = 0.0\nlet camera_animation_duration2 = 0.0\nlet _last_max_distance = 0\n\n\nconst target = config.threejs.orbitControls.target;\nlet distance = 100\nlet camera = null\nconst _v = new Vector3()\nconst _v2 = new Vector3()\nconst startCamPosition = new Vector3();\nlet startAngle = 0;\n\nexport function PerspectiveCamera_init () {\n const fov = isMobile ? 70 : 55;\n const aspect = window.innerWidth / window.innerHeight;\n const near = 0.1; //1.0;\n const far = 4000;\n camera = new PerspectiveCamera(fov, aspect, near, far);\n camera.rotation.order = 'YXZ';\n const position = config.threejs.camera.position;\n camera.position.set(position.x,position.y,position.z);\n camera.layers.enableAll();\n\n return camera;\n}\n\nexport async function intro () {\n\n if (!projectMode.LiteMode.isActive() ||\n projectMode.LiteMode.isActive() && (projectMode.LiteMode.modeIs('regular') || projectMode.LiteMode.modeIs('rotate')))\n await fitModelInViewport();\n\n setCameraMode(MODE_ANIMATION,ANIMATION_INTRO);\n}\n\nexport const setCameraMode = (mode,animation)=>{\n mode === MODE_ANIMATION ?\n threeJsVariables.orbitControls.enabled = false :\n threeJsVariables.orbitControls.enabled = true;\n\n projectMode.LiteMode.controlsToggle(false);\n\n camera_mode = mode;\n camera_animation = animation;\n renderUpdateValuesOnDemand(false);\n settingsData.needsRerender = true\n};\n\nexport const cameraAnimationActive = () => {\n return camera_mode !== MODE_ORBIT;\n};\n\nexport const introLoop = (delta)=> {\n\n if (settingsData.slideShowed) {\n setCameraMode(MODE_ORBIT, 0)\n setMinAndMaxControlsDistance(ViewMode.Orbit);\n startProject();\n updateShadowMap();\n threeJsVariables.orbitControls.enabled = true;\n settingsData.projectLoaded = true;\n }\n\n if (!McID.active) {\n config.contactWidget?.active && !isDesktop && restrictUserInteractions(true);\n }\n}\n\nconst set_camera_angles = ()=>{\n if (camera_angle_h>(2*Math.PI)){\n camera_angle_h = camera_angle_h - 2*Math.PI\n }\n if (camera_angle_h<0){\n camera_angle_h = 2*Math.PI + camera_angle_h\n }\n let x1 = Math.cos(camera_angle_h) ;\n let y1 = 0;\n let z1 = Math.sin(camera_angle_h) ;\n\n let x2 = x1*Math.cos(camera_angle_v) ;\n let y2 = Math.sin(camera_angle_v) ;\n let z2 = z1*Math.cos(camera_angle_v) ;\n\n let x = target.x + (x2)*distance;\n let y = target.y + (y2)*distance;\n let z = target.z + (z2)*distance;\n camera.position.set(x,y,z);\n camera.lookAt(target.x,target.y,target.z);\n camera.updateMatrixWorld(false);\n settingsData.needsRerender = true;\n};\n\nconst getCameraHorizontalAngle = ()=>{\n _v2.set(camera.position.x,0,camera.position.z);\n _v.set(target.x,0,target.z).sub(_v2).normalize();\n\n let angle = 0;\n if (camera.position.z{\n let x = target.x - p.x;\n let y = target.y - p.y;\n let z = target.z - p.z;\n return Math.sqrt(x*x+y*y+z*z);\n};\n\nexport const moveFromBorder = ()=>{\n\n let o = threeJsVariables.trackballControls;\n\n let x = o.object.position.x;\n let y = o.object.position.y;\n let z = o.object.position.z;\n let dx = x - o.target.x;\n let dy = y - o.target.y;\n let dz = z - o.target.z;\n let d = Math.sqrt(dx*dx+dy*dy+dz*dz);\n\n let max1 = o.maxDistance*0.98;\n let step = (d-max1);\n dx = (dx/d)*step;\n dy = (dy/d)*step;\n dz = (dz/d)*step;\n\n const duration = {x:0};\n new TWEEN.Tween(duration)\n .to({x:1}, 200).easing(TWEEN.Easing.Linear.None).onUpdate(() => {\n o.object.position.x = x - dx*duration.x;\n o.object.position.y = y - dy*duration.x;\n o.object.position.z = z - dz*duration.x;\n }).onComplete(()=>{\n\n }).start()\n};\n\nexport const OrbitToMap = (triggerMenuHandler = true)=>{\n if (camera_mode===MODE_ANIMATION || settingsData.activeViewMode !== ViewMode.Orbit){\n return;\n }\n\n if (projectMode.LiteMode.isActive()){\n setTimeout(() => {\n menuHandler({target: {dataset: {menuItem: 'map'}}});\n },1000);\n return projectMode.LiteMode.mapAnimation('toMap');\n }\n\n userPrevent(true);\n\n BuildingOutline.toggle(false);\n\n autoRotateTimerAction('cancel');\n setCameraMode(MODE_ANIMATION,ANIMATION_MAP_TO_ORBIT);\n camera_animation_duration = 0.99;\n camera_animation_duration2 = 0.0;\n\n startCamPosition.copy(camera.position);\n let angle = getCameraHorizontalAngle();\n startAngle = angle;\n const deltaAngleH = shortestAngle(angle, degToRad(0));\n let dist = getDistanceToTarget(camera.position);\n const mapTransition = threeJsVariables.composer.getPass('map');\n mapTransition.active = true;\n mapTransition.scale = camera_animation_duration2;\n mapTransition.opacity = camera_animation_duration;\n settingsData.resolveTilesUpdate = false;\n\n return new Promise(resolve => {\n const duration = {x:0}\n new TWEEN.Tween(duration)\n .to({x:1}, 1500).easing(TWEEN.Easing.Linear.None)\n .onUpdate(() => {\n distance = dist + (1100-dist)*duration.x;\n camera_animation_duration = 0.99 - Math.max(0,(distance-400)/(1100-400));\n camera_animation_duration2 = Math.max(0,(distance-900)/(1100-900));\n\n camera_angle_h = angle + deltaAngleH * duration.x;\n // camera_angle_h = angle + (degToRad(0)-angle)*duration.x;\n camera_angle_v = degToRad(10) + (degToRad(90)-degToRad(10))*duration.x;\n set_camera_angles();\n mapTransition.scale = camera_animation_duration2;\n mapTransition.opacity = camera_animation_duration;\n })\n .onComplete(()=>{\n resolve();\n userPrevent(false);\n\n camera_animation_duration = 1.0;\n camera_animation_duration2 = 0.0;\n threeJsVariables.orbitControls.enabled = true;\n centerMarker();\n triggerMenuHandler && menuHandler({target: {dataset: {menuItem: 'map'}}},config.general);\n threeJsVariables.orbitControls.enabled = false;\n \n disposeTiles();\n \n setTimeout(()=>{\n mapTransition.active = false;\n mapTransition.scale = 0.0;\n mapTransition.opacity = 0.0;\n // const endPosition = config.threejs.camera.position;\n distance = Math.min(getDistanceToTarget(startCamPosition),threeJsVariables.orbitControls.maxDistance)*0.98;\n camera_angle_h = startAngle;\n camera_angle_v = degToRad(0);\n set_camera_angles();\n camera.lookAt(target.x,target.y,target.z);\n setCameraMode(MODE_ORBIT,0);\n renderUpdateValuesOnDemand(true);\n },200);\n })\n .start()\n });\n}\n\nfunction shortestAngle(from, to) {\n const PI2 = Math.PI * 2;\n const diff = (to - from + PI2) % PI2;\n return (diff > Math.PI) ? diff - PI2 : diff;\n}\n\nexport const transferToBuilding = async (zoom)=>{\n if (camera_mode===MODE_ANIMATION || settingsData.activeViewMode === ViewMode.Cylinder){\n return\n }\n\n if (projectMode.LiteMode.isActive()){\n projectMode.LiteMode.mapAnimation('toOrbit');\n setCameraMode(MODE_ORBIT,0)\n return;\n }\n\n userPrevent(true);\n autoRotateTimerAction('cancel')\n settingsData.resolveTilesUpdate = true;\n setCameraMode(MODE_ANIMATION,ANIMATION_MAP_TO_ORBIT)\n camera_animation_duration = 0.0\n camera_animation_duration2 = 0.0\n const mapTransition = threeJsVariables.composer.getPass('map');\n const endPosition = config.threejs.camera.position\n let dist = Math.min(getDistanceToTarget(endPosition),threeJsVariables.trackballControls.maxDistance)*0.9\n setInitialMapCenter();\n mapTransition.active = true;\n mapTransition.scale = camera_animation_duration2;\n mapTransition.opacity = camera_animation_duration;\n if (startAngle === 0) {\n startAngle = getCameraHorizontalAngle();\n }\n\n const polarDegrees = config.threejs.orbitControls.orbit.mapToOrbitPolarDegrees || 10;\n return new Promise(resolve => {\n const duration = {x:0}\n new TWEEN.Tween(duration)\n .to({x:1}, 1500).easing(TWEEN.Easing.Linear.None).onUpdate(() => {\n distance = 1100.0 + (dist-1100.0)*duration.x\n\n camera_animation_duration = 0.99 - Math.max(0,(distance-400)/(1100-400))\n camera_animation_duration2 = Math.max(0,(distance-700)/(1100-700))\n\n camera_angle_h = startAngle;\n camera_angle_v = degToRad(90) + (degToRad(polarDegrees)-degToRad(90))*duration.x\n set_camera_angles();\n\n camera.updateProjectionMatrix()\n\n mapTransition.scale = camera_animation_duration2;\n mapTransition.opacity = camera_animation_duration;\n\n }).onComplete(()=>{\n resolve();\n camera_animation_duration = 1.0\n camera_animation_duration2 = 0.0\n\n threeJsVariables.orbitControls.target.set(target.x,target.y,target.z)\n setCameraMode(MODE_ORBIT,0)\n\n mapTransition.active = false;\n mapTransition.scale = 0.0;\n mapTransition.opacity = 0.0;\n\n BuildingOutline.toggle(true);\n autoRotateTimerAction('update')\n userPrevent(false);\n }).start()\n });\n}\n\nconst updateCameraPositionByDistance = ()=>{\n let dist = getDistanceToTarget(camera.position);\n let max = threeJsVariables.orbitControls.maxDistance;\n if (dist>=threeJsVariables.orbitControls.maxDistance){\n let x = (target.x - camera.position.x)/dist;\n let y = (target.y - camera.position.y)/dist;\n let z = (target.z - camera.position.z)/dist;\n max = max*0.98;\n camera.position.x = target.z - x*max;\n camera.position.y = target.y - y*max;\n camera.position.z = target.z - z*max\n }\n};\n\nexport const update = (delta)=>{\n\n if (_last_max_distance !== threeJsVariables.orbitControls.maxDistance) {\n updateCameraPositionByDistance();\n _last_max_distance = threeJsVariables.orbitControls.maxDistance;\n }\n\n if (camera_mode === MODE_ANIMATION) {\n switch (camera_animation) {\n case ANIMATION_INTRO: introLoop(delta);\n break;\n //case ANIMATION_MAP_TO_ORBIT: animation_map_to_orbit(delta)\n // break;\n\n }\n\n settingsData.needsRerender = true\n }\n};\n\n\nexport class CameraMixer {\n constructor () {\n this.camera = threeJsVariables.perspectiveCamera;\n this.orbitContols = threeJsVariables.orbitControls;\n this.trackballControls = threeJsVariables.trackballControls;\n }\n\n createMixer(onStart = () => {},onComplete = () => {}) {\n GSAPAnimationMixer.registerNewMixer('camera',onStart,undefined,onComplete);\n }\n\n target(obj) {\n if (obj.isVector3) {\n\n }\n\n }\n\n\n\n}\n","'use strict';\n\nimport { assignDeep, Buildings, threeJsVariables } from '../../settings';\nimport { setTilesColor, setTilesEmissive } from './environment';\nimport { sceneObjectsGroup } from '../points/points';\nimport { Terrain } from '../components/Terrain/Terrain';\nimport { OSMEnv } from './sceneBackground';\nimport { LinearSRGBColorSpace } from 'three';\n\nexport class ColorCorrection {\n constructor () {\n const DEFAULT_SETTINGS = {\n tiles: {\n color: '#ffffff',\n emissive: '#000000'\n },\n buildings: {\n color: '#ffffff',\n emissive: '#000000'\n },\n osm: {\n color: '#dedede',\n emissive: '#000000'\n },\n ground: {\n color: '#ffffff',\n emissive: '#000000'\n }\n };\n\n this.settings = assignDeep(DEFAULT_SETTINGS,config.threejs.colorCorrection || {});\n }\n\n debug() {\n const functions = {\n export: () => this.export()\n };\n const gui = threeJsVariables.gui;\n const mainFolder = gui.addFolder('Color correction');\n Object.entries(this.settings).forEach(([model,colors]) => {\n const modelFolder = mainFolder.addFolder(model);\n Object.keys(colors).forEach(key => {\n modelFolder.addColor(this.settings[model],key).onChange((newColor) => ColorCorrection.update(model,key,newColor));\n });\n });\n\n mainFolder.add(functions,'export');\n }\n\n export() {\n const dataStr = \"data:text/json;charset=utf-8,\" + encodeURIComponent(JSON.stringify(this.settings));\n const href = document.createElement('a');\n href.setAttribute('href',dataStr);\n href.setAttribute('download',`${config.projectTitle}_color-correction.json`);\n href.click();\n }\n\n getColors(type) {\n return this.settings[type];\n }\n\n static update(model, colorKey, color){\n if (threeJsVariables.bundleConfig?.version) return;\n\n switch (model) {\n case 'tiles':\n if (colorKey === 'color') {\n setTilesColor(color);\n } else {\n setTilesEmissive(color);\n }\n break;\n case 'buildings':\n const buildings = Buildings.getBuildingsArray();\n buildings.forEach(building => {\n building.colors[colorKey] = color;\n building.applyColorCorrection();\n });\n sceneObjectsGroup.traverse(el => {\n if (el.isMesh) {\n el.material[colorKey].setStyle(color,LinearSRGBColorSpace);\n }\n });\n break;\n case 'osm':\n OSMEnv.buildingsMaterials.forEach(material => material[colorKey].set(color));\n break;\n case 'ground':\n Terrain.applyColorCorrection(colorKey,color);\n break;\n\n }\n }\n\n}\n","'use strict';\nimport {\n FrontSide,\n LinearFilter,\n LinearMipmapLinearFilter,\n ShaderMaterial,\n NearestFilter,\n Color,\n Matrix3, CanvasTexture, DoubleSide, Quaternion, Sphere,Box3, Matrix4, Vector3, LinearSRGBColorSpace,MeshBasicMaterial\n} from 'three';\nimport {\n Buildings,\n isDesktop, isIOS,\n isMobile,\n isTablet,\n projectMode, resourcesFolder,\n settingsData,\n threeJsVariables,\n} from '../../settings';\nimport { DebugGoogleTilesRenderer, DebugTilesRenderer, GoogleTilesRenderer, TilesRenderer } from '3d-tiles-renderer';\nimport { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';\nimport {getUrlParam, isCylinderDisplayModeEqual} from '../../functions';\nimport { Group } from 'three';\nimport { ViewMode} from \"../../common\";\nimport { EnvironmentTypes } from '../../common';\nimport { TimesOfDay } from '../liveAnimations/litemode/dayNight/TimesOfDay';\nimport { RepeatWrapping } from 'three';\nimport { MeshStandardMaterial } from 'three';\nimport { OrbitDayAndNight } from '../liveAnimations/DayNight/OrbitDayAndNight';\nimport { ColorCorrection } from './colorCorrection';\nimport { LUT } from '../post-processing/Passes/LUT';\nimport { OptimizationTask } from '../gui/FPS';\nimport { Hmap } from './Hmap';\nimport { KTX2Loader } from 'three/examples/jsm/loaders/KTX2Loader';\nimport { MeshoptDecoder } from 'three/examples/jsm/libs/meshopt_decoder.module';\nimport { MathUtils } from 'three';\nimport { fixModelUV } from './autoProjectScript';\nimport { Cloudflare } from '../api/Cloudflare';\nimport { BmbyMode } from '../mode/BmbyMode';\n\nconst envGroup = new Group();\nlet tilesEnvMapIntensity = 1;\nlet tilesColor = '#ffffff';\nlet tilesEmissive = '#000000';\nlet defaultTileMaterial;\nlet shadowParams = {};\n\nexport function setDefaultTileMaterial (material) {\n defaultTileMaterial = material;\n}\n\nexport function setTilesShadowParams (params) {\n shadowParams = params;\n}\n\n\nexport function setTilesEnvMapIntensity (intensity) {\n tilesEnvMapIntensity = intensity;\n}\n\nexport function setTilesColor (color) {\n tilesColor = color;\n\n if (threeJsVariables.tilesRenderer){\n threeJsVariables.tilesRenderer.forEachLoadedModel((scene,tile)=>{\n scene.traverse(tile =>{\n if (tile.isMesh) {\n if (tile.material.isShaderMaterial) {\n tile.material.uniforms.color.value.setStyle(color,LinearSRGBColorSpace);\n } else {\n tile.material.color.setStyle(color,LinearSRGBColorSpace);\n }\n }\n })\n })\n }\n}\n\nexport function setTilesEmissive (color) {\n tilesEmissive = color;\n if (threeJsVariables.tilesRenderer){\n threeJsVariables.tilesRenderer.forEachLoadedModel((scene,tile)=>{\n scene.traverse(tile =>{\n if ( tile.material && !tile.material.isShaderMaterial) {\n tile.material.emissive.setStyle(color,LinearSRGBColorSpace);\n }\n })\n })\n }\n}\n\nexport const basic_tile = new ShaderMaterial({\n uniforms: {\n map : { value: null },\n hmap : { value: null },\n uvTransform : { value: new Matrix3() },\n fogColor : { value: new Color() },\n fogDensity : { value: 0.0 },\n color : { value: new Color(1,1,1) },\n gamma : { value: 1.0 },\n uOpacity : { value: 1 }\n },\n vertexShader: [\n 'uniform sampler2D hmap;',\n 'uniform mat3 uvTransform;',\n 'varying vec2 lUv;',\n 'varying float z;',\n 'void main() {',\n 'lUv = (uvTransform*vec3( uv, 1 )).xy;',\n 'vec4 rp = modelMatrix * vec4( position, 1.0 );',\n 'float size = 512.0;',\n 'float scale = 1.0/1024.0;',\n 'float h = texture2D(hmap, vec2((rp.x+size)*scale,(rp.z+size)*scale)).r;',\n 'if (h!=0.0){',\n 'rp.y = (h-0.5)*128.0;',\n '}',\n 'gl_Position = projectionMatrix * viewMatrix * rp;',\n 'z = -gl_Position.z;',\n '}'].join(''),\n fragmentShader: [\n 'uniform vec3 fogColor;',\n 'uniform float fogDensity;',\n 'uniform sampler2D map;',\n 'varying vec2 lUv;',\n 'varying float z;',\n 'uniform float gamma;',\n 'uniform float uOpacity;',\n 'uniform vec3 color;',\n 'void main(){',\n 'vec4 c = texture2D(map, lUv);',\n 'c = vec4(c.rgb * color * gamma,uOpacity);',\n 'float fogDepth = z;',\n 'float fogFactor = 1.0 - exp( -fogDensity * fogDensity * fogDepth * fogDepth );',\n 'gl_FragColor = vec4(mix( c.rgb, fogColor, fogFactor ), uOpacity);',\n '}'].join(''),\n side : FrontSide, //DoubleSide,\n depthTest : true,\n depthWrite : true,\n transparent: false,\n});\n\nfunction correctTilesPosition (tiles,env) {\n const {position, rotation, scale} = env;\n\n tiles.group.position.set(position.x,position.y,position.z);\n tiles.group.rotation.set(rotation.x,rotation.y,rotation.z);\n tiles.group.scale.set(scale.x,scale.y,scale.z);\n\n}\n\nexport function environmentToggle () {\n\n if (projectMode.LiteMode.isActive() || BmbyMode.active) return;\n\n let {active,environmentTypes} = config.resources.environments;\n if (!environmentTypes || !Boolean(environmentTypes.length))\n environmentTypes = threeJsVariables.bundleConfig.tiles.settings.environmentTypes;\n\n if (!active){\n return;\n }\n\n let env;\n\n if (isDesktop){\n env = environmentTypes.filter(type => type.apply.filter(envType => envType.device === 'desktop')[0])[0];\n } else if (isMobile){\n env = environmentTypes.filter(type => type.apply.filter(envType => envType.device === 'mobile')[0])[0];\n } else {\n env = environmentTypes.filter(type => type.apply.filter(envType => envType.device === 'web')[0])[0];\n }\n\n switch (env.type) {\n case EnvironmentTypes.CesiumEnv:\n loadCesiumEnvironment(env);\n break;\n // case EnvironmentTypes.CesiumMultiEnv:\n // loadMultiEnvironment();\n // break;\n case EnvironmentTypes.TilesEnv:\n case EnvironmentTypes.GooglePhotorealistic:\n loadTilesEnvironment(env);\n break;\n }\n}\n\nfunction setAdditionalSettings (tile) {\n\n if (isMobile){\n const mobileSettings = tile.userData.settings.mobile;\n if (mobileSettings){\n Object.entries(mobileSettings).forEach(([key,value]) =>{\n tile[key] = value;\n });\n }\n } else {\n const desktopSettings = tile.userData.settings.desktop;\n if (desktopSettings){\n Object.entries(desktopSettings).forEach(([key,value]) =>{\n tile[key] = value;\n });\n }\n }\n}\n\nfunction setupAndAddToSceneAllEnvironmentParts (response) {\n const envGroup = new Group();\n envGroup.name = 'async env';\n response.forEach(env => {\n setAdditionalSettings(env);\n envGroup.add(env.group);\n });\n\n threeJsVariables.scene.add(envGroup);\n threeJsVariables.renderList.reorder();\n\n console.log(envGroup);\n console.log(response);\n\n function update(){\n requestAnimationFrame(update);\n if (settingsData.activeViewMode === ViewMode.Orbit){\n response.forEach(env =>{\n env.update();\n });\n }\n }\n\n update();\n}\n\nfunction loadEnv (env) {\n return new Promise(resolve => {\n const { cesium } = config.cesiumEnvironment;\n let url = new URL( `https://api.cesium.com/v1/assets/${env.id}/endpoint`);\n url.searchParams.append('access_token', cesium.cesiumAccessToken);\n\n let tiles;\n\n fetch(url, {mode: 'cors'})\n .then((res) => {\n\n if (res.ok) {\n return res.json();\n } else {\n return Promise.reject(`${res.status} : ${res.statusText}`);\n }\n\n })\n .then((json) => {\n url = new URL(json.url);\n const version = url.searchParams.get('v');\n\n tiles = new TilesRenderer(url);\n tiles.userData = {\n settings: env,\n isActive: true,\n tilesOnScene: false,\n };\n tiles.setCamera(threeJsVariables.perspectiveCamera);\n tiles.setResolutionFromRenderer(threeJsVariables.perspectiveCamera, threeJsVariables.renderer);\n tiles.fetchOptions.headers = {};\n tiles.fetchOptions.headers.Authorization = `Bearer ${json.accessToken}`;\n\n tiles.preprocessURL = (uri) => {\n const exp = parseJwt(json.accessToken).exp;\n const now = new Date().getTime() / 1000;\n\n if (exp < now){\n const tokenRequest = getNewToken();\n tokenRequest.then((newToken) =>{\n json.accessToken = newToken;\n uri = new URL( uri );\n if ( /^http/.test( uri.protocol ) ) {\n\n uri.searchParams.append( 'v', version );\n\n }\n return uri.toString();\n });\n } else {\n uri = new URL( uri );\n if ( /^http/.test( uri.protocol ) ) {\n\n uri.searchParams.append( 'v', version );\n\n }\n return uri.toString();\n }\n };\n\n tiles.onLoadTileSet = (e) => {\n const box = new Box3();\n const matrix = new Matrix4();\n tiles.getOrientedBounds(box, matrix);\n const position = new Vector3().setFromMatrixPosition(matrix);\n const distanceToEllipsoidCenter = position.length();\n\n const surfaceDirection = position.normalize();\n const up = new Vector3(0, 1, 0);\n const rotationToNorthPole = rotationBetweenDirections(surfaceDirection, up);\n\n // tiles.group.quaternion.x = rotationToNorthPole.x;\n // tiles.group.quaternion.y = rotationToNorthPole.y;\n // tiles.group.quaternion.z = rotationToNorthPole.z;\n // tiles.group.quaternion.w = rotationToNorthPole.w;\n // tiles.group.position.y = -distanceToEllipsoidCenter;\n correctTilesPosition(tiles,env);\n };\n\n tiles.onLoadModel = function (scene) {\n scene.traverse(objMesh => {\n if (objMesh.material && objMesh.material.map ) {\n const image = new CanvasTexture(objMesh.material.map.image);\n image.wrapS = RepeatWrapping;\n image.wrapT = RepeatWrapping;\n image.offset.set(0,0);\n image.repeat.set(1,1);\n image.flipY = false;\n objMesh.material = new MeshBasicMaterial({\n map: image,\n });\n // objMesh.material.map.encoding = THREE.LinearEncoding;\n }\n });\n };\n\n setup();\n })\n .catch(err => {\n console.error('Unable to get ion tileset:', err);\n });\n\n\n function setup() {\n tiles.fetchOptions.mode = 'cors';\n\n const dracoLoader = new DRACOLoader();\n dracoLoader.setDecoderPath('js/libs/gltf/');\n\n const loader = new GLTFLoader(tiles.manager);\n loader.setDRACOLoader(dracoLoader);\n\n tiles.manager.addHandler(/\\.gltf$/, loader);\n\n resolve(tiles);\n }\n });\n}\n\nexport function loadCesiumEnvironment(env) {\n const {cesiumSettings,scale, position,rotation} = env.settings;\n\n const isEnv = threeJsVariables.scene.getObjectByName('async env');\n if (isEnv) {\n environmentShow();\n return;\n }\n\n let url;\n let tiles;\n const offsetParent = new Group();\n\n const cesiumIdManual = getUrlParam('cesiumid');\n const tokenManual = getUrlParam('token');\n let urlManual = `https://api.cesium.com/v1/assets/${cesiumIdManual}/endpoint`;\n const cesiumUrl = cesiumSettings.cesiumURL.replace('{{cesiumAssetsID}}', String(cesiumSettings.cesiumAssetsID));\n\n url = new URL( cesiumIdManual && tokenManual ? urlManual : cesiumUrl);\n url.searchParams.append('access_token', tokenManual || cesiumSettings.cesiumAccessToken);\n\n fetch(url, {mode: 'cors'})\n .then((res) => {\n\n if (res.ok) {\n return res.json();\n } else {\n return Promise.reject(`${res.status} : ${res.statusText}`);\n }\n\n })\n .then((json) => {\n url = new URL(json.url);\n const version = url.searchParams.get('v');\n\n settingsData.needsRerender = true;\n\n tiles = new TilesRenderer(url);\n\n // window.tiles = tiles;\n tiles.displayBoxBounds = true;\n tiles.userData = {\n isActive: true,\n tilesOnScene: false,\n };\n threeJsVariables.tilesRenderer = tiles;\n tiles.setCamera(threeJsVariables.perspectiveCamera);\n tiles.setResolutionFromRenderer(threeJsVariables.perspectiveCamera, threeJsVariables.renderer);\n tiles.fetchOptions.headers = {};\n tiles.fetchOptions.headers.Authorization = `Bearer ${json.accessToken}`;\n\n setEnvironmentSettings(env,tiles);\n\n // if (isMobile){\n // tiles.errorTarget = 18;\n // tiles.errorThreshold = 1000;\n // } else {\n // tiles.errorTarget = 5;\n // tiles.errorThreshold = 1000;\n // }\n\n tiles.manager.onProgress = function (url, itemsLoaded, itemsTotal) {\n // if (!tiles.userData.isActive){\n // tiles.lruCache.itemList = [];\n // tiles.lruCache.callbacks.clear();\n // tiles.downloadQueue.items=[];\n // tiles.downloadQueue.callbacks.clear();\n // }\n };\n\n tiles.manager.onLoad = () =>{\n // if (tiles.downloadQueue.callbacks.size === 0){\n // tiles.userData.tilesOnScene = true;\n // }\n };\n\n tiles.preprocessURL = (uri) => {\n const exp = parseJwt(json.accessToken).exp;\n const now = new Date().getTime() / 1000;\n\n if (exp < now){\n const tokenRequest = getNewToken(env);\n tokenRequest.then((newToken) =>{\n json.accessToken = newToken;\n uri = new URL( uri );\n if ( /^http/.test( uri.protocol ) ) {\n\n uri.searchParams.append( 'v', version );\n\n }\n return uri.toString();\n });\n } else {\n uri = new URL( uri );\n if ( /^http/.test( uri.protocol ) ) {\n\n uri.searchParams.append( 'v', version );\n\n }\n return uri.toString();\n }\n };\n\n tiles.onLoadTileSet = (e) => {\n const box = new Box3();\n const matrix = new Matrix4();\n tiles.getOrientedBounds(box, matrix);\n const position = new Vector3().setFromMatrixPosition(matrix);\n const distanceToEllipsoidCenter = position.length();\n\n const surfaceDirection = position.normalize();\n const up = new Vector3(0, 1, 0);\n const rotationToNorthPole = rotationBetweenDirections(surfaceDirection, up);\n\n tiles.group.quaternion.x = rotationToNorthPole.x;\n tiles.group.quaternion.y = rotationToNorthPole.y;\n tiles.group.quaternion.z = rotationToNorthPole.z;\n tiles.group.quaternion.w = rotationToNorthPole.w;\n tiles.group.position.y = -distanceToEllipsoidCenter;\n };\n\n tiles.onLoadModel = function (scene) {\n // tiles.userData.isActive && tiles.update();\n // console.log('update tiles render');\n scene.traverse(objMesh => {\n if (objMesh.material && objMesh.material.map ) {\n // const image = new THREE.CanvasTexture(objMesh.material.map.image);\n // image.wrapS = THREE.RepeatWrapping;\n // image.wrapT = THREE.RepeatWrapping;\n // image.offset.set(0,0);\n // image.repeat.set(1,1);\n // image.flipY = false;\n objMesh.material = new MeshBasicMaterial({\n map: objMesh.material.map,\n side: DoubleSide,\n });\n objMesh.material.map.colorSpace = LinearSRGBColorSpace;\n }\n });\n };\n\n setupTiles();\n })\n .catch(err => {\n console.error('Unable to get ion tileset:', err);\n });\n\n\n function setupTiles() {\n tiles.fetchOptions.mode = 'cors';\n\n const dracoLoader = new DRACOLoader();\n dracoLoader.setDecoderPath('js/libs/gltf/');\n\n const loader = new GLTFLoader(tiles.manager);\n loader.setDRACOLoader(dracoLoader);\n\n tiles.manager.addHandler(/\\.gltf$/, loader);\n offsetParent.add(tiles.group);\n }\n\n if (!cesiumIdManual && !tokenManual){\n offsetParent.scale.set(scale.x, scale.y, scale.z);\n offsetParent.position.set(position.x, position.y, position.z);\n offsetParent.rotation.set(rotation.x, rotation.y, rotation.z);\n }\n\n offsetParent.name = 'async env';\n offsetParent.updateMatrixWorld(true);\n\n threeJsVariables.scene.add(offsetParent);\n\n // renderLoop();\n\n // function renderLoop() {\n // requestAnimationFrame(renderLoop);\n // if (!tiles) return;\n\n // tiles.userData.isActive && tiles.update();\n // tiles.update();\n\n\n\n // if (tiles.group.children.length === 0){\n // // console.log('render');\n // tiles.userData.isActive && tiles.update();\n // }\n //\n // if (settingsData.drag_move || settingsData.wheelIsUse){\n // tiles.userData.isActive && tiles.update();\n // }\n // }\n\n}\n\nfunction setEnvironmentSettings (env,tilesRender) {\n let settings;\n\n if (isDesktop){\n settings = env.apply.filter(envType => envType.device === 'desktop')[0];\n } else if (isMobile || isTablet){\n settings = env.apply.filter(envType => envType.device === 'mobile')[0];\n }else{\n settings = env.apply.filter(envType => envType.device === 'web')[0];\n }\n\n const config = settings.config;\n\n const params = {\n minSize: getUrlParam('min') ? Number(getUrlParam('min')) : config.minSize ? config.minSize : isMobile ? 100 : 600,\n maxSize: getUrlParam('max') ? Number(getUrlParam('max')) : config.maxSize ? config.maxSize : isMobile ? 200 : 800,\n errorTarget: getUrlParam('target') ? Number(getUrlParam('target')) : config.errorTarget,\n maxDepth: config.maxDepth ? config.maxDepth : Infinity,\n errorThreshold: config.errorThreshold ? config.errorThreshold : Infinity\n };\n\n if (getUrlParam('depth')) {\n let value = Number(getUrlParam('depth'));\n if (value === 0) {\n value = Infinity;\n }\n params.maxDepth = value;\n }\n\n if (getUrlParam('threshold')) {\n let value = Number(getUrlParam('threshold'));\n if (value === 0) {\n value = Infinity;\n }\n params.errorThreshold = value;\n }\n\n\n if (devModeEnvironmentParams.isGuiOnScene){\n tilesRender.errorTarget = devModeEnvironmentParams.errorTarget;\n tilesRender.errorThreshold = devModeEnvironmentParams.errorThreshold;\n tilesRender.maxDepth = devModeEnvironmentParams.maxDepth;\n } else {\n Object.entries(params).forEach(([key,value]) =>{\n if (key === 'minSize' || key === 'maxSize') {\n tilesRender.lruCache[key] = value;\n } else {\n tilesRender[key] = value;\n }\n });\n }\n}\n\nfunction getNewToken (env) {\n const {cesiumAccessToken,cesiumAssetsID,cesiumURL} = env.settings.cesiumSettings;\n\n const cesiumUrl = cesiumURL.replace('{{cesiumAssetsID}}', String(cesiumAssetsID));\n\n let url = new URL( cesiumUrl);\n url.searchParams.append('access_token', cesiumAccessToken);\n\n return new Promise(async (resolve, reject) => {\n const response = await fetch(url, {mode: 'cors'});\n if (response.ok){\n resolve(response.json().accessToken);\n } else {\n reject(`${response.status} : ${response.statusText}`);\n }\n });\n}\n\nfunction parseJwt (token) {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(atob(base64).split('').map(function(c) {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n }).join(''));\n\n return JSON.parse(jsonPayload);\n};\n\n\nfunction rotationBetweenDirections(dir1, dir2) {\n\n const rotation = new Quaternion();\n const a = new Vector3().crossVectors(dir1, dir2);\n rotation.x = a.x;\n rotation.y = a.y;\n rotation.z = a.z;\n rotation.w = 1 + dir1.clone().dot(dir2);\n rotation.normalize();\n\n return rotation;\n}\n\nconst devModeEnvironmentParams = {\n displayBoxBounds: false,\n errorTarget: 5,\n errorThreshold: 12,\n maxDepth: 20,\n isGuiOnScene: false,\n 'changeDisplayBoxBounds': () => changeDisplayBoxBounds()\n}\n\nfunction changeDisplayBoxBounds() {\n const {scene} = threeJsVariables;\n devModeEnvironmentParams.displayBoxBounds = !devModeEnvironmentParams.displayBoxBounds;\n\n const asyncEnv = threeJsVariables.scene.getObjectByName('async env');\n asyncEnv && scene.remove(asyncEnv);\n\n environmentToggle();\n}\nfunction changeErrorTarget(value) {\n\n}\nfunction changeerrorThreshold(value) {\n\n}\n\nfunction addGuiHelper() {\n if (devModeEnvironmentParams.isGuiOnScene) return;\n\n const {gui} = threeJsVariables;\n\n const environmentFolder = gui.addFolder('environment');\n\n environmentFolder.add( devModeEnvironmentParams, 'errorTarget', 0, 500 ).step( 0.01 ).onChange( function ( value ) {\n threeJsVariables.tilesRenderer.errorTarget = value;\n });\n\n environmentFolder.add( devModeEnvironmentParams, 'errorThreshold', 0, 1000 ).step( 0.01 ).onChange( function ( value ) {\n threeJsVariables.tilesRenderer.errorThreshold = value;\n });\n\n environmentFolder.add( devModeEnvironmentParams, 'maxDepth', 0, 50 ).step( 1 ).onChange( function ( value ) {\n threeJsVariables.tilesRenderer.maxDepth = value;\n });\n\n environmentFolder.add(devModeEnvironmentParams, 'changeDisplayBoxBounds');\n\n devModeEnvironmentParams.isGuiOnScene = true;\n}\n\nexport const setHMap = (t)=>{\n t.minFilter = NearestFilter\n t.magFilter = NearestFilter\n t.generateMipmaps = false\n t.flipY = false\n\n basic_tile.uniforms.hmap.value = t\n\n let tilesRender = threeJsVariables.tilesRenderer\n if (tilesRender){\n tilesRender.forEachLoadedModel((scene,tile)=>{\n scene.traverse(o =>{\n if ( o.material) {\n o.material.uniforms.hmap.value = t\n }\n })\n })\n }else{\n let a = threeJsVariables.scene.getObjectByName('async env')\n a?.traverse(o=>{\n if ( o.material) {\n o.material.uniforms.hmap.value = t\n }\n })\n }\n}\n\nexport const setFog = (color,density)=>{\n\n basic_tile.uniforms.fogColor.value.set(color)\n basic_tile.uniforms.fogDensity.value = density\n\n let tilesRender = threeJsVariables.tilesRenderer\n\n if (tilesRender){\n tilesRender.forEachLoadedModel((scene,tile)=>{\n scene.traverse(o =>{\n if ( o.material) {\n o.material.uniforms.fogColor.value.set(color)\n o.material.uniforms.fogDensity.value = density\n }\n })\n })\n }else if (!OrbitDayAndNight.isActive){\n\n let a = threeJsVariables.scene.getObjectByName('async env')\n a?.traverse(o=>{\n if ( o.material) {\n o.material.uniforms.fogColor.value.set(color)\n o.material.uniforms.fogDensity.value = density\n }\n });\n }\n}\n\nexport const setColorGamma = (color,gamma)=>{\n basic_tile.uniforms.color.value.set(color)\n basic_tile.uniforms.gamma.value = gamma\n\n let tilesRender = threeJsVariables.tilesRenderer\n\n if (tilesRender){\n tilesRender.forEachLoadedModel((scene,tile)=>{\n scene.traverse(o =>{\n if ( o.material) {\n o.material.uniforms.color.value.set(color)\n o.material.uniforms.gamma.value = gamma\n }\n })\n })\n }else{\n let a = threeJsVariables.scene.getObjectByName('async env')\n a?.traverse(o=>{\n if ( o.material) {\n o.material.uniforms.color.value.set(color)\n o.material.uniforms.gamma.value = gamma\n }\n })\n }\n}\n\nexport function addTilesToScene() {\n // if (!isMobile) threeJsVariables.scene.add(envGroup);\n\n if (projectMode.LiteMode.isActive()) {\n\n // projectMode.LiteMode.addToScene();\n\n return new Promise(resolve => {\n // setTimeout(() => {\n //\n //\n // resolve();\n // },2000);\n const interval = setInterval(() => {\n const menu = document.querySelector('.aside__container');\n const nightTexture = config.features.liteMode.images.night || false;\n\n if (nightTexture) {\n const timesOfDayIsReady = TimesOfDay.isReady();\n\n if (menu && timesOfDayIsReady) {\n clearInterval(interval);\n resolve();\n }\n\n } else {\n\n if (menu) {\n clearInterval(interval);\n resolve();\n }\n\n }\n },500);\n // const liteModeInterval = setInterval(() => {\n // const checkLayer = threeJsVariables.scene.getObjectByName('Lite mode');\n // if (checkLayer){\n // clearInterval(liteModeInterval);\n\n // }\n // },100);\n });\n }\n\n return new Promise(resolve => {\n const int = setInterval(() =>{\n\n // threeJsVariables.renderer.render(threeJsVariables.scene, threeJsVariables.perspectiveCamera);\n\n if (threeJsVariables.tilesRenderer) {\n\n settingsData.needsRerender = true;\n\n if (settingsData.activeViewMode === ViewMode.Cylinder || threeJsVariables.tilesRenderer.visibleTiles.size) {\n clearInterval(int);\n resolve();\n }\n\n } else {\n\n const asyncGroup = threeJsVariables.scene.getObjectByName('async env');\n\n if (config.resources.bundle.minitiles && asyncGroup && asyncGroup.children.length === config.resources.bundle.tilesCount){\n clearInterval(int);\n resolve();\n } else if (!config.resources.bundle.minitiles && asyncGroup) {\n clearInterval(int);\n resolve();\n }\n }\n },200)\n });\n}\n\nexport function loadTilesEnvironment(env) {\n if (BmbyMode.active)\n return;\n const active = config.resources.environments.active;\n const isEnv = threeJsVariables.scene.getObjectByName('async env');\n if (!active) {\n if (!isEnv) {\n const empty = new Group();\n empty.name = 'async env';\n threeJsVariables.scene.add(empty);\n threeJsVariables.renderList.reorder();\n }\n return;\n }\n\n\n if (isEnv) {\n // environmentShow();\n environmentShowV2();\n return;\n }\n\n const {position,rotation,scale,tilesSettings, offset} = env.settings;\n const {cdnRepository,projectFolder} = config;\n const offsetVector = new Vector3();\n\n if (offset) {\n offsetVector.set(offset.x,offset.y,offset.z);\n }\n\n let tilesUrl;\n let tilesRenderer;\n\n if (env.type === 'tiles') {\n tilesUrl = `${cdnRepository}/${projectFolder}/${resourcesFolder}/tiles/${tilesSettings.path}`;\n\n if (getUrlParam('dev')){\n tilesRenderer = new DebugTilesRenderer(tilesUrl);\n tilesRenderer.displayBoxBounds = devModeEnvironmentParams.displayBoxBounds;\n } else {\n tilesRenderer = new TilesRenderer(tilesUrl);\n }\n } else {\n tilesUrl = config.googleAPI.split('&')[0];\n\n if (getUrlParam('dev')){\n tilesRenderer = new DebugGoogleTilesRenderer(tilesUrl);\n tilesRenderer.displayBoxBounds = devModeEnvironmentParams.displayBoxBounds;\n } else {\n tilesRenderer = new GoogleTilesRenderer(tilesUrl);\n }\n tilesRenderer.setLatLonToYUp( tilesSettings.coords.lat * MathUtils.DEG2RAD, tilesSettings.coords.lng * MathUtils.DEG2RAD )\n }\n\n\n const colors = new ColorCorrection().getColors('tiles');\n const lut = LUT.getScope('tiles');\n setTilesColor(colors.color);\n setTilesEmissive(colors.emissive);\n\n let envMap = null;\n if (!defaultTileMaterial) {\n const buildingInstance = Buildings.getBuildingsArray()[0].instances[0];\n if (Array.isArray(buildingInstance.material)) {\n envMap = buildingInstance.material[0].envMap;\n } else {\n envMap = buildingInstance.material.envMap;\n }\n }\n\n settingsData.needsRerender = true;\n tilesRenderer.optimizeRaycast = false;\n threeJsVariables.tilesRenderer = tilesRenderer;\n settingsData.totalTilesCount = 0;\n\n const surfaceGroup = new Group();\n surfaceGroup.name = 'surfaceGroup';\n surfaceGroup.position.add(offsetVector);\n\n const envGroup = new Group();\n envGroup.name = 'async env';\n envGroup.add(surfaceGroup);\n\n const dracoLoader = new DRACOLoader();\n dracoLoader.setDecoderPath('js/libs/gltf/');\n\n const ktx2Loader = new KTX2Loader()\n .setTranscoderPath( 'js/libs/basis/' )\n .detectSupport(threeJsVariables.renderer);\n\n const loader = new GLTFLoader()\n .setDRACOLoader(dracoLoader)\n .setKTX2Loader(ktx2Loader)\n .setMeshoptDecoder( MeshoptDecoder );\n\n tilesRenderer.manager.addHandler(/\\.gltf$/, {\n\n parse(...args) {\n return loader.parse(...args);\n }\n });\n \n tilesRenderer.preprocessURL = uri => {\n uri = new URL( uri );\n uri.searchParams.append( 'v', Cloudflare.version );\n return uri.toString();\n };\n\n tilesRenderer.setCamera(threeJsVariables.perspectiveCamera);\n tilesRenderer.setResolutionFromRenderer(threeJsVariables.perspectiveCamera, threeJsVariables.renderer);\n\n setEnvironmentSettings(env,tilesRenderer);\n\n if (getUrlParam('dev')){\n\n addGuiHelper();\n }\n\n // tilesRenderer.manager.onProgress = (tiles)=>{\n // // console.log(tiles);\n // };\n\n // tilesRenderer.preprocessURL = (uri) => {\n // // const domain = 'https://cloud.skylineglobe.com/sg/b3dm/NeveTzedek3.420160/1416/';\n // // uri = new URL(domain + uri);\n // // return uri;\n // };\n\n //tilesRenderer.manager.onLoad = (tiles) =>{\n // if (tilesRenderer.frameCount === tilesRenderer.root.children.length){\n // removePreloader();\n // flyCameraAnimation();\n // }\n //};\n\n if (env.type === 'tiles') {\n tilesRenderer.addEventListener('load-tile-set',({tileSet}) => {\n const tilesType = Object.keys(tileSet.root.boundingVolume)[0];\n let position;\n let surfaceDirection;\n let up;\n let rotationToNorthPole;\n \n switch (tilesType) {\n case 'box':\n if (config.resources.environments.needsBoxTransform) {\n const box = new Box3();\n const matrix = new Matrix4();\n tilesRenderer.getOrientedBoundingBox(box,matrix);\n position = new Vector3().setFromMatrixPosition(matrix);\n const distanceToEllipsoidCenter = position.length();\n surfaceDirection = position.normalize();\n up = new Vector3(0,1,0);\n rotationToNorthPole = rotationBetweenDirections(surfaceDirection,up);\n \n surfaceGroup.quaternion.x = rotationToNorthPole.x;\n surfaceGroup.quaternion.y = rotationToNorthPole.y;\n surfaceGroup.quaternion.z = rotationToNorthPole.z;\n surfaceGroup.quaternion.w = rotationToNorthPole.w;\n surfaceGroup.position.y = - distanceToEllipsoidCenter + offsetVector.y;\n }\n \n break;\n case 'sphere':\n const sphere = new Sphere();\n tilesRenderer.getBoundingSphere(sphere);\n const dir = new Vector3().subVectors(new Vector3(),sphere.center);\n tilesRenderer.group.position.set(dir.x,dir.y,dir.z);\n \n position = new Vector3().copy(tilesRenderer.group.position);\n \n surfaceDirection = position.normalize();\n up = new Vector3(0, -1, 0);\n rotationToNorthPole = rotationBetweenDirections(surfaceDirection, up);\n \n surfaceGroup.quaternion.x = rotationToNorthPole.x;\n surfaceGroup.quaternion.y = rotationToNorthPole.y;\n surfaceGroup.quaternion.z = rotationToNorthPole.z;\n surfaceGroup.quaternion.w = rotationToNorthPole.w;\n \n break;\n }\n \n settingsData.needsRerender = true;\n });\n }\n\n const envToggle = OrbitDayAndNight.hasBackgroundToggle;\n \n tilesRenderer.addEventListener('load-model',({scene}) => {\n settingsData.needsRerender = true;\n scene.traverse(objMesh =>{\n if ( objMesh.material) {\n \n let map = objMesh.material.map;\n if (map) {\n map.colorSpace = LinearSRGBColorSpace;\n map.wrapS = RepeatWrapping;\n map.wrapT = RepeatWrapping;\n map.offset.set(0,0);\n map.repeat.set(1,1);\n map.anisotropy = 2;\n map.generateMipmaps = !map.isCompressedTexture;\n map.magFilter = LinearFilter;\n map.minFilter = LinearMipmapLinearFilter;\n }\n \n if (defaultTileMaterial) {\n objMesh.material = defaultTileMaterial.clone();\n objMesh.material.map = map;\n \n if (objMesh.material.lightMap || objMesh.material.aoMap) {\n fixModelUV(objMesh,objMesh.material);\n }\n \n if (lut) {\n lut.include(objMesh.material);\n } else {\n Hmap.upgradeMaterial(objMesh.material);\n }\n \n if (objMesh.material.type === 'MeshBasicMaterial') {\n objMesh.material.color.r = tilesEnvMapIntensity;\n objMesh.material.color.g = tilesEnvMapIntensity;\n objMesh.material.color.b = tilesEnvMapIntensity;\n } else if (OrbitDayAndNight.isActiveAndSelected) {\n objMesh.material.envMapIntensity = tilesEnvMapIntensity;\n }\n objMesh.castShadow = shadowParams.castShadow;\n objMesh.receiveShadow = shadowParams.receiveShadow;\n objMesh.geometry.computeVertexNormals();\n objMesh.geometry.computeBoundsTree();\n \n } else {\n if (envToggle) {\n \n objMesh.material = new MeshStandardMaterial({\n map: map,\n envMap: envMap,\n envMapIntensity: tilesEnvMapIntensity,\n color: new Color().setStyle(tilesColor,LinearSRGBColorSpace),\n emissive: new Color().setStyle(tilesEmissive,LinearSRGBColorSpace)\n });\n \n if (lut) {\n lut.include(objMesh.material);\n } else {\n Hmap.upgradeMaterial(objMesh.material);\n }\n \n objMesh.castShadow = shadowParams.castShadow;\n objMesh.receiveShadow = shadowParams.receiveShadow;\n \n objMesh.geometry.computeVertexNormals();\n \n } else {\n objMesh.material = basic_tile.clone();\n objMesh.material.uniforms.map.value = map;\n objMesh.material.uniforms.hmap.value = basic_tile.uniforms.hmap.value;\n objMesh.castShadow = false;\n }\n }\n // threeJsVariables.slicer.add(objMesh);\n settingsData.totalTilesCount++;\n }\n });\n });\n\n tilesRenderer.addEventListener('dispose-model',({scene}) => {\n scene.traverse( el => {\n if ( el.isMesh ) {\n lut && lut.removeShader(el.material.uuid);\n el.geometry.disposeBoundsTree();\n el.geometry.dispose();\n el.material.dispose();\n }\n });\n });\n\n surfaceGroup.add(tilesRenderer.group);\n\n envGroup.scale.set(scale.x,scale.y,scale.z);\n envGroup.position.set(position.x,position.y,position.z);\n envGroup.rotation.set(rotation.x,rotation.y,rotation.z);\n\n threeJsVariables.scene.add( envGroup );\n threeJsVariables.renderList.reorder();\n threeJsVariables.environment = envGroup;\n threeJsVariables.tilesRenderer = tilesRenderer;\n\n const tilesTask = new OptimizationTask((fps) => {\n if (fps < settingsData.fps) {\n tilesRenderer.errorTarget += 0.5;\n } else {\n tilesTask.finished = true;\n }\n },10,10);\n\n\n const updateTilesRerender = setInterval(() => {\n settingsData.needsRerender = true;\n if (tilesRenderer.visibleTiles.size > 10) {\n clearInterval(updateTilesRerender);\n }\n },100);\n\n}\n\nexport function renderLoop() {\n if (threeJsVariables.tilesRenderer){\n threeJsVariables.tilesRenderer.update();\n }\n settingsData.needsRerender = false;\n}\n\nexport function environmentHide (hideWithoutAnimation = false) {\n if (config.features.privateHouseMode || isCylinderDisplayModeEqual('show all')) return;\n const asyncEnv = threeJsVariables.scene.getObjectByName('async env');\n if (asyncEnv) {\n if (hideWithoutAnimation) {\n asyncEnv.visible = false;\n }\n // if (threeJsVariables.slicer.active) {\n // asyncEnv.visible = false;\n // return;\n // }\n if (!asyncEnv.visible){\n return;\n }\n\n asyncEnv.visible = false;\n\n // const mixer = GSAPAnimationMixer.getMixer('cylinderEnter');\n\n // if (threeJsVariables.tilesRenderer) {\n // threeJsVariables.tilesRenderer.forEachLoadedModel((scene,tile)=>{\n // scene.traverse(child =>{\n // if (child.isMesh){\n // let animation;\n //\n // if (child.material.isShaderMaterial) {\n // animation = gsap.to(child.material.uniforms.uOpacity,{\n // duration: GSAPAnimationMixer.duration,\n // ease: GSAPAnimationMixer.ease,\n // // transparent: true,\n // value: 0,\n // onStart: () => {\n // child.material.transparent = true;\n // child.material.needsUpdate = true;\n // },\n // // onUpdate: () => {\n // // child.material.needsUpdate = true;\n // // },\n // onComplete:()=>{\n // asyncEnv.visible = false;\n // }\n // });\n // } else {\n // animation = gsap.to(child.material,{\n // duration: GSAPAnimationMixer.duration,\n // ease: GSAPAnimationMixer.ease,\n // // transparent: true,\n // opacity: 0,\n // onStart: () => {\n // child.material.transparent = true;\n // child.material.needsUpdate = true;\n // },\n // // onUpdate: () => {\n // // child.material.needsUpdate = true;\n // // },\n // onComplete:()=>{\n // asyncEnv.visible = false;\n // }\n // });\n // }\n //\n // mixer.addAnimation(animation);\n // }\n // });\n // });\n // } else {\n // asyncEnv.traverse(element => {\n // if (element.isMesh) {\n // const animation = gsap.to(element.material, {\n // duration: GSAPAnimationMixer.duration,\n // ease: GSAPAnimationMixer.ease,\n // // transparent: true,\n // opacity: 0,\n // onStart:()=>{\n // element.material.transparent = true;\n // element.material.needsUpdate = true;\n // },\n // onComplete: () => {\n // asyncEnv.visible = false;\n // }\n // });\n //\n // mixer.addAnimation(animation);\n // }\n // });\n // }\n }\n}\n\nexport function environmentShow () {\n\n const isEnv = threeJsVariables.scene.getObjectByName('async env');\n if (isEnv) {\n isEnv.visible = true;\n\n // threeJsVariables.tilesRenderer.forEachLoadedModel((scene,tile)=>{\n // scene.traverse(child =>{\n // if (child.isMesh){\n // const envPromise = new Promise(resolve => {\n // gsap.to(child.material,{\n // duration: 1,\n // opacity: 1,\n // onStart:()=>{\n // scene.visible = true;\n // },\n // onComplete:()=>{\n // child.material.transparent = false;\n // resolve(true);\n // }\n // });\n // });\n //\n // // settingsData.animationsList.push(envPromise);\n // }\n // });\n // });\n\n }\n}\n\nexport function environmentShowV2 () {\n // const animations = [];\n\n const isEnv = threeJsVariables.scene.getObjectByName('async env');\n if (isEnv) {\n isEnv.visible = true;\n // if (showWithoutAnimation) return;\n //\n // const mixer = GSAPAnimationMixer.getMixer('exitToOrbit');\n //\n // if (threeJsVariables.tilesRenderer){\n // threeJsVariables.tilesRenderer.forEachLoadedModel((scene,tile)=>{\n // scene.traverse(child =>{\n // if (child.isMesh){\n // // const envPromise = new Promise(resolve => {\n // const defaultSettings = child.material.userData.defaultSettings;\n // let animation;\n //\n // if (child.material.isShaderMaterial) {\n // const animation = gsap.to(child.material.uniforms.uOpacity,{\n // duration: GSAPAnimationMixer.duration,\n // ease: GSAPAnimationMixer.ease,\n // // transparent: true,\n // value: defaultSettings ? defaultSettings.opacity : 1,\n // onStart:()=>{\n // child.material.transparent = true;\n // scene.visible = true;\n // },\n // onComplete:()=>{\n // if (defaultSettings) {\n // child.material.transparent = defaultSettings.transparent;\n // } else {\n // child.material.transparent = false;\n // }\n // }\n // });\n //\n // } else {\n // animation = gsap.to(child.material,{\n // duration: GSAPAnimationMixer.duration,\n // ease: GSAPAnimationMixer.ease,\n // // transparent: true,\n // opacity: defaultSettings ? defaultSettings.opacity : 1,\n // onStart:()=>{\n // child.material.transparent = true;\n // scene.visible = true;\n // },\n // onComplete:()=>{\n // if (defaultSettings) {\n // child.material.transparent = defaultSettings.transparent;\n // } else {\n // child.material.transparent = false;\n // }\n // }\n // });\n // }\n // mixer.addAnimation(animation);\n // // });\n //\n // // animations.push(envPromise);\n // }\n // });\n // });\n // }else{\n // isEnv.traverse(child =>{\n // if (child.isMesh){\n // // const envPromise = new Promise(resolve => {\n // const animation = gsap.to(child.material,{\n // duration: GSAPAnimationMixer.duration,\n // ease: GSAPAnimationMixer.ease,\n // transparent: true,\n // opacity: 1,\n // onStart:()=>{\n // child.visible = true\n // },\n // onComplete:()=>{\n // child.material.transparent = false\n // }\n // });\n // mixer.addAnimation(animation);\n // // })\n //\n // // animations.push(envPromise)\n // }\n // });\n // }\n\n }\n\n // return Promise.all(animations);\n}\n\n\nexport function disposeTiles () {\n if (threeJsVariables.tilesRenderer && (isMobile || isTablet) && isIOS) {\n threeJsVariables.tilesRenderer.dispose();\n }\n}\n","'use strict';\n\nimport {assignDeep, isDesktop, threeJsVariables} from '../../settings';\nimport { OrbitDayAndNight } from '../liveAnimations/DayNight/OrbitDayAndNight';\nimport { Color, DirectionalLight, LinearSRGBColorSpace } from 'three';\nimport { AmbientLight } from 'three';\nimport { Group } from 'three';\nimport { bundleVersionEquals } from './autoProjectScript';\n\nconst DIRECTIONAL_LIGHT_DEFAULT_SETTINGS = {\n color: \"#ffffff\",\n intensity: 1,\n castShadow: true,\n position: {\n x: 100,\n y: 100,\n z: 0\n },\n shadow: {\n mapSize: {\n x: 1024,\n y: 1024\n },\n normalBias: 0,\n camera: {\n near: 0.5,\n far: 2000,\n size: 150\n }\n }\n};\nconst AMBIENT_LIGHT_DEFAULT_SETTINGS = {\n color: \"#ffffff\",\n intensity: 0\n};\n\nconst radToDeg = r=>r*(180/Math.PI)\nconst degToRad = d=>d*(Math.PI/180)\n\nexport function addLights () {\n const directionalLightSettings = assignDeep(DIRECTIONAL_LIGHT_DEFAULT_SETTINGS,config.threejs.lights.directionalLight);\n const ambientLightSettings = assignDeep(AMBIENT_LIGHT_DEFAULT_SETTINGS,config.threejs.lights.ambientLight);\n const directionalLight = createDirectionalLight(directionalLightSettings);\n directionalLight.intensity *= Math.PI;\n const ambientLight = createAmbientLight(ambientLightSettings);\n ambientLight.intensity *= Math.PI;\n\n const lightGroup = new Group();\n lightGroup.name = 'light_group';\n lightGroup.add(ambientLight,directionalLight);\n \n if (config.threejs.lights.secondDirectionalLight && config.threejs.lights.secondDirectionalLight.coefficient !== 0) {\n const secondDirectionalLight = createSecondDirectionalLight(directionalLight);\n lightGroup.add(secondDirectionalLight);\n }\n\n threeJsVariables.scene.add(lightGroup);\n}\n\nfunction createDirectionalLight (settings = DIRECTIONAL_LIGHT_DEFAULT_SETTINGS) {\n const light = new DirectionalLight(new Color().setStyle(settings.color,LinearSRGBColorSpace),settings.intensity);\n light.name = \"Dir. Light\";\n light.castShadow = settings.castShadow;\n light.position.set(settings.position.x,settings.position.y,settings.position.z);\n light.shadow.normalBias = settings.shadow.normalBias;\n light.shadow.mapSize.width = settings.shadow.mapSize.x;\n light.shadow.mapSize.height = settings.shadow.mapSize.y;\n light.shadow.camera.near = settings.shadow.camera.near;\n light.shadow.camera.far = settings.shadow.camera.far;\n light.shadow.camera.right = settings.shadow.camera.size;\n light.shadow.camera.left = - settings.shadow.camera.size;\n light.shadow.camera.top\t= settings.shadow.camera.size;\n light.shadow.camera.bottom = - settings.shadow.camera.size;\n light.layers.enable(1);\n\n if (OrbitDayAndNight.isActiveAndSelected) {\n light.castShadow = config.features.dayNight.settings.shadows;\n if (isDesktop) {\n light.shadow.mapSize.width = 2048;\n light.shadow.mapSize.height = 2048;\n light.shadow.camera.right = 2000;\n light.shadow.camera.left = - 2000;\n light.shadow.camera.top\t= 2000;\n light.shadow.camera.bottom = - 2000;\n light.shadow.camera.far = 4000;\n }\n }\n light.shadow.camera.updateProjectionMatrix();\n\n return light;\n}\n\nfunction createSecondDirectionalLight (source) {\n const light = new DirectionalLight().copy(source);\n light.name = 'Second directional light';\n light.castShadow = false;\n const settings = config.threejs.lights.secondDirectionalLight || {coefficient: 0};\n\n light.updateParams = () => {\n light.position.copy(source.position).negate();\n light.color.copy(source.color);\n light.intensity = source.intensity * settings.coefficient;\n };\n\n light.updateParams();\n\n return light;\n}\n\nfunction createAmbientLight (settings = AMBIENT_LIGHT_DEFAULT_SETTINGS) {\n const light = new AmbientLight(new Color().setStyle(settings.color,LinearSRGBColorSpace),settings.intensity);\n light.name = \"ambientLight\";\n light.layers.enable(1);\n\n return light;\n}\n\nexport function updateShadowMap () {\n if (OrbitDayAndNight.isActiveAndSelected) {\n threeJsVariables.renderer.shadowMap.needsUpdate = true;\n } else {\n //if (isMobile) return;\n\n threeJsVariables.renderer.shadowMap.needsUpdate = true;\n }\n}\n\nconst setSunAngles = (angleh,anglev)=>{\n\n if (angleh>(2*Math.PI)){\n angleh = angleh - 2*Math.PI\n }\n if (angleh<0){\n angleh = 2*Math.PI + angleh\n }\n let x1 = Math.cos(angleh)\n let y1 = 0\n let z1 = Math.sin(angleh)\n\n let x2 = x1*Math.cos(anglev)\n let y2 = Math.sin(anglev)\n let z2 = z1*Math.cos(anglev)\n\n // TODO distance\n const distance = 100\n\tlet d = Math.trunc(distance)\n\n let x = 0 + x2*d\n let y = 0 + y2*d\n let z = 0 + z2*d\n\n\tx = Math.trunc(x)\n\ty = Math.trunc(y)\n\tz = Math.trunc(z)\n\n let v = threeJsVariables.scene.getObjectByName('Dir. Light');\n\tv.position.set(x,y,z)\n v.target.position.set(0,0,0)\n\tv.target.updateMatrixWorld()\n}\n\nexport const bundleSetSun = (bundleConfig)=>{\n let angleh = degToRad(parseInt(bundleConfig.sun.angleh) || 0)\n\t let anglev = degToRad(parseInt(bundleConfig.sun.anglev) || 0)\n\n setSunAngles(angleh,anglev)\n\n let v = threeJsVariables.scene.getObjectByName('Dir. Light');\n const ambientLight = threeJsVariables.scene.getObjectByName('ambientLight');\n const secondDirectionalLight = threeJsVariables.scene.getObjectByName('Second directional light');\n v.color.setStyle('#'+bundleConfig.sun.dircolor,LinearSRGBColorSpace);\n v.intensity = parseFloat(bundleConfig.sun.dirintensity) * Math.PI;\n ambientLight.color.setStyle('#'+bundleConfig.sun.ambcolor,LinearSRGBColorSpace);\n ambientLight.intensity = parseFloat(bundleConfig.sun.ambintensity) * Math.PI;\n secondDirectionalLight?.updateParams();\n updateShadowMap();\n}\n\nexport function prepareLight (bundleConfig) {\n const settings = bundleConfig.lights;\n \n if (bundleVersionEquals(1)) {\n settings.directionalLight.intensity *= Math.PI;\n settings.ambientLight.intensity *= Math.PI;\n }\n \n const directionalLight = threeJsVariables.scene.getObjectByName('Dir. Light');\n const ambientLight = threeJsVariables.scene.getObjectByName('ambientLight');\n const secondDirectionalLight = threeJsVariables.scene.getObjectByName('Second directional light');\n\n const tempDirectional = createDirectionalLight(settings.directionalLight);\n const tempAmbient = createAmbientLight(settings.ambientLight);\n directionalLight.copy(tempDirectional);\n directionalLight.shadow.normalBias = tempDirectional.shadow.normalBias;\n ambientLight.copy(tempAmbient);\n tempDirectional.dispose();\n tempAmbient.dispose();\n secondDirectionalLight?.updateParams();\n updateShadowMap();\n}\n","'use strict';\n\n\nimport { Cache, Loader, RepeatWrapping, Texture } from 'three';\n\nlet plugTexture = null;\n\nexport class LazyTextureLoader extends Loader{\n constructor (manager) {\n super(manager);\n\n this.isLazyTextureLoader = true;\n }\n\n load( url, onLoad, onProgress, onError ) {\n\n if ( url === undefined ) url = '';\n if ( this.path !== undefined ) url = this.path + url;\n url = this.manager.resolveURL( url );\n\n const cached = Cache.get( url );\n if ( cached !== undefined ) {\n\n scope.manager.itemStart( url );\n setTimeout(() => {\n\n if ( onLoad ) onLoad( cached );\n\n this.manager.itemEnd( url );\n\n }, 0 );\n\n return cached;\n }\n\n const texture = new Texture();\n\n if (plugTexture === null) {\n const canvas = document.createElement('canvas');\n canvas.width = 4;\n canvas.height = 4;\n const context = canvas.getContext('2d');\n context.fillStyle = '#cccccc';\n context.fillRect(0,0,4,4);\n plugTexture = new Texture(canvas);\n plugTexture.wrapS = RepeatWrapping;\n plugTexture.wrapT = RepeatWrapping;\n plugTexture.generateMipmaps = false;\n }\n\n texture.image = plugTexture.image;\n texture.needsUpdate = true;\n\n const fetchOptions = {};\n fetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';\n fetchOptions.headers = this.requestHeader;\n\n fetch( url, fetchOptions )\n .then(res => res.blob())\n .then(blob => {\n const blobUrl = URL.createObjectURL(blob);\n const image = new Image();\n image.onload = () => {\n texture.dispose();\n texture.image = image;\n texture.needsUpdate = true;\n Cache.add( url, texture );\n if ( onLoad ) onLoad( texture );\n this.manager.itemEnd( url );\n };\n image.onerror = (e) => {\n if ( onError ) onError( e );\n this.manager.itemError( url );\n this.manager.itemEnd( url );\n };\n image.src = blobUrl;\n })\n .catch(e => {\n\n if ( onError ) onError( e );\n\n this.manager.itemError( url );\n this.manager.itemEnd( url );\n\n } );\n\n this.manager.itemStart( url );\n\n return texture;\n }\n\n}","'use strict';\n\nimport {\n FileLoader, ImageBitmapLoader,\n LoadingManager, ObjectLoader,\n TextureLoader,\n} from 'three';\nimport { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader';\nimport { KTX2Loader } from 'three/examples/jsm/loaders/KTX2Loader';\nimport { threeJsVariables } from '../../../settings';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';\nimport { MeshoptDecoder } from 'three/examples/jsm/libs/meshopt_decoder.module';\nimport { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader';\nimport { LUTCubeLoader } from 'three/examples/jsm/loaders/LUTCubeLoader';\nimport { LazyTextureLoader } from './LazyTextureLoader';\n\nexport class Loader extends LoadingManager {\n static scopes = [];\n constructor () {\n super();\n this.totalPercent = 0;\n this.callbacks = [];\n this.onProgress = (url,itemsLoaded,itemsTotal) => {\n this.totalPercent = (itemsLoaded / itemsTotal * 100);\n };\n Loader.scopes.push(this);\n }\n\n set addCallback(f) {\n this.callbacks.push(f);\n this.onLoad = () => {\n this.callbacks.forEach(func => func());\n }\n }\n\n get textureLoader() {\n return new TextureLoader(this);\n }\n\n get lazyTextureLoader() {\n return new LazyTextureLoader(this);\n }\n\n get imageBitmapLoader() {\n const loader = new ImageBitmapLoader(this);\n loader.setOptions( { imageOrientation: 'flipY' } );\n return loader;\n }\n\n get fileLoader() {\n return new FileLoader(this);\n }\n\n get fbxLoader() {\n return new FBXLoader(this);\n }\n \n get objectLoader() {\n return new ObjectLoader(this);\n }\n\n get luteLoader() {\n this.totalPercent = 100;\n return new LUTCubeLoader();\n }\n\n get dracoLoader() {\n const dracoLoader = new DRACOLoader()\n .setDecoderPath('js/libs/gltf/');\n\n const ktx2Loader = new KTX2Loader()\n .setTranscoderPath( 'js/libs/basis/' )\n .detectSupport(threeJsVariables.renderer);\n\n return new GLTFLoader(this)\n .setDRACOLoader(dracoLoader)\n .setKTX2Loader(ktx2Loader)\n .setMeshoptDecoder( MeshoptDecoder );\n }\n\n get progress() {\n return this.totalPercent;\n }\n\n static totalProgress() {\n if (Loader.scopes.length === 0) return 0;\n return Loader.scopes.reduce((acc,scope) => acc += scope.progress,0) / Loader.scopes.length;\n }\n}\n","'use strict';\n\nimport {\n AVAILABLE_STATUS,\n Buildings,\n cardsData, components, isDesktop,\n isMobile, isTablet,\n projectMode,\n settingsData,\n threeJsVariables,\n} from '../../settings';\nimport {hideTooltip, showTooltip, updateTooltipPosition, updateTooltipText} from \"../components/flatTooltip/flatTooltip\";\nimport {SelectedObjectType, ViewMode} from \"../../common\";\nimport {cylinderFloorNumbersIntersection} from \"../components/cylinderFloorNumbers/cylinderFloorNumbers\";\nimport {\n findSelectionAndCrmData,\n flatClick,\n rgbaToHexA,\n userPrevent,\n} from '../../functions';\nimport {UnitCardClass} from \"../cards/unitCards/UnitCardClass\";\nimport { updateHoverPosition } from '../components/building-switch/buildingHover';\nimport { doubleEventCheck } from '../controls/mouse-n-touches';\nimport { Amenities } from '../components/Amenities/Amenities';\nimport { PublicLayers } from '../components/publicLayers/PublicLayers';\nimport {toggleMenuWidth} from \"../menu/menu\";\nimport { Environment } from '../components/Environment/Environment';\nimport {compassClickHandler} from \"../components/compass/compass\";\nimport { LinearSRGBColorSpace, Quaternion } from 'three';\nimport {BmbyMode} from \"../mode/BmbyMode\";\n\nlet {hoveredObject} = settingsData;\n\nexport function checkIntersection(action) {\n let canvas = document.getElementById('c');\n const flatTooltip = document.querySelector('.flat-tooltip');\n if (flatTooltip && getComputedStyle(flatTooltip).display !== 'none')\n showTooltip();\n\n if (isTablet) {\n const isHomeMenuButtonActive =\n Boolean(document.querySelector(\n '.aside__navigation-menu__item.aside__active-menu[data-menu-item=\"3dModel\"]'\n ));\n if (!isHomeMenuButtonActive)\n toggleMenuWidth({action: 'mini', source: 'eventListener'});\n }\n\n if (\n (!threeJsVariables.orbitControls.enabled &&\n !projectMode.LiteMode.isVisible()) || !canvas || settingsData.intersectionBlock) {\n hideTooltip();\n return;\n }\n\n let intersects = [];\n intersects = threeJsVariables.raycaster.intersectObjects(settingsData.objects_to_intersection, false);\n if (intersects.length === 0 || intersects[0].object.name.split('_')[0] === 'zero')\n hideTooltip();\n if (intersects.length > 0) {\n if (!isMobile && !settingsData.customCursor)\n canvas.style.cursor = 'pointer';\n if (settingsData.selectedObject !== intersects[0].object) {\n settingsData.selectedObject = intersects[0].object;\n intersectionMouseOverHandler(settingsData.selectedObject);\n } else if (action === 'click') {\n doubleEventCheck(intersects[0].object);\n if (settingsData.activeViewMode === ViewMode.Orbit) {\n switch (settingsData.selectedObject.userData?.type) {\n case SelectedObjectType.Building:\n projectMode.Cylinder.enter(settingsData.selectedObject);\n break;\n }\n } else {\n intersectionClickHandler(settingsData.selectedObject);\n if (settingsData.selectedObject.userData.type === \"selectionBoxes\") {\n settingsData.isFlat = true;\n if (isMobile)\n components.mobileSearch.unfold();\n }\n }\n } else if (action === 'pointerdown') {\n if (settingsData.activeViewMode === ViewMode.Orbit) {\n switch (settingsData.selectedObject.userData?.type) {\n case SelectedObjectType.Cloth:\n threeJsVariables.orbitControls.enableRotate = true;\n threeJsVariables.cloth.removeCloth();\n threeJsVariables.cloth.hovered = false;\n break;\n }\n }\n } else if (action === 'drag') {}\n } else {\n if (!isMobile && !settingsData.customCursor)\n canvas.style.cursor = 'default';\n if (settingsData.selectedObject) {\n switch (settingsData.selectedObject.userData?.type) {\n case SelectedObjectType.Building:\n buildingHoverOut();\n break;\n case SelectedObjectType.SelectionBoxes:\n selectionBoxesSetStatusColor(settingsData.selectedObject, 'hoverOut');\n break;\n case SelectedObjectType.Route:\n PublicLayers.intersect();\n Environment.intersect();\n break;\n case SelectedObjectType.Cloth:\n clothHoverOut();\n break;\n }\n settingsData.selectedObject = null;\n settingsData.isFlat = false;\n }\n\n if (isMobile && components?.mobileSearch)\n components.mobileSearch.fold();\n }\n cylinderFloorNumbersIntersection(action);\n}\n\nfunction buildingHover(pickedObject) {\n if (pickedObject === undefined) {\n buildingHoverOut();\n return;\n }\n buildingHoverOut();\n if (settingsData.activeViewMode === ViewMode.Orbit) {\n const {isActive, effectFXAA} = settingsData.postProcessing;\n let pickedBuilding;\n let pickedBuildingName;\n let buildingInfo;\n\n if (projectMode.LiteMode.isActive() && projectMode.LiteMode.isVisible()) {\n pickedBuilding = pickedObject.name.split('_')[0];\n pickedBuildingName = pickedBuilding;\n buildingInfo = Buildings.getBuilding(pickedBuilding);\n if (buildingInfo) {\n buildingInfo.mouseHover = true;\n pickedObject.material.color.setHex(0xffffff,LinearSRGBColorSpace);\n pickedObject.material.opacity = 0.2;\n } else if (projectMode.LiteMode.isActive() && projectMode.LiteMode.modeIs('picture')) {\n pickedObject.material.color.setHex(0xffffff,LinearSRGBColorSpace);\n pickedObject.material.opacity = 0.2;\n }\n\n } else {\n pickedBuilding = pickedObject.parent;\n pickedBuildingName = pickedBuilding.name;\n buildingInfo = Buildings.getBuilding(pickedBuilding.name);\n }\n \n if (config.features.privateHouseMode && !isMobile) {\n const buildingLabel = document.querySelector('.building-labels_wrapper[data-name=\"privateHouse\"]');\n if (buildingLabel) {\n buildingLabel.classList.add('building__hovered');\n }\n \n buildingInfo.mouseHover = true;\n \n } else if (config.threejs.label.oneLabel && !isMobile) {\n const buildingLabel = document.querySelector('.building-labels_wrapper[data-name=\"oneLabel\"]');\n if (buildingLabel) {\n buildingLabel.classList.add('building__hovered');\n }\n \n buildingInfo.mouseHover = true;\n \n } else if (buildingInfo && Object.keys(buildingInfo.info).length) {\n const buildingLabel = document.querySelector('.building-labels_wrapper[data-name=\"'+pickedBuildingName+'\"]');\n if (buildingLabel && !isMobile) {\n buildingLabel.classList.add('building__hovered');\n const labelOnScene = threeJsVariables.scene.getObjectByName(buildingLabel.getAttribute('data-label'));\n settingsData.customCursor = true;\n updateHoverPosition(pickedBuilding,labelOnScene.position.y / 2,'show');\n \n // if (isActive && effectFXAA)\n // threeJsVariables.outlinePass.selectedObject = pickedObject;\n }\n \n\n buildingInfo.mouseHover = true;\n }\n }\n}\n\nexport function buildingHoverOut() {\n if (projectMode.LiteMode.isActive() && projectMode.LiteMode.isVisible() && projectMode.LiteMode.modeIs('picture') && settingsData.selectedObject)\n settingsData.selectedObject.material.opacity = 0;\n\n const {isActive, effectFXAA} = settingsData.postProcessing;\n const buildingHover = Buildings.getBuildingsArray().find(building => building.mouseHover);\n if (buildingHover) {\n const buildingLabel = document.querySelector('.building-labels_wrapper.building__hovered');\n settingsData.customCursor = false;\n updateHoverPosition(null,null,'hide');\n\n if (isActive && effectFXAA)\n threeJsVariables.outlinePass.selectedObject = null;\n\n if (buildingLabel)\n buildingLabel.classList.remove('building__hovered');\n\n if (projectMode.LiteMode.isActive() && projectMode.LiteMode.isVisible()) {\n const hovered = settingsData.objects_to_intersection.find(el => el.name.startsWith(buildingHover.name));\n if (hovered)\n hovered.material.opacity = 0;\n }\n buildingHover.mouseHover = false;\n }\n}\n\nfunction clothHover(selectedObject) {\n threeJsVariables.orbitControls.enableRotate = false;\n threeJsVariables.cloth.hovered = true;\n //hoveredObject = selectedObject;\n}\n\nfunction clothHoverOut() {\n threeJsVariables.orbitControls.enableRotate = true;\n threeJsVariables.cloth.hovered = false;\n}\n\nexport async function intersectionClickHandler(selectedObject) {\n if (settingsData.buildingDestroyed\n && selectedObject.userData?.customSelection\n && selectedObject.userData?.type !== SelectedObjectType.Plug\n && !config.features?.keyplanAmenities)\n return;\n\n // if (isMobile && settingsData.activeViewMode === ViewMode.FloorPlan)\n // return;\n if (selectedObject.userData?.type === SelectedObjectType.Plug && settingsData.buildingDestroyed) {\n projectMode.FloorPlan.floorAmenities.show(selectedObject);\n return;\n } else if (selectedObject.userData?.type === SelectedObjectType.Arrow) {\n compassClickHandler(selectedObject);\n return;\n } else if (selectedObject.userData?.type !== SelectedObjectType.SelectionBoxes && !selectedObject.userData.customSelection) {\n return;\n } else if (isMobile && selectedObject.userData?.type !== SelectedObjectType.Arrow && (selectedObject.userData.crm_data.status !== AVAILABLE_STATUS || !selectedObject.userData.isInSearch)) {\n return\n }\n\n Amenities.unselectAmenities();\n hoverOutPreviousSelection(UnitCardClass.findCard()?.html, selectedObject);\n\n if (settingsData.buildingDestroyed)\n selectionBoxesSetStatusColor(selectedObject, 'lock');\n\n if (selectedObject?.userData?.crm_data?.engineId !== '')\n selectionBoxesSetStatusColor(selectedObject, 'click');\n\n await flatClick(selectedObject);\n}\n\nfunction intersectionMouseOverHandler(selectedObject) {\n if (!selectedObject.userData?.isClicked) {\n switch (selectedObject.userData?.type) {\n case SelectedObjectType.Building:\n buildingHover(selectedObject);\n PublicLayers.intersect();\n Environment.intersect();\n break;\n case SelectedObjectType.SelectionBoxes: {\n if (hoveredObject !== null)\n selectionBoxesSetStatusColor(hoveredObject, 'hoverOut');\n\n selectionBoxesSetStatusColor(selectedObject, 'hover');\n break;\n }\n case SelectedObjectType.Route: {\n PublicLayers.intersect(selectedObject);\n Environment.intersect(selectedObject);\n break;\n }\n case SelectedObjectType.Cloth: {\n clothHover(selectedObject);\n break;\n }\n }\n if (selectedObject.userData?.type !== SelectedObjectType.Cloth && threeJsVariables.cloth.hovered)\n clothHoverOut(selectedObject);\n } else {\n if (hoveredObject)\n selectionBoxesSetStatusColor(hoveredObject, 'hoverOut');\n\n hideTooltip();\n }\n}\n\nexport function selectionBoxesSetStatusColor(selectedObject, action, tooltipFlag, customColor,switchBuildings = false) {\n if (!selectedObject || selectedObject.name.startsWith(config.resources.bundle.selectionBoxes.floorPlugName))\n return;\n\n let activeBuilding;\n (projectMode.LiteMode.isActive() && projectMode.LiteMode.modeIs('picture')) || config.features.privateHouseMode ?\n activeBuilding = Buildings.getBuilding(selectedObject.userData?.crm_data?.buildingEngineId):\n activeBuilding = Buildings.getActiveBuilding();\n\n if (!activeBuilding)\n return;\n\n const crmDataObject = activeBuilding.info.crm_data.find(apt => selectedObject.name === apt.engineId);\n const objectStatus = (crmDataObject) ? crmDataObject.status.toLowerCase() : 'available';\n const colorStatus = config.resources.bundle.selectionBoxes.colorStatus;\n const color = colorStatus.find(c => c.status === objectStatus);\n const opacity = color.opacity;\n\n switch (action) {\n case 'hover': {\n if (isMobile || isDesktop)\n return;\n\n if (selectedObject.userData.customSelection) {\n const customColor = rgbaToHexA(config.style.colors.find(color => color.key === 'brand2').value.split(','),false).substring(1);\n\n selectedObject.material.color.setHex(`0x${customColor}`,LinearSRGBColorSpace);\n selectedObject.material.opacity = opacity.hover;\n hoveredObject = selectedObject;\n } else {\n selectedObject.material.color.setHex(`0x${color.hover}`,LinearSRGBColorSpace);\n selectedObject.material.opacity = opacity.hover;\n\n // show OutlineEdge depends on the opacity intensity\n if (config.resources.bundle.selectionBoxes.edges.active) {\n const outline = selectedObject.children.find(child => child.name === \"Outline\");\n if (outline)\n outline.visible = Boolean(selectedObject.material.opacity);\n }\n \n if (projectMode.LiteMode.isActive() && projectMode.LiteMode.modeIs('schematic')) {\n const aptNum = selectedObject.children.find(child => child.name === \"AptNum\");\n if (aptNum)\n aptNum.visible = Boolean(selectedObject.material.opacity);\n }\n\n hoveredObject = selectedObject;\n }\n\n if (!settingsData.buildingDestroyed || (config.features?.keyplanAmenities && settingsData.selectedObject.userData?.customSelection)) {\n updateTooltipText(selectedObject, crmDataObject);\n settingsData.lastHoverObject = updateTooltipPosition(hoveredObject);\n }\n break;\n }\n case 'hoverOut': {\n if (selectedObject.userData.isClicked)\n return;\n\n if (!selectedObject.userData.isClicked) {\n selectedObject.material.color.setHex(`0x${color.basic}`,LinearSRGBColorSpace);\n selectedObject.material.opacity = (selectedObject.userData?.isActive) ? opacity.basic : 0;\n }\n\n if (!selectedObject.userData.isClicked) {\n selectedObject.material.color.setHex(`0x${color.basic}`,LinearSRGBColorSpace);\n selectedObject.material.opacity = opacity.basic;\n }\n\n if ((!selectedObject.userData.isInSearch && settingsData.activeViewMode !== 'floorplan' && !color.isActive) || switchBuildings || selectedObject.userData.crm_data.buildingEngineId !== activeBuilding.name) {\n selectedObject.material.opacity = 0;\n\n // hide OutlineEdge depends on the opacity intensity\n // if (config.resources.bundle.selectionBoxes.edges.active) {\n // const outline = selectedObject.children.find(child => child.name === \"Outline\");\n // if (outline)\n // outline.visible = Boolean(selectedObject.material.opacity);\n // }\n }\n\n if (settingsData.activeViewMode === 'floorplan' && !selectedObject.userData.isInSearch && objectStatus === 'available')\n selectedObject.material.opacity = 0;\n \n if (settingsData.activeViewMode === 'floorplan' && selectedObject.userData.floor === settingsData.currentFloor) {\n if (selectedObject.userData.isClicked) {\n selectedObject.material.color.setHex(`0x${color.active}`,LinearSRGBColorSpace);\n selectedObject.material.opacity = opacity.hover;\n } else {\n selectedObject.material.color.setHex(`0x${color.basic}`,LinearSRGBColorSpace);\n selectedObject.material.opacity = projectMode.LiteMode.modeIs('schematic') ? opacity.basic : 0.3;\n }\n }\n\n if (selectedObject.name.match(/_amenity_/g)) {\n const customColor = rgbaToHexA(config.style.colors.find(color => color.key === 'brand2').value.split(','),false).substring(1);\n selectedObject.material.color.setHex(`0x${customColor}`,LinearSRGBColorSpace);\n selectedObject.material.opacity = 0.0;\n }\n \n if (config.resources.bundle.selectionBoxes.edges.active) {\n const outline = selectedObject.children.find(child => child.name === \"Outline\");\n if (outline)\n outline.visible = Boolean(selectedObject.material.opacity);\n }\n \n if (projectMode.LiteMode.isActive() && projectMode.LiteMode.modeIs('schematic')) {\n const aptNum = selectedObject.children.find(child => child.name === \"AptNum\");\n if (aptNum)\n aptNum.visible = Boolean(selectedObject.material.opacity);\n }\n\n if (isMobile || tooltipFlag)\n return;\n\n hideTooltip();\n break;\n }\n case 'amenityHover':{\n selectedObject.material.color.setHex(`0x${customColor}`,LinearSRGBColorSpace);\n selectedObject.material.opacity = opacity.hover;\n\n break;\n }\n case 'click': {\n if (userPrevent())\n return;\n\n if (selectedObject.userData.customSelection){\n const customColor = rgbaToHexA(config.style.colors.find(color => color.key === 'brand2').value.split(','),false).substring(1);\n selectedObject.material.color.setHex(`0x${customColor}`,LinearSRGBColorSpace);\n } else {\n selectedObject.material.color.setHex(`0x${color.active}`,LinearSRGBColorSpace);\n }\n\n selectedObject.userData.isClicked = true;\n selectedObject.material.opacity = opacity.hover;\n \n if (config.features.privateHouseMode && selectedObject.userData.crm_data?.status.toLowerCase() !== 'available' && !color.isActive) {\n selectedObject.material.opacity = 0;\n }\n \n settingsData.lastClickedFlat = selectedObject;\n return;\n }\n case 'lock': {\n selectedObject.userData.isActive = true;\n if (!selectedObject.userData.isClicked || !selectedObject.userData.isInSearch) {\n selectedObject.material.opacity = opacity.basic;\n selectedObject.material.color.setHex(`0x${color.basic}`,LinearSRGBColorSpace);\n }\n\n if (settingsData.activeViewMode === 'floorplan') {\n selectedObject.material.opacity = projectMode.LiteMode.modeIs('schematic') ? opacity.basic : 0.3;\n if (selectedObject.userData.isClicked) {\n selectedObject.material.opacity = opacity.hover;\n }\n }\n \n if (settingsData.activeViewMode === 'floorplan' && selectedObject.userData.floor === settingsData.currentFloor) {\n if (selectedObject.userData.isClicked) {\n selectedObject.material.color.setHex(`0x${color.active}`,LinearSRGBColorSpace);\n selectedObject.material.opacity = opacity.hover;\n } else {\n selectedObject.material.color.setHex(`0x${color.basic}`,LinearSRGBColorSpace);\n selectedObject.material.opacity = projectMode.LiteMode.modeIs('schematic') ? opacity.basic : 0.3;\n }\n }\n \n if (selectedObject.name.match(/_amenity_/g)) {\n selectedObject.material.opacity = 0.0;\n }\n\n\n // if (config.resources.bundle.selectionBoxes.edges.active && !projectMode.LiteMode.modeIs('schematic') && selectedObject.visible && selectedObject.material.opacity > 0) {\n // const outline = selectedObject.getObjectByName('Outline');\n // if (outline) {\n // outline.visible = true;\n // }\n // }\n\n if (config.resources.bundle.selectionBoxes.edges.active) {\n const outline = selectedObject.getObjectByName('Outline');\n if (outline) {\n outline.visible = selectedObject.material.opacity !== 0;\n }\n }\n \n if (projectMode.LiteMode.isActive() && projectMode.LiteMode.modeIs('schematic')) {\n const aptNum = selectedObject.children.find(child => child.name === \"AptNum\");\n if (aptNum)\n aptNum.visible = Boolean(selectedObject.material.opacity);\n }\n\n break;\n }\n case 'unlock': {\n if (!selectedObject.userData.isInSearch) {\n selectedObject.userData.isActive = false;\n selectedObject.material.color.setHex(`0x${color.basic}`,LinearSRGBColorSpace);\n selectedObject.material.opacity = color.isActive && !switchBuildings ? opacity.basic : 0;\n }\n\n // if (settingsData.activeViewMode === 'floorplan' && selectedObject.userData.floor === settingsData.currentFloor) {\n // selectedObject.material.opacity = 0.3;\n // }\n \n if (settingsData.activeViewMode === 'floorplan' && selectedObject.userData.floor === settingsData.currentFloor) {\n if (selectedObject.userData.isClicked) {\n selectedObject.material.color.setHex(`0x${color.active}`,LinearSRGBColorSpace);\n selectedObject.material.opacity = opacity.hover;\n } else {\n selectedObject.material.color.setHex(`0x${color.basic}`,LinearSRGBColorSpace);\n selectedObject.material.opacity = projectMode.LiteMode.modeIs('schematic') ? opacity.basic : 0.3;\n }\n }\n \n if (selectedObject.name.match(/_amenity_/g)) {\n const customColor = rgbaToHexA(config.style.colors.find(color => color.key === 'brand2').value.split(','),false).substring(1);\n selectedObject.material.color.setHex(`0x${customColor}`,LinearSRGBColorSpace);\n selectedObject.material.opacity = 0;\n }\n\n if (config.resources.bundle.selectionBoxes.edges.active) {\n const outline = selectedObject.getObjectByName('Outline');\n if (outline) {\n outline.visible = selectedObject.material.opacity !== 0;\n }\n }\n \n if (projectMode.LiteMode.isActive() && projectMode.LiteMode.modeIs('schematic')) {\n const aptNum = selectedObject.children.find(child => child.name === \"AptNum\");\n if (aptNum)\n aptNum.visible = Boolean(selectedObject.material.opacity);\n }\n\n break;\n }\n default: {\n break;\n }\n }\n}\n\nexport const hoverOutPreviousSelection = (unitCard, currentClickedObject) => {\n if (!isMobile && !unitCard)\n return;\n\n let activeCard;\n if (settingsData.lastClickedFlat) {\n if (isMobile && settingsData.lastClickedFlat.name !== currentClickedObject?.name) {\n projectMode.Cylinder.cylinderBuildingLabels.markLabel(settingsData.lastClickedFlat.userData.crm_data.buildingEngineId, 'close');\n const {selectedMesh} = findSelectionAndCrmData(settingsData.lastClickedFlat.name);\n if (selectedMesh) {\n selectedMesh.userData.isClicked = false;\n selectionBoxesSetStatusColor(selectedMesh, 'hoverOut');\n }\n } else {\n cardsData.multiplyCards ?\n activeCard = UnitCardClass.cards.length > 1 && UnitCardClass.findCard(false, 'active').html.getAttribute('data-engineid'):\n activeCard = unitCard?.getAttribute('data-engineid');\n\n if (activeCard) {\n const {selectedMesh} = findSelectionAndCrmData(activeCard);\n selectedMesh.userData.isClicked = false;\n selectionBoxesSetStatusColor(selectedMesh, 'hoverOut');\n }\n }\n }\n}\n","'use strict';\n\nimport {\n Buildings,\n GSAPAnimationMixer,\n isMobile,\n projectMode,\n resourcesFolder, settingsData,\n threeJsVariables,\n} from '../../settings';\nimport {\n BufferGeometry,\n FrontSide,\n ShaderMaterial,\n Color,\n Group,\n BufferAttribute,\n Mesh,\n MeshStandardMaterial,\n Vector2,\n RepeatWrapping,\n Vector3,\n Shape,\n ShapeGeometry,\n Float32BufferAttribute,\n CatmullRomCurve3,\n PointsMaterial,\n Points,\n LinearSRGBColorSpace,\n CubeTextureLoader,\n TextureLoader,\n Box3,\n Sphere\n} from 'three';\nimport { PlanarUV } from '../../libs/PlanarUV';\nimport { OrbitDayAndNight } from '../liveAnimations/DayNight/OrbitDayAndNight';\nimport { latLngAltToVector3 } from '../components/publicLayers/Layer';\nimport { Cloudflare } from '../api/Cloudflare';\nimport { OutlineEdges } from '../../libs/outlineEdges/OutlineEdges';\nimport { BaseElement } from '../interfaces/BaseElement';\nimport { Switch } from '../interfaces/switchers/Switch';\nimport { changeLangToCurrent } from '../components/langSwitcher/langSwitcher';\nimport { Terrain } from '../components/Terrain/Terrain';\nimport { DisplayOptions } from '../components/displayOptions/DisplayOptions';\nimport { Weather } from '../components/weather/Weather';\nimport { ColorCorrection } from './colorCorrection';\nimport { Loader } from './loader/Loader';\nimport { LUT } from '../post-processing/Passes/LUT';\nimport backgroundVertex from '../threejs/Shaders/background/vertex.glsl';\nimport backgroundFragment from '../threejs/Shaders/background/fragment.glsl';\nimport { OrbitSea } from '../liveAnimations/DayNight/sea/OrbitSea';\nimport { isCylinderDisplayModeEqual, userPrevent } from '../../functions';\nimport { GroundProjectedSkybox2 } from './GroundProjectedSkybox2';\nimport { DreamsPreloader } from '../components/preloader/DreamsPreloader';\nimport gsap from 'gsap';\nimport { UpdateTask } from '../gui/LoaderTask';\nimport { Environment } from '../components/Environment/Environment';\nimport {ViewMode} from \"../../common\";\nimport { BmbyMode } from '../mode/BmbyMode';\nimport { PublicLayers } from '../components/publicLayers/PublicLayers';\n// import * as dat from 'dat.gui';\n\n\nconst _sphereBox = new Box3();\nconst _sphereClamped = new Vector3();\nconst _sphere = new Sphere();\nconst _cameraTarget = new Vector3();\n\nconst backgroundShader = new ShaderMaterial({\n uniforms: {\n map1 : { value: null },\n map2 : { value: null },\n t : { value: 0.0 },\n fogColor : { value: new Color() },\n fogDensity : { value: 0.0 },\n vantage : { value: false },\n uLod : { value: 0.0 },\n lutSize: { value: 0.0},\n lutIntensity: { value: 0.0},\n lut3d: { value: null },\n lut: { value: null },\n cloudsActive: {value: 0.0},\n clouds: {value: new Color().setStyle('#ffffff',LinearSRGBColorSpace)},\n cloudsScale: {value: 2.7},\n cloudsDark: {value: 0.0},\n cloudsLight: {value: 0.16},\n cloudsCover: {value: 0.5},\n cloudsAlpha: {value: 4.0},\n cloudsTint: {value: 0.91},\n horizon: {value: 0.0},\n uSpeed: {value: 0.0},\n uTime: {value: 0.0}\n },\n defines: {\n USE_3DTEXTURE: 1\n },\n vertexShader: backgroundVertex,\n fragmentShader: backgroundFragment,\n side : FrontSide,\n depthTest : true,\n depthWrite : false,\n transparent : true,\n});\n\nconst v_normalize = (a) => {\n const d = Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]);\n a[0] = a[0]/d;\n a[1] = a[1]/d;\n a[2] = a[2]/d;\n};\n\nexport const generateRegion = (vx,vy,vz) => {\n let w = 500;\n let hw = w/2;\n let a1 = [0,0,0];\n let a2 = [0,0,0];\n let a3 = [0,0,0];\n let a4 = [0,0,0];\n let v1 = [1,0,0];\n let v2 = [0,0,1];\n let v3 = [0,1,0];\n let b1 = [0,0,0];\n let b2 = [0,0,0];\n let b3 = [0,0,0];\n let b4 = [0,0,0];\n a1[0] = vz[0]*hw - vx[0]*hw + vy[0]*hw;\n a1[1] = vz[1]*hw - vx[1]*hw + vy[1]*hw;\n a1[2] = vz[2]*hw - vx[2]*hw + vy[2]*hw;\n a2[0] = vz[0]*hw + vx[0]*hw + vy[0]*hw;\n a2[1] = vz[1]*hw + vx[1]*hw + vy[1]*hw;\n a2[2] = vz[2]*hw + vx[2]*hw + vy[2]*hw;\n a3[0] = vz[0]*hw + vx[0]*hw - vy[0]*hw;\n a3[1] = vz[1]*hw + vx[1]*hw - vy[1]*hw;\n a3[2] = vz[2]*hw + vx[2]*hw - vy[2]*hw;\n a4[0] = vz[0]*hw - vx[0]*hw - vy[0]*hw;\n a4[1] = vz[1]*hw - vx[1]*hw - vy[1]*hw;\n a4[2] = vz[2]*hw - vx[2]*hw - vy[2]*hw;\n\n // a1 a2\n //\n // a4 a3\n //\n let count = 16;\n let delta = 1/count;\n v2[0] = vx[0]*w*delta;\n v2[1] = vx[1]*w*delta;\n v2[2] = vx[2]*w*delta;\n v3[0] = vy[0]*w*delta;\n v3[1] = vy[1]*w*delta;\n v3[2] = vy[2]*w*delta;\n\n let buffp = new Array();\n let buffu = new Array();\n let u1 = [0,0];\n let u2 = [0,0];\n let u3 = [0,0];\n let u4 = [0,0];\n for (let y=0;y {\n\n // if (OrbitDayAndNight.isActiveAndSelected) return;\n\n if (projectMode.LiteMode.isActive() && (projectMode.LiteMode.modeIs('picture') || projectMode.LiteMode.modeIs('empty'))) {\n return;\n }\n\n const {cdnRepository,projectFolder} = config;\n const {cylinderBg,type,projection} = config.resources.background;\n\n const imgUrl1 = `${cdnRepository}/${projectFolder}/${resourcesFolder}/textures/background`;\n const imgUrl2 = '/assets/model/cylinder';\n const format = '.jpg';\n const isSkyActive = cylinderBg === 'sky';\n\n if (BmbyMode.active && !isSkyActive)\n return;\n\n let group = new Group();\n group.name = 'Background';\n const lut = LUT.getScope('background');\n\n let urls = {\n px: Cloudflare.resize(imgUrl1+'/px'+format,{width: 500, quality: 50}),\n nx: Cloudflare.resize(imgUrl1+'/nx'+format,{width: 500, quality: 50}),\n py: Cloudflare.resize(imgUrl1+'/py'+format,{width: 500, quality: 50}),\n ny: Cloudflare.resize(imgUrl1+'/ny'+format,{width: 500, quality: 50}),\n pz: Cloudflare.resize(imgUrl1+'/pz'+format,{width: 500, quality: 50}),\n nz: Cloudflare.resize(imgUrl1+'/nz'+format,{width: 500, quality: 50})\n };\n\n if (type === 'projection') {\n const cubeTextureLoader = new CubeTextureLoader();\n const texture = cubeTextureLoader.load(Object.values(urls));\n texture.colorSpace = LinearSRGBColorSpace;\n const mesh = new GroundProjectedSkybox2(texture,{\n radius: projection?.radius || 2000,\n height: projection?.height || 100\n });\n\n mesh.scale.setScalar( 1000 );\n if (lut) {\n lut.include(mesh.material);\n }\n\n if (cylinderBg && cylinderBg === 'sky') {\n const secondUrls = [\n imgUrl2+'/px'+format,\n imgUrl2+'/nx'+format,\n imgUrl2+'/py'+format,\n imgUrl2+'/ny'+format,\n imgUrl2+'/pz'+format,\n imgUrl2+'/nz'+format\n ];\n mesh.layers.enable(1);\n const secondTexture = cubeTextureLoader.load(secondUrls);\n secondTexture.colorSpace = LinearSRGBColorSpace;\n mesh.secondTexture = secondTexture;\n }\n\n if (!isMobile) {\n const updateTexturesTask = new UpdateTask(() => {\n urls = {\n px: Cloudflare.resize(imgUrl1+'/px'+format,{width: 2048}),\n nx: Cloudflare.resize(imgUrl1+'/nx'+format,{width: 2048}),\n py: Cloudflare.resize(imgUrl1+'/py'+format,{width: 2048}),\n ny: Cloudflare.resize(imgUrl1+'/ny'+format,{width: 2048}),\n pz: Cloudflare.resize(imgUrl1+'/pz'+format,{width: 2048}),\n nz: Cloudflare.resize(imgUrl1+'/nz'+format,{width: 2048})\n };\n\n cubeTextureLoader.load(Object.values(urls),texture => {\n texture.colorSpace = LinearSRGBColorSpace;\n let oldTexture = mesh.material.uniforms.map.value;\n mesh.material.uniforms.map.value = texture;\n oldTexture.dispose();\n oldTexture = null;\n });\n });\n threeJsVariables.tasks.addTask(updateTexturesTask);\n }\n\n group.add(mesh);\n\n } else {\n\n function mainTextureLoad(loader) {\n loader.load(urls.nz, t=> {\n let oldTexture = m1.material.uniforms.map1.value;\n m1.material.uniforms.map1.value=t;\n if (oldTexture) {\n oldTexture.dispose();\n oldTexture = null;\n }\n });\n loader.load(urls.pz, t=> {\n let oldTexture = m2.material.uniforms.map1.value;\n m2.material.uniforms.map1.value=t;\n if (oldTexture) {\n oldTexture.dispose();\n oldTexture = null;\n }\n });\n loader.load(urls.px, t=> {\n let oldTexture = m3.material.uniforms.map1.value;\n m3.material.uniforms.map1.value=t;\n if (oldTexture) {\n oldTexture.dispose();\n oldTexture = null;\n }\n });\n loader.load(urls.nx, t=> {\n let oldTexture = m4.material.uniforms.map1.value;\n m4.material.uniforms.map1.value=t;\n if (oldTexture) {\n oldTexture.dispose();\n oldTexture = null;\n }\n });\n loader.load(urls.py, t=> {\n let oldTexture = m5.material.uniforms.map1.value;\n m5.material.uniforms.map1.value=t;\n if (oldTexture) {\n oldTexture.dispose();\n oldTexture = null;\n }\n });\n loader.load(urls.ny, t=> {\n let oldTexture = m6.material.uniforms.map1.value;\n m6.material.uniforms.map1.value=t;\n if (oldTexture) {\n oldTexture.dispose();\n oldTexture = null;\n }\n });\n }\n\n\n let m1 = generateRegion([0,0,-1],[0,1,0],[ 1,0,0]);\n let m2 = generateRegion([0,0, 1],[0,1,0],[-1,0,0]);\n let m3 = generateRegion([ 1,0,0],[0,1,0],[0,0, 1]);\n let m4 = generateRegion([-1,0,0],[0,1,0],[0,0,-1]);\n let m5 = generateRegion([0,0, 1],[1,0,0],[0, 1,0]);\n let m6 = generateRegion([0,0,-1],[1,0,0],[0,-1,0]);\n m1.name = 'nz';\n m2.name = 'pz';\n m3.name = 'px';\n m4.name = 'nx';\n m5.name = 'py';\n m6.name = 'ny';\n m6.rotation.y = Math.PI;\n if (lut) {\n lut.include(m1.material);\n lut.include(m2.material);\n lut.include(m3.material);\n lut.include(m4.material);\n lut.include(m5.material);\n lut.include(m6.material);\n }\n group.add(m1);\n group.add(m2);\n group.add(m3);\n group.add(m4);\n group.add(m5);\n group.add(m6);\n\n if (projectMode.LiteMode.isActive()){\n textureLoader.load(imgUrl2+'/nz'+format, t => {\n m1.material.uniforms.map1.value = t;\n m1.material.uniforms.map2.value = t;\n isSkyActive && m1.layers.enable(1);\n });\n textureLoader.load(imgUrl2+'/pz'+format, t => {\n m2.material.uniforms.map1.value = t;\n m2.material.uniforms.map2.value = t;\n isSkyActive && m2.layers.enable(1);\n });\n textureLoader.load(imgUrl2+'/px'+format, t => {\n m3.material.uniforms.map1.value = t;\n m3.material.uniforms.map2.value = t;\n isSkyActive && m3.layers.enable(1);\n\n });\n textureLoader.load(imgUrl2+'/nx'+format, t => {\n m4.material.uniforms.map1.value = t;\n m4.material.uniforms.map2.value = t;\n isSkyActive && m4.layers.enable(1);\n });\n textureLoader.load(imgUrl2+'/py'+format, t => {\n m5.material.uniforms.map1.value = t;\n m5.material.uniforms.map2.value = t;\n isSkyActive && m5.layers.enable(1);\n });\n textureLoader.load(imgUrl2+'/ny'+format, t => {\n m6.material.uniforms.map1.value = t;\n m6.material.uniforms.map2.value = t;\n isSkyActive && m6.layers.enable(1);\n });\n\n\n } else {\n mainTextureLoad(textureLoader);\n\n if (cylinderBg && cylinderBg === 'sky') {\n textureLoader.load(imgUrl2+'/nz'+format, t=> {\n // threeJsVariables.renderer.initTexture(t);\n m1.material.uniforms.map2.value=t\n m1.layers.enable(1);\n });\n textureLoader.load(imgUrl2+'/pz'+format, t=> {\n // threeJsVariables.renderer.initTexture(t);\n m2.material.uniforms.map2.value=t\n m2.layers.enable(1);\n });\n textureLoader.load(imgUrl2+'/px'+format, t=> {\n // threeJsVariables.renderer.initTexture(t);\n m3.material.uniforms.map2.value=t\n m3.layers.enable(1);\n });\n textureLoader.load(imgUrl2+'/nx'+format, t=> {\n // threeJsVariables.renderer.initTexture(t);\n m4.material.uniforms.map2.value=t\n m4.layers.enable(1);\n });\n textureLoader.load(imgUrl2+'/py'+format, t=> {\n // threeJsVariables.renderer.initTexture(t);\n m5.material.uniforms.map2.value=t\n m5.layers.enable(1);\n });\n textureLoader.load(imgUrl2+'/ny'+format, t=> {\n // threeJsVariables.renderer.initTexture(t);\n m6.material.uniforms.map2.value=t\n m6.layers.enable(1);\n });\n }\n\n if (!isMobile) {\n const updateTexturesTask = new UpdateTask(() => {\n urls = {\n px: Cloudflare.resize(imgUrl1+'/px'+format,{width: 2048}),\n nx: Cloudflare.resize(imgUrl1+'/nx'+format,{width: 2048}),\n py: Cloudflare.resize(imgUrl1+'/py'+format,{width: 2048}),\n ny: Cloudflare.resize(imgUrl1+'/ny'+format,{width: 2048}),\n pz: Cloudflare.resize(imgUrl1+'/pz'+format,{width: 2048}),\n nz: Cloudflare.resize(imgUrl1+'/nz'+format,{width: 2048})\n };\n const tl = new TextureLoader();\n mainTextureLoad(tl);\n });\n threeJsVariables.tasks.addTask(updateTexturesTask);\n }\n }\n }\n\n const {position,rotation,scale} = config.resources.background;\n group.position.set(position.x,position.y,position.z);\n group.rotation.set(rotation.x,rotation.y,rotation.z);\n group.scale.set(scale.x,scale.y,scale.z);\n \n const initialParams = {\n position: new Vector3().copy(group.position),\n scale: new Vector3().copy(group.scale)\n };\n \n _sphereBox.setFromObject(group);\n _sphereBox.getBoundingSphere(_sphere);\n \n group.collisionDetect = () => {\n if (settingsData.activeViewMode === ViewMode.Orbit && group.visible && group.parent) {\n \n if (!initialParams.position.equals(group.position) || !initialParams.scale.equals(group.scale)) {\n initialParams.position.copy(group.position);\n initialParams.scale.copy(group.scale);\n _sphereBox.setFromObject(group);\n _sphereBox.getBoundingSphere(_sphere);\n _sphere.radius /= 2;\n }\n \n if (!_sphere.containsPoint(threeJsVariables.perspectiveCamera.position)) {\n _sphere.clampPoint(threeJsVariables.perspectiveCamera.position,_sphereClamped);\n _cameraTarget.copy(threeJsVariables.orbitControls.target);\n _cameraTarget.multiplyScalar(0.98);\n _cameraTarget.y = threeJsVariables.orbitControls.target.y;\n threeJsVariables.orbitControls.target.copy(_cameraTarget);\n threeJsVariables.perspectiveCamera.position.copy(_sphereClamped);\n threeJsVariables.perspectiveCamera.lookAt(threeJsVariables.orbitControls.target);\n }\n }\n };\n\n // const sp = new SphereBufferGeometry(800,16,16);\n // const mat = new MeshStandardMaterial();\n // const mesh = new Mesh(sp,mat);\n // threeJsVariables.scene.add(mesh);\n\n\n !OrbitDayAndNight.hasBackgroundToggle && threeJsVariables.scene.add(group);\n threeJsVariables.renderList.reorder();\n //if (cylinderBg && cylinderBg === 'sky')\n threeJsVariables.background = group;\n}\n\nexport function backgroundHide () {\n if (config.features.privateHouseMode || isCylinderDisplayModeEqual('show all')) return;\n\n const {cylinderBg} = config.resources.background;\n const mixer = GSAPAnimationMixer.getMixer('cylinderEnter');\n\n if (cylinderBg && cylinderBg === 'sky'){\n\n let a = threeJsVariables.background //threeJsVariables.scene.getObjectByName('Background')\n if (!a){\n return\n }\n\n a.visible = true;\n\n for (let i=0;i {\n bg.visible = false;\n }\n });\n\n mixer.addAnimation(animation);\n }\n }\n}\n\nexport function backgroundShow () {\n if (config.features.privateHouseMode) return;\n const {cylinderBg} = config.resources.background;\n const mixer = GSAPAnimationMixer.getMixer('exitToOrbit');\n\n let a = threeJsVariables.background;\n if (!a)\n return;\n\n if (a) {\n const {position,scale,rotation} = config.resources.background\n a.rotation.set(rotation.x,rotation.y,rotation.z)\n a.position.set(position.x,position.y,position.z)\n a.scale.set(scale.x,scale.y,scale.z)\n }\n\n // const mixer = GSAPAnimationMixer.getMixer('exitToOrbit');\n\n if (cylinderBg && cylinderBg === 'sky') {\n if (OrbitDayAndNight.isActiveAndSelected) {\n a.visible = false;\n }\n\n for (let i=0;i {\n bg.visible = true;\n }\n });\n\n mixer.addAnimation(animation);\n }\n\n }\n}\n\n\nexport class OSMEnv {\n\n static buildingsMaterials = [];\n static seaMaterial = null;\n static osm = null;\n static preloaded = {};\n\n\n constructor () {\n // if (!OrbitDayAndNight.isActive) return;\n\n // threeJsVariables.scene.add(OSMEnv.osm);\n\n // if (sceneObjectsGroup.children.length!==0){\n // let indA = threeJsVariables.scene.children.indexOf(sceneObjectsGroup);\n // let indB = threeJsVariables.scene.children.indexOf(OSMEnv.osm);\n // threeJsVariables.scene.children[indB] = sceneObjectsGroup;\n // threeJsVariables.scene.children[indA] = OSMEnv.osm;\n // } else {\n // const projectBuildings = threeJsVariables.scene.getObjectByName('Project Buildings');\n // let indA = threeJsVariables.scene.children.indexOf(projectBuildings);\n // let indB = threeJsVariables.scene.children.indexOf(OSMEnv.osm);\n // threeJsVariables.scene.children[indB] = projectBuildings;\n // threeJsVariables.scene.children[indA] = OSMEnv.osm;\n // }\n\n // this.addBuildings();\n // this.addSea();\n }\n\n static addSea(textureLoader) {\n if (Environment.fromBundle()) return;\n\n const data = OSMEnv.preloaded.sea.elements;\n const { sea } = config.features.dayNight.settings;\n const seaGroup = OSMEnv.osm.getObjectByName('Sea group');\n\n const coordsInterval = setInterval(() => {\n const lat = Number(config.localization?.latitude);\n const lng = Number(config.localization?.longitude);\n if (lat && lng) {\n clearInterval(coordsInterval);\n buildSea(lat,lng);\n }\n\n },100);\n\n function buildSea (lat,lng) {\n const points = [];\n const axis = new Vector3(1,0,0).normalize();\n\n const allPoints = data.reduce((acc,value) => {\n acc.push(...value.geometry);\n return acc;\n },[]);\n\n allPoints.sort((a,b) => a.lat - b.lat);\n\n allPoints.forEach(point => {\n const pointSpace = {lat: point.lat, lng: point.lon};\n const vector = latLngAltToVector3(pointSpace,{lat: lat, lng: lng}, axis);\n vector.setY(0);\n points.push(vector);\n });\n\n if (!points.length) return;\n\n const angle = points[0].angleTo(points[points.length - 1]);\n const arcAxis = new Vector3(0,-1,0).normalize();\n const tempV = new Vector3().copy(points[points.length - 1]);\n const distance = points[points.length - 1].distanceTo(points[0]);\n\n const curve = new CatmullRomCurve3([\n points[points.length - 1],\n new Vector3().copy(tempV).applyAxisAngle(arcAxis,angle / 2).setLength(distance / sea.distanceCoefficient),\n points[0]\n ]);\n\n const curvePoints = curve.getPoints(20);\n points.push(...curvePoints);\n\n const shapePoints = [];\n points.forEach(point => {\n if (!isNaN(point.x) && !isNaN(point.y) && !isNaN(point.z)) {\n const v = new Vector2(point.x,point.z);\n shapePoints.push(v);\n }\n });\n\n const shape = new Shape(shapePoints);\n const geometry = new ShapeGeometry(shape);\n\n const uv = new PlanarUV(geometry);\n geometry.setAttribute('uv',uv);\n\n const seaMesh = new OrbitSea(geometry,{\n loader: textureLoader\n });\n\n OSMEnv.seaMaterial = seaMesh.material;\n seaMesh.name = 'sea';\n seaGroup.add(seaMesh);\n }\n }\n\n static addTrees() {\n if (Environment.fromBundle()) return;\n\n const data = OSMEnv.preloaded.trees.data;\n const textures = OSMEnv.preloaded.trees.textures;\n const treesSettings = config.features.dayNight.settings.trees;\n // const shaders = [];\n\n const treesGroup = new Group();\n treesGroup.name = 'Trees';\n treesGroup.rotation.set(treesSettings.rotation.x, treesSettings.rotation.y, treesSettings.rotation.z);\n treesGroup.position.set(treesSettings.position.x,treesSettings.position.y,treesSettings.position.z);\n\n data.forEach((points,index) => {\n\n const particles = points.reduce((acc,value) => {\n acc.push(value.x,value.y,value.z);\n return acc;\n },[]);\n\n const pointsGeometry = new BufferGeometry();\n pointsGeometry.setAttribute('position', new Float32BufferAttribute(particles, 3));\n\n const textureData = textures[index];\n const pointsMaterial = new PointsMaterial({\n size: textureData.size,\n sizeAttenuation: true,\n map: textureData.texture,\n transparent: true,\n alphaTest: 0.8\n });\n\n pointsMaterial.onBeforeCompile = (shader) => {\n\n shader.uniforms.treesDensity = { value: config.features.dayNight.settings.trees.fogDensity };\n\n const vertexVarying = 'varying float zFOG;\\n';\n const vertex_position = shader.vertexShader.replace(\n '#include ',\n [\n '#include ',\n 'zFOG = -gl_Position.z;'\n ].join( '\\n' )\n );\n\n shader.vertexShader = vertexVarying + vertex_position;\n\n const fragmentVarying = 'varying float zFOG;\\n uniform float treesDensity;\\n';\n const fragmentMap = shader.fragmentShader.replace(\n '#include ',\n [\n '#include ',\n `gl_FragColor.a = smoothstep(0.5,1.0,exp( -treesDensity * treesDensity * zFOG * zFOG ));`\n ].join( '\\n' )\n );\n\n shader.fragmentShader = fragmentVarying + fragmentMap;\n // shaders.push(shader);\n };\n\n const mesh = new Points(pointsGeometry, pointsMaterial);\n treesGroup.add(mesh);\n });\n\n // const params = {\n // density: config.features.dayNight.settings.trees.fogDensity,\n // // repeatX: 1,\n // // repeatY: 1,\n // // offsetX: 0,\n // // offsetY:0\n // };\n // const gui = new dat.GUI();\n // gui.width = 450;\n // gui.add(params,'density',0, 0.01, 0.00000001).onChange(v => {\n // shaders.forEach(m => {\n // console.log(v);\n // m.uniforms.treesDensity.value = v;\n // });\n // });\n\n OSMEnv.osm.add(treesGroup);\n\n }\n\n static addBuildings() {\n if (Environment.fromBundle()) return;\n // const shaders = [];\n const edges = config.features.dayNight.settings.buildingsGroup.edges;\n const colors = new ColorCorrection().getColors('osm');\n\n OSMEnv.preloaded.osmBuildings.children.forEach(child => {\n const geometry = new BufferGeometry().copy(child.geometry);\n // const alphaUV = geometry.getAttribute('_uva');\n const uv = geometry.getAttribute('uv');\n // geometry.setAttribute('uvA', alphaUV);\n // geometry.deleteAttribute('_uva');\n geometry.setAttribute('uv2',uv);\n\n const material = new MeshStandardMaterial({\n // color: '#dedede',\n color: new Color().setStyle(colors.color,LinearSRGBColorSpace),\n emissive: new Color().setStyle(colors.emissive,LinearSRGBColorSpace),\n transparent: true,\n depthTest: true,\n depthWrite: true,\n map: OSMEnv.preloaded.osmTextures[child.name],\n lightMapIntensity: 0,\n envMap: OSMEnv.preloaded.envMap,\n });\n\n if (child.name !== 'Roofs') {\n material.lightMap = OSMEnv.preloaded.osmTextures['lightMap'];\n }\n\n material.onBeforeCompile = (shader) => {\n\n shader.uniforms.buildingDensity = { value: config.features.dayNight.settings.buildingsGroup.fogDensity };\n\n const vertexVarying = 'varying float zFOG;\\n';\n const vertex_position = shader.vertexShader.replace(\n '#include ',\n [\n '#include ',\n 'zFOG = -gl_Position.z;'\n ].join( '\\n' )\n );\n\n shader.vertexShader = vertexVarying + vertex_position;\n\n const fragmentVarying = 'varying float zFOG;\\n uniform float buildingDensity;\\n';\n const fragmentMap = shader.fragmentShader.replace(\n '#include ',\n [\n '#include ',\n `float gray = gl_FragColor.r * 0.21 + gl_FragColor.g * 0.71 + gl_FragColor.b * 0.07;`,\n `gl_FragColor.rgb = gl_FragColor.rgb = mix(vec3(gray) * gl_FragColor.rgb,gl_FragColor.rgb,smoothstep(0.5,1.0,exp( -buildingDensity * buildingDensity * zFOG * zFOG )));`,\n `gl_FragColor.a = smoothstep(0.5,1.0,exp( -buildingDensity * buildingDensity * zFOG * zFOG ));`\n ].join( '\\n' )\n );\n\n shader.fragmentShader = fragmentVarying + fragmentMap;\n\n // shaders.push(shader);\n };\n\n OSMEnv.buildingsMaterials.push(material);\n\n const mesh = new Mesh(geometry,material);\n mesh.castShadow = true;\n mesh.receiveShadow = true;\n\n if (edges.active) {\n new OutlineEdges(mesh, {\n color: edges.color,\n fogDensity: edges.fogDensity,\n useFog:true,\n transparent: true\n });\n }\n mesh.name = child.name;\n OSMEnv.buildingsGroup.add(mesh);\n });\n\n // const params = {\n // density: edges.fogDensity,\n // // repeatX: 1,\n // // repeatY: 1,\n // // offsetX: 0,\n // // offsetY:0\n // };\n // const gui = new dat.GUI();\n // gui.width = 450;\n // gui.add(params,'density',0, 0.01, 0.00000001).onChange(v => {\n // shaders.forEach(m => {\n // console.log(v);\n // m.uniforms.fogDensity.value = v;\n // });\n // });\n // gui.add(params,'repeatX',0, 2, 0.001).onChange(v => {\n // OSMEnv.buildingsMaterials.forEach(m => {\n // m.lightMap?.repeat.setX(v);\n // });\n // });\n //\n // gui.add(params,'repeatY',0, 2, 0.001).onChange(v => {\n // OSMEnv.buildingsMaterials.forEach(m => {\n // m.lightMap?.repeat.setY(v);\n // });\n // });\n //\n // gui.add(params,'offsetX',0, 2, 0.001).onChange(v => {\n // OSMEnv.buildingsMaterials.forEach(m => {\n // m.lightMap?.offset.setX(v);\n // });\n // });\n //\n // gui.add(params,'offsetY',0, 2, 0.001).onChange(v => {\n // OSMEnv.buildingsMaterials.forEach(m => {\n // m.lightMap?.offset.setY(v);\n // });\n // });\n }\n\n static update(delta) {\n if (!OrbitDayAndNight.isActive || !OSMEnv.seaMaterial) return;\n OSMEnv.seaMaterial.uniforms.uTime.value = delta;\n }\n\n static toggle(action) {\n if (Environment.fromBundle()) return;\n\n console.log('here')\n\n OSMEnv.osm.visible = action === 'show';\n\n // const elements = [];\n //\n // const mixer = GSAPAnimationMixer.registerNewMixer('environment');\n // mixer.addCallback('onStart',() => {\n // if (action === 'show') {\n // OSMEnv.osm.visible = true;\n // }\n // });\n //\n // mixer.addCallback('onComplete',() => {\n // if (action !== 'show') {\n // OSMEnv.osm.visible = false;\n // }\n // });\n\n // const tl = gsap.timeline({\n // paused: true,\n // onStart: () => {\n // if (action === 'show') {\n // OSMEnv.osm.visible = true;\n // }\n // },\n // onComplete: () => {\n // if (action !== 'show') {\n // OSMEnv.osm.visible = false;\n // }\n // }\n // });\n\n // OSMEnv.osm.traverse(el => {\n //\n // if (el.isMesh) {\n // elements.push(el);\n // // const animation = gsap.to(el.material, {\n // // transparent: true,\n // // duration: 0.2,\n // // opacity: action === 'show' ? 1 : 0\n // // });\n // //\n // // tl.add(animation,0);\n // }\n // });\n //\n // elements.forEach(el => {\n // const animation = gsap.to(el.material, {\n // // transparent: true,\n // duration: 0.4,\n // ease: GSAPAnimationMixer.ease,\n // opacity: action === 'show' ? 1 : 0,\n // onStart: () => {\n // el.material.transparent = true;\n // el.material.needsUpdate = true;\n // },\n // // onUpdate: multimaterialNeedsUpdate,\n // onComplete: () => {\n // if (el.name === 'sea') {\n // el.material.transparent = false;\n // }\n // }\n // });\n //\n // mixer.addAnimation(animation);\n // });\n //\n // mixer.play();\n }\n\n static preload(loader,parentGroup) {\n if (Environment.fromBundle() || BmbyMode.active) return;\n\n if (!OrbitDayAndNight.active) return;\n\n const { seaGroup, buildingsGroup, localization, ground, trees } = config.features.dayNight.settings;\n\n const textureLoader = loader.textureLoader;\n const fileLoader = loader.fileLoader;\n const dracoLoader = loader.dracoLoader;\n\n const mapBoxToken = 'pk.eyJ1IjoiYWJkdWxsYWJlc3QiLCJhIjoiY2tvc2RiZGlwMDBmdjJxbXc2cjRlZTRkcCJ9.-P0yGd4LAGQodEj87GKl-w';\n const mapBoxTileUrl = 'https://api.mapbox.com/styles/v1/mapbox/satellite-v9/tiles/';\n let material = Buildings.getBuildingsArray()[0]?.instances[0].material;\n\n if (!material) {\n material = Buildings.getBuildingsArray()[0]?.instances[0].children[0].material;\n }\n\n if (material) {\n if (Array.isArray(material)) {\n OSMEnv.preloaded.envMap = material[0].envMap;\n } else {\n OSMEnv.preloaded.envMap = material.envMap;\n }\n } else {\n OSMEnv.preloaded.envMap = null;\n }\n\n const sea = new Group();\n sea.name = 'Sea group';\n sea.position.set(seaGroup.position.x,seaGroup.position.y,seaGroup.position.z);\n sea.rotation.set(seaGroup.rotation.x,seaGroup.rotation.y,seaGroup.rotation.z);\n\n const osmUrl = `${config.cdnRepository}/${config.projectFolder}/${resourcesFolder}/points/`;\n\n //Preload for buildings\n OSMEnv.preloaded.osmTextures = {};\n\n if (!Environment.scope?.environments?.Buildings?.useBundle) {\n OSMEnv.buildingsGroup = new Group();\n OSMEnv.buildingsGroup.name = 'Buildings group';\n OSMEnv.buildingsGroup.rotation.set(buildingsGroup.rotation.x, buildingsGroup.rotation.y, buildingsGroup.rotation.z);\n OSMEnv.buildingsGroup.position.set(buildingsGroup.position.x,buildingsGroup.position.y,buildingsGroup.position.z);\n parentGroup.add(OSMEnv.buildingsGroup);\n\n buildingsGroup.textures.forEach(t => {\n if (!OSMEnv.preloaded.osmTextures[t.type]) {\n const texture = textureLoader.load(osmUrl + t.path,loadedTexture => threeJsVariables.renderer.initTexture(loadedTexture));\n texture.wrapS = texture.wrapT = RepeatWrapping;\n\n if (Object.keys(t.settings).length) {\n Object.entries(t.settings).forEach(([key,value]) => {\n if (key === 'repeat' || key === 'offset') {\n texture[key].set(value.x,value.y);\n } else {\n texture[key] = value;\n }\n });\n }\n OSMEnv.preloaded.osmTextures[t.type] = texture;\n }\n });\n\n dracoLoader.load(osmUrl + 'osm.glb',gltf => {\n OSMEnv.preloaded.osmBuildings = gltf.scene.children[0];\n OSMEnv.addBuildings();\n },undefined,() => {\n OSMEnv.preloaded.osmBuildings = null;\n });\n\n\n } else {\n parentGroup.add(Environment.scope?.environments?.Buildings.group);\n }\n\n parentGroup.add(sea);\n\n new Terrain().loadTerrain(parentGroup);\n\n //Preload for sea\n\n fileLoader.load(osmUrl + 'sea.json',sea => {\n OSMEnv.preloaded.sea = JSON.parse(sea);\n OSMEnv.addSea(textureLoader);\n },undefined,() =>{\n OSMEnv.preloaded.sea = null;\n });\n\n //Preload for trees\n if (trees) {\n OSMEnv.preloaded.trees = {\n data: null,\n textures: []\n };\n\n trees.textures.forEach(el => {\n OSMEnv.preloaded.trees.textures.push({\n size: el.size,\n texture: textureLoader.load(osmUrl + el.path,loadedTexture => threeJsVariables.renderer.initTexture(loadedTexture))\n });\n });\n\n fileLoader.load(osmUrl + 'trees.json',trees => {\n OSMEnv.preloaded.trees.data = JSON.parse(trees);\n OSMEnv.addTrees();\n },undefined,() =>{\n OSMEnv.preloaded.trees.data = null;\n });\n }\n\n }\n\n static updateSeaColor(seaColor, seaWaveColor) {\n if (OSMEnv.seaMaterial) {\n // return;\n OSMEnv.seaMaterial.uniforms.uSeaColor.value.copy(seaColor);\n OSMEnv.seaMaterial.uniforms.uWaveColor.value.copy(seaWaveColor);\n }\n }\n\n static updateLightMap(intensity) {\n if (OSMEnv.buildingsMaterials.length) {\n OSMEnv.buildingsMaterials.forEach(material => {\n material.lightMapIntensity = intensity * Math.PI;\n });\n }\n }\n\n static updateEnvMapIntensity(intensity) {\n if (OSMEnv.buildingsMaterials.length && OSMEnv.osm) {\n\n OSMEnv.osm.traverse(el => {\n if (el.isMesh) {\n el.material.envMapIntensity = intensity;\n }\n });\n }\n }\n\n static #lonToTile(lng, zoom) {\n return (lng+180)/360*Math.pow(2,zoom);\n }\n\n static #latToTile(lat,zoom) {\n return (1-Math.log(Math.tan(lat*Math.PI/180) + 1/Math.cos(lat*Math.PI/180))/Math.PI)/2 *Math.pow(2,zoom);\n }\n\n}\n\nexport class EnvironmentToggle {\n static scope = null;\n\n constructor () {\n this.backgroud360 = null;\n this.backgroudOSM = null;\n EnvironmentToggle.scope = this;\n }\n\n addToDisplayOption(parent) {\n if (!OrbitDayAndNight.hasBackgroundToggle) return;\n\n this.main = new BaseElement()\n .addClass('display-option','environment-toggle-container')\n .appendTo(parent);\n if (Environment.scope?.config || isMobile)\n this.main.addStyle('display', 'none');\n new BaseElement('span')\n .addClass('environment-toggle__title','language-string')\n .innerHtml(changeLangToCurrent('Background'))\n .addAttribute('data-dictionary','Background')\n .appendTo(this.main.DOMElement);\n \n if (Environment.scope?.config && !isMobile) {\n new Promise(resolve => {\n const interval = setInterval(() => {\n const header = document.querySelector('.header__checker');\n if (header) {\n this.preloader = new BaseElement()\n .addClass('background-loader')\n .addStyle('order', '2')\n .appendTo(header, 'beforeBegin');\n clearInterval(interval);\n resolve();\n }\n }, 200);\n });\n }else {\n this.preloader = new BaseElement()\n .addClass('background-loader')\n .appendTo(this.main.DOMElement);\n }\n\n const mode = new BaseElement()\n .addClass('environment-toggle__mode')\n .appendTo(this.main.DOMElement);\n new BaseElement('span')\n .addClass('environment-toggle__mode-text')\n .innerHtml('360')\n .appendTo(mode.DOMElement);\n this.toggle = new Switch(mode.DOMElement);\n this.toggle.switch.classList.add('environment-toggle-switcher');\n this.toggle.checked = OrbitDayAndNight.osmSelected;\n this.toggle.listener = this.#toggleListener.bind(this);\n new BaseElement('span')\n .addClass('environment-toggle__mode-text')\n .innerHtml('3D')\n .appendTo(mode.DOMElement);\n }\n\n #toggleListener(e) {\n if (userPrevent())\n return;\n\n if (e.target.checked) {\n this.toggle.checked = true;\n const preloader = new DreamsPreloader(this.preloader.DOMElement,'background-preloader').absolute().scale(0.2).show();\n setTimeout(() => {\n this.loadOSM(true).then(group => {\n preloader.remove();\n if (this.backgroud360) {\n this.backgroud360.visible = false;\n }\n\n if (Environment.fromBundle()) {\n Environment.toggle3D('show');\n } else {\n PublicLayers.hideLabelsByDistance(false);\n if (threeJsVariables.scene.children.includes(group)) {\n group.visible = true;\n } else {\n threeJsVariables.scene.add(group);\n threeJsVariables.renderList.reorder();\n group.visible = true;\n }\n }\n\n OrbitDayAndNight.osmSelected = true;\n Weather.scope.changeClouds('osm');\n if (!DisplayOptions.scope.orbitDayAndNight) {\n DisplayOptions.scope.orbitDayAndNight = new OrbitDayAndNight(DisplayOptions.scope.displayOptions,this.data);\n } else {\n DisplayOptions.scope.orbitDayAndNight.restorePreviouslyPreset();\n }\n\n DisplayOptions.scope.orbitDayAndNight.currentTimeMainContainer.classList.remove('hidden');\n DisplayOptions.scope.orbitDayAndNight.currentTimeMainContainer.classList.remove('day-night-master-hidden');\n DisplayOptions.displayOptionsVisibility('update');\n\n });\n },10);\n } else {\n this.toggle.checked = false;\n const preloader = new DreamsPreloader(this.preloader.DOMElement,'background-preloader').absolute().scale(0.2).show();\n setTimeout(() => {\n this.load360(true).then(group => {\n preloader.remove();\n\n if (Environment.fromBundle()) {\n Environment.toggle3D('hide');\n } else {\n this.backgroudOSM.visible = false;\n PublicLayers.hideLabelsByDistance(true);\n }\n\n if (threeJsVariables.scene.children.includes(group)) {\n group.visible = true;\n } else {\n threeJsVariables.scene.add(group);\n threeJsVariables.renderList.reorder();\n group.visible = true;\n }\n\n if ((settingsData.activeViewMode !== ViewMode.Orbit) && (config.resources.background.cylinderBg !== 'sky')) {\n group.visible = false;\n }\n\n OrbitDayAndNight.osmSelected = false;\n OrbitDayAndNight.presetsToggle('reset');\n Weather.scope.changeClouds('360');\n if (DisplayOptions.scope.orbitDayAndNight) {\n DisplayOptions.scope.orbitDayAndNight.currentTimeMainContainer.classList.add('hidden');\n DisplayOptions.scope.orbitDayAndNight.currentTimeMainContainer.classList.add('day-night-master-hidden');\n DisplayOptions.scope.orbitDayAndNight.resetToDefault();\n }\n DisplayOptions.displayOptionsVisibility('update');\n });\n },10);\n }\n }\n\n load360(preloader = false,loader) {\n return new Promise((resolve,reject) => {\n try {\n if (this.backgroud360) {\n preloader && this.preloader.innerHtml('');\n // if (Environment.isActive()) {\n // const terrain = Environment.getLayer('Terrain');\n // terrain && terrain.hide();\n // }\n resolve(this.backgroud360);\n } else if (threeJsVariables.background) {\n this.backgroud360 = threeJsVariables.background;\n // if (Environment.isActive()) {\n // const terrain = Environment.getLayer('Terrain');\n // terrain && terrain.hide();\n // }\n resolve(this.backgroud360);\n } else {\n preloader && new DreamsPreloader(this.preloader.DOMElement,'background-preloader').absolute().scale(0.2).show();\n let newLoader;\n if (loader) {\n newLoader = loader;\n } else {\n newLoader = new Loader();\n }\n\n newLoader.addCallback = () => {\n this.backgroud360 = threeJsVariables.background;\n preloader && this.preloader.innerHtml('');\n threeJsVariables.tasks.run();\n resolve(this.backgroud360);\n };\n\n const textureLoader = newLoader.textureLoader;\n OrbitDayAndNight.osmSelected = false;\n prepareSphere(textureLoader);\n }\n }catch (e) {\n reject(e);\n }\n });\n }\n\n loadOSM(preloader = false,loader) {\n userPrevent(true);\n return new Promise((resolve, reject) => {\n if (Environment.fromBundle()) {\n userPrevent(false);\n preloader && this.preloader.innerHtml('');\n resolve();\n return;\n }\n\n try {\n if (this.backgroudOSM) {\n userPrevent(false);\n preloader && this.preloader.innerHtml('');\n // if (Environment.isActive()) {\n // const terrain = Environment.getLayer('Terrain');\n // terrain && terrain.show();\n // }\n resolve(this.backgroudOSM);\n } else {\n preloader && new DreamsPreloader(this.preloader.DOMElement).absolute().scale(0.2).show();\n let newLoader;\n const callback = () => {\n console.log('3d assets loaded');\n this.backgroudOSM = OSMEnv.osm;\n preloader && this.preloader.innerHtml('');\n // dynamicFogToggle();\n // setFogParams({\n // active: true\n // });\n resolve(this.backgroudOSM);\n const waitingDisplayOptions = setInterval(() => {\n if (DisplayOptions.scope && this.data) {\n clearInterval(waitingDisplayOptions);\n if (!DisplayOptions.scope.orbitDayAndNight) {\n DisplayOptions.scope.orbitDayAndNight = new OrbitDayAndNight(DisplayOptions.scope.displayOptions,this.data);\n } else {\n DisplayOptions.scope.orbitDayAndNight.currentTimeMainContainer.classList.remove('hidden');\n DisplayOptions.scope.orbitDayAndNight.currentTimeMainContainer.classList.remove('day-night-master-hidden');\n }\n }\n userPrevent(false);\n },100);\n };\n\n if (loader) {\n newLoader = loader;\n } else {\n newLoader = new Loader();\n }\n\n newLoader.addCallback = callback;\n OSMEnv.osm = new Group();\n OSMEnv.osm.name = 'OSM env';\n OrbitDayAndNight.preload(newLoader,OSMEnv.osm);\n OSMEnv.preload(newLoader,OSMEnv.osm);\n }\n }catch (e) {\n reject(e);\n }\n });\n }\n\n static preloadOSM() {\n if (!OrbitDayAndNight.isActive || OrbitDayAndNight.isActiveAndSelected || Environment.fromBundle()) return;\n\n const loader = new Loader();\n OSMEnv.osm = new Group();\n OSMEnv.osm.name = 'OSM env';\n OrbitDayAndNight.preload(loader,OSMEnv.osm);\n OSMEnv.preload(loader,OSMEnv.osm);\n EnvironmentToggle.scope.backgroudOSM = OSMEnv.osm;\n }\n\n load(loader) {\n if (!OrbitDayAndNight.hasBackgroundToggle || userPrevent()) return;\n\n let background;\n if (OrbitDayAndNight.isActiveAndSelected) {\n background = this.loadOSM(false,loader);\n } else {\n background = this.load360(false,loader);\n }\n\n background.then(group => {\n if (!group) return;\n if (!threeJsVariables.scene.children.includes(group)) {\n threeJsVariables.scene.add(group);\n threeJsVariables.renderList.reorder();\n console.log('end loading')\n }\n });\n }\n\n set response(data) {\n this.data = data;\n }\n}\n\n\n// export function needsBackgroundAnimation () {\n// const {cylinderBg,type} = config.resources.background;\n// return cylinderBg === 'sky' || type === 'projection';\n// }\n","'use strict';\n\nimport Stats from \"three/examples/jsm/libs/stats.module\";\n\nimport { isDev, settingsData, threeJsVariables, TRoot } from '../../settings';\nimport {PerspectiveCamera_init} from \"./camera\";\nimport { addLights, updateShadowMap } from './lights';\nimport { Clock, FogExp2, PCFSoftShadowMap, PMREMGenerator, Raycaster, Scene, WebGLRenderer, LinearSRGBColorSpace} from 'three';\nimport { Composer } from '../post-processing/Composer';\nimport { RenderList } from './RenderList';\nimport { FPS } from '../gui/FPS';\nimport { animate } from '../../app';\nimport { Slicer } from './Slicer';\n// import { MiniMap } from '../MiniMap/MiniMap';\nimport { Tasks } from '../gui/LoaderTask';\nimport { ClothSimulation } from \"./Cloth/ClothSimulation\";\nimport { QA } from '../qa/QA';\nimport {getUrlParam} from \"../../functions\";\nimport { GoogleMiniMap } from '../MiniMap/GoogleMiniMap';\n\nexport const createThreeJsEnvironment = () => {\n let logarithmicDepthBuffer = config.threejs.renderer?.logarithmicDepthBuffer;\n const canvas = document.querySelector('#c');\n const width = window.innerWidth;\n const height = window.innerHeight;\n\n canvas.addEventListener('webglcontextcreationerror',function() {\n console.log('create context error');\n webGLRestore(canvas).then(() => window.location.reload(true));\n },{once: true});\n\n const scene = new Scene();\n const perspectiveCamera = PerspectiveCamera_init();\n const raycaster = new Raycaster();\n raycaster.firstHitOnly = true;\n raycaster.layers.enable(1);\n\n let antialias = true\n\n if (config.resources.bundle.ver==='2.0' || config.threejs.effectComposer?.active) {\n settingsData.postProcessing.isActive = true\n antialias = false\n logarithmicDepthBuffer = false\n }\n\n const renderer = new WebGLRenderer({\n canvas: canvas,\n antialias: false,\n logarithmicDepthBuffer,\n autoClear: true,\n stencil: false,\n depth: true,\n //precision : 'lowp',\n //powerPreference: 'high-performance', // на некоторых десктоп устройствах вызывает перегрузку GPU, на остальных не дает никакого эффекта\n });\n\n renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));\n renderer.setSize( width, height );\n renderer.info.autoReset = false;\n renderer.shadowMap.enabled = true;\n renderer.shadowMap.autoUpdate = false;\n renderer.outputColorSpace = LinearSRGBColorSpace;\n if (config.resources.bundle.dynamicShadows===true ){\n renderer.shadowMap.autoUpdate = true;\n }\n renderer.sortObjects = false;\n // renderer.shadowMap.type = THREE.VSMShadowMap;\n renderer.shadowMap.type = PCFSoftShadowMap;\n // renderer.toneMapping = LinearToneMapping;\n renderer.setClearColor( 0x000000, 1 );\n\n const context = renderer.getContext();\n let contextRestored = false;\n\n if (context) {\n\n context.canvas.addEventListener(\"webglcontextrestored\", function(event) {\n console.log('context restored');\n animate();\n updateShadowMap();\n contextRestored = true;\n }, false);\n\n context.canvas.addEventListener(\"webglcontextlost\", function(event) {\n event.preventDefault();\n console.log('context lost');\n contextRestored = false;\n cancelAnimationFrame(settingsData.renderAnim);\n setTimeout(() => {\n if (!contextRestored) {\n window.location.reload(true);\n }\n },5000);\n }, false);\n }\n\n scene.fog = new FogExp2( 0xffffff, 0.0 )\n\n \n const cloth = new ClothSimulation();\n\n threeJsVariables.scene = scene;\n threeJsVariables.renderer = renderer;\n threeJsVariables.raycaster = raycaster;\n // threeJsVariables.scene.background = new THREE.Color(0x151515);\n threeJsVariables.pmremgenerator = new PMREMGenerator(renderer);\n threeJsVariables.renderList = new RenderList(scene,renderer);\n threeJsVariables.slicer = new Slicer(renderer,config.threejs.slicer);\n threeJsVariables.sceneObjectsSlicer = new Slicer(renderer,config.threejs.sceneObjectsSlicer);\n threeJsVariables.fps = new FPS();\n threeJsVariables.tasks = new Tasks();\n // threeJsVariables.miniMap = new MiniMap(scene,renderer);\n threeJsVariables.googleMiniMap = new GoogleMiniMap();\n \n // threeJsVariables.miniMap.appendTo(TRoot);\n // threeJsVariables.miniMap.hide();\n\n threeJsVariables.perspectiveCamera = perspectiveCamera;\n threeJsVariables.composer = new Composer(renderer,scene,perspectiveCamera);\n threeJsVariables.cloth = cloth;\n\n //directionlight();\n addLights();\n\n threeJsVariables.time = new Clock();\n\n // settingsData.postProcessing.isActive && postProcessing(renderer,perspectiveCamera,canvas,scene)\n\n if (getUrlParam('dev')){\n addRendererInfoGui();\n }\n};\n\n\nfunction webGLRestore (canvas) {\n return new Promise(resolve => {\n const waitingWebGL = setInterval(() => {\n console.log(console.warn('Waiting WEBGL restore'));\n if (!!window.WebGLRenderingContext &&\n (canvas.getContext('webgl') || canvas.getContext('experimental-webgl'))) {\n clearInterval(waitingWebGL);\n resolve();\n }\n },5000)\n });\n}\n\nfunction parallelTraverse( a, b, callback ) {\n\n\tcallback( a, b );\n\n\tfor ( let i = 0; i < a.children.length; i ++ ) {\n\n\t\tparallelTraverse( a.children[ i ], b.children[ i ], callback );\n\n\t}\n\n}\n\nexport const fullClone = ( source )=> {\n\n\tconst sourceLookup = new Map()\n\tconst cloneLookup = new Map()\n\n\tconst clone = source.clone()\n\n\tparallelTraverse( source, clone, function ( sourceNode, clonedNode ) {\n\n\t\tsourceLookup.set( clonedNode, sourceNode )\n\t\tcloneLookup.set( sourceNode, clonedNode )\n\n\t} )\n\n\tclone.traverse( function ( node ) {\n\n\t\tif ( ! node.isSkinnedMesh ) return\n\n\t\tconst clonedMesh = node;\n\t\tconst sourceMesh = sourceLookup.get( node )\n\t\tconst sourceBones = sourceMesh.skeleton.bones\n\n\t\tclonedMesh.skeleton = sourceMesh.skeleton.clone()\n\t\tclonedMesh.bindMatrix.copy( sourceMesh.bindMatrix )\n\n\t\tclonedMesh.skeleton.bones = sourceBones.map( function ( bone ) {\n\n\t\t\treturn cloneLookup.get( bone )\n\n\t\t} );\n\n\t\tclonedMesh.bind( clonedMesh.skeleton, clonedMesh.bindMatrix )\n\n\t} )\n\n if (source.animations){\n clone.animations = source.animations\n }\n\n\treturn clone\n\n}\n\nfunction addRendererInfoGui () {\n const {gui} = threeJsVariables;\n let loop;\n\n const params = {\n geometries: 0,\n textures: 0,\n triangles: 0,\n tiles: settingsData.totalTilesCount\n };\n\n const folder = gui.addFolder('Renderer info');\n\n folder.add( params, 'geometries');\n folder.add( params, 'textures');\n folder.add( params, 'triangles');\n folder.add(params,'tiles');\n\n const controllers = threeJsVariables.gui.__folders[\"Renderer info\"].__controllers;\n\n function infoLoop () {\n controllers.forEach(control =>{\n control.object = {\n geometries: threeJsVariables.renderer.info.memory.geometries,\n textures: threeJsVariables.renderer.info.memory.textures,\n triangles: threeJsVariables.renderer.info.render.triangles,\n tiles: settingsData.totalTilesCount\n } ;\n control.updateDisplay();\n });\n\n loop = requestAnimationFrame(infoLoop);\n }\n\n infoLoop();\n}\n\nexport function setStats() {\n if (!isDev && !QA.active) return;\n\n const stats = new Stats();\n stats.dom.style.top = '20px';\n stats.dom.style.left = '7%';\n\n threeJsVariables.stats = stats;\n\n document.body.insertAdjacentElement('afterbegin', stats.dom);\n}\n\n\n\n\n","'use strict';\n\nimport {\n getCurrentLang,\n changeLangToCurrent,\n getCurrentLangDirection,\n} from '../../components/langSwitcher/langSwitcher';\nimport {isDesktop, isMobile, isNoMenu, projectMode, settingsData, UIRoot} from '../../../settings';\nimport {createHtmlElement, getCSSVarValue, rgbaToHexA, RTL_LANGUAGES} from '../../../functions';\nimport { closePages, menuHandler, pageResize, setMenuActive } from '../../menu/menu';\nimport { hideRightNavBar, toggleBackBtnInDesktopMode } from '../../menu/navigation/right-nav-bar';\nimport {\n closePoiInfoWindowCardInOrbit,\n poiOrbitCardSwitchingLang,\n resetOrbitActiveRoute,\n setActiveRouteInOrbitCard,\n} from '../../poi/poiCss';\nimport { renderUpdateValuesOnDemand } from '../../../app';\nimport { transferToBuilding } from '../../threejs/camera';\nimport { desktopErrorIcon } from '../widgets';\nimport { autoRotateTimerAction } from '../../controls/orbitControls';\nimport {Button} from '../../interfaces/buttons/Button';\nimport MarkerClusterer from '@google/markerclustererplus';\nimport { GoogleMaps } from '../../api/GoogleMaps';\nimport { Cloudflare } from '../../api/Cloudflare';\nimport {BaseElement} from \"../../interfaces/BaseElement\";\nimport { BmbyMode } from '../../mode/BmbyMode';\n\nconst canvasClass = 'bmby-poi-wrapp';\nexport let map;\nlet directionsRenderer;\nconst mapData = {};\nlet poiZoom;\nlet lang;\nlet dir;\nlet isPortrait;\nconst styleApi = {};\nlet poiSettings, poiData, poiCategories;\nlet mapmapData, mapMainContainer;\nlet startPoint;\n\nlet swipeMenu;\nlet swipeMiniCard;\nlet clickX;\nlet clickY;\n\n//Dragging listeners\nlet pointStart;\nlet pointMove;\nlet pointUp;\nlet pointStartTouch;\nlet pointMoveTouch;\nlet pointUpTouch;\n\n\n// Dragging variables\nlet active = false;\nlet currentX;\nlet currentY;\nlet initialX;\nlet initialY;\nlet xOffset = 0;\nlet yOffset = 0;\n\n// Home direction icons\nlet topIcon;\nlet topRightIcon;\nlet topLeftIcon;\nlet bottomIcon;\nlet bottomLeftIcon;\nlet bottomRightIcon;\nlet rightIcon;\nlet leftIcon;\nlet mapType = config.features.map?.type || 'roadmap';\n\n//Check error state\nlet apiError = false;\n\nconst query = `?key=${config.googleAPI}`;\n// Fix google API error\n// window.googleScriptLoaded = () => {};\n\nexport async function poiWidgetInit(crm){\n [poiSettings, poiData, poiCategories] = crm;\n\n const mainContainer = createMapPage();\n\n pageResize(mainContainer);\n mapMainContainer = createHtmlElement(mainContainer,'','div',[`${canvasClass}`,'map__container']);\n\n parseStyle();\n\n lang = getCurrentLang();\n dir = getCurrentLangDirection();\n isPortrait = isPortraitMode();\n\n poiZoom = Number(poiSettings.poiZoom);\n\n if(!checkPoiResponse(poiData,poiCategories)){\n showErrorPage();\n apiError = true;\n return;\n }\n\n addPoiToCategory(poiData, poiCategories);\n await initMap(poiSettings, poiData, poiCategories);\n}\n\nexport function createMapPage () {\n let mainContainer = document.querySelector('.widget__container[data-menu-item=\"map\"]');\n if (!mainContainer) {\n mainContainer = createHtmlElement(UIRoot,'','div',['widget__container']);\n mainContainer.dataset.menuItem = 'map';\n mainContainer.style.visibility = 'hidden';\n mainContainer.style.opacity = 0;\n\n if (isNoMenu)\n mainContainer.classList.add('no-menu-mode');\n }\n\n return mainContainer;\n}\n\nfunction parseStyle () {\n styleApi.colors = {};\n config.style.colors.forEach(color=>{\n styleApi.colors[color.key] = color.value;\n });\n}\n\nexport function addPoiWidgetBasicStyle () {\n document.head.innerHTML +='';\n}\n\n// export function addScripts () {\n// return;\n// if (!settingsData.slideShowed) return;\n// if (lang === undefined)\n// lang = getCurrentLang();\n//\n// const markerCluster = isLoadedScript('https://unpkg.com/@google/markerclustererplus@4.0.1/dist/markerclustererplus.min.js');\n// if (!markerCluster)\n// loadScript('https://unpkg.com/@google/markerclustererplus@4.0.1/dist/markerclustererplus.min.js','marker');\n//\n// const mapApi = isLoadedScript('https://maps.googleapis.com/maps/api/js'+query+'&language='+lang);\n// if (!mapApi)\n// loadScript('https://maps.googleapis.com/maps/api/js'+query+'&language='+lang,'maps');\n//\n// const snazzy = isLoadedScript('https://cdn.jsdelivr.net/npm/snazzy-info-window@1.1.1/dist/snazzy-info-window.min.js');\n// if (!snazzy)\n// loadScript('https://cdn.jsdelivr.net/npm/snazzy-info-window@1.1.1/dist/snazzy-info-window.min.js','snazzy');\n// }\n\n// async function loadScript(path,name) {\n// const script = document.createElement('script');\n// script.type ='text/javascript';\n// script.id = name;\n// script.src = path;\n// script.async =false;\n// document.head.appendChild(script);\n// }\n\n// function removeScript (id) {\n// const script = document.head.querySelector(`#${id}`);\n// script && script.remove();\n// }\n\n// export function isLoadedScript(path) {\n// return document.head.querySelectorAll('[src=\"' + path + '\"]').length > 0;\n// }\n\n// export function scriptsChecker () {\n// return;\n// if (window.google === undefined || window.google.maps === undefined )\n// return false;\n//\n// return Boolean(window.MarkerClusterer && Object.keys(window.google?.maps).length && window.Snazzy);\n// }\n\nexport function mapElementStyleToggle (page) {\n if (!isMobile || page?.getAttribute('data-menu-item') !== 'map')\n return;\n\n if (page.classList.contains('show-page'))\n return;\n\n const burger = document.querySelector('.burger__mobile__btn');\n const backBtn = page.querySelector('.widget__container-close');\n\n if (!burger.classList.contains('widget__drop__shadow') && !backBtn?.classList.contains('widget__drop__shadow')){\n burger.classList.add('widget__drop__shadow');\n backBtn?.classList.add('widget__drop__shadow');\n } else {\n burger.classList.remove('widget__drop__shadow');\n backBtn?.classList.remove('widget__drop__shadow');\n }\n}\n\nexport async function initMap (poiSettings, poiData, poiCategories) {\n let mainContainer;\n const widgetContainerExist = document.querySelector('.widget__container[data-menu-item=\"map\"]');\n if (widgetContainerExist) {\n mainContainer = widgetContainerExist;\n } else {\n mainContainer = createHtmlElement(document.body,'','div',['widget__container']);\n mainContainer.dataset.menuItem = 'map';\n mainContainer.style.visibility = 'hidden';\n mainContainer.style.opacity = 0;\n }\n\n if (!document.querySelector(`.${canvasClass}.map__container`))\n mapMainContainer = createHtmlElement(mainContainer,'','div',[`${canvasClass}`,'map__container']);\n\n\n if(!checkPoiResponse(poiData,poiCategories)) {\n showErrorPage();\n return;\n }\n\n mapData.snazzyWindow = [];\n mapData.staticMarkersOnMap=[];\n mapData.filteredMarkers = {};\n mapData.filterResault = [];\n mapData.mapSettings = {\n zoom: 22,\n };\n\n topIcon = generateSvg(await loadIcon('HOME__TOP'),'#1A2F43',styleApi.colors.brand2.split(','),true);\n topLeftIcon = generateSvg(await loadIcon('HOME__TOP__LEFT'),'#1A2F43',styleApi.colors.brand2.split(','),true);\n topRightIcon = generateSvg(await loadIcon('HOME__TOP__RIGHT'),'#1A2F43',styleApi.colors.brand2.split(','),true);\n leftIcon = generateSvg(await loadIcon('HOME__LEFT'),'#1A2F43',styleApi.colors.brand2.split(','),true);\n rightIcon = generateSvg(await loadIcon('HOME__RIGHT'),'#1A2F43',styleApi.colors.brand2.split(','),true);\n bottomIcon = generateSvg(await loadIcon('HOME__BOTTOM'),'#1A2F43',styleApi.colors.brand2.split(','),true);\n bottomLeftIcon = generateSvg(await loadIcon('HOME__BOTTOM__LEFT'),'#1A2F43',styleApi.colors.brand2.split(','),true);\n bottomRightIcon = generateSvg(await loadIcon('HOME__BOTTOM__RIGHT'),'#1A2F43',styleApi.colors.brand2.split(','),true);\n\n // Home Marker data\n mapData.staticMarkers = {\n '0':{\n 'title': poiSettings.title,\n 'lat': Number(poiSettings.latitude),\n 'lng': Number(poiSettings.longitude),\n 'markerIcon': poiSettings.icon || generateSvg(await loadIcon('mainBuilding'),'#C0C0C0','#000000'),\n 'markerText': '',\n },\n };\n\n await preparePoiData(mapData.filteredMarkers,poiCategories);\n\n const mapStyle = [\n {\n featureType: 'poi',\n stylers: [\n { visibility: 'off' },\n ],\n },\n {\n featureType: 'road',\n elementType: 'labels',\n stylers: [\n { visibility: 'on' },\n ],\n },\n {\n 'featureType': 'all',\n 'elementType': 'labels.text.fill',\n 'stylers': [\n // {\n // \"saturation\": 36\n // },\n // {\n // \"color\": \"#333333\"\n // },\n // {\n // \"lightness\": 40\n // }\n ],\n },\n {\n 'featureType': 'all',\n 'elementType': 'labels.text.stroke',\n 'stylers': [\n // {\n // \"visibility\": \"on\"\n // },\n // {\n // \"color\": \"#ffffff\"\n // },\n // {\n // \"lightness\": 16\n // }\n ],\n },\n {\n 'featureType': 'all',\n 'elementType': 'labels.icon',\n 'stylers': [\n {\n 'visibility': 'off',\n },\n ],\n },\n {\n 'featureType': 'administrative',\n 'elementType': 'geometry.fill',\n 'stylers': [\n // {\n // \"color\": \"#fefefe\"\n // },\n // {\n // \"lightness\": 20\n // }\n ],\n },\n {\n 'featureType': 'administrative',\n 'elementType': 'geometry.stroke',\n 'stylers': [\n // {\n // \"color\": \"#fefefe\"\n // },\n // {\n // \"lightness\": 17\n // },\n // {\n // \"weight\": 1.2\n // }\n ],\n },\n {\n 'featureType': 'administrative.neighborhood',\n 'elementType': 'labels',\n 'stylers': [\n {\n 'visibility': 'simplified',\n },\n ],\n },\n {\n 'featureType': 'administrative.land_parcel',\n 'elementType': 'labels',\n 'stylers': [\n {\n 'visibility': 'off',\n },\n ],\n },\n {\n 'featureType': 'landscape',\n 'elementType': 'geometry',\n 'stylers': [\n // {\n // \"color\": \"#f5f5f5\"\n // },\n // {\n // \"lightness\": 20\n // }\n ],\n },\n {\n 'featureType': 'landscape.man_made',\n 'elementType': 'labels',\n 'stylers': [\n {\n 'visibility': 'off',\n },\n ],\n },\n {\n 'featureType': 'poi',\n 'elementType': 'geometry',\n 'stylers': [\n // {\n // \"color\": \"#f5f5f5\"\n // },\n // {\n // \"lightness\": 21\n // }\n ],\n },\n {\n 'featureType': 'poi.park',\n 'elementType': 'geometry',\n 'stylers': [\n // {\n // \"color\": \"#dedede\"\n // },\n // {\n // \"lightness\": 21\n // }\n ],\n },\n {\n 'featureType': 'poi.park',\n 'elementType': 'labels.text',\n 'stylers': [\n {\n 'visibility': 'on',\n },\n ],\n },\n {\n 'featureType': 'road.highway',\n 'elementType': 'geometry.fill',\n 'stylers': [\n // {\n // \"color\": \"#ffffff\"\n // },\n // {\n // \"lightness\": 17\n // }\n ],\n },\n {\n 'featureType': 'road.highway',\n 'elementType': 'geometry.stroke',\n 'stylers': [\n // {\n // \"color\": \"#ffffff\"\n // },\n // {\n // \"lightness\": 29\n // },\n {\n 'weight': 0.2,\n },\n ],\n },\n {\n 'featureType': 'road.arterial',\n 'elementType': 'geometry',\n 'stylers': [\n // {\n // \"color\": \"#ffffff\"\n // },\n // {\n // \"lightness\": 18\n // },\n {\n 'visibility': 'simplified',\n },\n ],\n },\n {\n 'featureType': 'road.local',\n 'elementType': 'geometry',\n 'stylers': [\n // {\n // \"color\": \"#ffffff\"\n // },\n // {\n // \"lightness\": 16\n // },\n {\n 'visibility': 'simplified',\n },\n ],\n },\n {\n 'featureType': 'transit',\n 'elementType': 'geometry',\n 'stylers': [\n // {\n // \"color\": \"#f2f2f2\"\n // },\n // {\n // \"lightness\": 19\n // }\n ],\n },\n {\n 'featureType': 'transit.line',\n 'elementType': 'geometry',\n 'stylers': [\n {\n 'visibility': 'on',\n },\n ],\n },\n {\n 'featureType': 'water',\n 'elementType': 'geometry',\n 'stylers': [\n // {\n // \"color\": \"#e9e9e9\"\n // },\n // {\n // \"lightness\": 17\n // },\n {\n 'visibility': 'on',\n },\n ],\n },\n ];\n\n startPoint = new google.maps.LatLng(mapData.staticMarkers['0'].lat,mapData.staticMarkers['0'].lng);\n mapmapData = {\n zoom: mapData.mapSettings.zoom,\n center: startPoint,\n mapTypeId: mapType,\n mapTypeControl: false,\n streetViewControl: false,\n rotateControl: false,\n styles: mapStyle,\n scrollwheel: true,\n zoomControl: true,\n zoomControlOptions: {\n position: isDesktop ? google.maps.ControlPosition.LEFT_CENTER : getCurrentLangDirection() === 'ltr' ? google.maps.ControlPosition.RIGHT_BOTTOM : google.maps.ControlPosition.LEFT_BOTTOM,\n },\n scaleControl: false,\n fullscreenControl: false,\n gestureHandling : 'greedy',\n };\n\n map = new google.maps.Map(mapMainContainer, mapmapData);\n\n settingsData.mapMarkers = mapData;\n settingsData.mapCenter = startPoint;\n\n directionsRenderer = new google.maps.DirectionsRenderer({\n suppressMarkers: true,\n preserveViewport: true,\n provideRouteAlternatives: true,\n });\n\n directionsRenderer.setMap(map);\n\n // setTimeout(()=>{\n // setMapContainerSize();\n // },100);\n setInitialZoom();\n hideAllDefaultMapLinks();\n addPoiMarkers();\n addPoiClusters();\n addStaticMarkers();\n addMapControls();\n // filterMarkers('none');\n\n const btnGoHome = document.querySelector('.map__go-home__btn');\n btnGoHome.addEventListener('click', ()=> smoothlyAnimatePanTo(map, startPoint));\n\n map.addListener('center_changed', ()=>{\n // closeMenu();\n mapCenterChangeHandler(btnGoHome, startPoint);\n });\n\n map.addListener('click', (e)=>{\n e.stop();\n });\n}\n\nfunction getGoogleMapMainContainer () {\n return map.getDiv().firstElementChild;\n}\n\nexport function setInitialMapCenter () {\n map?.setCenter(startPoint);\n}\n\nfunction addPoiListener (marker) {\n const snazzyInfoWindow = new SnazzyInfoWindow({\n marker: marker,\n wrapperClass: 'snazzy-window',\n closeButtonMarkup: '',\n closeWhenOthersOpen: true,\n closeOnMapClick: false,\n panOnOpen: !isMobile,\n edgeOffset: {\n top: 0,\n right: 0,\n left: 0/*window.innerWidth / 2 - 300*/,\n bottom: 0,\n },\n border: false,\n offset:{\n top: '0px',\n left: '0px',\n },\n callbacks: {\n open: () => openSnazzyInfoWindowHandler(marker, snazzyInfoWindow),\n afterClose: () => resetMapRenderer(),\n afterOpen: () => addCloseListener(snazzyInfoWindow),\n beforeClose: () => clearInfoWindowArray() ,\n },\n });\n\n settingsData.snazzy = snazzyInfoWindow;\n}\n\nfunction setInfoWindowPosition (snazzyInfoWindow) {\n let contentHeight = snazzyInfoWindow._html.content.getBoundingClientRect().height;\n if (contentHeight < 300)\n contentHeight = 428;\n\n const contentWidth = snazzyInfoWindow._html.content.getBoundingClientRect().width;\n // old offset\n // snazzyInfoWindow._opts.offset.top = '-' + (contentHeight + 55) + 'px';\n // (dir === 'ltr') ?\n // snazzyInfoWindow._opts.offset.left = '-' + (contentWidth / 2) + 'px':\n // snazzyInfoWindow._opts.offset.left = (contentWidth / 2) + 'px';\n\n // new offset\n snazzyInfoWindow._opts.offset.left = '0px';\n\n const wrapper = document.querySelector('.si-float-wrapper');\n const ancestor = wrapper.parentElement.parentElement.parentElement;\n ancestor.appendChild(wrapper);\n}\n\nfunction clearInfoWindowArray () {\n mapData.snazzyWindow.splice(0,1);\n const mobileSnazzyContainer = document.querySelector('.mobile__snazzy-window > .snazzy-window');\n if (mobileSnazzyContainer){\n mobileSnazzyContainer.parentElement.classList.remove('open-mobile-card');\n mobileSnazzyContainer.remove();\n }\n changeMenuBtnPosition();\n updateHomeButton();\n resetDragVariables();\n}\n\nfunction addCloseListener (snazzyInfoWindow) {\n const closeBtn = document.querySelector('.custom-close');\n closeBtn.addEventListener('click',() => snazzyInfoWindow.close());\n const container = document.querySelector('.snazzy-content__container');\n container.oncontextmenu = (e)=> { e.preventDefault(); };\n\n mapData.snazzyWindow.push(snazzyInfoWindow);\n}\n\nexport function resetMapRenderer () {\n directionsRenderer.setMap(null);\n resetOrbitActiveRoute();\n}\n\nexport function closePrevInfoWindow () {\n if (mapData.snazzyWindow.length > 0){\n mapData.snazzyWindow[0].close();\n resetDragVariables();\n }\n}\n\nfunction exitFromFullscreenCard () {\n const mainContainer = document.querySelector('.widget__container[data-menu-item=\"map\"]');\n const card = mainContainer.querySelector('.snazzy-content__container.open-mobile-card-fullscreen');\n if (card) {\n card.classList.remove('open-mobile-card-fullscreen');\n const closeBtn = mainContainer.querySelector('.card-fullscreen');\n closeBtn.classList.remove('card-fullscreen');\n const container = mapData.snazzyWindow[0].getWrapper();\n\n if (isPortraitMode()){\n const titleContainer = container.querySelector('.snazzy-content__title-container').getBoundingClientRect().height;\n const infoContainer = container.querySelector('.snazzy-content__container-info').getBoundingClientRect().height;\n let btnHeight = mainContainer.querySelector('.snazzy-contnet__btns-container').getBoundingClientRect().height;\n const photoHeight = mainContainer.querySelector('.snazzy-content__photo-container').getBoundingClientRect().height;\n if (btnHeight === 0) btnHeight = 40;\n card.style.maxHeight = titleContainer + photoHeight + infoContainer + btnHeight + 'px';\n card.style.width = '100%';\n // setSwipeMiniCard(marker);\n } else {\n card.style.maxWidth = '358px';\n }\n }\n}\n\nexport function openSnazzyInfoWindowHandler (marker, snazzyInfoWindow,parameters ={}) {\n closePrevInfoWindow(); // If other InfoWindow is opened.\n // closePoiInfoWindowCardInOrbit(false,false);\n let createdInfoWindowContent;\n const mobileSnazzyContainer = document.querySelector('.mobile__snazzy-window');\n\n if (isMobile){\n menuBtnHandler(document.querySelector('.mobile__menu-container.open-mobile-menu'));\n createdInfoWindowContent = buildInfoWindowMobileContent(marker,false,parameters);\n snazzyInfoWindow.setContent(createdInfoWindowContent);\n const wrapper = snazzyInfoWindow.getWrapper();\n mobileSnazzyContainer.append(wrapper);\n openMiniCard(mobileSnazzyContainer);\n map.panTo(marker.getPosition());\n\n setSwipeMiniCard(marker);\n\n } else {\n createdInfoWindowContent = buildInfoWindowContent(marker,false,parameters);\n snazzyInfoWindow.setContent(createdInfoWindowContent);\n const wrapper = snazzyInfoWindow.getWrapper();\n\n pointStart = google.maps.event.addDomListener(wrapper, 'mousedown', (e) => dragStart(e,wrapper));\n pointMove = google.maps.event.addDomListener(wrapper, 'mousemove', (e) => drag(e,wrapper));\n pointUp = google.maps.event.addDomListener(wrapper, 'mouseup', (e) => dragEnd(e,wrapper));\n pointStartTouch = google.maps.event.addDomListener(wrapper, 'touchstart', (e) => dragStart(e,wrapper));\n pointMoveTouch = google.maps.event.addDomListener(wrapper, 'touchmove', (e) => drag(e,wrapper));\n pointUpTouch = google.maps.event.addDomListener(wrapper, 'touchend', (e) => dragEnd(e,wrapper));\n\n setInfoWindowPosition(snazzyInfoWindow);\n\n loadPlacePhoto(marker);\n }\n}\n\nfunction resetDragVariables () {\n currentX = 0;\n currentY = 0;\n initialX = 0;\n initialY = 0;\n xOffset = 0;\n yOffset = 0;\n active = false;\n\n pointStart && google.maps.event.removeListener(pointStart);\n pointMove && google.maps.event.removeListener(pointMove);\n pointUp && google.maps.event.removeListener(pointUp);\n pointStartTouch && google.maps.event.removeListener(pointStartTouch);\n pointMoveTouch && google.maps.event.removeListener(pointMoveTouch);\n pointUpTouch && google.maps.event.removeListener(pointUpTouch);\n}\n\nexport function dragStart(e,wrapper) {\n if (isMobile)\n return;\n\n map.setOptions({draggable: false});\n\n if (e.type === 'touchstart'){\n initialX = e.touches[0].clientX - xOffset;\n initialY = e.touches[0].clientY - yOffset;\n clickX = e.touches[0].clientX;\n clickY = e.touches[0].clientY;\n active = true;\n\n document.ontouchmove = (e)=>drag(e,wrapper);\n wrapper.onclick = (e) => {\n e.preventDefault();\n };\n\n } else {\n initialX = e.clientX - xOffset;\n initialY = e.clientY - yOffset;\n clickX = e.clientX;\n clickY = e.clientY;\n active = true;\n\n document.onmousemove = (e)=>drag(e,wrapper);\n wrapper.onclick = (e) => {\n e.preventDefault();\n };\n }\n}\n\nexport function dragEnd(e,wrapper) {\n if (isMobile)\n return;\n\n map.setOptions({draggable: true});\n\n initialX = currentX;\n initialY = currentY;\n\n active = false;\n document.onmousemove = null;\n document.ontouchmove = null;\n\n if (e.clientX === clickX && e.clientY === clickY)\n wrapper.onclick = null;\n}\n\nexport function drag(e,wrapper) {\n if (isMobile)\n return;\n\n if (active) {\n e.preventDefault();\n\n if (e.type === 'touchmove') {\n currentX = e.touches[0].clientX - initialX;\n currentY = e.touches[0].clientY - initialY;\n } else {\n currentX = e.clientX - initialX;\n currentY = e.clientY - initialY;\n }\n\n xOffset = currentX;\n yOffset = currentY;\n\n setTranslate(currentX, currentY, wrapper);\n }\n}\n\nfunction setTranslate(xPos, yPos, el) {\n el.style.transform = 'translate3d(' + xPos + 'px, ' + yPos + 'px, 0)';\n}\n\nfunction setSwipeMiniCard (marker) {\n if (BmbyMode.active)\n return;\n if (!marker) {\n if (mapData.snazzyWindow?.length){\n marker = mapData.snazzyWindow[0]._marker;\n } else {\n return;\n }\n } else {\n swipeMiniCard = new Swipe('.snazzy-window')\n if (!swipeMiniCard)\n console.log('%cNo swipeMiniCard is present');\n }\n\n if (isPortrait){\n swipeMiniCard?.stop();\n swipeMiniCard?.onDown(()=> closeMobileMarkerCard());\n swipeMiniCard?.onUp(()=> openMiniCardFullscreen(marker));\n swipeMiniCard?.run();\n } else {\n switch (dir) {\n case 'rtl':\n swipeMiniCard?.stop();\n swipeMiniCard?.onLeft(()=> closeMobileMarkerCard());\n swipeMiniCard?.onRight(()=> openMiniCardFullscreen(marker));\n swipeMiniCard?.run();\n break;\n case 'ltr':\n swipeMiniCard?.stop();\n swipeMiniCard?.onLeft(()=> openMiniCardFullscreen(marker));\n swipeMiniCard?.onRight(()=> closeMobileMarkerCard());\n swipeMiniCard?.run();\n break;\n }\n }\n}\n\nfunction loadPlacePhoto (marker,imgElement) {\n if (!marker?.data?.sendPhotoRequest && marker?.data?.googleMapsID){\n const placePhoto = getPlacePhoto(marker,{maxHeight: 255, maxWidth: 255});\n placePhoto.then((url) => {\n marker.data.infoWindowImg = url;\n const img = imgElement || document.querySelector('.snazzy-content__img');\n img.src = url;\n });\n }\n}\n\nexport function openMiniCardFullscreen (marker,orbit = false) {\n let snazzyContent, snazzyWindow;\n if (orbit){\n snazzyContent = document.querySelector('.poi__info-window').querySelector('.snazzy-content__container');\n } else {\n snazzyContent = document.querySelector('.widget__container[data-menu-item=\"map\"]').querySelector('.snazzy-content__container');\n snazzyWindow = document.querySelector('.snazzy-window');\n }\n\n // const snazzyContent = document.querySelector('.snazzy-content__container');\n\n snazzyWindow && snazzyWindow.classList.add('card-fullscreen');\n snazzyContent && snazzyContent.classList.add('open-mobile-card-fullscreen');\n setMobileFullscreenCardSize(orbit);\n\n if (!orbit){\n swipeMiniCard.onDown = ()=>{};\n loadPlacePhoto(marker);\n }\n}\n\nexport function setMobileFullscreenCardSize (orbit) {\n if (BmbyMode.active)\n return;\n\n let snazzyContent;\n // orbit ?\n // snazzyContent = document.querySelector('.poi__info-window').querySelector('.snazzy-content__container.open-mobile-card-fullscreen'):\n // snazzyContent = document.querySelector('.widget__container[data-menu-item=\"map\"]').querySelector('.snazzy-content__container.open-mobile-card-fullscreen');\n\n orbit ?\n snazzyContent = document.querySelector('.poi__info-window .snazzy-content__container.open-mobile-card-fullscreen'):\n snazzyContent = document.querySelector('.widget__container[data-menu-item=\"map\"] .snazzy-content__container.open-mobile-card-fullscreen');\n\n let value = settingsData.isLandscape ? 0 : 13;\n // let top = orbit ? value : settingsData.widgetsPaddingTop;\n let top = orbit ? value : 0;\n\n if (!settingsData.isLandscape) {\n if (snazzyContent) {\n snazzyContent.style.maxHeight = window.innerHeight - top - 40 + 'px';\n snazzyContent.style.height = window.innerHeight - top + 'px';\n snazzyContent.style.width = 'unset';\n }\n } else {\n if (snazzyContent){\n // snazzyContent.style.maxWidth = window.innerWidth + 1 - 50 + 'px';\n // snazzyContent.style.height = window.innerHeight - top + 'px';\n // snazzyContent.style.width = window.innerWidth + 1 + 'px';\n snazzyContent.style.maxWidth = `${window.innerWidth + 1 - 50}px`;\n snazzyContent.style.height = `${window.innerHeight - top}px`;\n snazzyContent.style.width = `${window.innerWidth + 1 - 50}px`;\n }\n }\n}\n\nfunction closeMobileMarkerCard () {\n const closeCardPromise = closeCardSmoothly('.si-content > .snazzy-content__container.open-mobile-card-fullscreen','open-mobile-card-fullscreen');\n const closeMiniCardPromise = closeCardSmoothly('.mobile__snazzy-window.open-mobile-card','open-mobile-card');\n\n const whenAllAnimated = Promise.all([closeCardPromise,closeMiniCardPromise]);\n whenAllAnimated.then(()=> closePrevInfoWindow());\n}\n\nfunction closeCardSmoothly (containerWithClass, classRemove ) {\n return new Promise(resolve =>{\n const openedMiniCard = document.querySelector(containerWithClass);\n if (!openedMiniCard)\n resolve();\n\n openedMiniCard.classList.remove(classRemove);\n changeMenuBtnPosition();\n updateHomeButton();\n setTimeout(()=>{\n resolve();\n },500);\n });\n}\n\nexport async function getPlacePhoto (marker,photoOpt) {\n const request = {\n placeId: (marker.data) ? marker.data.googleMapsID : marker.googleMapsID,\n fields: ['photos'],\n };\n\n if (!request.placeId)\n return '/img/icons/poi/POI__PLUG.jpg';\n\n const service = new google.maps.places.PlacesService(map);\n\n return new Promise( (resolve) => {\n service.getDetails(request, (result,status) =>{\n if (status === google.maps.places.PlacesServiceStatus.OK){\n if (marker.data)\n marker.data.sendPhotoRequest = true;\n\n const photos = result.photos;\n if (photos) {\n if (photoOpt){\n resolve(result.photos[0].getUrl({\n maxHeight: photoOpt.maxHeight,\n maxWidth: photoOpt.maxWidth,\n }));\n } else {\n resolve(result.photos[0].getUrl());\n }\n } else if (marker.data) {\n resolve('/img/icons/poi/POI__PLUG.jpg');\n } else {\n resolve('');\n }\n } else {\n showMsg('Can not get the photo.');\n resolve('/img/icons/poi/POI__PLUG.jpg');\n }\n });\n });\n}\n\nexport function getRoute (marker, travelMode) {\n const request = {\n origin: new google.maps.LatLng(mapData.staticMarkers['0'].lat,mapData.staticMarkers['0'].lng),\n destination: marker.getPosition(),\n travelMode,\n };\n\n const service = new google.maps.DirectionsService();\n\n return new Promise((resolve) => {\n service.route(request, (result,status) =>{\n if (status === 'OK'){\n marker.data.routeResponce[travelMode] = result;\n resolve(result);\n } else {\n showMsg('Can not get the route');\n }\n });\n });\n}\n\nexport function buildInfoWindowMobileContent (marker,orbit = false,parameters = {}) {\n const routeData = convertMarkerDistanceAndTime(marker);\n const mainContainer = createHtmlElement('','','div',['snazzy-content__container']);\n if (orbit){\n //const closeBtn = createHtmlElement(mainContainer,'','div',['poi__info-window__close']);\n //closeBtn.addEventListener('click',()=>closePoiInfoWindowCardInOrbit(false));\n createCloseButton(mainContainer);\n }\n // const infoBlock = createHtmlElement(mainContainer,'','div',['snazzy-content__info-block']);\n\n const titleContainer = createHtmlElement(mainContainer,'','div',['snazzy-content__title-container']);\n const mainContent = createHtmlElement(mainContainer,'','div',['snazzy-content__container-info']);\n const photoContainer = createHtmlElement(mainContainer,'','div',['snazzy-content__photo-container']);\n const img = createHtmlElement(photoContainer,'','img',['snazzy-content__img']);\n loadPlacePhoto(marker,img);\n const url = marker.data.customImage || marker.data.infoWindowImg;\n img.src = Cloudflare.resize(url,{width: 300});\n !orbit && loadPlacePhoto(marker);\n const wrapper = createHtmlElement(mainContent,'','div',['snazzy-content__info-wrapper']);\n\n createHtmlElement(titleContainer,marker.title,'h3',['snazzy-content__title']);\n\n const categoryContainer = createHtmlElement(titleContainer,'','div',['snazzy-content__category-container']);\n const categoryImageContainer = createHtmlElement(categoryContainer,'','div',['snazzy-content__category-img__container']);\n const categoryImg = createHtmlElement(categoryImageContainer,'','img',['snazzy-content__category-img']);\n // categoryImg.src = generateSvg(marker.data.categoryIconMenuName,'white','white',false);\n categoryImg.src = marker.category_ic;\n createHtmlElement(categoryContainer,marker.category,'span',['snazzy-content__category-title']);\n createHtmlElement(wrapper,marker.data.markerDescription,'p',['snazzy-content__description']);\n if (!isDisableRoutesOnMap()) {\n const routeWrapper = createHtmlElement(wrapper,'','div',['snazzy-content__route-container']);\n routeWrapper.addEventListener('click', (e)=> routesHandler(marker,e.target,orbit));\n\n let isActiveRoute = false;\n //WALK\n let walkRouteContainer;\n const walkingTime = parseInt(routeData.timeToPoint.WALKING, 10);\n if (walkingTime <= 30 && walkingTime !== 0) {\n walkRouteContainer = createHtmlElement(routeWrapper, '', 'div', ['snazzy-content__walk-route-container', 'route', 'icon-walkin']);\n if (!orbit && !parameters.hasOwnProperty('activeRoute') && !isActiveRoute) {\n routeWrapper.dataset.selectedRoute = 'WALKING';\n walkRouteContainer.classList.add('active-route');\n isActiveRoute = true;\n }\n walkRouteContainer.dataset.routeType = 'WALKING';\n const timeWalk = createHtmlElement(walkRouteContainer, routeData.timeToPoint.WALKING + ' ' + changeLangToCurrent('mins'), 'span', ['snazzy-content__time-route']);\n timeWalk.dataset.routeType = 'WALKING';\n }\n\n //BIKE\n let bikeRouteContainer;\n if (parseInt(routeData.timeToPoint.BICYCLING, 10) !== 0) {\n bikeRouteContainer = createHtmlElement(routeWrapper,'','div',['snazzy-content__bike-route-container','route','icon-bike']);\n if (!orbit && !parameters.hasOwnProperty('activeRoute') && !isActiveRoute) {\n routeWrapper.dataset.selectedRoute = 'BICYCLING';\n bikeRouteContainer.classList.add('active-route');\n isActiveRoute = true;\n }\n bikeRouteContainer.dataset.routeType = 'BICYCLING';\n const timeBike = createHtmlElement(bikeRouteContainer,routeData.timeToPoint.BICYCLING +' '+ changeLangToCurrent('mins'),'span',['snazzy-content__time-route']);\n timeBike.dataset.routeType = 'BICYCLING';\n }\n\n // CAR\n let carRouteContainer;\n if (parseInt(routeData.timeToPoint.DRIVING, 10) !== 0) {\n carRouteContainer = createHtmlElement(routeWrapper, '', 'div', ['snazzy-content__car-route-container', 'route', 'icon-car1']);\n if (!orbit && !parameters.hasOwnProperty('activeRoute') && !isActiveRoute) {\n routeWrapper.dataset.selectedRoute = 'DRIVING';\n carRouteContainer.classList.add('active-route');\n isActiveRoute = true;\n }\n carRouteContainer.dataset.routeType = 'DRIVING';\n const timeCar = createHtmlElement(carRouteContainer, routeData.timeToPoint.DRIVING + ' ' + changeLangToCurrent('mins'), 'span', ['snazzy-content__time-route']);\n timeCar.dataset.routeType = 'DRIVING';\n }\n\n if (parameters.hasOwnProperty('activeRoute')){\n routeWrapper.dataset.selectedRoute = parameters['activeRoute'];\n switch (routeWrapper.dataset.selectedRoute) {\n case 'WALKING':\n walkRouteContainer?.classList.add('active-route');\n break;\n case 'BICYCLING':\n bikeRouteContainer?.classList.add('active-route');\n break;\n case 'DRIVING':\n carRouteContainer?.classList.add('active-route');\n break;\n }\n }\n\n !orbit && navigateBtnHandler(marker, routeWrapper.dataset.selectedRoute);\n }\n\n const socialContainer = createHtmlElement(wrapper,'','div',['snazzy-content__social-container']);\n createHtmlElement(socialContainer,marker.data.address,'span',['snazzy-content__address']);\n if (marker.data.webSiteUrl){\n // const miniUrl = minimizeUrl(marker.data.webSiteUrl);\n const webUrl = createHtmlElement(socialContainer,changeLangToCurrent('Website'),'a',['snazzy-content__website-link']);\n webUrl.href = marker.data.webSiteUrl;\n webUrl.target = '_blank';\n }\n if (marker.data.phone && (typeof marker.data.phone !== 'object')){\n const phone = createHtmlElement(socialContainer,marker.data.phone,'a',['snazzy-content__phone']);\n if (RTL_LANGUAGES.includes(lang))\n phone.classList.add('phone__normalize');\n\n phone.href = 'tel:'+ marker.data.phone;\n }\n // if (marker.data.internationalPhone){\n // const internationalPhone = createHtmlElement(socialContainer,marker.data.internationalPhone,'a',['snazzy-content__international-phone']);\n // if (RTL_LANGUAGES.includes(lang)){\n // internationalPhone.classList.add('phone__normalize');\n // }\n // internationalPhone.href = 'tel:'+ marker.data.internationalPhone;\n // }\n if (marker.data.customPhone){\n const customPhone = createHtmlElement(socialContainer,marker.data.customPhone,'a',['snazzy-content__custom-phone']);\n if (RTL_LANGUAGES.includes(lang))\n customPhone.classList.add('phone__normalize');\n\n customPhone.href = 'tel:'+ marker.data.customPhone;\n }\n\n const btnsContainer = createHtmlElement(mainContainer,'','div',['snazzy-contnet__btns-container', 'hidden']);\n // const navigateBtn = createHtmlElement(btnsContainer,changeLangToCurrent('Navigate'),'button',['snazzy-content__navigate-btn','button']);\n // navigateBtn.addEventListener('click', () => navigateBtnHandler(marker, routeIconsContainer.dataset.selectedRoute));\n\n\n const isStreetViewActive = marker.data['360'];\n if (isStreetViewActive) {\n const streetViewBtn = createHtmlElement(\n btnsContainer,\n changeLangToCurrent('Street view'),\n 'button',\n ['snazzy-content__street-view', 'button'],\n );\n streetViewBtn.addEventListener('click', () =>\n streetViewHandler(marker, orbit),\n );\n }\n\n if (parameters.hasOwnProperty('addBackBtn')){\n const backBtn = createHtmlElement(btnsContainer,changeLangToCurrent('Back'),'button',['snazzy-content__back-btn','button','icon-right']);\n backBtn.addEventListener('click', ()=>{\n closePages();\n setMenuActive('3dModel');\n closePrevInfoWindow();\n resetMapRenderer();\n smoothlyAnimatePanTo(map, settingsData.mapCenter);\n });\n }\n\n getStreetViewData(marker);\n\n return mainContainer;\n}\n\nexport function buildInfoWindowContent (marker,orbit = false,parameters = {}) {\n const routeData = convertMarkerDistanceAndTime(marker);\n const mainContainer = createHtmlElement('','','div',['snazzy-content__container']);\n\n if (orbit){\n //const closeBtn = createHtmlElement(mainContainer,'','div',['poi__info-window__close']);\n //closeBtn.addEventListener('click',()=>closePoiInfoWindowCardInOrbit(true));\n createCloseButton(mainContainer);\n }\n\n const photoContainer = createHtmlElement(mainContainer,'','div',['snazzy-content__photo-container']);\n const img = createHtmlElement(photoContainer,'','img',['snazzy-content__img']);\n loadPlacePhoto(marker,img);\n const url = marker.data.customImage || marker.data.infoWindowImg;\n img.src = Cloudflare.resize(url,{width: 300});\n const infoWrapper = createHtmlElement(mainContainer,'','div',['snazzy-content__info-wrapper']);\n createHtmlElement(infoWrapper,marker.title,'h3',['snazzy-content__title']);\n const categoryContainer = createHtmlElement(infoWrapper,'','div',['snazzy-content__category-container']);\n const categoryImageContainer = createHtmlElement(categoryContainer,'','div',['snazzy-content__category-img__container']);\n const categoryImg = createHtmlElement(categoryImageContainer,'','img',['snazzy-content__category-img']);\n // categoryImg.src = generateSvg(marker.data.categoryIconMenuName,'white','white',false);\n categoryImg.src = marker.category_ic;\n createHtmlElement(categoryContainer,marker.category,'span',['snazzy-content__category-title']);\n // categoryTitle.style.color = marker.color;\n createHtmlElement(infoWrapper,marker.data.markerDescription,'p',['snazzy-content__description']);\n if (!isDisableRoutesOnMap()) {\n const routeWrapper = createHtmlElement(infoWrapper,'','div',['snazzy-content__route-container']);\n routeWrapper.addEventListener('click', (e) => {routesHandler(marker, e.target, orbit)});\n\n let isActiveRoute = false;\n //WALK\n let walkRouteContainer;\n const walkingTime = parseInt(routeData.timeToPoint.WALKING, 10);\n if (walkingTime <= 30 && walkingTime !== 0) {\n walkRouteContainer = createHtmlElement(routeWrapper, '', 'div', ['snazzy-content__walk-route-container', 'route', 'icon-walkin']);\n if (!orbit && !parameters.hasOwnProperty('activeRoute') && !isActiveRoute) {\n routeWrapper.dataset.selectedRoute = 'WALKING';\n walkRouteContainer.classList.add('active-route');\n isActiveRoute = true;\n }\n walkRouteContainer.dataset.routeType = 'WALKING';\n const timeWalk = createHtmlElement(walkRouteContainer, routeData.timeToPoint.WALKING + ' ' + changeLangToCurrent('mins'), 'span', ['snazzy-content__time-route']);\n timeWalk.dataset.routeType = 'WALKING';\n }\n\n // BIKE\n let bikeRouteContainer;\n if (parseInt(routeData.timeToPoint.BICYCLING, 10) !== 0) {\n bikeRouteContainer = createHtmlElement(routeWrapper,'','div',['snazzy-content__bike-route-container','route','icon-bike']);\n if (!orbit && !parameters.hasOwnProperty('activeRoute') && !isActiveRoute) {\n routeWrapper.dataset.selectedRoute = 'BICYCLING';\n bikeRouteContainer.classList.add('active-route');\n isActiveRoute = true;\n }\n bikeRouteContainer.dataset.routeType = 'BICYCLING';\n const timeBike = createHtmlElement(bikeRouteContainer,routeData.timeToPoint.BICYCLING +' '+ changeLangToCurrent('mins'),'span',['snazzy-content__time-route']);\n timeBike.dataset.routeType = 'BICYCLING';\n }\n\n // CAR\n let carRouteContainer;\n if (parseInt(routeData.timeToPoint.DRIVING, 10) !== 0) {\n carRouteContainer = createHtmlElement(routeWrapper, '', 'div', ['snazzy-content__car-route-container', 'route', 'icon-car1']);\n if (!orbit && !parameters.hasOwnProperty('activeRoute') && !isActiveRoute) {\n routeWrapper.dataset.selectedRoute = 'DRIVING';\n carRouteContainer.classList.add('active-route');\n isActiveRoute = true;\n }\n carRouteContainer.dataset.routeType = 'DRIVING';\n const timeCar = createHtmlElement(carRouteContainer, routeData.timeToPoint.DRIVING + ' ' + changeLangToCurrent('mins'), 'span', ['snazzy-content__time-route']);\n timeCar.dataset.routeType = 'DRIVING';\n }\n\n if (parameters.hasOwnProperty('activeRoute')){\n routeWrapper.dataset.selectedRoute = parameters['activeRoute'];\n switch (routeWrapper.dataset.selectedRoute) {\n case 'WALKING':\n walkRouteContainer?.classList.add('active-route');\n break;\n case 'BICYCLING':\n bikeRouteContainer?.classList.add('active-route');\n break;\n case 'DRIVING':\n carRouteContainer?.classList.add('active-route');\n break;\n }\n }\n\n !orbit && navigateBtnHandler(marker, routeWrapper.dataset.selectedRoute);\n }\n\n\n const socialContainer = createHtmlElement(infoWrapper,'','div',['snazzy-content__social-container']);\n createHtmlElement(socialContainer,marker.data.address,'span',['snazzy-content__address']);\n\n if (marker.data.webSiteUrl){\n const miniUrl = minimizeUrl(marker.data.webSiteUrl);\n const webUrl = createHtmlElement(socialContainer,miniUrl,'a',['snazzy-content__website-link']);\n webUrl.href = marker.data.webSiteUrl;\n webUrl.target = '_blank';\n }\n if (marker.data.phone && (typeof marker.data.phone !== 'object')){\n const phone = createHtmlElement(socialContainer,marker.data.phone,'a',['snazzy-content__phone']);\n if (RTL_LANGUAGES.includes(lang))\n phone.classList.add('phone__normalize');\n\n phone.href = 'tel:'+ marker.data.phone;\n }\n // if (marker.data.internationalPhone){\n // const internationalPhone = createHtmlElement(socialContainer,marker.data.internationalPhone,'a',['snazzy-content__international-phone']);\n // if (RTL_LANGUAGES.includes(lang)){\n // internationalPhone.classList.add('phone__normalize');\n // }\n // internationalPhone.href = 'tel:'+ marker.data.internationalPhone;\n // }\n if (marker.data.customPhone){\n const customPhone = createHtmlElement(socialContainer,marker.data.customPhone,'a',['snazzy-content__custom-phone']);\n if (RTL_LANGUAGES.includes(lang))\n customPhone.classList.add('phone__normalize');\n\n customPhone.href = 'tel:'+ marker.data.customPhone;\n }\n\n const btnsContainer = createHtmlElement(mainContainer,'','div',['snazzy-contnet__btns-container', 'hidden']);\n // const navigateBtn = createHtmlElement(btnsContainer,changeLangToCurrent('Navigate'),'button',['snazzy-content__navigate-btn','button']);\n // navigateBtn.addEventListener('click', () => navigateBtnHandler(marker, routeIconsContainer.dataset.selectedRoute));\n\n const isStreetViewActive = marker.data['360'];\n if (isStreetViewActive) {\n const streetViewBtn = createHtmlElement(\n btnsContainer,\n changeLangToCurrent('Street view'),\n 'button',\n ['snazzy-content__street-view', 'button'],\n );\n streetViewBtn.addEventListener('click', () =>\n streetViewHandler(marker, orbit),\n );\n }\n\n if (parameters.hasOwnProperty('addBackBtn')){\n const backBtn = createHtmlElement(btnsContainer,changeLangToCurrent('Back'),'button',['snazzy-content__back-btn','button','icon-right']);\n backBtn.addEventListener('click', ()=>{\n closePages();\n setMenuActive('3dModel');\n projectMode.Pagination.paginate({source: 'cardsBackButton'});\n // showHideButtonPlay('show');\n toggleBackBtnInDesktopMode('hide');\n closePrevInfoWindow();\n resetMapRenderer();\n smoothlyAnimatePanTo(map, settingsData.mapCenter);\n });\n }\n getStreetViewData(marker);\n\n return mainContainer;\n}\n\nconst createCloseButton = (parent) => {\n new Button()\n .addClass('poi__info-window__close-button', 'close-button-cross')\n .event('click', closePoiInfoWindowCardInOrbit.bind(this, true))\n .appendTo(parent);\n};\n\nfunction isDisableRoutesOnMap () {\n return Boolean(config.features.disableRoutesOnMap);\n}\n\nfunction streetViewHandler (marker,orbit) {\n (orbit) ?\n getStreetPanorama(marker,undefined,orbit):\n getStreetPanorama(marker,'panorama',orbit);\n}\n\nfunction minimizeUrl (url) {\n const [protocol,,link] = url.split('/');\n return protocol+'//'+link;\n}\n\nfunction routesHandler (marker,selectedRoute,orbit) {\n if (selectedRoute.dataset.routeType){\n let route;\n selectedRoute.classList.contains('route') ?\n route = selectedRoute:\n route = selectedRoute.parentElement;\n\n route.dataset.selectedRoute = selectedRoute.dataset.routeType;\n\n resetOrbitActiveRoute();\n resetMapActiveRoute();\n route.classList.add('active-route');\n\n setActiveRouteInOrbitCard(route.dataset.selectedRoute);\n\n navigateBtnHandler(marker, route.dataset.selectedRoute);\n if (orbit){\n if (settingsData.mapMarkers.snazzyWindow.length)\n closePrevInfoWindow();\n\n menuHandler({target: {dataset: {menuItem: 'map'}}},config.general);\n\n settingsData.snazzy._marker = marker;\n settingsData.snazzy._opts.marker = marker;\n settingsData.snazzy._callbacks.open = () => openSnazzyInfoWindowHandler(marker,settingsData.snazzy,{\n activeRoute: route.dataset.selectedRoute,\n addBackBtn: true,\n });\n\n isMobile && map.panTo(marker.getPosition());\n settingsData.snazzy.open();\n\n } else if (isMobile && !orbit) {\n const whichCard = whichCardIsOpen();\n if (whichCard === 'fullscreen')\n exitFromFullscreenCard();\n }\n }\n}\n\nfunction resetMapActiveRoute () {\n const mapContainer = document.querySelector(`.widget__container[data-menu-item=\"map\"]`);\n if (mapContainer){\n const activeRoute = mapContainer.querySelector('.route.active-route');\n activeRoute && activeRoute.classList.remove('active-route');\n }\n}\n\nfunction whichCardIsOpen () {\n const mainContainer = document.querySelector('.widget__container[data-menu-item=\"map\"]');\n const isCardFullscreen = mainContainer.querySelector('.snazzy-content__container.open-mobile-card-fullscreen');\n const isMiniCardOpen = mainContainer.querySelector('.mobile__snazzy-window.open-mobile-card');\n\n if (isCardFullscreen)\n return 'fullscreen' ;\n\n if (isMiniCardOpen)\n return 'mini';\n\n return false;\n}\n\n// function setNewRoute (selectedRoute, routeDistance, routeTime) {\n// const routeTimeElement = document.querySelector('.snazzy-content__time-route');\n// const routeDistanceElement = document.querySelector('.snazzy-content__distance-route');\n// routeTimeElement.textContent = routeTime + ' ' + changeLangToCurrent('mins');\n// routeDistanceElement.textContent = routeDistance + ' '+changeLangToCurrent('km');\n// selectedRoute.classList.add('active-route');\n// }\n\nfunction navigateBtnHandler (marker, travelMode) {\n if (isDisableRoutesOnMap())\n return;\n // const btn = document.querySelector('.snazzy-content__navigate-btn');\n // if (btn.classList.contains('navigate__active')){\n // changeNavigateBtn();\n // resetMapRenderer();\n // return;\n // }\n directionsRenderer.setMap(map);\n\n const isRouteExist = marker.data.routeResponce[travelMode];\n if (!isRouteExist){\n const route = getRoute(marker,travelMode);\n route.then((dataRoute) =>{\n directionsRenderer.setDirections(dataRoute);\n changeNavigateBtn();\n // isMobile && exitFromFullscreenCard(marker);\n });\n } else {\n directionsRenderer.setDirections(isRouteExist);\n changeNavigateBtn();\n // isMobile && exitFromFullscreenCard(marker);\n }\n}\n\nfunction changeNavigateBtn () {\n const btn = document.querySelector('.snazzy-content__navigate-btn');\n if (btn)\n btn.classList.toggle('navigate__active');\n}\n\nfunction convertMarkerDistanceAndTime (marker) {\n return {\n distanceToPoint: {\n 'BICYCLING': Number((marker.data.distanceToPoint.bike / 1000).toFixed(1)),\n 'DRIVING': Number((marker.data.distanceToPoint.drive / 1000).toFixed(1)),\n 'WALKING': Number((marker.data.distanceToPoint.walk / 1000).toFixed(1)),\n },\n timeToPoint: {\n 'BICYCLING': Math.round(Number(marker.data.timeToPoint.bike) / 60),\n 'DRIVING': Math.round(Number(marker.data.timeToPoint.drive) / 60),\n 'WALKING': Math.round(Number(marker.data.timeToPoint.walk) / 60),\n },\n };\n}\n\nfunction addPoiClusters () {\n let allMarkersForCluster = [];\n\n Object.values(mapData.allPoiMarkers).forEach(markers =>{\n allMarkersForCluster = allMarkersForCluster.concat(markers);\n });\n\n const clusterObj = {\n url: generateSvgCluster(styleApi.colors.brand2.split(','),true),\n textColor: 'white',\n textSize: 20,\n width: 34,\n height: 32,\n };\n const clustermapData = {\n ignoreHidden: true,\n styles: [\n clusterObj,\n clusterObj,\n clusterObj,\n clusterObj,\n clusterObj,\n ],\n };\n\n mapData.clusters = new MarkerClusterer(map, allMarkersForCluster, clustermapData);\n}\n\nfunction addStaticMarkers () {\n Object.values(mapData.staticMarkers).forEach(marker =>{\n const staticMarker = new StaticMarker(map,marker);\n mapData.staticMarkersOnMap.push(staticMarker);\n });\n}\n\nexport const centerMarker = ()=>{\n if (mapData?.staticMarkersOnMap?.length!==0)\n map?.setCenter(mapData.staticMarkersOnMap[0].getPosition());\n};\n\nfunction addPoiMarkers () {\n mapData.allPoiMarkers = {};\n mapData.allPoiMarkersWithoutCategory = [];\n Object.entries(mapData.filteredMarkers).forEach(([category,markers]) =>{\n mapData.allPoiMarkers[category] = [];\n markers.forEach(marker =>{\n const buildedMarker = addMarker(marker);\n buildedMarker.data = {\n '360': marker['360'],\n 'address': marker.address,\n 'distanceToPoint': marker.distanceToPoint,\n 'timeToPoint': marker.timeToPoint,\n 'phone': marker.phone,\n 'customPhone': marker.customPhone,\n 'customImage': marker.customImage,\n 'googleMapsID': marker.googleMapsID,\n 'internationalPhone': marker.internationalPhone,\n 'webSiteUrl': marker.webSiteUrl,\n 'infoWindowImg': marker.infoWindowImg,\n 'markerDescription': marker.markerDescription,\n 'sendPhotoRequest': marker.customImage ? true : marker.sendPhotoRequest,\n 'panoramaError': marker.panoramaError,\n 'routeResponce': marker.routeResponce,\n 'categoryIconMenuName': marker.categoryIconMenuName,\n };\n addPoiListener(buildedMarker);\n mapData.allPoiMarkers[category].push(buildedMarker);\n mapData.allPoiMarkersWithoutCategory.push(buildedMarker);\n });\n });\n}\n\nfunction addMarker (marker, staticLabelPosY, zIndex = 1, addLongClass = true ) {\n const title = marker.title;\n const labelPosY = title.length > 15 ? staticLabelPosY || 65 : staticLabelPosY || 55;\n const pos = new google.maps.LatLng(marker.lat, marker.lng);\n const iconImg = new google.maps.MarkerImage();\n iconImg.url = marker.markerIcon;\n iconImg.labelOrigin = new google.maps.Point(18, labelPosY);\n\n //const newMarker = new google.maps.Marker({\n return new google.maps.Marker({\n title: title,\n position: pos,\n label: {\n color: marker.color ? marker.color : '#000000',\n text: title,\n fontWeight: '700',\n textAlign: 'center',\n className: title.length > 15 && addLongClass ? 'long__label-text marker__label' : 'marker__label',\n },\n category: marker.category,\n cluster_ic: marker.clusterIcon,\n category_title: marker.categoryTitle,\n category_zoom: marker.categoryZoom,\n category_ic: marker.categoryImg,\n map: map,\n icon: iconImg,\n animation: google.maps.Animation.DROP,\n zIndex: zIndex,\n color: marker.color,\n });\n //return newMarker;\n}\n\nfunction addPoiToCategory (poiData, poiCategories) {\n poiCategories.forEach(category =>{\n category.data =[];\n poiData.forEach(poi =>{\n if (Number(category.categoryId) === poi.categoryId){\n category.data.push(poi);\n }\n });\n });\n}\n\nexport async function loadIcon (name) {\n const icon = await fetch(`/img/icons/poi/${name}.svg`);\n const text = await icon.text();\n\n return text;\n}\n\nasync function preparePoiData (objectToAssign, poiCategories) {\n const poiWithCategory ={};\n\n return new Promise(resolve => {\n\n poiCategories.forEach( async (category) =>{\n if (category.data.length > 0){\n const icon_f = await loadIcon(category.icon);\n const icon_i = await loadIcon(category.iconMenu);\n const categoryName = category.name.filter(elName => elName.lang === lang)[0].value;\n poiWithCategory[categoryName] =[];\n\n category.data.forEach(catData =>{\n const dataName = catData.name.filter(elName=>elName.lang === lang)[0].value;\n const description = catData.description.filter(elName=>elName.lang === lang)[0].value;\n const address = catData.address.filter(elName=>elName.lang === lang)[0].value;\n const obj = {\n '360': catData['360'],\n 'category': categoryName,\n 'title': dataName,\n 'lat': catData.latitude,\n 'lng': catData.longitude,\n 'color': category.color,\n 'categoryIconMenuName': category.iconMenu,\n 'markerIcon': generateSvg(icon_f,'#C0C0C0', category.color),\n 'clusterIcon': generateSvgCluster(styleApi.colors.brand1.split(','),true),\n 'categoryTitle': categoryName,\n 'categoryZoom': 16,\n 'categoryImg': generateSvg(icon_i),\n 'infoWindowImg': '/img/icons/poi/POI__PLUG.jpg',\n 'markerDescription': description,\n 'address': address,\n 'distanceToPoint': catData.distanceToPoint,\n 'timeToPoint': catData.timeToPoint,\n 'phone': catData.phone,\n 'customPhone': catData.customPhone,\n 'customImage': catData.customImage,\n 'googleMapsID': catData.googleMapsID,\n 'internationalPhone': catData.internationalPhone,\n 'sendPhotoRequest': false,\n 'panoramaError': false,\n 'webSiteUrl': catData.url,\n 'routeResponce': {\n 'WALKING': null,\n 'DRIVING': null,\n 'BICYCLING': null,\n },\n };\n poiWithCategory[categoryName].push(obj);\n });\n }\n });\n const interval = setInterval(()=>{\n if (poiCategories.length === Object.keys(poiWithCategory).length){\n clearInterval(interval);\n resolve (Object.assign(objectToAssign,poiWithCategory));\n }\n },100);\n });\n\n}\n\nlet _panoramaOrbit =null;\nlet _panoramaMap = null;\n\nexport function resetPanoramaService () {\n // return;\n _panoramaOrbit = null;\n _panoramaMap = null;\n}\n\nexport function panoramaOrbitResize () {\n // update orbit panorama\n if (_panoramaOrbit && document.querySelector('.map__panorama__orbit.map__panorama__orbit__show') )\n _panoramaOrbit.setVisible(true);\n\n // update map panorama\n if (_panoramaMap && document.querySelector('.map__panorama.map__panorama__show') )\n _panoramaMap.setVisible(true);\n}\n\nexport function getStreetViewData(marker) {\n const request ={\n location: marker.getPosition(),\n radius: 50,\n };\n const service = new google.maps.StreetViewService();\n return new Promise(resolve =>{\n service.getPanorama(request, (data, status) => {\n if (status === 'OK') {\n resolve(true);\n const streetViewButton = document.querySelector('.snazzy-contnet__btns-container');\n streetViewButton && streetViewButton.classList.remove('hidden');\n } else {\n marker.data.panoramaError = true;\n const streetViewButton = document.querySelector('.snazzy-contnet__btns-container');\n streetViewButton && streetViewButton.classList.add('hidden');\n }\n });\n });\n}\n\nexport function getStreetPanorama (marker,containerId,orbit) {\n if (marker.data.panoramaError) {\n const streetViewButton = document.querySelector('.snazzy-contnet__btns-container');\n streetViewButton && streetViewButton.classList.add('hidden');\n\n return;\n }\n\n const request ={\n location: marker.getPosition(),\n radius: 50,\n };\n\n const panoramaContainer = containerId ? document.getElementById(containerId) : document.createElement('div');\n const service = new google.maps.StreetViewService();\n\n if (_panoramaOrbit === null && orbit) {\n _panoramaOrbit = new google.maps.StreetViewPanorama(panoramaContainer,{\n motionTracking: true,\n motionTrackingControl: true,\n linksControl: false,\n fullscreenControl: false,\n clickToGo: false,\n panControl: true,\n enableCloseButton: false,\n });\n }\n\n if (_panoramaMap === null && !orbit) {\n _panoramaMap = new google.maps.StreetViewPanorama(panoramaContainer,{\n motionTracking: true,\n motionTrackingControl: true,\n linksControl: false,\n clickToGo: false,\n fullscreenControl: false,\n panControl: true,\n enableCloseButton: false,\n });\n }\n\n const panorama = orbit ? _panoramaOrbit : _panoramaMap;\n\n return new Promise(resolve =>{\n service.getPanorama(request, (data, status) => {\n if (status === 'OK'){\n\n const streetViewButton = document.querySelector('.snazzy-contnet__btns-container');\n streetViewButton && streetViewButton.classList.remove('hidden');\n\n // const location = data.location;\n // panorama.setPano(data.location.pano);\n const currentPoi = poiData.find(data => data.googleMapsID === marker.data.googleMapsID);\n panorama.setPosition({lat: currentPoi.streetView.lat, lng: currentPoi.streetView.lng});\n panorama.setPov({\n heading: currentPoi?.streetView?.heading || 0,\n pitch: currentPoi?.streetView?.pitch || 0,\n });\n\n if (!orbit){\n panoramaContainer.classList.add('map__panorama__show');\n } else {\n panoramaContainer.classList.add('panorama__wrapper__orbit');\n panoramaContainer.setAttribute('id','orbitPanorama');\n let mainOrbitContainer = document.querySelector('.map__panorama__orbit');\n if (!mainOrbitContainer){\n addCloseBtnInStreetView(panoramaContainer);\n mainOrbitContainer = createHtmlElement(document.body,'','div',['map__panorama__orbit']);\n mainOrbitContainer.appendChild(panoramaContainer);\n }\n pageResize(mainOrbitContainer);\n mainOrbitContainer.classList.add('map__panorama__orbit__show');\n renderUpdateValuesOnDemand(true);\n toggleBackBtnInDesktopMode('show');\n }\n hideAllDefaultMapLinks(panoramaContainer);\n panorama.setVisible(true);\n resolve(panorama);\n } else {\n marker.data.panoramaError = true;\n const streetViewButton = document.querySelector('.snazzy-contnet__btns-container');\n streetViewButton && streetViewButton.classList.add('hidden');\n }\n });\n });\n}\n\nexport function addCloseBtnInStreetView (panoramaMainContainer) {\n new Button()\n .addClass('panorama__close-button', 'close-button-cross')\n .event('click', panoramaCloseHandler.bind(this, panoramaMainContainer))\n .appendTo(panoramaMainContainer);\n}\n\nexport function panoramaCloseHandler (panoramaMainContainer) {\n panoramaMainContainer.classList.remove('map__panorama__show');\n\n if (_panoramaMap)\n _panoramaMap.setVisible(false);\n\n // if (panorama) {\n // //panorama.remove();\n // }\n\n const orbitPanorama = document.querySelector('.map__panorama__orbit__show');\n\n if (orbitPanorama){\n //orbitPanorama.remove();\n // _panoramaOrbit.setVisible(false);\n // orbitPanorama.style.display = 'none'\n orbitPanorama.classList.remove('map__panorama__orbit__show');\n const rightNavBarIsShowed = document.querySelector('.right-nav-bar.showed');\n renderUpdateValuesOnDemand(false);\n autoRotateTimerAction('update');\n\n rightNavBarIsShowed && hideRightNavBar();\n }\n}\n\nexport function closePanorama () {\n const container = document.querySelector('.map__panorama__show');\n if (container)\n panoramaCloseHandler(container);\n}\n\nexport function isPanoramaActive () {\n return Boolean(document.querySelector('.map__panorama__show'));\n}\n\nexport function showMsg (msgText) {\n const msg = document.querySelector('.map__msg');\n if (msgText){\n msg.textContent = msgText;\n msg.classList.add('show__msg');\n setTimeout(()=>{\n showMsg();\n },2000);\n } else {\n msg.classList.remove('show__msg');\n }\n}\n\nfunction addMapControls () {\n const mainContainer = document.querySelector('.'+canvasClass);\n // const goHomeBtn = createHtmlElement(mainContainer,'','div',['map__go-home__btn']);\n const goHomeBtn = new BaseElement()\n .addClass('map__go-home__btn')\n .appendTo(mainContainer);\n // const homeBtnImg = createHtmlElement(goHomeBtn.DOMElement,'','img',['home-btn__img']);\n // homeBtnImg.src ='#';\n // homeBtnImg.alt ='home button';\n new BaseElement('img')\n .addClass('home-btn__img')\n .setAttributes({\n 'src': '#',\n 'alt': 'home button'\n })\n .appendTo(goHomeBtn.DOMElement);\n // const menuBtn = createHtmlElement(mainContainer,'','div',['menu-btn']);\n const menuBtn = new BaseElement()\n .addClass('menu-btn')\n .appendTo(mainContainer);\n // const panorama = createHtmlElement(mainContainer,'','div',['map__panorama']);\n const panorama = new BaseElement()\n .addClass('map__panorama')\n .addAttribute('id', 'panorama')\n .appendTo(mainContainer);\n // panorama.setAttribute('id','panorama');\n addCloseBtnInStreetView(panorama.DOMElement);\n // createHtmlElement(\n // mainContainer,\n // 'Street View data not found for this location.',\n // 'div',\n // ['map__msg']\n // );\n new BaseElement()\n .addClass('map__msg')\n .innerHtml('Street View data not found for this location.')\n .appendTo(mainContainer);\n\n if (isMobile) {\n addMapMobileControls(mainContainer);\n return;\n }\n\n // const asideMenuContainer =\n // createHtmlElement(\n // mainContainer,\n // '',\n // 'div',\n // ['aside-menu__container', 'open-aside-menu', 'background-backdrop-filter']\n // );\n const asideMenuContainer = new BaseElement()\n .addClass('aside-menu__container', 'open-aside-menu', 'background-backdrop-filter')\n .appendTo(mainContainer);\n\n // const asideMenuWrapper =\n // createHtmlElement(\n // asideMenuContainer.DOMElement,\n // '',\n // 'div',\n // ['aside-menu__wrapper'],\n // );\n const asideMenuWrapper = new BaseElement()\n .addClass('aside-menu__wrapper')\n .appendTo(asideMenuContainer.DOMElement);\n //Aside map section\n // const mapTypeContainer =\n // createHtmlElement(\n // asideMenuWrapper.DOMElement,\n // '',\n // 'div',\n // ['aside-menu__type-container'],\n // );\n const mapTypeContainer = new BaseElement()\n .addClass('aside-menu__type-container')\n .appendTo(asideMenuWrapper.DOMElement);\n\n // createHtmlElement(\n // mapTypeContainer.DOMElement,\n // changeLangToCurrent('Map'),\n // 'h3',\n // ['aside-menu__map-type__title'],\n // );\n new BaseElement('h3')\n .addClass('aside-menu__map-type__title')\n .innerHtml(changeLangToCurrent('Map'))\n .appendTo(mapTypeContainer.DOMElement);\n\n // const mapTypeTriggersContainer =\n // createHtmlElement(\n // mapTypeContainer.DOMElement,\n // '',\n // 'div',\n // ['aside-menu__map-type-trigger__container'],\n // );\n const mapTypeTriggersContainer = new BaseElement()\n .addClass('aside-menu__map-type-trigger__container')\n .appendTo(mapTypeContainer.DOMElement);\n\n // const mapToggle =\n // createHtmlElement(\n // mapTypeTriggersContainer.DOMElement,\n // '',\n // 'div',\n // ['mini-map__toggle'],\n // );\n const mapToggle = new BaseElement()\n .addClass('mini-map__toggle', isNoMenu ? 'no-menu-mode' : null)\n .addAttribute('data-map-type', mapType)\n .appendTo(mapTypeTriggersContainer.DOMElement);\n\n // const mapName =\n // createHtmlElement(\n // mapToggle.DOMElement,\n // changeLangToCurrent('Satellite'),\n // 'span',\n // ['mini-map__toggle__name'],\n // );\n // mapName.dataset.roadmapText = changeLangToCurrent('Satellite');\n // mapName.dataset.satelliteText = changeLangToCurrent('mapMode');\n new BaseElement('span')\n .addClass('mini-map__toggle__name')\n .innerHtml(changeLangToCurrent('Satellite'))\n .setAttributes({\n 'data-roadmap-text': changeLangToCurrent('Satellite'),\n 'data-satellite-text': changeLangToCurrent('mapMode')\n })\n .appendTo(mapToggle.DOMElement)\n\n // mapToggle.dataset.mapType = mapType;\n\n //Aside Neighborhood section\n // const filterContainer = createHtmlElement(asideMenuWrapper.DOMElement,'','div',['aside-menu__filter-container']);\n const filterContainer = new BaseElement()\n .addClass('aside-menu__filter-container')\n .appendTo(asideMenuWrapper.DOMElement)\n // const filterTitle = createHtmlElement(filterContainer,changeLangToCurrent('Area of interest'),'h3',['aside-menu__filter__title']);\n new BaseElement('h3')\n .addClass('aside-menu__filter__title')\n .innerHtml(changeLangToCurrent('Area of interest'))\n .appendTo(filterContainer.DOMElement);\n // const allPointsOfInterestContainer = createHtmlElement(filterContainer,'','div',['aside-menu__filter-points']);\n const allPointsOfInterestContainer = new BaseElement()\n .addClass('aside-menu__filter-points')\n .appendTo(filterContainer.DOMElement);\n\n addFilter(allPointsOfInterestContainer.DOMElement);\n\n // const streetNameContainer = createHtmlElement(asideMenuWrapper.DOMElement,'','div',['aside-menu__street-name__wrapper']);\n const streetNameContainer = new BaseElement()\n .addClass('aside-menu__street-name__wrapper')\n .appendTo(asideMenuWrapper.DOMElement);\n // createHtmlElement(streetNameContainer.DOMElement,changeLangToCurrent('Show street names'),'span',['aside-menu__street-name__text']);\n new BaseElement('span')\n .addClass('aside-menu__street-name__text')\n .innerHtml(changeLangToCurrent('Show street names'))\n .appendTo(streetNameContainer.DOMElement);\n // const streetToggle = createHtmlElement(streetNameContainer.DOMElement,'','input',['aside-menu__street__input']);\n // streetToggle.name = 'toggle';\n // streetToggle.id = 'streetToggle';\n // streetToggle.type = 'checkbox';\n // streetToggle.checked = true;\n // streetToggle.addEventListener('change', ()=> streetNameToggle(streetToggle));\n const streetToggle = new BaseElement('input')\n .addClass('aside-menu__street__input')\n .setAttributes({\n 'name': 'toggle',\n 'id': 'streetToggle',\n 'type': 'checkbox',\n 'checked': true\n })\n .event('change', ()=> streetNameToggle(streetToggle.DOMElement))\n .appendTo(streetNameContainer.DOMElement);\n\n // const streetToggleLabel = createHtmlElement(streetNameContainer.DOMElement,'','label',['aside-menu__street-toggle__label']);\n // streetToggleLabel.setAttribute('for',streetToggle.DOMElement.id);\n new BaseElement('label')\n .addClass('aside-menu__street-toggle__label')\n .addAttribute('for',streetToggle.DOMElement.id)\n .appendTo(streetNameContainer.DOMElement)\n\n allPointsOfInterestContainer.event('click', (e) => filterHandler(e.target));\n menuBtn.event('click',() => menuBtnHandler(asideMenuContainer.DOMElement));\n mapTypeTriggersContainer.event('click', mapTypeToggleHandler);\n updateMapStyles();\n}\n\nconst mapTypeToggleHandler = (event) => {\n const miniMapToggle = event.target.closest('.mini-map__toggle');\n if (!Boolean(miniMapToggle)) {\n return;\n }\n const mapTypeLocal = miniMapToggle.getAttribute('data-map-type');\n const mapTypeTextElement = miniMapToggle.querySelector('.mini-map__toggle__name');\n\n switch (mapTypeLocal) {\n case 'roadmap':\n mapTypeTextElement.textContent = mapTypeTextElement.dataset.satelliteText;\n map.setMapTypeId('satellite');\n miniMapToggle.dataset.mapType = 'satellite';\n mapType = 'satellite';\n break;\n case 'satellite':\n mapTypeTextElement.textContent = mapTypeTextElement.dataset.roadmapText;\n map.setMapTypeId('roadmap');\n miniMapToggle.dataset.mapType = 'roadmap';\n mapType = 'roadmap';\n break;\n }\n updateMapStyles();\n menuBtnHandler();\n};\n\n\nfunction updateMapStyles () {\n switch (mapType) {\n case 'roadmap':\n changeMarkersLabelColor('#000000');\n changeDocumentStyleProperty('basicStyle', '.marker__label', 'filter', 'none');\n break;\n case 'satellite':\n changeMarkersLabelColor('#ffffff', false);\n changeDocumentStyleProperty('basicStyle', '.marker__label', 'filter', 'drop-shadow(0px 0px 1px black)' +\n ' drop-shadow(0px 0px 4px black)');\n break;\n }\n}\n\nfunction addMapMobileControls (mainContainer) {\n const menuContainer = createHtmlElement(mainContainer,'','div',['mobile__menu-container', 'background-backdrop-filter']);\n // createHtmlElement(mainContainer,'','div',['mobile__snazzy-window']);\n new BaseElement()\n .addClass('mobile__snazzy-window', isNoMenu ? 'no-menu-mode' : null)\n .appendTo(mainContainer);\n const menuWrapper = createHtmlElement(menuContainer,'','div',['mobile__menu-wrapper']);\n const menuItems = createHtmlElement(menuWrapper,'','ul',['mobile__menu-items']);\n const menuItemNeig = createHtmlElement(menuItems, changeLangToCurrent('Area of interest'),'li',['mobile__menu-item']);\n menuItemNeig.dataset.tab='Neighborhood';\n const menuNeigLands = createHtmlElement(menuItems,'','li',['mobile__menu-item__landscape','landscape','neighborhood__landscape']);\n menuNeigLands.dataset.tab='Neighborhood';\n const menuItemMap = createHtmlElement(menuItems, changeLangToCurrent('Map'),'li',['mobile__menu-item']);\n menuItemMap.dataset.tab='Map';\n const menuItemMapLands = createHtmlElement(menuItems,'','li',['mobile__menu-item__landscape','landscape','map__landscape']);\n menuItemMapLands.dataset.tab='Map';\n\n isPortraitMode() ?\n menuItemNeig.classList.add('active-menu-tab'):\n menuNeigLands.classList.add('active-menu-tab');\n\n const filterWrapper = createHtmlElement(mainContainer,'','div',['mobile-menu__filter-wrapper']);\n const filterContainer = createHtmlElement(filterWrapper,'','div',['mobile-menu__filter-container']);\n\n const mapToggle = createHtmlElement(mainContainer,'','div',['mini-map__toggle', 'compass', 'background-backdrop-filter']);\n if (isNoMenu)\n mapToggle.classList.add('no-menu-mode');\n if (!isMobile) {\n const mapName = createHtmlElement(mapToggle,changeLangToCurrent('Satellite'),'span',['mini-map__toggle__name']);\n mapName.dataset.roadmapText = changeLangToCurrent('Satellite');\n mapName.dataset.satelliteText = changeLangToCurrent('mapMode');\n }\n mapToggle.dataset.mapType = mapType;\n\n addFilter(filterContainer);\n\n const streetNameContainer = createHtmlElement(filterContainer,'','div',['aside-menu__street-name__wrapper']);\n createHtmlElement(streetNameContainer,changeLangToCurrent('Show street names'),'span',['aside-menu__street-name__text']);\n const streetToggle = createHtmlElement(streetNameContainer,'','input',['aside-menu__street__input']);\n streetToggle.name = 'toggle';\n streetToggle.id = 'streetToggle';\n streetToggle.type = 'checkbox';\n streetToggle.checked = true;\n const streetToggleLabel = createHtmlElement(streetNameContainer,'','label',['aside-menu__street-toggle__label']);\n streetToggleLabel.setAttribute('for',streetToggle.id);\n\n streetToggle.addEventListener('change', ()=> streetNameToggle(streetToggle));\n\n const menuBtn = mainContainer.querySelector('.menu-btn');\n menuBtn.addEventListener('click',() => menuBtnHandler(menuContainer));\n menuItems.addEventListener('click',(e) => menuItemsHandler(e.target));\n mapToggle.addEventListener('click', (e) => changeMapTypeHandler(e.target,menuContainer));\n filterContainer.addEventListener('click', (e) => filterHandler(e.target));\n\n setMenuTouchEvents();\n updateMapStyles();\n}\n\nfunction menuItemsHandler (selectedItem) {\n if (selectedItem.dataset.tab){\n const dataSet = selectedItem.dataset.tab;\n const activeMenuItem = document.querySelector('.active-menu-tab');\n const activeTab = document.querySelector('.active-tab');\n const selectedTab = document.querySelector('.mobile__tab-content[data-tab=\"'+ dataSet +'\"]');\n\n activeMenuItem.classList.remove('active-menu-tab');\n selectedItem.classList.add('active-menu-tab');\n activeTab.classList.remove('active-tab');\n selectedTab.classList.add('active-tab');\n updateHomeButton();\n }\n}\n\nfunction changeDocumentStyleProperty (idStyleSheet, selector, property, value) {\n const styleSheet = document.getElementById(idStyleSheet).sheet;\n Object.values(styleSheet.cssRules).forEach(rule =>{\n if (rule.selectorText === selector)\n rule.style[property] = value;\n });\n}\n\nfunction changeMarkersLabelColor (color, useMarkerColor = true) {\n mapData.allPoiMarkersWithoutCategory.forEach(marker =>{\n marker.label.color = useMarkerColor ? marker.color : color;\n });\n\n if (mapData.filterResault.length){\n mapData.filterResault.forEach(marker =>{\n marker.label.color = useMarkerColor ? marker.color : color;\n });\n filterMarkers('filter',false);\n } else {\n filterMarkers('all',false);\n }\n}\n\nfunction changeMapTypeHandler (selectedMapType,filterContainer) {\n if (selectedMapType.dataset.mapType){\n switch (selectedMapType.dataset.mapType) {\n case 'roadmap':\n map.setMapTypeId('satellite');\n // changeMarkersLabelColor('#ffffff', false);\n // changeDocumentStyleProperty('basicStyle','.marker__label','filter','drop-shadow(0px 0px 1px black)' +\n // ' drop-shadow(0px 0px 4px black)');\n selectedMapType.dataset.mapType = 'satellite';\n mapType = 'satellite';\n break;\n case 'satellite':\n map.setMapTypeId('roadmap');\n // changeMarkersLabelColor('#000000');\n // changeDocumentStyleProperty('basicStyle','.marker__label','filter','none');\n selectedMapType.dataset.mapType = 'roadmap';\n mapType = 'roadmap';\n break;\n }\n\n updateMapStyles();\n menuBtnHandler(filterContainer);\n }\n}\n\nfunction filterHandler (selectedFilter) {\n selectedFilter = selectedFilter.closest('.filter__btn');\n if (selectedFilter?.dataset.filterCategory){\n const category = selectedFilter.dataset.filterCategory;\n if (category !== 'All'){\n const categoryMarkers = mapData.allPoiMarkers[category];\n mapData.filterResault.push(...categoryMarkers);\n mapData.filterResault = [...new Set(mapData.filterResault)];\n\n if (mapData.filterResault.length){\n if (selectedFilter.classList.contains('pressed-btn'))\n mapData.filterResault = mapData.filterResault.filter(marker => marker.category !== category);\n\n closePrevInfoWindow();\n setActiveFilter(selectedFilter);\n filterMarkers('filter',false);\n }\n } else {\n closePrevInfoWindow();\n setActiveFilter();\n filterMarkers('all');\n }\n }\n}\n\nfunction filterMarkers (action, animate = true) {\n switch (action) {\n case 'filter':\n mapData.clusters.clearMarkers();\n mapData.filterResault.forEach(marker => {\n marker.setAnimation(google.maps.Animation.DROP);\n });\n mapData.clusters.addMarkers(mapData.filterResault);\n mapData.clusters.repaint();\n animate && smoothlyAnimatePanTo(map, startPoint);\n break;\n case 'all':\n mapData.clusters.clearMarkers();\n mapData.allPoiMarkersWithoutCategory.forEach(marker =>{\n marker.setAnimation(google.maps.Animation.DROP);\n });\n mapData.clusters.addMarkers(mapData.allPoiMarkersWithoutCategory);\n mapData.clusters.repaint();\n mapData.filterResault = [];\n animate && smoothlyAnimatePanTo(map, startPoint);\n break;\n // case 'none':\n // mapData.clusters.clearMarkers();\n // mapData.clusters.repaint();\n // mapData.filterResault = [];\n // break;\n }\n}\n\nfunction setActiveFilter (newFilterCategory) {\n const defaultCategory = document.querySelector('.filter__btn[data-filter-category=\"All\"]');\n\n if (newFilterCategory){\n defaultCategory.classList.remove('pressed-btn');\n\n if (newFilterCategory.tagName === 'IMG')\n newFilterCategory = newFilterCategory.parentElement;\n\n if (newFilterCategory.classList.contains('pressed-btn')){\n newFilterCategory.classList.remove('pressed-btn');\n newFilterCategory.style.removeProperty('background-color');\n\n return;\n }\n\n newFilterCategory.classList.add('pressed-btn');\n newFilterCategory.style.backgroundColor = newFilterCategory.dataset.activeBtnColor;\n } else {\n const allActiveCategories = document.querySelectorAll('.filter__btn.pressed-btn');\n for (let category of allActiveCategories){\n category.classList.remove('pressed-btn');\n category.style.removeProperty('background-color');\n }\n defaultCategory.classList.add('pressed-btn');\n }\n}\n\nfunction addFilter (domContainer) {\n // const allBtn = createHtmlElement(domContainer,changeLangToCurrent('All'),'button',['filter__btn', 'pressed-btn', 'button', 'background-backdrop-filter']);\n // allBtn.dataset.filterCategory = 'All';\n const allBtn = new BaseElement('button')\n .addClass('filter__btn', 'pressed-btn', 'button'/*, 'background-backdrop-filter'*/)\n .innerHtml(changeLangToCurrent('All'))\n .addAttribute('data-filter-category', 'All')\n .appendTo(domContainer);\n\n // const allBtnImg = createHtmlElement(allBtn.DOMElement,'','div',['filter__poi-icon','icon-map-pin-outline']);\n // allBtnImg.dataset.filterCategory = 'All';\n new BaseElement()\n .addClass('filter__poi-icon','icon-map-pin-outline')\n .addAttribute('data-filter-category', 'All')\n .appendTo(allBtn.DOMElement)\n\n Object.entries(mapData.allPoiMarkers)\n .sort(([keyA], [keyB]) => keyA.localeCompare(keyB))\n .forEach(([category,markers]) => {\n // const btn = createHtmlElement(domContainer,category,'button',['filter__btn', 'button', 'background-backdrop-filter']);\n // btn.dataset.filterCategory = category;\n // btn.dataset.activeBtnColor = markers[0].color;\n const btn = new BaseElement('button')\n .addClass('filter__btn', 'button'/*, 'background-backdrop-filter'*/)\n .setAttributes({\n 'data-filter-category': category,\n 'data-active-btn-color': markers[0].color\n })\n .innerHtml(category)\n .appendTo(domContainer);\n\n // const img = createHtmlElement(btn.DOMElement,'','img',['filter__poi-icon']);\n // img.src = markers[0].category_ic;\n // img.dataset.filterCategory = category;\n // new BaseElement('img')\n // .addClass('filter__poi-icon')\n // .setAttributes({\n // 'src': markers[0].category_ic,\n // 'data-filter-category': category\n // })\n // .appendTo(btn.DOMElement);\n \n const realCategory = markers[0].data.categoryIconMenuName.split('_')[0];\n \n const icon = new BaseElement('span')\n .addClass('filter__poi-icon')\n .setAttributes({\n 'data-filter-category': realCategory\n })\n .appendTo(btn.DOMElement);\n\n switch (realCategory) {\n case 'beaches':\n icon.addClass('icon-summer');\n break;\n case 'business':\n icon.addClass('icon-business');\n break;\n case 'busStation':\n case 'transport':\n icon.addClass('icon-bus');\n break;\n case 'cafes':\n icon.addClass('icon-coffee');\n break;\n case 'construction':\n case 'office':\n case 'neighbourhood':\n icon.addClass('icon-construction-site');\n break;\n case 'culture':\n icon.addClass('icon-culture-object');\n break;\n case 'education':\n icon.addClass('icon-education');\n break;\n case 'healthcare':\n icon.addClass('icon-healthcare');\n break;\n case 'kids':\n icon.addClass('icon-kids');\n break;\n case 'kosher':\n case 'synagogue':\n icon.addClass('icon-kosher');\n break;\n case 'leisure':\n icon.addClass('icon-lotus');\n break;\n case 'park':\n icon.addClass('icon-park');\n break;\n case 'restaurants':\n icon.addClass('icon-restaurant');\n break;\n case 'shopping':\n case 'supermarkets':\n icon.addClass('icon-shopping');\n break;\n case 'sports':\n icon.addClass('icon-sport');\n break;\n case 'streets':\n icon.addClass('icon-street');\n break;\n case 'subway':\n icon.addClass('icon-subway2');\n break;\n default:\n console.warn(`Unknown group: ${category}`);\n break;\n }\n });\n}\n\nexport function openMiniCard (cardContainer = document.querySelector('.mobile__snazzy-window'),changeBtnPosition = true,orbit = false) {\n if (!cardContainer || !cardContainer.firstElementChild)\n return;\n\n cardContainer.classList.add('open-mobile-card');\n const content = cardContainer.querySelector('.snazzy-content__container');\n const titleContainer = content.querySelector('.snazzy-content__title-container').getBoundingClientRect().height;\n const infoContainer = content.querySelector('.snazzy-content__container-info').getBoundingClientRect().height;\n let btnHeight = document.querySelector('.snazzy-contnet__btns-container').getBoundingClientRect().height;\n const photoHeight = document.querySelector('.snazzy-content__photo-container').getBoundingClientRect().height;\n const top = 0;\n\n if (isPortraitMode()){\n if (btnHeight === 0) btnHeight = 40;\n content.style.maxHeight = titleContainer + photoHeight + infoContainer + btnHeight + 'px';\n content.style.height = window.innerHeight - top + 'px';\n changeBtnPosition && changeMenuBtnPosition(titleContainer + photoHeight + infoContainer + btnHeight);\n } else {\n content.style.maxHeight = window.innerHeight - top + 'px';\n content.style.height = window.innerHeight - top + 'px';\n content.style.width = window.innerWidth+'px';\n content.style.maxWidth = '358px';\n }\n}\n\nfunction menuBtnHandler () {\n if (isMobile){\n const isCardOpened = whichCardIsOpen();\n if (isCardOpened)\n closePrevInfoWindow();\n }\n updateHomeButton();\n}\n\nfunction changeMenuBtnPosition (height = 0) {\n const btn = document.querySelector('.menu-btn');\n (height > 0) ?\n btn.style.bottom = height + 24 + 'px':\n btn.style.removeProperty('bottom');\n}\n\nfunction hideAllDefaultMapLinks (container = document) {\n const interval = setInterval(()=> {\n const links = container.querySelectorAll('a[rel=\"noopener\"]');\n if (links.length > 0) {\n clearInterval(interval);\n links.forEach(link => {\n const googleLogo = container.querySelector('a[rel=\"noopener\"][aria-label*=\"Google\"] img');\n if (googleLogo) {\n googleLogo.classList.add('google-logo__image');\n } else {\n link.style.display = 'none';\n }\n });\n }\n },100);\n}\n\nexport function poiOrientationHandler() {\n if (apiError || !isMobile)\n return;\n\n isPortrait = isPortraitMode();\n setActiveMenuTabInLanscapeMode();\n updateMapHeight();\n setMenuTouchEvents();\n setMobileFullscreenCardSize();\n setSwipeMiniCard();\n setMobileMiniCardSize();\n pageResize(document.querySelector('.widget__container[data-menu-item=\"map\"]'));\n}\n\nexport function mapUpdate () {\n lang = getCurrentLang();\n dir = getCurrentLangDirection();\n isPortrait = isPortraitMode();\n GoogleMaps.removeGoogleMapScripts();\n // const scriptsLink = document.head.querySelectorAll('script');\n // scriptsLink.forEach(script =>{\n // if (script.src.startsWith('https://maps.googleapis.com'))\n // script.remove();\n // });\n\n // delete window.google;\n // removeScript('marker');\n // removeScript('snazzy');\n resetPanoramaService();\n // removeStyles();\n // delete window.SnazzyInfoWindow;\n const mapContainer = document.querySelector('.' + canvasClass);\n if (!mapContainer)\n return;\n\n mapContainer.remove();\n swipeMenu && swipeMenu.removeEventListeners();\n swipeMiniCard && swipeMiniCard.removeEventListeners();\n swipeMenu && swipeMenu.stop();\n swipeMiniCard && swipeMiniCard.stop();\n swipeMenu = undefined;\n swipeMiniCard = undefined;\n\n new GoogleMaps().then(() => {\n initMap(poiSettings, poiData, poiCategories).then(()=> poiOrbitCardSwitchingLang());\n pageResize(document.querySelector('.widget__container[data-menu-item=\"map\"]'));\n });\n\n // const scriptInterval = setInterval(()=>{\n // addScripts();\n // if (scriptsChecker()){\n // clearInterval(scriptInterval);\n // initMap(poiSettings, poiData, poiCategories).then(()=> poiOrbitCardSwitchingLang());\n // pageResize(document.querySelector('.widget__container[data-menu-item=\"map\"]'));\n // }\n // },200);\n\n //\n // // document.querySelector('.' + canvasClass).remove();\n // //\n // const scriptInterval = setInterval(()=>{\n // console.log('check');\n // addScripts();\n // if (scriptsChecker()){\n // clearInterval(scriptInterval);\n // map = new google.maps.Map(mapMainContainer, mapmapData);\n //\n // // initMap(poiSettings, poiData, poiCategories);\n // // pageResize(document.querySelector('.' + canvasClass).parentElement);\n // }\n // },200);\n\n}\n\nexport function setMobileMiniCardSize (cardContainer = document.querySelector('.mobile__snazzy-window')) {\n if (BmbyMode.active || !mapData.snazzyWindow?.length)\n return;\n\n const cardMode = whichCardIsOpen();\n if (cardMode === 'fullscreen')\n return;\n\n const content = cardContainer.querySelector('.snazzy-content__container');\n const titleContainer = content.querySelector('.snazzy-content__title-container').getBoundingClientRect().height;\n const infoContainer = content.querySelector('.snazzy-content__container-info').getBoundingClientRect().height;\n let btnHeight = document.querySelector('.snazzy-contnet__btns-container').getBoundingClientRect().height;\n const photoHeight = document.querySelector('.snazzy-content__photo-container').getBoundingClientRect().height;\n // card.style.maxHeight = titleContainer + photoHeight + infoContainer + btnHeight + 'px';\n // const height = cardContainer.getBoundingClientRect().height;\n // const top = settingsData.widgetsPaddingTop;\n const top = 0;\n\n if (isPortraitMode()) {\n if (btnHeight === 0)\n btnHeight = 40;\n content.style.maxHeight = titleContainer + photoHeight + infoContainer + btnHeight + 'px';\n content.style.height = window.innerHeight - top + 'px';\n content.style.width = '100%';\n content.style.maxWidth = 'unset';\n changeMenuBtnPosition(titleContainer + photoHeight + infoContainer + btnHeight);\n } else {\n content.style.maxHeight = window.innerHeight - top + 'px';\n content.style.height = window.innerHeight - top + 'px';\n content.style.width = window.innerWidth+'px';\n content.style.maxWidth = '358px';\n changeMenuBtnPosition();\n }\n\n // if (isPortrait){\n // const content = cardContainer.querySelector('.snazzy-content__container');\n // const height = calcElementHeight('.snazzy-content__container');\n // content.style.maxHeight = height + 'px';\n // content.style.height = window.innerHeight + 'px';\n // content.style.width = '100%';\n // content.style.maxWidth = 'unset';\n // changeMenuBtnPosition(height);\n // } else {\n // const content = cardContainer.querySelector('.snazzy-content__container');\n // content.style.maxHeight = window.innerHeight + 'px';\n // content.style.height = window.innerHeight + 'px';\n // content.style.width = window.innerWidth+'px';\n // content.style.maxWidth = '358px';\n // changeMenuBtnPosition();\n // }\n}\n\n// function calcElementHeight (querySelector) {\n// let totalSize = 0;\n//\n// const element = document.querySelector(querySelector);\n// for (let child of element.children){\n// totalSize += child.getBoundingClientRect().height;\n// }\n//\n// return totalSize;\n// }\n\nfunction setMenuTouchEvents () {\n const menuWrapper = document.querySelector('.mobile__menu-wrapper');\n if (!menuWrapper)\n return;\n\n if (!swipeMenu)\n swipeMenu = new Swipe(menuWrapper);\n\n if (isPortrait){\n switch (dir) {\n case 'rtl':\n swipeMenu.stop();\n swipeMenu.onLeft(() => menuItemsHandler(document.querySelector('.mobile__menu-item[data-tab=\"Neighborhood\"]')));\n swipeMenu.onRight(() => menuItemsHandler(document.querySelector('.mobile__menu-item[data-tab=\"Map\"]')));\n swipeMenu.onDown(() => menuBtnHandler(document.querySelector('.mobile__menu-container')));\n swipeMenu.run();\n break;\n case 'ltr':\n swipeMenu.stop();\n swipeMenu.onLeft(() => menuItemsHandler(document.querySelector('.mobile__menu-item[data-tab=\"Map\"]')));\n swipeMenu.onRight(() => menuItemsHandler(document.querySelector('.mobile__menu-item[data-tab=\"Neighborhood\"]')));\n swipeMenu.onDown(() => menuBtnHandler(document.querySelector('.mobile__menu-container')));\n swipeMenu.run();\n break;\n }\n } else {\n switch (dir) {\n case 'rtl':\n swipeMenu.stop();\n swipeMenu.onRight(()=>menuBtnHandler(document.querySelector('.mobile__menu-container')));\n swipeMenu.onDown(() => menuItemsHandler(document.querySelector('.mobile__menu-item__landscape[data-tab=\"Map\"]')));\n swipeMenu.onUp(()=> menuItemsHandler(document.querySelector('.mobile__menu-item__landscape[data-tab=\"Neighborhood\"]')));\n swipeMenu.run();\n break;\n case 'ltr':\n swipeMenu.stop();\n swipeMenu.onLeft(() => menuBtnHandler(document.querySelector('.mobile__menu-container')));\n swipeMenu.run();\n break;\n }\n }\n}\n\nfunction updateMapHeight () {\n const mapContainer = document.querySelector('.'+canvasClass);\n if (mapContainer) {\n mapContainer.style.maxHeight = window.innerHeight + 'px';\n }\n}\n\nfunction setActiveMenuTabInLanscapeMode () {\n const activeTab = document.querySelector('.active-menu-tab');\n if (activeTab) {\n activeTab.classList.remove('active-menu-tab');\n\n if (activeTab.classList.contains('landscape')){\n const tab = document.querySelector('.mobile__menu-item[data-tab=\"'+activeTab.dataset.tab+'\"]');\n tab.classList.add('active-menu-tab');\n } else {\n const landscapeTab = document.querySelector('.mobile__menu-item__landscape[data-tab=\"'+activeTab.dataset.tab+'\"]');\n landscapeTab.classList.add('active-menu-tab');\n }\n }\n}\n\nfunction streetNameToggle (toggleElement) {\n const showStreetsName = toggleElement.checked;\n map.styles.find((style,index) =>{\n if (style.featureType === 'road'){\n style.stylers[0].visibility = showStreetsName ? 'on' : 'off';\n map.setOptions({ styles: map.styles });\n }\n });\n}\n\nexport function generateSvg (icon,color,newColor,convertRgbaToHex = false) {\n let iconSvg;\n\n if (icon) {\n if (color && newColor) {\n if (convertRgbaToHex)\n newColor = rgbaToHexA(newColor);\n\n const regExp = new RegExp(color,'g');\n iconSvg = icon.replace(regExp,newColor);\n } /*else if (document.body.classList.contains('light-theme')) {\n const listOfReplaces = ['none'/!*, '#ffffff', 'white'*!/];\n const replacement = '#000000';\n\n const regExps = listOfReplaces.map(item => new RegExp(item, 'i'));\n iconSvg = regExps.reduce((acc, regExp) => acc === icon ? acc.replace(regExp, replacement) : acc, icon);\n\n }*/ else {\n iconSvg = icon;\n }\n const encoded = window.btoa(iconSvg);\n\n return ('data:image/svg+xml;base64,' + encoded);\n } else {\n return generateSvgCluster(color|| '#C0C0C0');\n }\n}\n\n\nfunction generateSvgCluster (color, needConvert = false) {\n if (needConvert)\n color = rgbaToHexA(color);\n\n const encoded = window.btoa('' +\n '' +\n '' +\n '');\n\n return ('data:image/svg+xml;base64,' + encoded);\n}\n\nfunction updateHomeButton () {\n const center = new google.maps.LatLng(mapData.staticMarkers['0'].lat,mapData.staticMarkers['0'].lng);\n mapCenterChangeHandler(undefined, center);\n}\n//\n// function latLonToOffsets(latitude, longitude, mapWidth, mapHeight) {\n// const FE = 180; // false easting\n// const radius = mapWidth / (2 * Math.PI);\n//\n// const latRad = degreesToRadians(latitude);\n// const lonRad = degreesToRadians(longitude + FE);\n//\n// const x = lonRad * radius;\n//\n// const yFromEquator = radius * Math.log(Math.tan(Math.PI / 4 + latRad / 2));\n// const y = mapHeight / 2 - yFromEquator;\n//\n// return { x, y };\n// }\n\n// function degreesToRadians(degrees) {\n// return (degrees * Math.PI) / 180;\n// }\n\nfunction latLng2Point(latLng, map) {\n const topRight = map.getProjection().fromLatLngToPoint(map.getBounds().getNorthEast());\n const bottomLeft = map.getProjection().fromLatLngToPoint(map.getBounds().getSouthWest());\n const scale = Math.pow(2, map.getZoom());\n const worldPoint = map.getProjection().fromLatLngToPoint(latLng);\n\n return new google.maps.Point((worldPoint.x - bottomLeft.x) * scale, (worldPoint.y - topRight.y) * scale);\n}\n\nfunction mapCenterChangeHandler(btnGoHome = document.querySelector('.map__go-home__btn'), center){\n let top, left;\n let visible = false;\n let menuWidth = 0;\n let boundingBox;\n\n const mapContainer = getGoogleMapMainContainer();\n const homeIcon = document.querySelector('.home-btn__img');\n const btnWidth = btnGoHome.getBoundingClientRect().width;\n const btnHeight = btnGoHome.getBoundingClientRect().height;\n const width = mapContainer.getBoundingClientRect().width;\n const height = mapContainer.getBoundingClientRect().height;\n const menu = document.querySelector('.aside-menu__container.open-aside-menu');\n if (menu)\n menuWidth = menu.getBoundingClientRect().width;\n\n const point = latLng2Point(center,map);\n\n if (dir === 'ltr' && !isDesktop){\n boundingBox = {\n left: menuWidth,\n top: 0,\n right: width,\n bottom: height,\n };\n } else if (dir === 'rtl' && !isDesktop) {\n boundingBox = {\n left: 0,\n top: 0,\n right: width - menuWidth,\n bottom: height,\n };\n } else if (isDesktop){\n boundingBox = {\n left: 0,\n top: 0,\n right: width - menuWidth,\n bottom: height,\n };\n }\n\n removeAllStyleProporty(btnGoHome);\n\n // Right\n if (point.x > boundingBox.right){\n left = boundingBox.right - btnWidth / 2;\n top = point.y - btnHeight / 2;\n homeIcon.src = rightIcon;\n visible = true;\n }\n\n // Bottom\n if (point.y > boundingBox.bottom){\n top = boundingBox.bottom - btnHeight;\n left = point.x;\n homeIcon.src = bottomIcon;\n visible = true;\n }\n\n // Left\n if (point.x < boundingBox.left){\n left = boundingBox.left + btnWidth / 2;\n top = point.y - btnHeight / 2;\n homeIcon.src = leftIcon;\n visible = true;\n }\n\n // Top\n if (point.y < boundingBox.top){\n top = boundingBox.top;\n left = point.x;\n homeIcon.src = topIcon;\n visible = true;\n }\n\n // Top - Right\n if (point.y < boundingBox.top && point.x > boundingBox.right){\n top = boundingBox.top;\n left = boundingBox.right - btnWidth / 2;\n homeIcon.src = topRightIcon;\n visible = true;\n }\n\n // Top - Left\n if (point.y < boundingBox.top && point.x < boundingBox.left){\n top = boundingBox.top;\n left = boundingBox.left + btnWidth / 2;\n homeIcon.src = topLeftIcon;\n visible = true;\n }\n\n //Bottom - Left\n if (point.y > boundingBox.bottom && point.x < boundingBox.left){\n top = boundingBox.bottom - btnHeight;\n left = boundingBox.left + btnWidth / 2;\n homeIcon.src = bottomLeftIcon;\n visible = true;\n }\n\n // Bottom - Right\n if (point.y > boundingBox.bottom && point.x > boundingBox.right){\n top = boundingBox.bottom - btnHeight;\n left = boundingBox.right - btnWidth / 2;\n homeIcon.src = bottomRightIcon;\n visible = true;\n }\n\n btnGoHome.style.left = left - btnWidth / 2 + 'px';\n btnGoHome.style.top = top + 'px';\n\n if (visible)\n btnGoHome.style.visibility = 'visible';\n}\n\nfunction isPortraitMode () {\n return window.matchMedia('(orientation: portrait)').matches;\n}\n\nfunction removeAllStyleProporty(btnGoHome){\n btnGoHome.style.removeProperty('top');\n btnGoHome.style.removeProperty('bottom');\n btnGoHome.style.removeProperty('left');\n btnGoHome.style.removeProperty('right');\n btnGoHome.style.removeProperty('visibility');\n}\n\n// function setCurrentHomeIcon (btnGoHome,homeIcon, correctionSideObject) {\n// const top = parseFloat(btnGoHome.style.top);\n// const left = parseFloat(btnGoHome.style.left);\n// const right = parseFloat(btnGoHome.style.right);\n// const bottom = parseFloat(btnGoHome.style.bottom);\n//\n// // TOP - LEFT / RIGHT\n// if (top === correctionSideObject.top){\n// homeIcon.src = topIcon;\n// }\n//\n// if (right === correctionSideObject.right){\n// homeIcon.src = rightIcon;\n// }\n//\n// if (left === correctionSideObject.left){\n// homeIcon.src = leftIcon;\n// }\n//\n// if (top === correctionSideObject.top && left === correctionSideObject.left){\n// homeIcon.src = topLeftIcon;\n// }\n//\n// if (top === correctionSideObject.top && right === correctionSideObject.right){\n// homeIcon.src = topRightIcon;\n// }\n//\n// //BOTTOM / LEFT / RIGHT\n// if (bottom === correctionSideObject.bottom){\n// homeIcon.src = bottomIcon;\n// }\n//\n// if (bottom === correctionSideObject.bottom && left === correctionSideObject.left){\n// homeIcon.src = bottomLeftIcon;\n// }\n//\n// if (bottom === correctionSideObject.bottom && right === correctionSideObject.right){\n// homeIcon.src = bottomRightIcon;\n// }\n//\n// btnGoHome.style.visibility = 'visible';\n// }\n\nfunction setInitialZoom () {\n if (poiZoom === 0) {\n map.setZoom(16);\n mapData.mapSettings.zoom = 16;\n // let needZoomOut = false;\n // const currentZoom = map.getZoom();\n //\n // Object.values(mapData.filteredMarkers).forEach(markersArray =>{\n // markersArray.forEach(marker =>{\n // const markerCoords = new google.maps.LatLng(marker.lat, marker.lng);\n // const destPixel = getPixel(markerCoords, map.getZoom());\n // const mapPixel = getPixel(map.getCenter(), map.getZoom());\n // const diffX = (destPixel.x - mapPixel.x);\n // const diffY = (destPixel.y - mapPixel.y);\n // if (Math.abs(diffX) > window.innerWidth / 2 || Math.abs(diffY) > window.innerHeight / 2){\n // needZoomOut = true;\n // }\n // });\n // });\n //\n // if (needZoomOut){\n // map.setZoom(currentZoom - 1);\n // mapData.mapSettings.zoom = map.getZoom();\n // setInitialZoom();\n // }\n } else {\n map.setZoom(poiZoom);\n mapData.mapSettings.zoom = poiZoom;\n }\n}\n\n// function isMobileDevice () {\n// const match = window.matchMedia || window.msMatchMedia;\n// if(match) {\n// const mq = match(\"(pointer:coarse)\");\n// return mq.matches;\n// }\n// return false;\n// }\n\nexport function checkPoiResponse (poiData,poiCategories) {\n return Boolean(Array.isArray(poiData) && poiData.length && Array.isArray(poiCategories) && poiCategories.length);\n}\n\nfunction showErrorPage () {\n const mainContainer = document.querySelector('.'+canvasClass);\n const wrapper = createHtmlElement(mainContainer,'','div',['error-page__wrapper']);\n const icon = createHtmlElement(wrapper,'','div',['error-page__icon']);\n icon.innerHTML = desktopErrorIcon;\n createHtmlElement(wrapper,'The page is under construction','h1',['error-page__title']);\n}\n\nexport function smoothlyAnimatePanTo(map, destLatLng) {\n if(willAnimatePanTo(map, destLatLng)) {\n map.panTo(destLatLng);\n map.setZoom(mapData.mapSettings.zoom);\n } else {\n smoothlyAnimatePanToWorkarround(map, destLatLng);\n }\n}\n\nwindow.g = () => smoothlyAnimatePanToWorkarround(map, startPoint);\nwindow.z = () => {\n console.log(mapData);\n console.log(map.getZoom());\n};\n\nfunction smoothlyAnimatePanToWorkarround(map, destLatLng, optionalAnimationEndCallback) {\n let initialZoom = map.getZoom();\n let listener;\n\n function zoomIn() {\n map.setZoom(mapData.mapSettings.zoom);\n google.maps.event.removeListener(listener);\n //here you should (re?)enable only the ui controls that make sense to your app\n map.setOptions({draggable: true, zoomControl: true, scrollwheel: true, disableDoubleClickZoom: false});\n }\n\n function zoomOut() {\n if(willAnimatePanTo(map, destLatLng)) {\n google.maps.event.removeListener(listener);\n listener = google.maps.event.addListener(map, 'idle', zoomIn);\n map.panTo(destLatLng);\n } else {\n map.setZoom(getOptimalZoomOut(destLatLng, map.getZoom()));\n }\n }\n\n //here you should disable all the ui controls that your app uses\n map.setOptions({draggable: false, zoomControl: false, scrollwheel: false, disableDoubleClickZoom: true});\n map.setZoom(getOptimalZoomOut(destLatLng, initialZoom));\n listener = google.maps.event.addListener(map, 'idle', zoomOut);\n}\n\nfunction getOptimalZoomOut(latLng, currentZoom) {\n if(willAnimatePanTo(map, latLng, currentZoom - 1)) {\n return currentZoom - 1;\n } else if(willAnimatePanTo(map, latLng, currentZoom - 2)) {\n return currentZoom - 2;\n } else {\n return currentZoom - 3;\n }\n}\n\nfunction willAnimatePanTo(map, destLatLng, optionalZoomLevel) {\n let dimen = getMapDimenInPixels(map);\n\n let mapCenter = map.getCenter();\n optionalZoomLevel = !!optionalZoomLevel ? optionalZoomLevel : map.getZoom();\n\n let destPixel = getPixel(destLatLng, optionalZoomLevel);\n let mapPixel = getPixel(mapCenter, optionalZoomLevel);\n let diffX = Math.abs(destPixel.x - mapPixel.x);\n let diffY = Math.abs(destPixel.y - mapPixel.y);\n\n return diffX < dimen.width && diffY < dimen.height;\n}\n\nfunction project(latLng) {\n let TILE_SIZE = 256;\n\n let siny = Math.sin(latLng.lat() * Math.PI / 180);\n\n // Truncating to 0.9999 effectively limits latitude to 89.189. This is\n // about a third of a tile past the edge of the world tile.\n siny = Math.min(Math.max(siny, -0.9999), 0.9999);\n\n return new google.maps.Point(\n TILE_SIZE * (0.5 + latLng.lng() / 360),\n TILE_SIZE * (0.5 - Math.log((1 + siny) / (1 - siny)) / (4 * Math.PI)));\n}\n\nfunction getPixel(latLng, zoom) {\n let scale = 1 << zoom;\n let worldCoordinate = project(latLng);\n return new google.maps.Point(\n Math.floor(worldCoordinate.x * scale),\n Math.floor(worldCoordinate.y * scale));\n}\n\nfunction getMapDimenInPixels(map) {\n let zoom = map.getZoom();\n let bounds = map.getBounds();\n let southWestPixel = getPixel(bounds.getSouthWest(), zoom);\n let northEastPixel = getPixel(bounds.getNorthEast(), zoom);\n return {\n width: Math.abs(southWestPixel.x - northEastPixel.x),\n height: Math.abs(southWestPixel.y - northEastPixel.y),\n };\n}\n\nexport class Swipe {\n constructor(element,enableMouseSwipe = false) {\n this.xDown = null;\n this.yDown = null;\n this.eventListeners = false;\n this.enableMouseSwipe = enableMouseSwipe;\n this.element = typeof(element) === 'string' ? document.querySelector(element) : element;\n this.direction = null;\n this.touchStartListener = null;\n this.mouseDownListener = null;\n this.touchMoveListener = null;\n this.mouseMoveListener = null;\n\n this.element.addEventListener('touchstart', this.touchStartListener = function(evt) {\n this.handleTouchStart(evt);\n }.bind(this), false);\n\n if(this.enableMouseSwipe){\n this.element.addEventListener('mousedown', this.mouseDownListener = function(evt) {\n this.handlerMouseDown(evt);\n }.bind(this), false);\n }\n }\n\n onLeft(callback) {\n if (!callback)\n return;\n\n this.onLeft = callback;\n\n return this;\n }\n\n onRight(callback) {\n if (!callback)\n return;\n\n this.onRight = callback;\n\n return this;\n }\n\n onUp(callback) {\n if (!callback)\n return;\n\n this.onUp = callback;\n\n return this;\n }\n\n onDown(callback) {\n if (!callback)\n return;\n\n this.onDown = callback;\n\n return this;\n }\n\n getDirection() {\n return this.direction;\n }\n\n handlerMouseDown(evt) {\n this.xDown = evt.clientX;\n this.yDown = evt.clientY;\n }\n\n handleTouchStart(evt) {\n this.xDown = evt.touches[0].clientX;\n this.yDown = evt.touches[0].clientY;\n }\n\n handleTouchMove(evt) {\n if ( ! this.xDown || ! this.yDown )\n return;\n\n\n var xUp;\n var yUp;\n\n if (evt.touches){\n xUp = evt.touches[0].clientX;\n yUp = evt.touches[0].clientY;\n } else {\n xUp = evt.clientX;\n yUp = evt.clientY;\n }\n\n this.xDiff = this.xDown - xUp;\n this.yDiff = this.yDown - yUp;\n\n if ( Math.abs( this.xDiff ) > Math.abs( this.yDiff ) ) { // Most significant.\n if ( this.xDiff > 30 ) {\n this.direction = 'left';\n this.onLeft();\n this.xDown = null;\n this.yDown = null;\n } else if (this.xDiff < -30) {\n this.direction = 'right';\n this.onRight();\n this.xDown = null;\n this.yDown = null;\n }\n } else {\n if ( this.yDiff > 30 ) {\n this.direction = 'up';\n this.onUp();\n this.xDown = null;\n this.yDown = null;\n } else if(this.yDiff < -30) {\n this.direction = 'down';\n this.onDown();\n this.xDown = null;\n this.yDown = null;\n }\n }\n }\n\n run() {\n if (!this.eventListeners){\n\n if (this.enableMouseSwipe){\n this.element.addEventListener('mousemove', this.mouseMoveListener = function(evt) {\n this.handleTouchMove(evt);\n }.bind(this), false);\n }\n\n this.element.addEventListener('touchmove', this.touchMoveListener = function(evt) {\n this.handleTouchMove(evt);\n }.bind(this), false);\n this.eventListeners = true;\n }\n }\n\n stop() {\n this.xDown = null;\n this.yDown = null;\n this.direction = null;\n delete this.onLeft;\n delete this.onRight;\n delete this.onUp;\n delete this.onDown;\n }\n\n removeEventListeners() {\n if (this.eventListeners){\n this.element.removeEventListener('touchmove',this.touchMoveListener);\n this.element.removeEventListener('touchstart',this.touchStartListener);\n this.enableMouseSwipe && this.element.removeEventListener('mousemove',this.mouseMoveListener);\n this.enableMouseSwipe && this.element.removeEventListener('mousedown',this.mouseDownListener);\n }\n }\n}\n\n\nclass CustomOverlay {\n constructor (map,latLng) {\n this.latLng = latLng;\n this.overlay = new google.maps.OverlayView();\n this.overlay.onAdd = this.onAdd.bind(this);\n this.overlay.draw = this.draw.bind(this);\n this.overlay.onRemove = this.onRemove.bind(this);\n this.overlay.setMap(map);\n this.layer = createHtmlElement('','','div',['custom-overlay']);\n }\n\n onAdd() {\n this.pane = this.overlay.getPanes().floatPane;\n this.pane.appendChild(this.layer);\n }\n\n draw() {\n const projection = this.overlay.getProjection();\n if (!projection)\n return;\n\n const location = projection.fromLatLngToDivPixel(this.latLng);\n this.layer.style.left = `${location.x}px`;\n this.layer.style.top = `${location.y}px`;\n this.layer.style.position = 'absolute';\n this.layer.style.cursor = 'pointer';\n this.layer.style.transform = 'translate(-50%,-100%)';\n }\n\n onRemove() {\n this.layer.remove();\n }\n\n getPosition() {\n return this.latLng;\n }\n\n set content(content){\n this.layer.appendChild(content);\n }\n\n set listener(func) {\n this.layer.addEventListener('click',func);\n }\n}\n\nclass StaticMarker extends CustomOverlay {\n constructor (map,marker) {\n super(map,new google.maps.LatLng(marker.lat, marker.lng));\n createAnimatedProjectLabel()\n .then(svg => {\n const content = createHtmlElement('','','div',['building-static-marker']);\n const bg = createHtmlElement(content,'','div',['static-marker-svg']);\n bg.innerHTML = svg;\n let logo;\n\n if (config.general.icon) {\n logo = createHtmlElement(content,'','img',['static-marker-logo']);\n logo.src = Cloudflare.resize(config.general.icon,{width: 80});\n }\n else if (config.general.logo) {\n logo = createHtmlElement(content,'','img',['static-marker-logo']);\n logo.src = Cloudflare.resize(config.general.logo,{width: 80});\n } else {\n logo = createHtmlElement(content,'','div',['static-marker-logo','icon-home2']);\n }\n this.content = content;\n this.listener = this.markerHandler.bind(this);\n });\n }\n\n markerHandler() {\n map.setCenter(this.getPosition());\n setTimeout(() => {\n let zoom = map.getZoom();\n // document.querySelector('[data-menu-item=\"3dModel\"]').click()\n menuHandler({target:{dataset:{menuItem:'3dModel'}}});\n transferToBuilding(zoom);\n }, 200);\n }\n\n}\n\n\nexport function createAnimatedProjectLabel() {\n return new Promise(resolve => {\n const interval = setInterval(() => {\n const c2 = getCSSVarValue('--customerContactNow2');\n const brand2 = getCSSVarValue('--brand2');\n const brand1 = getCSSVarValue('--brand1');\n\n if (c2 && brand1 && brand2) {\n clearInterval(interval);\n const svg = `\n \n \n \n \n ${isMobile ? '' : ``}\n \n \n ${isMobile ? '' : ``}\n \n \n ${isMobile ? '' : ``}\n \n \n \n \n \n \n \n `;\n resolve(svg);\n }\n },100);\n });\n}\n\nlet basicStyleCss = `\n.marker__label{\n filter: none;\n}\n`;\n\n","'use strict';\n\nimport { getWidgetsData } from '../crm/crm-requests';\nimport {isDev, projectMode} from '../../settings';\nimport { checkPoiResponse, poiWidgetInit } from './poi/poiv3';\nimport {pageResize} from \"../menu/menu\";\nimport { initPoiData } from '../poi/poiCss';\nimport { GoogleMaps } from '../api/GoogleMaps';\nimport {getUrlParam, isNumeric} from '../../functions';\nimport { BmbyMode } from '../mode/BmbyMode';\n\nwindow.$ = window.jQuery = require('jquery');\n\nexport function widgetsInit (settings) {\n if (BmbyMode.active)\n return;\n\n const response = getWidgetsData();\n response.then((res) =>{\n const [aboutResponse, galleryResponse,poiDataResponse,poiCategoriesResponse] = res;\n\n config.localization.title = '\\n';\n config.localization.icon = config.general.icon;\n config.poiData = poiDataResponse.data;\n config.poiCategories = poiCategoriesResponse.data;\n\n if (isDev) {\n const result = [];\n config.poiData.forEach(poi => {\n poi.name.forEach(name => {\n if (name.lang === 'en')\n result.push({name: name.value, id: poi.id});\n })\n });\n console.log(result);\n }\n\n const poiArray = [config.localization, config.poiData, config.poiCategories];\n\n config.widgets = {};\n config.widgets.about = aboutResponse;\n config.widgets.gallery = galleryResponse;\n config.widgets.poi = poiArray;\n\n if (!checkPoiResponse(config.poiData,config.poiCategories)) {\n poiWidgetInit(poiArray);\n if (getUrlParam('p') !== 'map')\n projectMode.Pagination.paginate({source: 'widgetsInit'});\n\n return;\n }\n\n new GoogleMaps().then(async () => {\n\n if (settings.general.menuItems.map)\n await poiWidgetInit(poiArray);\n\n initPoiData([\n {\n data: config.poiData\n },\n {\n data: config.poiCategories\n },\n {\n data: config.localization\n }\n ]);\n\n if (getUrlParam('p') === 'map')\n projectMode.Pagination.paginate({source: 'widgetsInit'});\n });\n\n if (Array.isArray(galleryResponse.data))\n galleryResponse.data.sort((a ,b) => a.order - b.order);\n\n const mapParameter = getUrlParam('p') === 'map'\n const apartmentParameter = isNumeric(getUrlParam('p'));\n const apartmentParameterInLiteMode = apartmentParameter && projectMode.LiteMode.isActive();\n if (!mapParameter && (!apartmentParameter || apartmentParameterInLiteMode))\n projectMode.Pagination.paginate({source: 'widgetsInit'});\n });\n}\n\nexport const widgetsResize = () => {\n const widgetContainersCollection = [...document.getElementsByClassName('widget__container')];\n widgetContainersCollection.forEach((item) => {\n pageResize(item);\n });\n}\n\n\nexport const desktopErrorIcon = `\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n`;\n","'use strict';\n\nimport {getUrlParam} from \"./functions\";\nimport {ViewMode} from \"./common\";\nimport gsap from \"gsap\";\nimport { District } from './modules/building/District';\nimport { GSAPMixers } from './modules/threejs/GSAPMixer';\nimport { Vector2 } from 'three';\nimport {BmbyMode} from \"./modules/mode/BmbyMode\";\n\nconst MobileDetect = require('mobile-detect');\nexport const assignDeep = require('object-assign-deep');\n\nexport const isMobile = Boolean(new MobileDetect(window.navigator.userAgent).mobile() && !new MobileDetect(window.navigator.userAgent).tablet()) || parseInt(getUrlParam('mobile')) === 1;\nexport const isTablet = Boolean(new MobileDetect(window.navigator.userAgent).mobile() && new MobileDetect(window.navigator.userAgent).tablet())\n || /Macintosh/.test(window.navigator.userAgent) && 'ontouchend' in document;\nexport const isIOS = navigator.vendor && navigator.vendor.indexOf('Apple') > -1;\nexport const isSafari =\n isIOS &&\n navigator.userAgent &&\n navigator.userAgent.indexOf('CriOS') === -1 &&\n navigator.userAgent.indexOf('FxiOS') === -1;\nexport const isDesktop = !isMobile && parseInt(getUrlParam('desktop')) === 1;\nexport const isWeb = !isMobile && !isDesktop && !isTablet;\nexport const isNoMenu = getUrlParam('nomenu');\nexport const isPWA = getUrlParam('source') === 'pwa';\nexport const AVAILABLE_STATUS = (BmbyMode.active) ? 'For Sale' : 'Available';\n\nif (isMobile && !isTablet) {\n document.body.classList.add('mobile-mode');\n} else if (isDesktop) {\n document.body.classList.add('desktop-mode');\n}\n\nexport const isDev =\n getUrlParam('dev') === 'true' ||\n getUrlParam('dev') === '1';\n\nexport const UIRoot = document.getElementById('ui');\nexport const TRoot = document.getElementById('threejs');\n\nexport const threeJsVariables = {\n scene: {},\n raycaster: {},\n animator: null,\n mouse: new Vector2(),\n gyroscope: new Vector2(),\n perspectiveCamera: {},\n cameraTarget: {},\n renderer: {},\n stats: null,\n labelRenderer: null,\n tooltipRenderer: null,\n tilesRenderer: null,\n directionLightCylinder: null,\n composer: null,\n time: null,\n gui: null,\n cloth: null,\n canvasResize: true\n}\n\nexport const components = {};\n\nexport const settingsData = {\n fps: config.threejs.optimization ? config.threejs.optimization.fps : 20,\n resolveTilesUpdate: true,\n loadingError: false,\n slideShowed: false,\n isSound: false,\n projectLoaded: false,\n postProcessing: { //Post-Processing settings\n isActive: false,\n effectFXAA: false,\n depthOfFields: false,\n depthOfFields2: false,\n ambientOcclusion: false,\n },\n stopTimeRender: 5 * 60 * 1000, //time after which the render will stop 5 minutes\n desktopGallery:{\n columnCount: config.features?.gallery?.columnCount || 3,\n gutter: config.features?.gallery?.gutter || 10\n },\n activeViewMode: ViewMode.Orbit,\n calculatePoints: false,\n widgetsPaddingTop: 72,\n destroyedMode: false,\n selectedObject: null,\n hoveredObject: null,\n bombBlock: false,\n userPrevent: false,\n globalThrottle: false,\n animationsDuration: 0.3,\n animationsList:[],\n searchState: [],\n dictionary: null,\n tourOrbitMode: false,\n zoomButtonsStep: {\n increase: 0.02,\n decrease: -0.02\n },\n globalSettings: {\n doubleClickToUnavailable: false,\n flat_focus: false,\n totalDollyBounce: 1,\n floorAppearAnimation: {\n durationBase: 700,\n addPosition: 1000,\n axis: 'y',\n }\n },\n showApplyNow: true,\n lastClickedFlat: '',\n stopRender: false,\n target_zoom: '',\n isIntersection: false,\n buildingDestroyed: false,\n last_interaction: Date.now(),\n totalPercent: 0,\n customSelections: [],\n instanced_floors: [],\n instanced_floors_switch: {},\n currentFloor: 0,\n floor_obj: {},\n lastHoverObject: '',\n objectToDisappear: [],\n isSwitched: false,\n tween_animations: {},\n current_mouse_position: {x : 0, y : 0},\n box_to_intersection: [],\n objects_to_intersection: [],\n additionalIntersectionObjects: [],\n poiIntersection: [],\n floor_plan_btn_last_click: Date.now(),\n headerObjectState:{\n lastSize: 0,\n lastSizeWhenMobileMenuActivated: 0,\n },\n groundFloor: {\n isActive: !(config.features?.groundFloor === false && (config.features?.groundFloor !== 0)),\n floor: config.features?.groundFloor || 0,\n fullLabel: 'floorFullName',\n shortLabel: 'floorShortName'\n },\n doubleClick: false,\n sceneBgContent:{\n orbit:{},\n cylinder:{}\n },\n isLandscape: undefined,\n switchLang: false,\n isConferenceHost: config.features.conference || window.location.host.match(/confdreams.bmby.com/gi) || window.location.host.match(/dreams360.bmby.com/gi) || window.location.host.match(/dreams360lite.bmby.com/gi),\n // isConferenceHost: true,\n isFlat: false,\n tl: gsap.timeline(),\n isTouchEvent: false,\n isClickEvent: false,\n stopWindowResizeEvents: false,\n totalTilesCount: 0,\n customCursor: false,\n animateBuildingHover: false,\n activeModeSwitching: false,\n statisticData: {},\n selectionBoxesDefaultColors: [\n {\n status: 'insaving',\n basic: \"81379e\",\n hover: \"b472cf\",\n active: \"b90dff\",\n isActive: true,\n opacity: {\n basic: 0.3,\n hover: 0.8\n }\n }\n ],\n specifications: null\n};\n\nexport const Buildings = new District();\nexport const GSAPAnimationMixer = new GSAPMixers();\nexport const resourcesFolder = config?.resourcesFolder || 'resources';\n\nexport const cardsData = {\n cardMode: {\n isUnavailable: false,\n isAmenities: false\n },\n openedCards: [],\n multiplyCards: false,\n};\n\n\nexport const projectMode = {\n Orbit: null,\n Cylinder: null,\n FloorPlan: null,\n LiteMode: null,\n Pagination: null,\n QA: null\n};\n\nexport const globalTextures = {};\n\n\n// window.bi = buildings_info;\nwindow.animation = GSAPAnimationMixer;\nwindow.b = Buildings;\nwindow.v = threeJsVariables;\nwindow.s = settingsData;\nwindow.c = config;\nwindow.ct = threeJsVariables.cameraTarget;\nwindow.cd = cardsData;\nwindow.pm = projectMode;\nwindow.gt = globalTextures;\n","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","export default \"varying vec2 vUv;\\nuniform sampler2D currentSlide;\\nuniform vec2 uKenburns;\\nuniform float uKenburnsDirection;\\nuniform float uKenburnsValue;\\nuniform float uAlpha;\\nuniform float forceAnimation;\\n\\n\\nvec2 kenburnsBottom (vec2 uv) {\\n return (uv - vec2(0.0,1.0)) / 2.0 + vec2(0.25,0.6);\\n}\\n\\nvec2 kenburnsLeft (vec2 uv) {\\n return (uv - vec2(1.0,0.0)) / 2.0 + vec2(0.6,0.25);\\n}\\n\\nvec2 kenburnsRight (vec2 uv) {\\n return (uv - vec2(0.0,0.0)) / 2.0 + vec2(0.4,0.25);\\n}\\n\\nvec2 kenburnsTop (vec2 uv) {\\n return (uv - vec2(0.0,0.0)) / 2.0 + vec2(0.25,0.4);\\n}\\n\\nvoid main() {\\n vec2 direction;\\n vec3 color;\\n\\n if (forceAnimation == 1.0) {\\n vec2 kenburns;\\n if (uKenburns == vec2(1.0,0.0)) {\\n kenburns = kenburnsRight(vUv);\\n } else\\n if (uKenburns == vec2(-1.0,0.0)) {\\n kenburns = kenburnsLeft(vUv);\\n } else\\n if (uKenburns == vec2(0.0,1.0)) {\\n kenburns = kenburnsTop(vUv);\\n } else\\n if (uKenburns == vec2(0.0,-1.0)) {\\n kenburns = kenburnsBottom(vUv);\\n } else {\\n kenburns = vUv;\\n }\\n\\n if (uKenburnsDirection == 1.0) {\\n direction = mix(vUv,kenburns,uKenburnsValue);\\n } else {\\n direction = mix(kenburns,vUv,uKenburnsValue);\\n }\\n\\n color = texture2D(currentSlide,direction).rgb;\\n } else {\\n color = texture2D(currentSlide,vUv).rgb;\\n }\\n\\n\\n gl_FragColor = vec4(color,uAlpha);\\n\\n}\\n\";","export default \"varying vec2 vUv;\\n\\nvoid main(){\\n vUv = uv;\\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\\n}\\n\";","export default \"uniform float uTime;\\nuniform sampler2D wave;\\nuniform sampler2D water;\\nuniform float uWaterScale;\\nuniform float uWaterSpeed;\\nuniform float uDistortionStrength;\\nuniform vec3 uWaveColor;\\nuniform vec3 uSeaColor;\\nuniform vec2 uFlow;\\nvarying vec2 vUv;\\n\\nvoid main() {\\n vec2 uv = (vUv - 0.5) * uWaterScale + 0.5;\\n vec2 flow = uTime * uWaterSpeed * uFlow;\\n uv += flow;\\n vec4 waterNoise = texture2D(wave,uv);\\n\\n vec2 displacement = clamp((waterNoise.xy - 0.5) * uDistortionStrength, -1., 1.);\\n displacement += flow * 5.0;\\n vec4 color = texture2D(water, vUv + displacement.xy);\\n float mixValue = color.r;\\n color.rgb *= uSeaColor;\\n gl_FragColor = vec4(mix(color.rgb,uWaveColor,mixValue),1.0);\\n}\\n\";","export default \"varying vec2 vUv;\\n\\nvoid main(){\\n vUv = uv;\\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\\n}\";","export default \"varying vec3 vWorldPosition;\\nvarying vec3 vSunDirection;\\nvarying float vSunfade;\\nvarying vec3 vBetaR;\\nvarying vec3 vBetaM;\\nvarying float vSunE;\\n\\nuniform float mieDirectionalG;\\nuniform vec3 up;\\nuniform float stars;\\n//uniform vec3 clouds;\\nuniform bool showClouds;\\nuniform float cloudsScale;\\nuniform float cloudsDark;\\nuniform float cloudsLight;\\nuniform float cloudsCover;\\nuniform float cloudsAlpha;\\nuniform float cloudsTint;\\nuniform float cloudsSpeed;\\n\\nuniform float sunriseTime;\\nuniform float sunsetTime;\\nuniform float currentTime;\\nuniform float dayStartTime;\\nuniform float dayEndTime;\\nuniform bool useTime;\\n\\nuniform float uTime;\\n\\nconst vec3 cameraPos = vec3( 0.0, 0.0, 0.0 );\\n\\n// constants for atmospheric scattering\\nconst float pi = 3.141592653589793238462643383279502884197169;\\n\\nconst float n = 1.0003; // refractive index of air\\nconst float N = 2.545E25; // number of molecules per unit volume for air at 288.15K and 1013mb (sea level -45 celsius)\\n\\n// optical length at zenith for molecules\\nconst float rayleighZenithLength = 8.4E3;\\nconst float mieZenithLength = 1.25E3;\\n// 66 arc seconds -> degrees, and the cosine of that\\nconst float sunAngularDiameterCos = 0.999956676946448443553574619906976478926848692873900859324;\\n\\n// 3.0 / ( 16.0 * pi )\\nconst float THREE_OVER_SIXTEENPI = 0.05968310365946075;\\n// 1.0 / ( 4.0 * pi )\\nconst float ONE_OVER_FOURPI = 0.07957747154594767;\\n\\nfloat rayleighPhase( float cosTheta ) {\\n return THREE_OVER_SIXTEENPI * ( 1.0 + pow( cosTheta, 2.0 ) );\\n}\\n\\nfloat hgPhase( float cosTheta, float g ) {\\n float g2 = pow( g, 2.0 );\\n float inverse = 1.0 / pow( 1.0 - 2.0 * g * cosTheta + g2, 1.5 );\\n return ONE_OVER_FOURPI * ( ( 1.0 - g2 ) * inverse );\\n}\\n\\nfloat Noise2d( in vec2 x )\\n{\\n float xhash = cos( x.x * 37.0 );\\n float yhash = cos( x.y * 57.0 );\\n return fract( 415.92653 * ( xhash + yhash ) );\\n}\\n\\n// Convert Noise2d() into a \\\"star field\\\" by stomping everthing below fThreshhold to zero.\\nfloat NoisyStarField( in vec2 vSamplePos, float fThreshhold )\\n{\\n float StarVal = Noise2d( vSamplePos );\\n if ( StarVal >= fThreshhold )\\n StarVal = pow( (StarVal - fThreshhold)/(1.0 - fThreshhold), 6.0 );\\n else\\n StarVal = 0.0;\\n return StarVal;\\n}\\n\\nfloat StableStarField( in vec2 vSamplePos, float fThreshhold )\\n{\\n // Linear interpolation between four samples.\\n // Note: This approach has some visual artifacts.\\n // There must be a better way to \\\"anti alias\\\" the star field.\\n float fractX = fract( vSamplePos.x );\\n float fractY = fract( vSamplePos.y );\\n vec2 floorSample = floor( vSamplePos );\\n float v1 = NoisyStarField( floorSample, fThreshhold );\\n float v2 = NoisyStarField( floorSample + vec2( 0.0, 1.0 ), fThreshhold );\\n float v3 = NoisyStarField( floorSample + vec2( 1.0, 0.0 ), fThreshhold );\\n float v4 = NoisyStarField( floorSample + vec2( 1.0, 1.0 ), fThreshhold );\\n\\n float StarVal = v1 * ( 1.0 - fractX ) * ( 1.0 - fractY )\\n + v2 * ( 1.0 - fractX ) * fractY\\n + v3 * fractX * ( 1.0 - fractY )\\n + v4 * fractX * fractY;\\n return StarVal;\\n}\\n\\n\\n\\nvec3 catmul_rom(vec3 p0, vec3 p1, vec3 p2, vec3 p3, float t)\\n{\\n return 0.5 * (\\n (2.0 * p1) +\\n (-p0 + p2) * t +\\n (2.0 * p0 - 5.0 * p1 + 4.0 * p2 - p3) * t * t +\\n (-p0 + 3.0 * p1 - 3.0 * p2 + p3) * t * t * t);\\n}\\n\\nvec3 color_spline(float t, bool wrap)\\n{\\n t = clamp(t, 0.0, 1.0);\\n\\n const int s = 7;\\n\\n vec3 p[s];\\n p[0] = vec3(0, 0, 0) / 255.0;\\n p[1] = vec3(0, 0, 0) / 255.0;\\n// p[2] = vec3(18, 32, 153) / 255.0;\\n p[2] = vec3(48,55, 110) / 255.0;\\n p[3] = vec3(0, 0, 0) / 255.0;\\n p[4] = vec3(0, 0, 0) / 255.0;\\n\\n p[s-2] = p[0];\\n p[s-1] = p[1];\\n\\n float m = wrap ? float(s - 2) : float(s - 3);\\n float d = m * t;\\n\\n int b = int(d);\\n float dt = d - floor(d);\\n\\n return catmul_rom(p[((b-1)+s)%s], p[b], p[b+1], p[(b+2)%s], dt);\\n}\\n\\n//Clouds\\nconst mat2 m = mat2( 1.6, 1.2, -1.2, 1.6 );\\n\\nfloat hash(vec2 uv) {\\n return fract(sin(dot(uv, vec2(124.0, 678.0))) * 987654.0);\\n}\\n\\nfloat noise(vec2 uv) {\\n vec2 i = floor(uv);\\n vec2 f = fract(uv);\\n vec2 b = smoothstep(0.0, 1.0, f);\\n return 2.0 * mix(\\n mix(hash(i), hash(i + vec2(1.0, 0.0)), b.x),\\n mix(hash(i + vec2(0.0, 1.0)), hash(i + vec2(1.0, 1.0)), b.x), b.y) - 1.0;\\n}\\n\\nfloat fbm(bool do_abs, vec2 n, float amp_init, float amp_step, float q, float base_octave) {\\n //float time = uTime * 0.002 * 0.03 * base_octave;\\n\\n n *= vec2(1.0) * cloudsScale * base_octave;\\n // n -= q - time;\\n n -= q;\\n\\n float total = 0.0, amplitude = amp_init;\\n for (int i = 0; i < 7; i++) {\\n float v = noise(n) * amplitude;\\n v = do_abs ? abs(v) : v;\\n\\n total += v;\\n\\n //n = m * n + time;\\n n = m * n;\\n amplitude *= amp_step;\\n }\\n return total;\\n}\\n\\nfloat fbmManual(bool do_abs, vec2 n, float amp_init, float amp_step, float q, float base_octave) {\\n //float time = uTime * 0.002 * 0.03 * base_octave;\\n\\n n *= vec2(1.0) * 2.7 * base_octave;\\n // n -= q - time;\\n n -= q;\\n\\n float total = 0.0, amplitude = amp_init;\\n for (int i = 0; i < 7; i++) {\\n float v = noise(n) * amplitude;\\n v = do_abs ? abs(v) : v;\\n\\n total += v;\\n\\n //n = m * n + time;\\n n = m * n;\\n amplitude *= amp_step;\\n }\\n return total;\\n}\\n\\nfloat calcF(vec2 p, float q) {\\n //ridged noise shape\\n float r = fbm(true, p, 0.8, 0.7, q, 1.0);\\n\\n //noise shape\\n float f = fbm(false, p, 0.7, 0.6, q, 1.0);\\n\\n f *= r + f;\\n\\n f = cloudsCover + cloudsAlpha * f * r;\\n\\n return f;\\n}\\n\\nfloat calcFManual(vec2 p, float q) {\\n //ridged noise shape\\n float r = fbmManual(true, p, 0.8, 0.7, q, 1.0);\\n\\n //noise shape\\n float f = fbmManual(false, p, 0.7, 0.6, q, 1.0);\\n\\n f *= r + f;\\n\\n f = 0.1 + 5.0 * f * r;\\n\\n return f;\\n}\\n\\nfloat calcC(vec2 p, float q) {\\n //noise colour\\n float c = fbm(false, p, 0.4, 0.6, q, 2.0);\\n\\n //noise ridge colour\\n float c1 = fbm(true, p, 0.4, 0.6, q, 3.0);\\n\\n return c + c1;\\n}\\n\\nfloat calcCManual(vec2 p, float q) {\\n //noise colour\\n float c = fbmManual(false, p, 0.4, 0.6, q, 2.0);\\n\\n //noise ridge colour\\n float c1 = fbmManual(true, p, 0.4, 0.6, q, 3.0);\\n\\n return c + c1;\\n}\\n\\n\\n\\n\\n\\nvoid main() {\\n\\n vec3 direction = normalize( vWorldPosition - cameraPos );\\n\\n float starsProgress = stars;\\n vec3 sundisk = vBetaM;\\n vec3 clouds = vec3(1.0);\\n vec3 nightClouds = vec3(37.0 / 255.0, 41.0 / 255.0, 52.0 / 255.0);\\n\\n if (useTime) {\\n starsProgress = 0.0;\\n float alpha = 0.0;\\n\\n if (currentTime < sunriseTime) {\\n sundisk = vec3(0.0);\\n alpha = ((sunriseTime - currentTime) / (sunriseTime - dayStartTime)) * 10.0;\\n } else if (currentTime > sunsetTime) {\\n sundisk = vec3(0.0);\\n alpha = ((currentTime - sunsetTime) / (dayEndTime - sunsetTime)) * 10.0;\\n }\\n\\n alpha = clamp(alpha,0.0,1.0);\\n clouds = mix(clouds,nightClouds,alpha);\\n starsProgress = alpha;\\n } else {\\n clouds = mix(clouds,nightClouds,starsProgress);\\n }\\n\\n // optical length\\n // cutoff angle at 90 to avoid singularity in next formula.\\n float zenithAngle = acos( max( 0.0, dot( up, direction ) ) );\\n float inverse = 1.0 / ( cos( zenithAngle ) + 0.15 * pow( 93.885 - ( ( zenithAngle * 180.0 ) / pi ), -1.253 ) );\\n float sR = rayleighZenithLength * inverse;\\n float sM = mieZenithLength * inverse;\\n\\n // combined extinction factor\\n vec3 Fex = exp( -( vBetaR * sR + sundisk * sM ) );\\n\\n // in scattering\\n float cosTheta = dot( direction, vSunDirection );\\n\\n float rPhase = rayleighPhase( cosTheta * 0.5 + 0.5 );\\n vec3 betaRTheta = vBetaR * rPhase;\\n\\n float mPhase = hgPhase( cosTheta, mieDirectionalG );\\n vec3 betaMTheta = sundisk * mPhase;\\n\\n// vec3 Lin = pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * ( 1.0 - Fex ), vec3( 1.5 ) );\\n// Lin *= mix( vec3( 1.0 ), vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * Fex , clamp( pow( 1.0 -\\n// dot(up, vSunDirection ), 5.0 ), 0.0, 1.0 ) );\\n vec3 Lin = vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + sundisk ) ) * ( 1.0 - Fex );\\n Lin *= mix( vec3(172.0/255.0, 220.0/255.0, 252.0/255.0), pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + sundisk ) ) * Fex, vec3(1.0/ 2.0 ) ), clamp( pow( 1.0 - dot(up, vSunDirection ), 5.0 ), 0.0, 1.0 ) );\\n\\n // nightsky\\n float theta = acos( direction.y ); // elevation --> y-axis, [-pi/2, pi/2]\\n float phi = atan( direction.z, direction.x ); // azimuth --> x-axis [-pi/2, pi/2]\\n vec2 uv = vec2( phi, theta ) / vec2( 2.0 * pi, pi ) + vec2( 0.5, 0.0 );\\n\\n\\n // uv\\n vec2 vUv = vec2( phi, theta ) * 4.0;\\n\\n // Stars\\n float StarFieldThreshhold = 0.997;\\n vec2 vSamplePos = uv * 3000.0;\\n float StarVal = StableStarField( vSamplePos, StarFieldThreshhold ) * 5.0 * starsProgress;\\n StarVal = StarVal - StarVal * smoothstep(0.0, 1.0, vUv.y - 5.2);\\n\\n float t = uv.y / 0.5 - 0.51;\\n vec3 color = color_spline(t, true);\\n\\n vec3 L0 = (color + StarVal) * Fex;\\n\\n // composition + solar disc\\n// float sundisk = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos + 0.00002, cosTheta );\\n //L0 += ( vSunE * 19000.0 * Fex ) * sundisk;\\n\\n vec3 texColor = ( Lin + L0 ) * 0.04 + vec3( 0.0, 0.0003, 0.00075 );\\n\\n vec3 retColor = pow( texColor, vec3( 1.0 / ( 1.2 + ( 1.2 * vSunfade ) ) ) );\\n\\n vec3 mixed = mix(retColor,(color + StarVal) * 0.5, starsProgress);\\n vec3 mixedSkyColor = mix(retColor,color * 0.5, starsProgress);\\n vec3 finalColor = mixed;\\n\\n //Draw clouds\\n vec2 cloudsUV = vUv;\\n cloudsUV.x *= 0.5;\\n float cloudsTime = uTime * cloudsSpeed;\\n cloudsUV.x -= cloudsTime;\\n\\n float q = fbm(false, cloudsUV, 0.1, 0.4, 0.0, 1.0);\\n float f = calcF(cloudsUV, q);\\n float c = calcC(cloudsUV, q);\\n\\n if (showClouds) {\\n vec3 cloudcolour = clamp(mixedSkyColor + clouds,vec3(0.0),vec3(1.0)) * clamp((cloudsTint + cloudsDark + cloudsLight * c), 0.0, 1.0);\\n finalColor = mix(mixed, cloudcolour, clamp(f + c, 0.0, 1.0));\\n } else {\\n c *= 0.05;\\n f *= 0.05;\\n vec3 cloudcolour = clamp(mixedSkyColor + clouds,vec3(0.0),vec3(1.0)) * clamp((0.91 + 0.16 * c), 0.0, 1.0);\\n finalColor = mix(mixed, cloudcolour, clamp(f + c, 0.0, 1.0));\\n }\\n\\n finalColor = mix(finalColor,mixed,smoothstep(0.0, 1.0, cloudsUV.y - 5.2 ));\\n finalColor = mix(mixed,finalColor,smoothstep(0.0, 1.0, cloudsUV.x + 2.0 * pi + cloudsTime));\\n finalColor = mix(finalColor,mixed,smoothstep(0.0, 1.0, cloudsUV.x - 1.7 * pi + cloudsTime));\\n\\n gl_FragColor = vec4( finalColor, 1.0 );\\n\\n// #include \\n// #include \\n\\n}\\n\";","export default \"uniform vec3 sunPosition;\\nuniform float rayleigh;\\nuniform float turbidity;\\nuniform float mieCoefficient;\\nuniform vec3 up;\\n\\nvarying vec3 vWorldPosition;\\nvarying vec3 vSunDirection;\\nvarying float vSunfade;\\nvarying vec3 vBetaR;\\nvarying vec3 vBetaM;\\nvarying float vSunE;\\n\\n// constants for atmospheric scattering\\nconst float e = 2.71828182845904523536028747135266249775724709369995957;\\nconst float pi = 3.141592653589793238462643383279502884197169;\\n\\n// wavelength of used primaries, according to preetham\\nconst vec3 lambda = vec3( 680E-9, 550E-9, 450E-9 );\\n// this pre-calcuation replaces older TotalRayleigh(vec3 lambda) function:\\n// (8.0 * pow(pi, 3.0) * pow(pow(n, 2.0) - 1.0, 2.0) * (6.0 + 3.0 * pn)) / (3.0 * N * pow(lambda, vec3(4.0)) * (6.0 - 7.0 * pn))\\nconst vec3 totalRayleigh = vec3( 5.804542996261093E-6, 1.3562911419845635E-5, 3.0265902468824876E-5 );\\n\\n// mie stuff\\n// K coefficient for the primaries\\nconst float v = 4.0;\\nconst vec3 K = vec3( 0.686, 0.678, 0.666 );\\n// MieConst = pi * pow( ( 2.0 * pi ) / lambda, vec3( v - 2.0 ) ) * K\\nconst vec3 MieConst = vec3( 1.8399918514433978E14, 2.7798023919660528E14, 4.0790479543861094E14 );\\n\\n// earth shadow hack\\n// cutoffAngle = pi / 1.95;\\nconst float cutoffAngle = 1.6110731556870734;\\nconst float steepness = 1.5;\\nconst float EE = 1000.0;\\n\\nfloat sunIntensity( float zenithAngleCos ) {\\n zenithAngleCos = clamp( zenithAngleCos, -1.0, 1.0 );\\n return EE * max( 0.0, 1.0 - pow( e, -( ( cutoffAngle - acos( zenithAngleCos ) ) / steepness ) ) );\\n}\\n\\nvec3 totalMie( float T ) {\\n float c = ( 0.2 * T ) * 10E-18;\\n return 0.434 * c * MieConst;\\n}\\n\\nvoid main() {\\n\\n vec4 worldPosition = modelMatrix * vec4( position, 1.0 );\\n vWorldPosition = worldPosition.xyz;\\n\\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n //gl_Position.z = gl_Position.w; // set z to camera.far\\n\\n vSunDirection = normalize( sunPosition );\\n\\n vSunE = sunIntensity( dot( vSunDirection, up ) );\\n\\n vSunfade = 1.0 - clamp( 1.0 - exp( ( sunPosition.y / 450000.0 ) ), 0.0, 1.0 );\\n\\n float rayleighCoefficient = rayleigh - ( 1.0 * ( 1.0 - vSunfade ) );\\n\\n // extinction (absorbtion + out scattering)\\n // rayleigh coefficients\\n vBetaR = totalRayleigh * rayleighCoefficient;\\n\\n // mie coefficients\\n vBetaM = totalMie( turbidity ) * mieCoefficient;\\n\\n}\\n\";","export default \"uniform sampler2D dayTexture;\\nuniform sampler2D nightTexture;\\nuniform float uTimesOfDay;\\nvarying vec2 vUv;\\n\\nvoid main() {\\n vec4 day = texture2D(dayTexture,vUv);\\n vec4 night = texture2D(nightTexture,vUv);\\n gl_FragColor = mix(day,night,uTimesOfDay);\\n}\\n\";","export default \"varying vec2 vUv;\\n\\nvoid main(){\\n vUv = uv;\\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\\n}\\n\";","export default \"uniform sampler2D seaTexture;\\nuniform sampler2D nightSeaTexture;\\nuniform sampler2D depthTexture;\\nuniform float uSpeed;\\nuniform float uHorizon;\\nuniform float uDirection;\\nuniform float uScale;\\nuniform float uDark;\\nuniform float uLight;\\nuniform float uCover;\\nuniform float uAlpha;\\nuniform float uTint;\\nuniform float uTime;\\nuniform float uTimesOfDay;\\nuniform float uMinWave;\\nuniform float uMaxWave;\\nuniform vec2 uDepthMouse;\\nvarying vec2 vUv;\\n\\nconst mat2 m = mat2( 1.6, 1.2, -1.2, 1.6 );\\n\\nfloat hash(vec2 uv) {\\n return fract(sin(dot(uv, vec2(123.45, 678.9))) * 987654.321);\\n}\\n\\nfloat noise(vec2 uv) {\\n vec2 i = floor(uv);\\n vec2 f = fract(uv);\\n vec2 b = smoothstep(0.0, 1.0, f);\\n return 2.0 * mix(\\n mix(hash(i), hash(i + vec2(1.0, 0.0)), b.x),\\n mix(hash(i + vec2(0.0, 1.0)), hash(i + vec2(1.0, 1.0)), b.x), b.y) - 1.0;\\n}\\n\\nfloat fbm(bool do_abs, vec2 n, float amp_init, float amp_step, float q, float base_octave) {\\n //float time = uTime * 0.002 * 0.03 * base_octave;\\n\\n n *= vec2(1.0) * uScale * base_octave;\\n // n -= q - time;\\n n -= q;\\n\\n float total = 0.0, amplitude = amp_init;\\n for (int i = 0; i < 7; i++) {\\n float v = noise(n) * amplitude;\\n v = do_abs ? abs(v) : v;\\n\\n total += v;\\n\\n //n = m * n + time;\\n n = m * n;\\n amplitude *= amp_step;\\n }\\n return total;\\n}\\n\\nfloat calcF(vec2 p, float q) {\\n //ridged noise shape\\n float r = fbm(true, p, 0.8, 0.7, q, 1.0);\\n\\n //noise shape\\n float f = fbm(false, p, 0.7, 0.6, q, 1.0);\\n\\n f *= r + f;\\n\\n f = uCover + uAlpha*f*r;\\n\\n return f;\\n}\\n\\nfloat calcC(vec2 p, float q) {\\n //noise colour\\n float c = fbm(false, p, 0.4, 0.6, q, 2.0);\\n\\n //noise ridge colour\\n float c1 = fbm(true, p, 0.4, 0.6, q, 3.0);\\n float sum = c + c1;\\n\\n return sum;\\n}\\n\\n\\nvoid main() {\\n vec2 p = vUv;\\n p.y += uHorizon;\\n p.x -=0.5;\\n p /= 1.0 - p.y * 2.0;\\n p.x += 0.5;\\n vec2 uv = vUv;\\n vec4 depthDistortion = texture2D(depthTexture, uv);\\n float parallaxMult = depthDistortion.r;\\n vec2 parallax = (uDepthMouse * 0.01) * parallaxMult;\\n uv += parallax;\\n vec3 dayColor = texture2D(seaTexture,uv).rgb;\\n vec3 nightColor = texture2D(nightSeaTexture,uv).rgb;\\n vec3 mainColor = mix(dayColor,nightColor,uTimesOfDay);\\n\\n if (p.y >= uHorizon) {\\n mat2 RM = mat2(cos(uDirection), -sin(uDirection), sin(uDirection), cos(uDirection));\\n\\n vec2 position = RM*(p);\\n position.x -= uTime * 2.0 * uSpeed;\\n\\n float q = fbm(false, position, 0.1, 0.4, 0.0, 1.0);\\n float f = calcF(position, q);\\n float c = calcC(position, q);\\n\\n vec3 waveColour = vec3(1.0) * clamp((uDark + uLight * c), 0.0, 1.0);\\n\\n c *= uCover;\\n f *= uCover;\\n\\n vec3 waveMainColor = clamp(uTint + waveColour, 0.0, 2.0);\\n vec3 waveFinalColor = mix(mainColor,waveMainColor, clamp(f + c, 0.0, 1.0));\\n mainColor = mix (mainColor,waveFinalColor, smoothstep(uMinWave, uMaxWave, p.y));\\n }\\n\\n gl_FragColor = vec4( mainColor, 1.0);\\n\\n}\\n\";","export default \"varying vec2 vUv;\\n\\nvoid main(){\\n vUv = uv;\\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\\n}\";","export default \"varying vec2 vUv;\\nuniform float uTime;\\nuniform float uTimesOfDay;\\n//uniform sampler2D skyTexture;\\n//uniform sampler2D nightSkyTexture;\\nuniform vec3 dayBottomColor;\\nuniform vec3 dayTopColor;\\nuniform vec3 nightBottomColor;\\nuniform vec3 nightTopColor;\\nuniform float mixingLine;\\nuniform float uSkySpeed;\\nuniform float uHorizon;\\nuniform float uDirection;\\nuniform float uScale;\\nuniform float uDark;\\nuniform float uLight;\\nuniform float uCover;\\nuniform float uAlpha;\\nuniform float uTint;\\nuniform sampler2D rainbowTexture;\\nuniform bool uRainbowActive;\\nuniform float uRainbowY;\\nuniform float uRainbowScale;\\n\\nconst mat2 m = mat2( 1.6, 1.2, -1.2, 1.6 );\\n\\nfloat hash(vec2 uv) {\\n return fract(sin(dot(uv, vec2(124.0, 678.0))) * 987654.0);\\n}\\n\\nfloat noise(vec2 uv) {\\n vec2 i = floor(uv);\\n vec2 f = fract(uv);\\n vec2 b = smoothstep(0.0, 1.0, f);\\n return 2.0 * mix(\\n mix(hash(i), hash(i + vec2(1.0, 0.0)), b.x),\\n mix(hash(i + vec2(0.0, 1.0)), hash(i + vec2(1.0, 1.0)), b.x), b.y) - 1.0;\\n}\\n\\nfloat fbm(bool do_abs, vec2 n, float amp_init, float amp_step, float q, float base_octave) {\\n //float time = uTime * 0.002 * 0.03 * base_octave;\\n\\n n *= vec2(1.0) * uScale * base_octave;\\n // n -= q - time;\\n n -= q;\\n\\n float total = 0.0, amplitude = amp_init;\\n for (int i = 0; i < 7; i++) {\\n float v = noise(n) * amplitude;\\n v = do_abs ? abs(v) : v;\\n\\n total += v;\\n\\n //n = m * n + time;\\n n = m * n;\\n amplitude *= amp_step;\\n }\\n return total;\\n}\\n\\nfloat calcF(vec2 p, float q) {\\n //ridged noise shape\\n float r = fbm(true, p, 0.8, 0.7, q, 1.0);\\n\\n //noise shape\\n float f = fbm(false, p, 0.7, 0.6, q, 1.0);\\n\\n f *= r + f;\\n\\n f = uCover + uAlpha*f*r;\\n\\n return f;\\n}\\n\\nfloat calcC(vec2 p, float q) {\\n //noise colour\\n float c = fbm(false, p, 0.4, 0.6, q, 2.0);\\n\\n //noise ridge colour\\n float c1 = fbm(true, p, 0.4, 0.6, q, 3.0);\\n\\n return c + c1;\\n}\\n\\nfloat Noise2d( in vec2 x )\\n{\\n float xhash = cos( x.x * 37.0 );\\n float yhash = cos( x.y * 57.0 );\\n return fract( 415.92653 * ( xhash + yhash ) );\\n}\\n\\n// Convert Noise2d() into a \\\"star field\\\" by stomping everthing below fThreshhold to zero.\\nfloat NoisyStarField( in vec2 vSamplePos, float fThreshhold )\\n{\\n float StarVal = Noise2d( vSamplePos );\\n if ( StarVal >= fThreshhold )\\n StarVal = pow( (StarVal - fThreshhold)/(1.0 - fThreshhold), 6.0 );\\n else\\n StarVal = 0.0;\\n return StarVal;\\n}\\n\\nfloat StableStarField( in vec2 vSamplePos, float fThreshhold )\\n{\\n // Linear interpolation between four samples.\\n // Note: This approach has some visual artifacts.\\n // There must be a better way to \\\"anti alias\\\" the star field.\\n float fractX = fract( vSamplePos.x );\\n float fractY = fract( vSamplePos.y );\\n vec2 floorSample = floor( vSamplePos );\\n float v1 = NoisyStarField( floorSample, fThreshhold );\\n float v2 = NoisyStarField( floorSample + vec2( 0.0, 1.0 ), fThreshhold );\\n float v3 = NoisyStarField( floorSample + vec2( 1.0, 0.0 ), fThreshhold );\\n float v4 = NoisyStarField( floorSample + vec2( 1.0, 1.0 ), fThreshhold );\\n\\n float StarVal = v1 * ( 1.0 - fractX ) * ( 1.0 - fractY )\\n + v2 * ( 1.0 - fractX ) * fractY\\n + v3 * fractX * ( 1.0 - fractY )\\n + v4 * fractX * fractY;\\n return StarVal;\\n}\\n\\n\\nvoid main() {\\n// vec4 textureColor = texture2D( skyTexture , vUv);\\n// vec4 nightTexture = texture2D( nightSkyTexture , vUv);\\n vec2 rainbowvUv = ((vUv * vec2(0.5,1.0) - vec2(0.5,1.0) / 2.0 + 0.5) - 0.5) * uRainbowScale + 0.5;\\n rainbowvUv.y += uRainbowY;\\n\\n //Gradient\\n vec2 gradientUV = vUv;\\n gradientUV.y -= mixingLine;\\n\\n float StarFieldThreshhold = 0.997;\\n vec2 vSamplePos = vUv * 1000.0;\\n float StarVal = StableStarField( vSamplePos, StarFieldThreshhold );\\n\\n vec4 bgDay = mix(vec4(dayBottomColor,1.0), vec4(dayTopColor,1.0), smoothstep(0.0, 1.0, gradientUV.y));\\n vec4 bgNight = mix(vec4(nightBottomColor,1.0), vec4(nightTopColor,1.0), smoothstep(0.0, 1.0, gradientUV.y));\\n\\n bgNight += (StarVal * smoothstep(mixingLine, 1.0, gradientUV.y));\\n // Gradient end\\n\\n vec4 rainbowColor = texture2D(rainbowTexture,rainbowvUv);\\n vec4 mainTexture = mix(bgDay,bgNight,uTimesOfDay);\\n vec3 mainColor = mainTexture.rgb;\\n\\n if (uRainbowActive) {\\n mainTexture = rainbowColor;\\n mainColor = mainTexture.rgb;\\n } else {\\n\\n vec2 p = vUv;\\n p.y += uHorizon;\\n p.x -=0.5;\\n p /= 1.0 - p.y * 2.0;\\n p.x += 0.5;\\n\\n if (p.y <= uHorizon) {\\n mat2 RM = mat2(cos(uDirection), -sin(uDirection), sin(uDirection), cos(uDirection));\\n\\n vec2 position = RM*(p);\\n position.x -= uTime * 2.0 * uSkySpeed;\\n\\n float len = 1.0 / length(p);\\n\\n float q = fbm(false, position, 0.1, 0.4, 0.0, 1.0);\\n float f = calcF(position, q);\\n float c = calcC(position, q);\\n\\n vec3 cloudcolour = vec3(1.0) * clamp((uDark + uLight*c), 0.0, 1.0);\\n\\n c *= uCover;\\n f *= uCover;\\n\\n mainColor = mix(mainColor, clamp(uTint + cloudcolour, 0.0, 2.0), clamp(f + c, 0.0, 1.0));\\n mainColor = mix (mainTexture.rgb,mainColor, len - len * uTimesOfDay * 0.8);\\n }\\n\\n }\\n\\n gl_FragColor = vec4( mainColor, mainTexture.a );\\n\\n}\\n\";","export default \"varying vec2 vUv;\\n\\nvoid main(){\\n vUv = uv;\\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\\n}\";","export default \"varying vec2 vUv;\\nuniform vec2 uAspect;\\nuniform float uTime;\\nuniform float uTimesOfDay;\\nuniform float uSpeed;\\nuniform float uTurbulence;\\nuniform vec2 uScale;\\nuniform vec2 uOffsetX;\\nuniform vec2 uOffsetY;\\nuniform sampler2D generalTexture;\\nuniform sampler2D nightGeneralTexture;\\nuniform sampler2D depthTexture;\\nuniform vec2 uDepthMouse;\\n\\n\\nvec3 mod289(vec3 x) {\\n return x - floor(x * (1.0 / 289.0)) * 289.0;\\n}\\n\\nvec4 mod289(vec4 x) {\\n return x - floor(x * (1.0 / 289.0)) * 289.0;\\n}\\n\\nvec4 permute(vec4 x) {\\n return mod289(((x*34.0)+1.0)*x);\\n}\\n\\nvec4 taylorInvSqrt(vec4 r)\\n{\\n return 1.79284291400159 - 0.85373472095314 * r;\\n}\\n\\nfloat snoise(vec3 v)\\n{\\n const vec2 C = vec2(1.0/6.0, 1.0/3.0) ;\\n const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);\\n\\n // First corner\\n vec3 i = floor(v + dot(v, C.yyy) );\\n vec3 x0 = v - i + dot(i, C.xxx) ;\\n\\n // Other corners\\n vec3 g = step(x0.yzx, x0.xyz);\\n vec3 l = 1.0 - g;\\n vec3 i1 = min( g.xyz, l.zxy );\\n vec3 i2 = max( g.xyz, l.zxy );\\n\\n // x0 = x0 - 0.0 + 0.0 * C.xxx;\\n // x1 = x0 - i1 + 1.0 * C.xxx;\\n // x2 = x0 - i2 + 2.0 * C.xxx;\\n // x3 = x0 - 1.0 + 3.0 * C.xxx;\\n vec3 x1 = x0 - i1 + C.xxx;\\n vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y\\n vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y\\n\\n // Permutations\\n i = mod289(i);\\n vec4 p = permute( permute( permute(\\n i.z + vec4(0.0, i1.z, i2.z, 1.0 ))\\n + i.y + vec4(0.0, i1.y, i2.y, 1.0 ))\\n + i.x + vec4(0.0, i1.x, i2.x, 1.0 ));\\n\\n // Gradients: 7x7 points over a square, mapped onto an octahedron.\\n // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)\\n float n_ = 0.142857142857; // 1.0/7.0\\n vec3 ns = n_ * D.wyz - D.xzx;\\n\\n vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7)\\n\\n vec4 x_ = floor(j * ns.z);\\n vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N)\\n\\n vec4 x = x_ *ns.x + ns.yyyy;\\n vec4 y = y_ *ns.x + ns.yyyy;\\n vec4 h = 1.0 - abs(x) - abs(y);\\n\\n vec4 b0 = vec4( x.xy, y.xy );\\n vec4 b1 = vec4( x.zw, y.zw );\\n\\n //vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;\\n //vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;\\n vec4 s0 = floor(b0)*2.0 + 1.0;\\n vec4 s1 = floor(b1)*2.0 + 1.0;\\n vec4 sh = -step(h, vec4(0.0));\\n\\n vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;\\n vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;\\n\\n vec3 p0 = vec3(a0.xy,h.x);\\n vec3 p1 = vec3(a0.zw,h.y);\\n vec3 p2 = vec3(a1.xy,h.z);\\n vec3 p3 = vec3(a1.zw,h.w);\\n\\n //Normalise gradients\\n vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));\\n p0 *= norm.x;\\n p1 *= norm.y;\\n p2 *= norm.z;\\n p3 *= norm.w;\\n\\n // Mix final noise value\\n vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);\\n m = m * m;\\n return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1),\\n dot(p2,x2), dot(p3,x3) ) );\\n}\\n\\nfloat fBm(vec3 coords)\\n{\\n const int octaves = 2;\\n\\n float smoothness = 2.0; // should be between 0.0 and 1.0?\\n float lacunarity = 2.0;\\n\\n float result = 0.0;\\n float totalAmplitude = 0.0;\\n\\n for (int o = 0; o != octaves; ++o)\\n {\\n float amplitude = pow(lacunarity, -smoothness * float(o));\\n\\n result += snoise(coords) * amplitude;\\n totalAmplitude += amplitude;\\n\\n coords *= lacunarity;\\n }\\n\\n return result / totalAmplitude;\\n}\\n\\nfloat turbulence(vec3 coords)\\n{\\n const float f_low = 1.0;\\n const int octaves = 2;\\n\\n float t = 0.0;\\n\\n for (int o = 0; o != octaves; ++o)\\n {\\n float f = f_low * pow(2.0, float(o));\\n\\n t += abs(snoise(coords)) / f;\\n\\n coords *= 2.0;\\n }\\n\\n return t; // - 0.3;\\n}\\n\\nvoid main() {\\n\\n float time = uTime * 2.0 * uSpeed;\\n\\n vec2 uv = vUv;\\n\\n vec2 fbm_scale = vec2(1.0);\\n// vec2 t_scale = vec2(50.0);\\n\\n// vec2 x_offset = vec2(100.0, 0.0);\\n// vec2 y_offset = vec2(300.0, 150.0);\\n// vec2 x_offset = vec2(123.456, 0.0);\\n// vec2 y_offset = vec2(349.234, 1704.2);\\n\\n\\n vec2 x_coords = (uv + uOffsetX) * fbm_scale;\\n float xo = fBm(vec3(x_coords, time));\\n\\n vec2 tx_coords = (uv + uOffsetX) * uScale;\\n float xt = turbulence(vec3(tx_coords, time));\\n\\n vec2 y_coords = (uv + uOffsetY) * fbm_scale;\\n float yo = fBm(vec3(y_coords, time));\\n\\n vec2 ty_coords = (uv + uOffsetY) * uScale;\\n float yt = turbulence(vec3(ty_coords, time));\\n\\n vec2 po = uTurbulence * vec2(xo + xt, yo + yt);\\n\\n vec2 tc = vUv;\\n\\n vec4 depthDistortion = texture2D(depthTexture, tc);\\n float parallaxMult = depthDistortion.r;\\n vec2 parallax = (uDepthMouse * 0.01) * parallaxMult;\\n tc += parallax;\\n\\n vec3 dayColor = texture2D(generalTexture, tc + po).rgb;\\n vec3 nightColor = texture2D(nightGeneralTexture, tc + po).rgb;\\n vec3 color = mix(dayColor,nightColor,uTimesOfDay);\\n\\n\\n gl_FragColor = vec4(vec3(color), 1.0);\\n\\n}\\n\";","export default \"varying vec2 vUv;\\n\\nvoid main(){\\n vUv = uv;\\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\\n}\";","export default \"varying vec2 vUv;\\nuniform sampler2D mainLayer;\\nuniform sampler2D secondLayer;\\nuniform float progress;\\n\\nvoid main() {\\n// float effectRadius = 1.0;\\n// float effectAngle = progress * 3.14159;\\n// vec2 center = vec2(0.5,0.5);\\n// vec2 uv = vUv - center;\\n// float len = length(uv * vec2(vUv.x / vUv.y, 1.));\\n// float angle = atan(uv.y, uv.x) + effectAngle * smoothstep(effectRadius, 0., len);\\n// float radius = length(uv);\\n// vec2 uv2 = vec2(radius * cos(angle), radius * sin(angle)) + center;\\n\\n// vec2 uv = vUv;\\n//\\n// vec2 center = vec2( .5 );\\n// vec2 dir = normalize( center - uv );\\n// float d = length( center - uv );\\n// float factor = .5 * sin( progress );\\n// float f = exp( factor * ( d - .5 ) ) - 1.;\\n// if( d > .5 ) f = 0.;\\n\\n vec4 mainTexture = texture2D( mainLayer, vUv );\\n// vec4 mainTexture = texture2D( mainLayer, uv + f * dir );\\n// vec4 mainTexture = texture2D( mainLayer, uv2 );\\n vec4 secondTexture = texture2D( secondLayer, vUv );\\n gl_FragColor = mix(mainTexture,secondTexture,progress);\\n}\\n\";","export default \"varying vec2 vUv;\\n\\nvoid main() {\\n vUv = uv;\\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";","export default \"varying vec2 vUv;\\nuniform sampler2D tDiffuse;\\nuniform sampler2D tDepth;\\nuniform float maxblur; // max blur amount\\nuniform float aperture; // aperture - bigger values for shallower depth of field\\nuniform float focus;\\nuniform float aspect;\\nuniform float far;\\nuniform float near;\\n\\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\\n return ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\\n\\nvoid main() {\\n vec2 aspectcorrect = vec2( 1.0, aspect );\\n float viewZ = perspectiveDepthToViewZ(texture2D( tDepth, vUv).x, near, far );\\n float factor = ( focus + viewZ ); // viewZ is <= 0, so this is a difference equation\\n vec2 dofblur = vec2 ( clamp( factor * aperture, -maxblur, maxblur ) );\\n vec2 dofblur9 = dofblur * 0.9;\\n vec2 dofblur7 = dofblur * 0.7;\\n vec2 dofblur4 = dofblur * 0.4;\\n vec4 col = vec4( 0.0 );\\n col += texture2D( tDiffuse, vUv.xy );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.15, 0.37 ) * aspectcorrect ) * dofblur );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( -0.37, 0.15 ) * aspectcorrect ) * dofblur );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.40, 0.0 ) * aspectcorrect ) * dofblur );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.37, -0.15 ) * aspectcorrect ) * dofblur );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( -0.15, 0.37 ) * aspectcorrect ) * dofblur );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.37, 0.15 ) * aspectcorrect ) * dofblur );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.15, -0.37 ) * aspectcorrect ) * dofblur );\\n\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.15, 0.37 ) * aspectcorrect ) * dofblur9 );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( -0.37, 0.15 ) * aspectcorrect ) * dofblur9 );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.37, -0.15 ) * aspectcorrect ) * dofblur9 );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur9 );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( -0.15, 0.37 ) * aspectcorrect ) * dofblur9 );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.37, 0.15 ) * aspectcorrect ) * dofblur9 );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur9 );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.15, -0.37 ) * aspectcorrect ) * dofblur9 );\\n\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur7 );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.40, 0.0 ) * aspectcorrect ) * dofblur7 );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur7 );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur7 );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur7 );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur7 );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur7 );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur7 );\\n\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur4 );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.4, 0.0 ) * aspectcorrect ) * dofblur4 );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur4 );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur4 );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur4 );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur4 );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur4 );\\n col += texture2D( tDiffuse, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur4 );\\n\\n gl_FragColor = col / 41.0;\\n gl_FragColor.a = 1.0;\\n}\";","export default \"varying vec2 vUv;\\n\\nvoid main() {\\n\\n vUv = uv;\\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n\\n}\";","export default \"uniform sampler2D tDiffuse;\\nuniform sampler2D tDepth;\\nuniform sampler2D tDepthRGB;\\nuniform sampler2D tSky;\\nuniform float fogNear;\\nuniform float fogFar;\\n\\nuniform float sunriseTime;\\nuniform float sunsetTime;\\nuniform float currentTime;\\nuniform float dayStartTime;\\nuniform float dayEndTime;\\nuniform float uTime;\\n\\nuniform float nightLutSize;\\nuniform float nightLutIntensity;\\nuniform sampler3D nightLut;\\n\\nuniform float dayLutSize;\\nuniform float dayLutIntensity;\\nuniform sampler3D dayLut;\\n\\nuniform mat4 uProjectionMatrix;\\nuniform mat4 uMatrixWorldInverse;\\n\\nvarying vec2 vUv;\\n\\nstruct PointLights {\\n vec3 position;\\n vec3 rotation;\\n vec3 color;\\n float intensity;\\n float radius;\\n};\\n\\nuniform PointLights lights[POINTS_LIGHT_COUNT];\\n\\n\\nvec3 worldPosFromDepth( vec2 texCoord, float depth) {\\n vec4 clipPos = vec4( texCoord * 2.0 - 1.0, depth * 2.0 - 1.0, 1.0 );\\n vec4 viewPos = inverse( uProjectionMatrix ) * clipPos;\\n\\n // Perspective division\\n //viewPos /= viewPos.w;\\n\\n vec4 worldPos = inverse( uMatrixWorldInverse ) * viewPos;\\n return worldPos.xyz / worldPos.w;\\n}\\n\\nvec3 getViewPosition(const in vec2 screenPosition, const in float depth) {\\n vec4 clipSpacePosition = vec4(vec3(screenPosition, depth) * 2.0 - 1.0, 1.0);\\n vec4 viewSpacePosition = inverse(uProjectionMatrix) * clipSpacePosition;\\n return viewSpacePosition.xyz / viewSpacePosition.w;\\n}\\n\\nfloat fetchDepth(const ivec2 uv) {\\n return texelFetch(tDepthRGB, uv.xy, 0).x;\\n}\\n\\nvec3 computeNormalFromDepth(const vec2 uv) {\\n vec2 size = vec2(textureSize(tDepthRGB, 0));\\n ivec2 p = ivec2(uv * size);\\n float c0 = fetchDepth(p);\\n float l2 = fetchDepth(p - ivec2(2, 0));\\n float l1 = fetchDepth(p - ivec2(1, 0));\\n float r1 = fetchDepth(p + ivec2(1, 0));\\n float r2 = fetchDepth(p + ivec2(2, 0));\\n float b2 = fetchDepth(p - ivec2(0, 2));\\n float b1 = fetchDepth(p - ivec2(0, 1));\\n float t1 = fetchDepth(p + ivec2(0, 1));\\n float t2 = fetchDepth(p + ivec2(0, 2));\\n float dl = abs((2.0 * l1 - l2) - c0);\\n float dr = abs((2.0 * r1 - r2) - c0);\\n float db = abs((2.0 * b1 - b2) - c0);\\n float dt = abs((2.0 * t1 - t2) - c0);\\n vec3 ce = getViewPosition(uv, c0).xyz;\\n vec3 dpdx = (dl < dr) ? ce - getViewPosition((uv - vec2(1.0 / size.x, 0.0)), l1).xyz : -ce + getViewPosition((uv + vec2(1.0 / size.x, 0.0)), r1).xyz;\\n vec3 dpdy = (db < dt) ? ce - getViewPosition((uv - vec2(0.0, 1.0 / size.y)), b1).xyz : -ce + getViewPosition((uv + vec2(0.0, 1.0 / size.y)), t1).xyz;\\n return normalize(cross(dpdx, dpdy));\\n}\\n\\nvec3 getDepthMask(vec4 depth) {\\n return clamp(depth.rgb * 255.0,0.0,1.0);\\n}\\n\\nvec3 computeNightLight(vec2 texCoord, float depth,vec3 sceneColor) {\\n vec3 totalLight = vec3(0.0);\\n// vec3 vNormal = computeNormalFromDepth(texCoord);\\n vec3 wPos = worldPosFromDepth(texCoord,depth);\\n\\n if (POINTS_LIGHT_COUNT > 1) {\\n for(int i = 0; i < POINTS_LIGHT_COUNT; i++) {\\n vec3 lightPosition = lights[i].position;\\n float d = distance(lightPosition,wPos);\\n\\n if (d < lights[i].radius) {\\n vec3 surfaceToLight = normalize(lightPosition - wPos);\\n //float lightFactor = max(0.0,dot(normalize(lights[i].rotation * vNormal),surfaceToLight));\\n float lightFactor = max(0.0,dot(normalize(lights[i].rotation),surfaceToLight));\\n vec3 computedLight = vec3(lightFactor);\\n computedLight = mix(computedLight * lights[i].color * lights[i].intensity,vec3(0.0),smoothstep( 0.0,\\n lights[i].radius, d));\\n totalLight += computedLight;\\n }\\n }\\n }\\n\\n return totalLight;\\n}\\n\\nvec4 getLUT(vec4 color,sampler3D lut,float size) {\\n float pixelWidth = 1.0 / size;\\n float halfPixelWidth = 0.5 / size;\\n vec3 uvw = vec3( halfPixelWidth ) + color.rgb * ( 1.0 - pixelWidth );\\n vec4 lutVal = vec4( texture( lut, uvw ).rgb, color.a );\\n\\n return lutVal;\\n}\\n\\nvoid main() {\\n vec2 uv = vUv;\\n vec4 finalColor = vec4(0.0);\\n vec3 mainColor = vec3(0.0);\\n float alpha = 0.0;\\n\\n if (currentTime < sunriseTime) {\\n alpha = ((sunriseTime - currentTime) / (sunriseTime - dayStartTime)) * 10.0;\\n } else if (currentTime > sunsetTime) {\\n alpha = ((currentTime - sunsetTime) / (dayEndTime - sunsetTime)) * 10.0;\\n }\\n\\n alpha = clamp(alpha,0.0,1.0);\\n\\n vec4 diffuse = texture2D(tDiffuse, uv);\\n vec4 skyRenderer = texture2D(tSky, uv);\\n\\n vec4 depthOriginRGB = texture2D(tDepthRGB, uv);\\n vec4 depth = texture2D(tDepth,uv);\\n\\n float fogFactor = smoothstep( fogNear, fogFar, depth.r );\\n\\n vec3 sceneColor = diffuse.rgb;\\n\\n vec4 nightLutColor = getLUT(diffuse,nightLut,nightLutSize);\\n vec4 dayLutColor = getLUT(diffuse,dayLut,dayLutSize);\\n vec3 daySceneColor = mix(sceneColor,dayLutColor.rgb,dayLutIntensity);\\n vec3 nightSceneColor = mix(sceneColor,nightLutColor.rgb,nightLutIntensity);\\n vec3 mixedLutSceneColor = mix(daySceneColor,nightSceneColor,alpha);\\n sceneColor = mixedLutSceneColor;\\n\\n vec3 nightLight = vec3(0.0);\\n\\n if (alpha > 0.0) {\\n nightLight = computeNightLight(uv,depthOriginRGB.r,sceneColor);\\n }\\n\\n sceneColor = mix(sceneColor,sceneColor + nightLight ,alpha);\\n finalColor = mix(vec4(sceneColor,diffuse.a),skyRenderer,fogFactor);\\n gl_FragColor = finalColor;\\n}\\n\";","export default \"varying vec2 vUv;\\n\\nvoid main() {\\n vUv = uv;\\n gl_Position = vec4(position, 1.0);\\n}\\n\";","export default \"uniform sampler2D tDiffuse;\\nuniform sampler2D tDepth;\\n//uniform sampler2D tSky;\\nuniform vec3 fogColor;\\nuniform float fogDensity;\\nuniform float fogNear;\\nuniform float fogFar;\\nvarying vec2 vUv;\\n\\nvoid main() {\\n vec2 uv = vUv;\\n vec4 color = texture2D(tDiffuse, uv);\\n vec4 depth = texture2D(tDepth, uv);\\n float fogFactor = smoothstep( fogNear, fogFar, depth.r );\\n vec4 fog = vec4(fogColor,1.0);\\n\\n// #if USE_SKY == 1\\n// fog = texture2D(tSky, uv);\\n// #else\\n// fog = vec4(fogColor,1.0);\\n// #endif\\n\\n gl_FragColor = mix(color,fog,fogFactor);\\n gl_FragColor.a = fogDensity;\\n}\\n\";","export default \"varying vec2 vUv;\\n\\nvoid main() {\\n vUv = uv;\\n gl_Position = vec4(position, 1.0);\\n}\\n\";","export default \"varying vec2 vUv;\\nuniform sampler2D tDiffuse;\\nuniform sampler2D tDiffuseDepth;\\nuniform sampler2D tMask;\\nuniform sampler2D tObjectDepth;\\n\\nvoid main() {\\n vec4 diffuse = texture2D(tDiffuse, vUv);\\n vec4 diffuseDepth = texture2D(tDiffuseDepth, vUv);\\n vec4 object = texture2D(tMask, vUv);\\n vec4 objectDepth = texture2D(tObjectDepth, vUv);\\n vec3 mask = object.rgb;\\n\\n if (diffuseDepth.r < objectDepth.r) {\\n mask = vec3(0.0);\\n }\\n\\n vec4 objectColor = vec4(vec4(mask,1.0) * diffuse);\\n gl_FragColor = mix(diffuse,objectColor,0.35);\\n}\\n\";","export default \"varying vec2 vUv;\\n\\nvoid main() {\\n vUv = uv;\\n gl_Position = vec4(position, 1.0);\\n}\\n\";","export default \"varying vec2 vUv;\\nuniform sampler2D highlightsMap;\\nuniform vec3 color;\\nuniform bool visible;\\n\\nvoid main(){\\n if (!visible) {\\n discard;\\n }\\n\\n vec4 selections = texture2D(highlightsMap,vUv);\\n float d = distance(selections.rgb,color);\\n\\n if (d > 0.05) {\\n discard;\\n } else {\\n selections.rgb = vec3(1.0);\\n }\\n\\n gl_FragColor = vec4(selections.rgb,0.5);\\n}\\n\";","export default \"varying vec2 vUv;\\n\\nvoid main(){\\n vUv = uv;\\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\\n}\\n\";","export default \"uniform sampler2D map1;\\nuniform sampler2D map2;\\nuniform float t;\\nuniform vec3 fogColor;\\nuniform float fogDensity;\\nuniform float uLod;\\nuniform bool vantage;\\nvarying vec2 lUv;\\nvarying vec3 vWorldPosition;\\nvarying float z;\\nuniform vec3 clouds;\\nuniform float cloudsScale;\\nuniform float cloudsDark;\\nuniform float cloudsLight;\\nuniform float cloudsCover;\\nuniform float cloudsAlpha;\\nuniform float cloudsTint;\\nuniform float horizon;\\nuniform float uTime;\\nuniform float uSpeed;\\nuniform float cloudsActive;\\n\\nuniform float lutSize;\\n#if USE_3DTEXTURE\\nprecision highp sampler3D;\\nuniform sampler3D lut3d;\\n#else\\nuniform sampler2D lut;\\n\\nvec3 lutLookup( sampler2D tex, float size, vec3 rgb ) {\\n\\n float sliceHeight = 1.0 / size;\\n float yPixelHeight = 1.0 / ( size * size );\\n\\n // Get the slices on either side of the sample\\n float slice = rgb.b * size;\\n float interp = fract( slice );\\n float slice0 = slice - interp;\\n float centeredInterp = interp - 0.5;\\n\\n float slice1 = slice0 + sign( centeredInterp );\\n\\n // Pull y sample in by half a pixel in each direction to avoid color\\n // bleeding from adjacent slices.\\n float greenOffset = clamp( rgb.g * sliceHeight, yPixelHeight * 0.5, sliceHeight - yPixelHeight * 0.5 );\\n\\n vec2 uv0 = vec2(\\n rgb.r,\\n slice0 * sliceHeight + greenOffset\\n );\\n vec2 uv1 = vec2(\\n rgb.r,\\n slice1 * sliceHeight + greenOffset\\n );\\n\\n vec3 sample0 = texture2D( tex, uv0 ).rgb;\\n vec3 sample1 = texture2D( tex, uv1 ).rgb;\\n\\n return mix( sample0, sample1, abs( centeredInterp ) );\\n\\n}\\n\\n #endif\\nuniform float lutIntensity;\\n\\n\\n//CLouds\\nconst mat2 m = mat2( 1.6, 1.2, -1.2, 1.6 );\\n\\nconst vec3 cameraPos = vec3( 0.0, 0.0, 0.0 );\\nconst float pi = 3.141592653589793238462643383279502884197169;\\n\\nfloat hash(vec2 uv) {\\n return fract(sin(dot(uv, vec2(124.0, 678.0))) * 987654.0);\\n}\\n\\nfloat noise(vec2 uv) {\\n vec2 i = floor(uv);\\n vec2 f = fract(uv);\\n vec2 b = smoothstep(0.0, 1.0, f);\\n return 2.0 * mix(\\n mix(hash(i), hash(i + vec2(1.0, 0.0)), b.x),\\n mix(hash(i + vec2(0.0, 1.0)), hash(i + vec2(1.0, 1.0)), b.x), b.y) - 1.0;\\n}\\n\\nfloat fbm(bool do_abs, vec2 n, float amp_init, float amp_step, float q, float base_octave) {\\n //float time = uTime * 0.002 * 0.03 * base_octave;\\n\\n n *= vec2(1.0) * cloudsScale * base_octave;\\n// n -= q - cloudsProgress;\\n\\n n -= q;\\n\\n float total = 0.0, amplitude = amp_init;\\n for (int i = 0; i < 7; i++) {\\n float v = noise(n) * amplitude;\\n v = do_abs ? abs(v) : v;\\n\\n total += v;\\n\\n// n = m * n + cloudsProgress;\\n n = m * n;\\n amplitude *= amp_step;\\n }\\n return total;\\n}\\n\\nfloat fbmManual(bool do_abs, vec2 n, float amp_init, float amp_step, float q, float base_octave) {\\n //float time = uTime * 0.002 * 0.03 * base_octave;\\n\\n n *= vec2(1.0) * 2.7 * base_octave;\\n // n -= q - time;\\n n -= q;\\n\\n float total = 0.0, amplitude = amp_init;\\n for (int i = 0; i < 7; i++) {\\n float v = noise(n) * amplitude;\\n v = do_abs ? abs(v) : v;\\n\\n total += v;\\n\\n //n = m * n + time;\\n n = m * n;\\n amplitude *= amp_step;\\n }\\n return total;\\n}\\n\\nfloat calcF(vec2 p, float q) {\\n //ridged noise shape\\n float r = fbm(true, p, 0.8, 0.7, q, 1.0);\\n\\n //noise shape\\n float f = fbm(false, p, 0.7, 0.6, q, 1.0);\\n\\n f *= r + f;\\n\\n f = cloudsCover + cloudsAlpha * f * r;\\n\\n return f;\\n}\\nfloat calcC(vec2 p, float q) {\\n //noise colour\\n float c = fbm(false, p, 0.4, 0.6, q, 2.0);\\n\\n //noise ridge colour\\n float c1 = fbm(true, p, 0.4, 0.6, q, 3.0);\\n\\n return c + c1;\\n}\\n\\nvoid main(){\\n vec4 c1 = mix(texture2D(map1, lUv), texture2D(map2, lUv), t);\\n float fogDepth = z;\\n float fogFactor = 1.0 - exp(-fogDensity * fogDensity * fogDepth * fogDepth);\\n if (vantage) {\\n vec2 uv = lUv;\\n float lod = (5.0 + 5.0*sin(uLod))*step(uv.x, 1.0);\\n vec3 col = texture2D(map1, uv, lod).xyz;\\n gl_FragColor = vec4(col, 1.0);\\n } else {\\n gl_FragColor = vec4(mix(c1.rgb, fogColor, fogFactor), 1.0);\\n }\\n\\n vec4 val = gl_FragColor;\\n vec4 lutVal;\\n\\n float pixelWidth = 1.0 / lutSize;\\n float halfPixelWidth = 0.5 / lutSize;\\n vec3 uvw = vec3( halfPixelWidth ) + val.rgb * ( 1.0 - pixelWidth );\\n\\n #if USE_3DTEXTURE\\n\\n lutVal = vec4( texture( lut3d, uvw ).rgb, val.a );\\n\\n #else\\n\\n lutVal = vec4( lutLookup( lut, lutSize, uvw ), val.a );\\n\\n #endif\\n\\n gl_FragColor = vec4( mix( val, lutVal, lutIntensity ) );\\n\\n if (cloudsActive == 1.0) {\\n vec4 fragLut = gl_FragColor;\\n vec3 direction = normalize( vWorldPosition - cameraPos );\\n\\n float theta = acos( direction.y );\\n float phi = atan( direction.z, direction.x );\\n vec2 cloudsUV = vec2( phi, theta ) * 4.0;\\n float time = uTime * uSpeed;\\n cloudsUV.x *= 0.5;\\n cloudsUV.x -= time;\\n\\n float q = fbm(false, cloudsUV, 0.1, 0.4, 0.0, 1.0);\\n float f = calcF(cloudsUV, q);\\n float c = calcC(cloudsUV, q);\\n\\n vec3 cloudcolour = clouds * clamp((cloudsTint + cloudsDark + cloudsLight * c), 0.0, 1.0);\\n vec4 mixed = mix( fragLut, vec4(cloudcolour,1.0), clamp(f + c, 0.0, 1.0) );\\n\\n vec4 finalColor = mix(mixed,fragLut,smoothstep(0.0, 1.0, cloudsUV.y - horizon ));\\n\\n finalColor = mix(fragLut,finalColor,smoothstep(0.0, 1.0, cloudsUV.x + 2.0 * pi + time));\\n finalColor = mix(finalColor,fragLut,smoothstep(0.0, 1.0, cloudsUV.x - 1.7 * pi + time));\\n\\n gl_FragColor = finalColor;\\n }\\n\\n #include \\n}\";","export default \"varying vec2 lUv;\\nvarying vec3 vWorldPosition;\\nvarying float z;\\n\\nvoid main() {\\n lUv = uv;\\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\\n z = -gl_Position.z;\\n vec4 worldPosition = modelMatrix * vec4( position, 1.0 );\\n vWorldPosition = worldPosition.xyz;\\n}\\n\";","export default \"uniform sampler2D generalTexture;\\nuniform sampler2D readBufferTexture;\\nuniform vec2 readBufferSize;\\nuniform sampler2D generalNightTexture;\\nuniform sampler2D depthTexture;\\nuniform vec2 uDepthMouse;\\nuniform float depthFocus;\\nuniform float depthStrength;\\nuniform float uCircleScale;\\nuniform float uTime;\\nuniform float uTimesOfDay;\\nuniform float progress;\\nuniform float orbitToMapProgress;\\nuniform float uSubstrateOpacity;\\nvarying vec2 vUv;\\n\\nfloat circle(vec2 uv, float radius, float sharp){\\n vec2 normalizeUv = uv - vec2(0.5);\\n return 1.0 - smoothstep (radius - radius * sharp,radius + radius * sharp,dot(normalizeUv,normalizeUv));\\n\\n}\\n\\nfloat random (vec2 st) {\\n return fract(sin(dot(st.xy, vec2(12.9898,78.233)))*43758.5453123);\\n}\\n\\nvec2 distort(vec2 oldUv, float pr, float expo){\\n vec2 p0 = 2.0 * oldUv - 1.0;\\n vec2 p1 = p0 / (1.0 - pr * length(p0) * expo);\\n return (p1 + 1.0) * 0.5;\\n}\\n\\nvec4 RadialBlur(vec2 uv, float progress) {\\n vec2 center = vec2(0.5,0.5);\\n vec2 toUV = uv - center;\\n\\n vec2 normToUV = toUV;\\n\\n vec4 color = vec4(0.);\\n float s = progress * 0.02;\\n\\n for(int i=0; i<50; i++)\\n {\\n color += texture2D(generalTexture, uv - normToUV * s * float(i));\\n }\\n\\n color /= 50.;\\n color.rgb += progress * 0.1;\\n\\n return color;\\n}\\n\\nvoid main(){\\n\\n// vec4 cmap = texture2D(generalTexture, vUv);\\n //vec4 nightMap = texture2D(generalNightTexture, vUv);\\n\\n //vec4 mixed = mix(cmap,nightMap,uTimesOfDay);\\n\\n vec3 substrateColor = vec3(0.0);\\n vec3 color = vec3(0.0);\\n float total = 0.0;\\n vec2 toCenter = vec2(0.5, 0.5) - vUv;\\n vec2 uv = vUv;\\n\\n if (orbitToMapProgress==0.0){\\n\\n if (uCircleScale == 0.0) {\\n vec4 depthDistortion = texture2D(depthTexture, uv);\\n float parallaxMult = depthFocus + depthDistortion.r;\\n vec2 parallax = (uDepthMouse * 0.01) * parallaxMult * depthStrength;\\n uv += parallax;\\n vec4 dayTexture = texture2D(generalTexture, uv);\\n vec4 nightTexture = texture2D(generalNightTexture, uv);\\n\\n vec4 col = mix(dayTexture,nightTexture,uTimesOfDay);\\n vec4 finalColor = mix(col, vec4(substrateColor,1.0),uSubstrateOpacity);\\n\\n gl_FragColor = finalColor;\\n } else {\\n for (float t = 0.0; t <= 50.0; t++) {\\n float percent = t / 50.0;\\n float weight = 4.0 * (percent - percent * percent);\\n vec3 dayTexture = texture2D(generalTexture, uv + toCenter * percent* (0.5-(1.0-uCircleScale*1.0)*0.5)).rgb*weight;\\n vec3 nightTexture = texture2D(generalNightTexture, uv + toCenter * percent* (0.5-(1.0-uCircleScale*1.0)*0.5)).rgb*weight;\\n color += mix(dayTexture,nightTexture,uTimesOfDay);\\n // color += texture2D(generalTexture, vUv + toCenter * percent* (0.5-(1.0-uCircleScale*1.0)*0.5)).rgb*weight;\\n total += weight;\\n }\\n vec4 liteModeColor = vec4(mix(color/total,vec3(1.0,1.0,1.0),uCircleScale), 1.5-uCircleScale );\\n// vec4 sceneTexture = texture2D(readBufferTexture,vec2( gl_FragCoord.x / readBufferSize.x, gl_FragCoord.y /\\n// readBufferSize.y));\\n// gl_FragColor = mix(liteModeColor,sceneTexture,uCircleScale);\\n gl_FragColor = liteModeColor;\\n }\\n\\n }else{\\n for (float t = 0.0; t <= 50.0; t++) {\\n float percent = t / 50.0;\\n float weight = 4.0 * (percent - percent * percent);\\n vec3 dayTexture = texture2D(generalTexture, uv + toCenter * percent* (-orbitToMapProgress)).rgb*weight;\\n vec3 nightTexture = texture2D(generalNightTexture, uv + toCenter * percent* (-orbitToMapProgress)).rgb*weight;\\n color += mix(dayTexture,nightTexture,uTimesOfDay);\\n\\n// color += texture2D(generalTexture, vUv + toCenter * percent* (-orbitToMapProgress)).rgb*weight;\\n total += weight;\\n }\\n gl_FragColor = vec4(mix(color/total,vec3(1.0,1.0,1.0),orbitToMapProgress), 1.0 );\\n }\\n}\\n\\n\";","export default \"varying vec2 vUv;\\n\\nvoid main(){\\n vUv = uv;\\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\\n}\\n\";","export default \"precision highp float;\\nprecision highp int;\\nuniform sampler2D tDiffuse;\\nuniform float opacity;\\nuniform float scale;\\nvarying vec2 lUv;\\n\\nvoid main(){\\n vec4 cmap = texture2D(tDiffuse, lUv);\\n vec3 color = vec3(0.0);\\n float total = 0.0;\\n vec2 toCenter = vec2(0.5, 0.5) - lUv;\\n for (float t = 0.0; t <= 50.0; t++) {\\n float percent = t / 50.0;\\n float weight = 4.0 * (percent - percent * percent);\\n color += texture2D(tDiffuse, lUv + toCenter * percent* (0.5-opacity*0.5)).rgb*weight;\\n total += weight;\\n }\\n gl_FragColor = vec4(mix(color/total, vec3(1.0, 1.0, 1.0), scale), 1.0);\\n}\\n\";","export default \"precision highp float;\\nprecision highp int;\\nattribute vec3 position;\\nattribute vec2 uv;\\nvarying vec2 lUv;\\n\\nvoid main() {\\n lUv = uv;\\n gl_Position = vec4(position, 1.0);\\n}\\n\";","export default \"uniform sampler2D tDiffuse;\\nvarying vec2 vUv;\\nuniform float uTime;\\nuniform float uTimeScale;\\nuniform float uUvScale;\\nuniform float uSize;\\n\\n\\nvec2 rand(vec2 c){\\n mat2 m = mat2(12.9898,.16180,78.233,.31415);\\n return fract(sin(m * c) * vec2(43758.5453, 14142.1));\\n}\\n\\nvec2 noise(vec2 p){\\n vec2 co = floor(p);\\n vec2 mu = fract(p);\\n mu = 3.*mu*mu-2.*mu*mu*mu;\\n vec2 a = rand((co+vec2(0.,0.)));\\n vec2 b = rand((co+vec2(1.,0.)));\\n vec2 c = rand((co+vec2(0.,1.)));\\n vec2 d = rand((co+vec2(1.,1.)));\\n return mix(mix(a, b, mu.x), mix(c, d, mu.x), mu.y);\\n}\\n\\nvec2 hash22(vec2 p){\\n vec2 p2 = fract(p * vec2(.1031,.1030));\\n p2 += dot(p2, p2.yx+19.19);\\n return fract((p2.x+p2.y)*p2);\\n}\\n\\n\\nfloat simplex2D(vec2 p ){\\n const float K1 = (sqrt(3.)-1.)/2.;\\n const float K2 = (3.-sqrt(3.))/6.;\\n const float K3 = K2*2.;\\n\\n vec2 i = floor( p + dot(p,vec2(K1)) );\\n\\n vec2 a = p - i + dot(i,vec2(K2));\\n vec2 o = 1.-clamp((a.yx-a)*1.e35,0.,1.);\\n vec2 b = a - o + K2;\\n vec2 c = a - 1.0 + K3;\\n\\n vec3 h = clamp( .5-vec3(dot(a,a), dot(b,b), dot(c,c) ), 0. ,1. );\\n\\n h*=h;\\n h*=h;\\n\\n vec3 n = vec3(\\n dot(a,hash22(i )-.5),\\n dot(b,hash22(i+o )-.5),\\n dot(c,hash22(i+1.)-.5)\\n );\\n\\n return dot(n,h)*140.;\\n}\\n\\nvec2 wetGlass(vec2 p) {\\n\\n p += simplex2D(p*0.1) * 3.; // distort drops\\n\\n p *= uUvScale;\\n\\n float t = uTime / uTimeScale;\\n\\n p *= vec2(.025, .025 * .25);\\n\\n p.y += t * .25; // make drops fall\\n\\n vec2 rp = round(p);\\n vec2 dropPos = p - rp;\\n vec2 noise = hash22(rp);\\n\\n dropPos.y *= 4.;\\n\\n t = t * noise.y + (noise.x*6.28);\\n\\n vec2 trailPos = vec2(dropPos.x, fract((dropPos.y-t)*2.) * .5 - .25 );\\n\\n dropPos.y += cos( t + cos(t) ); // make speed vary\\n\\n float trailMask = clamp(dropPos.y*2.5+.5,0.,1.); // hide trail in front of drop\\n\\n float dropSize = dot(dropPos,dropPos);\\n\\n float trailSize = clamp(trailMask*dropPos.y-0.5,0.,1.) + 0.5;\\n trailSize = dot(trailPos,trailPos) * trailSize * trailSize;\\n\\n float drop = clamp(dropSize * uSize + 3.*noise.y, 0., 1.);\\n float trail = clamp(trailSize * uSize + .5*noise.y, 0., 1.);\\n\\n trail *= trailMask; // hide trail in front of drop\\n\\n return drop * dropPos + trailPos * trail;\\n}\\n\\nfloat SCurve (float x) {\\n\\n x = x * 2.0 - 1.0;\\n return -x * abs(x) * 0.5 + x + 0.5;\\n\\n}\\n\\nvec4 BlurH (sampler2D source, vec2 size, vec2 uv, float radius) {\\n\\n\\n vec4 A = vec4(0.0);\\n vec4 C = vec4(0.0);\\n\\n float width = 1.0 / size.x;\\n\\n float divisor = 0.0;\\n float weight = 0.0;\\n\\n float radiusMultiplier = 1.0 / radius;\\n\\n // Hardcoded for radius 20 (normally we input the radius\\n // in there), needs to be literal here\\n\\n for (float x = -20.0; x <= 20.0; x++)\\n {\\n A = texture(source, uv + vec2(x * width, 0.0));\\n\\n weight = SCurve(1.0 - (abs(x) * radiusMultiplier));\\n\\n C += A * weight;\\n\\n divisor += weight;\\n }\\n\\n return vec4(C.r / divisor, C.g / divisor, C.b / divisor, 1.0);\\n\\n}\\n\\nvoid main() {\\n vec2 uv = vUv;\\n vec2 v = uv * 0.1;\\n vec2 n = noise(v * 200.);\\n vec3 color = vec3(0.0);\\n\\n vec2 glFragCoord = gl_FragCoord.xy;\\n\\n float time = uTime / 3.0;\\n\\n// uv += wetGlass(glFragCoord);\\n //uv += wetGlass(glFragCoord*3.2);\\n vec2 blurUv = uv;\\n vec2 wetUV = uv;\\n\\n wetUV += wetGlass(glFragCoord);\\n\\n// vec4 blurFinal = BlurH(uScene, uResolution.xy, blurUv, 20.0);\\n //color = texture2D(uScene, uv).rgb;\\n vec3 colorWithDrops = texture2D(tDiffuse,wetUV).rgb;\\n// vec4 finalColor = mix(blurFinal,vec4(colorWithDrops,1.0),0.55);\\n\\n\\n// vec4 dropsTexture = vec4(0.0);\\n//\\n// for (float r = 4. ; r > 0. ; r--) {\\n// vec2 x = uResolution.xy * r * .015, // Number of potential drops (in a grid)\\n// p = 6.28 * uv * x + (n - .5) * 2.,\\n// s = sin(p);\\n//\\n// // Current drop properties. Coordinates are rounded to ensure a\\n// // consistent value among the fragment of a given drop.\\n// //vec4 d = texture(iChannel1, round(u * x - 0.25) / x);\\n// vec2 v = round(uv * x - 0.25) / x;\\n// vec4 d = vec4(noise(v*200.), noise(v));\\n//\\n// // Drop shape and fading\\n// float t = (s.x+s.y) * max(0., 1. - fract(time * (d.b + .1) + d.g) * 2.);;\\n//\\n// // d.r -> only x% of drops are kept on, with x depending on the size of drops\\n// if (d.r < (5.-r)*.08 && t > .5) {\\n// // Drop normal\\n// vec3 v = normalize(-vec3(cos(p), mix(.2, 2., t-.5)));\\n// // fragColor = vec4(v * 0.5 + 0.5, 1.0); // show normals\\n//\\n// // Poor man's refraction (no visual need to do more)\\n// dropsTexture = texture2D(uScene, uv - v.xy * .3);\\n// }\\n// }\\n\\n\\n\\n\\n// gl_FragColor = mix(finalColor,dropsTexture,0.2);\\n gl_FragColor = vec4(colorWithDrops,1.0);\\n\\n}\\n\";","export default \"varying vec2 vUv;\\n\\nvoid main() {\\n vUv = uv;\\n gl_Position = vec4(position, 1.0);\\n}\\n\";","export default \"uniform sampler2D tDiffuse;\\nvarying vec2 vUv;\\nuniform float uTime;\\nuniform float rainSpatialDensityX;\\nuniform float rainSpatialDensityY;\\nuniform float rainMaxDensity;\\nuniform float rainSpeed;\\nuniform float dropletLength;\\nuniform float dropletWidth;\\n\\n\\n//#define RainSpatialDensityX 1000.\\n//#define RainSpatialDensityY 20.\\n//#define RainMaxDensity .01\\n//#define RainSpeed 7.\\n//#define DropletLength 1.0\\n//#define DropletWidth .15\\n\\nvoid main() {\\n vec2 uv = vUv;\\n vec3 color = vec3(0.0);\\n color = texture2D(tDiffuse, uv).rgb;\\n\\n vec2 rainUv = uv;\\n\\n float paramRainDensity = 1.0;\\n\\n vec2 scaledUV = rainUv * vec2(rainSpatialDensityX, rainSpatialDensityY);\\n\\n // Calculate tile X coordinate\\n float tileX = floor(scaledUV.x);\\n\\n // Offset Y based off time, and in two different ways to provide\\n // a sense of depth\\n scaledUV.y += uTime * rainSpeed * (.8 + mod(tileX, 3.) * .1);\\n\\n // Offset Y randomly based off its tile X coordinate\\n scaledUV.y += 407.567 * fract(351.5776456 * tileX);\\n\\n // Calculate tile Y coordinate\\n float tileY = floor(scaledUV.y);\\n\\n // Decide whether tile is turned off\\n float randOnOff = fract(sin(tileX * 71. + tileY * 7.));\\n float onOffThickness = 1. - step(paramRainDensity * rainMaxDensity, randOnOff);\\n\\n // Calculate coords within the tile\\n vec2 inTile = fract(scaledUV);\\n\\n // Shuffle tile center X based on its tile coordinates\\n float rand = fract(sin(77.7 * tileY + 7.7 * tileX));\\n float tileCenterX = .5 + (abs(rand) - .5) * (1. - dropletWidth);\\n\\n // Distance from center of tile\\n float xDistance = abs(tileCenterX - inTile.x);\\n float yDistance = abs(.5 - inTile.y);\\n\\n // Thickness of droplet:\\n // > 0.0 only within Width\\n // ...with some tile-specific randomization\\n float clampedXDistance = smoothstep(.0, dropletWidth, xDistance);\\n float dropletThickness = (1. - clampedXDistance) * smoothstep(1. - dropletLength + rand/2.4, 1., 1. - yDistance);\\n\\n // TODOTEST\\n vec2 dropletHead = vec2(tileCenterX, .2);\\n dropletThickness = 1.0 * mix(dropletThickness, 1. - min(1., distance(inTile, dropletHead)), 0.);\\n// dropletThickness = 1. - min(1., distance(inTile, dropletHead));\\n\\n // Turning off tiles\\n dropletThickness *= onOffThickness;\\n\\n //vec3 c = mix(vec3(.5, .7, .95), vec3(dropletThickness), smoothstep(.4, 1., dropletThickness));\\n vec3 rain = mix(vec3(0.0), vec3(0.5,0.62,1.), smoothstep(.4, 1., dropletThickness));\\n\\n color = color * vec3(0.827,0.835,0.859);\\n\\n gl_FragColor = vec4(color + rain, 1.);\\n\\n}\\n\";","export default \"varying vec2 vUv;\\n\\nvoid main() {\\n vUv = uv;\\n gl_Position = vec4(position, 1.0);\\n}\\n\";","export default \"uniform sampler2D tDiffuse;\\nvarying vec2 vUv;\\nuniform float uTime;\\nuniform bool uLiteMode;\\nuniform int uLayers;\\nuniform float uDepth;\\nuniform float uWidth;\\nuniform float uSpeed;\\nuniform float uParticleSize;\\n\\n//#define LAYERS 50\\n//#define DEPTH .5\\n//#define WIDTH .3\\n//#define SPEED .6\\n\\nvoid main() {\\n vec2 uv = vUv;\\n vec3 color = vec3(0.0);\\n color = texture2D(tDiffuse, uv).rgb;\\n\\n // Do your cool postprocessing here\\n const mat3 p = mat3(13.323122,23.5112,21.71123,21.1212,28.7312,11.9312,21.8112,14.7212,61.3934);\\n// vec2 uv2 = uResolution.xy + vec2(1.,uResolution.y/uResolution.x)*gl_FragCoord.xy / uResolution.xy;\\n vec2 uv2 = uv;\\n vec3 acc = vec3(0.0);\\n float dof = 5.*sin(uTime*.1);\\n\\n for (int i=0;i 0.0 only within Width\\n // ...with some tile-specific randomization\\n float clampedXDistance = smoothstep(.0, dropletWidth, xDistance);\\n float dropletThickness = (1. - clampedXDistance) * smoothstep(1. - dropletLength + rand/2.4, 1., 1. - yDistance);\\n\\n // TODOTEST\\n vec2 dropletHead = vec2(tileCenterX, .2);\\n dropletThickness = 1.0 * mix(dropletThickness, 1. - min(1., distance(inTile, dropletHead)), 0.);\\n // dropletThickness = 1. - min(1., distance(inTile, dropletHead));\\n\\n // Turning off tiles\\n dropletThickness *= onOffThickness;\\n\\n //vec3 c = mix(vec3(.5, .7, .95), vec3(dropletThickness), smoothstep(.4, 1., dropletThickness));\\n vec3 rain = mix(vec3(0.0), vec3(0.5,0.62,1.), smoothstep(.4, 1., dropletThickness));\\n\\n float lightning = sin(uTime * sin(uTime * 30.)); // screen flicker\\n float lightningTime = mod(uTime, 10.) / 9.9;\\n lightning *= 1. - smoothstep(.0, .1, lightningTime)\\n + smoothstep(.9, 1., lightningTime); // lightning flash mask\\n\\n vec3 lightingColor = vec3(0.659,0.706,1.) * lightning;\\n\\n color = color * vec3(0.627,0.635,0.659);\\n\\n gl_FragColor = vec4(color + rain + lightingColor, 1.);\\n\\n\\n}\\n\";","export default \"varying vec2 vUv;\\n\\nvoid main() {\\n vUv = uv;\\n gl_Position = vec4(position, 1.0);\\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\tid: moduleId,\n\t\tloaded: false,\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// Flag the module as loaded\n\tmodule.loaded = true;\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// expose the module cache\n__webpack_require__.c = __webpack_module_cache__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(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__.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 = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(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};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && !scriptUrl) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl + \"../\";","// 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\t\"main\": 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(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(function(id) { return 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\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk\"] = self[\"webpackChunk\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","","// module cache are used so entry inlining is disabled\n// startup\n// Load entry module and return exports\n__webpack_require__.O(undefined, [\"vendors-node_modules_babel_polyfill_lib_index_js-node_modules_google_markerclustererplus_dist-2dc8c8\"], function() { return __webpack_require__(\"../node_modules/@babel/polyfill/lib/index.js\"); })\nvar __webpack_exports__ = __webpack_require__.O(undefined, [\"vendors-node_modules_babel_polyfill_lib_index_js-node_modules_google_markerclustererplus_dist-2dc8c8\"], function() { return __webpack_require__(\"./js/app.js\"); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n",""],"names":["_a","_b","building","c","lineno","colno","domElement","panLeft","panUp","pan","result","h","angle","points","tolerance","getMouseOnScreen","getMouseOnCircle","s","e","t","r","n","i","a","o","u","f","p","l","y","d","g","v","b","m","w","x","_","E","S","k","M","R","A","j","T","P","size","geometry","_openSettings","openSettings_fn","_closeSettings","closeSettings_fn","_reposition","reposition_fn","cardBox","card","name","previewUrl","crmDataOfFlat","animation","id","data","config","applyContainer","label","color","buildingLabels","fontRegular","fontBold","cylinderFloorNumbers","_c","isGroundFloor","shortLabel","value","now","lineXOffset","glyphObj","O","typrFactory","woff2otfFactory","parserFactory","sdfViewBox","createTypesetter","bidiFactory","distance","group","_d","scope","event","button","window","document","grid","arrow","texture","font","activeTabInd","category","searchContainer","item","getApp","aboutUs","gallery","specifications","page","state","range","sortArray","flat","poi","mobileBuildingLabelsHideLogic","key","hideObjectsInCylinder","direction","vantage","curve","apartments","floorNum","url","gltf","lut","index","tile","envGroup","position","buildingHover","customColor","sea","trees","poiSettings","poiData","poiCategories","map"],"sourceRoot":""}