Plugin Directory

Changeset 3158721


Ignore:
Timestamp:
09/27/2024 11:13:14 AM (15 months ago)
Author:
pcarvalho
Message:

Version 1.3.1

Location:
interactive-globes/trunk
Files:
18 added
3 deleted
29 edited

Legend:

Unmodified
Added
Removed
  • interactive-globes/trunk/README.txt

    r3117254 r3158721  
    99License: GPLv2 or later
    1010License URI: https://www.gnu.org/licenses/gpl-2.0.html
    11 Create simplified but realistic 3D interactive planet earth globes, with elements that the user can interact with.
     11Create simplified but realistic 3D interactive planet earth globes, with map elements that the user can interact with. An engaging 3D interactive world map.
     12== Description ==
     13Create stunning, interactive 3D Earth globes for your WordPress site.
    1214
    13 == Description ==
     15This plugin offers a realistic 3D world map with clickable map elements, allowing users to explore geographic locations on a dynamic world map in an engaging and immersive way.
    1416
    15 Create simplified but realistic interactive planet earth globes, with markers and dot labels that the user can interact with.
    16 The perfect alternative to a flat world map, to get a more realistic version. Replace your world map with a 3D globe and impress your visitors.
     17Perfect for displaying global data, travel maps, or educational content, this 3D interactive world map plugin enhances user experience with smooth, responsive design.
     18
     19Easily integrate a customizable 3D world map into your website to captivate your audience.
    1720
    1821= 3D Globe =
    1922The globes are generated using globe.gl, a library that is able to create 3-dimensional globes in a spherical projection, using ThreeJS/WebGL for the 3D rendering.
    2023
    21 If you need to display locations on planet earth, this is the solution for you.
     24If you need to display locations a world map, this is the solution for you.
    2225
    2326Create your first globe in minutes! Use it to highligh locations, offices, projects, representatives, statistics, or other interactive marker visualization you need!
     
    2629
    2730= Features =
    28 - Create as many globes as you want
     31- Create as many globe maps as you want
    2932- Responsive and cross-device
    3033- Add round coloured markers
     
    5356
    5457== Changelog ==
     58
     59= 1.3.1 =
     60- New: Copy shortcode button
     61- Fix: Workaround when API DELETE is blocked
     62- Fix: Allow assets to be loaded in plugin pages
     63- Fix: Expose globe parent field when not in iframe
     64- Fix: Improve freemius integration
     65- Fix: Hide some geocoding fields
     66
     67= 1.3.0 =
     68
     69== Introducing PRO version ==
     70- New Feature: Regions
     71- New Feature: Arc Lines
     72- More Globe appearance options: Hollow Globe, Custom Color, Custom Image
     73- More Click Actions: Display Content Below, Below and Scroll, Above, Right, Left, in a Lightbox and in an Iframe.
     74
     75
     76== Fixes and Features ==
     77- Fix Rest API Error #57
     78- Add more filters to help customize the globe rendering
     79- Better default values
     80- Ripple effect on click
     81- Move external Font Awesome files to plugin
     82- Better action content handling of new lines breaks
     83- Improved admin preview experience
     84
    5585
    5686= 1.2.1 =
  • interactive-globes/trunk/dist/assets/css/admin/admin-style.min.css

    r3098987 r3158721  
    1 .itt_globe_info .csf-field-image_select img{max-width:125px}.geocoding-hide{display:none}.itt_globe_admin_example{display:-webkit-box;display:-ms-flexbox;display:flex}.itt_globe_admin_example img{max-width:220px}.itt_globe_meta .csf-section-title{display:none!important}.itt_globe_preview_container{display:-webkit-box;display:-ms-flexbox;display:flex}.itt_globe_preview{width:50%;position:relative}.itt_globe_preview_info{min-height:200px;width:50%;padding:5px}.itt_globe_preview_info .itt_globe_preview_action{float:right}.itt_globe_preview_action,.itt_globe_preview_data{display:inline-block;vertical-align:sub}.itt_globe_preview_title{--wp-admin--admin-bar--height:32px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;-webkit-font-smoothing:subpixel-antialiased;display:block;color:#1d2327;font-weight:400;font-size:14px;padding:8px 12px;margin:0;line-height:1.4}#poststuff .itt_globe_preview_info .inside{margin:6px}.itt_globe_preview_info .ittglobe_altitude_s,.itt_globe_preview_info .ittglobe_lat_s,.itt_globe_preview_info .ittglobe_lng_s{color:#1f1f1f}.itt_globe_preview_info .ittglobe_lat,.itt_globe_preview_info .ittglobe_lng{min-width:50px;display:inline-block}.itt_globe_preview_info pre{font-size:.8em}.itt_globe_save_warning{display:none;text-align:center;padding:10px;background:#ab4545a8;position:absolute;width:100%;top:0;left:0;z-index:1;color:#fff;-webkit-box-sizing:border-box;box-sizing:border-box}.itt_globe_preview_needs_update .itt_globe_save_warning{display:block}.itt_globes_cpt_manager_table{width:100%;border-collapse:collapse;border:1px solid #ccd0d4;margin-bottom:15px}.itt_globes_cpt_manager_table thead{border-bottom:1px solid #ccc}.itt_globes_cpt_manager_table td,.itt_globes_cpt_manager_table th{padding:10px;text-align:left}.itt_globes_cpt_manager_table tr:nth-child(2n){background-color:#f9f9f9}.itt_globes_cpt_manager_table tr:nth-child(odd){background-color:#fff}.itt_globes_cpt_manager_table :not(thead) tr:hover{background-color:#f1f1f1}.itt_globes_cpt_manager_table .buttons{text-align:right}.itt_globes_cpt_manager_table .buttons a.button{margin-left:5px}.modal{font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif}.modal__overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.6);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:2}.modal__container{background-color:#fff;padding:30px;max-width:500px;max-height:100vh;border-radius:4px;overflow-y:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.modal__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.modal__title{margin-top:0;margin-bottom:0;font-weight:600;font-size:1.25rem;line-height:1.25;color:#00449e;-webkit-box-sizing:border-box;box-sizing:border-box}.modal__close{background:transparent;border:0}.modal__header .modal__close:before{content:"\2715"}.modal__content{margin-top:2rem;margin-bottom:2rem;line-height:1.5;color:rgba(0,0,0,.8)}.modal__btn{font-size:.875rem;padding:.5rem 1rem;background-color:#e6e6e6;color:rgba(0,0,0,.8);border-radius:.25rem;border-style:none;border-width:0;cursor:pointer;-webkit-appearance:button;text-transform:none;overflow:visible;line-height:1.15;margin:0;will-change:transform;-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);transition:-webkit-transform .25s ease-out;-webkit-transition:-webkit-transform .25s ease-out;-o-transition:transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.modal__btn:focus,.modal__btn:hover{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}.modal__btn-primary{background-color:#00449e;color:#fff}.modal__title__block{display:-webkit-box;display:-ms-flexbox;display:flex}.modal__title__input{display:none}#pencil-icon{cursor:pointer;margin-left:1em}.modal__title__input.visible{display:block}.edit_mode__static.invisible{display:none}
     1.itt_globe_info .csf-field-image_select img{max-width:125px}.geocoding-hide{display:none}.itt_globe_admin_example{display:-webkit-box;display:-ms-flexbox;display:flex}.itt_globe_admin_example img{max-width:220px}.itt_globe_meta .csf-section-title{display:none!important}.itt_globe_preview_container{display:-webkit-box;display:-ms-flexbox;display:flex}.itt_globe_preview{width:80%;position:relative}@media(max-width:960px){.itt_globe_preview{width:60%}}.itt_globe_preview_info{min-height:200px;max-width:400px;padding:5px}#poststuff .itt_globe_preview_info .inside{margin:6px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:left;-ms-flex-pack:left;justify-content:left;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.itt_globe_preview_info .itt_globe_preview_action{margin-left:auto}#itt_globe_preview_data_clicked .postbox-header{padding-right:20px}.itt_globe_preview_action,.itt_globe_preview_data{display:inline-block}.itt_globe_preview_title{--wp-admin--admin-bar--height:32px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;-webkit-font-smoothing:subpixel-antialiased;display:block;color:#1d2327;font-weight:400;font-size:14px;padding:8px 12px;margin:0;line-height:1.4}.itt_globe_preview_info .ittglobe_altitude_s,.itt_globe_preview_info .ittglobe_lat_s,.itt_globe_preview_info .ittglobe_lng_s{color:#1f1f1f}.itt_globe_preview_info .ittglobe_lat,.itt_globe_preview_info .ittglobe_lng{min-width:50px;display:inline-block}.itt_globe_preview_info pre{font-size:.8em}.itt_globe_save_warning{display:none;text-align:center;padding:10px;background:#ab4545a8;position:absolute;width:100%;top:0;left:0;z-index:1;color:#fff;-webkit-box-sizing:border-box;box-sizing:border-box}.itt_globe_preview_needs_update .itt_globe_save_warning{display:block}.itt_globes_cpt_manager_table{width:100%;border-collapse:collapse;border:1px solid #ccd0d4;margin-bottom:15px}.itt_globes_cpt_manager_table thead{border-bottom:1px solid #ccc}.itt_globes_cpt_manager_table td,.itt_globes_cpt_manager_table th{padding:10px;text-align:left}.itt_globes_cpt_manager_table tr:nth-child(2n){background-color:#f9f9f9}.itt_globes_cpt_manager_table tr:nth-child(odd){background-color:#fff}.itt_globes_cpt_manager_table :not(thead) tr:hover{background-color:#f1f1f1}.itt_globes_cpt_manager_table .buttons{text-align:right}.itt_globes_cpt_manager_table .buttons a.button{margin-left:5px}.modal{font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif}.modal__overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.6);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:2}.modal__container{background-color:#fff;padding:30px;max-width:500px;max-height:100vh;border-radius:4px;overflow-y:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.modal__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.modal__title{margin-top:0;margin-bottom:0;font-weight:600;font-size:1.25rem;line-height:1.25;color:#00449e;-webkit-box-sizing:border-box;box-sizing:border-box}.modal__close{background:transparent;border:0}.modal__header .modal__close:before{content:"\2715"}.modal__content{margin-top:2rem;margin-bottom:2rem;line-height:1.5;color:rgba(0,0,0,.8)}.modal__btn{font-size:.875rem;padding:.5rem 1rem;background-color:#e6e6e6;color:rgba(0,0,0,.8);border-radius:.25rem;border-style:none;border-width:0;cursor:pointer;-webkit-appearance:button;text-transform:none;overflow:visible;line-height:1.15;margin:0;will-change:transform;-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);transition:-webkit-transform .25s ease-out;-webkit-transition:-webkit-transform .25s ease-out;-o-transition:transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.modal__btn:focus,.modal__btn:hover{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}.modal__btn-primary{background-color:#00449e;color:#fff}.modal__title__block{display:-webkit-box;display:-ms-flexbox;display:flex}.modal__title__input{display:none}#pencil-icon{cursor:pointer;margin-left:1em}.modal__title__input.visible{display:block}.edit_mode__static.invisible{display:none}.postbox .csf-field-image_select figure:before,.postbox .csf-field-spinner .ui-spinner .ui-spinner-button:before{font-family:Font Awesome\ 5 Pro,Font Awesome\ 5 Free,Font Awesome\ 6 Free,FontAwesome}
  • interactive-globes/trunk/dist/assets/css/features/meta/meta-admin.min.css

    r3057322 r3158721  
    1 #meta_box_shortcode-code{padding:10px;background-color:beige}
     1.meta_box_shortcode-code_container{padding:10px;background-color:beige}#ittglobe-copy-button{background:none;border:none;padding:0;outline:none;cursor:pointer}
  • interactive-globes/trunk/dist/assets/js/admin/admin.min.js

    r3115164 r3158721  
    1 function setupTooltip(e){let t="";return e.tooltipContent&&""!==e.tooltipContent&&(t='<div class="itt_globe_tooltip">'+e.tooltipContent+"</div>"),t}const globe_ut_prepareURL=function(e){if("string"!=typeof e)return e;var t;(e=e.replace(/&amp;/gi,"&")).replace(/&#(\d+);/g,(function(e,t){return String.fromCharCode(t)}));try{t=new URL(e)}catch(e){t=!1}return t&&![null,"http:","https:","mailto:","tel:"].includes(t.protocol)?(console.log("URL protocol not allowed"),""):e},globe_ut_prepareData=function(e,t){e.hasOwnProperty("dotLabels")&&e.dotLabels||(e.dotlabels=[]),e.hasOwnProperty("points")&&e.points||(e.points=[]),e.hasOwnProperty("arcLines")&&e.arcLines||(e.arcLines=[]);let o={showGraticules:!1,backgroundColor:"transparent",atmosphere:{enabled:!1,atmosphereColor:null,atmosphereAltitude:null},globeImage:"earth-day.jpg"};(0===Object.keys(e).length||e.emptyPreview)&&Object.assign(e,o);for(const o in t){let n=t[o];Array.isArray(e[o])&&e[o]&&e[o].map((function(t){(void 0===t.useCustom||void 0!==t.useCustom&&!globe_ut_bool(t.useCustom))&&Object.assign(t,e[n]),t.action&&"default"===t.action&&(t.action=e[n].action)}))}return e.pointOfView={lat:0,lng:0,altitude:1.5},e.centerCoordinates&&(e.pointOfView.lat=globe_ut_float(e.centerCoordinates.latitude),e.pointOfView.lng=globe_ut_float(e.centerCoordinates.longitude),e.pointOfView.altitude=globe_ut_float(e.altitude)),e},globe_ut_prepareViewport=function(e,t){var o=e.closest(".itt_globe_aspect_ratio");window.innerWidth<=780&&void 0!==t.paddingTop&&""!==t.paddingTop?o.style.paddingTop=String(t.paddingTopMobile)+"%":o.style.paddingTop=String(t.paddingTop)+"%"},globe_ut_float=function(e){var t=parseFloat(e);return isNaN(t)?0:t},globe_ut_bool=function(e){return 0!==Number(e)&&"false"!==e&&void 0!==e};function setupClickEvent(e,t,o){"none"!==e.action&&(ittGlobeData.isAdmin||("open_url"!==e.action&&"open_url_new"!==e.action||(e.content=globe_ut_prepareURL(e.content)),"open_url"===e.action&&""!==e.content?document.location=e.content:"open_url_new"===e.action&&""!==e.content&&window.open(e.content)))}function setupHoverEvent(e,t,o){return"point"===o&&e.pointColor(e=>e===t?e.hover:e.color),"dotlabel"!==o&&"label"!==o||e.labelColor(e=>e===t?e.hover:e.color),e}function addPointsLayer(e,t){e.pointsData(t.points).pointLat(e=>e.coordinates.latitude).pointLng(e=>e.coordinates.longitude).pointRadius(e=>e.radius/10).pointAltitude(e=>e.altitude/100).pointColor(e=>e.color).pointResolution(20),e.pointLabel((function(e){return setupTooltip(e)})),e.onPointClick((function(e,t,o){setupClickEvent(e)})),e.onPointHover((function(t){setupHoverEvent(e,t,"point")}))}function addLabelsLayer(e,t){if(e.labelsData(t.dotLabels).labelLat(e=>e.coordinates.latitude).labelLng(e=>e.coordinates.longitude).labelText(e=>e.title).labelAltitude(e=>e.altitude/100).labelSize(e=>e.size/10).labelColor(e=>e.color).labelResolution(20).labelIncludeDot(e=>globe_ut_bool(e.includeDot)).labelDotRadius(e=>e.radius/10).labelDotOrientation(e=>e.dotOrientation),t.labelFont&&"default"!==t.labelFont){let o=ittGlobeData.assetsUrl+"fonts/"+t.labelFont+".json";fetch(o).then(e=>e.json()).then(t=>{e.labelTypeFace(t)}).catch(e=>{console.error("Fetch error:",e)})}e.labelLabel((function(e){return setupTooltip(e)})),e.onLabelClick((function(e,t,o){setupClickEvent(e)})),e.onLabelHover((function(t){setupHoverEvent(e,t,"label")}))}function setupResizeEvent(e,t,o){var n=t.closest(".itt_globe_aspect_ratio");window.addEventListener("resize",(function(){window.innerWidth<=780&&void 0!==o.paddingTop&&""!==o.paddingTop?n.style.paddingTop=String(o.paddingTopMobile)+"%":n.style.paddingTop=String(o.paddingTop)+"%",e.width()!==t.offsetWidth&&e.width(t.offsetWidth).height(t.offsetHeight)}))}function setupInteractions(e,t){void 0!==t.interactions&&(e.controls().enableZoom=globe_ut_bool(t.interactions.zoom),e.controls().enablePan=globe_ut_bool(t.interactions.pan),e.controls().enableRotate=globe_ut_bool(t.interactions.pan))}let ittGlobes={globes:[],globesIndex:{},init:function(){if("undefined"==typeof Globe)return void console.error("Globe lib not loaded properly");let e=document.getElementsByClassName("js-itt-globe-render");for(const t of e){if(!t.dataset.hasOwnProperty("globe_id"))continue;let e=0;try{e=parseInt(JSON.parse(t.dataset.globe_id))}catch(e){continue}if(!t.dataset.hasOwnProperty("globe_meta"))continue;let o={};try{o=JSON.parse(t.dataset.globe_meta)}catch(e){o={}}create_globe(e,o)}}};var create_globe=function(e,t){let o=document.getElementById("itt_globe_"+e);globe_ut_prepareData(t,{points:"pointDefaults",dotLabels:"labelDefaults"}),globe_ut_prepareViewport(o,t);let n={rendererConfig:{antialias:!0,alpha:!0},waitForGlobeReady:!0,animateIn:void 0===t.animateIn||globe_ut_bool(t.animateIn)},i=Globe(n)(document.getElementById("itt_globe_"+e));"transparent"===t.backgroundColor&&(t.backgroundColor="rgba(0,0,0,0)"),i.globeImageUrl(ittGlobeData.imagesUrl+t.globeImage),i.backgroundColor(t.backgroundColor).width(o.offsetWidth).height(o.offsetHeight).showGraticules(globe_ut_bool(t.showGraticules)).showAtmosphere(globe_ut_bool(t.atmosphere.enabled)).atmosphereColor(t.atmosphere.atmosphereColor).atmosphereAltitude(t.atmosphere.atmosphereAltitude).pointOfView(t.pointOfView),setupInteractions(i,t),setupResizeEvent(i,o,t),ittGlobeData.isAdmin&&i.onGlobeReady((function(){const e=new Event("adminGlobeReady");document.dispatchEvent(e)})),t.points&&addPointsLayer(i,t),t.dotLabels&&addLabelsLayer(i,t),ittGlobes.globes.push(i),ittGlobes.globesIndex[e]=i};ittGlobes.init(),window.ittGlobes=ittGlobes;let ittGlobesAdmin={preview:{},globeMeta:{},cptTabIndex:{itt_globe_point:2,itt_globe_dotlabel:3,itt_globe_region:4},init:function(){ittGlobesAdmin.buildPreview(),ittGlobesAdmin.setupGlobeReady(),ittGlobesAdmin.setMeta()},setMeta:function(){let e=document.querySelector(".itt_globe_render");e&&(ittGlobesAdmin.meta=e.dataset.globe_meta)},round:function(e){return Math.round(100*e)/100},setupGlobeReady:function(){document.addEventListener("adminGlobeReady",(function(){let e=Object.values(ittGlobes.globes)[0];ittGlobesAdmin.preview.centerCoordinates={lat:0,lng:0,altitude:1.7},e.onGlobeClick((function(e,t){e.lat=ittGlobesAdmin.round(e.lat),e.lng=ittGlobesAdmin.round(e.lng),ittGlobesAdmin.preview.clickedCoordinates=e,delete ittGlobesAdmin.preview.clickedElement,ittGlobesAdmin.updateClickedPreviewInfo()})),e.onZoom((function(e){ittGlobesAdmin.preview.centerCoordinates=e,ittGlobesAdmin.updateCenterPreviewInfo()})),e.onPointClick((function(e,t,o){ittGlobesAdmin.preview.clickedElement=Object.assign({},e),ittGlobesAdmin.preview.clickedElement.type="Point",ittGlobesAdmin.preview.clickedElement.post_type="itt_globe_point",delete ittGlobesAdmin.preview.clickedElement.__threeObj,delete ittGlobesAdmin.preview.clickedCoordinates,ittGlobesAdmin.updateClickedPreviewInfo()})),e.onLabelClick((function(e,t,o){ittGlobesAdmin.preview.clickedElement=Object.assign({},e),ittGlobesAdmin.preview.clickedElement.type="Dot Label",ittGlobesAdmin.preview.clickedElement.post_type="itt_globe_dotlabel",delete ittGlobesAdmin.preview.clickedElement.__threeObj,delete ittGlobesAdmin.preview.clickedCoordinates,ittGlobesAdmin.updateClickedPreviewInfo()}))}))},setCenter:function(e){if(e.target){document.getElementsByName("globe_info[altitude]")[0].value=e.target.dataset.altitude,document.getElementsByName("globe_info[centerCoordinates][latitude]")[0].value=e.target.dataset.lat,document.getElementsByName("globe_info[centerCoordinates][longitude]")[0].value=e.target.dataset.lng,ittGlobesAdmin.onChange(),e.target.innerHTML=itt_admin_labels.newCenterSaved,e.target.setAttribute("disabled","disabled"),setTimeout((function(){e.target.innerHTML=itt_admin_labels.setInitialCenter,e.target.removeAttribute("disabled")}),2e3)}},updateClickedPreviewInfo:function(){let e=ittGlobesAdmin.preview;if(void 0!==e.clickedCoordinates){ittGlobesAdmin.infoContainer.querySelector("#itt_globe_preview_data_clicked .itt_globe_preview_title").innerHTML="Clicked Location";let t=ittGlobesAdmin.infoContainer.querySelector("#itt_globe_preview_data_clicked .inside .itt_globe_preview_data"),o='<span class="ittglobe_lat_s">Lat: </span><span class="ittglobe_lat">'+e.clickedCoordinates.lat+'</span><span class="ittglobe_lng_s">Long: </span><span class="ittglobe_lng">'+e.clickedCoordinates.lng+"</span>";t.innerHTML=o,ittGlobesAdmin.infoContainer.querySelector("#itt_globe_preview_data_clicked .inside .itt_globe_preview_action_edit").style.display="none";let n=ittGlobesAdmin.infoContainer.querySelector("#itt_globe_preview_data_clicked .inside .itt_globe_preview_action_add_new");n.dataset.latitude=e.clickedCoordinates.lat,n.dataset.longitude=e.clickedCoordinates.lng,n.style.display="inline-block"}if(void 0!==e.clickedElement){ittGlobesAdmin.infoContainer.querySelector("#itt_globe_preview_data_clicked .itt_globe_preview_title").innerHTML="Clicked "+e.clickedElement.type+" : "+e.clickedElement.title;let t=ittGlobesAdmin.infoContainer.querySelector("#itt_globe_preview_data_clicked .inside .itt_globe_preview_data"),o='<span class="ittglobe_lat_s">Lat: </span><span class="ittglobe_lat">'+ittGlobesAdmin.round(e.clickedElement.coordinates.latitude)+'</span><span class="ittglobe_lng_s">Long: </span><span class="ittglobe_lng">'+ittGlobesAdmin.round(e.clickedElement.coordinates.longitude)+"</span>";t.innerHTML=o;let n=ittGlobesAdmin.infoContainer.querySelector("#itt_globe_preview_data_clicked .inside .itt_globe_preview_action_edit");n.dataset.id=e.clickedElement.id,n.dataset.post_type=e.clickedElement.post_type,n.style.display="inline-block",ittGlobesAdmin.infoContainer.querySelector("#itt_globe_preview_data_clicked .inside .itt_globe_preview_action_add_new").style.display="none"}},updateCenterPreviewInfo:function(){let e=ittGlobesAdmin.preview;e.centerCoordinates.lat=ittGlobesAdmin.round(ittGlobesAdmin.preview.centerCoordinates.lat),e.centerCoordinates.lng=ittGlobesAdmin.round(ittGlobesAdmin.preview.centerCoordinates.lng),e.centerCoordinates.altitude=ittGlobesAdmin.round(ittGlobesAdmin.preview.centerCoordinates.altitude);let t=ittGlobesAdmin.infoContainer.querySelector("#itt_globe_preview_data_center .inside .itt_globe_preview_data"),o='<span class="ittglobe_lat_s">Lat: </span><span class="ittglobe_lat">'+e.centerCoordinates.lat+'</span><span class="ittglobe_lng_s">Long: </span><span class="ittglobe_lng">'+e.centerCoordinates.lng+'</span><span class="ittglobe_altitude_s">Scale: </span><span class="ittglobe_altitude">'+e.centerCoordinates.altitude+"</span>";ittGlobesAdmin.setCenterButton.dataset.lat=e.centerCoordinates.lat,ittGlobesAdmin.setCenterButton.dataset.lng=e.centerCoordinates.lng,ittGlobesAdmin.setCenterButton.dataset.altitude=e.centerCoordinates.altitude,t.innerHTML=o},buildPreview:function(){let e=".itt_globe_info input, .itt_globe_info select, .itt_globe_info textarea",t=document.querySelectorAll(e);t.forEach((function(e){e.onchange=ittGlobesAdmin.onChange})),document.querySelectorAll(".csf-cloneable-add").forEach((function(o){o.addEventListener("click",(function(o){t.forEach((function(e){e.onchange=null})),setTimeout((function(){t=document.querySelectorAll(e),t.forEach((function(e){e.onchange=ittGlobesAdmin.onChange}))}),500)}))})),ittGlobesAdmin.preview.centerCoordinates={lat:void 0===ittGlobesAdmin.globeMeta.centerCoordinates?0:ittGlobesAdmin.globeMeta.centerCoordinates.latitude,lng:void 0===ittGlobesAdmin.globeMeta.centerCoordinates?0:ittGlobesAdmin.globeMeta.centerCoordinates.longitude,altitude:void 0===ittGlobesAdmin.globeMeta.altitude?1.7:ittGlobesAdmin.globeMeta.altitude};let o=document.getElementsByClassName("itt_globe_preview_info");o.length<1?ittGlobesAdmin.infoContainer=null:(ittGlobesAdmin.infoContainer=o[0],ittGlobesAdmin.setCenterButton=document.querySelector(".itt_globe_preview_info #itt_globe_preview_data_center .itt_globe_preview_action button"),ittGlobesAdmin.setCenterButton.addEventListener("click",ittGlobesAdmin.setCenter),ittGlobesAdmin.updateCenterPreviewInfo())},onChange:function(){let e=document.querySelector(".itt_globe_preview");e instanceof HTMLElement&&e.classList.add("itt_globe_preview_needs_update")},addNew:function(e){if(e){let t=document.getElementById("post_ID").value;console.log("Add new "+JSON.stringify(e.dataset)+" marker:"+e.value+" parentGlobe: "+t);let o=ittGlobesAdmin.cptTabIndex[e.value],n=document.querySelectorAll(".csf-nav-metabox ul li a");if(n&&n[o].click(),"undefined"!=typeof addNew){let o=[];for(const t in e.dataset)e.dataset.hasOwnProperty(t)&&o.push([t,e.dataset[t]]);o.push(["post_type",e.value]),o.push(["parent_id",t]),addNew(e.value,t,o),e.value=""}else console.log("something went wrong")}},edit:function(e){if(e&&(console.log("edit "+JSON.stringify(e.dataset)),"undefined"!=typeof editEntry)){let t=[];for(const o in e.dataset)e.dataset.hasOwnProperty(o)&&t.push([o,e.dataset[o]]);let o=ittGlobesAdmin.cptTabIndex[e.dataset.post_type],n=document.querySelectorAll(".csf-nav-metabox ul li a");n&&n[o].click();let i=document.getElementById("post_ID").value;editEntry(e.dataset.post_type,e.dataset.id,i,t)}}};ittGlobesAdmin.init(),window.ittGlobesAdmin=ittGlobesAdmin;export{ittGlobesAdmin};
     1const globe_ut_prepareURL=function(e){if("string"!=typeof e)return e;var t;(e=e.replace(/&amp;/gi,"&")).replace(/&#(\d+);/g,(function(e,t){return String.fromCharCode(t)}));try{t=new URL(e)}catch(e){t=!1}return t&&![null,"http:","https:","mailto:","tel:"].includes(t.protocol)?(console.log("URL protocol not allowed"),""):e};function setupClickEvent(e,t,i){if("none"===i.action)return;const n=i.action;n&&"function"==typeof window.ittGlobes.clickActions[n]&&window.ittGlobes.clickActions[n](e,t,i),ittGlobeData.isAdmin||("open_url"!==i.action&&"open_url_new"!==i.action||(i.content=globe_ut_prepareURL(i.content)),"open_url"===i.action&&""!==i.content?document.location=i.content:"open_url_new"===i.action&&""!==i.content&&window.open(i.content))}function addShortcodeCopyEvent(){document.getElementById("ittglobe-copy-button").addEventListener("click",(function(){const e=document.getElementById("meta_box_shortcode-code").innerText;navigator.clipboard?navigator.clipboard.writeText(e):document.execCommand("copy"),this.classList.remove("dashicons-admin-page"),this.classList.add("dashicons-yes"),setTimeout(()=>{this.classList.remove("dashicons-yes"),this.classList.add("dashicons-admin-page")},2e3)}))}let ittGlobesAdmin={preview:{},globeMeta:{},cptTabIndex:{itt_globe_point:2,itt_globe_dotlabel:3,itt_globe_region:4,itt_globe_line:5},init:function(){ittGlobesAdmin.buildPreview(),ittGlobesAdmin.setupGlobeReady(),ittGlobesAdmin.setMeta()},setMeta:function(){let e=document.querySelector(".itt_globe_render");e&&(ittGlobesAdmin.meta=e.dataset.globe_meta)},round:function(e){return Math.round(100*e)/100},setupGlobeReady:function(){document.addEventListener("adminGlobeReady",(function(){let e=Object.values(ittGlobes.globesIndex)[0];const t=JSON.parse(ittGlobesAdmin.meta);ittGlobesAdmin.preview.centerCoordinates={lat:0,lng:0,altitude:1.7},e.ringColor(()=>e=>`rgba(255,100,50,${1-e})`).ringMaxRadius(3.5).ringAltitude(.006).ringPropagationSpeed(5).ringRepeatPeriod(400/3),e.onGlobeClick((function(t,i){t.latitude=ittGlobesAdmin.round(t.lat),t.longitude=ittGlobesAdmin.round(t.lng);const n={lat:t.lat,lng:t.lng};e.ringsData([...e.ringsData(),n]),setTimeout(()=>e.ringsData(e.ringsData().filter(e=>e!==n)),400),ittGlobesAdmin.preview.clickedCoordinates=t,delete ittGlobesAdmin.preview.clickedElement,delete ittGlobesAdmin.preview.clickedDataset,ittGlobesAdmin.updateClickedPreviewInfo()})),e.onZoom((function(e){ittGlobesAdmin.preview.centerCoordinates=e,ittGlobesAdmin.updateCenterPreviewInfo()})),e.onPointClick((function(i,n,o){ittGlobesAdmin.preview.clickedElement=Object.assign({},i),ittGlobesAdmin.preview.clickedElement.type="Point",ittGlobesAdmin.preview.clickedElement.post_type="itt_globe_point",delete ittGlobesAdmin.preview.clickedElement.__threeObj,delete ittGlobesAdmin.preview.clickedCoordinates,delete ittGlobesAdmin.preview.clickedDataset,ittGlobesAdmin.updateClickedPreviewInfo(),setupClickEvent(e,t,i)})),e.onLabelClick((function(i,n,o){ittGlobesAdmin.preview.clickedElement=Object.assign({},i),ittGlobesAdmin.preview.clickedElement.type="Dot Label",ittGlobesAdmin.preview.clickedElement.post_type="itt_globe_dotlabel",delete ittGlobesAdmin.preview.clickedElement.__threeObj,delete ittGlobesAdmin.preview.clickedCoordinates,delete ittGlobesAdmin.preview.clickedDataset,ittGlobesAdmin.updateClickedPreviewInfo(),setupClickEvent(e,t,i)}))}))},setCenter:function(e){if(e.target){document.getElementsByName("globe_info[altitude]")[0].value=e.target.dataset.altitude,document.getElementsByName("globe_info[centerCoordinates][latitude]")[0].value=e.target.dataset.lat,document.getElementsByName("globe_info[centerCoordinates][longitude]")[0].value=e.target.dataset.lng,ittGlobesAdmin.onChange(),e.target.innerHTML=itt_admin_labels.newCenterSaved,e.target.setAttribute("disabled","disabled"),setTimeout((function(){e.target.innerHTML=itt_admin_labels.setInitialCenter,e.target.removeAttribute("disabled")}),2e3)}},updateClickedPreviewInfo:function(){let e=ittGlobesAdmin.preview;if(void 0!==e.clickedCoordinates){ittGlobesAdmin.infoContainer.querySelector("#itt_globe_preview_data_clicked .itt_globe_preview_title").innerHTML="Clicked Location";let t=ittGlobesAdmin.infoContainer.querySelector("#itt_globe_preview_data_clicked .inside .itt_globe_preview_data"),i='<span class="ittglobe_lat_s">Lat: </span><span class="ittglobe_lat">'+e.clickedCoordinates.latitude+'</span><span class="ittglobe_lng_s">Long: </span><span class="ittglobe_lng">'+e.clickedCoordinates.longitude+"</span>";t.innerHTML=i,ittGlobesAdmin.infoContainer.querySelector("#itt_globe_preview_data_clicked .itt_globe_preview_action_edit").style.display="none";let n=ittGlobesAdmin.infoContainer.querySelector("#itt_globe_preview_data_clicked .inside .itt_globe_preview_action_add_new"),o=n.dataset.latitude,l=n.dataset.longitude;Object.keys(n.dataset).forEach(e=>{delete n.dataset[e]}),n.dataset.prevlatitude=o,n.dataset.prevlongitude=l,n.dataset.latitude=e.clickedCoordinates.latitude,n.dataset.longitude=e.clickedCoordinates.longitude,void 0!==ittGlobesAdmin.preview.clickedDataset&&(Object.keys(ittGlobesAdmin.preview.clickedDataset).forEach(e=>{n.dataset[e]=ittGlobesAdmin.preview.clickedDataset[e]}),delete ittGlobesAdmin.preview.clickedDataset),n.style.display="inline-block"}if(void 0!==e.clickedElement){ittGlobesAdmin.infoContainer.querySelector("#itt_globe_preview_data_clicked .itt_globe_preview_title").innerHTML="Clicked "+e.clickedElement.type+" : "+e.clickedElement.title;let t=ittGlobesAdmin.infoContainer.querySelector("#itt_globe_preview_data_clicked .inside .itt_globe_preview_data"),i='<span class="ittglobe_lat_s">Lat: </span><span class="ittglobe_lat">'+ittGlobesAdmin.round(e.clickedElement.coordinates.latitude)+'</span><span class="ittglobe_lng_s">Long: </span><span class="ittglobe_lng">'+ittGlobesAdmin.round(e.clickedElement.coordinates.longitude)+"</span>";if(t.innerHTML=i,"itt_globe_point"===e.clickedElement.post_type||"itt_globe_dotlabel"===e.clickedElement.post_type||void 0!==e.clickedElement.post_id){let t=ittGlobesAdmin.infoContainer.querySelector("#itt_globe_preview_data_clicked .itt_globe_preview_action_edit");t.dataset.id=e.clickedElement.post_id?e.clickedElement.post_id:e.clickedElement.id,t.dataset.post_type=e.clickedElement.post_type,t.style.display="inline-block";let i=ittGlobesAdmin.infoContainer.querySelector("#itt_globe_preview_data_clicked .inside .itt_globe_preview_action_add_new");i.style.display="inline-block",i.dataset.prevlatitude=i.dataset.latitude,i.dataset.prevlongitude=i.dataset.longitude,i.dataset.latitude=ittGlobesAdmin.round(e.clickedElement.coordinates.latitude),i.dataset.longitude=ittGlobesAdmin.round(e.clickedElement.coordinates.longitude)}}},updateCenterPreviewInfo:function(){let e=ittGlobesAdmin.preview;e.centerCoordinates.latitude=ittGlobesAdmin.round(ittGlobesAdmin.preview.centerCoordinates.lat),e.centerCoordinates.longitude=ittGlobesAdmin.round(ittGlobesAdmin.preview.centerCoordinates.lng),e.centerCoordinates.altitude=ittGlobesAdmin.round(ittGlobesAdmin.preview.centerCoordinates.altitude);let t=ittGlobesAdmin.infoContainer.querySelector("#itt_globe_preview_data_center .inside .itt_globe_preview_data"),i='<span class="ittglobe_lat_s">Lat: </span><span class="ittglobe_lat">'+e.centerCoordinates.latitude+'</span><span class="ittglobe_lng_s">Long: </span><span class="ittglobe_lng">'+e.centerCoordinates.longitude+'</span><span class="ittglobe_altitude_s">Scale: </span><span class="ittglobe_altitude">'+e.centerCoordinates.altitude+"</span>";ittGlobesAdmin.setCenterButton.dataset.lat=e.centerCoordinates.lat,ittGlobesAdmin.setCenterButton.dataset.lng=e.centerCoordinates.lng,ittGlobesAdmin.setCenterButton.dataset.altitude=e.centerCoordinates.altitude,t.innerHTML=i},buildPreview:function(){let e=".itt_globe_info input, .itt_globe_info select, .itt_globe_info textarea",t=document.querySelectorAll(e);t.forEach((function(e){e.onchange=ittGlobesAdmin.onChange})),document.querySelectorAll(".csf-cloneable-add").forEach((function(i){i.addEventListener("click",(function(i){t.forEach((function(e){e.onchange=null})),setTimeout((function(){t=document.querySelectorAll(e),t.forEach((function(e){e.onchange=ittGlobesAdmin.onChange}))}),500)}))})),ittGlobesAdmin.preview.centerCoordinates={lat:void 0===ittGlobesAdmin.globeMeta.centerCoordinates?0:ittGlobesAdmin.globeMeta.centerCoordinates.latitude,lng:void 0===ittGlobesAdmin.globeMeta.centerCoordinates?0:ittGlobesAdmin.globeMeta.centerCoordinates.longitude,altitude:void 0===ittGlobesAdmin.globeMeta.altitude?1.7:ittGlobesAdmin.globeMeta.altitude};let i=document.getElementsByClassName("itt_globe_preview_info");i.length<1?ittGlobesAdmin.infoContainer=null:(ittGlobesAdmin.infoContainer=i[0],ittGlobesAdmin.setCenterButton=document.querySelector(".itt_globe_preview_info #itt_globe_preview_data_center .itt_globe_preview_action button"),ittGlobesAdmin.setCenterButton.addEventListener("click",ittGlobesAdmin.setCenter),ittGlobesAdmin.updateCenterPreviewInfo())},onChange:function(){let e=document.querySelector(".itt_globe_preview");e instanceof HTMLElement&&e.classList.add("itt_globe_preview_needs_update")},addNew:function(e){if(e){let t=document.getElementById("post_ID").value;console.log("Add new "+JSON.stringify(e.dataset)+" dataType:"+e.value+" parentGlobe: "+t);let i=ittGlobesAdmin.cptTabIndex[e.value],n=document.querySelectorAll(".csf-nav-metabox ul li a");if(n&&n[i].click(),"undefined"!=typeof addNew){let i=[];for(const t in e.dataset)e.dataset.hasOwnProperty(t)&&i.push([t,e.dataset[t]]);i.push(["post_type",e.value]),i.push(["parent_id",t]),addNew(e.value,t,i),e.value=""}else console.log("something went wrong")}},edit:function(e){if(e&&(console.log("edit "+JSON.stringify(e.dataset)),"undefined"!=typeof editEntry)){let t=[];for(const i in e.dataset)e.dataset.hasOwnProperty(i)&&t.push([i,e.dataset[i]]);let i=ittGlobesAdmin.cptTabIndex[e.dataset.post_type],n=document.querySelectorAll(".csf-nav-metabox ul li a");n&&n[i].click();let o=document.getElementById("post_ID").value;editEntry(e.dataset.post_type,e.dataset.id,o,t)}}};ittGlobesAdmin.init(),window.ittGlobesAdmin=ittGlobesAdmin,addShortcodeCopyEvent();export{ittGlobesAdmin};
  • interactive-globes/trunk/dist/assets/js/admin/cpt-list-events.min.js

    r3115164 r3158721  
    1 function refresh_cpt_list(t,e){get_cpt_list(t,e).then(e=>{var o=document.getElementById("fill_"+t);return!!o&&(o.innerHTML=e,init_cpt_events(t),ittGlobesAdmin.onChange(),!0)})}async function get_cpt_list(t,e){try{const o=itt_globe_rest.namespace+e+"/"+t+itt_globe_rest.list_part,n=await fetch(o,{method:"GET",headers:{"Content-Type":"application/json","X-WP-Nonce":itt_globe_rest.nonce}});if(!n.ok)throw new Error("Network response was not OK");return await n.json()}catch(t){console.error("There has been a problem with your fetch operation:",t)}}function init_cpt_events(t){let e="#block_"+t,o=document.querySelector(e);o&&(o.querySelectorAll(".js-remove-cpt").forEach((function(t){t.addEventListener("click",do_remove_event)})),o.querySelectorAll(".js-modal-edit-cpt").forEach((function(t){t.addEventListener("click",(function(t){let e=[];for(const t in this.dataset)this.dataset.hasOwnProperty(t)&&e.push([t,this.dataset[t]]);const o=this.getAttribute("data-cpt_post_id"),n=this.getAttribute("data-parent_id");editEntry(this.getAttribute("data-post_type"),o,n,e)}))})),o.querySelectorAll(".js-modal-add-new-cpt").forEach((function(t){t.addEventListener("click",(function(t){t.preventDefault();const e=this.getAttribute("data-parent_id"),o=this.getAttribute("data-post_type");let n=[];for(const t in this.dataset)this.dataset.hasOwnProperty(t)&&n.push([t,this.dataset[t]]);addNew(o,e,n)}))})),o.querySelectorAll(".js-modal-close").forEach((function(t){t.addEventListener("click",(function(t){t.preventDefault();closeModal(this.getAttribute("data-post_type"))}))})))}function do_remove_event(t){if(!confirm("Are you sure?"))return;t.preventDefault();const e=this.getAttribute("data-cpt_post_id"),o=this.getAttribute("data-parent_id"),n=this.getAttribute("data-post_type"),r=new XMLHttpRequest;r.open("DELETE",`/wp-json/wp/v2/${n}/${e}`,!0),r.setRequestHeader("Content-Type","application/json"),r.setRequestHeader("X-WP-Nonce",wpApiSettings.nonce),r.onload=function(){r.status>=200&&r.status<300?(JSON.parse(r.responseText),refresh_cpt_list(n,o)):console.error("Error trashing post:",r.statusText)},r.onerror=function(){console.error("Network error occurred")},r.send()}function editEntry(t,e,o,n){query_params=[["action","edit"],["iframe",""],["post",e],["parent_id",o]].concat(n);const r=build_modal_url(itt_globe_data.admin_url,"post.php",query_params),a=document.querySelector("#"+t+"_modal iframe");a.setAttribute("src",r),a.addEventListener("load",(function(){document.querySelector("#"+t+"_modal .overlay-content-loading").style.display="none",a.style.display="block"})),document.getElementById(t+"_modal").style.display="block"}function addNew(t,e,o){let n=[["iframe",""]].concat(o);const r=build_modal_url(itt_globe_data.admin_url,"post-new.php",n),a=document.querySelector("#"+t+"_modal iframe");a.setAttribute("src",r),a.addEventListener("load",(function(){document.querySelector("#"+t+"_modal .overlay-content-loading").style.display="none",a.style.display="block"})),document.getElementById(t+"_modal").style.display="block"}function closeModal(t){document.getElementById(t+"_modal").style.display="none",document.querySelector("#"+t+"_modal .overlay-content-loading").style.display="block",document.querySelector("#"+t+"_modal iframe").setAttribute("src","")}function build_modal_url(t,e,o){const n=new URLSearchParams;return o.forEach(t=>{if(!Array.isArray(t)||2!==t.length)throw new Error("Each param should be an array with two elements: [key, value]");n.append(t[0],t[1])}),t+e+"?"+n.toString()}window.addEventListener("message",(function(t){if(!t.data.hasOwnProperty("message")||!t.data.hasOwnProperty("params"))return;if("refresh-cpt-list"!==t.data.message)return;const e=t.data.params;(e.hasOwnProperty("post_type")||e.hasOwnProperty("parent_id"))&&refresh_cpt_list(e.post_type,e.parent_id)}));
     1function refresh_cpt_list(t,e){get_cpt_list(t,e).then(e=>{var o=document.getElementById("fill_"+t);return!!o&&(o.innerHTML=e,init_cpt_events(t),ittGlobesAdmin.onChange(),!0)})}async function get_cpt_list(t,e){try{const o=itt_globe_rest.namespace+e+"/"+t+itt_globe_rest.list_part,n=await fetch(o,{method:"GET",headers:{"Content-Type":"application/json","X-WP-Nonce":itt_globe_rest.nonce}});if(!n.ok)throw new Error("Network response was not OK");return await n.json()}catch(t){console.error("There has been a problem with your fetch operation:",t)}}function init_cpt_events(t){let e="#block_"+t,o=document.querySelector(e);o&&(o.querySelectorAll(".js-remove-cpt").forEach((function(t){t.addEventListener("click",do_remove_event)})),o.querySelectorAll(".js-modal-edit-cpt").forEach((function(t){t.addEventListener("click",(function(t){let e=[];for(const t in this.dataset)this.dataset.hasOwnProperty(t)&&e.push([t,this.dataset[t]]);const o=this.getAttribute("data-cpt_post_id"),n=this.getAttribute("data-parent_id");editEntry(this.getAttribute("data-post_type"),o,n,e)}))})),o.querySelectorAll(".js-modal-add-new-cpt").forEach((function(t){t.addEventListener("click",(function(t){t.preventDefault();const e=this.getAttribute("data-parent_id"),o=this.getAttribute("data-post_type");let n=[];for(const t in this.dataset)this.dataset.hasOwnProperty(t)&&n.push([t,this.dataset[t]]);addNew(o,e,n)}))})),o.querySelectorAll(".js-modal-close").forEach((function(t){t.addEventListener("click",(function(t){t.preventDefault();closeModal(this.getAttribute("data-post_type"))}))})))}function do_remove_event(t){if(!confirm("Are you sure?"))return;t.preventDefault();const e=this.getAttribute("data-cpt_post_id"),o=this.getAttribute("data-parent_id"),n=this.getAttribute("data-post_type"),r=new XMLHttpRequest;r.open("POST",`/wp-json/wp/v2/${n}/${e}?_method=DELETE`,!0),r.setRequestHeader("Content-Type","application/json"),r.setRequestHeader("X-WP-Nonce",wpApiSettings.nonce),r.onload=function(){r.status>=200&&r.status<300?(JSON.parse(r.responseText),refresh_cpt_list(n,o)):console.error("Error trashing post:",r.statusText)},r.onerror=function(){console.error("Network error occurred")},r.send()}function editEntry(t,e,o,n){query_params=[["action","edit"],["iframe",""],["post",e],["parent_id",o]].concat(n);const r=build_modal_url(itt_globe_data.admin_url,"post.php",query_params),a=document.querySelector("#"+t+"_modal iframe");a.setAttribute("src",r),a.addEventListener("load",(function(){document.querySelector("#"+t+"_modal .overlay-content-loading").style.display="none",a.style.display="block"})),document.getElementById(t+"_modal").style.display="block"}function addNew(t,e,o){let n=[["iframe",""]].concat(o);const r=build_modal_url(itt_globe_data.admin_url,"post-new.php",n),a=document.querySelector("#"+t+"_modal iframe");a.setAttribute("src",r),a.addEventListener("load",(function(){document.querySelector("#"+t+"_modal .overlay-content-loading").style.display="none",a.style.display="block"})),document.getElementById(t+"_modal").style.display="block"}function closeModal(t){document.getElementById(t+"_modal").style.display="none",document.querySelector("#"+t+"_modal .overlay-content-loading").style.display="block",document.querySelector("#"+t+"_modal iframe").setAttribute("src","")}function build_modal_url(t,e,o){const n=new URLSearchParams;return o.forEach(t=>{if(!Array.isArray(t)||2!==t.length)throw new Error("Each param should be an array with two elements: [key, value]");n.append(t[0],t[1])}),t+e+"?"+n.toString()}window.addEventListener("message",(function(t){if(!t.data.hasOwnProperty("message")||!t.data.hasOwnProperty("params"))return;if("refresh-cpt-list"!==t.data.message)return;const e=t.data.params;(e.hasOwnProperty("post_type")||e.hasOwnProperty("parent_id"))&&refresh_cpt_list(e.post_type,e.parent_id)}));
  • interactive-globes/trunk/dist/assets/js/public/globe.min.js

    r3115164 r3158721  
    1 function setupTooltip(t){let e="";return t.tooltipContent&&""!==t.tooltipContent&&(e='<div class="itt_globe_tooltip">'+t.tooltipContent+"</div>"),e}const globe_ut_prepareURL=function(t){if("string"!=typeof t)return t;var e;(t=t.replace(/&amp;/gi,"&")).replace(/&#(\d+);/g,(function(t,e){return String.fromCharCode(e)}));try{e=new URL(t)}catch(t){e=!1}return e&&![null,"http:","https:","mailto:","tel:"].includes(e.protocol)?(console.log("URL protocol not allowed"),""):t},globe_ut_prepareData=function(t,e){t.hasOwnProperty("dotLabels")&&t.dotLabels||(t.dotlabels=[]),t.hasOwnProperty("points")&&t.points||(t.points=[]),t.hasOwnProperty("arcLines")&&t.arcLines||(t.arcLines=[]);let o={showGraticules:!1,backgroundColor:"transparent",atmosphere:{enabled:!1,atmosphereColor:null,atmosphereAltitude:null},globeImage:"earth-day.jpg"};(0===Object.keys(t).length||t.emptyPreview)&&Object.assign(t,o);for(const o in e){let n=e[o];Array.isArray(t[o])&&t[o]&&t[o].map((function(e){(void 0===e.useCustom||void 0!==e.useCustom&&!globe_ut_bool(e.useCustom))&&Object.assign(e,t[n]),e.action&&"default"===e.action&&(e.action=t[n].action)}))}return t.pointOfView={lat:0,lng:0,altitude:1.5},t.centerCoordinates&&(t.pointOfView.lat=globe_ut_float(t.centerCoordinates.latitude),t.pointOfView.lng=globe_ut_float(t.centerCoordinates.longitude),t.pointOfView.altitude=globe_ut_float(t.altitude)),t},globe_ut_prepareViewport=function(t,e){var o=t.closest(".itt_globe_aspect_ratio");window.innerWidth<=780&&void 0!==e.paddingTop&&""!==e.paddingTop?o.style.paddingTop=String(e.paddingTopMobile)+"%":o.style.paddingTop=String(e.paddingTop)+"%"},globe_ut_float=function(t){var e=parseFloat(t);return isNaN(e)?0:e},globe_ut_bool=function(t){return 0!==Number(t)&&"false"!==t&&void 0!==t};function setupClickEvent(t,e,o){"none"!==t.action&&(ittGlobeData.isAdmin||("open_url"!==t.action&&"open_url_new"!==t.action||(t.content=globe_ut_prepareURL(t.content)),"open_url"===t.action&&""!==t.content?document.location=t.content:"open_url_new"===t.action&&""!==t.content&&window.open(t.content)))}function setupHoverEvent(t,e,o){return"point"===o&&t.pointColor(t=>t===e?t.hover:t.color),"dotlabel"!==o&&"label"!==o||t.labelColor(t=>t===e?t.hover:t.color),t}function addPointsLayer(t,e){t.pointsData(e.points).pointLat(t=>t.coordinates.latitude).pointLng(t=>t.coordinates.longitude).pointRadius(t=>t.radius/10).pointAltitude(t=>t.altitude/100).pointColor(t=>t.color).pointResolution(20),t.pointLabel((function(t){return setupTooltip(t)})),t.onPointClick((function(t,e,o){setupClickEvent(t)})),t.onPointHover((function(e){setupHoverEvent(t,e,"point")}))}function addLabelsLayer(t,e){if(t.labelsData(e.dotLabels).labelLat(t=>t.coordinates.latitude).labelLng(t=>t.coordinates.longitude).labelText(t=>t.title).labelAltitude(t=>t.altitude/100).labelSize(t=>t.size/10).labelColor(t=>t.color).labelResolution(20).labelIncludeDot(t=>globe_ut_bool(t.includeDot)).labelDotRadius(t=>t.radius/10).labelDotOrientation(t=>t.dotOrientation),e.labelFont&&"default"!==e.labelFont){let o=ittGlobeData.assetsUrl+"fonts/"+e.labelFont+".json";fetch(o).then(t=>t.json()).then(e=>{t.labelTypeFace(e)}).catch(t=>{console.error("Fetch error:",t)})}t.labelLabel((function(t){return setupTooltip(t)})),t.onLabelClick((function(t,e,o){setupClickEvent(t)})),t.onLabelHover((function(e){setupHoverEvent(t,e,"label")}))}function setupResizeEvent(t,e,o){var n=e.closest(".itt_globe_aspect_ratio");window.addEventListener("resize",(function(){window.innerWidth<=780&&void 0!==o.paddingTop&&""!==o.paddingTop?n.style.paddingTop=String(o.paddingTopMobile)+"%":n.style.paddingTop=String(o.paddingTop)+"%",t.width()!==e.offsetWidth&&t.width(e.offsetWidth).height(e.offsetHeight)}))}function setupInteractions(t,e){void 0!==e.interactions&&(t.controls().enableZoom=globe_ut_bool(e.interactions.zoom),t.controls().enablePan=globe_ut_bool(e.interactions.pan),t.controls().enableRotate=globe_ut_bool(e.interactions.pan))}let ittGlobes={globes:[],globesIndex:{},init:function(){if("undefined"==typeof Globe)return void console.error("Globe lib not loaded properly");let t=document.getElementsByClassName("js-itt-globe-render");for(const e of t){if(!e.dataset.hasOwnProperty("globe_id"))continue;let t=0;try{t=parseInt(JSON.parse(e.dataset.globe_id))}catch(t){continue}if(!e.dataset.hasOwnProperty("globe_meta"))continue;let o={};try{o=JSON.parse(e.dataset.globe_meta)}catch(t){o={}}create_globe(t,o)}}};var create_globe=function(t,e){let o=document.getElementById("itt_globe_"+t);globe_ut_prepareData(e,{points:"pointDefaults",dotLabels:"labelDefaults"}),globe_ut_prepareViewport(o,e);let n={rendererConfig:{antialias:!0,alpha:!0},waitForGlobeReady:!0,animateIn:void 0===e.animateIn||globe_ut_bool(e.animateIn)},l=Globe(n)(document.getElementById("itt_globe_"+t));"transparent"===e.backgroundColor&&(e.backgroundColor="rgba(0,0,0,0)"),l.globeImageUrl(ittGlobeData.imagesUrl+e.globeImage),l.backgroundColor(e.backgroundColor).width(o.offsetWidth).height(o.offsetHeight).showGraticules(globe_ut_bool(e.showGraticules)).showAtmosphere(globe_ut_bool(e.atmosphere.enabled)).atmosphereColor(e.atmosphere.atmosphereColor).atmosphereAltitude(e.atmosphere.atmosphereAltitude).pointOfView(e.pointOfView),setupInteractions(l,e),setupResizeEvent(l,o,e),ittGlobeData.isAdmin&&l.onGlobeReady((function(){const t=new Event("adminGlobeReady");document.dispatchEvent(t)})),e.points&&addPointsLayer(l,e),e.dotLabels&&addLabelsLayer(l,e),ittGlobes.globes.push(l),ittGlobes.globesIndex[t]=l};ittGlobes.init(),window.ittGlobes=ittGlobes;export{ittGlobes};
     1function setupTooltip(t){let e="";return t.tooltipContent&&""!==t.tooltipContent&&(e='<div class="itt_globe_tooltip">'+t.tooltipContent+"</div>"),e}const globe_ut_prepareURL=function(t){if("string"!=typeof t)return t;var e;(t=t.replace(/&amp;/gi,"&")).replace(/&#(\d+);/g,(function(t,e){return String.fromCharCode(e)}));try{e=new URL(t)}catch(t){e=!1}return e&&![null,"http:","https:","mailto:","tel:"].includes(e.protocol)?(console.log("URL protocol not allowed"),""):t},globe_ut_prepareData=function(t){t.hasOwnProperty("dotLabels")&&t.dotLabels||(t.dotlabels=[]),t.hasOwnProperty("points")&&t.points||(t.points=[]);let e={showGraticules:!1,backgroundColor:"transparent",atmosphere:{enabled:!1,atmosphereColor:null,atmosphereAltitude:null},globeImage:"earth-day.jpg"};return(0===Object.keys(t).length||t.emptyPreview)&&Object.assign(t,e),t.pointOfView={lat:0,lng:0,altitude:1.5},t.centerCoordinates&&(t.pointOfView.lat=globe_ut_float(t.centerCoordinates.latitude),t.pointOfView.lng=globe_ut_float(t.centerCoordinates.longitude),t.pointOfView.altitude=globe_ut_float(t.altitude)),t},globe_ut_setupData=function(t,e){for(const o in e){let n=e[o];Array.isArray(t[o])&&t[o]&&t[o].map((function(e){(void 0===e.useCustom||void 0!==e.useCustom&&!globe_ut_bool(e.useCustom))&&Object.assign(e,t[n]),e.action&&"default"===e.action&&(e.action=t[n].action)}))}},globe_ut_prepareViewport=function(t,e){var o=t.closest(".itt_globe_aspect_ratio");window.innerWidth<=780&&void 0!==e.paddingTop&&""!==e.paddingTop?o.style.paddingTop=String(e.paddingTopMobile)+"%":o.style.paddingTop=String(e.paddingTop)+"%"},globe_ut_float=function(t){var e=parseFloat(t);return isNaN(e)?0:e},globe_ut_bool=function(t){return 0!==Number(t)&&"false"!==t&&void 0!==t};function setupClickEvent(t,e,o){if("none"===o.action)return;const n=o.action;n&&"function"==typeof window.ittGlobes.clickActions[n]&&window.ittGlobes.clickActions[n](t,e,o),ittGlobeData.isAdmin||("open_url"!==o.action&&"open_url_new"!==o.action||(o.content=globe_ut_prepareURL(o.content)),"open_url"===o.action&&""!==o.content?document.location=o.content:"open_url_new"===o.action&&""!==o.content&&window.open(o.content))}function setupHoverEvent(t,e,o){return"point"===o&&t.pointColor(t=>t===e?t.hover:t.color),"dotlabel"!==o&&"label"!==o||t.labelColor(t=>t===e?t.hover:t.color),t}function addPointsLayer(t,e){t.pointsData(e.points).pointLat(t=>t.coordinates.latitude).pointLng(t=>t.coordinates.longitude).pointRadius(t=>t.radius/10).pointAltitude(t=>t.altitude/100).pointColor(t=>t.color).pointResolution(20),t.pointLabel((function(t){return setupTooltip(t)})),t.onPointClick((function(o){setupClickEvent(t,e,o)})),t.onPointHover((function(e){setupHoverEvent(t,e,"point")}))}function addLabelsLayer(t,e){if(t.labelsData(e.dotLabels).labelLat(t=>t.coordinates.latitude).labelLng(t=>t.coordinates.longitude).labelText(t=>t.title).labelAltitude(t=>t.altitude/100).labelSize(t=>t.size/10).labelColor(t=>t.color).labelResolution(20).labelIncludeDot(t=>globe_ut_bool(t.includeDot)).labelDotRadius(t=>t.radius/10).labelDotOrientation(t=>t.dotOrientation),e.labelFont&&"default"!==e.labelFont){let o=ittGlobeData.assetsUrl+"fonts/"+e.labelFont+".json";fetch(o).then(t=>t.json()).then(e=>{t.labelTypeFace(e)}).catch(t=>{console.error("Fetch error:",t)})}t.labelLabel((function(t){return setupTooltip(t)})),t.onLabelClick((function(o,n,l){setupClickEvent(t,e,o)})),t.onLabelHover((function(e){setupHoverEvent(t,e,"label")}))}function setupResizeEvent(t,e,o){var n=e.closest(".itt_globe_aspect_ratio");window.addEventListener("resize",(function(){window.innerWidth<=780&&void 0!==o.paddingTop&&""!==o.paddingTop?n.style.paddingTop=String(o.paddingTopMobile)+"%":n.style.paddingTop=String(o.paddingTop)+"%",t.width()!==e.offsetWidth&&t.width(e.offsetWidth).height(e.offsetHeight)}))}function setupInteractions(t,e){void 0!==e.interactions&&(t.controls().enableZoom=globe_ut_bool(e.interactions.zoom),t.controls().enablePan=globe_ut_bool(e.interactions.pan),t.controls().enableRotate=globe_ut_bool(e.interactions.pan))}let ittGlobes={globes:[],globesIndex:{},clickActions:{},init:function(){if("undefined"==typeof Globe)return void console.error("Globe lib not loaded properly");let t=document.getElementsByClassName("js-itt-globe-render");for(const e of t){if(!e.dataset.hasOwnProperty("globe_id"))continue;let t=0;try{t=parseInt(JSON.parse(e.dataset.globe_id))}catch(t){continue}if(void 0!==ittGlobes.globesIndex[t])continue;if(!e.dataset.hasOwnProperty("globe_meta"))continue;let o={};try{o=JSON.parse(e.dataset.globe_meta)}catch(t){o={}}create_globe(t,o)}}};var create_globe=function(t,e){let o=document.getElementById("itt_globe_"+t);globe_ut_prepareData(e),globe_ut_setupData(e,{points:"pointDefaults",dotLabels:"labelDefaults"}),globe_ut_prepareViewport(o,e);let n={rendererConfig:{antialias:!0,alpha:!0},waitForGlobeReady:!0,animateIn:void 0===e.animateIn||globe_ut_bool(e.animateIn)},l=Globe(n)(document.getElementById("itt_globe_"+t));"transparent"===e.backgroundColor&&(e.backgroundColor="rgba(0,0,0,0)"),null!==e.globeImage&&""!==e.globeImage&&"earth-hollow"!==e.globeImage&&"noImage"!==e.globeImage&&"customImage"!==e.globeImage&&l.globeImageUrl(ittGlobeData.imagesUrl+e.globeImage),l.backgroundColor(e.backgroundColor).width(o.offsetWidth).height(o.offsetHeight).showGraticules(globe_ut_bool(e.showGraticules)).showAtmosphere(globe_ut_bool(e.atmosphere.enabled)).atmosphereColor(e.atmosphere.atmosphereColor).atmosphereAltitude(e.atmosphere.atmosphereAltitude).pointOfView(e.pointOfView),setupInteractions(l,e),setupResizeEvent(l,o,e),ittGlobeData.isAdmin&&l.onGlobeReady((function(){const t=new Event("adminGlobeReady");document.dispatchEvent(t)})),e.points&&addPointsLayer(l,e),e.dotLabels&&addLabelsLayer(l,e),ittGlobes.globes.push(l),ittGlobes.globesIndex[t]=l};ittGlobes.init(),window.ittGlobes=ittGlobes;export{ittGlobes};
  • interactive-globes/trunk/dist/assets/js/vendor/public/globe.gl.min.js

    r3098987 r3158721  
    11// Version 2.32.3 globe.gl - https://github.com/vasturiano/globe.gl
    2 !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Globe=e();}(undefined,(function(){function t(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r);}return n}function e(e){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{};n%2?t(Object(i),!0).forEach((function(t){r(e,t,i[t]);})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):t(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t));}));}return e}function n(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return ("string"===e?String:Number)(t)}(t,"string");return "symbol"==typeof e?e:e+""}function r(t,e,r){return (e=n(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function i(t,e){if(null==t)return {};var n,r,i=function(t,e){if(null==t)return {};var n,r,i={},a=Object.keys(t);for(r=0;r<a.length;r++)n=a[r],e.indexOf(n)>=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n]);}return i}function a(t){return function(t){if(Array.isArray(t))return o(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"==typeof t)return o(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return o(t,e)}(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 o(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}!function(t,e){void 0===e&&(e={});var n=e.insertAt;if(t&&"undefined"!=typeof document){var r=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style");i.type="text/css","top"===n&&r.firstChild?r.insertBefore(i,r.firstChild):r.appendChild(i),i.styleSheet?i.styleSheet.cssText=t:i.appendChild(document.createTextNode(t));}}(".scene-container .clickable {\n  cursor: pointer;\n}");const s="162",A={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},l=0,c=1,u=2,h=3,f=1,d=2,p=3,m=0,g=1,v=100,_=0,y=1,x=2,b=0,M=1,w=2,E=3,S=4,T=5,C=6,R=7,P=301,L=302,D=306,O=1e3,I=1001,q=1002,U=1003,N=1005,B=1006,k=1007,F=1008,z=1009,G=1012,H=1013,j=1014,V=1015,W=1016,X=1020,Q=1023,Y=1026,Z=1027,K=33776,J=33777,$=33778,tt=33779,et=36492,nt="",rt="srgb",it="srgb-linear",at="display-p3",ot="display-p3-linear",st="linear",At="srgb",lt="rec709",ct="p3",ut=7680,ht=35044,ft="300 es",dt=1035,pt=2e3,mt=2001;class gt{addEventListener(t,e){void 0===this._listeners&&(this._listeners={});const n=this._listeners;void 0===n[t]&&(n[t]=[]),-1===n[t].indexOf(e)&&n[t].push(e);}hasEventListener(t,e){if(void 0===this._listeners)return !1;const n=this._listeners;return void 0!==n[t]&&-1!==n[t].indexOf(e)}removeEventListener(t,e){if(void 0===this._listeners)return;const n=this._listeners[t];if(void 0!==n){const t=n.indexOf(e);-1!==t&&n.splice(t,1);}}dispatchEvent(t){if(void 0===this._listeners)return;const e=this._listeners[t.type];if(void 0!==e){t.target=this;const n=e.slice(0);for(let e=0,r=n.length;e<r;e++)n[e].call(this,t);t.target=null;}}}const vt=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];let _t=1234567;const yt=Math.PI/180,xt=180/Math.PI;function bt(){const t=4294967295*Math.random()|0,e=4294967295*Math.random()|0,n=4294967295*Math.random()|0,r=4294967295*Math.random()|0;return (vt[255&t]+vt[t>>8&255]+vt[t>>16&255]+vt[t>>24&255]+"-"+vt[255&e]+vt[e>>8&255]+"-"+vt[e>>16&15|64]+vt[e>>24&255]+"-"+vt[63&n|128]+vt[n>>8&255]+"-"+vt[n>>16&255]+vt[n>>24&255]+vt[255&r]+vt[r>>8&255]+vt[r>>16&255]+vt[r>>24&255]).toLowerCase()}function Mt(t,e,n){return Math.max(e,Math.min(n,t))}function wt(t,e){return (t%e+e)%e}function Et(t,e,n){return (1-n)*t+n*e}function St(t){return !(t&t-1)&&0!==t}function Tt(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}function Ct(t,e){switch(e.constructor){case Float32Array:return t;case Uint32Array:return t/4294967295;case Uint16Array:return t/65535;case Uint8Array:return t/255;case Int32Array:return Math.max(t/2147483647,-1);case Int16Array:return Math.max(t/32767,-1);case Int8Array:return Math.max(t/127,-1);default:throw new Error("Invalid component type.")}}function Rt(t,e){switch(e.constructor){case Float32Array:return t;case Uint32Array:return Math.round(4294967295*t);case Uint16Array:return Math.round(65535*t);case Uint8Array:return Math.round(255*t);case Int32Array:return Math.round(2147483647*t);case Int16Array:return Math.round(32767*t);case Int8Array:return Math.round(127*t);default:throw new Error("Invalid component type.")}}const Pt={DEG2RAD:yt,RAD2DEG:xt,generateUUID:bt,clamp:Mt,euclideanModulo:wt,mapLinear:function(t,e,n,r,i){return r+(t-e)*(i-r)/(n-e)},inverseLerp:function(t,e,n){return t!==e?(n-t)/(e-t):0},lerp:Et,damp:function(t,e,n,r){return Et(t,e,1-Math.exp(-n*r))},pingpong:function(t,e=1){return e-Math.abs(wt(t,2*e)-e)},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){void 0!==t&&(_t=t);let e=_t+=1831565813;return e=Math.imul(e^e>>>15,1|e),e^=e+Math.imul(e^e>>>7,61|e),((e^e>>>14)>>>0)/4294967296},degToRad:function(t){return t*yt},radToDeg:function(t){return t*xt},isPowerOfTwo:St,ceilPowerOfTwo:function(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))},floorPowerOfTwo:Tt,setQuaternionFromProperEuler:function(t,e,n,r,i){const a=Math.cos,o=Math.sin,s=a(n/2),A=o(n/2),l=a((e+r)/2),c=o((e+r)/2),u=a((e-r)/2),h=o((e-r)/2),f=a((r-e)/2),d=o((r-e)/2);switch(i){case"XYX":t.set(s*c,A*u,A*h,s*l);break;case"YZY":t.set(A*h,s*c,A*u,s*l);break;case"ZXZ":t.set(A*u,A*h,s*c,s*l);break;case"XZX":t.set(s*c,A*d,A*f,s*l);break;case"YXY":t.set(A*f,s*c,A*d,s*l);break;case"ZYZ":t.set(A*d,A*f,s*c,s*l);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+i);}},normalize:Rt,denormalize:Ct};class Lt{constructor(t=0,e=0){Lt.prototype.isVector2=!0,this.x=t,this.y=e;}get width(){return this.x}set width(t){this.x=t;}get height(){return this.y}set height(t){this.y=t;}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6],this.y=r[1]*e+r[4]*n+r[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(Mt(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),r=Math.sin(e),i=this.x-t.x,a=this.y-t.y;return this.x=i*n-a*r+t.x,this.y=i*r+a*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y;}}class Dt{constructor(t,e,n,r,i,a,o,s,A){Dt.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],void 0!==t&&this.set(t,e,n,r,i,a,o,s,A);}set(t,e,n,r,i,a,o,s,A){const l=this.elements;return l[0]=t,l[1]=r,l[2]=o,l[3]=e,l[4]=i,l[5]=s,l[6]=n,l[7]=a,l[8]=A,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,r=e.elements,i=this.elements,a=n[0],o=n[3],s=n[6],A=n[1],l=n[4],c=n[7],u=n[2],h=n[5],f=n[8],d=r[0],p=r[3],m=r[6],g=r[1],v=r[4],_=r[7],y=r[2],x=r[5],b=r[8];return i[0]=a*d+o*g+s*y,i[3]=a*p+o*v+s*x,i[6]=a*m+o*_+s*b,i[1]=A*d+l*g+c*y,i[4]=A*p+l*v+c*x,i[7]=A*m+l*_+c*b,i[2]=u*d+h*g+f*y,i[5]=u*p+h*v+f*x,i[8]=u*m+h*_+f*b,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],r=t[2],i=t[3],a=t[4],o=t[5],s=t[6],A=t[7],l=t[8];return e*a*l-e*o*A-n*i*l+n*o*s+r*i*A-r*a*s}invert(){const t=this.elements,e=t[0],n=t[1],r=t[2],i=t[3],a=t[4],o=t[5],s=t[6],A=t[7],l=t[8],c=l*a-o*A,u=o*s-l*i,h=A*i-a*s,f=e*c+n*u+r*h;if(0===f)return this.set(0,0,0,0,0,0,0,0,0);const d=1/f;return t[0]=c*d,t[1]=(r*A-l*n)*d,t[2]=(o*n-r*a)*d,t[3]=u*d,t[4]=(l*e-r*s)*d,t[5]=(r*i-o*e)*d,t[6]=h*d,t[7]=(n*s-A*e)*d,t[8]=(a*e-n*i)*d,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,r,i,a,o){const s=Math.cos(i),A=Math.sin(i);return this.set(n*s,n*A,-n*(s*a+A*o)+a+t,-r*A,r*s,-r*(-A*a+s*o)+o+e,0,0,1),this}scale(t,e){return this.premultiply(Ot.makeScale(t,e)),this}rotate(t){return this.premultiply(Ot.makeRotation(-t)),this}translate(t,e){return this.premultiply(Ot.makeTranslation(t,e)),this}makeTranslation(t,e){return t.isVector2?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,n,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<9;t++)if(e[t]!==n[t])return !1;return !0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return (new this.constructor).fromArray(this.elements)}}const Ot=new Dt;function It(t){for(let e=t.length-1;e>=0;--e)if(t[e]>=65535)return !0;return !1}function qt(t){return document.createElementNS("http://www.w3.org/1999/xhtml",t)}function Ut(){const t=qt("canvas");return t.style.display="block",t}const Nt={};function Bt(t){t in Nt||(Nt[t]=!0,console.warn(t));}const kt=(new Dt).set(.8224621,.177538,0,.0331941,.9668058,0,.0170827,.0723974,.9105199),Ft=(new Dt).set(1.2249401,-.2249404,0,-.0420569,1.0420571,0,-.0196376,-.0786361,1.0982735),zt={[it]:{transfer:st,primaries:lt,toReference:t=>t,fromReference:t=>t},[rt]:{transfer:At,primaries:lt,toReference:t=>t.convertSRGBToLinear(),fromReference:t=>t.convertLinearToSRGB()},[ot]:{transfer:st,primaries:ct,toReference:t=>t.applyMatrix3(Ft),fromReference:t=>t.applyMatrix3(kt)},[at]:{transfer:At,primaries:ct,toReference:t=>t.convertSRGBToLinear().applyMatrix3(Ft),fromReference:t=>t.applyMatrix3(kt).convertLinearToSRGB()}},Gt=new Set([it,ot]),Ht={enabled:!0,_workingColorSpace:it,get workingColorSpace(){return this._workingColorSpace},set workingColorSpace(t){if(!Gt.has(t))throw new Error(`Unsupported working color space, "${t}".`);this._workingColorSpace=t;},convert:function(t,e,n){if(!1===this.enabled||e===n||!e||!n)return t;const r=zt[e].toReference;return (0, zt[n].fromReference)(r(t))},fromWorkingColorSpace:function(t,e){return this.convert(t,this._workingColorSpace,e)},toWorkingColorSpace:function(t,e){return this.convert(t,e,this._workingColorSpace)},getPrimaries:function(t){return zt[t].primaries},getTransfer:function(t){return t===nt?st:zt[t].transfer}};function jt(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function Vt(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}let Wt;class Xt{static getDataURL(t){if(/^data:/i.test(t.src))return t.src;if("undefined"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else {void 0===Wt&&(Wt=qt("canvas")),Wt.width=t.width,Wt.height=t.height;const n=Wt.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=Wt;}return e.width>2048||e.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",t),e.toDataURL("image/jpeg",.6)):e.toDataURL("image/png")}static sRGBToLinear(t){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const e=qt("canvas");e.width=t.width,e.height=t.height;const n=e.getContext("2d");n.drawImage(t,0,0,t.width,t.height);const r=n.getImageData(0,0,t.width,t.height),i=r.data;for(let t=0;t<i.length;t++)i[t]=255*jt(i[t]/255);return n.putImageData(r,0,0),e}if(t.data){const e=t.data.slice(0);for(let t=0;t<e.length;t++)e instanceof Uint8Array||e instanceof Uint8ClampedArray?e[t]=Math.floor(255*jt(e[t]/255)):e[t]=jt(e[t]);return {data:e,width:t.width,height:t.height}}return console.warn("THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."),t}}let Qt=0;class Yt{constructor(t=null){this.isSource=!0,Object.defineProperty(this,"id",{value:Qt++}),this.uuid=bt(),this.data=t,this.dataReady=!0,this.version=0;}set needsUpdate(t){!0===t&&this.version++;}toJSON(t){const e=void 0===t||"string"==typeof t;if(!e&&void 0!==t.images[this.uuid])return t.images[this.uuid];const n={uuid:this.uuid,url:""},r=this.data;if(null!==r){let t;if(Array.isArray(r)){t=[];for(let e=0,n=r.length;e<n;e++)r[e].isDataTexture?t.push(Zt(r[e].image)):t.push(Zt(r[e]));}else t=Zt(r);n.url=t;}return e||(t.images[this.uuid]=n),n}}function Zt(t){return "undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap?Xt.getDataURL(t):t.data?{data:Array.from(t.data),width:t.width,height:t.height,type:t.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}let Kt=0;class Jt extends gt{constructor(t=Jt.DEFAULT_IMAGE,e=Jt.DEFAULT_MAPPING,n=1001,r=1001,i=1006,a=1008,o=1023,s=1009,A=Jt.DEFAULT_ANISOTROPY,l=""){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:Kt++}),this.uuid=bt(),this.name="",this.source=new Yt(t),this.mipmaps=[],this.mapping=e,this.channel=0,this.wrapS=n,this.wrapT=r,this.magFilter=i,this.minFilter=a,this.anisotropy=A,this.format=o,this.internalFormat=null,this.type=s,this.offset=new Lt(0,0),this.repeat=new Lt(1,1),this.center=new Lt(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Dt,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=l,this.userData={},this.version=0,this.onUpdate=null,this.isRenderTargetTexture=!1,this.needsPMREMUpdate=!1;}get image(){return this.source.data}set image(t=null){this.source.data=t;}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y);}clone(){return (new this.constructor).copy(this)}copy(t){return this.name=t.name,this.source=t.source,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.channel=t.channel,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.colorSpace=t.colorSpace,this.userData=JSON.parse(JSON.stringify(t.userData)),this.needsUpdate=!0,this}toJSON(t){const e=void 0===t||"string"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];const n={metadata:{version:4.6,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(t).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(n.userData=this.userData),e||(t.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:"dispose"});}transformUv(t){if(300!==this.mapping)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case O:t.x=t.x-Math.floor(t.x);break;case I:t.x=t.x<0?0:1;break;case q:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x);}if(t.y<0||t.y>1)switch(this.wrapT){case O:t.y=t.y-Math.floor(t.y);break;case I:t.y=t.y<0?0:1;break;case q:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y);}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){!0===t&&(this.version++,this.source.needsUpdate=!0);}}Jt.DEFAULT_IMAGE=null,Jt.DEFAULT_MAPPING=300,Jt.DEFAULT_ANISOTROPY=1;class $t{constructor(t=0,e=0,n=0,r=1){$t.prototype.isVector4=!0,this.x=t,this.y=e,this.z=n,this.w=r;}get width(){return this.z}set width(t){this.z=t;}get height(){return this.w}set height(t){this.w=t;}set(t,e,n,r){return this.x=t,this.y=e,this.z=n,this.w=r,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,r=this.z,i=this.w,a=t.elements;return this.x=a[0]*e+a[4]*n+a[8]*r+a[12]*i,this.y=a[1]*e+a[5]*n+a[9]*r+a[13]*i,this.z=a[2]*e+a[6]*n+a[10]*r+a[14]*i,this.w=a[3]*e+a[7]*n+a[11]*r+a[15]*i,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,r,i;const a=.01,o=.1,s=t.elements,A=s[0],l=s[4],c=s[8],u=s[1],h=s[5],f=s[9],d=s[2],p=s[6],m=s[10];if(Math.abs(l-u)<a&&Math.abs(c-d)<a&&Math.abs(f-p)<a){if(Math.abs(l+u)<o&&Math.abs(c+d)<o&&Math.abs(f+p)<o&&Math.abs(A+h+m-3)<o)return this.set(1,0,0,0),this;e=Math.PI;const t=(A+1)/2,s=(h+1)/2,g=(m+1)/2,v=(l+u)/4,_=(c+d)/4,y=(f+p)/4;return t>s&&t>g?t<a?(n=0,r=.707106781,i=.707106781):(n=Math.sqrt(t),r=v/n,i=_/n):s>g?s<a?(n=.707106781,r=0,i=.707106781):(r=Math.sqrt(s),n=v/r,i=y/r):g<a?(n=.707106781,r=.707106781,i=0):(i=Math.sqrt(g),n=_/i,r=y/i),this.set(n,r,i,e),this}let g=Math.sqrt((p-f)*(p-f)+(c-d)*(c-d)+(u-l)*(u-l));return Math.abs(g)<.001&&(g=1),this.x=(p-f)/g,this.y=(c-d)/g,this.z=(u-l)/g,this.w=Math.acos((A+h+m-1)/2),this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this.w=Math.max(t,Math.min(e,this.w)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this.w=t.w+(e.w-t.w)*n,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w;}}class te extends gt{constructor(t=1,e=1,n={}){super(),this.isRenderTarget=!0,this.width=t,this.height=e,this.depth=1,this.scissor=new $t(0,0,t,e),this.scissorTest=!1,this.viewport=new $t(0,0,t,e);const r={width:t,height:e,depth:1};n=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:B,depthBuffer:!0,stencilBuffer:!1,depthTexture:null,samples:0,count:1},n);const i=new Jt(r,n.mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.colorSpace);i.flipY=!1,i.generateMipmaps=n.generateMipmaps,i.internalFormat=n.internalFormat,this.textures=[];const a=n.count;for(let t=0;t<a;t++)this.textures[t]=i.clone(),this.textures[t].isRenderTargetTexture=!0;this.depthBuffer=n.depthBuffer,this.stencilBuffer=n.stencilBuffer,this.depthTexture=n.depthTexture,this.samples=n.samples;}get texture(){return this.textures[0]}set texture(t){this.textures[0]=t;}setSize(t,e,n=1){if(this.width!==t||this.height!==e||this.depth!==n){this.width=t,this.height=e,this.depth=n;for(let r=0,i=this.textures.length;r<i;r++)this.textures[r].image.width=t,this.textures[r].image.height=e,this.textures[r].image.depth=n;this.dispose();}this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e);}clone(){return (new this.constructor).copy(this)}copy(t){this.width=t.width,this.height=t.height,this.depth=t.depth,this.scissor.copy(t.scissor),this.scissorTest=t.scissorTest,this.viewport.copy(t.viewport),this.textures.length=0;for(let e=0,n=t.textures.length;e<n;e++)this.textures[e]=t.textures[e].clone(),this.textures[e].isRenderTargetTexture=!0;const e=Object.assign({},t.texture.image);return this.texture.source=new Yt(e),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,null!==t.depthTexture&&(this.depthTexture=t.depthTexture.clone()),this.samples=t.samples,this}dispose(){this.dispatchEvent({type:"dispose"});}}class ee extends te{constructor(t=1,e=1,n={}){super(t,e,n),this.isWebGLRenderTarget=!0;}}class ne extends Jt{constructor(t=null,e=1,n=1,r=1){super(null),this.isDataArrayTexture=!0,this.image={data:t,width:e,height:n,depth:r},this.magFilter=U,this.minFilter=U,this.wrapR=I,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1;}}class re extends Jt{constructor(t=null,e=1,n=1,r=1){super(null),this.isData3DTexture=!0,this.image={data:t,width:e,height:n,depth:r},this.magFilter=U,this.minFilter=U,this.wrapR=I,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1;}}class ie{constructor(t=0,e=0,n=0,r=1){this.isQuaternion=!0,this._x=t,this._y=e,this._z=n,this._w=r;}static slerpFlat(t,e,n,r,i,a,o){let s=n[r+0],A=n[r+1],l=n[r+2],c=n[r+3];const u=i[a+0],h=i[a+1],f=i[a+2],d=i[a+3];if(0===o)return t[e+0]=s,t[e+1]=A,t[e+2]=l,void(t[e+3]=c);if(1===o)return t[e+0]=u,t[e+1]=h,t[e+2]=f,void(t[e+3]=d);if(c!==d||s!==u||A!==h||l!==f){let t=1-o;const e=s*u+A*h+l*f+c*d,n=e>=0?1:-1,r=1-e*e;if(r>Number.EPSILON){const i=Math.sqrt(r),a=Math.atan2(i,e*n);t=Math.sin(t*a)/i,o=Math.sin(o*a)/i;}const i=o*n;if(s=s*t+u*i,A=A*t+h*i,l=l*t+f*i,c=c*t+d*i,t===1-o){const t=1/Math.sqrt(s*s+A*A+l*l+c*c);s*=t,A*=t,l*=t,c*=t;}}t[e]=s,t[e+1]=A,t[e+2]=l,t[e+3]=c;}static multiplyQuaternionsFlat(t,e,n,r,i,a){const o=n[r],s=n[r+1],A=n[r+2],l=n[r+3],c=i[a],u=i[a+1],h=i[a+2],f=i[a+3];return t[e]=o*f+l*c+s*h-A*u,t[e+1]=s*f+l*u+A*c-o*h,t[e+2]=A*f+l*h+o*u-s*c,t[e+3]=l*f-o*c-s*u-A*h,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback();}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback();}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback();}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback();}set(t,e,n,r){return this._x=t,this._y=e,this._z=n,this._w=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e=!0){const n=t._x,r=t._y,i=t._z,a=t._order,o=Math.cos,s=Math.sin,A=o(n/2),l=o(r/2),c=o(i/2),u=s(n/2),h=s(r/2),f=s(i/2);switch(a){case"XYZ":this._x=u*l*c+A*h*f,this._y=A*h*c-u*l*f,this._z=A*l*f+u*h*c,this._w=A*l*c-u*h*f;break;case"YXZ":this._x=u*l*c+A*h*f,this._y=A*h*c-u*l*f,this._z=A*l*f-u*h*c,this._w=A*l*c+u*h*f;break;case"ZXY":this._x=u*l*c-A*h*f,this._y=A*h*c+u*l*f,this._z=A*l*f+u*h*c,this._w=A*l*c-u*h*f;break;case"ZYX":this._x=u*l*c-A*h*f,this._y=A*h*c+u*l*f,this._z=A*l*f-u*h*c,this._w=A*l*c+u*h*f;break;case"YZX":this._x=u*l*c+A*h*f,this._y=A*h*c+u*l*f,this._z=A*l*f-u*h*c,this._w=A*l*c-u*h*f;break;case"XZY":this._x=u*l*c-A*h*f,this._y=A*h*c-u*l*f,this._z=A*l*f+u*h*c,this._w=A*l*c+u*h*f;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a);}return !0===e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,r=Math.sin(n);return this._x=t.x*r,this._y=t.y*r,this._z=t.z*r,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],r=e[4],i=e[8],a=e[1],o=e[5],s=e[9],A=e[2],l=e[6],c=e[10],u=n+o+c;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(l-s)*t,this._y=(i-A)*t,this._z=(a-r)*t;}else if(n>o&&n>c){const t=2*Math.sqrt(1+n-o-c);this._w=(l-s)/t,this._x=.25*t,this._y=(r+a)/t,this._z=(i+A)/t;}else if(o>c){const t=2*Math.sqrt(1+o-n-c);this._w=(i-A)/t,this._x=(r+a)/t,this._y=.25*t,this._z=(s+l)/t;}else {const t=2*Math.sqrt(1+c-n-o);this._w=(a-r)/t,this._x=(i+A)/t,this._y=(s+l)/t,this._z=.25*t;}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return n<Number.EPSILON?(n=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(Mt(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const r=Math.min(1,e/n);return this.slerp(t,r),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,r=t._y,i=t._z,a=t._w,o=e._x,s=e._y,A=e._z,l=e._w;return this._x=n*l+a*o+r*A-i*s,this._y=r*l+a*s+i*o-n*A,this._z=i*l+a*A+n*s-r*o,this._w=a*l-n*o-r*s-i*A,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,r=this._y,i=this._z,a=this._w;let o=a*t._w+n*t._x+r*t._y+i*t._z;if(o<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,o=-o):this.copy(t),o>=1)return this._w=a,this._x=n,this._y=r,this._z=i,this;const s=1-o*o;if(s<=Number.EPSILON){const t=1-e;return this._w=t*a+e*this._w,this._x=t*n+e*this._x,this._y=t*r+e*this._y,this._z=t*i+e*this._z,this.normalize(),this}const A=Math.sqrt(s),l=Math.atan2(A,o),c=Math.sin((1-e)*l)/A,u=Math.sin(e*l)/A;return this._w=a*c+this._w*u,this._x=n*c+this._x*u,this._y=r*c+this._y*u,this._z=i*c+this._z*u,this._onChangeCallback(),this}slerpQuaternions(t,e,n){return this.copy(t).slerp(e,n)}random(){const t=2*Math.PI*Math.random(),e=2*Math.PI*Math.random(),n=Math.random(),r=Math.sqrt(1-n),i=Math.sqrt(n);return this.set(r*Math.sin(t),r*Math.cos(t),i*Math.sin(e),i*Math.cos(e))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w;}}class ae{constructor(t=0,e=0,n=0){ae.prototype.isVector3=!0,this.x=t,this.y=e,this.z=n;}set(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(se.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(se.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,r=this.z,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6]*r,this.y=i[1]*e+i[4]*n+i[7]*r,this.z=i[2]*e+i[5]*n+i[8]*r,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,r=this.z,i=t.elements,a=1/(i[3]*e+i[7]*n+i[11]*r+i[15]);return this.x=(i[0]*e+i[4]*n+i[8]*r+i[12])*a,this.y=(i[1]*e+i[5]*n+i[9]*r+i[13])*a,this.z=(i[2]*e+i[6]*n+i[10]*r+i[14])*a,this}applyQuaternion(t){const e=this.x,n=this.y,r=this.z,i=t.x,a=t.y,o=t.z,s=t.w,A=2*(a*r-o*n),l=2*(o*e-i*r),c=2*(i*n-a*e);return this.x=e+s*A+a*c-o*l,this.y=n+s*l+o*A-i*c,this.z=r+s*c+i*l-a*A,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,r=this.z,i=t.elements;return this.x=i[0]*e+i[4]*n+i[8]*r,this.y=i[1]*e+i[5]*n+i[9]*r,this.z=i[2]*e+i[6]*n+i[10]*r,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,r=t.y,i=t.z,a=e.x,o=e.y,s=e.z;return this.x=r*s-i*o,this.y=i*a-n*s,this.z=n*o-r*a,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return oe.copy(this).projectOnVector(t),this.sub(oe)}reflect(t){return this.sub(oe.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(Mt(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,r=this.z-t.z;return e*e+n*n+r*r}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const r=Math.sin(e)*t;return this.x=r*Math.sin(n),this.y=Math.cos(e)*t,this.z=r*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),r=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=r,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}setFromColor(t){return this.x=t.r,this.y=t.g,this.z=t.b,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=Math.random()*Math.PI*2,e=2*Math.random()-1,n=Math.sqrt(1-e*e);return this.x=n*Math.cos(t),this.y=e,this.z=n*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z;}}const oe=new ae,se=new ie;class Ae{constructor(t=new ae(1/0,1/0,1/0),e=new ae(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=t,this.max=e;}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){this.makeEmpty();for(let e=0,n=t.length;e<n;e+=3)this.expandByPoint(ce.fromArray(t,e));return this}setFromBufferAttribute(t){this.makeEmpty();for(let e=0,n=t.count;e<n;e++)this.expandByPoint(ce.fromBufferAttribute(t,e));return this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;e<n;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const n=ce.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(n),this.max.copy(t).add(n),this}setFromObject(t,e=!1){return this.makeEmpty(),this.expandByObject(t,e)}clone(){return (new this.constructor).copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}expandByObject(t,e=!1){t.updateWorldMatrix(!1,!1);const n=t.geometry;if(void 0!==n){const r=n.getAttribute("position");if(!0===e&&void 0!==r&&!0!==t.isInstancedMesh)for(let e=0,n=r.count;e<n;e++)!0===t.isMesh?t.getVertexPosition(e,ce):ce.fromBufferAttribute(r,e),ce.applyMatrix4(t.matrixWorld),this.expandByPoint(ce);else void 0!==t.boundingBox?(null===t.boundingBox&&t.computeBoundingBox(),ue.copy(t.boundingBox)):(null===n.boundingBox&&n.computeBoundingBox(),ue.copy(n.boundingBox)),ue.applyMatrix4(t.matrixWorld),this.union(ue);}const r=t.children;for(let t=0,n=r.length;t<n;t++)this.expandByObject(r[t],e);return this}containsPoint(t){return !(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y||t.z<this.min.z||t.z>this.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return !(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y||t.max.z<this.min.z||t.min.z>this.max.z)}intersectsSphere(t){return this.clampPoint(t.center,ce),ce.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return !1;this.getCenter(ve),_e.subVectors(this.max,ve),he.subVectors(t.a,ve),fe.subVectors(t.b,ve),de.subVectors(t.c,ve),pe.subVectors(fe,he),me.subVectors(de,fe),ge.subVectors(he,de);let e=[0,-pe.z,pe.y,0,-me.z,me.y,0,-ge.z,ge.y,pe.z,0,-pe.x,me.z,0,-me.x,ge.z,0,-ge.x,-pe.y,pe.x,0,-me.y,me.x,0,-ge.y,ge.x,0];return !!be(e,he,fe,de,_e)&&(e=[1,0,0,0,1,0,0,0,1],!!be(e,he,fe,de,_e)&&(ye.crossVectors(pe,me),e=[ye.x,ye.y,ye.z],be(e,he,fe,de,_e)))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,ce).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=.5*this.getSize(ce).length()),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(le[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),le[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),le[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),le[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),le[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),le[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),le[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),le[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(le)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}const le=[new ae,new ae,new ae,new ae,new ae,new ae,new ae,new ae],ce=new ae,ue=new Ae,he=new ae,fe=new ae,de=new ae,pe=new ae,me=new ae,ge=new ae,ve=new ae,_e=new ae,ye=new ae,xe=new ae;function be(t,e,n,r,i){for(let a=0,o=t.length-3;a<=o;a+=3){xe.fromArray(t,a);const o=i.x*Math.abs(xe.x)+i.y*Math.abs(xe.y)+i.z*Math.abs(xe.z),s=e.dot(xe),A=n.dot(xe),l=r.dot(xe);if(Math.max(-Math.max(s,A,l),Math.min(s,A,l))>o)return !1}return !0}const Me=new Ae,we=new ae,Ee=new ae;class Se{constructor(t=new ae,e=-1){this.isSphere=!0,this.center=t,this.radius=e;}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):Me.setFromPoints(t).getCenter(n);let r=0;for(let e=0,i=t.length;e<i;e++)r=Math.max(r,n.distanceToSquared(t[e]));return this.radius=Math.sqrt(r),this}copy(t){return this.center.copy(t.center),this.radius=t.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(t){return t.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(t){return t.distanceTo(this.center)-this.radius}intersectsSphere(t){const e=this.radius+t.radius;return t.center.distanceToSquared(this.center)<=e*e}intersectsBox(t){return t.intersectsSphere(this)}intersectsPlane(t){return Math.abs(t.distanceToPoint(this.center))<=this.radius}clampPoint(t,e){const n=this.center.distanceToSquared(t);return e.copy(t),n>this.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;we.subVectors(t,this.center);const e=we.lengthSq();if(e>this.radius*this.radius){const t=Math.sqrt(e),n=.5*(t-this.radius);this.center.addScaledVector(we,n/t),this.radius+=n;}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(!0===this.center.equals(t.center)?this.radius=Math.max(this.radius,t.radius):(Ee.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint(we.copy(t.center).add(Ee)),this.expandByPoint(we.copy(t.center).sub(Ee))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return (new this.constructor).copy(this)}}const Te=new ae,Ce=new ae,Re=new ae,Pe=new ae,Le=new ae,De=new ae,Oe=new ae;class Ie{constructor(t=new ae,e=new ae(0,0,-1)){this.origin=t,this.direction=e;}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.origin).addScaledVector(this.direction,t)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Te)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.origin).addScaledVector(this.direction,n)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=Te.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(Te.copy(this.origin).addScaledVector(this.direction,e),Te.distanceToSquared(t))}distanceSqToSegment(t,e,n,r){Ce.copy(t).add(e).multiplyScalar(.5),Re.copy(e).sub(t).normalize(),Pe.copy(this.origin).sub(Ce);const i=.5*t.distanceTo(e),a=-this.direction.dot(Re),o=Pe.dot(this.direction),s=-Pe.dot(Re),A=Pe.lengthSq(),l=Math.abs(1-a*a);let c,u,h,f;if(l>0)if(c=a*s-o,u=a*o-s,f=i*l,c>=0)if(u>=-f)if(u<=f){const t=1/l;c*=t,u*=t,h=c*(c+a*u+2*o)+u*(a*c+u+2*s)+A;}else u=i,c=Math.max(0,-(a*u+o)),h=-c*c+u*(u+2*s)+A;else u=-i,c=Math.max(0,-(a*u+o)),h=-c*c+u*(u+2*s)+A;else u<=-f?(c=Math.max(0,-(-a*i+o)),u=c>0?-i:Math.min(Math.max(-i,-s),i),h=-c*c+u*(u+2*s)+A):u<=f?(c=0,u=Math.min(Math.max(-i,-s),i),h=u*(u+2*s)+A):(c=Math.max(0,-(a*i+o)),u=c>0?i:Math.min(Math.max(-i,-s),i),h=-c*c+u*(u+2*s)+A);else u=a>0?-i:i,c=Math.max(0,-(a*u+o)),h=-c*c+u*(u+2*s)+A;return n&&n.copy(this.origin).addScaledVector(this.direction,c),r&&r.copy(Ce).addScaledVector(Re,u),h}intersectSphere(t,e){Te.subVectors(t.center,this.origin);const n=Te.dot(this.direction),r=Te.dot(Te)-n*n,i=t.radius*t.radius;if(r>i)return null;const a=Math.sqrt(i-r),o=n-a,s=n+a;return s<0?null:o<0?this.at(s,e):this.at(o,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return !0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,r,i,a,o,s;const A=1/this.direction.x,l=1/this.direction.y,c=1/this.direction.z,u=this.origin;return A>=0?(n=(t.min.x-u.x)*A,r=(t.max.x-u.x)*A):(n=(t.max.x-u.x)*A,r=(t.min.x-u.x)*A),l>=0?(i=(t.min.y-u.y)*l,a=(t.max.y-u.y)*l):(i=(t.max.y-u.y)*l,a=(t.min.y-u.y)*l),n>a||i>r?null:((i>n||isNaN(n))&&(n=i),(a<r||isNaN(r))&&(r=a),c>=0?(o=(t.min.z-u.z)*c,s=(t.max.z-u.z)*c):(o=(t.max.z-u.z)*c,s=(t.min.z-u.z)*c),n>s||o>r?null:((o>n||n!=n)&&(n=o),(s<r||r!=r)&&(r=s),r<0?null:this.at(n>=0?n:r,e)))}intersectsBox(t){return null!==this.intersectBox(t,Te)}intersectTriangle(t,e,n,r,i){Le.subVectors(e,t),De.subVectors(n,t),Oe.crossVectors(Le,De);let a,o=this.direction.dot(Oe);if(o>0){if(r)return null;a=1;}else {if(!(o<0))return null;a=-1,o=-o;}Pe.subVectors(this.origin,t);const s=a*this.direction.dot(De.crossVectors(Pe,De));if(s<0)return null;const A=a*this.direction.dot(Le.cross(Pe));if(A<0)return null;if(s+A>o)return null;const l=-a*Pe.dot(Oe);return l<0?null:this.at(l/o,i)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return (new this.constructor).copy(this)}}class qe{constructor(t,e,n,r,i,a,o,s,A,l,c,u,h,f,d,p){qe.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],void 0!==t&&this.set(t,e,n,r,i,a,o,s,A,l,c,u,h,f,d,p);}set(t,e,n,r,i,a,o,s,A,l,c,u,h,f,d,p){const m=this.elements;return m[0]=t,m[4]=e,m[8]=n,m[12]=r,m[1]=i,m[5]=a,m[9]=o,m[13]=s,m[2]=A,m[6]=l,m[10]=c,m[14]=u,m[3]=h,m[7]=f,m[11]=d,m[15]=p,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return (new qe).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,r=1/Ue.setFromMatrixColumn(t,0).length(),i=1/Ue.setFromMatrixColumn(t,1).length(),a=1/Ue.setFromMatrixColumn(t,2).length();return e[0]=n[0]*r,e[1]=n[1]*r,e[2]=n[2]*r,e[3]=0,e[4]=n[4]*i,e[5]=n[5]*i,e[6]=n[6]*i,e[7]=0,e[8]=n[8]*a,e[9]=n[9]*a,e[10]=n[10]*a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){const e=this.elements,n=t.x,r=t.y,i=t.z,a=Math.cos(n),o=Math.sin(n),s=Math.cos(r),A=Math.sin(r),l=Math.cos(i),c=Math.sin(i);if("XYZ"===t.order){const t=a*l,n=a*c,r=o*l,i=o*c;e[0]=s*l,e[4]=-s*c,e[8]=A,e[1]=n+r*A,e[5]=t-i*A,e[9]=-o*s,e[2]=i-t*A,e[6]=r+n*A,e[10]=a*s;}else if("YXZ"===t.order){const t=s*l,n=s*c,r=A*l,i=A*c;e[0]=t+i*o,e[4]=r*o-n,e[8]=a*A,e[1]=a*c,e[5]=a*l,e[9]=-o,e[2]=n*o-r,e[6]=i+t*o,e[10]=a*s;}else if("ZXY"===t.order){const t=s*l,n=s*c,r=A*l,i=A*c;e[0]=t-i*o,e[4]=-a*c,e[8]=r+n*o,e[1]=n+r*o,e[5]=a*l,e[9]=i-t*o,e[2]=-a*A,e[6]=o,e[10]=a*s;}else if("ZYX"===t.order){const t=a*l,n=a*c,r=o*l,i=o*c;e[0]=s*l,e[4]=r*A-n,e[8]=t*A+i,e[1]=s*c,e[5]=i*A+t,e[9]=n*A-r,e[2]=-A,e[6]=o*s,e[10]=a*s;}else if("YZX"===t.order){const t=a*s,n=a*A,r=o*s,i=o*A;e[0]=s*l,e[4]=i-t*c,e[8]=r*c+n,e[1]=c,e[5]=a*l,e[9]=-o*l,e[2]=-A*l,e[6]=n*c+r,e[10]=t-i*c;}else if("XZY"===t.order){const t=a*s,n=a*A,r=o*s,i=o*A;e[0]=s*l,e[4]=-c,e[8]=A*l,e[1]=t*c+i,e[5]=a*l,e[9]=n*c-r,e[2]=r*c-n,e[6]=o*l,e[10]=i*c+t;}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Be,t,ke)}lookAt(t,e,n){const r=this.elements;return Ge.subVectors(t,e),0===Ge.lengthSq()&&(Ge.z=1),Ge.normalize(),Fe.crossVectors(n,Ge),0===Fe.lengthSq()&&(1===Math.abs(n.z)?Ge.x+=1e-4:Ge.z+=1e-4,Ge.normalize(),Fe.crossVectors(n,Ge)),Fe.normalize(),ze.crossVectors(Ge,Fe),r[0]=Fe.x,r[4]=ze.x,r[8]=Ge.x,r[1]=Fe.y,r[5]=ze.y,r[9]=Ge.y,r[2]=Fe.z,r[6]=ze.z,r[10]=Ge.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,r=e.elements,i=this.elements,a=n[0],o=n[4],s=n[8],A=n[12],l=n[1],c=n[5],u=n[9],h=n[13],f=n[2],d=n[6],p=n[10],m=n[14],g=n[3],v=n[7],_=n[11],y=n[15],x=r[0],b=r[4],M=r[8],w=r[12],E=r[1],S=r[5],T=r[9],C=r[13],R=r[2],P=r[6],L=r[10],D=r[14],O=r[3],I=r[7],q=r[11],U=r[15];return i[0]=a*x+o*E+s*R+A*O,i[4]=a*b+o*S+s*P+A*I,i[8]=a*M+o*T+s*L+A*q,i[12]=a*w+o*C+s*D+A*U,i[1]=l*x+c*E+u*R+h*O,i[5]=l*b+c*S+u*P+h*I,i[9]=l*M+c*T+u*L+h*q,i[13]=l*w+c*C+u*D+h*U,i[2]=f*x+d*E+p*R+m*O,i[6]=f*b+d*S+p*P+m*I,i[10]=f*M+d*T+p*L+m*q,i[14]=f*w+d*C+p*D+m*U,i[3]=g*x+v*E+_*R+y*O,i[7]=g*b+v*S+_*P+y*I,i[11]=g*M+v*T+_*L+y*q,i[15]=g*w+v*C+_*D+y*U,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],r=t[8],i=t[12],a=t[1],o=t[5],s=t[9],A=t[13],l=t[2],c=t[6],u=t[10],h=t[14];return t[3]*(+i*s*c-r*A*c-i*o*u+n*A*u+r*o*h-n*s*h)+t[7]*(+e*s*h-e*A*u+i*a*u-r*a*h+r*A*l-i*s*l)+t[11]*(+e*A*c-e*o*h-i*a*c+n*a*h+i*o*l-n*A*l)+t[15]*(-r*o*l-e*s*c+e*o*u+r*a*c-n*a*u+n*s*l)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const r=this.elements;return t.isVector3?(r[12]=t.x,r[13]=t.y,r[14]=t.z):(r[12]=t,r[13]=e,r[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],r=t[2],i=t[3],a=t[4],o=t[5],s=t[6],A=t[7],l=t[8],c=t[9],u=t[10],h=t[11],f=t[12],d=t[13],p=t[14],m=t[15],g=c*p*A-d*u*A+d*s*h-o*p*h-c*s*m+o*u*m,v=f*u*A-l*p*A-f*s*h+a*p*h+l*s*m-a*u*m,_=l*d*A-f*c*A+f*o*h-a*d*h-l*o*m+a*c*m,y=f*c*s-l*d*s-f*o*u+a*d*u+l*o*p-a*c*p,x=e*g+n*v+r*_+i*y;if(0===x)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const b=1/x;return t[0]=g*b,t[1]=(d*u*i-c*p*i-d*r*h+n*p*h+c*r*m-n*u*m)*b,t[2]=(o*p*i-d*s*i+d*r*A-n*p*A-o*r*m+n*s*m)*b,t[3]=(c*s*i-o*u*i-c*r*A+n*u*A+o*r*h-n*s*h)*b,t[4]=v*b,t[5]=(l*p*i-f*u*i+f*r*h-e*p*h-l*r*m+e*u*m)*b,t[6]=(f*s*i-a*p*i-f*r*A+e*p*A+a*r*m-e*s*m)*b,t[7]=(a*u*i-l*s*i+l*r*A-e*u*A-a*r*h+e*s*h)*b,t[8]=_*b,t[9]=(f*c*i-l*d*i-f*n*h+e*d*h+l*n*m-e*c*m)*b,t[10]=(a*d*i-f*o*i+f*n*A-e*d*A-a*n*m+e*o*m)*b,t[11]=(l*o*i-a*c*i-l*n*A+e*c*A+a*n*h-e*o*h)*b,t[12]=y*b,t[13]=(l*d*r-f*c*r+f*n*u-e*d*u-l*n*p+e*c*p)*b,t[14]=(f*o*r-a*d*r-f*n*s+e*d*s+a*n*p-e*o*p)*b,t[15]=(a*c*r-l*o*r+l*n*s-e*c*s-a*n*u+e*o*u)*b,this}scale(t){const e=this.elements,n=t.x,r=t.y,i=t.z;return e[0]*=n,e[4]*=r,e[8]*=i,e[1]*=n,e[5]*=r,e[9]*=i,e[2]*=n,e[6]*=r,e[10]*=i,e[3]*=n,e[7]*=r,e[11]*=i,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],r=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,r))}makeTranslation(t,e,n){return t.isVector3?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z,0,0,0,1):this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),r=Math.sin(e),i=1-n,a=t.x,o=t.y,s=t.z,A=i*a,l=i*o;return this.set(A*a+n,A*o-r*s,A*s+r*o,0,A*o+r*s,l*o+n,l*s-r*a,0,A*s-r*o,l*s+r*a,i*s*s+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n,r,i,a){return this.set(1,n,i,0,t,1,a,0,e,r,1,0,0,0,0,1),this}compose(t,e,n){const r=this.elements,i=e._x,a=e._y,o=e._z,s=e._w,A=i+i,l=a+a,c=o+o,u=i*A,h=i*l,f=i*c,d=a*l,p=a*c,m=o*c,g=s*A,v=s*l,_=s*c,y=n.x,x=n.y,b=n.z;return r[0]=(1-(d+m))*y,r[1]=(h+_)*y,r[2]=(f-v)*y,r[3]=0,r[4]=(h-_)*x,r[5]=(1-(u+m))*x,r[6]=(p+g)*x,r[7]=0,r[8]=(f+v)*b,r[9]=(p-g)*b,r[10]=(1-(u+d))*b,r[11]=0,r[12]=t.x,r[13]=t.y,r[14]=t.z,r[15]=1,this}decompose(t,e,n){const r=this.elements;let i=Ue.set(r[0],r[1],r[2]).length();const a=Ue.set(r[4],r[5],r[6]).length(),o=Ue.set(r[8],r[9],r[10]).length();this.determinant()<0&&(i=-i),t.x=r[12],t.y=r[13],t.z=r[14],Ne.copy(this);const s=1/i,A=1/a,l=1/o;return Ne.elements[0]*=s,Ne.elements[1]*=s,Ne.elements[2]*=s,Ne.elements[4]*=A,Ne.elements[5]*=A,Ne.elements[6]*=A,Ne.elements[8]*=l,Ne.elements[9]*=l,Ne.elements[10]*=l,e.setFromRotationMatrix(Ne),n.x=i,n.y=a,n.z=o,this}makePerspective(t,e,n,r,i,a,o=2e3){const s=this.elements,A=2*i/(e-t),l=2*i/(n-r),c=(e+t)/(e-t),u=(n+r)/(n-r);let h,f;if(o===pt)h=-(a+i)/(a-i),f=-2*a*i/(a-i);else {if(o!==mt)throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+o);h=-a/(a-i),f=-a*i/(a-i);}return s[0]=A,s[4]=0,s[8]=c,s[12]=0,s[1]=0,s[5]=l,s[9]=u,s[13]=0,s[2]=0,s[6]=0,s[10]=h,s[14]=f,s[3]=0,s[7]=0,s[11]=-1,s[15]=0,this}makeOrthographic(t,e,n,r,i,a,o=2e3){const s=this.elements,A=1/(e-t),l=1/(n-r),c=1/(a-i),u=(e+t)*A,h=(n+r)*l;let f,d;if(o===pt)f=(a+i)*c,d=-2*c;else {if(o!==mt)throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+o);f=i*c,d=-1*c;}return s[0]=2*A,s[4]=0,s[8]=0,s[12]=-u,s[1]=0,s[5]=2*l,s[9]=0,s[13]=-h,s[2]=0,s[6]=0,s[10]=d,s[14]=-f,s[3]=0,s[7]=0,s[11]=0,s[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<16;t++)if(e[t]!==n[t])return !1;return !0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}const Ue=new ae,Ne=new qe,Be=new ae(0,0,0),ke=new ae(1,1,1),Fe=new ae,ze=new ae,Ge=new ae,He=new qe,je=new ie;class Ve{constructor(t=0,e=0,n=0,r=Ve.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=e,this._z=n,this._order=r;}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback();}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback();}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback();}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback();}set(t,e,n,r=this._order){return this._x=t,this._y=e,this._z=n,this._order=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,n=!0){const r=t.elements,i=r[0],a=r[4],o=r[8],s=r[1],A=r[5],l=r[9],c=r[2],u=r[6],h=r[10];switch(e){case"XYZ":this._y=Math.asin(Mt(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-l,h),this._z=Math.atan2(-a,i)):(this._x=Math.atan2(u,A),this._z=0);break;case"YXZ":this._x=Math.asin(-Mt(l,-1,1)),Math.abs(l)<.9999999?(this._y=Math.atan2(o,h),this._z=Math.atan2(s,A)):(this._y=Math.atan2(-c,i),this._z=0);break;case"ZXY":this._x=Math.asin(Mt(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(-c,h),this._z=Math.atan2(-a,A)):(this._y=0,this._z=Math.atan2(s,i));break;case"ZYX":this._y=Math.asin(-Mt(c,-1,1)),Math.abs(c)<.9999999?(this._x=Math.atan2(u,h),this._z=Math.atan2(s,i)):(this._x=0,this._z=Math.atan2(-a,A));break;case"YZX":this._z=Math.asin(Mt(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(-l,A),this._y=Math.atan2(-c,i)):(this._x=0,this._y=Math.atan2(o,h));break;case"XZY":this._z=Math.asin(-Mt(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(u,A),this._y=Math.atan2(o,i)):(this._x=Math.atan2(-l,h),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e);}return this._order=e,!0===n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return He.makeRotationFromQuaternion(t),this.setFromRotationMatrix(He,e,n)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return je.setFromEuler(this),this.setFromQuaternion(je,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order;}}Ve.DEFAULT_ORDER="XYZ";class We{constructor(){this.mask=1;}set(t){this.mask=1<<t>>>0;}enable(t){this.mask|=1<<t;}enableAll(){this.mask=-1;}toggle(t){this.mask^=1<<t;}disable(t){this.mask&=~(1<<t);}disableAll(){this.mask=0;}test(t){return !!(this.mask&t.mask)}isEnabled(t){return !!(this.mask&1<<t)}}let Xe=0;const Qe=new ae,Ye=new ie,Ze=new qe,Ke=new ae,Je=new ae,$e=new ae,tn=new ie,en=new ae(1,0,0),nn=new ae(0,1,0),rn=new ae(0,0,1),an={type:"added"},on={type:"removed"},sn={type:"childadded",child:null},An={type:"childremoved",child:null};class ln extends gt{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:Xe++}),this.uuid=bt(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=ln.DEFAULT_UP.clone();const t=new ae,e=new Ve,n=new ie,r=new ae(1,1,1);e._onChange((function(){n.setFromEuler(e,!1);})),n._onChange((function(){e.setFromQuaternion(n,void 0,!1);})),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:e},quaternion:{configurable:!0,enumerable:!0,value:n},scale:{configurable:!0,enumerable:!0,value:r},modelViewMatrix:{value:new qe},normalMatrix:{value:new Dt}}),this.matrix=new qe,this.matrixWorld=new qe,this.matrixAutoUpdate=ln.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=ln.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new We,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.userData={};}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale);}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,e){this.quaternion.setFromAxisAngle(t,e);}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0);}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t);}setRotationFromQuaternion(t){this.quaternion.copy(t);}rotateOnAxis(t,e){return Ye.setFromAxisAngle(t,e),this.quaternion.multiply(Ye),this}rotateOnWorldAxis(t,e){return Ye.setFromAxisAngle(t,e),this.quaternion.premultiply(Ye),this}rotateX(t){return this.rotateOnAxis(en,t)}rotateY(t){return this.rotateOnAxis(nn,t)}rotateZ(t){return this.rotateOnAxis(rn,t)}translateOnAxis(t,e){return Qe.copy(t).applyQuaternion(this.quaternion),this.position.add(Qe.multiplyScalar(e)),this}translateX(t){return this.translateOnAxis(en,t)}translateY(t){return this.translateOnAxis(nn,t)}translateZ(t){return this.translateOnAxis(rn,t)}localToWorld(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(Ze.copy(this.matrixWorld).invert())}lookAt(t,e,n){t.isVector3?Ke.copy(t):Ke.set(t,e,n);const r=this.parent;this.updateWorldMatrix(!0,!1),Je.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?Ze.lookAt(Je,Ke,this.up):Ze.lookAt(Ke,Je,this.up),this.quaternion.setFromRotationMatrix(Ze),r&&(Ze.extractRotation(r.matrixWorld),Ye.setFromRotationMatrix(Ze),this.quaternion.premultiply(Ye.invert()));}add(t){if(arguments.length>1){for(let t=0;t<arguments.length;t++)this.add(arguments[t]);return this}return t===this?(console.error("THREE.Object3D.add: object can't be added as a child of itself.",t),this):(t&&t.isObject3D?(null!==t.parent&&t.parent.remove(t),t.parent=this,this.children.push(t),t.dispatchEvent(an),sn.child=t,this.dispatchEvent(sn),sn.child=null):console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.",t),this)}remove(t){if(arguments.length>1){for(let t=0;t<arguments.length;t++)this.remove(arguments[t]);return this}const e=this.children.indexOf(t);return -1!==e&&(t.parent=null,this.children.splice(e,1),t.dispatchEvent(on),An.child=t,this.dispatchEvent(An),An.child=null),this}removeFromParent(){const t=this.parent;return null!==t&&t.remove(this),this}clear(){return this.remove(...this.children)}attach(t){return this.updateWorldMatrix(!0,!1),Ze.copy(this.matrixWorld).invert(),null!==t.parent&&(t.parent.updateWorldMatrix(!0,!1),Ze.multiply(t.parent.matrixWorld)),t.applyMatrix4(Ze),this.add(t),t.updateWorldMatrix(!1,!0),this}getObjectById(t){return this.getObjectByProperty("id",t)}getObjectByName(t){return this.getObjectByProperty("name",t)}getObjectByProperty(t,e){if(this[t]===e)return this;for(let n=0,r=this.children.length;n<r;n++){const r=this.children[n].getObjectByProperty(t,e);if(void 0!==r)return r}}getObjectsByProperty(t,e,n=[]){this[t]===e&&n.push(this);const r=this.children;for(let i=0,a=r.length;i<a;i++)r[i].getObjectsByProperty(t,e,n);return n}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(Je,t,$e),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(Je,tn,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);const e=this.children;for(let n=0,r=e.length;n<r;n++)e[n].traverse(t);}traverseVisible(t){if(!1===this.visible)return;t(this);const e=this.children;for(let n=0,r=e.length;n<r;n++)e[n].traverseVisible(t);}traverseAncestors(t){const e=this.parent;null!==e&&(t(e),e.traverseAncestors(t));}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0;}updateMatrixWorld(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)&&(null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,t=!0);const e=this.children;for(let n=0,r=e.length;n<r;n++){const r=e[n];!0!==r.matrixWorldAutoUpdate&&!0!==t||r.updateMatrixWorld(t);}}updateWorldMatrix(t,e){const n=this.parent;if(!0===t&&null!==n&&!0===n.matrixWorldAutoUpdate&&n.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),!0===e){const t=this.children;for(let e=0,n=t.length;e<n;e++){const n=t[e];!0===n.matrixWorldAutoUpdate&&n.updateWorldMatrix(!1,!0);}}}toJSON(t){const e=void 0===t||"string"==typeof t,n={};e&&(t={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},n.metadata={version:4.6,type:"Object",generator:"Object3D.toJSON"});const r={};function i(e,n){return void 0===e[n.uuid]&&(e[n.uuid]=n.toJSON(t)),n.uuid}if(r.uuid=this.uuid,r.type=this.type,""!==this.name&&(r.name=this.name),!0===this.castShadow&&(r.castShadow=!0),!0===this.receiveShadow&&(r.receiveShadow=!0),!1===this.visible&&(r.visible=!1),!1===this.frustumCulled&&(r.frustumCulled=!1),0!==this.renderOrder&&(r.renderOrder=this.renderOrder),Object.keys(this.userData).length>0&&(r.userData=this.userData),r.layers=this.layers.mask,r.matrix=this.matrix.toArray(),r.up=this.up.toArray(),!1===this.matrixAutoUpdate&&(r.matrixAutoUpdate=!1),this.isInstancedMesh&&(r.type="InstancedMesh",r.count=this.count,r.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor&&(r.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(r.type="BatchedMesh",r.perObjectFrustumCulled=this.perObjectFrustumCulled,r.sortObjects=this.sortObjects,r.drawRanges=this._drawRanges,r.reservedRanges=this._reservedRanges,r.visibility=this._visibility,r.active=this._active,r.bounds=this._bounds.map((t=>({boxInitialized:t.boxInitialized,boxMin:t.box.min.toArray(),boxMax:t.box.max.toArray(),sphereInitialized:t.sphereInitialized,sphereRadius:t.sphere.radius,sphereCenter:t.sphere.center.toArray()}))),r.maxGeometryCount=this._maxGeometryCount,r.maxVertexCount=this._maxVertexCount,r.maxIndexCount=this._maxIndexCount,r.geometryInitialized=this._geometryInitialized,r.geometryCount=this._geometryCount,r.matricesTexture=this._matricesTexture.toJSON(t),null!==this.boundingSphere&&(r.boundingSphere={center:r.boundingSphere.center.toArray(),radius:r.boundingSphere.radius}),null!==this.boundingBox&&(r.boundingBox={min:r.boundingBox.min.toArray(),max:r.boundingBox.max.toArray()})),this.isScene)this.background&&(this.background.isColor?r.background=this.background.toJSON():this.background.isTexture&&(r.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&!0!==this.environment.isRenderTargetTexture&&(r.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){r.geometry=i(t.geometries,this.geometry);const e=this.geometry.parameters;if(void 0!==e&&void 0!==e.shapes){const n=e.shapes;if(Array.isArray(n))for(let e=0,r=n.length;e<r;e++){const r=n[e];i(t.shapes,r);}else i(t.shapes,n);}}if(this.isSkinnedMesh&&(r.bindMode=this.bindMode,r.bindMatrix=this.bindMatrix.toArray(),void 0!==this.skeleton&&(i(t.skeletons,this.skeleton),r.skeleton=this.skeleton.uuid)),void 0!==this.material)if(Array.isArray(this.material)){const e=[];for(let n=0,r=this.material.length;n<r;n++)e.push(i(t.materials,this.material[n]));r.material=e;}else r.material=i(t.materials,this.material);if(this.children.length>0){r.children=[];for(let e=0;e<this.children.length;e++)r.children.push(this.children[e].toJSON(t).object);}if(this.animations.length>0){r.animations=[];for(let e=0;e<this.animations.length;e++){const n=this.animations[e];r.animations.push(i(t.animations,n));}}if(e){const e=a(t.geometries),r=a(t.materials),i=a(t.textures),o=a(t.images),s=a(t.shapes),A=a(t.skeletons),l=a(t.animations),c=a(t.nodes);e.length>0&&(n.geometries=e),r.length>0&&(n.materials=r),i.length>0&&(n.textures=i),o.length>0&&(n.images=o),s.length>0&&(n.shapes=s),A.length>0&&(n.skeletons=A),l.length>0&&(n.animations=l),c.length>0&&(n.nodes=c);}return n.object=r,n;function a(t){const e=[];for(const n in t){const r=t[n];delete r.metadata,e.push(r);}return e}}clone(t){return (new this.constructor).copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.animations=t.animations.slice(),this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e<t.children.length;e++){const n=t.children[e];this.add(n.clone());}return this}}ln.DEFAULT_UP=new ae(0,1,0),ln.DEFAULT_MATRIX_AUTO_UPDATE=!0,ln.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;const cn=new ae,un=new ae,hn=new ae,fn=new ae,dn=new ae,pn=new ae,mn=new ae,gn=new ae,vn=new ae,_n=new ae;class yn{constructor(t=new ae,e=new ae,n=new ae){this.a=t,this.b=e,this.c=n;}static getNormal(t,e,n,r){r.subVectors(n,e),cn.subVectors(t,e),r.cross(cn);const i=r.lengthSq();return i>0?r.multiplyScalar(1/Math.sqrt(i)):r.set(0,0,0)}static getBarycoord(t,e,n,r,i){cn.subVectors(r,e),un.subVectors(n,e),hn.subVectors(t,e);const a=cn.dot(cn),o=cn.dot(un),s=cn.dot(hn),A=un.dot(un),l=un.dot(hn),c=a*A-o*o;if(0===c)return i.set(0,0,0),null;const u=1/c,h=(A*s-o*l)*u,f=(a*l-o*s)*u;return i.set(1-h-f,f,h)}static containsPoint(t,e,n,r){return null!==this.getBarycoord(t,e,n,r,fn)&&(fn.x>=0&&fn.y>=0&&fn.x+fn.y<=1)}static getInterpolation(t,e,n,r,i,a,o,s){return null===this.getBarycoord(t,e,n,r,fn)?(s.x=0,s.y=0,"z"in s&&(s.z=0),"w"in s&&(s.w=0),null):(s.setScalar(0),s.addScaledVector(i,fn.x),s.addScaledVector(a,fn.y),s.addScaledVector(o,fn.z),s)}static isFrontFacing(t,e,n,r){return cn.subVectors(n,e),un.subVectors(t,e),cn.cross(un).dot(r)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,r){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[r]),this}setFromAttributeAndIndices(t,e,n,r){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,n),this.c.fromBufferAttribute(t,r),this}clone(){return (new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return cn.subVectors(this.c,this.b),un.subVectors(this.a,this.b),.5*cn.cross(un).length()}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return yn.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return yn.getBarycoord(t,this.a,this.b,this.c,e)}getInterpolation(t,e,n,r,i){return yn.getInterpolation(t,this.a,this.b,this.c,e,n,r,i)}containsPoint(t){return yn.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return yn.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const n=this.a,r=this.b,i=this.c;let a,o;dn.subVectors(r,n),pn.subVectors(i,n),gn.subVectors(t,n);const s=dn.dot(gn),A=pn.dot(gn);if(s<=0&&A<=0)return e.copy(n);vn.subVectors(t,r);const l=dn.dot(vn),c=pn.dot(vn);if(l>=0&&c<=l)return e.copy(r);const u=s*c-l*A;if(u<=0&&s>=0&&l<=0)return a=s/(s-l),e.copy(n).addScaledVector(dn,a);_n.subVectors(t,i);const h=dn.dot(_n),f=pn.dot(_n);if(f>=0&&h<=f)return e.copy(i);const d=h*A-s*f;if(d<=0&&A>=0&&f<=0)return o=A/(A-f),e.copy(n).addScaledVector(pn,o);const p=l*f-h*c;if(p<=0&&c-l>=0&&h-f>=0)return mn.subVectors(i,r),o=(c-l)/(c-l+(h-f)),e.copy(r).addScaledVector(mn,o);const m=1/(p+d+u);return a=d*m,o=u*m,e.copy(n).addScaledVector(dn,a).addScaledVector(pn,o)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}const xn={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},bn={h:0,s:0,l:0},Mn={h:0,s:0,l:0};function wn(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}let En=class{constructor(t,e,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(t,e,n)}set(t,e,n){if(void 0===e&&void 0===n){const e=t;e&&e.isColor?this.copy(e):"number"==typeof e?this.setHex(e):"string"==typeof e&&this.setStyle(e);}else this.setRGB(t,e,n);return this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=rt){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,Ht.toWorkingColorSpace(this,e),this}setRGB(t,e,n,r=Ht.workingColorSpace){return this.r=t,this.g=e,this.b=n,Ht.toWorkingColorSpace(this,r),this}setHSL(t,e,n,r=Ht.workingColorSpace){if(t=wt(t,1),e=Mt(e,0,1),n=Mt(n,0,1),0===e)this.r=this.g=this.b=n;else {const r=n<=.5?n*(1+e):n+e-n*e,i=2*n-r;this.r=wn(i,r,t+1/3),this.g=wn(i,r,t),this.b=wn(i,r,t-1/3);}return Ht.toWorkingColorSpace(this,r),this}setStyle(t,e=rt){function n(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.");}let r;if(r=/^(\w+)\(([^\)]*)\)/.exec(t)){let i;const a=r[1],o=r[2];switch(a){case"rgb":case"rgba":if(i=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(255,parseInt(i[1],10))/255,Math.min(255,parseInt(i[2],10))/255,Math.min(255,parseInt(i[3],10))/255,e);if(i=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(100,parseInt(i[1],10))/100,Math.min(100,parseInt(i[2],10))/100,Math.min(100,parseInt(i[3],10))/100,e);break;case"hsl":case"hsla":if(i=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setHSL(parseFloat(i[1])/360,parseFloat(i[2])/100,parseFloat(i[3])/100,e);break;default:console.warn("THREE.Color: Unknown color model "+t);}}else if(r=/^\#([A-Fa-f\d]+)$/.exec(t)){const n=r[1],i=n.length;if(3===i)return this.setRGB(parseInt(n.charAt(0),16)/15,parseInt(n.charAt(1),16)/15,parseInt(n.charAt(2),16)/15,e);if(6===i)return this.setHex(parseInt(n,16),e);console.warn("THREE.Color: Invalid hex color "+t);}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=rt){const n=xn[t.toLowerCase()];return void 0!==n?this.setHex(n,e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=jt(t.r),this.g=jt(t.g),this.b=jt(t.b),this}copyLinearToSRGB(t){return this.r=Vt(t.r),this.g=Vt(t.g),this.b=Vt(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=rt){return Ht.fromWorkingColorSpace(Sn.copy(this),t),65536*Math.round(Mt(255*Sn.r,0,255))+256*Math.round(Mt(255*Sn.g,0,255))+Math.round(Mt(255*Sn.b,0,255))}getHexString(t=rt){return ("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=Ht.workingColorSpace){Ht.fromWorkingColorSpace(Sn.copy(this),e);const n=Sn.r,r=Sn.g,i=Sn.b,a=Math.max(n,r,i),o=Math.min(n,r,i);let s,A;const l=(o+a)/2;if(o===a)s=0,A=0;else {const t=a-o;switch(A=l<=.5?t/(a+o):t/(2-a-o),a){case n:s=(r-i)/t+(r<i?6:0);break;case r:s=(i-n)/t+2;break;case i:s=(n-r)/t+4;}s/=6;}return t.h=s,t.s=A,t.l=l,t}getRGB(t,e=Ht.workingColorSpace){return Ht.fromWorkingColorSpace(Sn.copy(this),e),t.r=Sn.r,t.g=Sn.g,t.b=Sn.b,t}getStyle(t=rt){Ht.fromWorkingColorSpace(Sn.copy(this),t);const e=Sn.r,n=Sn.g,r=Sn.b;return t!==rt?`color(${t} ${e.toFixed(3)} ${n.toFixed(3)} ${r.toFixed(3)})`:`rgb(${Math.round(255*e)},${Math.round(255*n)},${Math.round(255*r)})`}offsetHSL(t,e,n){return this.getHSL(bn),this.setHSL(bn.h+t,bn.s+e,bn.l+n)}add(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this}addColors(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this}addScalar(t){return this.r+=t,this.g+=t,this.b+=t,this}sub(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this}multiply(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this}multiplyScalar(t){return this.r*=t,this.g*=t,this.b*=t,this}lerp(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this}lerpColors(t,e,n){return this.r=t.r+(e.r-t.r)*n,this.g=t.g+(e.g-t.g)*n,this.b=t.b+(e.b-t.b)*n,this}lerpHSL(t,e){this.getHSL(bn),t.getHSL(Mn);const n=Et(bn.h,Mn.h,e),r=Et(bn.s,Mn.s,e),i=Et(bn.l,Mn.l,e);return this.setHSL(n,r,i),this}setFromVector3(t){return this.r=t.x,this.g=t.y,this.b=t.z,this}applyMatrix3(t){const e=this.r,n=this.g,r=this.b,i=t.elements;return this.r=i[0]*e+i[3]*n+i[6]*r,this.g=i[1]*e+i[4]*n+i[7]*r,this.b=i[2]*e+i[5]*n+i[8]*r,this}equals(t){return t.r===this.r&&t.g===this.g&&t.b===this.b}fromArray(t,e=0){return this.r=t[e],this.g=t[e+1],this.b=t[e+2],this}toArray(t=[],e=0){return t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t}fromBufferAttribute(t,e){return this.r=t.getX(e),this.g=t.getY(e),this.b=t.getZ(e),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b;}};const Sn=new En;En.NAMES=xn;let Tn=0;class Cn extends gt{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:Tn++}),this.uuid=bt(),this.name="",this.type="Material",this.blending=1,this.side=m,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.alphaHash=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=v,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.blendColor=new En(0,0,0),this.blendAlpha=0,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=ut,this.stencilZFail=ut,this.stencilZPass=ut,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0;}get alphaTest(){return this._alphaTest}set alphaTest(t){this._alphaTest>0!=t>0&&this.version++,this._alphaTest=t;}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(void 0!==t)for(const e in t){const n=t[e];if(void 0===n){console.warn(`THREE.Material: parameter '${e}' has value of undefined.`);continue}const r=this[e];void 0!==r?r&&r.isColor?r.set(n):r&&r.isVector3&&n&&n.isVector3?r.copy(n):this[e]=n:console.warn(`THREE.Material: '${e}' is not a property of THREE.${this.type}.`);}}toJSON(t){const e=void 0===t||"string"==typeof t;e&&(t={textures:{},images:{}});const n={metadata:{version:4.6,type:"Material",generator:"Material.toJSON"}};function r(t){const e=[];for(const n in t){const r=t[n];delete r.metadata,e.push(r);}return e}if(n.uuid=this.uuid,n.type=this.type,""!==this.name&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),void 0!==this.roughness&&(n.roughness=this.roughness),void 0!==this.metalness&&(n.metalness=this.metalness),void 0!==this.sheen&&(n.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(n.sheenColor=this.sheenColor.getHex()),void 0!==this.sheenRoughness&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),void 0!==this.emissiveIntensity&&1!==this.emissiveIntensity&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(n.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(n.specularColor=this.specularColor.getHex()),void 0!==this.shininess&&(n.shininess=this.shininess),void 0!==this.clearcoat&&(n.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),void 0!==this.iridescence&&(n.iridescence=this.iridescence),void 0!==this.iridescenceIOR&&(n.iridescenceIOR=this.iridescenceIOR),void 0!==this.iridescenceThicknessRange&&(n.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(n.iridescenceMap=this.iridescenceMap.toJSON(t).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(n.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(t).uuid),void 0!==this.anisotropy&&(n.anisotropy=this.anisotropy),void 0!==this.anisotropyRotation&&(n.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(n.anisotropyMap=this.anisotropyMap.toJSON(t).uuid),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(t).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(t).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(t).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(t).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(t).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(n.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(t).uuid,void 0!==this.combine&&(n.combine=this.combine)),void 0!==this.envMapRotation&&(n.envMapRotation=this.envMapRotation.toArray()),void 0!==this.envMapIntensity&&(n.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(n.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.transmission&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(t).uuid),void 0!==this.thickness&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(t).uuid),void 0!==this.attenuationDistance&&this.attenuationDistance!==1/0&&(n.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(n.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(n.size=this.size),null!==this.shadowSide&&(n.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(n.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(n.blending=this.blending),this.side!==m&&(n.side=this.side),!0===this.vertexColors&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),!0===this.transparent&&(n.transparent=!0),204!==this.blendSrc&&(n.blendSrc=this.blendSrc),205!==this.blendDst&&(n.blendDst=this.blendDst),this.blendEquation!==v&&(n.blendEquation=this.blendEquation),null!==this.blendSrcAlpha&&(n.blendSrcAlpha=this.blendSrcAlpha),null!==this.blendDstAlpha&&(n.blendDstAlpha=this.blendDstAlpha),null!==this.blendEquationAlpha&&(n.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(n.blendColor=this.blendColor.getHex()),0!==this.blendAlpha&&(n.blendAlpha=this.blendAlpha),3!==this.depthFunc&&(n.depthFunc=this.depthFunc),!1===this.depthTest&&(n.depthTest=this.depthTest),!1===this.depthWrite&&(n.depthWrite=this.depthWrite),!1===this.colorWrite&&(n.colorWrite=this.colorWrite),255!==this.stencilWriteMask&&(n.stencilWriteMask=this.stencilWriteMask),519!==this.stencilFunc&&(n.stencilFunc=this.stencilFunc),0!==this.stencilRef&&(n.stencilRef=this.stencilRef),255!==this.stencilFuncMask&&(n.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==ut&&(n.stencilFail=this.stencilFail),this.stencilZFail!==ut&&(n.stencilZFail=this.stencilZFail),this.stencilZPass!==ut&&(n.stencilZPass=this.stencilZPass),!0===this.stencilWrite&&(n.stencilWrite=this.stencilWrite),void 0!==this.rotation&&0!==this.rotation&&(n.rotation=this.rotation),!0===this.polygonOffset&&(n.polygonOffset=!0),0!==this.polygonOffsetFactor&&(n.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(n.polygonOffsetUnits=this.polygonOffsetUnits),void 0!==this.linewidth&&1!==this.linewidth&&(n.linewidth=this.linewidth),void 0!==this.dashSize&&(n.dashSize=this.dashSize),void 0!==this.gapSize&&(n.gapSize=this.gapSize),void 0!==this.scale&&(n.scale=this.scale),!0===this.dithering&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),!0===this.alphaHash&&(n.alphaHash=!0),!0===this.alphaToCoverage&&(n.alphaToCoverage=!0),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=!0),!0===this.forceSinglePass&&(n.forceSinglePass=!0),!0===this.wireframe&&(n.wireframe=!0),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(n.flatShading=!0),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),!1===this.fog&&(n.fog=!1),Object.keys(this.userData).length>0&&(n.userData=this.userData),e){const e=r(t.textures),i=r(t.images);e.length>0&&(n.textures=e),i.length>0&&(n.images=i);}return n}clone(){return (new this.constructor).copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.blendColor.copy(t.blendColor),this.blendAlpha=t.blendAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let r=0;r!==t;++r)n[r]=e[r].clone();}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaHash=t.alphaHash,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.forceSinglePass=t.forceSinglePass,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"});}set needsUpdate(t){!0===t&&this.version++;}}class Rn extends Cn{constructor(t){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new En(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Ve,this.combine=_,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t);}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}const Pn=new ae,Ln=new Lt;class Dn{constructor(t,e,n=!1){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,this.name="",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=n,this.usage=ht,this._updateRange={offset:0,count:-1},this.updateRanges=[],this.gpuType=V,this.version=0;}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++;}get updateRange(){return Bt("THREE.BufferAttribute: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead."),this._updateRange}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e});}clearUpdateRanges(){this.updateRanges.length=0;}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this.gpuType=t.gpuType,this}copyAt(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let r=0,i=this.itemSize;r<i;r++)this.array[t+r]=e.array[n+r];return this}copyArray(t){return this.array.set(t),this}applyMatrix3(t){if(2===this.itemSize)for(let e=0,n=this.count;e<n;e++)Ln.fromBufferAttribute(this,e),Ln.applyMatrix3(t),this.setXY(e,Ln.x,Ln.y);else if(3===this.itemSize)for(let e=0,n=this.count;e<n;e++)Pn.fromBufferAttribute(this,e),Pn.applyMatrix3(t),this.setXYZ(e,Pn.x,Pn.y,Pn.z);return this}applyMatrix4(t){for(let e=0,n=this.count;e<n;e++)Pn.fromBufferAttribute(this,e),Pn.applyMatrix4(t),this.setXYZ(e,Pn.x,Pn.y,Pn.z);return this}applyNormalMatrix(t){for(let e=0,n=this.count;e<n;e++)Pn.fromBufferAttribute(this,e),Pn.applyNormalMatrix(t),this.setXYZ(e,Pn.x,Pn.y,Pn.z);return this}transformDirection(t){for(let e=0,n=this.count;e<n;e++)Pn.fromBufferAttribute(this,e),Pn.transformDirection(t),this.setXYZ(e,Pn.x,Pn.y,Pn.z);return this}set(t,e=0){return this.array.set(t,e),this}getComponent(t,e){let n=this.array[t*this.itemSize+e];return this.normalized&&(n=Ct(n,this.array)),n}setComponent(t,e,n){return this.normalized&&(n=Rt(n,this.array)),this.array[t*this.itemSize+e]=n,this}getX(t){let e=this.array[t*this.itemSize];return this.normalized&&(e=Ct(e,this.array)),e}setX(t,e){return this.normalized&&(e=Rt(e,this.array)),this.array[t*this.itemSize]=e,this}getY(t){let e=this.array[t*this.itemSize+1];return this.normalized&&(e=Ct(e,this.array)),e}setY(t,e){return this.normalized&&(e=Rt(e,this.array)),this.array[t*this.itemSize+1]=e,this}getZ(t){let e=this.array[t*this.itemSize+2];return this.normalized&&(e=Ct(e,this.array)),e}setZ(t,e){return this.normalized&&(e=Rt(e,this.array)),this.array[t*this.itemSize+2]=e,this}getW(t){let e=this.array[t*this.itemSize+3];return this.normalized&&(e=Ct(e,this.array)),e}setW(t,e){return this.normalized&&(e=Rt(e,this.array)),this.array[t*this.itemSize+3]=e,this}setXY(t,e,n){return t*=this.itemSize,this.normalized&&(e=Rt(e,this.array),n=Rt(n,this.array)),this.array[t+0]=e,this.array[t+1]=n,this}setXYZ(t,e,n,r){return t*=this.itemSize,this.normalized&&(e=Rt(e,this.array),n=Rt(n,this.array),r=Rt(r,this.array)),this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=r,this}setXYZW(t,e,n,r,i){return t*=this.itemSize,this.normalized&&(e=Rt(e,this.array),n=Rt(n,this.array),r=Rt(r,this.array),i=Rt(i,this.array)),this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=r,this.array[t+3]=i,this}onUpload(t){return this.onUploadCallback=t,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){const t={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return ""!==this.name&&(t.name=this.name),this.usage!==ht&&(t.usage=this.usage),t}}class On extends Dn{constructor(t,e,n){super(new Uint16Array(t),e,n);}}class In extends Dn{constructor(t,e,n){super(new Uint32Array(t),e,n);}}class qn extends Dn{constructor(t,e,n){super(new Float32Array(t),e,n);}}let Un=0;const Nn=new qe,Bn=new ln,kn=new ae,Fn=new Ae,zn=new Ae,Gn=new ae;class Hn extends gt{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:Un++}),this.uuid=bt(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={};}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(It(t)?In:On)(t,1):this.index=t,this}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return void 0!==this.attributes[t]}addGroup(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n});}clearGroups(){this.groups=[];}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e;}applyMatrix4(t){const e=this.attributes.position;void 0!==e&&(e.applyMatrix4(t),e.needsUpdate=!0);const n=this.attributes.normal;if(void 0!==n){const e=(new Dt).getNormalMatrix(t);n.applyNormalMatrix(e),n.needsUpdate=!0;}const r=this.attributes.tangent;return void 0!==r&&(r.transformDirection(t),r.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this}applyQuaternion(t){return Nn.makeRotationFromQuaternion(t),this.applyMatrix4(Nn),this}rotateX(t){return Nn.makeRotationX(t),this.applyMatrix4(Nn),this}rotateY(t){return Nn.makeRotationY(t),this.applyMatrix4(Nn),this}rotateZ(t){return Nn.makeRotationZ(t),this.applyMatrix4(Nn),this}translate(t,e,n){return Nn.makeTranslation(t,e,n),this.applyMatrix4(Nn),this}scale(t,e,n){return Nn.makeScale(t,e,n),this.applyMatrix4(Nn),this}lookAt(t){return Bn.lookAt(t),Bn.updateMatrix(),this.applyMatrix4(Bn.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(kn).negate(),this.translate(kn.x,kn.y,kn.z),this}setFromPoints(t){const e=[];for(let n=0,r=t.length;n<r;n++){const r=t[n];e.push(r.x,r.y,r.z||0);}return this.setAttribute("position",new qn(e,3)),this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new Ae);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute)return console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),void this.boundingBox.set(new ae(-1/0,-1/0,-1/0),new ae(1/0,1/0,1/0));if(void 0!==t){if(this.boundingBox.setFromBufferAttribute(t),e)for(let t=0,n=e.length;t<n;t++){const n=e[t];Fn.setFromBufferAttribute(n),this.morphTargetsRelative?(Gn.addVectors(this.boundingBox.min,Fn.min),this.boundingBox.expandByPoint(Gn),Gn.addVectors(this.boundingBox.max,Fn.max),this.boundingBox.expandByPoint(Gn)):(this.boundingBox.expandByPoint(Fn.min),this.boundingBox.expandByPoint(Fn.max));}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this);}computeBoundingSphere(){null===this.boundingSphere&&(this.boundingSphere=new Se);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute)return console.error("THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.",this),void this.boundingSphere.set(new ae,1/0);if(t){const n=this.boundingSphere.center;if(Fn.setFromBufferAttribute(t),e)for(let t=0,n=e.length;t<n;t++){const n=e[t];zn.setFromBufferAttribute(n),this.morphTargetsRelative?(Gn.addVectors(Fn.min,zn.min),Fn.expandByPoint(Gn),Gn.addVectors(Fn.max,zn.max),Fn.expandByPoint(Gn)):(Fn.expandByPoint(zn.min),Fn.expandByPoint(zn.max));}Fn.getCenter(n);let r=0;for(let e=0,i=t.count;e<i;e++)Gn.fromBufferAttribute(t,e),r=Math.max(r,n.distanceToSquared(Gn));if(e)for(let i=0,a=e.length;i<a;i++){const a=e[i],o=this.morphTargetsRelative;for(let e=0,i=a.count;e<i;e++)Gn.fromBufferAttribute(a,e),o&&(kn.fromBufferAttribute(t,e),Gn.add(kn)),r=Math.max(r,n.distanceToSquared(Gn));}this.boundingSphere.radius=Math.sqrt(r),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this);}}computeTangents(){const t=this.index,e=this.attributes;if(null===t||void 0===e.position||void 0===e.normal||void 0===e.uv)return void console.error("THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)");const n=e.position,r=e.normal,i=e.uv;!1===this.hasAttribute("tangent")&&this.setAttribute("tangent",new Dn(new Float32Array(4*n.count),4));const a=this.getAttribute("tangent"),o=[],s=[];for(let t=0;t<n.count;t++)o[t]=new ae,s[t]=new ae;const A=new ae,l=new ae,c=new ae,u=new Lt,h=new Lt,f=new Lt,d=new ae,p=new ae;function m(t,e,r){A.fromBufferAttribute(n,t),l.fromBufferAttribute(n,e),c.fromBufferAttribute(n,r),u.fromBufferAttribute(i,t),h.fromBufferAttribute(i,e),f.fromBufferAttribute(i,r),l.sub(A),c.sub(A),h.sub(u),f.sub(u);const a=1/(h.x*f.y-f.x*h.y);isFinite(a)&&(d.copy(l).multiplyScalar(f.y).addScaledVector(c,-h.y).multiplyScalar(a),p.copy(c).multiplyScalar(h.x).addScaledVector(l,-f.x).multiplyScalar(a),o[t].add(d),o[e].add(d),o[r].add(d),s[t].add(p),s[e].add(p),s[r].add(p));}let g=this.groups;0===g.length&&(g=[{start:0,count:t.count}]);for(let e=0,n=g.length;e<n;++e){const n=g[e],r=n.start;for(let e=r,i=r+n.count;e<i;e+=3)m(t.getX(e+0),t.getX(e+1),t.getX(e+2));}const v=new ae,_=new ae,y=new ae,x=new ae;function b(t){y.fromBufferAttribute(r,t),x.copy(y);const e=o[t];v.copy(e),v.sub(y.multiplyScalar(y.dot(e))).normalize(),_.crossVectors(x,e);const n=_.dot(s[t])<0?-1:1;a.setXYZW(t,v.x,v.y,v.z,n);}for(let e=0,n=g.length;e<n;++e){const n=g[e],r=n.start;for(let e=r,i=r+n.count;e<i;e+=3)b(t.getX(e+0)),b(t.getX(e+1)),b(t.getX(e+2));}}computeVertexNormals(){const t=this.index,e=this.getAttribute("position");if(void 0!==e){let n=this.getAttribute("normal");if(void 0===n)n=new Dn(new Float32Array(3*e.count),3),this.setAttribute("normal",n);else for(let t=0,e=n.count;t<e;t++)n.setXYZ(t,0,0,0);const r=new ae,i=new ae,a=new ae,o=new ae,s=new ae,A=new ae,l=new ae,c=new ae;if(t)for(let u=0,h=t.count;u<h;u+=3){const h=t.getX(u+0),f=t.getX(u+1),d=t.getX(u+2);r.fromBufferAttribute(e,h),i.fromBufferAttribute(e,f),a.fromBufferAttribute(e,d),l.subVectors(a,i),c.subVectors(r,i),l.cross(c),o.fromBufferAttribute(n,h),s.fromBufferAttribute(n,f),A.fromBufferAttribute(n,d),o.add(l),s.add(l),A.add(l),n.setXYZ(h,o.x,o.y,o.z),n.setXYZ(f,s.x,s.y,s.z),n.setXYZ(d,A.x,A.y,A.z);}else for(let t=0,o=e.count;t<o;t+=3)r.fromBufferAttribute(e,t+0),i.fromBufferAttribute(e,t+1),a.fromBufferAttribute(e,t+2),l.subVectors(a,i),c.subVectors(r,i),l.cross(c),n.setXYZ(t+0,l.x,l.y,l.z),n.setXYZ(t+1,l.x,l.y,l.z),n.setXYZ(t+2,l.x,l.y,l.z);this.normalizeNormals(),n.needsUpdate=!0;}}normalizeNormals(){const t=this.attributes.normal;for(let e=0,n=t.count;e<n;e++)Gn.fromBufferAttribute(t,e),Gn.normalize(),t.setXYZ(e,Gn.x,Gn.y,Gn.z);}toNonIndexed(){function t(t,e){const n=t.array,r=t.itemSize,i=t.normalized,a=new n.constructor(e.length*r);let o=0,s=0;for(let i=0,A=e.length;i<A;i++){o=t.isInterleavedBufferAttribute?e[i]*t.data.stride+t.offset:e[i]*r;for(let t=0;t<r;t++)a[s++]=n[o++];}return new Dn(a,r,i)}if(null===this.index)return console.warn("THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."),this;const e=new Hn,n=this.index.array,r=this.attributes;for(const i in r){const a=t(r[i],n);e.setAttribute(i,a);}const i=this.morphAttributes;for(const r in i){const a=[],o=i[r];for(let e=0,r=o.length;e<r;e++){const r=t(o[e],n);a.push(r);}e.morphAttributes[r]=a;}e.morphTargetsRelative=this.morphTargetsRelative;const a=this.groups;for(let t=0,n=a.length;t<n;t++){const n=a[t];e.addGroup(n.start,n.count,n.materialIndex);}return e}toJSON(){const t={metadata:{version:4.6,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};if(t.uuid=this.uuid,t.type=this.type,""!==this.name&&(t.name=this.name),Object.keys(this.userData).length>0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const r=n[e];t.data.attributes[e]=r.toJSON(t.data);}const r={};let i=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],a=[];for(let e=0,r=n.length;e<r;e++){const r=n[e];a.push(r.toJSON(t.data));}a.length>0&&(r[e]=a,i=!0);}i&&(t.data.morphAttributes=r,t.data.morphTargetsRelative=this.morphTargetsRelative);const a=this.groups;a.length>0&&(t.data.groups=JSON.parse(JSON.stringify(a)));const o=this.boundingSphere;return null!==o&&(t.data.boundingSphere={center:o.center.toArray(),radius:o.radius}),t}clone(){return (new this.constructor).copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n&&this.setIndex(n.clone(e));const r=t.attributes;for(const t in r){const n=r[t];this.setAttribute(t,n.clone(e));}const i=t.morphAttributes;for(const t in i){const n=[],r=i[t];for(let t=0,i=r.length;t<i;t++)n.push(r[t].clone(e));this.morphAttributes[t]=n;}this.morphTargetsRelative=t.morphTargetsRelative;const a=t.groups;for(let t=0,e=a.length;t<e;t++){const e=a[t];this.addGroup(e.start,e.count,e.materialIndex);}const o=t.boundingBox;null!==o&&(this.boundingBox=o.clone());const s=t.boundingSphere;return null!==s&&(this.boundingSphere=s.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this.userData=t.userData,this}dispose(){this.dispatchEvent({type:"dispose"});}}const jn=new qe,Vn=new Ie,Wn=new Se,Xn=new ae,Qn=new ae,Yn=new ae,Zn=new ae,Kn=new ae,Jn=new ae,$n=new Lt,tr=new Lt,er=new Lt,nr=new ae,rr=new ae,ir=new ae,ar=new ae,or=new ae;class sr extends ln{constructor(t=new Hn,e=new Rn){super(),this.isMesh=!0,this.type="Mesh",this.geometry=t,this.material=e,this.updateMorphTargets();}copy(t,e){return super.copy(t,e),void 0!==t.morphTargetInfluences&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),void 0!==t.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=Array.isArray(t.material)?t.material.slice():t.material,this.geometry=t.geometry,this}updateMorphTargets(){const t=this.geometry.morphAttributes,e=Object.keys(t);if(e.length>0){const n=t[e[0]];if(void 0!==n){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,e=n.length;t<e;t++){const e=n[t].name||String(t);this.morphTargetInfluences.push(0),this.morphTargetDictionary[e]=t;}}}}getVertexPosition(t,e){const n=this.geometry,r=n.attributes.position,i=n.morphAttributes.position,a=n.morphTargetsRelative;e.fromBufferAttribute(r,t);const o=this.morphTargetInfluences;if(i&&o){Jn.set(0,0,0);for(let n=0,r=i.length;n<r;n++){const r=o[n],s=i[n];0!==r&&(Kn.fromBufferAttribute(s,t),a?Jn.addScaledVector(Kn,r):Jn.addScaledVector(Kn.sub(e),r));}e.add(Jn);}return e}raycast(t,e){const n=this.geometry,r=this.material,i=this.matrixWorld;if(void 0!==r){if(null===n.boundingSphere&&n.computeBoundingSphere(),Wn.copy(n.boundingSphere),Wn.applyMatrix4(i),Vn.copy(t.ray).recast(t.near),!1===Wn.containsPoint(Vn.origin)){if(null===Vn.intersectSphere(Wn,Xn))return;if(Vn.origin.distanceToSquared(Xn)>(t.far-t.near)**2)return}jn.copy(i).invert(),Vn.copy(t.ray).applyMatrix4(jn),null!==n.boundingBox&&!1===Vn.intersectsBox(n.boundingBox)||this._computeIntersections(t,e,Vn);}}_computeIntersections(t,e,n){let r;const i=this.geometry,a=this.material,o=i.index,s=i.attributes.position,A=i.attributes.uv,l=i.attributes.uv1,c=i.attributes.normal,u=i.groups,h=i.drawRange;if(null!==o)if(Array.isArray(a))for(let i=0,s=u.length;i<s;i++){const s=u[i],f=a[s.materialIndex];for(let i=Math.max(s.start,h.start),a=Math.min(o.count,Math.min(s.start+s.count,h.start+h.count));i<a;i+=3){r=Ar(this,f,t,n,A,l,c,o.getX(i),o.getX(i+1),o.getX(i+2)),r&&(r.faceIndex=Math.floor(i/3),r.face.materialIndex=s.materialIndex,e.push(r));}}else {for(let i=Math.max(0,h.start),s=Math.min(o.count,h.start+h.count);i<s;i+=3){r=Ar(this,a,t,n,A,l,c,o.getX(i),o.getX(i+1),o.getX(i+2)),r&&(r.faceIndex=Math.floor(i/3),e.push(r));}}else if(void 0!==s)if(Array.isArray(a))for(let i=0,o=u.length;i<o;i++){const o=u[i],f=a[o.materialIndex];for(let i=Math.max(o.start,h.start),a=Math.min(s.count,Math.min(o.start+o.count,h.start+h.count));i<a;i+=3){r=Ar(this,f,t,n,A,l,c,i,i+1,i+2),r&&(r.faceIndex=Math.floor(i/3),r.face.materialIndex=o.materialIndex,e.push(r));}}else {for(let i=Math.max(0,h.start),o=Math.min(s.count,h.start+h.count);i<o;i+=3){r=Ar(this,a,t,n,A,l,c,i,i+1,i+2),r&&(r.faceIndex=Math.floor(i/3),e.push(r));}}}}function Ar(t,e,n,r,i,a,o,s,A,l){t.getVertexPosition(s,Qn),t.getVertexPosition(A,Yn),t.getVertexPosition(l,Zn);const c=function(t,e,n,r,i,a,o,s){let A;if(A=e.side===g?r.intersectTriangle(o,a,i,!0,s):r.intersectTriangle(i,a,o,e.side===m,s),null===A)return null;or.copy(s),or.applyMatrix4(t.matrixWorld);const l=n.ray.origin.distanceTo(or);return l<n.near||l>n.far?null:{distance:l,point:or.clone(),object:t}}(t,e,n,r,Qn,Yn,Zn,ar);if(c){i&&($n.fromBufferAttribute(i,s),tr.fromBufferAttribute(i,A),er.fromBufferAttribute(i,l),c.uv=yn.getInterpolation(ar,Qn,Yn,Zn,$n,tr,er,new Lt)),a&&($n.fromBufferAttribute(a,s),tr.fromBufferAttribute(a,A),er.fromBufferAttribute(a,l),c.uv1=yn.getInterpolation(ar,Qn,Yn,Zn,$n,tr,er,new Lt)),o&&(nr.fromBufferAttribute(o,s),rr.fromBufferAttribute(o,A),ir.fromBufferAttribute(o,l),c.normal=yn.getInterpolation(ar,Qn,Yn,Zn,nr,rr,ir,new ae),c.normal.dot(r.direction)>0&&c.normal.multiplyScalar(-1));const t={a:s,b:A,c:l,normal:new ae,materialIndex:0};yn.getNormal(Qn,Yn,Zn,t.normal),c.face=t;}return c}class lr extends Hn{constructor(t=1,e=1,n=1,r=1,i=1,a=1){super(),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:n,widthSegments:r,heightSegments:i,depthSegments:a};const o=this;r=Math.floor(r),i=Math.floor(i),a=Math.floor(a);const s=[],A=[],l=[],c=[];let u=0,h=0;function f(t,e,n,r,i,a,f,d,p,m,g){const v=a/p,_=f/m,y=a/2,x=f/2,b=d/2,M=p+1,w=m+1;let E=0,S=0;const T=new ae;for(let a=0;a<w;a++){const o=a*_-x;for(let s=0;s<M;s++){const u=s*v-y;T[t]=u*r,T[e]=o*i,T[n]=b,A.push(T.x,T.y,T.z),T[t]=0,T[e]=0,T[n]=d>0?1:-1,l.push(T.x,T.y,T.z),c.push(s/p),c.push(1-a/m),E+=1;}}for(let t=0;t<m;t++)for(let e=0;e<p;e++){const n=u+e+M*t,r=u+e+M*(t+1),i=u+(e+1)+M*(t+1),a=u+(e+1)+M*t;s.push(n,r,a),s.push(r,i,a),S+=6;}o.addGroup(h,S,g),h+=S,u+=E;}f("z","y","x",-1,-1,n,e,t,a,i,0),f("z","y","x",1,-1,n,e,-t,a,i,1),f("x","z","y",1,1,t,n,e,r,a,2),f("x","z","y",1,-1,t,n,-e,r,a,3),f("x","y","z",1,-1,t,e,n,r,i,4),f("x","y","z",-1,-1,t,e,-n,r,i,5),this.setIndex(s),this.setAttribute("position",new qn(A,3)),this.setAttribute("normal",new qn(l,3)),this.setAttribute("uv",new qn(c,2));}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new lr(t.width,t.height,t.depth,t.widthSegments,t.heightSegments,t.depthSegments)}}function cr(t){const e={};for(const n in t){e[n]={};for(const r in t[n]){const i=t[n][r];i&&(i.isColor||i.isMatrix3||i.isMatrix4||i.isVector2||i.isVector3||i.isVector4||i.isTexture||i.isQuaternion)?i.isRenderTargetTexture?(console.warn("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."),e[n][r]=null):e[n][r]=i.clone():Array.isArray(i)?e[n][r]=i.slice():e[n][r]=i;}}return e}function ur(t){const e={};for(let n=0;n<t.length;n++){const r=cr(t[n]);for(const t in r)e[t]=r[t];}return e}function hr(t){return null===t.getRenderTarget()?t.outputColorSpace:Ht.workingColorSpace}const fr={clone:cr,merge:ur};class dr extends Cn{constructor(t){super(),this.isShaderMaterial=!0,this.type="ShaderMaterial",this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader="void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",this.fragmentShader="void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}",this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.forceSinglePass=!0,this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1,clipCullDistance:!1,multiDraw:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv1:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,void 0!==t&&this.setValues(t);}copy(t){return super.copy(t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=cr(t.uniforms),this.uniformsGroups=function(t){const e=[];for(let n=0;n<t.length;n++)e.push(t[n].clone());return e}(t.uniformsGroups),this.defines=Object.assign({},t.defines),this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.fog=t.fog,this.lights=t.lights,this.clipping=t.clipping,this.extensions=Object.assign({},t.extensions),this.glslVersion=t.glslVersion,this}toJSON(t){const e=super.toJSON(t);e.glslVersion=this.glslVersion,e.uniforms={};for(const n in this.uniforms){const r=this.uniforms[n].value;r&&r.isTexture?e.uniforms[n]={type:"t",value:r.toJSON(t).uuid}:r&&r.isColor?e.uniforms[n]={type:"c",value:r.getHex()}:r&&r.isVector2?e.uniforms[n]={type:"v2",value:r.toArray()}:r&&r.isVector3?e.uniforms[n]={type:"v3",value:r.toArray()}:r&&r.isVector4?e.uniforms[n]={type:"v4",value:r.toArray()}:r&&r.isMatrix3?e.uniforms[n]={type:"m3",value:r.toArray()}:r&&r.isMatrix4?e.uniforms[n]={type:"m4",value:r.toArray()}:e.uniforms[n]={value:r};}Object.keys(this.defines).length>0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader,e.lights=this.lights,e.clipping=this.clipping;const n={};for(const t in this.extensions)!0===this.extensions[t]&&(n[t]=!0);return Object.keys(n).length>0&&(e.extensions=n),e}}class pr extends ln{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new qe,this.projectionMatrix=new qe,this.projectionMatrixInverse=new qe,this.coordinateSystem=pt;}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this.coordinateSystem=t.coordinateSystem,this}getWorldDirection(t){return super.getWorldDirection(t).negate()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert();}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert();}clone(){return (new this.constructor).copy(this)}}const mr=new ae,gr=new Lt,vr=new Lt;class _r extends pr{constructor(t=50,e=1,n=.1,r=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=t,this.zoom=1,this.near=n,this.far=r,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix();}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=2*xt*Math.atan(e),this.updateProjectionMatrix();}getFocalLength(){const t=Math.tan(.5*yt*this.fov);return .5*this.getFilmHeight()/t}getEffectiveFOV(){return 2*xt*Math.atan(Math.tan(.5*yt*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(t,e,n){mr.set(-1,-1,.5).applyMatrix4(this.projectionMatrixInverse),e.set(mr.x,mr.y).multiplyScalar(-t/mr.z),mr.set(1,1,.5).applyMatrix4(this.projectionMatrixInverse),n.set(mr.x,mr.y).multiplyScalar(-t/mr.z);}getViewSize(t,e){return this.getViewBounds(t,gr,vr),e.subVectors(vr,gr)}setViewOffset(t,e,n,r,i,a){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=r,this.view.width=i,this.view.height=a,this.updateProjectionMatrix();}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix();}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(.5*yt*this.fov)/this.zoom,n=2*e,r=this.aspect*n,i=-.5*r;const a=this.view;if(null!==this.view&&this.view.enabled){const t=a.fullWidth,o=a.fullHeight;i+=a.offsetX*r/t,e-=a.offsetY*n/o,r*=a.width/t,n*=a.height/o;}const o=this.filmOffset;0!==o&&(i+=t*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(i,i+r,e,e-n,t,this.far,this.coordinateSystem),this.projectionMatrixInverse.copy(this.projectionMatrix).invert();}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}const yr=-90;class xr extends ln{constructor(t,e,n){super(),this.type="CubeCamera",this.renderTarget=n,this.coordinateSystem=null,this.activeMipmapLevel=0;const r=new _r(yr,1,t,e);r.layers=this.layers,this.add(r);const i=new _r(yr,1,t,e);i.layers=this.layers,this.add(i);const a=new _r(yr,1,t,e);a.layers=this.layers,this.add(a);const o=new _r(yr,1,t,e);o.layers=this.layers,this.add(o);const s=new _r(yr,1,t,e);s.layers=this.layers,this.add(s);const A=new _r(yr,1,t,e);A.layers=this.layers,this.add(A);}updateCoordinateSystem(){const t=this.coordinateSystem,e=this.children.concat(),[n,r,i,a,o,s]=e;for(const t of e)this.remove(t);if(t===pt)n.up.set(0,1,0),n.lookAt(1,0,0),r.up.set(0,1,0),r.lookAt(-1,0,0),i.up.set(0,0,-1),i.lookAt(0,1,0),a.up.set(0,0,1),a.lookAt(0,-1,0),o.up.set(0,1,0),o.lookAt(0,0,1),s.up.set(0,1,0),s.lookAt(0,0,-1);else {if(t!==mt)throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+t);n.up.set(0,-1,0),n.lookAt(-1,0,0),r.up.set(0,-1,0),r.lookAt(1,0,0),i.up.set(0,0,1),i.lookAt(0,1,0),a.up.set(0,0,-1),a.lookAt(0,-1,0),o.up.set(0,-1,0),o.lookAt(0,0,1),s.up.set(0,-1,0),s.lookAt(0,0,-1);}for(const t of e)this.add(t),t.updateMatrixWorld();}update(t,e){null===this.parent&&this.updateMatrixWorld();const{renderTarget:n,activeMipmapLevel:r}=this;this.coordinateSystem!==t.coordinateSystem&&(this.coordinateSystem=t.coordinateSystem,this.updateCoordinateSystem());const[i,a,o,s,A,l]=this.children,c=t.getRenderTarget(),u=t.getActiveCubeFace(),h=t.getActiveMipmapLevel(),f=t.xr.enabled;t.xr.enabled=!1;const d=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0,r),t.render(e,i),t.setRenderTarget(n,1,r),t.render(e,a),t.setRenderTarget(n,2,r),t.render(e,o),t.setRenderTarget(n,3,r),t.render(e,s),t.setRenderTarget(n,4,r),t.render(e,A),n.texture.generateMipmaps=d,t.setRenderTarget(n,5,r),t.render(e,l),t.setRenderTarget(c,u,h),t.xr.enabled=f,n.texture.needsPMREMUpdate=!0;}}class br extends Jt{constructor(t,e,n,r,i,a,o,s,A,l){super(t=void 0!==t?t:[],e=void 0!==e?e:P,n,r,i,a,o,s,A,l),this.isCubeTexture=!0,this.flipY=!1;}get images(){return this.image}set images(t){this.image=t;}}class Mr extends ee{constructor(t=1,e={}){super(t,t,e),this.isWebGLCubeRenderTarget=!0;const n={width:t,height:t,depth:1},r=[n,n,n,n,n,n];this.texture=new br(r,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.colorSpace),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=void 0!==e.generateMipmaps&&e.generateMipmaps,this.texture.minFilter=void 0!==e.minFilter?e.minFilter:B;}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.colorSpace=e.colorSpace,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include <begin_vertex>\n\t\t\t\t\t#include <project_vertex>\n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include <common>\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},r=new lr(5,5,5),i=new dr({name:"CubemapFromEquirect",uniforms:cr(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:g,blending:0});i.uniforms.tEquirect.value=e;const a=new sr(r,i),o=e.minFilter;e.minFilter===F&&(e.minFilter=B);return new xr(1,10,this).update(t,a),e.minFilter=o,a.geometry.dispose(),a.material.dispose(),this}clear(t,e,n,r){const i=t.getRenderTarget();for(let i=0;i<6;i++)t.setRenderTarget(this,i),t.clear(e,n,r);t.setRenderTarget(i);}}const wr=new ae,Er=new ae,Sr=new Dt;class Tr{constructor(t=new ae(1,0,0),e=0){this.isPlane=!0,this.normal=t,this.constant=e;}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,n,r){return this.normal.set(t,e,n),this.constant=r,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,n){const r=wr.subVectors(n,e).cross(Er.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(r,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(t).addScaledVector(this.normal,-this.distanceToPoint(t))}intersectLine(t,e){const n=t.delta(wr),r=this.normal.dot(n);if(0===r)return 0===this.distanceToPoint(t.start)?e.copy(t.start):null;const i=-(t.start.dot(this.normal)+this.constant)/r;return i<0||i>1?null:e.copy(t.start).addScaledVector(n,i)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||Sr.getNormalMatrix(t),r=this.coplanarPoint(wr).applyMatrix4(t),i=this.normal.applyMatrix3(n).normalize();return this.constant=-r.dot(i),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return (new this.constructor).copy(this)}}const Cr=new Se,Rr=new ae;class Pr{constructor(t=new Tr,e=new Tr,n=new Tr,r=new Tr,i=new Tr,a=new Tr){this.planes=[t,e,n,r,i,a];}set(t,e,n,r,i,a){const o=this.planes;return o[0].copy(t),o[1].copy(e),o[2].copy(n),o[3].copy(r),o[4].copy(i),o[5].copy(a),this}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t,e=2e3){const n=this.planes,r=t.elements,i=r[0],a=r[1],o=r[2],s=r[3],A=r[4],l=r[5],c=r[6],u=r[7],h=r[8],f=r[9],d=r[10],p=r[11],m=r[12],g=r[13],v=r[14],_=r[15];if(n[0].setComponents(s-i,u-A,p-h,_-m).normalize(),n[1].setComponents(s+i,u+A,p+h,_+m).normalize(),n[2].setComponents(s+a,u+l,p+f,_+g).normalize(),n[3].setComponents(s-a,u-l,p-f,_-g).normalize(),n[4].setComponents(s-o,u-c,p-d,_-v).normalize(),e===pt)n[5].setComponents(s+o,u+c,p+d,_+v).normalize();else {if(e!==mt)throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+e);n[5].setComponents(o,c,d,v).normalize();}return this}intersectsObject(t){if(void 0!==t.boundingSphere)null===t.boundingSphere&&t.computeBoundingSphere(),Cr.copy(t.boundingSphere).applyMatrix4(t.matrixWorld);else {const e=t.geometry;null===e.boundingSphere&&e.computeBoundingSphere(),Cr.copy(e.boundingSphere).applyMatrix4(t.matrixWorld);}return this.intersectsSphere(Cr)}intersectsSprite(t){return Cr.center.set(0,0,0),Cr.radius=.7071067811865476,Cr.applyMatrix4(t.matrixWorld),this.intersectsSphere(Cr)}intersectsSphere(t){const e=this.planes,n=t.center,r=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(n)<r)return !1}return !0}intersectsBox(t){const e=this.planes;for(let n=0;n<6;n++){const r=e[n];if(Rr.x=r.normal.x>0?t.max.x:t.min.x,Rr.y=r.normal.y>0?t.max.y:t.min.y,Rr.z=r.normal.z>0?t.max.z:t.min.z,r.distanceToPoint(Rr)<0)return !1}return !0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return !1;return !0}clone(){return (new this.constructor).copy(this)}}function Lr(){let t=null,e=!1,n=null,r=null;function i(e,a){n(e,a),r=t.requestAnimationFrame(i);}return {start:function(){!0!==e&&null!==n&&(r=t.requestAnimationFrame(i),e=!0);},stop:function(){t.cancelAnimationFrame(r),e=!1;},setAnimationLoop:function(t){n=t;},setContext:function(e){t=e;}}}function Dr(t,e){const n=e.isWebGL2,r=new WeakMap;return {get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),r.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const n=r.get(e);n&&(t.deleteBuffer(n.buffer),r.delete(e));},update:function(e,i){if(e.isGLBufferAttribute){const t=r.get(e);return void((!t||t.version<e.version)&&r.set(e,{buffer:e.buffer,type:e.type,bytesPerElement:e.elementSize,version:e.version}))}e.isInterleavedBufferAttribute&&(e=e.data);const a=r.get(e);if(void 0===a)r.set(e,function(e,r){const i=e.array,a=e.usage,o=i.byteLength,s=t.createBuffer();let A;if(t.bindBuffer(r,s),t.bufferData(r,i,a),e.onUploadCallback(),i instanceof Float32Array)A=t.FLOAT;else if(i instanceof Uint16Array)if(e.isFloat16BufferAttribute){if(!n)throw new Error("THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.");A=t.HALF_FLOAT;}else A=t.UNSIGNED_SHORT;else if(i instanceof Int16Array)A=t.SHORT;else if(i instanceof Uint32Array)A=t.UNSIGNED_INT;else if(i instanceof Int32Array)A=t.INT;else if(i instanceof Int8Array)A=t.BYTE;else if(i instanceof Uint8Array)A=t.UNSIGNED_BYTE;else {if(!(i instanceof Uint8ClampedArray))throw new Error("THREE.WebGLAttributes: Unsupported buffer data format: "+i);A=t.UNSIGNED_BYTE;}return {buffer:s,type:A,bytesPerElement:i.BYTES_PER_ELEMENT,version:e.version,size:o}}(e,i));else if(a.version<e.version){if(a.size!==e.array.byteLength)throw new Error("THREE.WebGLAttributes: The size of the buffer attribute's array buffer does not match the original size. Resizing buffer attributes is not supported.");!function(e,r,i){const a=r.array,o=r._updateRange,s=r.updateRanges;if(t.bindBuffer(i,e),-1===o.count&&0===s.length&&t.bufferSubData(i,0,a),0!==s.length){for(let e=0,r=s.length;e<r;e++){const r=s[e];n?t.bufferSubData(i,r.start*a.BYTES_PER_ELEMENT,a,r.start,r.count):t.bufferSubData(i,r.start*a.BYTES_PER_ELEMENT,a.subarray(r.start,r.start+r.count));}r.clearUpdateRanges();}-1!==o.count&&(n?t.bufferSubData(i,o.offset*a.BYTES_PER_ELEMENT,a,o.offset,o.count):t.bufferSubData(i,o.offset*a.BYTES_PER_ELEMENT,a.subarray(o.offset,o.offset+o.count)),o.count=-1),r.onUploadCallback();}(a.buffer,e,i),a.version=e.version;}}}}class Or extends Hn{constructor(t=1,e=1,n=1,r=1){super(),this.type="PlaneGeometry",this.parameters={width:t,height:e,widthSegments:n,heightSegments:r};const i=t/2,a=e/2,o=Math.floor(n),s=Math.floor(r),A=o+1,l=s+1,c=t/o,u=e/s,h=[],f=[],d=[],p=[];for(let t=0;t<l;t++){const e=t*u-a;for(let n=0;n<A;n++){const r=n*c-i;f.push(r,-e,0),d.push(0,0,1),p.push(n/o),p.push(1-t/s);}}for(let t=0;t<s;t++)for(let e=0;e<o;e++){const n=e+A*t,r=e+A*(t+1),i=e+1+A*(t+1),a=e+1+A*t;h.push(n,r,a),h.push(r,i,a);}this.setIndex(h),this.setAttribute("position",new qn(f,3)),this.setAttribute("normal",new qn(d,3)),this.setAttribute("uv",new qn(p,2));}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new Or(t.width,t.height,t.widthSegments,t.heightSegments)}}const Ir={alphahash_fragment:"#ifdef USE_ALPHAHASH\n\tif ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;\n#endif",alphahash_pars_fragment:"#ifdef USE_ALPHAHASH\n\tconst float ALPHA_HASH_SCALE = 0.05;\n\tfloat hash2D( vec2 value ) {\n\t\treturn fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );\n\t}\n\tfloat hash3D( vec3 value ) {\n\t\treturn hash2D( vec2( hash2D( value.xy ), value.z ) );\n\t}\n\tfloat getAlphaHashThreshold( vec3 position ) {\n\t\tfloat maxDeriv = max(\n\t\t\tlength( dFdx( position.xyz ) ),\n\t\t\tlength( dFdy( position.xyz ) )\n\t\t);\n\t\tfloat pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv );\n\t\tvec2 pixScales = vec2(\n\t\t\texp2( floor( log2( pixScale ) ) ),\n\t\t\texp2( ceil( log2( pixScale ) ) )\n\t\t);\n\t\tvec2 alpha = vec2(\n\t\t\thash3D( floor( pixScales.x * position.xyz ) ),\n\t\t\thash3D( floor( pixScales.y * position.xyz ) )\n\t\t);\n\t\tfloat lerpFactor = fract( log2( pixScale ) );\n\t\tfloat x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y;\n\t\tfloat a = min( lerpFactor, 1.0 - lerpFactor );\n\t\tvec3 cases = vec3(\n\t\t\tx * x / ( 2.0 * a * ( 1.0 - a ) ),\n\t\t\t( x - 0.5 * a ) / ( 1.0 - a ),\n\t\t\t1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) )\n\t\t);\n\t\tfloat threshold = ( x < ( 1.0 - a ) )\n\t\t\t? ( ( x < a ) ? cases.x : cases.y )\n\t\t\t: cases.z;\n\t\treturn clamp( threshold , 1.0e-6, 1.0 );\n\t}\n#endif",alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;\n#endif",alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",alphatest_fragment:"#ifdef USE_ALPHATEST\n\t#ifdef ALPHA_TO_COVERAGE\n\tdiffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a );\n\tif ( diffuseColor.a == 0.0 ) discard;\n\t#else\n\tif ( diffuseColor.a < alphaTest ) discard;\n\t#endif\n#endif",alphatest_pars_fragment:"#ifdef USE_ALPHATEST\n\tuniform float alphaTest;\n#endif",aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_CLEARCOAT ) \n\t\tclearcoatSpecularIndirect *= ambientOcclusion;\n\t#endif\n\t#if defined( USE_SHEEN ) \n\t\tsheenSpecularIndirect *= ambientOcclusion;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometryNormal, geometryViewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\n\t#endif\n#endif",aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif",batching_pars_vertex:"#ifdef USE_BATCHING\n\tattribute float batchId;\n\tuniform highp sampler2D batchingTexture;\n\tmat4 getBatchingMatrix( const in float i ) {\n\t\tint size = textureSize( batchingTexture, 0 ).x;\n\t\tint j = int( i ) * 4;\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\tvec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 );\n\t\tvec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 );\n\t\tvec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 );\n\t\tvec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 );\n\t\treturn mat4( v1, v2, v3, v4 );\n\t}\n#endif",batching_vertex:"#ifdef USE_BATCHING\n\tmat4 batchingMatrix = getBatchingMatrix( batchId );\n#endif",begin_vertex:"vec3 transformed = vec3( position );\n#ifdef USE_ALPHAHASH\n\tvPosition = vec3( position );\n#endif",beginnormal_vertex:"vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif",bsdfs:"float G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n} // validated",iridescence_fragment:"#ifdef USE_IRIDESCENCE\n\tconst mat3 XYZ_TO_REC709 = mat3(\n\t\t 3.2404542, -0.9692660,  0.0556434,\n\t\t-1.5371385,  1.8760108, -0.2040259,\n\t\t-0.4985314,  0.0415560,  1.0572252\n\t);\n\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\n\t\tvec3 sqrtF0 = sqrt( fresnel0 );\n\t\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\n\t}\n\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\n\t}\n\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\n\t}\n\tvec3 evalSensitivity( float OPD, vec3 shift ) {\n\t\tfloat phase = 2.0 * PI * OPD * 1.0e-9;\n\t\tvec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\n\t\tvec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\n\t\tvec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\n\t\tvec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\n\t\txyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\n\t\txyz /= 1.0685e-7;\n\t\tvec3 rgb = XYZ_TO_REC709 * xyz;\n\t\treturn rgb;\n\t}\n\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\n\t\tvec3 I;\n\t\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\n\t\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\n\t\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\n\t\tif ( cosTheta2Sq < 0.0 ) {\n\t\t\treturn vec3( 1.0 );\n\t\t}\n\t\tfloat cosTheta2 = sqrt( cosTheta2Sq );\n\t\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\n\t\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\n\t\tfloat T121 = 1.0 - R12;\n\t\tfloat phi12 = 0.0;\n\t\tif ( iridescenceIOR < outsideIOR ) phi12 = PI;\n\t\tfloat phi21 = PI - phi12;\n\t\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );\t\tvec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\n\t\tvec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\n\t\tvec3 phi23 = vec3( 0.0 );\n\t\tif ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\n\t\tif ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\n\t\tif ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\n\t\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\n\t\tvec3 phi = vec3( phi21 ) + phi23;\n\t\tvec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\n\t\tvec3 r123 = sqrt( R123 );\n\t\tvec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\n\t\tvec3 C0 = R12 + Rs;\n\t\tI = C0;\n\t\tvec3 Cm = Rs - T121;\n\t\tfor ( int m = 1; m <= 2; ++ m ) {\n\t\t\tCm *= r123;\n\t\t\tvec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\n\t\t\tI += Cm * Sm;\n\t\t}\n\t\treturn max( I, vec3( 0.0 ) );\n\t}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vBumpMapUv );\n\t\tvec2 dSTdy = dFdy( vBumpMapUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + 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 = normalize( dFdx( surf_pos.xyz ) );\n\t\tvec3 vSigmaY = normalize( dFdy( surf_pos.xyz ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#ifdef ALPHA_TO_COVERAGE\n\t\tfloat distanceToPlane, distanceGradient;\n\t\tfloat clipOpacity = 1.0;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\tclipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\tif ( clipOpacity == 0.0 ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tfloat unionClipOpacity = 1.0;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\t\tunionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tclipOpacity *= 1.0 - unionClipOpacity;\n\t\t#endif\n\t\tdiffuseColor.a *= clipOpacity;\n\t\tif ( diffuseColor.a == 0.0 ) discard;\n\t#else\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tbool clipped = true;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tif ( clipped ) discard;\n\t\t#endif\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\n#ifdef USE_ALPHAHASH\n\tvarying vec3 vPosition;\n#endif\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat luminance( const in vec3 rgb ) {\n\tconst vec3 weights = vec3( 0.2126729, 0.7151522, 0.0721750 );\n\treturn dot( weights, rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n} // validated",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\t\t#ifdef texture2DGradEXT\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n\t\t#else\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\t\t#endif\n\t}\n\t#define cubeUV_r0 1.0\n\t#define cubeUV_m0 - 2.0\n\t#define cubeUV_r1 0.8\n\t#define cubeUV_m1 - 1.0\n\t#define cubeUV_r4 0.4\n\t#define cubeUV_m4 2.0\n\t#define cubeUV_r5 0.305\n\t#define cubeUV_m5 3.0\n\t#define cubeUV_r6 0.21\n\t#define cubeUV_m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= cubeUV_r1 ) {\n\t\t\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n\t\t} else if ( roughness >= cubeUV_r4 ) {\n\t\t\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n\t\t} else if ( roughness >= cubeUV_r5 ) {\n\t\t\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n\t\t} else if ( roughness >= cubeUV_r6 ) {\n\t\t\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = objectTangent;\n#endif\n#ifdef USE_BATCHING\n\tmat3 bm = mat3( batchingMatrix );\n\ttransformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\n\ttransformedNormal = bm * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = bm * transformedTangent;\n\t#endif\n#endif\n#ifdef USE_INSTANCING\n\tmat3 im = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\n\ttransformedNormal = im * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = im * transformedTangent;\n\t#endif\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\ttransformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",colorspace_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",colorspace_pars_fragment:"\nconst mat3 LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = mat3(\n\tvec3( 0.8224621, 0.177538, 0.0 ),\n\tvec3( 0.0331941, 0.9668058, 0.0 ),\n\tvec3( 0.0170827, 0.0723974, 0.9105199 )\n);\nconst mat3 LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = mat3(\n\tvec3( 1.2249401, - 0.2249404, 0.0 ),\n\tvec3( - 0.0420569, 1.0420571, 0.0 ),\n\tvec3( - 0.0196376, - 0.0786361, 1.0982735 )\n);\nvec4 LinearSRGBToLinearDisplayP3( in vec4 value ) {\n\treturn vec4( value.rgb * LINEAR_SRGB_TO_LINEAR_DISPLAY_P3, value.a );\n}\nvec4 LinearDisplayP3ToLinearSRGB( in vec4 value ) {\n\treturn vec4( value.rgb * LINEAR_DISPLAY_P3_TO_LINEAR_SRGB, value.a );\n}\nvec4 LinearTransferOETF( in vec4 value ) {\n\treturn value;\n}\nvec4 sRGBTransferOETF( 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 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn sRGBTransferOETF( value );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform mat3 envMapRotation;\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",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#ifdef USE_ENVMAP\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\t#ifdef USE_ANISOTROPY\n\t\tvec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\n\t\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\t\tvec3 bentNormal = cross( bitangent, viewDir );\n\t\t\t\tbentNormal = normalize( cross( bentNormal, bitangent ) );\n\t\t\t\tbentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\n\t\t\t\treturn getIBLRadiance( viewDir, bentNormal, roughness );\n\t\t\t#else\n\t\t\t\treturn vec3( 0.0 );\n\t\t\t#endif\n\t\t}\n\t#endif\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\t#else\n\t\tvec2 fw = fwidth( coord ) * 0.5;\n\t\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\treflectedLight.indirectDiffuse += lightMapIrradiance;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_fragment:"LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;",lights_lambert_pars_fragment:"varying vec3 vViewPosition;\nstruct LambertMaterial {\n\tvec3 diffuseColor;\n\tfloat specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Lambert\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Lambert",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\n#if defined( USE_LIGHT_PROBES )\n\tuniform vec3 lightProbe[ 9 ];\n#endif\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 += s