viral-viewer-2 6.9.2 → 6.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { B as S, a as V, V as Z } from "./index-DFLlwciS.mjs";
1
+ import { B as S, a as V, V as Z } from "./index-0hJmUXew.mjs";
2
2
  (function() {
3
3
  var s = "b9H79Tebbbe9ok9Geueu9Geub9Gbb9Gruuuuuuueu9Gvuuuuueu9Gduueu9Gluuuueu9Gvuuuuub9Gouuuuuub9Gluuuub9GiuuueuiE8AdilveoveovrrwrrrDDoDrbqqbelve9Weiiviebeoweuec;G:Qdkr:PlCo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8F9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWV9mW4W2be8A9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWVbd8F9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWV9c9V919U9KbiE9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949wWV79P9V9UblY9TW79O9V9Wt9FW9U9J9V9KW69U9KW949c919M9MWVbv8E9TW79O9V9Wt9FW9U9J9V9KW69U9KW949c919M9MWV9c9V919U9Kbo8A9TW79O9V9Wt9FW9U9J9V9KW69U9KW949wWV79P9V9UbrE9TW79O9V9Wt9FW9U9J9V9KW69U9KW949tWG91W9U9JWbwa9TW79O9V9Wt9FW9U9J9V9KW69U9KW949tWG91W9U9JW9c9V919U9KbDL9TW79O9V9Wt9FW9U9J9V9KWS9P2tWV9p9JtbqK9TW79O9V9Wt9FW9U9J9V9KWS9P2tWV9r919HtbkL9TW79O9V9Wt9FW9U9J9V9KWS9P2tWVT949WbxY9TW79O9V9Wt9FW9U9J9V9KWS9P2tWVJ9V29VVbmE9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94J9H9J9OWbza9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94J9H9J9OW9ttV9P9WbHa9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94SWt9J9O9sW9T9H9WbOK9TW79O9V9Wt9F79W9Ht9P9H29t9VVt9sW9T9H9WbAl79IV9RbXDwebcekdKYq;i28Adbk:Bhdhud9:8Jjjjjbc;qw9Rgr8KjjjjbcbhwdnaeTmbabcbyd;C:kjjbaoaocb9iEgDc:GeV86bbarc;adfcbcjdz:xjjjb8AdnaiTmbarc;adfadalz:wjjjb8Akarc;abfalfcbcbcjdal9RalcFe0Ez:xjjjb8Aarc;abfarc;adfalz:wjjjb8AarcUf9cb83ibarc8Wf9cb83ibarcyf9cb83ibarcaf9cb83ibarcKf9cb83ibarczf9cb83ibar9cb83iwar9cb83ibcj;abal9Uc;WFbGcjdalca0Ehqdnaicd6mbavcd9imbaDTmbadcefhkaqci2gxal2hmarc;alfclfhParc;qlfceVhsarc;qofclVhzarc;qofcKfhHarc;qofczfhOcbhAincdhCcbhodnavci6mbaH9cb83ibaO9cb83ibar9cb83i;yoar9cb83i;qoadaAfgoybbhXcbhQincbhwcbhLdninaoalfhKaoybbgYaX7aLVhLawcP0meaKhoaYhXawcefgwaQfai6mbkkcbhXarc;qofhwincwh8AcwhEdnaLaX93gocFeGg3cs0mbclhEa3ci0mba3cb9hcethEkdnaocw4cFeGg3cs0mbclh8Aa3ci0mba3cb9hceth8Aka8AaEfh3awydbh5cwh8AcwhEdnaocz4cFeGg8Ecs0mbclhEa8Eci0mba8Ecb9hcethEka3a5fh3dnaocFFFFb0mbclh8AaocFFF8F0mbaocFFFr0ceth8Akawa3aEfa8AfBdbawclfhwaXcefgXcw9hmbkaKhoaYhXaQczfgQai6mbkcbhocehwazhLinawaoaLydbarc;qofaocdtfydb6EhoaLclfhLawcefgwcw9hmbkcihCkcbh3arc;qlfcbcjdz:xjjjb8Aarc;alfcwfcbBdbar9cb83i;alaoclth8Fadhaaqhhakh5inarc;qlfadcba3cufgoaoa30Eal2falz:wjjjb8Aaiahaiah6Ehgdnaqaia39Ra3aqfai6EgYcsfc9WGgoaY9nmbarc;qofaYfcbaoaY9Rz:xjjjb8Akada3al2fh8Jcbh8Kina8Ka8FVcl4hQarc;alfa8Kcdtfh8LaAh8Mcbh8Nina8NaAfhwdndndndndndna8KPldebidkasa8Mc98GgLfhoa5aLfh8Aarc;qlfawc98GgLfRbbhXcwhwinaoRbbawtaXVhXaocefhoawcwfgwca9hmbkaYTmla8Ncith8Ea8JaLfhEcbhKinaERbbhLcwhoa8AhwinawRbbaotaLVhLawcefhwaocwfgoca9hmbkarc;qofaKfaLaX7aQ93a8E486bba8Aalfh8AaEalfhEaLhXaKcefgKaY9hmbxlkkaYTmia8Mc9:Ghoa8NcitcwGhEarc;qlfawceVfRbbcwtarc;qlfawc9:GfRbbVhLarc;qofhwaghXinawa5aofRbbcwtaaaofRbbVg8AaL9RgLcetaLcztcz91cs47cFFiGaE486bbaoalfhoawcefhwa8AhLa3aXcufgX9hmbxikkaYTmda8Jawfhoarc;qlfawfRbbhLarc;qofhwaghXinawaoRbbg8AaL9RgLcetaLcKtcK91cr4786bbawcefhwaoalfhoa8AhLa3aXcufgX9hmbxdkkaYTmeka8LydbhEcbhKarc;qofhoincdhLcbhwinaLaoawfRbbcb9hfhLawcefgwcz9hmbkclhXcbhwinaXaoawfRbbcd0fhXawcefgwcz9hmbkcwh8Acbhwina8AaoawfRbbcP0fh8Aawcefgwcz9hmbkaLaXaLaX6Egwa8Aawa8A6Egwczawcz6EaEfhEaoczfhoaKczfgKaY6mbka8LaEBdbka8Mcefh8Ma8Ncefg8Ncl9hmbka8Kcefg8KaC9hmbkaaamfhaahaxfhha5amfh5a3axfg3ai6mbkcbhocehwaPhLinawaoaLydbarc;alfaocdtfydb6EhoaLclfhLawcefgXhwaCaX9hmbkaraAcd4fa8FcdVaoaocdSE86bbaAclfgAal6mbkkabaefh8Kabcefhoalcd4gecbaDEhkadcefhOarc;abfceVhHcbhmdndninaiam9nmearc;qofcbcjdz:xjjjb8Aa8Kao9Rak6mdadamal2gwfhxcbh8JaOawfhzaocbakz:xjjjbghakfh5aqaiam9Ramaqfai6Egscsfgocl4cifcd4hCaoc9WGg8LThPindndndndndndndndndndnaDTmbara8Jcd4fRbbgLciGPlbedlbkasTmdaxa8Jfhoarc;abfa8JfRbbhLarc;qofhwashXinawaoRbbg8AaL9RgLcetaLcKtcK91cr4786bbawcefhwaoalfhoa8AhLaXcufgXmbxikkasTmia8JcitcwGhEarc;abfa8JceVfRbbcwtarc;abfa8Jc9:GgofRbbVhLaxaofhoarc;qofhwashXinawao8Vbbg8AaL9RgLcetaLcztcz91cs47cFFiGaE486bbawcefhwaoalfhoa8AhLaXcufgXmbxdkkaHa8Jc98GgEfhoazaEfh8Aarc;abfaEfRbbhXcwhwinaoRbbawtaXVhXaocefhoawcwfgwca9hmbkasTmbaLcl4hYa8JcitcKGh3axaEfhEcbhKinaERbbhLcwhoa8AhwinawRbbaotaLVhLawcefhwaocwfgoca9hmbkarc;qofaKfaLaX7aY93a3486bba8Aalfh8AaEalfhEaLhXaKcefgKas9hmbkkaDmbcbhoxlka8LTmbcbhodninarc;qofaofgwcwf8Pibaw8Pib:e9qTmeaoczfgoa8L9pmdxbkkdnavmbcehoxikcbhEaChKaChYinarc;qofaEfgocwf8Pibhyao8Pibh8PcdhLcbhwinaLaoawfRbbcb9hfhLawcefgwcz9hmbkclhXcbhwinaXaoawfRbbcd0fhXawcefgwcz9hmbkcwh8Acbhwina8AaoawfRbbcP0fh8Aawcefgwcz9hmbkaLaXaLaX6Egoa8Aaoa8A6Egoczaocz6EaYfhYaocucbaya8P:e9cb9sEgwaoaw6EaKfhKaEczfgEa8L9pmdxbkkaha8Jcd4fgoaoRbbcda8JcetcoGtV86bbxikdnaKas6mbaYas6mbaha8Jcd4fgoaoRbbcia8JcetcoGtV86bba8Ka59Ras6mra5arc;qofasz:wjjjbasfh5xikaKaY9phokaha8Jcd4fgwawRbbaoa8JcetcoGtV86bbka8Ka59RaC6mla5cbaCz:xjjjbgAaCfhYdndna8LmbaPhoxekdna8KaY9RcK9pmbaPhoxekaocdtc:q1jjbfcj1jjbaDEg5ydxggcetc;:FFFeGh8Fcuh3cuagtcu7cFeGhacbh8Marc;qofhLinarc;qofa8MfhQczhEdndndnagPDbeeeeeeedekcucbaQcwf8PibaQ8Pib:e9cb9sEhExekcbhoa8FhEinaEaaaLaofRbb9nfhEaocefgocz9hmbkkcih8Ecbh8Ainczhwdndndna5a8AcdtfydbgKPDbeeeeeeedekcucbaQcwf8PibaQ8Pib:e9cb9sEhwxekaKcetc;:FFFeGhwcuaKtcu7cFeGhXcbhoinawaXaLaofRbb9nfhwaocefgocz9hmbkkdndnawaE6mbaKa39hmeawaE9hmea5a8EcdtfydbcwSmeka8Ah8EawhEka8Acefg8Aci9hmbkaAa8Mco4fgoaoRbba8Ea8Mci4coGtV86bbdndndna5a8Ecdtfydbg3PDdbbbbbbbebkdncwa39Tg8ETmbcua3tcu7hwdndna3ceSmbcbh8NaLhQinaQhoa8Eh8AcbhXinaoRbbgEawcFeGgKaEaK6EaXa3tVhXaocefhoa8Acufg8AmbkaYaX86bbaQa8EfhQaYcefhYa8Na8Efg8Ncz6mbxdkkcbh8NaLhQinaQhoa8Eh8AcbhXinaoRbbgEawcFeGgKaEaK6EaXcetVhXaocefhoa8Acufg8AmbkaYaX:T9cFe:d9c:c:qj:bw9:9c:q;c1:I1e:d9c:b:c:e1z9:9ca188bbaQa8EfhQaYcefhYa8Na8Efg8Ncz6mbkkcbhoinaYaLaofRbbgX86bbaYaXawcFeG9pfhYaocefgocz9hmbxikkdna3ceSmbinaYcb86bbaYcefhYxbkkinaYcb86bbaYcefhYxbkkaYaQ8Pbb83bbaYcwfaQcwf8Pbb83bbaYczfhYka8Mczfg8Ma8L9pgomeaLczfhLa8KaY9RcK9pmbkkaoTmlaYh5aYTmlka8Jcefg8Jal9hmbkarc;abfaxascufal2falz:wjjjb8Aasamfhma5hoa5mbkcbhwxdkdna8Kao9RakalfgwcKcaaDEgLawaL0EgX9pmbcbhwxdkdnawaL9pmbaocbaXaw9Rgwz:xjjjbawfhokaoarc;adfalz:wjjjbalfhodnaDTmbaoaraez:wjjjbaefhokaoab9Rhwxekcbhwkarc;qwf8Kjjjjbawk5babaeadaialcdcbyd;C:kjjbz:bjjjbk9reduaecd4gdaefgicaaica0Eabcj;abae9Uc;WFbGcjdaeca0Egifcufai9Uae2aiadfaicl4cifcd4f2fcefkmbcbabBd;C:kjjbk:Ese5u8Jjjjjbc;ae9Rgl8Kjjjjbcbhvdnaici9UgocHfae0mbabcbyd;m:kjjbgrc;GeV86bbalc;abfcFecjez:xjjjb8AalcUfgw9cu83ibalc8WfgD9cu83ibalcyfgq9cu83ibalcafgk9cu83ibalcKfgx9cu83ibalczfgm9cu83ibal9cu83iwal9cu83ibabaefc9WfhPabcefgsaofhednaiTmbcmcsarcb9kgzEhHcbhOcbhAcbhCcbhXcbhQindnaeaP9nmbcbhvxikaQcufhvadaCcdtfgLydbhKaLcwfydbhYaLclfydbh8AcbhEdndndninalc;abfavcsGcitfgoydlh3dndndnaoydbgoaK9hmba3a8ASmekdnaoa8A9hmba3aY9hmbaEcefhExekaoaY9hmea3aK9hmeaEcdfhEkaEc870mdaXcufhvaLaEciGcx2goc;i1jjbfydbcdtfydbh3aLaoc;e1jjbfydbcdtfydbh8AaLaoc;a1jjbfydbcdtfydbhKcbhodnindnalavcsGcdtfydba39hmbaohYxdkcuhYavcufhvaocefgocz9hmbkkaOa3aOSgvaYce9iaYaH9oVgoGfhOdndndncbcsavEaYaoEgvcs9hmbarce9imba3a3aAa3cefaASgvEgAcefSmecmcsavEhvkasavaEcdtc;WeGV86bbavcs9hmea3aA9Rgvcetavc8F917hvinaeavcFb0crtavcFbGV86bbaecefheavcje6hoavcr4hvaoTmbka3hAxvkcPhvasaEcdtcPV86bba3hAkavTmiavaH9omicdhocehEaQhYxlkavcufhvaEclfgEc;ab9hmbkkdnaLceaYaOSceta8AaOSEcx2gvc;a1jjbfydbcdtfydbgKTaLavc;e1jjbfydbcdtfydbg8AceSGaLavc;i1jjbfydbcdtfydbg3cdSGaOcb9hGazGg5ce9hmbaw9cu83ibaD9cu83ibaq9cu83ibak9cu83ibax9cu83ibam9cu83ibal9cu83iwal9cu83ibcbhOkcbhEaXcufgvhodnindnalaocsGcdtfydba8A9hmbaEhYxdkcuhYaocufhoaEcefgEcz9hmbkkcbhodnindnalavcsGcdtfydba39hmbaohExdkcuhEavcufhvaocefgocz9hmbkkaOaKaOSg8EfhLdndnaYcm0mbaYcefhYxekcbcsa8AaLSgvEhYaLavfhLkdndnaEcm0mbaEcefhExekcbcsa3aLSgvEhEaLavfhLkc9:cua8EEh8FcbhvaEaYcltVgacFeGhodndndninavc:W1jjbfRbbaoSmeavcefgvcz9hmbxdkka5aKaO9havcm0VVmbasavc;WeV86bbxekasa8F86bbaeaa86bbaecefhekdna8EmbaKaA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombkaKhAkdnaYcs9hmba8AaA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombka8AhAkdnaEcs9hmba3aA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombka3hAkalaXcdtfaKBdbaXcefcsGhvdndnaYPzbeeeeeeeeeeeeeebekalavcdtfa8ABdbaXcdfcsGhvkdndnaEPzbeeeeeeeeeeeeeebekalavcdtfa3BdbavcefcsGhvkcihoalc;abfaQcitfgEaKBdlaEa8ABdbaQcefcsGhYcdhEavhXaLhOxekcdhoalaXcdtfa3BdbcehEaXcefcsGhXaQhYkalc;abfaYcitfgva8ABdlava3Bdbalc;abfaQaEfcsGcitfgva3BdlavaKBdbascefhsaQaofcsGhQaCcifgCai6mbkkdnaeaP9nmbcbhvxekcbhvinaeavfavc:W1jjbfRbb86bbavcefgvcz9hmbkaeab9Ravfhvkalc;aef8KjjjjbavkZeeucbhddninadcefgdc8F0meceadtae6mbkkadcrfcFeGcr9Uci2cdfabci9U2cHfkmbcbabBd;m:kjjbk:Adewu8Jjjjjbcz9Rhlcbhvdnaicvfae0mbcbhvabcbRb;m:kjjbc;qeV86bbal9cb83iwabcefhoabaefc98fhrdnaiTmbcbhwcbhDindnaoar6mbcbskadaDcdtfydbgqalcwfawaqav9Rgvavc8F91gv7av9Rc507gwcdtfgkydb9Rgvc8E91c9:Gavcdt7awVhvinaoavcFb0gecrtavcFbGV86bbavcr4hvaocefhoaembkakaqBdbaqhvaDcefgDai9hmbkkdnaoar9nmbcbskaocbBbbaoab9RclfhvkavkBeeucbhddninadcefgdc8F0meceadtae6mbkkadcwfcFeGcr9Uab2cvfk:bvli99dui99ludnaeTmbcuadcetcuftcu7:Zhvdndncuaicuftcu7:ZgoJbbbZMgr:lJbbb9p9DTmbar:Ohwxekcjjjj94hwkcbhicbhDinalclfIdbgrJbbbbJbbjZalIdbgq:lar:lMalcwfIdbgk:lMgr:varJbbbb9BEgrNhxaqarNhrdndnakJbbbb9GTmbaxhqxekJbbjZar:l:tgqaq:maxJbbbb9GEhqJbbjZax:l:tgxax:marJbbbb9GEhrkdndnalcxfIdbgxJbbj:;axJbbj:;9GEgkJbbjZakJbbjZ9FEavNJbbbZJbbb:;axJbbbb9GEMgx:lJbbb9p9DTmbax:Ohmxekcjjjj94hmkdndnaqJbbj:;aqJbbj:;9GEgxJbbjZaxJbbjZ9FEaoNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:OhPxekcjjjj94hPkdndnarJbbj:;arJbbj:;9GEgqJbbjZaqJbbjZ9FEaoNJbbbZJbbb:;arJbbbb9GEMgr:lJbbb9p9DTmbar:Ohsxekcjjjj94hskdndnadcl9hmbabaifgzas86bbazcifam86bbazcdfaw86bbazcefaP86bbxekabaDfgzas87ebazcofam87ebazclfaw87ebazcdfaP87ebkalczfhlaiclfhiaDcwfhDaecufgembkkk;hlld99eud99eudnaeTmbdndncuaicuftcu7:ZgvJbbbZMgo:lJbbb9p9DTmbao:Ohixekcjjjj94hikaic;8FiGhrinabcofcicdalclfIdb:lalIdb:l9EgialcwfIdb:lalaicdtfIdb:l9EEgialcxfIdb:lalaicdtfIdb:l9EEgiarV87ebdndnJbbj:;JbbjZalaicdtfIdbJbbbb9DEgoalaicd7cdtfIdbJ;Zl:1ZNNgwJbbj:;awJbbj:;9GEgDJbbjZaDJbbjZ9FEavNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohqxekcjjjj94hqkabcdfaq87ebdndnalaicefciGcdtfIdbJ;Zl:1ZNaoNgwJbbj:;awJbbj:;9GEgDJbbjZaDJbbjZ9FEavNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohqxekcjjjj94hqkabaq87ebdndnaoalaicufciGcdtfIdbJ;Zl:1ZNNgoJbbj:;aoJbbj:;9GEgwJbbjZawJbbjZ9FEavNJbbbZJbbb:;aoJbbbb9GEMgo:lJbbb9p9DTmbao:Ohixekcjjjj94hikabclfai87ebabcwfhbalczfhlaecufgembkkk;3viDue99eu8Jjjjjbcjd9Rgo8Kjjjjbadcd4hrdndndndnavcd9hmbadcl6meaohwarhDinawc:CuBdbawclfhwaDcufgDmbkaeTmiadcl6mdarcdthqalhkcbhxinaohwakhDarhminawawydbgPcbaDIdbgs:8cL4cFeGc:cufasJbbbb9BEgzaPaz9kEBdbaDclfhDawclfhwamcufgmmbkakaqfhkaxcefgxaeSmixbkkaeTmdxekaeTmekarcdthkavce9hhqadcl6hdcbhxindndndnaqmbadmdc:CuhDalhwarhminaDcbawIdbgs:8cL4cFeGc:cufasJbbbb9BEgPaDaP9kEhDawclfhwamcufgmmbxdkkc:CuhDdndnavPleddbdkadmdaohwalhmarhPinawcbamIdbgs:8cL4cFeGgzc;:bazc;:b0Ec:cufasJbbbb9BEBdbamclfhmawclfhwaPcufgPmbxdkkadmecbhwarhminaoawfcbalawfIdbgs:8cL4cFeGgPc8AaPc8A0Ec:cufasJbbbb9BEBdbawclfhwamcufgmmbkkadmbcbhwarhPinaDhmdnavceSmbaoawfydbhmkdndnalawfIdbgscjjj;8iamai9RcefgmcLt9R::NJbbbZJbbb:;asJbbbb9GEMgs:lJbbb9p9DTmbas:Ohzxekcjjjj94hzkabawfazcFFFrGamcKtVBdbawclfhwaPcufgPmbkkabakfhbalakfhlaxcefgxae9hmbkkaocjdf8Kjjjjbk:Ylvdud99due99iudnaeTmbceaicufgvthocuaitcu7:Zhrcuavtcu7:Zhwcbhvadcl9hhDcbhqindndnalcwfIdbgkJbbbbakJbbbb9GEgkJbbjZakJbbjZ9FEarNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikdndnalIdbgkJbbbbakJbbbb9GEgkJbbjZakJbbjZ9FEarNJbbbZMgk:lJbbb9p9DTmbak:Ohdxekcjjjj94hdkadai9Rcd9TgxaifhidndnalclfIdbgkJbbbbakJbbbb9GEgkJbbjZakJbbjZ9FEarNJbbbZMgk:lJbbb9p9DTmbak:Ohdxekcjjjj94hdkadai9Rcd9ThddndnalcxfIdbgkJbbbbakJbbbb9GEgkJbbjZakJbbjZ9FEawNJbbbZMgk:lJbbb9p9DTmbak:Ohmxekcjjjj94hmkadaifhiaoamVhmdndnaDmbabavfgPai86bbaPcifam86bbaPcdfad86bbaPcefax86bbxekabaqfgPai87ebaPcofam87ebaPclfad87ebaPcdfax87ebkalczfhlavclfhvaqcwfhqaecufgembkkk;YqdXui998Jjjjjbc:qd9Rgv8Kjjjjbavc:Sefcbc;Kbz:xjjjb8AcbhodnadTmbcbhoaiTmbdndnabaeSmbaehrxekavcuadcdtgwadcFFFFi0Ecbyd;q:kjjbHjjjjbbgrBd:SeavceBd:mdaraeawz:wjjjb8Akavc:GefcwfcbBdbav9cb83i:Geavc:Gefaradaiavc:Sefz:pjjjbavyd:GehDadci9Ugqcbyd;q:kjjbHjjjjbbheavc:Sefavyd:mdgkcdtfaeBdbavakcefgwBd:mdaecbaqz:xjjjbhxavc:SefawcdtfcuaicdtaicFFFFi0Ecbyd;q:kjjbHjjjjbbgmBdbavakcdfgPBd:mdalc;ebfhsaDheamhwinawalIdbasaeydbgzcwazcw6EcdtfIdbMUdbaeclfheawclfhwaicufgimbkavc:SefaPcdtfcuaqcdtadcFFFF970Ecbyd;q:kjjbHjjjjbbgPBdbdnadci6mbarheaPhwaqhiinawamaeydbcdtfIdbamaeclfydbcdtfIdbMamaecwfydbcdtfIdbMUdbaecxfheawclfhwaicufgimbkkakcifhoalc;ebfhHavc;qbfhOavheavyd:KehAavyd:OehCcbhzcbhwcbhXcehQinaehLcihkarawci2gKcdtfgeydbhsaeclfydbhdabaXcx2fgicwfaecwfydbgYBdbaiclfadBdbaiasBdbaxawfce86bbaOaYBdwaOadBdlaOasBdbaPawcdtfcbBdbdnazTmbcihkaLhiinaOakcdtfaiydbgeBdbakaeaY9haeas9haead9hGGfhkaiclfhiazcufgzmbkkaXcefhXcbhzinaCaAarazaKfcdtfydbcdtgifydbcdtfgYheaDaifgdydbgshidnasTmbdninaeydbawSmeaeclfheaicufgiTmdxbkkaeaYascdtfc98fydbBdbadadydbcufBdbkazcefgzci9hmbkdndnakTmbcuhwJbbbbh8Acbhdavyd:KehYavyd:OehKindndnaDaOadcdtfydbcdtgzfydbgembadcefhdxekadcs0hiamazfgsIdbhEasalcbadcefgdaiEcdtfIdbaHaecwaecw6EcdtfIdbMg3Udba3aE:th3aecdthiaKaYazfydbcdtfheinaPaeydbgzcdtfgsa3asIdbMgEUdbaEa8Aa8AaE9DgsEh8AazawasEhwaeclfheaic98fgimbkkadak9hmbkawcu9hmekaQaq9pmdindnaxaQfRbbmbaQhwxdkaqaQcefgQ9hmbxikkakczakcz6EhzaOheaLhOawcu9hmbkkaocdtavc:Seffc98fhedninaoTmeaeydbcbyd;u:kjjbH:bjjjbbaec98fheaocufhoxbkkavc:qdf8Kjjjjbk;IlevucuaicdtgvaicFFFFi0Egocbyd;q:kjjbHjjjjbbhralalyd9GgwcdtfarBdbalawcefBd9GabarBdbaocbyd;q:kjjbHjjjjbbhralalyd9GgocdtfarBdbalaocefBd9GabarBdlcuadcdtadcFFFFi0Ecbyd;q:kjjbHjjjjbbhralalyd9GgocdtfarBdbalaocefBd9GabarBdwabydbcbavz:xjjjb8Aadci9UhDdnadTmbabydbhoaehladhrinaoalydbcdtfgvavydbcefBdbalclfhlarcufgrmbkkdnaiTmbabydbhlabydlhrcbhvaihoinaravBdbarclfhralydbavfhvalclfhlaocufgombkkdnadci6mbabydlhrabydwhvcbhlinaecwfydbhoaeclfydbhdaraeydbcdtfgwawydbgwcefBdbavawcdtfalBdbaradcdtfgdadydbgdcefBdbavadcdtfalBdbaraocdtfgoaoydbgocefBdbavaocdtfalBdbaecxfheaDalcefgl9hmbkkdnaiTmbabydlheabydbhlinaeaeydbalydb9RBdbalclfhlaeclfheaicufgimbkkkQbabaeadaic;K1jjbz:ojjjbkQbabaeadaic;m:jjjbz:ojjjbk9DeeuabcFeaicdtz:xjjjbhlcbhbdnadTmbindnalaeydbcdtfgiydbcu9hmbaiabBdbabcefhbkaeclfheadcufgdmbkkabk:Vvioud9:du8Jjjjjbc;Wa9Rgl8Kjjjjbcbhvalcxfcbc;Kbz:xjjjb8AalcuadcitgoadcFFFFe0Ecbyd;q:kjjbHjjjjbbgrBdxalceBd2araeadaicezNjjjbalcuaoadcjjjjoGEcbyd;q:kjjbHjjjjbbgwBdzadcdthednadTmbabhiinaiavBdbaiclfhiadavcefgv9hmbkkawaefhDalabBdwalawBdl9cbhqindnadTmbaq9cq9:hkarhvaDhiadheinaiav8Pibak1:NcFrG87ebavcwfhvaicdfhiaecufgembkkalclfaq:NceGcdtfydbhxalclfaq9ce98gq:NceGcdtfydbhmalc;Wbfcbcjaz:xjjjb8AaDhvadhidnadTmbinalc;Wbfav8VebcdtfgeaeydbcefBdbavcdfhvaicufgimbkkcbhvcbhiinalc;WbfavfgeydbhoaeaiBdbaoaifhiavclfgvcja9hmbkadhvdndnadTmbinalc;WbfaDamydbgicetf8VebcdtfgeaeydbgecefBdbaxaecdtfaiBdbamclfhmavcufgvmbkaq9cv9smdcbhvinabawydbcdtfavBdbawclfhwadavcefgv9hmbxdkkaq9cv9smekkclhvdninavc98Smealcxfavfydbcbyd;u:kjjbH:bjjjbbavc98fhvxbkkalc;Waf8Kjjjjbk:Jwliuo99iud9:cbhv8Jjjjjbca9Rgoczfcwfcbyd:8:kjjbBdbaocb8Pd:0:kjjb83izaocwfcbyd;i:kjjbBdbaocb8Pd;a:kjjb83ibaicd4hrdndnadmbJFFuFhwJFFuuhDJFFuuhqJFFuFhkJFFuuhxJFFuFhmxekarcdthPaehsincbhiinaoczfaifgzasaifIdbgwazIdbgDaDaw9EEUdbaoaifgzawazIdbgDaDaw9DEUdbaiclfgicx9hmbkasaPfhsavcefgvad9hmbkaoIdKhDaoIdwhwaoIdChqaoIdlhkaoIdzhxaoIdbhmkdnadTmbJbbbbJbFu9hJbbbbamax:tgmamJbbbb9DEgmakaq:tgkakam9DEgkawaD:tgwawak9DEgw:vawJbbbb9BEhwdnalmbarcdthoindndnaeclfIdbaq:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikai:S9cC:ghHdndnaeIdbax:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikaHai:S:ehHdndnaecwfIdbaD:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikabaHai:T9cy:g:e83ibaeaofheabcwfhbadcufgdmbxdkkarcdthoindndnaeIdbax:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikai:SgH9ca:gaH9cz:g9cjjj;4s:d:eaH9cFe:d:e9cF:bj;4:pj;ar:d9c:bd9:9c:p;G:d;4j:E;ar:d9cH9:9c;d;H:W:y:m:g;d;Hb:d9cv9:9c;j:KM;j:KM;j:Kd:dhOdndnaeclfIdbaq:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikai:SgH9ca:gaH9cz:g9cjjj;4s:d:eaH9cFe:d:e9cF:bj;4:pj;ar:d9c:bd9:9c:p;G:d;4j:E;ar:d9cH9:9c;d;H:W:y:m:g;d;Hb:d9cq9:9cM;j:KM;j:KM;jl:daO:ehOdndnaecwfIdbaD:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikabaOai:SgH9ca:gaH9cz:g9cjjj;4s:d:eaH9cFe:d:e9cF:bj;4:pj;ar:d9c:bd9:9c:p;G:d;4j:E;ar:d9cH9:9c;d;H:W:y:m:g;d;Hb:d9cC9:9c:KM;j:KM;j:KMD:d:e83ibaeaofheabcwfhbadcufgdmbkkk9teiucbcbyd;y:kjjbgeabcifc98GfgbBd;y:kjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;teeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk:3eedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdxaialBdwaialBdlaialBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd;y:kjjbgeabcrfc94GfgbBd;y:kjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik9:eiuZbhedndncbyd;y:kjjbgdaecztgi9nmbcuheadai9RcFFifcz4nbcuSmekadhekcbabae9Rcifc98Gcbyd;y:kjjbfgdBd;y:kjjbdnadZbcztge9nmbadae9RcFFifcz4nb8Akkk;Qddbcjwk;mdbbbbdbbblbbbwbbbbbbbebbbdbbblbbbwbbbbbbbbbbbbbbbb4:h9w9N94:P:gW:j9O:ye9Pbbbbbbebbbdbbbebbbdbbbbbbbdbbbbbbbebbbbbbb:l29hZ;69:9kZ;N;76Z;rg97Z;z;o9xZ8J;B85Z;:;u9yZ;b;k9HZ:2;Z9DZ9e:l9mZ59A8KZ:r;T3Z:A:zYZ79OHZ;j4::8::Y:D9V8:bbbb9s:49:Z8R:hBZ9M9M;M8:L;z;o8:;8:PG89q;x:J878R:hQ8::M:B;e87bbbbbbjZbbjZbbjZ:E;V;N8::Y:DsZ9i;H;68:xd;R8:;h0838:;W:NoZbbbb:WV9O8:uf888:9i;H;68:9c9G;L89;n;m9m89;D8Ko8:bbbbf:8tZ9m836ZS:2AZL;zPZZ818EZ9e:lxZ;U98F8:819E;68:FFuuFFuuFFuuFFuFFFuFFFuFbc;mqkzebbbebbbdbbb9G:vbb", D = new Uint8Array([
4
4
  32,
@@ -73,6 +73,22 @@ export declare class ViralBatchedMesh extends Mesh {
73
73
  modelId: string;
74
74
  elementId: string;
75
75
  }[];
76
+ protected _hidingElements: {
77
+ modelId: string;
78
+ elementId: string;
79
+ }[];
80
+ protected _isolatingElements: {
81
+ modelId: string;
82
+ elementId: string;
83
+ }[];
84
+ private _hiddenSet;
85
+ private _isolatedSet;
86
+ private _elementOpacityMap;
87
+ private _isRGBAMode;
88
+ private _elementOriginalColors;
89
+ /**
90
+ * Select elements (highlights them with accent color)
91
+ */
76
92
  select(elements: {
77
93
  modelId: string;
78
94
  elementId: string;
@@ -87,18 +103,26 @@ export declare class ViralBatchedMesh extends Mesh {
87
103
  b: number;
88
104
  };
89
105
  }[]): void;
90
- protected _hidingElements: {
106
+ get selectedElements(): {
91
107
  modelId: string;
92
108
  elementId: string;
93
109
  }[];
110
+ /**
111
+ * Hide elements by setting their alpha to 0 (GPU-accelerated)
112
+ * Hidden elements are discarded in fragment shader - no rendering cost
113
+ *
114
+ * @param elements - Elements to hide (defaults to selected elements)
115
+ */
94
116
  hide(elements?: {
95
117
  modelId: string;
96
118
  elementId: string;
97
119
  }[]): void;
98
- protected _isolatingElements: {
99
- modelId: string;
100
- elementId: string;
101
- }[];
120
+ /**
121
+ * Isolate elements - show ONLY these elements, hide everything else
122
+ *
123
+ * @param elements - Elements to isolate (defaults to selected elements)
124
+ * @returns The isolated elements
125
+ */
102
126
  isolate(elements?: {
103
127
  modelId: string;
104
128
  elementId: string;
@@ -106,28 +130,107 @@ export declare class ViralBatchedMesh extends Mesh {
106
130
  modelId: string;
107
131
  elementId: string;
108
132
  }[];
109
- get selectedElements(): {
110
- modelId: string;
111
- elementId: string;
112
- }[];
113
133
  /**
114
- * Isolate whole model
115
- * @param modelIds
134
+ * Isolate entire models
135
+ * @param modelIds - Model IDs to isolate
116
136
  */
117
137
  isolateModel(modelIds: string[]): void;
118
138
  /**
119
- * reset visibility also color
139
+ * Show a previously hidden element
140
+ * @param elements - Elements to show
141
+ */
142
+ show(elements: {
143
+ modelId: string;
144
+ elementId: string;
145
+ }[]): void;
146
+ /**
147
+ * Reset all visibility - show everything
120
148
  */
121
149
  reset(): void;
122
- optimizeVertices(): void;
123
- updateVisibility(bufferElements: BufferElement[]): void;
150
+ /**
151
+ * Check if an element is currently visible
152
+ */
153
+ isElementVisible(modelId: string, elementId: string): boolean;
154
+ /**
155
+ * Set opacity for specific elements (0.0 = invisible, 1.0 = fully opaque)
156
+ * Uses custom shader's per-vertex alpha support
157
+ *
158
+ * @param elements - Elements to modify
159
+ * @param opacity - Opacity value (0.0 to 1.0)
160
+ *
161
+ * @example
162
+ * ```typescript
163
+ * // Semi-transparent (ghost mode)
164
+ * mesh.setElementOpacity([{ modelId: "0", elementId: "abc" }], 0.3);
165
+ *
166
+ * // Fully hidden but still raycastable
167
+ * mesh.setElementOpacity([{ modelId: "0", elementId: "abc" }], 0.0);
168
+ * ```
169
+ */
170
+ setElementOpacity(elements: {
171
+ modelId: string;
172
+ elementId: string;
173
+ }[], opacity: number): void;
174
+ /**
175
+ * Get the current opacity of an element
176
+ */
177
+ getElementOpacity(modelId: string, elementId: string): number;
178
+ /**
179
+ * Ghost mode - semi-transparent with optional desaturation
180
+ * Perfect for showing context while highlighting other elements
181
+ *
182
+ * @param elements - Elements to ghost
183
+ * @param ghostOpacity - Opacity for ghost mode (default: 0.15)
184
+ * @param desaturate - Whether to desaturate color (default: true)
185
+ */
186
+ setElementGhost(elements: {
187
+ modelId: string;
188
+ elementId: string;
189
+ }[], ghostOpacity?: number, desaturate?: boolean): void;
190
+ /**
191
+ * Ghost all elements EXCEPT the specified ones
192
+ * Focused elements remain fully opaque, everything else becomes ghosted
193
+ *
194
+ * @param focusElements - Elements to keep fully visible
195
+ * @param ghostOpacity - Opacity for non-focused elements (default: 0.1)
196
+ */
197
+ ghostExcept(focusElements: {
198
+ modelId: string;
199
+ elementId: string;
200
+ }[], ghostOpacity?: number): void;
201
+ /**
202
+ * Reset all element opacities to fully opaque and restore original colors
203
+ */
204
+ resetElementOpacity(): void;
205
+ /**
206
+ * Check if any element has semi-transparent opacity
207
+ */
208
+ hasTransparentElements(): boolean;
209
+ /**
210
+ * Check if MOST elements are transparent (for deciding depth write strategy)
211
+ * Returns true if more than 50% of elements have transparency
212
+ */
213
+ private _isMostlyTransparent;
214
+ /**
215
+ * 🔧 Update material depth write based on transparency state
216
+ * When MOST elements are semi-transparent, disable depth write to fix see-through issues
217
+ * Also respects originally transparent materials (windows, glass)
218
+ */
219
+ private _updateDepthWriteForTransparency;
220
+ /**
221
+ * 🔧 INTERNAL: Update alpha values based on visibility state
222
+ * This is the core method that applies hide/isolate states to the GPU buffer
223
+ */
224
+ private _updateAlphaVisibility;
124
225
  findElementByFaceIndex(faceIndex: number): {
125
226
  modelId: string;
126
227
  elementId: string;
127
228
  } | null;
128
229
  /**
129
230
  * Changes the color of multiple elements in the merged mesh.
130
- * @param elements - An array of elements, each containing `modelId`, `elementId`, and `color`.
231
+ * Works with RGBA color buffer (preserves existing alpha values)
232
+ * @param elements - An array of elements, each containing `modelId` and `elementId`.
233
+ * @param color - The new RGB color to apply
131
234
  */
132
235
  changeColor(elements: {
133
236
  modelId: string;
@@ -142,9 +245,10 @@ export declare class ViralBatchedMesh extends Mesh {
142
245
  */
143
246
  /**
144
247
  * Resets the color of an element back to the original color or the entire mesh if no element is specified.
248
+ * Works with RGBA color buffer (preserves existing alpha values)
145
249
  * @param modelId - The model ID to reset. Pass `null` to reset the entire mesh.
146
250
  * @param elementId - The element ID to reset. Ignored if `modelId` is `null`.
147
- * @param excepts - In case we dont want to convert back to original color
251
+ * @param excepts - Elements that should receive a different color instead of original
148
252
  */
149
253
  resetColor(modelId: string | null, elementId?: string, excepts?: {
150
254
  elements: {
@@ -14,6 +14,7 @@ export declare class ViralInstancedMeshV2 extends Object3D {
14
14
  instancedMesh: InstancedMesh;
15
15
  }[]>>;
16
16
  private _originalTransforms;
17
+ private _elementOpacity;
17
18
  private _selectedElements;
18
19
  private _hidingElements;
19
20
  protected _isolatingElements: {
@@ -70,10 +71,26 @@ export declare class ViralInstancedMeshV2 extends Object3D {
70
71
  modelId: string;
71
72
  elementId: string;
72
73
  }[];
74
+ private _hiddenSet;
75
+ private _isolatedSet;
76
+ private static readonly ZERO_MATRIX;
77
+ /**
78
+ * Hide elements by setting their transform scale to 0
79
+ * Zero-scaled instances are automatically culled by GPU - maximum performance
80
+ *
81
+ * @param elements - Elements to hide (defaults to selected elements)
82
+ */
73
83
  hide(elements?: {
74
84
  modelId: string;
75
85
  elementId: string;
76
86
  }[]): void;
87
+ /**
88
+ * Isolate elements - show ONLY these elements, hide everything else
89
+ * Uses batch matrix update for best performance
90
+ *
91
+ * @param elements - Elements to isolate (defaults to selected elements)
92
+ * @returns The isolated elements
93
+ */
77
94
  isolate(elements?: {
78
95
  modelId: string;
79
96
  elementId: string;
@@ -81,9 +98,104 @@ export declare class ViralInstancedMeshV2 extends Object3D {
81
98
  modelId: string;
82
99
  elementId: string;
83
100
  }[];
101
+ /**
102
+ * Isolate entire models
103
+ * @param modelIds - Model IDs to isolate
104
+ */
84
105
  isolateModel(modelIds: string[]): void;
106
+ /**
107
+ * Show a previously hidden element
108
+ * @param elements - Elements to show
109
+ */
110
+ show(elements: {
111
+ modelId: string;
112
+ elementId: string;
113
+ }[]): void;
114
+ /**
115
+ * Reset all visibility - show everything
116
+ */
85
117
  reset(): void;
86
- private showAllInstances;
118
+ /**
119
+ * Check if an element is currently visible
120
+ */
121
+ isElementVisible(modelId: string, elementId: string): boolean;
122
+ /**
123
+ * Inject per-instance opacity shader into material
124
+ * Must be called after material is set and before rendering
125
+ */
126
+ injectOpacityShader(): void;
127
+ /**
128
+ * Ensure all instanced meshes have opacity attribute
129
+ */
130
+ private _ensureOpacityAttributes;
131
+ /**
132
+ * Update opacity for specific instances
133
+ */
134
+ private _updateInstanceOpacity;
135
+ /**
136
+ * Set opacity for specific elements
137
+ * @param elements - Elements to set opacity for
138
+ * @param opacity - Opacity value (0-1)
139
+ */
140
+ setElementOpacity(elements: {
141
+ modelId: string;
142
+ elementId: string;
143
+ }[], opacity: number): void;
144
+ /**
145
+ * Get current opacity of an element
146
+ * @param modelId - Model ID
147
+ * @param elementId - Element ID
148
+ * @returns Current opacity (0-1), defaults to 1
149
+ */
150
+ getElementOpacity(modelId: string, elementId: string): number;
151
+ /**
152
+ * Set elements to "ghost" mode (semi-transparent)
153
+ * @param elements - Elements to ghost
154
+ * @param ghostOpacity - Opacity for ghosted elements (default 0.1)
155
+ */
156
+ setElementGhost(elements: {
157
+ modelId: string;
158
+ elementId: string;
159
+ }[], ghostOpacity?: number, desaturate?: boolean): void;
160
+ /**
161
+ * Ghost all elements EXCEPT the specified ones
162
+ * @param elements - Elements to keep fully opaque
163
+ * @param ghostOpacity - Opacity for all other elements (default 0.1)
164
+ */
165
+ ghostExcept(elements: {
166
+ modelId: string;
167
+ elementId: string;
168
+ }[], ghostOpacity?: number): void;
169
+ /**
170
+ * Desaturate instance color (turn whitish)
171
+ * @param modelId - Model ID
172
+ * @param elementId - Element ID
173
+ * @param desatFactor - Desaturation factor (0 = original, 1 = full white)
174
+ */
175
+ private _desaturateInstanceColor;
176
+ /**
177
+ * Restore instance color to original
178
+ */
179
+ private _restoreInstanceColor;
180
+ /**
181
+ * Reset all elements to full opacity and restore original colors
182
+ */
183
+ resetElementOpacity(): void;
184
+ /**
185
+ * Check if any element has semi-transparent opacity
186
+ */
187
+ hasTransparentElements(): boolean;
188
+ /**
189
+ * Check if MOST elements are transparent (for deciding depth write strategy)
190
+ * Returns true if more than 50% of elements have transparency
191
+ */
192
+ private _isMostlyTransparent;
193
+ /**
194
+ * 🔧 Update material depth write based on transparency state
195
+ * When MOST elements are semi-transparent, disable depth write
196
+ * Also respects originally transparent materials (windows, glass)
197
+ */
198
+ private _updateDepthWriteForTransparency;
87
199
  enableEdgePerElement(material: LineMaterial, thresholdDeg?: number): void;
88
200
  disableEdge(): void;
89
201
  enableEdge(): void;
@@ -109,6 +109,37 @@ export declare class ViralMergedModel extends Mesh {
109
109
  */
110
110
  resetVisibility(): void;
111
111
  resetColor(): void;
112
+ /**
113
+ * Set opacity for specific elements
114
+ * @param elements - Elements to set opacity for
115
+ * @param opacity - Opacity value (0-1)
116
+ */
117
+ setElementOpacity(elements: {
118
+ modelId: string;
119
+ elementId: string;
120
+ }[], opacity: number): void;
121
+ /**
122
+ * Set elements to "ghost" mode (semi-transparent)
123
+ * @param elements - Elements to ghost
124
+ * @param ghostOpacity - Opacity for ghosted elements (default 0.1)
125
+ */
126
+ setElementGhost(elements: {
127
+ modelId: string;
128
+ elementId: string;
129
+ }[], ghostOpacity?: number): void;
130
+ /**
131
+ * Ghost all elements EXCEPT the specified ones
132
+ * @param elements - Elements to keep fully opaque
133
+ * @param ghostOpacity - Opacity for all other elements (default 0.1)
134
+ */
135
+ ghostExcept(elements: {
136
+ modelId: string;
137
+ elementId: string;
138
+ }[], ghostOpacity?: number): void;
139
+ /**
140
+ * Reset all elements to full opacity
141
+ */
142
+ resetElementOpacity(): void;
112
143
  enableEdge(material: LineMaterial, thresholdDeg?: number): void;
113
144
  showEdge(): void;
114
145
  hideEdge(): void;
@@ -139,6 +170,10 @@ export declare class ViralMergedModel extends Mesh {
139
170
  * Notify edge mesh when meshes are updated (call this after batching or rebuilding)
140
171
  */
141
172
  onMeshUpdated(mesh?: ViralBatchedMesh | ViralInstancedMeshV2): void;
173
+ /**
174
+ * @deprecated No longer needed - visibility is now alpha-based (GPU-accelerated)
175
+ * Kept for backward compatibility but does nothing
176
+ */
142
177
  optimizeVertices(): void;
143
178
  /**
144
179
  * *everytime add new model in scene this model will be regenerated again, for that reason we should dispose this model
@@ -1,13 +1,15 @@
1
- import { CheckClashResult, CompareModelsResult, DataTree, GroupByResult, ViralViewerApi } from "../..";
1
+ import { CheckClashResult, CompareModelsResult, DataTree, GroupByResult, ViralutionTrackingModel, ViralViewerApi } from "../..";
2
2
  export declare class ViralDataManager {
3
3
  viralViewerApi: ViralViewerApi;
4
4
  dataTree: DataTree[];
5
+ trackingData: Map<number, ViralutionTrackingModel>;
5
6
  private fetchDataWorker;
6
7
  private buildTreeNodeWorker;
7
8
  private _boundingBoxWorker;
8
9
  private _boundingBoxIntersectWorker;
9
10
  private _checkClashWorker;
10
11
  constructor(viralViewerApi: ViralViewerApi);
12
+ addTrackingData(modelId: number, data: ViralutionTrackingModel): void;
11
13
  normalFetch(url: string, byteRangeStart?: number, byteRangeEnd?: number): Promise<Response>;
12
14
  gzipFetch(url: string): Promise<Response>;
13
15
  /**
@@ -23,6 +23,7 @@ export declare class ViralCentralizedEventHandler {
23
23
  selectElementHandler(): void;
24
24
  enableSelectElement(value: boolean): void;
25
25
  selectElementHandler2(): void;
26
+ doubleClickElementHandler(): void;
26
27
  isShiftPressed: boolean;
27
28
  keyboardHandler(): void;
28
29
  }
@@ -1,4 +1,4 @@
1
- import { RevitTransform, ViralPoint, ViralViewerRevitProject, ViralutionElement, ViralutionFragmentModel } from "../../types";
1
+ import { RevitTransform, ViralPoint, ViralViewerRevitProject, ViralutionElement, ViralutionFragmentModel, ViralutionTrackingModel } from "../../types";
2
2
  import { ViralViewerApi } from "../../viral-viewer-api";
3
3
  export declare class ViralRevitLoader {
4
4
  viralViewerApi: ViralViewerApi;
@@ -22,6 +22,12 @@ export declare class ViralRevitLoader {
22
22
  loadFlatBufferStandalone(informationUrl: string, geometriesUrl: string, callbackOnFinish?: () => void): Promise<void>;
23
23
  getMaterials(dataUrl: string, byteRangeStart: number, byteRangeEnd: number): Promise<any>;
24
24
  getElements(dataUrl: string, chunk: number[][], callbackOnSuccess?: (model: any, index: number) => void): Promise<void>;
25
+ focusCameraOnModel(trackingModel: ViralutionTrackingModel): Promise<void>;
26
+ getTranslation(translation: number[]): {
27
+ x: number;
28
+ y: number;
29
+ z: number;
30
+ } | null;
25
31
  loadByMaterial(trackingUrl: string, dataUrl: string, informationUrl: string): Promise<void>;
26
32
  /**
27
33
  * dispose all current model
@@ -56,10 +56,23 @@ export declare class ViralVisibilityManager {
56
56
  b: number;
57
57
  };
58
58
  }[];
59
+ /**
60
+ * Select elements (replaces current selection)
61
+ */
59
62
  selectElements(elements: {
60
63
  modelId: string;
61
64
  elementId: string;
62
65
  }[]): void;
66
+ /**
67
+ * Add elements to current selection (multi-select with Shift)
68
+ */
69
+ addToSelection(elements: {
70
+ modelId: string;
71
+ elementId: string;
72
+ }[]): void;
73
+ /**
74
+ * Unselect all elements
75
+ */
63
76
  unselectElements(): void;
64
77
  isolateModelId: string;
65
78
  isolateModel(isolateModelIds?: string[]): void;
@@ -116,6 +129,37 @@ export declare class ViralVisibilityManager {
116
129
  */
117
130
  enableSampling(numberOfSampling?: number): void;
118
131
  disableSampling(): void;
132
+ /**
133
+ * Set opacity for specific elements
134
+ * @param elements - Elements to set opacity for
135
+ * @param opacity - Opacity value (0-1)
136
+ */
137
+ setElementOpacity(elements: {
138
+ modelId: string;
139
+ elementId: string;
140
+ }[], opacity: number): void;
141
+ /**
142
+ * Set elements to "ghost" mode (semi-transparent)
143
+ * @param elements - Elements to ghost
144
+ * @param ghostOpacity - Opacity for ghosted elements (default 0.1)
145
+ */
146
+ setElementGhost(elements: {
147
+ modelId: string;
148
+ elementId: string;
149
+ }[], ghostOpacity?: number): void;
150
+ /**
151
+ * Ghost all elements EXCEPT the specified ones (highlight effect)
152
+ * @param elements - Elements to keep fully opaque
153
+ * @param ghostOpacity - Opacity for all other elements (default 0.1)
154
+ */
155
+ ghostExcept(elements: {
156
+ modelId: string;
157
+ elementId: string;
158
+ }[], ghostOpacity?: number): void;
159
+ /**
160
+ * Reset all elements to full opacity
161
+ */
162
+ resetElementOpacity(): void;
119
163
  generateLOD(): void;
120
164
  private _batchColors;
121
165
  private _originalBatchMaterials;
@@ -137,4 +181,8 @@ export declare class ViralVisibilityManager {
137
181
  * Check if batch visualization is currently enabled
138
182
  */
139
183
  isBatchVisualizationEnabled(): boolean;
184
+ showHidePercentage: number;
185
+ showHideByPercentage(value?: number): void;
186
+ randomColor: number;
187
+ changeRandomColor(value?: number): void;
140
188
  }
@@ -22,7 +22,11 @@ export declare class LoadElementBatchWorker {
22
22
  /**
23
23
  * Main load method - automatically routes to spatial or traditional approach
24
24
  */
25
- loadElement(modelId: number, elements: ViralutionElement[], callbackOnSuccess?: () => void): void;
25
+ loadElement(modelId: number, elements: ViralutionElement[], callbackOnSuccess?: () => void, globalTranslation?: {
26
+ x: number;
27
+ y: number;
28
+ z: number;
29
+ } | null): void;
26
30
  private loadInstancedElement;
27
31
  /**
28
32
  * Traditional load implementation (renamed for clarity)
@@ -37,9 +41,16 @@ export declare class LoadElementBatchWorker {
37
41
  private createSingleMergedMesh;
38
42
  private createSingleInstancedMesh;
39
43
  /**
40
- * Create optimized material for merging
44
+ * Create optimized material for merging with per-element opacity support
45
+ * Uses onBeforeCompile to inject custom shader code for RGBA vertex colors
41
46
  */
42
47
  private createOptimizedMaterial;
48
+ /**
49
+ * 🎨 Inject custom shader modifications for per-element opacity
50
+ * This modifies the material's shaders to support RGBA vertex colors
51
+ * where the alpha channel controls per-element transparency
52
+ */
53
+ private injectPerElementOpacityShader;
43
54
  /**
44
55
  * Throttled render to avoid excessive render calls
45
56
  */