@realsee/five
Version:
Realsee Renderer SDK
255 lines • 36.8 kB
JavaScript
/**
* @license
* @realsee/five
* Generated: 10/8/2026
* Version: 6.9.2
* Terms:
* Realsee SDK License Agreement
* Update: July 28, 2021
* THIS LICENSE AGREEMENT BETWEEN YOU AND 【BEIKE REALSEE TECHNOLOGY (HK)
* LIMITED】(“Realsee”) FORMS A LEGALLY BINDING CONTRACT BETWEEN YOU AND REALSEE IN
* RELATION TO YOUR USE OF THE SDK. This License Agreement accompanies the Realsee
* Software Development Kit(s) for the software and related explanatory materials
* (the "SDK") and includes any upgrades, modified versions, updates, additions,
* and copies of the SDK licensed to You by Realsee.
* BY DOWNLOADING, INSTALLING, OR OTHERWISE ACCESSING OR USING THE SDK, YOU AGREE
* THAT YOU HAVE READ, UNDERSTOOD, AND AGREE TO BE BOUND BY THIS AGREEMENT. YOU ARE
* AGREEING ON YOUR OWN BEHALF AND/OR ON BEHALF OF YOUR COMPANY OR ORGANIZATION TO
* THE TERMS AND CONDITIONS STATED BELOW.
* This Agreement applies to Your use of the SDK in the country in which You
* legally install it (“Territory”) and is subject to the laws of such Territory
* and further subject to Section 12 below. Different terms, conditions, and
* limitations may apply to the use of the SDK in any additional countries.
* 1. DEFINITIONS.
* “Agreement” means this Realsee SDK License Agreement.
* “Developer”, “You” and “Your” means the person(s) or entity acquiring or using
* the SDK or otherwise exercising rights under the terms of this Agreement.
* “Documentation” means the technical or other specifications or documentation
* that Realsee may provide to You for use in connection with the SDK.
* “Integrated Product” means any software, website, or on-line service developed
* by You based on or using the SDK (collectively, the “Integrated Product”).
* “Intellectual Property” means any patents, patent rights, trademarks, service
* marks, registered and unregistered designs, applications for any of the
* foregoing, copyright, and any other similar protected rights in any country and
* to the extent recognised by any relevant jurisdiction as intellectual property,
* trade secrets, know-how and confidential information. Realsee reserves all
* rights not expressly granted to You.
* “Realsee” means [Beike Realsee Technology (HK) Limited, a company incorporated
* and validly existing under the laws of Hong Kong].
* “SDK” means the Realsee-proprietary Software Development Kits (SDK) provided
* hereunder, includes all development tools (including any compiler and debugger),
* application programming interfaces (“APIs”), libraries, binary utilities, header
* files, Documentation, content, data, code samples, and other materials provided
* to You in connection with this Agreement, whether delivered through a download,
* or any other media or form, and is licensed, not sold, to You by Realsee for use
* only under the terms of this Agreement. The terms of this Agreement will govern
* any updates provided by Realsee that replace and/or supplement the original SDK
* delivered to You, unless such update is accompanied by a separate license, in
* which case the terms of such license will govern.
* 2. LICENSED USES AND RESTRICTIONS.
* 2.1 Subject to the restrictions contained in this Section 2, Realsee grants to
* You during the term, a limited, non-exclusive, revocable, non-sublicensable,
* non-transferable license to install and use the SDK within the Territory only
* for the purpose of internal development.
* 2.2 Restrictions. You acknowledge and agree that, You shall not, and shall
* ensure that Your affiliates, employees, agents, representatives, officers,
* representatives, and subcontractors do not (directly or indirectly):
* 2.2.1 decompile, reverse engineer, disassemble or attempt to derive the source
* code of, those components of the SDK provided in object code form, or any part
* thereof;
* 2.2.2 remove, alter, or obscure any copyright notice or other proprietary rights
* notice on any part of the SDK;
* 2.2.3 sell, assign, pledge, rent, lease, lend, upload to or host on any website
* or server for use by any third party except You, redistribute, or sublicense the
* SDK (or any part thereof), or operate the SDK (or any part thereof) in the
* capacity of a service bureau or other hosted services provider, in whole or in
* part, nor may You enable others to do so;
* 2.2.4 or alter, modify, customize or improve the SDK, or any part thereof;
* 2.2.5 use the SDK (or any part thereof) for any illegal purpose, in any manner
* that is inconsistent with the terms of this Agreement, or to engage in any
* illegal activity;
* 2.2.6 use the SDK (or any part thereof) in any manner that may damage the
* operation of Realsee’s products or services; or
* 2.2.7 use the SDK or any information contained therein or otherwise provided by
* Realsee for the purpose of developing, or having developed, any product
* competitive with any Realsee product or service, as determined by Realsee in its
* sole discretion;
* 2.2.8 include any portion of the SDK in Your Developer products.
* 2.3 Realsee has the right to impose reasonable conditions such as a reasonable
* fee for use of the SDK in Integrated Product in the future.
* 2.4 You may make a limited number of copies of the SDK to be used by Your
* employees or consultants as provided herein, and not for general business
* purposes, and such employees or consultants shall be subject to the obligations
* and restrictions in this Agreement.
* 2.5 All licenses not expressly granted in this Agreement are reserved and no
* other licenses, immunity, or rights, express or implied, are granted by Realsee,
* by implication, estoppel, or otherwise.
* 3. CONFIDENTIALITY.
* The SDK and all source code, Documentation, specifications, engineering details,
* and related information pertaining to the SDK, whether in oral, written,
* graphic, or electronic form, are and shall remain the confidential and
* proprietary information of Realsee or its licensors (collectively, the
* “Confidential Information”). You shall (i) disclose Confidential Information to
* only those directors and employees (collectively, “Affiliates”) whose duties
* justify their need to know such information and who have been clearly informed
* of their obligation to maintain the confidential, proprietary, and/or trade
* secret status of such Confidential Information; and (ii) use Confidential
* Information solely in accordance with the license granted hereunder. In any
* event, You and Your Affiliates shall treat Confidential Information as strictly
* confidential and shall use the same care to prevent disclosure of such
* information as You use with respect to Your own similar confidential and/or
* proprietary information, which shall not be less than the care a reasonable
* person would use under similar circumstances. All Confidential Information, and
* any copies thereof, shall be returned promptly to Realsee upon request. You
* shall ensure that Your Affiliates comply with the provisions of this Section 3,
* and You shall be liable for any breach of this Section 3 resulting from the act
* or omission of any of Your Affiliates. You shall not disclose Confidential
* Information to any third party, including, without limitation, any of Your
* subcontractors.
* 4. PROPRIETARY RIGHTS.
* 4.1 As between You and Realsee, Realsee and/or its licensors retain ownership of
* all right, title, and interest in, to, and under the SDK, including, without
* limitation, all patents, copyrights, trade secrets, trademarks and other
* intellectual property and other proprietary rights therein, and reserve all
* rights not expressly granted to You.
* 4.2 The items contained in the SDK are the intellectual property of Realsee and
* its licensors and are protected by PRC copyright and patent law, international
* treaty provisions and applicable laws of the country in which it is being used.
* You agree to protect all copyright and other ownership interests of Realsee
* and/or its licensors in all items in the SDK supplied under this License
* Agreement. You agree that all copies of the items in the SDK, reproduced for any
* reason by You, contain the same copyright notices, and other proprietary notices
* as appropriate, as appear on or in the original items delivered by Realsee in
* the SDK. Realsee and/or its licensors retain title and ownership of the items in
* the SDK, the media on which it is loaded, and all subsequent copies, regardless
* of the form or media in or on which the original and other copies may exist.
* Except as stated above, this Agreement does not grant You any rights to patents,
* copyrights, trade secrets, trademarks or any other rights in respect to the
* items in the SDK.
* 5. TERM AND TERMINATION.
* 5.1 This Agreement is effective until terminated. Realsee has the right to
* terminate this Agreement immediately, without judicial intervention, if You fail
* to comply with any term herein. Upon any such termination You must remove all
* full and partial copies of the items in the SDK from Your computer and
* discontinue the use of the items in the SDK.
* 5.2 Realsee may at any time, terminate the Agreement with You if: (A) You have
* breached any provision of the Agreement; or (B) Realsee is required to do so by
* law; or (C) Realsee decides to no longer provide the SDK or certain parts of the
* SDK to users in the country in which You are resident or from which You use the
* service, or the provision of the SDK or certain SDK services to You by Realsee
* is, in Realsee's sole discretion, no longer legally or commercially viable.
* 5.3 When the Agreement comes to an end, all of the legal rights, obligations and
* liabilities that You and Realsee have benefited from, been subject to (or which
* have accrued over time whilst the Agreement has been in force) or which are
* expressed to continue indefinitely, shall be unaffected by this cessation, and
* the provisions of Section 3, 4, 6, 7 and 8 shall continue to apply to such
* rights, obligations and liabilities indefinitely.
* 6. DISCLAIMER OF WARRANTY.
* YOU EXPRESSLY ACKNOWLEDGE AND AGREE THAT, TO THE EXTENT PERMITTED BY APPLICABLE
* LAW, USE OF THE SDK (OR ANY PART THEREOF) IS AT YOUR SOLE RISK AND THAT THE
* ENTIRE RISK AS TO SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, AND EFFORT IS
* WITH YOU. REALSEE LICENSES THE SDK TO YOU ONLY ON AN "AS-IS" BASIS. REALSEE
* MAKES NO REPRESENTATION WITH RESPECT TO THE ADEQUACY OF ANY ITEMS IN THE SDK,
* WHETHER OR NOT USED BY YOU IN THE DEVELOPMENT OF INTEGRATED PRODUCT, FOR ANY
* PARTICULAR PURPOSE OR WITH RESPECT TO THEIR ADEQUACY TO PRODUCE ANY PARTICULAR
* RESULT. REALSEE AND ITS LICENSORS SHALL NOT BE LIABLE FOR LOSS OR DAMAGE ARISING
* OUT OF THIS AGREEMENT OR FROM THE DISTRIBUTION OR USE OF INTEGRATED PRODUCT
* CONTAINING PORTIONS OF THE SDK. REALSEE AND ITS LICENSORS DISCLAIM ALL
* WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO IMPLIED
* CONDITIONS OR WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* OR NONINFRINGEMENT OF ANY THIRD PARTY RIGHT IN RESPECT OF THE ITEMS IN THE SDK
* OR ANY SERVICES RELATED TO THE SDK.
* REALSEE IS UNDER NO OBLIGATION TO PROVIDE ANY SUPPORT UNDER THIS LICENSE
* AGREEMENT, INCLUDING UPGRADES OR FUTURE VERSIONS OF THE SDK OR ANY PORTIONS
* THEREOF, TO YOU, END USER OR TO ANY OTHER PARTY.
* 7. LIMITATION OF LIABILITY.
* TO THE EXTENT NOT PROHIBITED BY APPLICABLE LAW, IN NO EVENT WILL REALSEE OR ITS
* LICENSORS BE LIABLE FOR ANY DIRECT, INCIDENTAL, SPECIAL, INDIRECT, OR
* CONSEQUENTIAL DAMAGES, INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF USE,
* LOSS OF BUSINESS, REVENUE, OR PROFITS, LOSS OF OPPORTUNITY (WHETHER DIRECT OR
* INDIRECT), CORRUPTION OR LOSS OF DATA, LOSS OF REPUTATION OR SAVINGS, DOWNTIME,
* OR DAMAGE TO, LOSS OF OR REPLACEMENT OF DATA OR TRANSACTIONS, COST OF
* PROCUREMENT OF SUBSTITUTE SERVICES, BUSINESS INTERRUPTION, OR ANY OTHER
* COMMERCIAL DAMAGES OR LOSSES, ARISING OUT OF OR RELATED TO YOUR USE OR INABILITY
* TO USE THE SDK (OR ANY PART THEREOF), ANY INTEGRATED PRODUCT, OR ANY THIRD PARTY
* SOFTWARE, APPLICATIONS, OR SERVICES IN CONJUNCTION WITH THE SDK (OR ANY PART
* THEREOF), HOWEVER CAUSED, REGARDLESS OF THE THEORY OF LIABILITY (CONTRACT, TORT,
* OR OTHERWISE) AND EVEN IF REALSEE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGES. IN NO EVENT WILL REALSEE’S TOTAL LIABILITY TO YOU FOR ALL DAMAGES
* EXCEED ONE HUNDRED DOLLARS ($100.00). THE FOREGOING LIMITATIONS WILL APPLY EVEN
* IF THE ABOVE STATED REMEDY FAILS OF ITS ESSENTIAL PURPOSE. THE LIMITATIONS
* CONTAINED IN SECTIONS 6 AND THIS SECTION 7 ARE A FUNDAMENTAL PART OF THE BASIS
* OF REALSEE’S BARGAIN HEREUNDER, AND REALSEE WOULD NOT ENTER INTO THIS AGREEMENT
* OR PROVIDE YOU WITH ACCESS TO THE SDK ABSENT SUCH LIMITATIONS.
* 8. INDEMNIFICATION.
* To the extent permitted by applicable law, You agree to indemnify, defend and
* hold harmless Realsee, its affiliates and each of their directors, officers,
* employees, independent contractors, and agents (each a “Realsee Indemnified
* Party”) from any and all claims, losses, liabilities, damages, expenses, and
* costs (including without limitation attorneys’ fees and court costs) incurred by
* a Realsee Indemnified Party as a result of: (i) Your non-compliance with any
* terms of this Agreement; (ii) Your use of the SDK (or any part thereof); or
* (iii) Your use of any Integrated Product, including any claim that Integrated
* Product infringes the copyright, trademark, trade secret or other intellectual
* property right of a third party.
* 9. ACKNOWLEDGEMENTS.
* Portions of the SDK may utilize or include third party software and other
* copyrighted material. Acknowledgments, licensing terms, and disclaimers for such
* material are contained in Documentation for the SDK or may otherwise accompany
* such material, and Your use of such materials governed by their respective
* terms. In the event of conflict between the terms of this Agreement and an
* applicable open source or third party agreement, the open source or third party
* agreement will control solely with respect to the open source software or third
* party software. Moreover, You shall not subject any items (including not limited
* to source code, object code, and any software) included in the SDK to any open
* source license.
* 10. NON-BLOCKING OF REALSEE DEVELOPMENT.
* You acknowledge that Realsee is currently developing or may develop technologies
* and products in the future that have or may have design and/or functionality
* similar to Integrated Product that You may develop based on Your license herein.
* Nothing in this Agreement shall impair, limit or curtail Realsee's right to
* continue with its development, maintenance and/or distribution of Realsee's
* technology or products.
* 11. GENERAL.
* 11.1 Export Control. You may not use or otherwise export or re-export the SDK
* (or any part thereof) except as authorized by United States law and the laws of
* the jurisdiction(s) in which the SDK (or any part thereof) was obtained. In
* particular, but without limitation, the SDK may not be exported or re-exported
* (i) into any U.S. embargoed countries or (ii) to anyone on the U.S. Treasury
* Department's list of Specially Designated Nationals or the U.S. Department of
* Commerce Denied Person's List or Entity List. By using the SDK (or any part
* thereof), You represent and warrant that You are not located in any such country
* or on any such list.
* 11.2 Governing Law. This Agreement and the rights of the parties hereunder shall
* be governed by and construed in accordance with the laws of People’s Republic of
* China (for purpose of this Agreement, excluding Hong Kong, Taiwan, and Macau),
* without reference to its conflict of laws principles. Any dispute, controversy
* or claim arising from or in connection with this Agreement, or the breach,
* termination or invalidity thereof, shall be submitted to China International
* Economic and Trade Arbitration Commission (“CIETAC”) for arbitration in Beijing
* which shall be conducted in accordance with the CIETAC's arbitration rules in
* effect at the time of applying for arbitration. The arbitral award is final and
* binding upon both parties.
* 11.3 Severability. If any provision of this Agreement is held by a court of
* competent jurisdiction to be unenforceable for any reason, the remaining
* provisions hereof will be unaffected and remain in full force and effect.
* 11.4. Modifications. Realsee reserves the right, from time to time, with or
* without notice to You, to make revisions to this Agreement in our sole and
* absolute discretion. The most current version of this Agreement will supersede
* all previous versions and shall be made available on the website where the SDK
* is made available, or by such other means as Realsee may determine in its
* discretion. Any modified versions of this Agreement hereto shall take effect
* from the time that it is made available. You shall be responsible for regularly
* checking for notice of any such modifications. You agree that Your continued use
* of the SDK constitutes Your agreement to the modified Agreement.
* 11.5 Relationship of the Parties. This Agreement will not be construed as
* creating an agency, partnership, joint venture, fiduciary duty, or any other
* form of legal association between You and Realsee, and You will not represent to
* the contrary, whether expressly, by implication, appearance, or otherwise.
* 11.6 Entire Agreement; Governing Language. This Agreement constitutes the entire
* agreement between You and Realsee with respect to the use of the SDK licensed
* hereunder and supersedes all prior understandings regarding such subject matter.
* No amendment to or modification of this Agreement will be binding unless in
* writing and signed by Realsee. You and Realsee hereto confirm that this
* Agreement and all related documents shall be drafted in English.
*/(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`react`),require(`three`),require(`@realsee/five`)):typeof define==`function`&&define.amd?define([`exports`,`react`,`three`,`@realsee/five`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.FiveSDK_React={},e.React,e.THREE,e.FiveSDK))})(this,function(e,t,n,r){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var i=Object.create,a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,c=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty,u=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=s(t),c=0,u=i.length,d;c<u;c++)d=i[c],!l.call(e,d)&&d!==n&&a(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(r=o(t,d))||r.enumerable});return e},d=(e,t,n)=>(n=e==null?{}:i(c(e)),u(t||!e||!e.__esModule?a(n,`default`,{value:e,enumerable:!0}):n,e));t=d(t,1),n=d(n,1);var f=[],p=[],m=null,h=3e3;function g({preserveDrawingBuffer:e,premultipliedAlpha:t,stencil:r,antialias:i,webgl2:a,logarithmicDepthBuffer:o,precision:s,powerPreference:c}){let l={antialias:i,alpha:!0,depth:!0,preserveDrawingBuffer:e,stencil:r,premultipliedAlpha:t,powerPreference:c},u={logarithmicDepthBuffer:o,precision:s},d;if(a){let e=document.createElement(`canvas`),t=e.getContext(`webgl2`,l);t?d=new n.WebGLRenderer(Object.assign(Object.assign(Object.assign({},l),u),{canvas:e,context:t})):(console.error(`error occurred when getting webgl2 canvas context, maybe webgl2 not supported, fallback to webgl.`),d=new n.WebGLRenderer(Object.assign(Object.assign({},l),u)))}else d=new n.WebGLRenderer(Object.assign(Object.assign({},l),u));return d.outputEncoding=n.sRGBEncoding,d.autoClear=!0,d}function _({preserveDrawingBuffer:e=!0,premultipliedAlpha:t=!0,stencil:n=!0,antialias:r=!1,webgl2:i=!1,logarithmicDepthBuffer:a,precision:o,powerPreference:s,backgroundColor:c=1579548,backgroundAlpha:l=1,pixelRatio:u}={}){if(typeof window>`u`)return;m&&(clearTimeout(m),m=null);let d;return d=i?p.shift():f.shift(),d||(d=g({preserveDrawingBuffer:e,premultipliedAlpha:t,stencil:n,antialias:r,webgl2:i,logarithmicDepthBuffer:a,precision:o,powerPreference:s})),u!==void 0&&d.setPixelRatio(u),d.setClearColor(c,l),d.autoClear=!0,d}function v(e){e&&(e.capabilities.isWebGL2?p.indexOf(e)===-1&&p.push(e):f.indexOf(e)===-1&&f.push(e),y())}function y(e=h){m&&clearTimeout(m),m=setTimeout(()=>{m=null,b()},e)}function b(){for(let e of f)e.dispose();for(let e of p)e.dispose();f.length=0,p.length=0}var x=t.createContext(null);function S(){let e=t.useContext(x);if(!e)throw Error(`FiveProvider never found.`);return e.five}function C(){let e=t.useContext(x);if(!e)throw Error(`FiveProvider never found.`);return e.loadWork}function w(e,t){let n=Array.isArray(e)?e:[e],r=Array.isArray(t)?t:[t];if(n.length!==r.length)return!1;for(let e=0;e<n.length;e++)if(n[e].workCode!==r[e].workCode)return!1;return!0}function T(e={}){let t=(0,r.getViewportScale)()===1?window.devicePixelRatio:1,i=e.backgroundColor;return{webgl2:e.webgl2,preserveDrawingBuffer:e.preserveDrawingBuffer,antialias:e.antialias,logarithmicDepthBuffer:e.logarithmicDepthBuffer,precision:e.precision,powerPreference:e.powerPreference,backgroundColor:(i instanceof n.Color,i),backgroundAlpha:e.backgroundAlpha,pixelRatio:t}}function E(e={}){return class extends t.Component{constructor(t){super(t),this.__fiveEventDisposers=[],this.__fiveDisposeTimer=null,this.five=new r.Five(Object.assign(Object.assign({},e),{renderer:void 0})),this.loadWork=this.loadWork.bind(this),this.state={}}loadWork(e,t,n,r=!0){if(this.props.work)throw Error(`props 'works' is set in fiveProvider, if you need modify work internal, use 'initialWork' instead.`);return this.five.load(e,t,n,r)}shouldComponentUpdate(e){return this.five.renderer&&this.five&&e.work&&!w(e.work,this.five.works)&&this.five.load(e.work,e.initialState,e.initialOptions),!0}componentDidMount(){var t;clearTimeout(this.__fiveDisposeTimer),this.__fiveDisposeTimer=null;let n;typeof window<`u`&&(n=_(T(e))),this.five.renderer=n,this.setState({renderer:n}),this.__fiveEventDisposers.push(this.five.on(`load`,()=>{this.props.onWorksChange&&this.props.onWorksChange(this.five.works)})),this.__fiveEventDisposers.push(this.five.on(`stateChange`,(e,t)=>{this.props.onStateChange&&this.props.onStateChange(e,t)})),this.__fiveEventDisposers.push(this.five.on(`currentStateChange`,(e,t)=>{this.props.onCurrentStateChange&&this.props.onCurrentStateChange(e,t)})),this.__fiveEventDisposers.push(this.five.on(`error`,e=>{this.props.onError?this.props.onError(e):console.warn(e.message)}));let r=this.props.work||this.props.initialWork;r&&this.five.load(r,this.props.initialState,this.props.initialOptions,(t=this.props.initialUserAction)==null?!0:t)}componentWillUnmount(){var e;(e=this.five.controller)==null||e.destroy();let t=this.five.renderer;this.five.renderer=void 0,v(t),this.setState({renderer:void 0}),this.__fiveDisposeTimer=setTimeout(()=>{this.__fiveDisposeTimer=null,this.five.dispose()},1e3)}render(){let e=this.five,n=this.loadWork,r=this.state.renderer;return t.createElement(x.Provider,{value:{renderer:r,five:e,loadWork:n}},this.props.children)}}}var D=typeof window<`u`?t.useLayoutEffect:t.useEffect,O={display:`inline-block`,overflow:`hidden`},k=({width:e,height:n})=>{let r=S(),i=t.createRef(),a=Object.assign({width:e,height:n},O);return D(()=>{let t=i.current;if(!t||!r.renderer)return;let a=r.renderer.domElement;if(a.parentNode!==null&&a.parentNode!==t)throw Error(`There are more than 2 fiveCanvas in this context.`);return a.parentNode!==t&&t.appendChild(a),r.camera.aspect=e/n,r.camera.updateProjectionMatrix(),r.renderer.setSize(e,n),r.refresh({width:e,height:n}),r.needsRender=!0,()=>{a.parentNode===t&&t.removeChild(a)}},[r,r.renderer,e,n,i.current]),t.createElement(`div`,{ref:i,style:a})},A=({children:e})=>{let n=S(),r=t.useRef(null);return t.useEffect(()=>{let e=r.current;if(!e||!n.renderer)return;let t=n.renderer.domElement;e.appendChild(t);let i=()=>{var t;let{width:r,height:i}=e.getBoundingClientRect();r===0||i===0||(n.camera.aspect=r/i,n.camera.updateProjectionMatrix(),(t=n.renderer)==null||t.setSize(r,i),n.refresh({width:r,height:i}),n.needsRender=!0)},a=new ResizeObserver(i);return a.observe(e),i(),()=>{t.parentNode===e&&e.removeChild(t),a.unobserve(e),a.disconnect()}},[]),t.createElement(`div`,{ref:r,style:{position:`absolute`,top:0,left:0,right:0,bottom:0}},e)},j=({renderChildren:e,load:n,children:r,fallback:i})=>{let a=t.useContext(x),o=a==null?void 0:a.five,[s,c]=t.useState(!!e),[l,u]=t.useState(!1);return t.useEffect(()=>{o&&o.getElement()&&(c(!0),n&&n(o).then(e=>{o.load(...e)}))},[o]),t.useEffect(()=>{if(!o)return;let e=()=>u(!0);return o.on(`works.load`,e),o.works&&o.works.length>0&&u(!0),()=>{o.off(`works.load`,e)}},[o]),!o||!l&&!e||!s?i==null?null:t.createElement(t.Fragment,null,i):t.createElement(t.Fragment,null,r)},M={position:`relative`,width:`100vw`,height:`100vh`,overflow:`hidden`},N={backgroundAlpha:1,backgroundColor:0,imageOptions:{size:512},textureOptions:{autoResize:!1},preserveDrawingBuffer:!0,webgl2:!0},P=({fiveInitArgs:e=N,renderChildren:n,plugins:r,load:i,children:a,fullscreen:o,autoCanvas:s=!0,fallback:c})=>{let[l]=t.useState(()=>E(Object.assign(Object.assign({},e),{plugins:r}))),u=[];s&&u.push(t.createElement(A,{key:`auto-canvas`})),a&&u.push(a);let d=t.createElement(l,null,t.createElement(j,{load:i,renderChildren:n,fallback:c},...u));return o?t.createElement(`div`,{style:M},d):d};function ee(){return S()}function F(e,n){let r=S(),i=[r];n!==void 0&&(i=i.concat(n)),t.useLayoutEffect(()=>e(r.scene),i)}var I=F;function L(){let e=S(),n=C(),[r,i]=t.useState(()=>e.works);return t.useLayoutEffect(()=>e.on(`load`,()=>i(e.works)),[e]),[r,n]}function R(e){return Object.assign({},e.state)}function te(){let e=S(),[n,r]=t.useState(()=>R(e)),i=t.useCallback((t,n=!1,r=!0)=>{let i=typeof t==`function`?t(e.getCurrentState()):t;e.setState(i,n,r)},[e]);return t.useLayoutEffect(()=>e.on(`stateChange`,()=>r(R(e))),[e]),[n,i]}function ne(){let e=S(),[n,r]=t.useState(()=>e.getCurrentState()),i=t.useCallback((t,n=!1,r=!0)=>{let i=typeof t==`function`?t(e.getCurrentState()):t;e.setState(i,n,r)},[e]);return t.useLayoutEffect(()=>e.on(`currentStateChange`,()=>r(e.getCurrentState())),[e]),[n,i]}function re(){let e=S(),[n,r]=t.useState(()=>e.getCurrentState());return t.useLayoutEffect(()=>e.on(`currentStateChange`,()=>r(e.getCurrentState())),[e]),e.works.getObserver(n)}function ie(e,n,r){let i=S(),a=[i,e];r!==void 0&&(a=a.concat(r)),t.useLayoutEffect(()=>i.on(e,n),a)}function ae(){let e=S();return{updateCamera:t.useCallback((t,n)=>e.updateCamera(t,n),[e]),getPixels:t.useCallback(e.getPixels.bind(e),[e]),render:t.useCallback(t=>e.render(t),[e]),needsRender:t.useCallback(()=>e.needsRender=!0,[e]),preloadPano:t.useCallback((t,n)=>e.preloadPano(t,n),[e])}}function oe(){let e=S(),[n,r]=t.useState(()=>Symbol());return t.useLayoutEffect(()=>e.on(`cameraUpdate`,()=>r(Symbol())),[e]),t.useCallback((t,n)=>e.project2d(t,n),[e])}function z(e){let t=e.camera.getWorldDirection(new n.Vector3);return new n.Raycaster(e.camera.position,t)}function se(){let e=S(),[n,r]=t.useState(()=>z(e));return t.useLayoutEffect(()=>e.on(`cameraUpdate`,()=>r(z(e))),[e]),n}function B(e){return e.camera.getWorldDirection(new n.Vector3)}function V(){let e=S(),[n,r]=t.useState(()=>B(e));return t.useLayoutEffect(()=>e.on(`cameraUpdate`,()=>r(B(e))),[e]),n}function H(){let e=S();return t.useCallback(t=>e.model.intersectRaycaster(t),[e])}function U(e){return e.model.empty?`Empty`:`Loaded`}function W(){let e=S(),[n,r]=t.useState(()=>U(e));return t.useLayoutEffect(()=>e.on(`modelLoaded`,()=>r(U(e))),[e]),n}var G=new Map,K=new Map;function q(e){let t=K.get(e);t&&t.forEach(e=>e())}function ce(e,t){return K.has(e)||K.set(e,new Set),K.get(e).add(t),()=>{let n=K.get(e);n&&(n.delete(t),n.size===0&&K.delete(e))}}function J(e,t){return`${e}:${t}`}function le(e,t){var n;return(n=G.get(J(e,t)))==null?void 0:n.plugin}function ue(e,t,n){G.set(J(e,t),{plugin:n}),q(e)}function de(e,n){var r,i;let a=S(),o=(i=(r=a.work)==null?void 0:r.workCode)==null?``:i,s=J(o,e),c=(0,t.useRef)(a),[,l]=(0,t.useState)(0);return(0,t.useEffect)(()=>{if(o)return ce(o,()=>l(e=>e+1))},[o]),(0,t.useEffect)(()=>{if(c.current===a)return;c.current=a;let t=G.get(s);if(!t)return;let r=t.plugin;if(n!=null&&n.reCreateOnFiveChange&&n.createPlugin){typeof r.dispose==`function`&&r.dispose();let t=n.createPlugin(a);G.set(s,{plugin:t}),a.plugins[e]=t,q(o)}else r&&(typeof r.updateFive==`function`?r.updateFive(a):`five`in r&&(r.five=a))},[a]),(0,t.useCallback)(()=>{let t=G.get(s);if(t)return a.plugins[e]=t.plugin,t.plugin;let r=a.plugins[e];if(r)return G.set(s,{plugin:r}),r;if(n!=null&&n.createPlugin){let t=n.createPlugin(a);return G.set(s,{plugin:t}),a.plugins[e]=t,q(o),t}},[s,a,n==null?void 0:n.createPlugin])()}function fe(){let e=S(),[n,r]=t.useState(e.model.shownFloor),[i,a]=t.useState(e.model.floorLength),o=t.useCallback(t=>{typeof t==`number`?e.model.show(t):e.model.show()},[e]);return t.useLayoutEffect(()=>{let t=[];return t.push(e.on(`modelShownFloorChange`,()=>r(e.model.shownFloor))),t.push(e.on(`modelLoaded`,()=>a(e.model.floorLength))),()=>{let e;for(;e=t.shift();)e()}},[e]),[n,i,o]}function pe(){let e=S(),[n,r]=t.useState(e.helperVisible),i=t.useCallback(t=>{e.helperVisible=t},[e]);return t.useLayoutEffect(()=>e.on(`helpersVisibleChange`,e=>r(e)),[e]),[n,i]}var me=`$five`;function Y(e,t){return t.indexOf(e)>=0}function X(e,t){for(let n of Object.keys(t))t[n]!==void 0&&(e[n]=t[n])}function he(e,n){let r=Y(`state`,n),[i,a]=t.useState(Symbol()),o=t.useMemo(()=>{if(r)return Object.assign({},e.state)},[e,i]);return t.useLayoutEffect(()=>{if(r)return e.on(`stateChange`,()=>a(Symbol()))},[e]),[o,i]}function ge(e,n){let r=Y(`currentState`,n),[i,a]=t.useState(Symbol()),o=t.useMemo(()=>{if(r)return e.getCurrentState()},[e,i]);return t.useLayoutEffect(()=>{if(r)return e.on(`currentStateChange`,()=>a(Symbol()))},[e]),[o,i]}function _e(e,n){let r=Y(`currentObserver`,n),[i,a]=t.useState(Symbol()),o=t.useMemo(()=>{if(r)return e.getCurrentState()},[e,i]);t.useLayoutEffect(()=>{if(r)return e.on(`currentStateChange`,()=>a(Symbol()))},[e]);let s;return o&&(s=e.works.getObserver(o)),[s,i]}function ve(e,t){return[Y(`unsafe__fiveInstance`,t)?e:void 0]}function Z(e,n){let r=Y(`works`,n),[i,a]=t.useState(Symbol()),o=t.useMemo(()=>{if(r)return e.works},[e,i]);return t.useLayoutEffect(()=>{if(r)return e.on(`load`,()=>a(Symbol()))},[e]),[o,i]}function ye(e,n){let r=Y(`model`,n),[i,a]=t.useState(Symbol()),o=t.useMemo(()=>{if(r)return e.model},[e,i]);return t.useLayoutEffect(()=>{if(r)return e.on(`modelLoaded`,()=>a(Symbol()))},[e]),[o,i]}function be(e,t){return[Y(`scene`,t)?e.scene:void 0]}function xe(e,r){let i=Y(`cameraDirection`,r),[a,o]=t.useState(Symbol()),s=t.useMemo(()=>{if(i)return e.camera.getWorldDirection(new n.Vector3)},[e,a]);return t.useLayoutEffect(()=>{if(i)return e.on(`cameraUpdate`,()=>o(Symbol()))},[e]),[s,a]}function Se(e,r){let i=Y(`cameraRaycaster`,r),[a,o]=t.useState(Symbol()),s=t.useMemo(()=>{if(i){let t=e.camera.getWorldDirection(new n.Vector3);return new n.Raycaster(e.camera.position,t)}},[e,a]);return t.useLayoutEffect(()=>{if(i)return e.on(`cameraUpdate`,()=>o(Symbol()))},[e]),[s,a]}function Ce(e,n){let r=Y(`modelReadyState`,n),[i,a]=t.useState(Symbol()),o=t.useMemo(()=>{if(r)return e.model.empty?`Empty`:`Loaded`},[e,i]);return t.useLayoutEffect(()=>{if(r)return e.on(`modelLoaded`,()=>a(Symbol()))},[e]),[o,i]}function we(e,n){let r=Y(`shownFloor`,n),[i,a]=t.useState(Symbol()),o=t.useMemo(()=>{if(r)return e.model.shownFloor},[e,i]);return t.useLayoutEffect(()=>{if(r)return e.on(`modelShownFloorChange`,()=>a(Symbol()))},[e]),[o,i]}function Te(e,n){let r=Y(`helperVisible`,n),[i,a]=t.useState(Symbol()),o=t.useMemo(()=>{if(r)return e.helperVisible},[e,i]);return t.useLayoutEffect(()=>{if(r)return e.on(`helpersVisibleChange`,()=>a(Symbol()))},[e]),[o,i]}function Ee(e,t){if(Y(`loadWork`,t))return e}function De(e,t){if(Y(`setState`,t))return(...t)=>e.setState(...t)}function Oe(e,t){if(Y(`on`,t))return(...t)=>e.on(...t)}function ke(e,t){if(Y(`on`,t))return(...t)=>e.once(...t)}function Ae(e,t){if(Y(`off`,t))return(...t)=>e.off(...t)}function je(e,t){if(Y(`intersectRaycaster`,t))return(...t)=>e.model.intersectRaycaster(...t)}function Me(e,t){if(Y(`project2d`,t))return(...t)=>e.project2d(...t)}function Ne(e,t){if(Y(`updateCamera`,t))return(...t)=>e.updateCamera(...t)}function Pe(e,t){if(Y(`getPixels`,t))return e.getPixels.bind(e)}function Fe(e,t){if(Y(`render`,t))return(...t)=>e.render(...t)}function Ie(e,t){if(Y(`needsRender`,t))return()=>{e.needsRender=!0}}function Le(e,t){if(Y(`preloadPano`,t))return(...t)=>e.preloadPano(...t)}function Re(e,t){if(Y(`showFloor`,t))return t=>{typeof t==`number`?e.model.show(t):e.model.show()}}function ze(e,t){if(Y(`toggleHelperVisible`,t))return t=>{e.helperVisible=t}}function Be(e){return function(n){return t.forwardRef((r,i)=>{let a=S(),o=C(),[s]=ve(a,e),[c,l]=he(a,e),[u,d]=ge(a,e),[f,p]=_e(a,e),[m,h]=Z(a,e),[g,_]=ye(a,e),[v]=be(a,e),[y,b]=xe(a,e),[x,w]=Se(a,e),[T,E]=Ce(a,e),[D,O]=we(a,e),[k,A]=Te(a,e),j=t.useMemo(()=>{let t={};return X(t,{setState:De(a,e),loadWork:Ee(o,e),on:Oe(a,e),once:ke(a,e),off:Ae(a,e),intersectRaycaster:je(a,e),project2d:Me(a,e),updateCamera:Ne(a,e),getPixels:Pe(a,e),render:Fe(a,e),needsRender:Ie(a,e),preloadPano:Le(a,e),showFloor:Re(a,e),toggleHelperVisible:ze(a,e)}),t},[a,o]),M=t.useMemo(()=>{let e=Object.assign({},j);return X(e,{unsafe__fiveInstance:s,state:c,currentState:u,currentObserver:f,work:m,model:g,scene:v,cameraDirection:y,cameraRaycaster:x,modelReadyState:T,shownFloor:D,helperVisible:k}),e},[a,j,l,d,p,h,_,b,w,E,O,A]);return t.createElement(n,Object.assign({ref:i,$five:M},r))})}}function Ve(...e){return e}function Q(e,t){let n={},r=t.length,i=-1;for(;++i<r;){let r=t[i];r in e&&(n[r]=e[r])}return n}function He(e,t){return typeof e==`number`&&typeof t==`number`&&isNaN(e)&&isNaN(t)?!0:e===t}function Ue(e,t){for(let n=0;n<e.length;n++)for(let r=0;r<t.length;r++)if(e[n]===t[r])return!0;return!1}var $=class{constructor(e,t){this.values=e,this.listeners=[],this.onValuesChange=t}on(e,t){let n=[e,t];return this.listeners.push(n),()=>{let e=this.listeners.indexOf(n);e>=0&&this.listeners.splice(e,1)}}getValues(e){return Q(this.values,e)}setValues(e,t){let n=[];for(let r in t)e.indexOf(r)>=0&&!He(t[r],this.values[r])&&n.push(r);if(n.length===0)return;let r=Object.assign({},this.values);for(let e of n)this.values[e]=t[e];this.onValuesChange&&this.onValuesChange(this.values,r);for(let[e,t]of this.listeners){if(!Ue(e,n))continue;let i=Q(r,e);t(Q(this.values,e),i)}}};function We(e){let n=t.createContext(null);return{useStore(e){let r=t.useContext(n);if(r===null)throw Error(`StoreProvider never found.`);let i=t.useRef(!0),[a,o]=t.useState(r.getValues(e)),s=[r,...e];return t.useLayoutEffect(()=>(i.current?i.current=!1:o(r.getValues(e)),r.on(e,e=>o(e))),s),[a,t.useCallback(t=>r.setValues(e,t),s)]},useStoreSetter(e){let r=t.useContext(n);if(r===null)throw Error(`StoreProvider never found.`);return t.useCallback(t=>r.setValues(e,t),[r,...e])},watchStore(e,r,i){let a=t.useContext(n);if(a===null)throw Error(`StoreProvider never found.`);let o=[a,...e];i!==void 0&&(o=o.concat(i)),t.useLayoutEffect(()=>a.on(e,r),o)},useStoreAction(r){let i=t.useContext(n);if(i===null)throw Error(`StoreProvider never found.`);return t.useCallback((...t)=>{let[n,...a]=e[r];return n(()=>i.getValues(a),e=>i.setValues(a,e),...t)},[])},StoreProvider:class extends t.Component{constructor(e){super(e),this.store=new $(e.initialValue,(...e)=>{this.props.onValuesChange&&this.props.onValuesChange(...e)})}shouldComponentUpdate(e){return e.children!==this.props.children}render(){return t.createElement(n.Provider,{value:this.store},this.props.children)}}}}e.FiveApp=P,e.FiveAutoCanvas=A,e.FiveCanvas=k,e.INJECTION_PROPNAME=me,e.Store=$,e.createFiveFeature=Ve,e.createFiveProvider=E,e.createStore=We,e.getPlugin=le,e.setPlugin=ue,e.unsafe__useFiveInstance=ee,e.useFiveAction=ae,e.useFiveCameraDirection=V,e.useFiveCameraRaycaster=se,e.useFiveCurrentObserver=re,e.useFiveCurrentState=ne,e.useFiveEventCallback=ie,e.useFiveFloor=fe,e.useFiveHelper=pe,e.useFiveModelIntersectRaycaster=H,e.useFiveModelReadyState=W,e.useFivePlugin=de,e.useFiveProject2d=oe,e.useFiveScene=I,e.useFiveSceneEffect=F,e.useFiveState=te,e.useFiveWork=L,e.withFive=Be});