@realsee/five-webgpu 1.0.0-alpha.11 → 1.0.0-alpha.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/{TERMS.txt → LICENSE.txt} +89 -24
  2. package/_virtual/_rolldown/runtime.js +134 -51
  3. package/docs/classes/index.Five.html +23 -23
  4. package/five/application/renderPoweredByRealsee.d.ts +2 -2
  5. package/five/index.js +136 -53
  6. package/five/index.mjs +233 -86
  7. package/five/renderer/postprocessing/passes/pass.js +134 -51
  8. package/five/renderer/postprocessing/passes/pass.mjs +134 -51
  9. package/five/renderer/tools/full-screen-quad.js +134 -51
  10. package/five/renderer/tools/full-screen-quad.mjs +134 -51
  11. package/five/utils/calculateThreeMouse.js +134 -51
  12. package/five/utils/calculateThreeMouse.mjs +134 -51
  13. package/five/utils/distance.js +134 -51
  14. package/five/utils/distance.mjs +134 -51
  15. package/five/utils/isNil.js +134 -51
  16. package/five/utils/isNil.mjs +134 -51
  17. package/five/utils/uuid.js +134 -51
  18. package/five/utils/uuid.mjs +134 -51
  19. package/gltf-loader/index.js +135 -52
  20. package/gltf-loader/index.mjs +135 -52
  21. package/line/index.js +135 -52
  22. package/line/index.mjs +135 -52
  23. package/package.json +2 -2
  24. package/plugins/BackgroundPlugin/Controller.js +134 -51
  25. package/plugins/BackgroundPlugin/Controller.mjs +134 -51
  26. package/plugins/BackgroundPlugin/index.js +134 -51
  27. package/plugins/BackgroundPlugin/index.mjs +134 -51
  28. package/plugins/BasePlugin/index.js +134 -51
  29. package/plugins/BasePlugin/index.mjs +134 -51
  30. package/plugins/CSS2DPlugin/Controller.js +134 -51
  31. package/plugins/CSS2DPlugin/Controller.mjs +134 -51
  32. package/plugins/CSS2DPlugin/index.js +134 -51
  33. package/plugins/CSS2DPlugin/index.mjs +134 -51
  34. package/plugins/CSS2DPlugin/style.css_raw.js +134 -51
  35. package/plugins/CSS2DPlugin/style.css_raw.mjs +134 -51
  36. package/plugins/CSS3DPlugin/Controller.js +134 -51
  37. package/plugins/CSS3DPlugin/Controller.mjs +134 -51
  38. package/plugins/CSS3DPlugin/index.js +134 -51
  39. package/plugins/CSS3DPlugin/index.mjs +134 -51
  40. package/plugins/CSS3DPlugin/style.css_raw.js +134 -51
  41. package/plugins/CSS3DPlugin/style.css_raw.mjs +134 -51
  42. package/plugins/FloorplanPlugin/Controller.js +134 -51
  43. package/plugins/FloorplanPlugin/Controller.mjs +134 -51
  44. package/plugins/FloorplanPlugin/index.js +134 -51
  45. package/plugins/FloorplanPlugin/index.mjs +134 -51
  46. package/plugins/FloorplanPlugin/render/assets.js +134 -51
  47. package/plugins/FloorplanPlugin/render/assets.mjs +134 -51
  48. package/plugins/FloorplanPlugin/render/index.js +134 -51
  49. package/plugins/FloorplanPlugin/render/index.mjs +134 -51
  50. package/plugins/FloorplanPlugin/render/isPointInPolygon.js +134 -51
  51. package/plugins/FloorplanPlugin/render/isPointInPolygon.mjs +134 -51
  52. package/plugins/FloorplanPlugin/render/renderFloor.js +134 -51
  53. package/plugins/FloorplanPlugin/render/renderFloor.mjs +134 -51
  54. package/plugins/FloorplanPlugin/render/roomLabelVisibility.js +134 -51
  55. package/plugins/FloorplanPlugin/render/roomLabelVisibility.mjs +134 -51
  56. package/plugins/FloorplanPlugin/render/style.css_raw.js +134 -51
  57. package/plugins/FloorplanPlugin/render/style.css_raw.mjs +134 -51
  58. package/plugins/FloorplanPlugin/utils/changeMode.js +134 -51
  59. package/plugins/FloorplanPlugin/utils/changeMode.mjs +134 -51
  60. package/plugins/FloorplanPlugin/utils/changeModelCanvasOpacity.js +134 -51
  61. package/plugins/FloorplanPlugin/utils/changeModelCanvasOpacity.mjs +134 -51
  62. package/plugins/FloorplanPlugin/utils/correctFiveState.js +134 -51
  63. package/plugins/FloorplanPlugin/utils/correctFiveState.mjs +134 -51
  64. package/plugins/FloorplanPlugin/utils/equal.js +134 -51
  65. package/plugins/FloorplanPlugin/utils/equal.mjs +134 -51
  66. package/plugins/FloorplanPlugin/utils/filter.js +134 -51
  67. package/plugins/FloorplanPlugin/utils/filter.mjs +134 -51
  68. package/plugins/FloorplanPlugin/utils/fiveModelLoad.js +134 -51
  69. package/plugins/FloorplanPlugin/utils/fiveModelLoad.mjs +134 -51
  70. package/plugins/FloorplanPlugin/utils/formatData.js +134 -51
  71. package/plugins/FloorplanPlugin/utils/formatData.mjs +134 -51
  72. package/plugins/FloorplanPlugin/utils/formatFloorplanJson.js +134 -51
  73. package/plugins/FloorplanPlugin/utils/formatFloorplanJson.mjs +134 -51
  74. package/plugins/FloorplanPlugin/utils/formatPosition.js +134 -51
  75. package/plugins/FloorplanPlugin/utils/formatPosition.mjs +134 -51
  76. package/plugins/FloorplanPlugin/utils/getDistanceFromModel.js +134 -51
  77. package/plugins/FloorplanPlugin/utils/getDistanceFromModel.mjs +134 -51
  78. package/plugins/FloorplanPlugin/utils/getPxmm.js +134 -51
  79. package/plugins/FloorplanPlugin/utils/getPxmm.mjs +134 -51
  80. package/plugins/FloorplanPlugin/utils/isTruelyObject.js +134 -51
  81. package/plugins/FloorplanPlugin/utils/isTruelyObject.mjs +134 -51
  82. package/plugins/FloorplanPlugin/utils/nearlyEqual.js +134 -51
  83. package/plugins/FloorplanPlugin/utils/nearlyEqual.mjs +134 -51
  84. package/plugins/FloorplanPlugin/utils/polylabel.js +134 -51
  85. package/plugins/FloorplanPlugin/utils/polylabel.mjs +134 -51
  86. package/plugins/FloorplanPlugin/utils/to.js +134 -51
  87. package/plugins/FloorplanPlugin/utils/to.mjs +134 -51
  88. package/plugins/GaussianSplattingEntranceAnimationPlugin/Controller.js +134 -51
  89. package/plugins/GaussianSplattingEntranceAnimationPlugin/Controller.mjs +134 -51
  90. package/plugins/GaussianSplattingEntranceAnimationPlugin/index.js +134 -51
  91. package/plugins/GaussianSplattingEntranceAnimationPlugin/index.mjs +134 -51
  92. package/plugins/Object3DHelperPlugin/Controller.js +134 -51
  93. package/plugins/Object3DHelperPlugin/Controller.mjs +134 -51
  94. package/plugins/Object3DHelperPlugin/Controllers/BaseController.js +134 -51
  95. package/plugins/Object3DHelperPlugin/Controllers/BaseController.mjs +134 -51
  96. package/plugins/Object3DHelperPlugin/Controllers/BoundingBoxController.js +134 -51
  97. package/plugins/Object3DHelperPlugin/Controllers/BoundingBoxController.mjs +134 -51
  98. package/plugins/Object3DHelperPlugin/Controllers/MoveController.js +134 -51
  99. package/plugins/Object3DHelperPlugin/Controllers/MoveController.mjs +134 -51
  100. package/plugins/Object3DHelperPlugin/Controllers/RotateController.js +134 -51
  101. package/plugins/Object3DHelperPlugin/Controllers/RotateController.mjs +134 -51
  102. package/plugins/Object3DHelperPlugin/FiveControllerWrapper.js +134 -51
  103. package/plugins/Object3DHelperPlugin/FiveControllerWrapper.mjs +134 -51
  104. package/plugins/Object3DHelperPlugin/Helper/BaseHelper.js +134 -51
  105. package/plugins/Object3DHelperPlugin/Helper/BaseHelper.mjs +134 -51
  106. package/plugins/Object3DHelperPlugin/Helper/BoundingBoxHelper.js +134 -51
  107. package/plugins/Object3DHelperPlugin/Helper/BoundingBoxHelper.mjs +134 -51
  108. package/plugins/Object3DHelperPlugin/Helper/MoveHelper.js +134 -51
  109. package/plugins/Object3DHelperPlugin/Helper/MoveHelper.mjs +134 -51
  110. package/plugins/Object3DHelperPlugin/Helper/RotateHelper.js +134 -51
  111. package/plugins/Object3DHelperPlugin/Helper/RotateHelper.mjs +134 -51
  112. package/plugins/Object3DHelperPlugin/constant.js +134 -51
  113. package/plugins/Object3DHelperPlugin/constant.mjs +134 -51
  114. package/plugins/Object3DHelperPlugin/index.js +134 -51
  115. package/plugins/Object3DHelperPlugin/index.mjs +134 -51
  116. package/plugins/Object3DHelperPlugin/utils/ArrowGroup.js +134 -51
  117. package/plugins/Object3DHelperPlugin/utils/ArrowGroup.mjs +134 -51
  118. package/plugins/Object3DHelperPlugin/utils/CenterHandle.js +134 -51
  119. package/plugins/Object3DHelperPlugin/utils/CenterHandle.mjs +134 -51
  120. package/plugins/Object3DHelperPlugin/utils/PlaneHandle.js +134 -51
  121. package/plugins/Object3DHelperPlugin/utils/PlaneHandle.mjs +134 -51
  122. package/plugins/Object3DHelperPlugin/utils/calculateScaleByCamera.js +134 -51
  123. package/plugins/Object3DHelperPlugin/utils/calculateScaleByCamera.mjs +134 -51
  124. package/plugins/Object3DHelperPlugin/utils/cameraHooks.js +134 -51
  125. package/plugins/Object3DHelperPlugin/utils/cameraHooks.mjs +134 -51
  126. package/plugins/Object3DHelperPlugin/utils/direction.js +134 -51
  127. package/plugins/Object3DHelperPlugin/utils/direction.mjs +134 -51
  128. package/plugins/Object3DHelperPlugin/utils/getMouseRaycaster.js +134 -51
  129. package/plugins/Object3DHelperPlugin/utils/getMouseRaycaster.mjs +134 -51
  130. package/plugins/Object3DHelperPlugin/utils/getOrthographicCameraDirection.js +134 -51
  131. package/plugins/Object3DHelperPlugin/utils/getOrthographicCameraDirection.mjs +134 -51
  132. package/plugins/Object3DHelperPlugin/utils/setObjectQuaternion.js +134 -51
  133. package/plugins/Object3DHelperPlugin/utils/setObjectQuaternion.mjs +134 -51
  134. package/plugins/Object3DHelperPlugin/utils/solidGuide.js +134 -51
  135. package/plugins/Object3DHelperPlugin/utils/solidGuide.mjs +134 -51
  136. package/plugins/Object3DHelperPlugin/utils/tipsDom.js +134 -51
  137. package/plugins/Object3DHelperPlugin/utils/tipsDom.mjs +134 -51
  138. package/plugins/PanoAnimePlugin/Controller.js +134 -51
  139. package/plugins/PanoAnimePlugin/Controller.mjs +134 -51
  140. package/plugins/PanoAnimePlugin/index.js +134 -51
  141. package/plugins/PanoAnimePlugin/index.mjs +134 -51
  142. package/plugins/WordPassPlugin/Controller.js +134 -51
  143. package/plugins/WordPassPlugin/Controller.mjs +134 -51
  144. package/plugins/WordPassPlugin/hersheyFont.js +134 -51
  145. package/plugins/WordPassPlugin/hersheyFont.mjs +134 -51
  146. package/plugins/WordPassPlugin/index.js +134 -51
  147. package/plugins/WordPassPlugin/index.mjs +134 -51
  148. package/plugins/WordPassPlugin/textToStrokeOrderStrokes.js +134 -51
  149. package/plugins/WordPassPlugin/textToStrokeOrderStrokes.mjs +134 -51
  150. package/plugins/WordPassPlugin/word-pass.js +134 -51
  151. package/plugins/WordPassPlugin/word-pass.mjs +134 -51
  152. package/plugins/index.js +134 -51
  153. package/plugins/index.mjs +134 -51
  154. package/plugins/thirdParty/CSS2DRenderer.js +134 -51
  155. package/plugins/thirdParty/CSS2DRenderer.mjs +134 -51
  156. package/plugins/thirdParty/CSS3DRenderer.js +134 -51
  157. package/plugins/thirdParty/CSS3DRenderer.mjs +134 -51
  158. package/plugins/thirdParty/doctorstrange-model.js +134 -51
  159. package/plugins/thirdParty/doctorstrange-model.mjs +134 -51
  160. package/plugins/thirdParty/domevents.js +134 -51
  161. package/plugins/thirdParty/domevents.mjs +134 -51
  162. package/plugins/utils/absoluteUrl.js +134 -51
  163. package/plugins/utils/absoluteUrl.mjs +134 -51
  164. package/plugins/utils/calculatePath.js +134 -51
  165. package/plugins/utils/calculatePath.mjs +134 -51
  166. package/plugins/utils/clamp.js +134 -51
  167. package/plugins/utils/clamp.mjs +134 -51
  168. package/plugins/utils/uuid.js +134 -51
  169. package/plugins/utils/uuid.mjs +134 -51
  170. package/react/index.js +134 -51
  171. package/react/index.mjs +134 -51
  172. package/sticker/index.js +135 -52
  173. package/sticker/index.mjs +135 -52
  174. package/umd/five-gltf-loader.js +135 -52
  175. package/umd/five-line.js +135 -52
  176. package/umd/five-plugins.js +134 -51
  177. package/umd/five-react.js +134 -51
  178. package/umd/five-sticker.js +135 -52
  179. package/umd/five-vfx.js +134 -51
  180. package/umd/five.js +202 -119
  181. package/vfx/index.js +134 -51
  182. package/vfx/index.mjs +134 -51
  183. package/work-downloader/index.js +134 -51
  184. package/work-downloader/index.mjs +134 -51
  185. /package/five/assets/{realsee-pmg-data-url.d.ts → realsee-png-data-url.d.ts} +0 -0
package/five/index.js CHANGED
@@ -1,41 +1,53 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five-webgpu
4
- * Generated: 10/27/2026
5
- * Version: 1.0.0-alpha.11
6
- * Terms:
4
+ * Generated: 2026/10/29
5
+ * Version: 1.0.0-alpha.12
6
+ * License:
7
7
  * Realsee SDK License Agreement
8
- * Update: July 28, 2021
9
- * THIS LICENSE AGREEMENT BETWEEN YOU AND 【BEIKE REALSEE TECHNOLOGY (HK)
10
- * LIMITED】(“Realsee”) FORMS A LEGALLY BINDING CONTRACT BETWEEN YOU AND REALSEE IN
11
- * RELATION TO YOUR USE OF THE SDK. This License Agreement accompanies the Realsee
12
- * Software Development Kit(s) for the software and related explanatory materials
13
- * (the "SDK") and includes any upgrades, modified versions, updates, additions,
14
- * and copies of the SDK licensed to You by Realsee.
8
+
9
+ * Last updated: 2026-09-22
10
+
11
+ * THIS LICENSE AGREEMENT BETWEEN YOU AND BEIKE REALSEE TECHNOLOGY (HK) LIMITED
12
+ * (“Realsee”) FORMS A LEGALLY BINDING CONTRACT BETWEEN YOU AND REALSEE IN RELATION
13
+ * TO YOUR USE OF THE SDK. This License Agreement accompanies the Realsee Software
14
+ * Development Kit(s) for the software and related explanatory materials (the
15
+ * "SDK") and includes any upgrades, modified versions, updates, additions, and
16
+ * copies of the SDK licensed to You by Realsee.
17
+
15
18
  * BY DOWNLOADING, INSTALLING, OR OTHERWISE ACCESSING OR USING THE SDK, YOU AGREE
16
19
  * THAT YOU HAVE READ, UNDERSTOOD, AND AGREE TO BE BOUND BY THIS AGREEMENT. YOU ARE
17
20
  * AGREEING ON YOUR OWN BEHALF AND/OR ON BEHALF OF YOUR COMPANY OR ORGANIZATION TO
18
21
  * THE TERMS AND CONDITIONS STATED BELOW.
22
+
19
23
  * This Agreement applies to Your use of the SDK in the country in which You
20
24
  * legally install it (“Territory”) and is subject to the laws of such Territory
21
25
  * and further subject to Section 12 below. Different terms, conditions, and
22
26
  * limitations may apply to the use of the SDK in any additional countries.
27
+
23
28
  * 1. DEFINITIONS.
29
+
24
30
  * “Agreement” means this Realsee SDK License Agreement.
31
+
25
32
  * “Developer”, “You” and “Your” means the person(s) or entity acquiring or using
26
33
  * the SDK or otherwise exercising rights under the terms of this Agreement.
34
+
27
35
  * “Documentation” means the technical or other specifications or documentation
28
36
  * that Realsee may provide to You for use in connection with the SDK.
37
+
29
38
  * “Integrated Product” means any software, website, or on-line service developed
30
39
  * by You based on or using the SDK (collectively, the “Integrated Product”).
40
+
31
41
  * “Intellectual Property” means any patents, patent rights, trademarks, service
32
42
  * marks, registered and unregistered designs, applications for any of the
33
43
  * foregoing, copyright, and any other similar protected rights in any country and
34
44
  * to the extent recognised by any relevant jurisdiction as intellectual property,
35
45
  * trade secrets, know-how and confidential information. Realsee reserves all
36
46
  * rights not expressly granted to You.
47
+
37
48
  * “Realsee” means [Beike Realsee Technology (HK) Limited, a company incorporated
38
49
  * and validly existing under the laws of Hong Kong].
50
+
39
51
  * “SDK” means the Realsee-proprietary Software Development Kits (SDK) provided
40
52
  * hereunder, includes all development tools (including any compiler and debugger),
41
53
  * application programming interfaces (“APIs”), libraries, binary utilities, header
@@ -46,45 +58,66 @@
46
58
  * any updates provided by Realsee that replace and/or supplement the original SDK
47
59
  * delivered to You, unless such update is accompanied by a separate license, in
48
60
  * which case the terms of such license will govern.
61
+
62
+ * “Term” means the period commencing on the date You first download, install,
63
+ * access, or use the SDK, and continuing until this Agreement is terminated in
64
+ * accordance with Section 6.
65
+
49
66
  * 2. LICENSED USES AND RESTRICTIONS.
67
+
50
68
  * 2.1 Subject to the restrictions contained in this Section 2, Realsee grants to
51
- * You during the term, a limited, non-exclusive, revocable, non-sublicensable,
52
- * non-transferable license to install and use the SDK within the Territory only
53
- * for the purpose of internal development.
69
+ * You during the Term, a limited, non-exclusive, revocable, non-sublicensable,
70
+ * non-transferable license to install, use, and integrate the SDK within the
71
+ * Territory only for the purpose of developing, testing, operating and supporting
72
+ * Integrated Products.
73
+
54
74
  * 2.2 Restrictions. You acknowledge and agree that, You shall not, and shall
55
- * ensure that Your affiliates, employees, agents, representatives, officers,
56
- * representatives, and subcontractors do not (directly or indirectly):
75
+ * ensure that Your affiliates, employees, agents, representatives, officers, and
76
+ * subcontractors do not (directly or indirectly):
77
+
57
78
  * 2.2.1 decompile, reverse engineer, disassemble or attempt to derive the source
58
79
  * code of, those components of the SDK provided in object code form, or any part
59
80
  * thereof;
81
+
60
82
  * 2.2.2 remove, alter, or obscure any copyright notice or other proprietary rights
61
83
  * notice on any part of the SDK;
84
+
62
85
  * 2.2.3 sell, assign, pledge, rent, lease, lend, upload to or host on any website
63
86
  * or server for use by any third party except You, redistribute, or sublicense the
64
87
  * SDK (or any part thereof), or operate the SDK (or any part thereof) in the
65
88
  * capacity of a service bureau or other hosted services provider, in whole or in
66
89
  * part, nor may You enable others to do so;
67
- * 2.2.4 or alter, modify, customize or improve the SDK, or any part thereof;
90
+
91
+ * 2.2.4 alter, modify, customize or improve the SDK, or any part thereof;
92
+
68
93
  * 2.2.5 use the SDK (or any part thereof) for any illegal purpose, in any manner
69
94
  * that is inconsistent with the terms of this Agreement, or to engage in any
70
95
  * illegal activity;
96
+
71
97
  * 2.2.6 use the SDK (or any part thereof) in any manner that may damage the
72
98
  * operation of Realsee’s products or services; or
73
- * 2.2.7 use the SDK or any information contained therein or otherwise provided by
74
- * Realsee for the purpose of developing, or having developed, any product
75
- * competitive with any Realsee product or service, as determined by Realsee in its
76
- * sole discretion;
77
- * 2.2.8 include any portion of the SDK in Your Developer products.
99
+
100
+ * 2.2.7 use the SDK or any non-public information provided by Realsee for the
101
+ * primary purpose of developing products or services that substantially replicate
102
+ * the core functionality of Realsee proprietary SDK offerings;
103
+
104
+ * 2.2.8 distribute, re-sell, or make available the SDK (or any part thereof) as a
105
+ * standalone product, library, or development toolkit to any third party.
106
+
78
107
  * 2.3 Realsee has the right to impose reasonable conditions such as a reasonable
79
108
  * fee for use of the SDK in Integrated Product in the future.
109
+
80
110
  * 2.4 You may make a limited number of copies of the SDK to be used by Your
81
111
  * employees or consultants as provided herein, and not for general business
82
112
  * purposes, and such employees or consultants shall be subject to the obligations
83
113
  * and restrictions in this Agreement.
114
+
84
115
  * 2.5 All licenses not expressly granted in this Agreement are reserved and no
85
116
  * other licenses, immunity, or rights, express or implied, are granted by Realsee,
86
117
  * by implication, estoppel, or otherwise.
118
+
87
119
  * 3. CONFIDENTIALITY.
120
+
88
121
  * The SDK and all source code, Documentation, specifications, engineering details,
89
122
  * and related information pertaining to the SDK, whether in oral, written,
90
123
  * graphic, or electronic form, are and shall remain the confidential and
@@ -106,12 +139,15 @@
106
139
  * or omission of any of Your Affiliates. You shall not disclose Confidential
107
140
  * Information to any third party, including, without limitation, any of Your
108
141
  * subcontractors.
142
+
109
143
  * 4. PROPRIETARY RIGHTS.
144
+
110
145
  * 4.1 As between You and Realsee, Realsee and/or its licensors retain ownership of
111
146
  * all right, title, and interest in, to, and under the SDK, including, without
112
147
  * limitation, all patents, copyrights, trade secrets, trademarks and other
113
148
  * intellectual property and other proprietary rights therein, and reserve all
114
149
  * rights not expressly granted to You.
150
+
115
151
  * 4.2 The items contained in the SDK are the intellectual property of Realsee and
116
152
  * its licensors and are protected by PRC copyright and patent law, international
117
153
  * treaty provisions and applicable laws of the country in which it is being used.
@@ -126,25 +162,52 @@
126
162
  * Except as stated above, this Agreement does not grant You any rights to patents,
127
163
  * copyrights, trade secrets, trademarks or any other rights in respect to the
128
164
  * items in the SDK.
129
- * 5. TERM AND TERMINATION.
130
- * 5.1 This Agreement is effective until terminated. Realsee has the right to
165
+
166
+ * 5. DATA PRIVACY AND PROTECTION
167
+
168
+ * 5.1 In connection with Your use of the SDK and any Integrated Product, You shall
169
+ * comply with all applicable privacy, data protection, cybersecurity, and
170
+ * cross-border data transfer laws and regulations. To the extent Your use of the
171
+ * SDK involves the collection, processing, transmission, disclosure, or storage of
172
+ * personal data or personal information, You shall be solely responsible for: (i)
173
+ * ensuring that You have a valid legal basis for such processing; (ii) providing
174
+ * all required notices and obtaining all necessary consents or authorisations; and
175
+ * (iii) implementing reasonable and appropriate technical and organisational
176
+ * measures to protect such data against unauthorised access, use, disclosure,
177
+ * alteration, or destruction.
178
+
179
+ * 5.2 You shall promptly notify Realsee of any material security incident relating
180
+ * to the SDK or Integrated Product that may materially affect Realsee, the SDK, or
181
+ * any personal data processed in connection with the SDK.
182
+
183
+ * 5.3 Developer shall be solely responsible for Developer’s compliance with
184
+ * applicable privacy, data protection, and cybersecurity laws in connection with
185
+ * the Integrated Product.
186
+
187
+ * 6. TERM AND TERMINATION.
188
+
189
+ * 6.1 This Agreement is effective until terminated. Realsee has the right to
131
190
  * terminate this Agreement immediately, without judicial intervention, if You fail
132
191
  * to comply with any term herein. Upon any such termination You must remove all
133
192
  * full and partial copies of the items in the SDK from Your computer and
134
193
  * discontinue the use of the items in the SDK.
135
- * 5.2 Realsee may at any time, terminate the Agreement with You if: (A) You have
194
+
195
+ * 6.2 Realsee may at any time, terminate the Agreement with You if: (A) You have
136
196
  * breached any provision of the Agreement; or (B) Realsee is required to do so by
137
197
  * law; or (C) Realsee decides to no longer provide the SDK or certain parts of the
138
198
  * SDK to users in the country in which You are resident or from which You use the
139
199
  * service, or the provision of the SDK or certain SDK services to You by Realsee
140
200
  * is, in Realsee's sole discretion, no longer legally or commercially viable.
141
- * 5.3 When the Agreement comes to an end, all of the legal rights, obligations and
201
+
202
+ * 6.3 When the Agreement comes to an end, all of the legal rights, obligations and
142
203
  * liabilities that You and Realsee have benefited from, been subject to (or which
143
204
  * have accrued over time whilst the Agreement has been in force) or which are
144
205
  * expressed to continue indefinitely, shall be unaffected by this cessation, and
145
- * the provisions of Section 3, 4, 6, 7 and 8 shall continue to apply to such
146
- * rights, obligations and liabilities indefinitely.
147
- * 6. DISCLAIMER OF WARRANTY.
206
+ * the provisions of Sections 3, 4, 5, 7, 8, 9, 10, and 11 shall continue to apply
207
+ * to such rights, obligations and liabilities indefinitely.
208
+
209
+ * 7. DISCLAIMER OF WARRANTY.
210
+
148
211
  * YOU EXPRESSLY ACKNOWLEDGE AND AGREE THAT, TO THE EXTENT PERMITTED BY APPLICABLE
149
212
  * LAW, USE OF THE SDK (OR ANY PART THEREOF) IS AT YOUR SOLE RISK AND THAT THE
150
213
  * ENTIRE RISK AS TO SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, AND EFFORT IS
@@ -159,10 +222,13 @@
159
222
  * CONDITIONS OR WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
160
223
  * OR NONINFRINGEMENT OF ANY THIRD PARTY RIGHT IN RESPECT OF THE ITEMS IN THE SDK
161
224
  * OR ANY SERVICES RELATED TO THE SDK.
225
+
162
226
  * REALSEE IS UNDER NO OBLIGATION TO PROVIDE ANY SUPPORT UNDER THIS LICENSE
163
227
  * AGREEMENT, INCLUDING UPGRADES OR FUTURE VERSIONS OF THE SDK OR ANY PORTIONS
164
228
  * THEREOF, TO YOU, END USER OR TO ANY OTHER PARTY.
165
- * 7. LIMITATION OF LIABILITY.
229
+
230
+ * 8. LIMITATION OF LIABILITY.
231
+
166
232
  * TO THE EXTENT NOT PROHIBITED BY APPLICABLE LAW, IN NO EVENT WILL REALSEE OR ITS
167
233
  * LICENSORS BE LIABLE FOR ANY DIRECT, INCIDENTAL, SPECIAL, INDIRECT, OR
168
234
  * CONSEQUENTIAL DAMAGES, INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF USE,
@@ -178,10 +244,12 @@
178
244
  * DAMAGES. IN NO EVENT WILL REALSEE’S TOTAL LIABILITY TO YOU FOR ALL DAMAGES
179
245
  * EXCEED ONE HUNDRED DOLLARS ($100.00). THE FOREGOING LIMITATIONS WILL APPLY EVEN
180
246
  * IF THE ABOVE STATED REMEDY FAILS OF ITS ESSENTIAL PURPOSE. THE LIMITATIONS
181
- * CONTAINED IN SECTIONS 6 AND THIS SECTION 7 ARE A FUNDAMENTAL PART OF THE BASIS
182
- * OF REALSEE’S BARGAIN HEREUNDER, AND REALSEE WOULD NOT ENTER INTO THIS AGREEMENT
183
- * OR PROVIDE YOU WITH ACCESS TO THE SDK ABSENT SUCH LIMITATIONS.
184
- * 8. INDEMNIFICATION.
247
+ * CONTAINED IN SECTION 7 AND THIS SECTION 8 ARE A FUNDAMENTAL PART OF THE BASIS OF
248
+ * REALSEE’S BARGAIN HEREUNDER, AND REALSEE WOULD NOT ENTER INTO THIS AGREEMENT OR
249
+ * PROVIDE YOU WITH ACCESS TO THE SDK ABSENT SUCH LIMITATIONS.
250
+
251
+ * 9. INDEMNIFICATION.
252
+
185
253
  * To the extent permitted by applicable law, You agree to indemnify, defend and
186
254
  * hold harmless Realsee, its affiliates and each of their directors, officers,
187
255
  * employees, independent contractors, and agents (each a “Realsee Indemnified
@@ -192,7 +260,9 @@
192
260
  * (iii) Your use of any Integrated Product, including any claim that Integrated
193
261
  * Product infringes the copyright, trademark, trade secret or other intellectual
194
262
  * property right of a third party.
195
- * 9. ACKNOWLEDGEMENTS.
263
+
264
+ * 10. ACKNOWLEDGEMENTS.
265
+
196
266
  * Portions of the SDK may utilize or include third party software and other
197
267
  * copyrighted material. Acknowledgments, licensing terms, and disclaimers for such
198
268
  * material are contained in Documentation for the SDK or may otherwise accompany
@@ -203,15 +273,19 @@
203
273
  * party software. Moreover, You shall not subject any items (including not limited
204
274
  * to source code, object code, and any software) included in the SDK to any open
205
275
  * source license.
206
- * 10. NON-BLOCKING OF REALSEE DEVELOPMENT.
276
+
277
+ * 11. NON-BLOCKING OF REALSEE DEVELOPMENT.
278
+
207
279
  * You acknowledge that Realsee is currently developing or may develop technologies
208
280
  * and products in the future that have or may have design and/or functionality
209
281
  * similar to Integrated Product that You may develop based on Your license herein.
210
282
  * Nothing in this Agreement shall impair, limit or curtail Realsee's right to
211
283
  * continue with its development, maintenance and/or distribution of Realsee's
212
284
  * technology or products.
213
- * 11. GENERAL.
214
- * 11.1 Export Control. You may not use or otherwise export or re-export the SDK
285
+
286
+ * 12. GENERAL.
287
+
288
+ * 12.1 Export Control. You may not use or otherwise export or re-export the SDK
215
289
  * (or any part thereof) except as authorized by United States law and the laws of
216
290
  * the jurisdiction(s) in which the SDK (or any part thereof) was obtained. In
217
291
  * particular, but without limitation, the SDK may not be exported or re-exported
@@ -220,20 +294,26 @@
220
294
  * Commerce Denied Person's List or Entity List. By using the SDK (or any part
221
295
  * thereof), You represent and warrant that You are not located in any such country
222
296
  * or on any such list.
223
- * 11.2 Governing Law. This Agreement and the rights of the parties hereunder shall
224
- * be governed by and construed in accordance with the laws of People’s Republic of
225
- * China (for purpose of this Agreement, excluding Hong Kong, Taiwan, and Macau),
226
- * without reference to its conflict of laws principles. Any dispute, controversy
227
- * or claim arising from or in connection with this Agreement, or the breach,
228
- * termination or invalidity thereof, shall be submitted to China International
229
- * Economic and Trade Arbitration Commission (“CIETAC”) for arbitration in Beijing
230
- * which shall be conducted in accordance with the CIETAC's arbitration rules in
231
- * effect at the time of applying for arbitration. The arbitral award is final and
232
- * binding upon both parties.
233
- * 11.3 Severability. If any provision of this Agreement is held by a court of
297
+
298
+ * 12.2 Governing Law and Dispute Resolution.
299
+
300
+ * This Agreement shall be governed by the laws of the Hong Kong Special
301
+ * Administrative Region of the People's Republic of China, without regard to its
302
+ * conflict of laws principles. Any dispute arising out of or in connection with
303
+ * this Agreement, including its existence, validity, interpretation, performance,
304
+ * breach, or termination, shall first be submitted to thirty (30) days of good
305
+ * faith consultation, and if unresolved, to final and binding arbitration
306
+ * administered by the HKIAC in Hong Kong in English under the HKIAC Administered
307
+ * Arbitration Rules in force at the time of submission, with one (1) arbitrator
308
+ * unless the amount in dispute exceeds USD 1,000,000, in which case three (3)
309
+ * arbitrators shall be appointed. Either party may seek interim or injunctive
310
+ * relief from any court of competent jurisdiction notwithstanding the foregoing.
311
+
312
+ * 12.3 Severability. If any provision of this Agreement is held by a court of
234
313
  * competent jurisdiction to be unenforceable for any reason, the remaining
235
314
  * provisions hereof will be unaffected and remain in full force and effect.
236
- * 11.4. Modifications. Realsee reserves the right, from time to time, with or
315
+
316
+ * 12.4 Modifications. Realsee reserves the right, from time to time, with or
237
317
  * without notice to You, to make revisions to this Agreement in our sole and
238
318
  * absolute discretion. The most current version of this Agreement will supersede
239
319
  * all previous versions and shall be made available on the website where the SDK
@@ -242,16 +322,19 @@
242
322
  * from the time that it is made available. You shall be responsible for regularly
243
323
  * checking for notice of any such modifications. You agree that Your continued use
244
324
  * of the SDK constitutes Your agreement to the modified Agreement.
245
- * 11.5 Relationship of the Parties. This Agreement will not be construed as
325
+
326
+ * 12.5 Relationship of the Parties. This Agreement will not be construed as
246
327
  * creating an agency, partnership, joint venture, fiduciary duty, or any other
247
328
  * form of legal association between You and Realsee, and You will not represent to
248
329
  * the contrary, whether expressly, by implication, appearance, or otherwise.
249
- * 11.6 Entire Agreement; Governing Language. This Agreement constitutes the entire
330
+
331
+ * 12.6 Entire Agreement; Governing Language. This Agreement constitutes the entire
250
332
  * agreement between You and Realsee with respect to the use of the SDK licensed
251
333
  * hereunder and supersedes all prior understandings regarding such subject matter.
252
334
  * No amendment to or modification of this Agreement will be binding unless in
253
335
  * writing and signed by Realsee. You and Realsee hereto confirm that this
254
336
  * Agreement and all related documents shall be drafted in English.
337
+
255
338
  */Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let l=require("three/webgpu");l=c(l,1);let u=require("tslib"),d=require("protobufjs/minimal.js");d=c(d,1);let f=require("three");f=c(f,1);let p=require("three/tsl");var m={},h=h||function(e,t){var n={},r=n.lib={},i=r.Base=function(){function e(){}return{extend:function(t){e.prototype=this;var n=new e;return t&&n.mixIn(t),n.hasOwnProperty(`init`)||(n.init=function(){n.$super.init.apply(this,arguments)}),n.init.prototype=n,n.$super=this,n},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty(`toString`)&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),a=r.WordArray=i.extend({init:function(e,n){e=this.words=e||[],n==t?this.sigBytes=e.length*4:this.sigBytes=n},toString:function(e){return(e||s).stringify(this)},concat:function(e){var t=this.words,n=e.words,r=this.sigBytes,i=e.sigBytes;if(this.clamp(),r%4)for(var a=0;a<i;a++){var o=n[a>>>2]>>>24-a%4*8&255;t[r+a>>>2]|=o<<24-(r+a)%4*8}else for(var a=0;a<i;a+=4)t[r+a>>>2]=n[a>>>2];return this.sigBytes+=i,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.length=e.ceil(n/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r<t;r+=4)n.push(e.random()*4294967296|0);return new a.init(n,t)}}),o=n.enc={},s=o.Hex={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],i=0;i<n;i++){var a=t[i>>>2]>>>24-i%4*8&255;r.push((a>>>4).toString(16)),r.push((a&15).toString(16))}return r.join(``)},parse:function(e){for(var t=e.length,n=[],r=0;r<t;r+=2)n[r>>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new a.init(n,t/2)}},c=o.Latin1={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],i=0;i<n;i++){var a=t[i>>>2]>>>24-i%4*8&255;r.push(String.fromCharCode(a))}return r.join(``)},parse:function(e){for(var t=e.length,n=[],r=0;r<t;r++)n[r>>>2]|=(e.charCodeAt(r)&255)<<24-r%4*8;return new a.init(n,t)}},l=o.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error(`Malformed UTF-8 data`)}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},u=r.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new a.init,this._nDataBytes=0},_append:function(e){typeof e==`string`&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,i=n.sigBytes,o=this.blockSize,s=i/(o*4);s=t?e.ceil(s):e.max((s|0)-this._minBufferSize,0);var c=s*o,l=e.min(c*4,i);if(c){for(var u=0;u<c;u+=o)this._doProcessBlock(r,u);var d=r.splice(0,c);n.sigBytes-=l}return new a.init(d,l)},clone:function(){var e=i.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});r.Hasher=u.extend({cfg:i.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){u.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){return e&&this._append(e),this._doFinalize()},blockSize:512/32,_createHelper:function(e){return function(t,n){return new e.init(n).finalize(t)}},_createHmacHelper:function(e){return function(t,n){return new d.HMAC.init(e,n).finalize(t)}}});var d=n.algo={};return n}(Math);(function(e){for(var t=h,n=t.lib,r=n.WordArray,i=n.Hasher,n=t.algo,a=[],o=[],s=function(e){return 4294967296*(e-(e|0))|0},c=2,l=0;64>l;){var u;a:{u=c;for(var d=e.sqrt(u),f=2;f<=d;f++)if(!(u%f)){u=!1;break a}u=!0}u&&(8>l&&(a[l]=s(e.pow(c,.5))),o[l]=s(e.pow(c,1/3)),l++),c++}var p=[],n=n.SHA256=i.extend({_doReset:function(){this._hash=new r.init(a.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],a=n[2],s=n[3],c=n[4],l=n[5],u=n[6],d=n[7],f=0;64>f;f++){if(16>f)p[f]=e[t+f]|0;else{var m=p[f-15],h=p[f-2];p[f]=((m<<25|m>>>7)^(m<<14|m>>>18)^m>>>3)+p[f-7]+((h<<15|h>>>17)^(h<<13|h>>>19)^h>>>10)+p[f-16]}m=d+((c<<26|c>>>6)^(c<<21|c>>>11)^(c<<7|c>>>25))+(c&l^~c&u)+o[f]+p[f],h=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&i^r&a^i&a),d=u,u=l,l=c,c=s+m|0,s=a,a=i,i=r,r=m+h|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+a|0,n[3]=n[3]+s|0,n[4]=n[4]+c|0,n[5]=n[5]+l|0,n[6]=n[6]+u|0,n[7]=n[7]+d|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return n[i>>>5]|=128<<24-i%32,n[(i+64>>>9<<4)+14]=e.floor(r/4294967296),n[(i+64>>>9<<4)+15]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=i.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=i._createHelper(n),t.HmacSHA256=i._createHmacHelper(n)})(Math),h.lib.Cipher||function(e){var t=h,n=t.lib,r=n.Base,i=n.WordArray,a=n.BufferedBlockAlgorithm,o=t.enc.Base64,s=t.algo.EvpKDF,c=n.Cipher=a.extend({cfg:r.extend(),createEncryptor:function(e,t){return this.create(this._ENC_XFORM_MODE,e,t)},createDecryptor:function(e,t){return this.create(this._DEC_XFORM_MODE,e,t)},init:function(e,t,n){this.cfg=this.cfg.extend(n),this._xformMode=e,this._key=t,this.reset()},reset:function(){a.reset.call(this),this._doReset()},process:function(e){return this._append(e),this._process()},finalize:function(e){return e&&this._append(e),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(e){return{encrypt:function(t,n,r){return(typeof n==`string`?m:p).encrypt(e,t,n,r)},decrypt:function(t,n,r){return(typeof n==`string`?m:p).decrypt(e,t,n,r)}}}});n.StreamCipher=c.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var l=t.mode={},u=function(t,n,r){var i=this._iv;i?this._iv=e:i=this._prevBlock;for(var a=0;a<r;a++)t[n+a]^=i[a]},d=(n.BlockCipherMode=r.extend({createEncryptor:function(e,t){return this.Encryptor.create(e,t)},createDecryptor:function(e,t){return this.Decryptor.create(e,t)},init:function(e,t){this._cipher=e,this._iv=t}})).extend();d.Encryptor=d.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize;u.call(this,e,t,r),n.encryptBlock(e,t),this._prevBlock=e.slice(t,t+r)}}),d.Decryptor=d.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize,i=e.slice(t,t+r);n.decryptBlock(e,t),u.call(this,e,t,r),this._prevBlock=i}}),l=l.CBC=d,d=(t.pad={}).Pkcs7={pad:function(e,t){for(var n=4*t,n=n-e.sigBytes%n,r=n<<24|n<<16|n<<8|n,a=[],o=0;o<n;o+=4)a.push(r);n=i.create(a,n),e.concat(n)},unpad:function(e){e.sigBytes-=e.words[e.sigBytes-1>>>2]&255}},n.BlockCipher=c.extend({cfg:c.cfg.extend({mode:l,padding:d}),reset:function(){c.reset.call(this);var e=this.cfg,t=e.iv,e=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=e.createEncryptor;else n=e.createDecryptor,this._minBufferSize=1;this._mode=n.call(e,this,t&&t.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var f=n.CipherParams=r.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),l=(t.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return e=e.salt,(e?i.create([1398893684,1701076831]).concat(e).concat(t):t).toString(o)},parse:function(e){e=o.parse(e);var t=e.words;if(t[0]==1398893684&&t[1]==1701076831){var n=i.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return f.create({ciphertext:e,salt:n})}},p=n.SerializableCipher=r.extend({cfg:r.extend({format:l}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=e.createEncryptor(n,r);return t=i.finalize(t),i=i.cfg,f.create({ciphertext:t,key:n,iv:i.iv,algorithm:e,mode:i.mode,padding:i.padding,blockSize:e.blockSize,formatter:r.format})},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),e.createDecryptor(n,r).finalize(t.ciphertext)},_parse:function(e,t){return typeof e==`string`?t.parse(e,this):e}}),t=(t.kdf={}).OpenSSL={execute:function(e,t,n,r){return r||(r=i.random(8)),e=s.create({keySize:t+n}).compute(e,r),n=i.create(e.words.slice(t),4*n),e.sigBytes=4*t,f.create({key:e,iv:n,salt:r})}},m=n.PasswordBasedCipher=p.extend({cfg:p.cfg.extend({kdf:t}),encrypt:function(e,t,n,r){return r=this.cfg.extend(r),n=r.kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,e=p.encrypt.call(this,e,t,n.key,r),e.mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,p.decrypt.call(this,e,t,n.key,r)}})}(),(function(){for(var e=h,t=e.lib.BlockCipher,n=e.algo,r=[],i=[],a=[],o=[],s=[],c=[],l=[],u=[],d=[],f=[],p=[],m=0;256>m;m++)p[m]=128>m?m<<1:m<<1^283;for(var g=0,_=0,m=0;256>m;m++){var v=_^_<<1^_<<2^_<<3^_<<4,v=v>>>8^v&255^99;r[g]=v,i[v]=g;var y=p[g],b=p[y],x=p[b],S=257*p[v]^16843008*v;a[g]=S<<24|S>>>8,o[g]=S<<16|S>>>16,s[g]=S<<8|S>>>24,c[g]=S,S=16843009*x^65537*b^257*y^16843008*g,l[v]=S<<24|S>>>8,u[v]=S<<16|S>>>16,d[v]=S<<8|S>>>24,f[v]=S,g?(g=y^p[p[p[x^y]]],_^=p[p[_]]):g=_=1}var C=[0,1,2,4,8,16,32,64,128,27,54],n=n.AES=t.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes/4,e=4*((this._nRounds=n+6)+1),i=this._keySchedule=[],a=0;a<e;a++)if(a<n)i[a]=t[a];else{var o=i[a-1];a%n?6<n&&a%n==4&&(o=r[o>>>24]<<24|r[o>>>16&255]<<16|r[o>>>8&255]<<8|r[o&255]):(o=o<<8|o>>>24,o=r[o>>>24]<<24|r[o>>>16&255]<<16|r[o>>>8&255]<<8|r[o&255],o^=C[a/n|0]<<24),i[a]=i[a-n]^o}for(t=this._invKeySchedule=[],n=0;n<e;n++)a=e-n,o=n%4?i[a]:i[a-4],t[n]=4>n||4>=a?o:l[r[o>>>24]]^u[r[o>>>16&255]]^d[r[o>>>8&255]]^f[r[o&255]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,a,o,s,c,r)},decryptBlock:function(e,t){var n=e[t+1];e[t+1]=e[t+3],e[t+3]=n,this._doCryptBlock(e,t,this._invKeySchedule,l,u,d,f,i),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,i,a,o,s){for(var c=this._nRounds,l=e[t]^n[0],u=e[t+1]^n[1],d=e[t+2]^n[2],f=e[t+3]^n[3],p=4,m=1;m<c;m++)var h=r[l>>>24]^i[u>>>16&255]^a[d>>>8&255]^o[f&255]^n[p++],g=r[u>>>24]^i[d>>>16&255]^a[f>>>8&255]^o[l&255]^n[p++],_=r[d>>>24]^i[f>>>16&255]^a[l>>>8&255]^o[u&255]^n[p++],f=r[f>>>24]^i[l>>>16&255]^a[u>>>8&255]^o[d&255]^n[p++],l=h,u=g,d=_;h=(s[l>>>24]<<24|s[u>>>16&255]<<16|s[d>>>8&255]<<8|s[f&255])^n[p++],g=(s[u>>>24]<<24|s[d>>>16&255]<<16|s[f>>>8&255]<<8|s[l&255])^n[p++],_=(s[d>>>24]<<24|s[f>>>16&255]<<16|s[l>>>8&255]<<8|s[u&255])^n[p++],f=(s[f>>>24]<<24|s[l>>>16&255]<<16|s[u>>>8&255]<<8|s[d&255])^n[p++],e[t]=h,e[t+1]=g,e[t+2]=_,e[t+3]=f},keySize:8});e.AES=t._createHelper(n)})();var g,_=!0;function v(e,t,n){e!=null&&(typeof e==`number`?this.fromNumber(e,t,n):t==null&&typeof e!=`string`?this.fromString(e,256):this.fromString(e,t))}function y(){return new v(null)}function b(e,t,n,r,i,a){for(;--a>=0;){var o=t*this[e++]+n[r]+i;i=Math.floor(o/67108864),n[r++]=o&67108863}return i}function x(e,t,n,r,i,a){for(var o=t&32767,s=t>>15;--a>=0;){var c=this[e]&32767,l=this[e++]>>15,u=s*c+l*o;c=o*c+((u&32767)<<15)+n[r]+(i&1073741823),i=(c>>>30)+(u>>>15)+s*l+(i>>>30),n[r++]=c&1073741823}return i}function S(e,t,n,r,i,a){for(var o=t&16383,s=t>>14;--a>=0;){var c=this[e]&16383,l=this[e++]>>14,u=s*c+l*o;c=o*c+((u&16383)<<14)+n[r]+i,i=(c>>28)+(u>>14)+s*l,n[r++]=c&268435455}return i}_&&typeof navigator<`u`&&navigator.appName==`Microsoft Internet Explorer`?(v.prototype.am=x,g=30):_&&typeof navigator<`u`&&navigator.appName!=`Netscape`?(v.prototype.am=b,g=26):(v.prototype.am=S,g=28),v.prototype.DB=g,v.prototype.DM=(1<<g)-1,v.prototype.DV=1<<g;var C=52;v.prototype.FV=Math.pow(2,C),v.prototype.F1=C-g,v.prototype.F2=2*g-C;var w=`0123456789abcdefghijklmnopqrstuvwxyz`,T=[],E=48,D;for(D=0;D<=9;++D)T[E++]=D;for(E=97,D=10;D<36;++D)T[E++]=D;for(E=65,D=10;D<36;++D)T[E++]=D;function O(e){return w.charAt(e)}function k(e,t){var n=T[e.charCodeAt(t)];return n==null?-1:n}function A(e){for(var t=this.t-1;t>=0;--t)e[t]=this[t];e.t=this.t,e.s=this.s}function j(e){this.t=1,this.s=e<0?-1:0,e>0?this[0]=e:e<-1?this[0]=e+this.DV:this.t=0}function M(e){var t=y();return t.fromInt(e),t}function N(e,t){var n;if(t==16)n=4;else if(t==8)n=3;else if(t==256)n=8;else if(t==2)n=1;else if(t==32)n=5;else if(t==4)n=2;else{this.fromRadix(e,t);return}this.t=0,this.s=0;for(var r=e.length,i=!1,a=0;--r>=0;){var o=n==8?e[r]&255:k(e,r);if(o<0){e.charAt(r)==`-`&&(i=!0);continue}i=!1,a==0?this[this.t++]=o:a+n>this.DB?(this[this.t-1]|=(o&(1<<this.DB-a)-1)<<a,this[this.t++]=o>>this.DB-a):this[this.t-1]|=o<<a,a+=n,a>=this.DB&&(a-=this.DB)}n==8&&e[0]&128&&(this.s=-1,a>0&&(this[this.t-1]|=(1<<this.DB-a)-1<<a)),this.clamp(),i&&v.ZERO.subTo(this,this)}function ee(){for(var e=this.s&this.DM;this.t>0&&this[this.t-1]==e;)--this.t}function P(e){if(this.s<0)return`-`+this.negate().toString(e);var t;if(e==16)t=4;else if(e==8)t=3;else if(e==2)t=1;else if(e==32)t=5;else if(e==4)t=2;else return this.toRadix(e);var n=(1<<t)-1,r,i=!1,a=``,o=this.t,s=this.DB-o*this.DB%t;if(o-->0)for(s<this.DB&&(r=this[o]>>s)>0&&(i=!0,a=O(r));o>=0;)s<t?(r=(this[o]&(1<<s)-1)<<t-s,r|=this[--o]>>(s+=this.DB-t)):(r=this[o]>>(s-=t)&n,s<=0&&(s+=this.DB,--o)),r>0&&(i=!0),i&&(a+=O(r));return i?a:`0`}function F(){var e=y();return v.ZERO.subTo(this,e),e}function I(){return this.s<0?this.negate():this}function L(e){var t=this.s-e.s;if(t!=0)return t;var n=this.t;if(t=n-e.t,t!=0)return this.s<0?-t:t;for(;--n>=0;)if((t=this[n]-e[n])!=0)return t;return 0}function te(e){var t=1,n;return(n=e>>>16)!=0&&(e=n,t+=16),(n=e>>8)!=0&&(e=n,t+=8),(n=e>>4)!=0&&(e=n,t+=4),(n=e>>2)!=0&&(e=n,t+=2),(n=e>>1)!=0&&(e=n,t+=1),t}function ne(){return this.t<=0?0:this.DB*(this.t-1)+te(this[this.t-1]^this.s&this.DM)}function re(e,t){var n;for(n=this.t-1;n>=0;--n)t[n+e]=this[n];for(n=e-1;n>=0;--n)t[n]=0;t.t=this.t+e,t.s=this.s}function R(e,t){for(var n=e;n<this.t;++n)t[n-e]=this[n];t.t=Math.max(this.t-e,0),t.s=this.s}function ie(e,t){var n=e%this.DB,r=this.DB-n,i=(1<<r)-1,a=Math.floor(e/this.DB),o=this.s<<n&this.DM,s;for(s=this.t-1;s>=0;--s)t[s+a+1]=this[s]>>r|o,o=(this[s]&i)<<n;for(s=a-1;s>=0;--s)t[s]=0;t[a]=o,t.t=this.t+a+1,t.s=this.s,t.clamp()}function z(e,t){t.s=this.s;var n=Math.floor(e/this.DB);if(n>=this.t){t.t=0;return}var r=e%this.DB,i=this.DB-r,a=(1<<r)-1;t[0]=this[n]>>r;for(var o=n+1;o<this.t;++o)t[o-n-1]|=(this[o]&a)<<i,t[o-n]=this[o]>>r;r>0&&(t[this.t-n-1]|=(this.s&a)<<i),t.t=this.t-n,t.clamp()}function ae(e,t){for(var n=0,r=0,i=Math.min(e.t,this.t);n<i;)r+=this[n]-e[n],t[n++]=r&this.DM,r>>=this.DB;if(e.t<this.t){for(r-=e.s;n<this.t;)r+=this[n],t[n++]=r&this.DM,r>>=this.DB;r+=this.s}else{for(r+=this.s;n<e.t;)r-=e[n],t[n++]=r&this.DM,r>>=this.DB;r-=e.s}t.s=r<0?-1:0,r<-1?t[n++]=this.DV+r:r>0&&(t[n++]=r),t.t=n,t.clamp()}function oe(e,t){var n=this.abs(),r=e.abs(),i=n.t;for(t.t=i+r.t;--i>=0;)t[i]=0;for(i=0;i<r.t;++i)t[i+n.t]=n.am(0,r[i],t,i,0,n.t);t.s=0,t.clamp(),this.s!=e.s&&v.ZERO.subTo(t,t)}function se(e){for(var t=this.abs(),n=e.t=2*t.t;--n>=0;)e[n]=0;for(n=0;n<t.t-1;++n){var r=t.am(n,t[n],e,2*n,0,1);(e[n+t.t]+=t.am(n+1,2*t[n],e,2*n+1,r,t.t-n-1))>=t.DV&&(e[n+t.t]-=t.DV,e[n+t.t+1]=1)}e.t>0&&(e[e.t-1]+=t.am(n,t[n],e,2*n,0,1)),e.s=0,e.clamp()}function ce(e,t,n){var r=e.abs();if(!(r.t<=0)){var i=this.abs();if(i.t<r.t){t!=null&&t.fromInt(0),n!=null&&this.copyTo(n);return}n==null&&(n=y());var a=y(),o=this.s,s=e.s,c=this.DB-te(r[r.t-1]);c>0?(r.lShiftTo(c,a),i.lShiftTo(c,n)):(r.copyTo(a),i.copyTo(n));var l=a.t,u=a[l-1];if(u!=0){var d=u*(1<<this.F1)+(l>1?a[l-2]>>this.F2:0),f=this.FV/d,p=(1<<this.F1)/d,m=1<<this.F2,h=n.t,g=h-l,_=t==null?y():t;for(a.dlShiftTo(g,_),n.compareTo(_)>=0&&(n[n.t++]=1,n.subTo(_,n)),v.ONE.dlShiftTo(l,_),_.subTo(a,a);a.t<l;)a[a.t++]=0;for(;--g>=0;){var b=n[--h]==u?this.DM:Math.floor(n[h]*f+(n[h-1]+m)*p);if((n[h]+=a.am(0,b,n,g,0,l))<b)for(a.dlShiftTo(g,_),n.subTo(_,n);n[h]<--b;)n.subTo(_,n)}t!=null&&(n.drShiftTo(l,t),o!=s&&v.ZERO.subTo(t,t)),n.t=l,n.clamp(),c>0&&n.rShiftTo(c,n),o<0&&v.ZERO.subTo(n,n)}}}function le(e){var t=y();return this.abs().divRemTo(e,null,t),this.s<0&&t.compareTo(v.ZERO)>0&&e.subTo(t,t),t}function ue(e){this.m=e}function de(e){return e.s<0||e.compareTo(this.m)>=0?e.mod(this.m):e}function fe(e){return e}function pe(e){e.divRemTo(this.m,null,e)}function me(e,t,n){e.multiplyTo(t,n),this.reduce(n)}function he(e,t){e.squareTo(t),this.reduce(t)}ue.prototype.convert=de,ue.prototype.revert=fe,ue.prototype.reduce=pe,ue.prototype.mulTo=me,ue.prototype.sqrTo=he;function ge(){if(this.t<1)return 0;var e=this[0];if(!(e&1))return 0;var t=e&3;return t=t*(2-(e&15)*t)&15,t=t*(2-(e&255)*t)&255,t=t*(2-((e&65535)*t&65535))&65535,t=t*(2-e*t%this.DV)%this.DV,t>0?this.DV-t:-t}function _e(e){this.m=e,this.mp=e.invDigit(),this.mpl=this.mp&32767,this.mph=this.mp>>15,this.um=(1<<e.DB-15)-1,this.mt2=2*e.t}function ve(e){var t=y();return e.abs().dlShiftTo(this.m.t,t),t.divRemTo(this.m,null,t),e.s<0&&t.compareTo(v.ZERO)>0&&this.m.subTo(t,t),t}function ye(e){var t=y();return e.copyTo(t),this.reduce(t),t}function be(e){for(;e.t<=this.mt2;)e[e.t++]=0;for(var t=0;t<this.m.t;++t){var n=e[t]&32767,r=n*this.mpl+((n*this.mph+(e[t]>>15)*this.mpl&this.um)<<15)&e.DM;for(n=t+this.m.t,e[n]+=this.m.am(0,r,e,t,0,this.m.t);e[n]>=e.DV;)e[n]-=e.DV,e[++n]++}e.clamp(),e.drShiftTo(this.m.t,e),e.compareTo(this.m)>=0&&e.subTo(this.m,e)}function xe(e,t){e.squareTo(t),this.reduce(t)}function Se(e,t,n){e.multiplyTo(t,n),this.reduce(n)}_e.prototype.convert=ve,_e.prototype.revert=ye,_e.prototype.reduce=be,_e.prototype.mulTo=Se,_e.prototype.sqrTo=xe;function Ce(){return(this.t>0?this[0]&1:this.s)==0}function we(e,t){if(e>4294967295||e<1)return v.ONE;var n=y(),r=y(),i=t.convert(this),a=te(e)-1;for(i.copyTo(n);--a>=0;)if(t.sqrTo(n,r),(e&1<<a)>0)t.mulTo(r,i,n);else{var o=n;n=r,r=o}return t.revert(n)}function Te(e,t){var n=e<256||t.isEven()?new ue(t):new _e(t);return this.exp(e,n)}v.prototype.copyTo=A,v.prototype.fromInt=j,v.prototype.fromString=N,v.prototype.clamp=ee,v.prototype.dlShiftTo=re,v.prototype.drShiftTo=R,v.prototype.lShiftTo=ie,v.prototype.rShiftTo=z,v.prototype.subTo=ae,v.prototype.multiplyTo=oe,v.prototype.squareTo=se,v.prototype.divRemTo=ce,v.prototype.invDigit=ge,v.prototype.isEven=Ce,v.prototype.exp=we,v.prototype.toString=P,v.prototype.negate=F,v.prototype.abs=I,v.prototype.compareTo=L,v.prototype.bitLength=ne,v.prototype.mod=le,v.prototype.modPowInt=Te,v.ZERO=M(0),v.ONE=M(1);function Ee(){if(this.s<0){if(this.t==1)return this[0]-this.DV;if(this.t==0)return-1}else if(this.t==1)return this[0];else if(this.t==0)return 0;return(this[1]&(1<<32-this.DB)-1)<<this.DB|this[0]}function De(e){return Math.floor(Math.LN2*this.DB/Math.log(e))}function Oe(){return this.s<0?-1:this.t<=0||this.t==1&&this[0]<=0?0:1}function ke(e){if(e==null&&(e=10),this.signum()==0||e<2||e>36)return`0`;var t=this.chunkSize(e),n=Math.pow(e,t),r=M(n),i=y(),a=y(),o=``;for(this.divRemTo(r,i,a);i.signum()>0;)o=(n+a.intValue()).toString(e).substr(1)+o,i.divRemTo(r,i,a);return a.intValue().toString(e)+o}v.prototype.chunkSize=De,v.prototype.toRadix=ke,v.prototype.intValue=Ee,v.prototype.signum=Oe;var Ae=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`,je=`=`;function Me(e){var t,n,r=``;for(t=0;t+3<=e.length;t+=3)n=parseInt(e.substring(t,t+3),16),r+=Ae.charAt(n>>6)+Ae.charAt(n&63);if(t+1==e.length?(n=parseInt(e.substring(t,t+1),16),r+=Ae.charAt(n<<2)):t+2==e.length&&(n=parseInt(e.substring(t,t+2),16),r+=Ae.charAt(n>>2)+Ae.charAt((n&3)<<4)),je)for(;(r.length&3)>0;)r+=je;return r}function Ne(e){var t=``,n,r=0,i,a;for(n=0;n<e.length&&e.charAt(n)!=je;++n)a=Ae.indexOf(e.charAt(n)),!(a<0)&&(r==0?(t+=O(a>>2),i=a&3,r=1):r==1?(t+=O(i<<2|a>>4),i=a&15,r=2):r==2?(t+=O(i),t+=O(a>>2),i=a&3,r=3):(t+=O(i<<2|a>>4),t+=O(a&15),r=0));return r==1&&(t+=O(i<<2)),t}function Pe(e,t){return new v(e,t)}function Fe(e,t){if(t<e.length+11)throw`Message too long for RSA`;for(var n=[],r=e.length-1;r>=0&&t>0;){var i=e.charCodeAt(r--);i<128?n[--t]=i:i>127&&i<2048?(n[--t]=i&63|128,n[--t]=i>>6|192):(n[--t]=i&63|128,n[--t]=i>>6&63|128,n[--t]=i>>12|224)}n[--t]=0;for(var a=new SecureRandom,o=[];t>2;){for(o[0]=0;o[0]==0;)a.nextBytes(o);n[--t]=o[0]}return n[--t]=2,n[--t]=0,new v(n)}function Ie(e,t,n){for(var r=``,i=0;r.length<t;)r+=n(String.fromCharCode.apply(String,e.concat([(i&4278190080)>>24,(i&16711680)>>16,(i&65280)>>8,i&255]))),i+=1;return r}function Le(e,t,n,r){var i=m.crypto.MessageDigest,a=m.crypto.Util,o=null;if(n||(n=`sha1`),typeof n==`string`&&(o=i.getCanonicalAlgName(n),r=i.getHashLength(o),n=function(e){return $e(a.hashHex(et(e),o))}),e.length+2*r+2>t)throw`Message too long for RSA`;var s=``,c;for(c=0;c<t-e.length-2*r-2;c+=1)s+=`\0`;var l=n(``)+s+``+e,u=Array(r);new SecureRandom().nextBytes(u);var d=Ie(u,l.length,n),f=[];for(c=0;c<l.length;c+=1)f[c]=l.charCodeAt(c)^d.charCodeAt(c);var p=Ie(f,u.length,n),h=[0];for(c=0;c<u.length;c+=1)h[c+1]=u[c]^p.charCodeAt(c);return new v(h.concat(f))}function B(){this.n=null,this.e=0,this.d=null,this.p=null,this.q=null,this.dmp1=null,this.dmq1=null,this.coeff=null}function Re(e,t){if(this.isPublic=!0,this.isPrivate=!1,typeof e!=`string`)this.n=e,this.e=t;else if(e!=null&&t!=null&&e.length>0&&t.length>0)this.n=Pe(e,16),this.e=parseInt(t,16);else throw`Invalid RSA public key`}function ze(e){return e.modPowInt(this.e,this.n)}function Be(e){var t=Fe(e,this.n.bitLength()+7>>3);if(t==null)return null;var n=this.doPublic(t);if(n==null)return null;var r=n.toString(16);return r.length&1?`0`+r:r}function Ve(e,t,n){var r=Le(e,this.n.bitLength()+7>>3,t,n);if(r==null)return null;var i=this.doPublic(r);if(i==null)return null;var a=i.toString(16);return a.length&1?`0`+a:a}B.prototype.doPublic=ze,B.prototype.setPublic=Re,B.prototype.encrypt=Be,B.prototype.encryptOAEP=Ve,B.prototype.type=`RSA`;function He(e,t){for(var n=e.toByteArray(),r=0;r<n.length&&n[r]==0;)++r;if(n.length-r!=t-1||n[r]!=2)return null;for(++r;n[r]!=0;)if(++r>=n.length)return null;for(var i=``;++r<n.length;){var a=n[r]&255;a<128?i+=String.fromCharCode(a):a>191&&a<224?(i+=String.fromCharCode((a&31)<<6|n[r+1]&63),++r):(i+=String.fromCharCode((a&15)<<12|(n[r+1]&63)<<6|n[r+2]&63),r+=2)}return i}function Ue(e,t,n){for(var r=``,i=0;r.length<t;)r+=n(e+String.fromCharCode.apply(String,[(i&4278190080)>>24,(i&16711680)>>16,(i&65280)>>8,i&255])),i+=1;return r}function We(e,t,n,r){var i=m.crypto.MessageDigest,a=m.crypto.Util,o=null;n||(n=`sha1`),typeof n==`string`&&(o=i.getCanonicalAlgName(n),r=i.getHashLength(o),n=function(e){return $e(a.hashHex(et(e),o))}),e=e.toByteArray();var s;for(s=0;s<e.length;s+=1)e[s]&=255;for(;e.length<t;)e.unshift(0);if(e=String.fromCharCode.apply(String,e),e.length<2*r+2)throw`Cipher too short`;var c=e.substr(1,r),l=e.substr(r+1),u=Ue(l,r,n),d=[],s;for(s=0;s<c.length;s+=1)d[s]=c.charCodeAt(s)^u.charCodeAt(s);var f=Ue(String.fromCharCode.apply(String,d),e.length-r,n),p=[];for(s=0;s<l.length;s+=1)p[s]=l.charCodeAt(s)^f.charCodeAt(s);if(p=String.fromCharCode.apply(String,p),p.substr(0,r)!==n(``))throw`Hash mismatch`;p=p.substr(r);var h=p.indexOf(``);if((h==-1?-1:p.substr(0,h).lastIndexOf(`\0`))+1!=h)throw`Malformed data`;return p.substr(h+1)}function Ge(e,t,n){if(this.isPrivate=!0,typeof e!=`string`)this.n=e,this.e=t,this.d=n;else if(e!=null&&t!=null&&e.length>0&&t.length>0)this.n=Pe(e,16),this.e=parseInt(t,16),this.d=Pe(n,16);else throw`Invalid RSA private key`}function Ke(e,t,n,r,i,a,o,s){if(this.isPrivate=!0,this.isPublic=!1,e==null)throw`RSASetPrivateEx N == null`;if(t==null)throw`RSASetPrivateEx E == null`;if(e.length==0)throw`RSASetPrivateEx N.length == 0`;if(t.length==0)throw`RSASetPrivateEx E.length == 0`;if(e!=null&&t!=null&&e.length>0&&t.length>0)this.n=Pe(e,16),this.e=parseInt(t,16),this.d=Pe(n,16),this.p=Pe(r,16),this.q=Pe(i,16),this.dmp1=Pe(a,16),this.dmq1=Pe(o,16),this.coeff=Pe(s,16);else throw`Invalid RSA private key in RSASetPrivateEx`}function qe(e){if(this.p==null||this.q==null)return e.modPow(this.d,this.n);for(var t=e.mod(this.p).modPow(this.dmp1,this.p),n=e.mod(this.q).modPow(this.dmq1,this.q);t.compareTo(n)<0;)t=t.add(this.p);return t.subtract(n).multiply(this.coeff).mod(this.p).multiply(this.q).add(n)}function Je(e){if(e.length!=Math.ceil(this.n.bitLength()/4))throw Error(`wrong ctext length`);var t=Pe(e,16),n=this.doPrivate(t);return n==null?null:He(n,this.n.bitLength()+7>>3)}function Ye(e,t,n){if(e.length!=Math.ceil(this.n.bitLength()/4))throw Error(`wrong ctext length`);var r=Pe(e,16),i=this.doPrivate(r);return i==null?null:We(i,this.n.bitLength()+7>>3,t,n)}B.prototype.doPrivate=qe,B.prototype.setPrivate=Ge,B.prototype.setPrivateEx=Ke,B.prototype.decrypt=Je,B.prototype.decryptOAEP=Ye,(m.lang===void 0||!m.lang)&&(m.lang={}),m.lang.String=function(){};function Xe(e){return e.length%4==2?e+=`==`:e.length%4==3&&(e+=`=`),e=e.replace(/-/g,`+`),e=e.replace(/_/g,`/`),e}function Ze(e){return Ne(Xe(e))}function Qe(e){return decodeURIComponent(ot(e))}function $e(e){for(var t=``,n=0;n<e.length-1;n+=2)t+=String.fromCharCode(parseInt(e.substr(n,2),16));return t}function et(e){for(var t=``,n=0;n<e.length;n++)t+=(`0`+e.charCodeAt(n).toString(16)).slice(-2);return t}function tt(e){return Me(e)}function nt(e){var t=tt(e).replace(/(.{64})/g,`$1\r
256
339
  `);return t=t.replace(/\r\n$/,``),t}function rt(e){return Ne(e.replace(/[^0-9A-Za-z\/+=]*/g,``))}function it(e,t){var n=nt(e);return`-----BEGIN `+t+`-----\r
257
340
  `+n+`\r
@@ -975,7 +1058,7 @@ struct Counters { medium: atomic<u32>, large: atomic<u32>, subBlock: atomic<u32>
975
1058
  `),ES=[dS,fS,_S,vS,CS].join(`
976
1059
  `);function DS(e,t){return{binding:e,visibility:GPUShaderStage.COMPUTE,buffer:{type:t}}}function OS(e,t){let n=e.createBindGroupLayout({label:`pointcloud-binned-classify-bgl`,entries:[DS(0,`storage`),DS(1,`storage`),DS(2,`storage`)]}),r=e.createBindGroupLayout({label:`pointcloud-binned-args-bgl`,entries:[DS(0,`uniform`),DS(1,`storage`),DS(2,`storage`)]}),i=e.createBindGroupLayout({label:`pointcloud-binned-coop-bgl`,entries:[DS(0,`storage`),DS(1,`uniform`),DS(2,`read-only-storage`),DS(3,`read-only-storage`),DS(4,`read-only-storage`)]}),a=e.createComputePipeline({label:`pointcloud-binned-classify`,layout:e.createPipelineLayout({bindGroupLayouts:[t,n]}),compute:{module:e.createShaderModule({code:wS}),entryPoint:`main`}}),o=e.createComputePipeline({label:`pointcloud-binned-args-builder`,layout:e.createPipelineLayout({bindGroupLayouts:[r]}),compute:{module:e.createShaderModule({code:TS}),entryPoint:`main`}}),s=e.createPipelineLayout({bindGroupLayouts:[i]}),c=e.createShaderModule({code:ES});return{classifyBGL:n,argsBGL:r,coopBGL:i,classifier:a,argsBuilder:o,coopMedium:e.createComputePipeline({label:`pointcloud-binned-coop-medium`,layout:s,compute:{module:c,entryPoint:`coop_medium`}}),coopLarge:e.createComputePipeline({label:`pointcloud-binned-coop-large`,layout:s,compute:{module:c,entryPoint:`coop_large`}})}}var kS={smallThreshold:8,largeThreshold:16,bucketRatio:.125,bucketMin:16384,bucketMax:Math.pow(2,21),subBlockRatio:.02,subBlockMin:169*256,subBlockMax:Math.pow(2,23)},AS=16,jS=32;function MS(e,t,n){return Math.max(1,Math.min(Math.max(e,t),n))}var NS=class{constructor(e,t,n){this.buckets=null,this.subBlocks=null,this.bucketCap=0,this.subBlockCap=0,this.classifyBG=null,this.argsBG=null,this.coopBG=null,this.boundFramebuffer=null,this.device=e,this.frameUniformBuffer=n,this.pipes=OS(e,t),this.counters=e.createBuffer({label:`pointcloud-binned-counters`,size:AS,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),this.args=e.createBuffer({label:`pointcloud-binned-args`,size:jS,usage:GPUBufferUsage.INDIRECT|GPUBufferUsage.STORAGE})}get bucketCapacity(){return this.bucketCap}get subBlockCapacity(){return this.subBlockCap}prepare(e,t){let n=kS,r=this.device.limits,i=Math.min(r.maxStorageBufferBindingSize,r.maxBufferSize),a=Math.pow(r.maxComputeWorkgroupsPerDimension,2),o=Math.min(n.bucketMax,Math.floor(i/2/16),a),s=Math.min(n.subBlockMax,Math.floor(i/8),a),c=Math.max(this.bucketCap,MS(Math.ceil(e*n.bucketRatio),n.bucketMin,o)),l=Math.max(this.subBlockCap,MS(Math.ceil(c*169*n.subBlockRatio),n.subBlockMin,s));(c!==this.bucketCap||l!==this.subBlockCap)&&this.allocate(c,l),(this.classifyBG===null||this.boundFramebuffer!==t)&&this.createBindGroups(t)}encodeClearCounters(e){e.clearBuffer(this.counters,0,AS)}encodeClassify(e,t,n){e.setPipeline(this.pipes.classifier),e.setBindGroup(0,t),e.setBindGroup(1,this.classifyBG),e.dispatchWorkgroups(Math.ceil(n/256))}encodeCoop(e){e.setPipeline(this.pipes.argsBuilder),e.setBindGroup(0,this.argsBG),e.dispatchWorkgroups(1),e.setPipeline(this.pipes.coopMedium),e.setBindGroup(0,this.coopBG),e.dispatchWorkgroupsIndirect(this.args,0),e.setPipeline(this.pipes.coopLarge),e.dispatchWorkgroupsIndirect(this.args,12)}dispose(){var e,t;(e=this.buckets)==null||e.destroy(),(t=this.subBlocks)==null||t.destroy(),this.counters.destroy(),this.args.destroy(),this.buckets=null,this.subBlocks=null,this.classifyBG=null,this.argsBG=null,this.coopBG=null}allocate(e,t){var n,r;(n=this.buckets)==null||n.destroy(),(r=this.subBlocks)==null||r.destroy(),this.buckets=this.device.createBuffer({label:`pointcloud-binned-buckets`,size:2*e*16,usage:GPUBufferUsage.STORAGE}),this.subBlocks=this.device.createBuffer({label:`pointcloud-binned-sub-blocks`,size:t*8,usage:GPUBufferUsage.STORAGE}),this.bucketCap=e,this.subBlockCap=t,this.classifyBG=null}createBindGroups(e){let t=this.buckets,n=this.subBlocks;this.classifyBG=this.device.createBindGroup({layout:this.pipes.classifyBGL,entries:[{binding:0,resource:{buffer:t}},{binding:1,resource:{buffer:n}},{binding:2,resource:{buffer:this.counters}}]}),this.argsBG=this.device.createBindGroup({layout:this.pipes.argsBGL,entries:[{binding:0,resource:{buffer:this.frameUniformBuffer}},{binding:1,resource:{buffer:this.counters}},{binding:2,resource:{buffer:this.args}}]}),this.coopBG=this.device.createBindGroup({layout:this.pipes.coopBGL,entries:[{binding:0,resource:{buffer:e}},{binding:1,resource:{buffer:this.frameUniformBuffer}},{binding:2,resource:{buffer:t}},{binding:3,resource:{buffer:n}},{binding:4,resource:{buffer:this.args}}]}),this.boundFramebuffer=e}};function PS(e,t,n){let r=Math.round(e*31)&31,i=Math.round(t*63)&63,a=Math.round(n*31)&31;return r<<11|i<<5|a}function FS(e){return e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}var IS=class e{get colorFormat(){return this.format}constructor(e,t){this.width=0,this.height=0,this.pointBuffer=null,this.colorBuffer=null,this.normalBuffer=null,this.framebuffer=null,this.clearBindGroup=null,this.rasterizeBindGroup=null,this.displayBindGroup=null,this.pointCount=0,this.frameUniformScratch=new ArrayBuffer(lS.size),this.tileUniformScratch=new ArrayBuffer(uS.size),this.pointSizeUniformState={sizeMode:1,pointScale:.02,pointMinPixel:0,pointMaxPixel:40,pixelRatio:1,resolutionY:1,hardPixelMax:12,pointShape:1,maxDisplayBoost:1},this.ready=!1,this.binnedCore=null,this.frameViewProj=new l.Matrix4,this.tileMvpScratch=new l.Matrix4,this.pointCloudCache=new Map,this.rasterizeBindGroupCache=new Map,this.tileUniformBufferCache=new Map,this.tileDisposeListeners=new Map,this.packedColorScratch=new Uint32Array,this.packedNormalScratch=new Uint32Array,this.tmpVec3a=new l.Vector3,this.tmpVec3b=new l.Vector3,this.tmpVec3c=new l.Vector3,this.tmpVec3d=new l.Vector3,this.device=e,this.format=t,this.frameUniformBuffer=e.createBuffer({size:lS.size,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),this.displayParamsBuffer=e.createBuffer({size:8,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});let n=new DataView(this.frameUniformScratch),r=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);new Float32Array(this.frameUniformScratch,0,16).set(r);let i=lS.offsets;n.setUint32(i.screenInfo,0,!0),n.setUint32(i.screenInfo+4,0,!0),n.setUint32(i.screenInfo+12,this.pointSizeUniformState.sizeMode,!0),n.setFloat32(i.sizeInfo0,this.pointSizeUniformState.pointScale,!0),n.setFloat32(i.sizeInfo0+4,this.pointSizeUniformState.pointMinPixel,!0),n.setFloat32(i.sizeInfo0+8,this.pointSizeUniformState.pointMaxPixel,!0),n.setFloat32(i.sizeInfo0+12,this.pointSizeUniformState.pixelRatio,!0),n.setUint32(i.sizeInfo1,Math.round(this.pointSizeUniformState.resolutionY),!0),n.setUint32(i.sizeInfo1+4,Math.round(this.pointSizeUniformState.hardPixelMax),!0),n.setUint32(i.sizeInfo1+8,this.pointSizeUniformState.pointShape,!0),e.queue.writeBuffer(this.frameUniformBuffer,0,this.frameUniformScratch);let a=e.createShaderModule({code:dS+aS}),o=e.createShaderModule({code:oS});this.clearPipeline=e.createComputePipeline({layout:`auto`,compute:{module:a,entryPoint:`main`}}),this.tileBindGroupLayout=e.createBindGroupLayout({label:`pointcloud-tile-bgl`,entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:`storage`}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:`uniform`}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:`read-only-storage`}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:`read-only-storage`}},{binding:4,visibility:GPUShaderStage.COMPUTE,texture:{sampleType:`float`,viewDimension:`2d`}},{binding:5,visibility:GPUShaderStage.COMPUTE,sampler:{type:`filtering`}},{binding:6,visibility:GPUShaderStage.COMPUTE,buffer:{type:`read-only-storage`}},{binding:7,visibility:GPUShaderStage.COMPUTE,buffer:{type:`uniform`}}]}),this.fullscreenQuadPipeline=e.createRenderPipeline({layout:`auto`,vertex:{module:o,entryPoint:`vs_main`},fragment:{module:o,entryPoint:`fs_main`,targets:[{format:this.format}]},primitive:{topology:`triangle-list`},depthStencil:{format:`depth24plus`,depthWriteEnabled:!0,depthCompare:`less`}}),this.fullscreenQuadPipelineAdditive=e.createRenderPipeline({layout:`auto`,vertex:{module:o,entryPoint:`vs_main`},fragment:{module:o,entryPoint:`fs_main`,targets:[{format:this.format,blend:{color:{srcFactor:`one`,dstFactor:`one`,operation:`add`},alpha:{srcFactor:`one`,dstFactor:`one`,operation:`add`}}}]},primitive:{topology:`triangle-list`},depthStencil:{format:`depth24plus`,depthWriteEnabled:!0,depthCompare:`less`}}),this.placeholderGradientTexture=e.createTexture({size:{width:1,height:1},format:`rgba8unorm`,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST}),this.placeholderGradientView=this.placeholderGradientTexture.createView(),e.queue.writeTexture({texture:this.placeholderGradientTexture},new Uint8Array([128,128,128,255]),{offset:0,bytesPerRow:4},{width:1,height:1,depthOrArrayLayers:1}),this.gradientSampler=e.createSampler({magFilter:`linear`,minFilter:`linear`,addressModeU:`clamp-to-edge`,addressModeV:`clamp-to-edge`})}setPointCloud(e,t,n,r,i,a){var o,s,c,l;let u=(o=i==null?void 0:i.positionsVersion)==null?0:o,d=(s=i==null?void 0:i.colorsVersion)==null?0:s,f=(c=e.styleRevision)==null?0:c,p=this.pointCloudCache.get(e);if(p&&p.count===r&&p.positionsRef===t&&p.colorsRef===n&&p.positionsVersion===u&&p.colorsVersion===d&&p.styleRevision===f)this.pointBuffer=p.pointBuffer,this.colorBuffer=p.colorBuffer,this.pointCount=p.count,this.normalBuffer=p.normalBuffer;else{p&&(p.pointBuffer.destroy(),p.colorBuffer.destroy(),p.normalBuffer.destroy(),this.rasterizeBindGroupCache.delete(e));let i=this.device.createBuffer({size:Math.max(12,r*12),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});this.device.queue.writeBuffer(i,0,t.buffer,t.byteOffset,r*12);let a=this.device.createBuffer({size:Math.max(4,r*4),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});if(this.packedColorScratch.length<r&&(this.packedColorScratch=new Uint32Array(r)),n instanceof Uint8Array)for(let e=0;e<r;e++){let t=e*3,r=FS(n[t]/255),i=FS(n[t+1]/255),a=FS(n[t+2]/255);this.packedColorScratch[e]=PS(r,i,a)}else for(let e=0;e<r;e++){let t=e*3;this.packedColorScratch[e]=PS(n[t],n[t+1],n[t+2])}this.device.queue.writeBuffer(a,0,this.packedColorScratch.buffer,0,r*4);let o=this.device.createBuffer({size:Math.max(4,r*4),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});this.packedNormalScratch.length<r&&(this.packedNormalScratch=new Uint32Array(r));let s=this.packedNormalScratch,c=e.normals;if(cn(c,r))for(let e=0;e<r;e++){let t=e*4;s[e]=c[t]&255|(c[t+1]&255)<<8|(c[t+2]&255)<<16}else for(let e=0;e<r;e++)s[e]=8323072;this.device.queue.writeBuffer(o,0,s.buffer,s.byteOffset,r*4),this.pointCloudCache.set(e,{pointBuffer:i,colorBuffer:a,normalBuffer:o,count:r,positionsRef:t,colorsRef:n,positionsVersion:u,colorsVersion:d,styleRevision:f}),this.registerTileDisposer(e),this.pointBuffer=i,this.colorBuffer=a,this.normalBuffer=o,this.pointCount=r}let m=(l=a==null?void 0:a.gradientView)==null?this.placeholderGradientView:l,h=this.normalBuffer;if(!h)return;let g=this.ensureTileUniformBuffer(e);this.bindRasterizeGroup(e,g,m,h),this.ready=!!this.framebuffer&&!!this.rasterizeBindGroup}prepareFrame(e){this.framebuffer&&(this.binnedCore||(this.binnedCore=new NS(this.device,this.tileBindGroupLayout,this.frameUniformBuffer)),this.binnedCore.prepare(e,this.framebuffer))}beginPointCloudFrame(e,t,n){n.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),this.frameViewProj.copy(n);let r=this.frameViewProj.elements,i=new DataView(this.frameUniformScratch);for(let e=0;e<16;e++)i.setFloat32(lS.offsets.viewProj+e*4,r[e],!0);this.writeFrameUniformsDataView(i,t,e,n),this.device.queue.writeBuffer(this.frameUniformBuffer,0,this.frameUniformScratch)}writeTileUniform(e,t){let n=this.ensureTileUniformBuffer(e),r=new DataView(this.tileUniformScratch);this.writeTileUniformsDataView(r,e,t),this.device.queue.writeBuffer(n,0,this.tileUniformScratch)}setPointSizeParams(e){var t;this.pointSizeUniformState.sizeMode=+(e.sizeMode===`ATTENUATION`),this.pointSizeUniformState.pointScale=Math.max(0,e.pointScale),this.pointSizeUniformState.pointMinPixel=Math.max(0,e.pointMinPixel),this.pointSizeUniformState.pointMaxPixel=Math.max(this.pointSizeUniformState.pointMinPixel,e.pointMaxPixel),this.pointSizeUniformState.pixelRatio=Math.max(.1,e.pixelRatio),this.pointSizeUniformState.resolutionY=Math.max(1,e.resolutionY),this.pointSizeUniformState.pointShape=+(e.pointShape===`CIRCLE`);let n=(t=e.maxDisplayBoost)==null?this.pointSizeUniformState.maxDisplayBoost:t;this.pointSizeUniformState.maxDisplayBoost=Math.max(.1,n),this.pointSizeUniformState.hardPixelMax=Math.round(Math.min(96,Math.max(1,this.pointSizeUniformState.pointMaxPixel*this.pointSizeUniformState.pixelRatio)))}getPlaceholderGradientView(){return this.placeholderGradientView}static tileFlags(e,t){let n=0;return cn(e.normals,t)&&(n|=1),e.useAddBlend&&(n|=8),n}writePointAttenuationUniforms(e,t){let n=t.projectionMatrix.elements,r=t.matrixWorldInverse.elements,i=lS.offsets;e.setFloat32(i.pointAttenPack,-n[11],!0),e.setFloat32(i.pointAttenPack+4,2/n[5],!0),e.setFloat32(i.pointAttenPack+8,0,!0),e.setFloat32(i.pointAttenPack+12,0,!0),e.setFloat32(i.viewZRow,r[2],!0),e.setFloat32(i.viewZRow+4,r[6],!0),e.setFloat32(i.viewZRow+8,r[10],!0),e.setFloat32(i.viewZRow+12,r[14],!0)}writeFrameUniformsDataView(e,t,n,r){var i,a;let o=lS.offsets;e.setUint32(o.screenInfo,this.width,!0),e.setUint32(o.screenInfo+4,this.height,!0),e.setUint32(o.screenInfo+8,0,!0),this.writePointAttenuationUniforms(e,n),e.setUint32(o.screenInfo+12,this.pointSizeUniformState.sizeMode,!0),e.setFloat32(o.sizeInfo0,this.pointSizeUniformState.pointScale,!0),e.setFloat32(o.sizeInfo0+4,this.pointSizeUniformState.pointMinPixel,!0),e.setFloat32(o.sizeInfo0+8,this.pointSizeUniformState.pointMaxPixel,!0),e.setFloat32(o.sizeInfo0+12,this.pointSizeUniformState.pixelRatio,!0),e.setUint32(o.sizeInfo1,Math.round(this.pointSizeUniformState.resolutionY),!0),e.setUint32(o.sizeInfo1+4,Math.round(this.pointSizeUniformState.hardPixelMax),!0),e.setUint32(o.sizeInfo1+8,this.pointSizeUniformState.pointShape,!0);let s=t.colorStyle===`ALTITUDE`?1:t.colorStyle===`CONSTANT`?2:0,c=+(t.floorStyle===`OPACITY`),l=t.pointBack===`HIDDEN`?1:t.pointBack===`DARK`?2:0;n.updateMatrixWorld(!0);let u=n.getWorldPosition(this.tmpVec3c);e.setFloat32(o.cameraWorld,u.x,!0),e.setFloat32(o.cameraWorld+4,u.y,!0),e.setFloat32(o.cameraWorld+8,u.z,!0),e.setFloat32(o.cameraWorld+12,0,!0);let d=this.tmpVec3d.set(0,0,-1).applyQuaternion(n.quaternion);e.setFloat32(o.cameraForward,d.x,!0),e.setFloat32(o.cameraForward+4,d.y,!0),e.setFloat32(o.cameraForward+8,d.z,!0),e.setFloat32(o.cameraForward+12,0,!0),e.setFloat32(o.constantColor,t.constantColor.x,!0),e.setFloat32(o.constantColor+4,t.constantColor.y,!0),e.setFloat32(o.constantColor+8,t.constantColor.z,!0),e.setFloat32(o.constantColor+12,1,!0),e.setFloat32(o.colorGain,t.colorSaturation,!0),e.setFloat32(o.colorGain+4,t.colorBrightness,!0),e.setFloat32(o.colorGain+8,t.outlineGain,!0),e.setFloat32(o.colorGain+12,t.distanceGain,!0),e.setUint32(o.stylePack,s,!0),e.setUint32(o.stylePack+4,c,!0),e.setUint32(o.stylePack+8,l,!0),e.setUint32(o.stylePack+12,0,!0),e.setFloat32(o.floorPack,t.floorIndex,!0),e.setFloat32(o.floorPack+4,t.shownFloorIndex,!0),e.setFloat32(o.floorPack+8,t.opacity,!0),e.setFloat32(o.floorPack+12,t.modelAlpha,!0);let f=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);for(let t=0;t<16;t++)e.setFloat32(o.clip0Inv+t*4,f[t],!0),e.setFloat32(o.clip1Inv+t*4,f[t],!0);e.setFloat32(o.clip0Meta+12,0,!0),e.setFloat32(o.clip1Meta+12,0,!0);let p=t.clippers;if(p.length>0){let t=p[0];r.copy(t.clippingBoxMatrix).invert();let n=r.elements;for(let t=0;t<16;t++)e.setFloat32(o.clip0Inv+t*4,n[t],!0);e.setFloat32(o.clip0Meta,(i=t.floorIndex)==null?-1:i,!0),e.setFloat32(o.clip0Meta+12,1,!0)}if(p.length>1){let t=p[1];r.copy(t.clippingBoxMatrix).invert();let n=r.elements;for(let t=0;t<16;t++)e.setFloat32(o.clip1Inv+t*4,n[t],!0);e.setFloat32(o.clip1Meta,(a=t.floorIndex)==null?-1:a,!0),e.setFloat32(o.clip1Meta+12,1,!0)}this.writeRasterUniforms(e)}writeRasterUniforms(e){var t,n,r,i;let a=lS.offsets;e.setFloat32(a.rasterParams,kS.smallThreshold,!0),e.setFloat32(a.rasterParams+4,kS.largeThreshold,!0),e.setFloat32(a.rasterParams+8,0,!0),e.setFloat32(a.rasterParams+12,0,!0),e.setUint32(a.binnedInfo,(n=(t=this.binnedCore)==null?void 0:t.bucketCapacity)==null?0:n,!0),e.setUint32(a.binnedInfo+4,(i=(r=this.binnedCore)==null?void 0:r.subBlockCapacity)==null?0:i,!0),e.setUint32(a.binnedInfo+8,this.device.limits.maxComputeWorkgroupsPerDimension,!0),e.setUint32(a.binnedInfo+12,0,!0)}writeTileUniformsDataView(t,n,r){let i=uS.offsets,a=n.matrixWorld.elements;for(let e=0;e<16;e++)t.setFloat32(i.modelMatrix+e*4,a[e],!0);let o=this.tmpVec3a.copy(n.modelBoundingMin),s=this.tmpVec3b.copy(n.modelBoundingMax);t.setFloat32(i.bboxMin,o.x,!0),t.setFloat32(i.bboxMin+4,o.y,!0),t.setFloat32(i.bboxMin+8,o.z,!0),t.setFloat32(i.bboxMin+12,0,!0),t.setFloat32(i.bboxMax,s.x,!0),t.setFloat32(i.bboxMax+4,s.y,!0),t.setFloat32(i.bboxMax+8,s.z,!0),t.setFloat32(i.bboxMax+12,n.brightness,!0),t.setUint32(i.tilePack,r,!0),t.setUint32(i.tilePack+4,e.tileFlags(n,r),!0);let c=this.tileMvpScratch.multiplyMatrices(this.frameViewProj,n.matrixWorld).elements;for(let e=0;e<16;e++)t.setFloat32(i.mvp+e*4,c[e],!0)}resize(e,t){var n;e<=0||t<=0||(this.width=e,this.height=t,(n=this.framebuffer)==null||n.destroy(),this.framebuffer=this.device.createBuffer({size:e*t*4,usage:GPUBufferUsage.STORAGE}),this.device.queue.writeBuffer(this.displayParamsBuffer,0,new Uint32Array([e,t])),this.device.queue.writeBuffer(this.frameUniformBuffer,lS.offsets.screenInfo,new Uint32Array([e,t])),this.rasterizeBindGroupCache.clear(),this.rasterizeBindGroup=null,this.ready=!1,this.recreateBindGroups())}encodeFramebufferClear(e){!this.clearBindGroup||!this.framebuffer||(e.setPipeline(this.clearPipeline),e.setBindGroup(0,this.clearBindGroup),e.dispatchWorkgroups(Math.ceil(this.width*this.height/256)))}encodeRasterize(e){!this.binnedCore||!this.ready||!this.rasterizeBindGroup||this.pointCount<=0||this.binnedCore.encodeClassify(e,this.rasterizeBindGroup,this.pointCount)}encodeFramebufferDisplay(e,t){if(!this.displayBindGroup||!this.framebuffer)return;let n=t!=null&&t.additive?this.fullscreenQuadPipelineAdditive:this.fullscreenQuadPipeline;e.setPipeline(n),e.setBindGroup(0,this.displayBindGroup),e.draw(3)}submitMergedPointCloudFrame(e,t,n,r){var i,a,o;let s=this.binnedCore;if(!s)return;let c=(i=r==null?void 0:r.clear)==null?!0:i,l=(a=r==null?void 0:r.display)==null?!0:a,u=(o=r==null?void 0:r.displayAdditive)==null?!1:o,d=this.device.createCommandEncoder();s.encodeClearCounters(d);let f=d.beginComputePass();if(c&&this.encodeFramebufferClear(f),n(f),s.encodeCoop(f),f.end(),l){let n=d.beginRenderPass({colorAttachments:[{view:e,loadOp:`load`,storeOp:`store`}],depthStencilAttachment:{view:t,depthLoadOp:`load`,depthStoreOp:`store`}});this.encodeFramebufferDisplay(n,{additive:u}),n.end()}this.device.queue.submit([d.finish()])}dispose(){var e,t;(e=this.binnedCore)==null||e.dispose(),this.binnedCore=null;for(let[e,t]of this.tileDisposeListeners)try{e.removeEventListener(`dispose`,t)}catch(e){}this.tileDisposeListeners.clear();for(let e of this.pointCloudCache.values())e.pointBuffer.destroy(),e.colorBuffer.destroy(),e.normalBuffer.destroy();this.pointCloudCache.clear();for(let e of this.tileUniformBufferCache.values())e.destroy();this.tileUniformBufferCache.clear(),this.rasterizeBindGroupCache.clear(),(t=this.framebuffer)==null||t.destroy(),this.frameUniformBuffer.destroy(),this.displayParamsBuffer.destroy(),this.placeholderGradientTexture.destroy(),this.pointBuffer=null,this.colorBuffer=null,this.normalBuffer=null,this.framebuffer=null,this.clearBindGroup=null,this.rasterizeBindGroup=null,this.displayBindGroup=null,this.ready=!1}registerTileDisposer(e){if(this.tileDisposeListeners.has(e))return;let t=e;if(typeof t.addEventListener!=`function`)return;let n=()=>{this.releaseTileResources(e)};this.tileDisposeListeners.set(e,n),t.addEventListener(`dispose`,n)}releaseTileResources(e){let t=this.pointCloudCache.get(e);t&&(t.pointBuffer.destroy(),t.colorBuffer.destroy(),t.normalBuffer.destroy(),this.pointCloudCache.delete(e)),this.rasterizeBindGroupCache.delete(e);let n=this.tileUniformBufferCache.get(e);n&&(n.destroy(),this.tileUniformBufferCache.delete(e));let r=this.tileDisposeListeners.get(e);if(r){try{e.removeEventListener(`dispose`,r)}catch(e){}this.tileDisposeListeners.delete(e)}}recreateBindGroups(){this.clearBindGroup=null,this.rasterizeBindGroup=null,this.displayBindGroup=null,this.ready=!1,this.framebuffer&&(this.clearBindGroup=this.device.createBindGroup({layout:this.clearPipeline.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:this.framebuffer}},{binding:1,resource:{buffer:this.frameUniformBuffer}}]}),this.displayBindGroup=this.device.createBindGroup({layout:this.fullscreenQuadPipeline.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:this.framebuffer}},{binding:1,resource:{buffer:this.displayParamsBuffer}}]}),this.ready=!1)}ensureTileUniformBuffer(e){let t=this.tileUniformBufferCache.get(e);return t||(t=this.device.createBuffer({size:uS.size,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),this.tileUniformBufferCache.set(e,t),this.registerTileDisposer(e)),t}bindRasterizeGroup(e,t,n,r){if(!this.framebuffer||!this.pointBuffer||!this.colorBuffer){this.rasterizeBindGroup=null;return}let i=this.rasterizeBindGroupCache.get(e);if(i&&i.pointBuffer===this.pointBuffer&&i.colorBuffer===this.colorBuffer&&i.normalBuffer===r&&i.tileUniformBuffer===t&&i.gradientView===n){this.rasterizeBindGroup=i.bindGroup;return}let a=this.device.createBindGroup({layout:this.tileBindGroupLayout,entries:[{binding:0,resource:{buffer:this.framebuffer}},{binding:1,resource:{buffer:this.frameUniformBuffer}},{binding:2,resource:{buffer:this.pointBuffer}},{binding:3,resource:{buffer:this.colorBuffer}},{binding:4,resource:n},{binding:5,resource:this.gradientSampler},{binding:6,resource:{buffer:r}},{binding:7,resource:{buffer:t}}]});this.rasterizeBindGroupCache.set(e,{bindGroup:a,pointBuffer:this.pointBuffer,colorBuffer:this.colorBuffer,normalBuffer:r,tileUniformBuffer:t,gradientView:n}),this.rasterizeBindGroup=a}},LS=new l.Matrix4,RS=new l.Vector3,zS=new l.Box3,BS=class{constructor(e){var t;this.renderMode=`default`,this.computeRenderer=null,this.useComputePointCloud=null,this.compositeRenderTarget=null,this.lastWidth=0,this.lastHeight=0,this.gpuTextureViewCache=new WeakMap,this.outputType=(t=e==null?void 0:e.outputType)==null?l.UnsignedByteType:t,this.composer=new sx(e),this.composerVersion=``,this.renderMode=`default`,this.sceneRenders={default:new iS}}render(e,t,n,r,i){var a,o;let s=e.domElement,c=s.width,u=s.height;if(c<=0||u<=0)return!1;this.composer.updateStatus();let{endabledPassNumber:d,needsColorGBuffer:f,needsDepthGBuffer:p,version:m}=this.composer.status,h=d>0,g=e.getRenderTarget();if((c!==this.lastWidth||u!==this.lastHeight)&&(this.lastWidth=c,this.lastHeight=u,(a=this.compositeRenderTarget)==null||a.dispose(),this.compositeRenderTarget=new l.RenderTarget(c,u,{type:this.outputType}),this.compositeRenderTarget.depthTexture=new l.DepthTexture(c,u),(o=this.computeRenderer)==null||o.resize(c,u),i=!0),!this.compositeRenderTarget)return e.setRenderTarget(g),!1;!i&&h&&m!==this.composerVersion&&(i=!0),this.composerVersion=m,i&&this.renderSceneToComposite(e,t,n,r);let _=!1;return h?(this.composer.setSize(c,u),this.composer.gbuffer.clear(),f&&this.composer.gbuffer.set(`color`,this.compositeRenderTarget.texture),p&&this.compositeRenderTarget.depthTexture&&this.composer.gbuffer.set(`depth`,this.compositeRenderTarget.depthTexture),e.setRenderTarget(this.composer.readBuffer),Sx(e,this.compositeRenderTarget.texture),_=this.composer.render(e)):i&&(e.setRenderTarget(null),Sx(e,this.compositeRenderTarget.texture),_=!0),e.setRenderTarget(g),_}renderSceneToComposite(e,t,n,r){if(!this.compositeRenderTarget)return;r.updateMatrixWorld(!0),t.updateMatrixWorld(!0);let i=[];if(t.traverse(e=>{e instanceof pn&&i.push(e)}),i.length===0){e.setRenderTarget(this.compositeRenderTarget),e.clear(!0,!0,!0),e.render(t,r);return}if(this.useComputePointCloud===null)try{let t=e.backend;this.useComputePointCloud=(t==null?void 0:t.isWebGPUBackend)===!0&&!!(t!=null&&t.device)}catch(e){this.useComputePointCloud=!1}this.useComputePointCloud?this.renderPointCloudCompute(e,t,i,r):(e.setRenderTarget(this.compositeRenderTarget),e.clear(!0,!0,!0),e.render(t,r))}sortByDistance(e,t){t.getWorldPosition(RS);let n=new Map;for(let t of e){let e=t.getLocalBoundingBoxExtents();if(!e){n.set(t,Number.MAX_VALUE);continue}zS.min.set(e[0],e[1],e[2]),zS.max.set(e[3],e[4],e[5]),zS.applyMatrix4(t.matrixWorld),n.set(t,zS.distanceToPoint(RS))}return e.slice().sort((e,t)=>n.get(e)-n.get(t))}renderPointCloudCompute(e,t,n,r){var i,a,o;e.setRenderTarget(this.compositeRenderTarget),e.clear(!0,!0,!0);let s=this.getCompositeTargetViews(e),c=s==null?void 0:s.colorFormat;if(c&&((i=this.computeRenderer)==null?void 0:i.colorFormat)!==c)try{let t=e.backend.device;if(!t)return;(a=this.computeRenderer)==null||a.dispose(),this.computeRenderer=new IS(t,c),this.computeRenderer.resize(this.lastWidth,this.lastHeight)}catch(e){this.computeRenderer=null;return}if(!this.computeRenderer)return;let l=Math.max(.1,r.pixelRatio||e.getPixelRatio()),u=Math.max(1,((o=r.resolution)==null?void 0:o.y)||this.lastHeight),d=[],f=0;for(let e of n){if(!e.visible||!e.layers.test(r.layers))continue;let t=Math.max(0,Math.min(e.visiblePointCount,e.numPoints));t!==0&&(d.push(e),f+=t)}if(s&&d.length>0){this.computeRenderer.prepareFrame(f);let t=d.some(e=>e.useAddBlend),n=d[0],i=this.sortByDistance(d,r);this.computeRenderer.setPointSizeParams({sizeMode:n.pointSize,pointShape:n.pointShape,pointScale:n.pointScale,pointMinPixel:n.pointMinPixel,pointMaxPixel:n.pointMaxPixel,pixelRatio:l,resolutionY:u,maxDisplayBoost:n.maxDisplayBoost}),this.computeRenderer.submitMergedPointCloudFrame(s.colorView,s.depthView,t=>{var a;this.computeRenderer.beginPointCloudFrame(r,n,LS);for(let n of i){let r=Math.max(0,Math.min(n.visiblePointCount,n.numPoints)),i=(a=this.getCachedGpuTextureView(e,n.gradientTexture))==null?this.computeRenderer.getPlaceholderGradientView():a;this.computeRenderer.setPointCloud(n,n.positions,n.colors,r,{positionsVersion:n.positionVersion,colorsVersion:n.styleRevision},{gradientView:i}),this.computeRenderer.writeTileUniform(n,r),this.computeRenderer.encodeRasterize(t)}},{displayAdditive:t})}let p=[];for(let e of n)e.visible&&(e.visible=!1,p.push(e));let m=e.autoClear,h=e.autoClearColor,g=e.autoClearDepth,_=e.autoClearStencil;e.autoClear=!1,e.autoClearColor=!1,e.autoClearDepth=!1,e.autoClearStencil=!1,e.setRenderTarget(this.compositeRenderTarget),e.render(t,r),e.autoClear=m,e.autoClearColor=h,e.autoClearDepth=g,e.autoClearStencil=_;for(let e of p)e.visible=!0}dispose(){var e,t;this.composer.dispose(),(e=this.computeRenderer)==null||e.dispose(),this.computeRenderer=null,(t=this.compositeRenderTarget)==null||t.dispose(),this.compositeRenderTarget=null}getCompositeTargetViews(e){var t;if(!((t=this.compositeRenderTarget)!=null&&t.depthTexture))return null;try{let t=e.backend,n=t.get(this.compositeRenderTarget.texture),r=t.get(this.compositeRenderTarget.depthTexture),i=n==null?void 0:n.texture,a=r==null?void 0:r.texture;return!i||!a?null:{colorView:i.createView(),depthView:a.createView(),colorFormat:i.format}}catch(e){return null}}getCachedGpuTextureView(e,t){var n;if(!t)return null;try{let r=e.backend,i=(n=r==null?void 0:r.get)==null?void 0:n.call(r,t),a=i==null?void 0:i.texture;if(!a)return null;let o=this.gpuTextureViewCache.get(a);return o||(o=a.createView(),this.gpuTextureViewCache.set(a,o)),o}catch(e){return null}}},VS,HS=typeof navigator<`u`?((VS=navigator==null?void 0:navigator.userAgent)==null?``:VS).toLowerCase():`node`;(()=>{try{let e=document.createElement(`canvas`);return!!(window.WebGLRenderingContext&&(e.getContext(`webgl`)||e.getContext(`experimental-webgl`)))}catch(e){return!1}})();var US=typeof navigator<`u`&&navigator.gpu!==void 0;typeof window<`u`&&US?navigator.gpu.requestAdapter().then(e=>(e||(US=!1),US)).catch(()=>(US=!1,US)):Promise.resolve(US),typeof history<`u`&&`pushState`in history&&`replaceState`in history&&`state`in history;var WS=/android/i.test(HS)||/webos/i.test(HS)||/ipad|iphone|ipod/i.test(HS)||/iemobile/i.test(HS)||/opera mini/i.test(HS)||/blackberry/i.test(HS)||/windows phone/i.test(HS),GS=[`trigger`,`grip`,`primary`,`secondary`,`pinch`],KS=[`x`,`y`];function qS(e){for(let t of Object.keys(e)){let n=e[t];typeof n==`object`&&n&&!Object.isFrozen(n)&&qS(n)}return Object.freeze(e)}function JS(){return{buttons:{trigger:0,grip:1,primary:4,secondary:5,pinch:null},axes:{x:2,y:3},model:`auto`}}function YS(){return{buttons:{trigger:null,grip:null,primary:null,secondary:null,pinch:null},axes:{x:null,y:null},model:`none`}}var XS=qS({Pico:JS(),Oculus:JS(),Default:JS(),VP:YS()});function ZS(e,t){try{let n=e===void 0?navigator.userAgent:e,r=t===void 0?navigator.maxTouchPoints:t;return typeof n==`string`?n.includes(`PICO`)||n.includes(`Pico`)?`Pico`:n.includes(`Macintosh`)&&r===5?`VP`:n.includes(`Oculus`)?`Oculus`:`Default`:`Default`}catch(e){return`Default`}}function QS(e){return e===null||typeof e==`number`&&Number.isInteger(e)&&e>=0}function $S(e){return typeof e==`object`&&!!e}function eC(e,t){if(e)try{e(t)}catch(e){}}function tC(e,t,n){var r;let i=(r=XS[e])==null?XS.Default:r,a={buttons:Object.assign({},i.buttons),axes:Object.assign({},i.axes),model:i.model};if(!$S(t))return a;let o=t.buttons;if(o!==void 0)if($S(o))for(let e of GS){let t=o[e];t!==void 0&&(QS(t)?a.buttons[e]=t:eC(n,`buttons.${e}`))}else eC(n,`buttons`);let s=t.axes;if(s!==void 0)if($S(s))for(let e of KS){let t=s[e];t!==void 0&&(QS(t)?a.axes[e]=t:eC(n,`axes.${e}`))}else eC(n,`axes`);let c=t.model;return c!==void 0&&(c===`auto`||c===`none`?a.model=c:eC(n,`model`)),a}function nC(e){return e===`Default`?`Pico`:e}function rC(){let{gl:e}=this,t=e.fenceSync(e.SYNC_GPU_COMMANDS_COMPLETE,0);return e.flush(),new Promise((n,r)=>{function i(){if(t===null){r();return}let a=e.clientWaitSync(t,e.SYNC_FLUSH_COMMANDS_BIT,0);if(a===e.WAIT_FAILED){e.deleteSync(t),r();return}if(a===e.TIMEOUT_EXPIRED){setTimeout(i,0);return}e.deleteSync(t),n()}i()})}function iC(e){if(ZS()===`Default`)return!1;let t=e;if((t==null?void 0:t.isWebGLBackend)!==!0)return!1;let n=t.utils;return!n||typeof n._clientWaitAsync!=`function`?!1:(n._clientWaitAsync=rC,!0)}var aC=1579548,oC=class extends l.WebGPURenderer{constructor({antialias:e=!1,logarithmicDepthBuffer:t,outputType:n=l.UnsignedByteType,forceWebGL:r=!1}){var i;super({antialias:e,alpha:!0,depth:!0,logarithmicDepthBuffer:t,outputType:n,forceWebGL:r}),this._backendReady=!1,this.forceWebGL=r,r===!1&&US===!1&&console.warn(`设备不支持开启 WEBGPU`),this.outputColorSpace=l.SRGBColorSpace,this.setClearColor(aC,1);let a=(i=this.onDeviceLost)==null?void 0:i.bind(this);this.onDeviceLost=e=>{var t;a==null||a(e);try{(t=this.onDeviceLostCallback)==null||t.call(this,e)}catch(e){console.error(`onDeviceLostCallback error`,e)}},this.ready=this.init().then(()=>{iC(this.backend),this._backendReady=!0})}get isInitialized(){return this._backendReady}get isXRCapable(){let e=this.backend;return(e==null?void 0:e.isWebGPUBackend)!==!0}reconfigureContext(){if(this._backendReady!==!0)return;let e=this.backend;if(e&&typeof e.updateSize==`function`)try{e.updateSize()}catch(e){console.error(`reconfigureContext error`,e)}}},sC=new l.Matrix4,cC=new l.Frustum,lC=new l.Vector2,uC=new WeakMap;function dC(e){let t=!1;return e.needsRender===!0?(e.needsRender=!1,t=!0):e.mixer&&e.mixer.stats.actions.inUse>0&&(t=!0),t}var fC=class extends l.Scene{constructor(){super(...arguments),this.needsRender=!1}add(...e){return super.add(...e)}remove(...e){return super.remove(...e)}update(e,t){let n=!1,r;return t instanceof Oa?(r=t.time,lC.copy(t.resolution)):(r=K(),e.getSize(lC)),sC.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),cC.setFromProjectionMatrix(sC),this.traverseVisible(e=>{if(e.setResolution&&e.setResolution(lC.x,lC.y),e.setTime&&e.setTime(r),e.mixer instanceof l.AnimationMixer){let t=e.mixer,n=uC.get(t);n||(n=new ox,uC.set(t,n)),n.update(r),t.update(n.getDelta())}(e instanceof l.Mesh||e instanceof l.Line||e instanceof l.Points)&&(!e.frustumCulled||cC.intersectsObject(e))&&(dC(e)&&(n=!0),e.traverseAncestors(e=>{dC(e)&&(n=!0)}))}),this.needsRender=n,n}},pC=e=>e*(2-e),mC=(()=>{let e=new Float32Array([-.18,0,-.18,.18,0,-.18,-.18,0,.18,.18,0,.18]),t=new Float32Array([1,0,0,0,1,1,0,1]),n=new Uint8Array([0,2,1,2,3,1]),r=new l.BufferGeometry;return r.setAttribute(`position`,new l.BufferAttribute(e,3)),r.setAttribute(`uv`,new l.BufferAttribute(t,2)),r.setIndex(new l.BufferAttribute(n,1)),r})(),hC=(0,p.vec2)(.5,.5),gC=(0,p.float)(.017);function _C(e,t){let n=(0,p.length)(hC.sub(e));return(0,p.smoothstep)(t,t.add(gC),n)}function vC(e,t){let n=(0,p.length)(hC.sub(e));return(0,p.float)(1).sub((0,p.smoothstep)(t.sub(gC),t,n))}function yC(e){let t={baseColor:(0,p.uniform)(new l.Color(e)),circleScale:(0,p.uniform)(1),ringScale:(0,p.uniform)(1),ringOpacity:(0,p.uniform)(1),loadingAngle:(0,p.uniform)(0),loadingOpacity:(0,p.uniform)(0),progress:(0,p.uniform)(0),progressOpacity:(0,p.uniform)(0),expand0:(0,p.uniform)(0),expand1:(0,p.uniform)(0),expandOpacity:(0,p.uniform)(0),opacity:(0,p.uniform)(0),tapScale:(0,p.uniform)(1),tapOpacity:(0,p.uniform)(1),disable:(0,p.uniform)(0)},n=(0,p.uv)(),r=(0,p.vec4)(1,1,1,(0,p.float)(.8).add((0,p.abs)((0,p.normalize)((0,p.vec2)(1,-1)).dot(n.sub(hC))).mul(1.5)).clamp(0,1).mul(t.tapOpacity).mul(_C(n,(0,p.float)(.15).mul(t.circleScale).mul(t.tapScale))).mul(vC(n,(0,p.float)(.234).mul(t.circleScale).mul(t.tapScale)))),i=(0,p.vec4)(1,1,1,(0,p.float)(.5).add((0,p.abs)((0,p.normalize)((0,p.vec2)(1,1)).dot(n.sub(hC)))).clamp(0,1).mul(t.tapOpacity).mul(t.ringOpacity).mul(_C(n,(0,p.float)(.27).mul(t.ringScale).mul(t.tapScale))).mul(vC(n,(0,p.float)(.32).mul(t.ringScale).mul(t.tapScale)))),a=(0,p.mod)(p.PI.sub((0,p.atan)(hC.x.sub(n.x),hC.y.sub(n.y))).add(t.loadingAngle),p.PI2),o=(0,p.vec4)(1,1,1,(0,p.float)(1).sub((0,p.smoothstep)((0,p.float)(0),p.PI2,a)).mul(.4).add(.1).mul(t.tapOpacity).mul(t.loadingOpacity).mul(_C(n,(0,p.float)(.208).mul(t.circleScale).mul(t.tapScale))).mul(vC(n,(0,p.float)(.3).mul(t.circleScale).mul(t.tapScale)))),s=p.PI.add((0,p.atan)(hC.x.sub(n.x),hC.y.sub(n.y))),c=(0,p.vec4)(1,1,1,(0,p.float)(1).sub((0,p.step)(t.progress.mul(p.PI2),s)).mul(.5).mul(t.tapOpacity).mul(t.progressOpacity).mul(_C(n,(0,p.float)(.208).mul(t.circleScale).mul(t.tapScale))).mul(vC(n,(0,p.float)(.3).mul(t.circleScale).mul(t.tapScale)))),u=(0,p.float)(.2).add((0,p.float)(.23).mul(t.expand0)),d=(0,p.length)(hC.sub(n)),f=(0,p.vec4)(1,1,1,(0,p.float)(1).sub(u.sub(d).div(.2).clamp(0,1)).mul(.8).mul((0,p.float)(1).sub((0,p.abs)(t.expand0.sub(.5)).mul(2)).mul(1.2).clamp(0,1)).mul(t.expandOpacity).mul(vC(n,u))),m=(0,p.float)(.2).add((0,p.float)(.23).mul(t.expand1)),h=(0,p.length)(hC.sub(n)),g=(0,p.vec4)(1,1,1,(0,p.float)(1).sub(m.sub(h).div(.2).clamp(0,1)).mul(.8).mul((0,p.float)(1).sub((0,p.abs)(t.expand1.sub(.5)).mul(2)).mul(1.2).clamp(0,1)).mul(t.expandOpacity).mul(vC(n,m))),_=(0,p.vec4)(1,1,1,(0,p.float)(.5).mul(vC(n,(0,p.float)(.32).mul(t.circleScale).mul(t.tapScale)))),v=(0,p.vec4)(1,1,1,0);v=(0,p.mix)(v,g,g.w),v=(0,p.mix)(v,f,f.w),v=(0,p.mix)(v,c,c.w),v=(0,p.mix)(v,o,o.w),v=(0,p.mix)(v,r,r.w),v=(0,p.mix)(v,i,i.w),v=(0,p.mix)(v,_,t.disable);let y=(0,p.vec4)(v.xyz.mul(t.baseColor),v.w.mul(t.opacity).mul(t.opacity)),b=new l.NodeMaterial;return b.fragmentNode=y,b.blending=l.CustomBlending,b.blendSrc=l.SrcAlphaFactor,b.blendDst=l.OneMinusSrcAlphaFactor,b.blendSrcAlpha=l.OneFactor,b.blendDstAlpha=l.OneMinusSrcAlphaFactor,b.depthWrite=!1,b.transparent=!0,{material:b,u:t}}var bC=class extends l.Object3D{constructor(e={}){var t,n;super();let r=(t=e.color)==null?16777215:t,i=(n=e.scale)==null?1:n;this.progress=0,this.opacity=0,this.loading=!1,this.current=!1,this.disabled=!1,this.currentMotion=new Y({progress:0}),this.ringMotion=new Y({scale:1,opacity:1}),this.tapMotion=new Y({scale:1,opacity:1}),this.loadingOpacityMotion=new Y({opacity:0}),this.progressMotion=new Y({progress:0}),this.progressOpacityMotion=new Y({opacity:0}),this.opacityMotion=new Y({opacity:0}),this.disableMotion=new Y({progress:0});let{material:a,u:o}=yC(r);this.panoU=o,this.panoMesh=new l.Mesh(mC,a),this.renderOrder=-2,this.panoMesh.renderOrder=-2,this.panoMesh.position.y=.004,this.panoMesh.scale.set(i,1,i),this.add(this.panoMesh),this.currentStartTime=K(),this.needsRender=!0}setProgress(e){this.setDisabled(!1),this.setLoading(!1),this.progress!==e&&(e=U(e,0,1),this.tapMotion.ended&&(this.progress===0&&this.progressOpacityMotion.set({opacity:1},500).catch(q),e===0?this.progressOpacityMotion.set({opacity:0},500).catch(q).then(()=>{this.progressMotion.set({progress:0},0).catch(q)}):this.progressMotion.set({progress:U(e*1.2,0,1)},100).catch(q)),this.progress=e)}setOpacity(e){this.opacity!==e&&(this.opacity=e=U(e,0,1),this.opacityMotion.set({opacity:e},200).catch(q))}setCurrent(e){this.current!==e&&(this.currentMotion.set({progress:+!!e},2e3).catch(q),this.current=e,this.current===!0&&(this.currentStartTime=K()))}setLoading(e){this.loading!==e&&(this.loading=e,this.disabled===!0&&this.setDisabled(!1),this.loadingOpacityMotion.set({opacity:+!!e},500).catch(q))}setDisabled(e){this.disabled!==e&&(this.disabled=e,this.loading===!0&&this.setLoading(!1),this.disableMotion.set({progress:+!!e},500).catch(q))}tap(){return this.tapMotion.ended?(this.progressOpacityMotion.set({opacity:0},0).catch(q),this.progressMotion.set({progress:0},0).catch(q),this.tapMotion.setKeyframes([{progress:0,value:{scale:1,opacity:1}},{progress:.3,value:{scale:.85,opacity:.5}},{progress:.8,value:{scale:1.05,opacity:.6}},{progress:1,value:{scale:1,opacity:1}}],600).then(()=>{this.progressOpacityMotion.set({opacity:+(this.progress>0)},300).catch(q),this.progressMotion.set({progress:this.progress},120).catch(q)}).catch(q)):Promise.resolve()}updateTime(e,t){if(this.progressMotion.ended||(this.progressMotion.update(e),this.panoU.progress.value=this.progressMotion.value.progress,this.needsRender=!0),this.progressOpacityMotion.ended||(this.progressOpacityMotion.update(e),this.panoU.progressOpacity.value=this.progressOpacityMotion.value.opacity,this.needsRender=!0),this.opacityMotion.ended||(this.opacityMotion.update(e),this.panoU.opacity.value=this.opacityMotion.value.opacity,this.needsRender=!0),this.visible=this.opacityMotion.value.opacity!==0,(!this.loadingOpacityMotion.ended||this.loadingOpacityMotion.value.opacity>0)&&(this.loadingOpacityMotion.update(e),this.panoU.loadingOpacity.value=this.loadingOpacityMotion.value.opacity,this.panoU.loadingAngle.value=e/120%(Math.PI*2),this.needsRender=!0),this.tapMotion.ended||(this.tapMotion.update(e),this.panoU.tapOpacity.value=this.tapMotion.value.opacity,this.panoU.tapScale.value=this.tapMotion.value.scale,this.needsRender=!0),this.current||!this.currentMotion.ended){this.currentMotion.update(e),this.panoU.expandOpacity.value=this.currentMotion.value.progress;{let t=(e-this.currentStartTime-1500)/2e3;if(t%5<2){let e=1+Math.sin(Math.PI*t)/25*this.currentMotion.value.progress;this.panoU.circleScale.value=e,this.needsRender=!0}}{let t=(e-this.currentStartTime-1500)/2e3;if(t%5<2){let e=t%1;this.panoU.expand0.value=pC(e)*this.currentMotion.value.progress,this.needsRender=!0}}{let t=(e-this.currentStartTime-1e3)/2e3;if(t%5<2){let e=t%1;this.panoU.expand1.value=pC(e)*this.currentMotion.value.progress,this.needsRender=!0}}}if(this.currentMotion.value.progress>.2&&this.progress===0&&this.loading===!1&&(e-this.currentStartTime-1e3)/2e3%5<2?this.ringMotion.getTargetKeyframe().value.scale!==.8&&this.ringMotion.set({scale:.8,opacity:0},600).catch(q):this.ringMotion.getTargetKeyframe().value.scale!==1&&this.ringMotion.set({scale:1,opacity:1},600).catch(q),!this.ringMotion.ended){let{scale:t,opacity:n}=this.ringMotion.value;this.ringMotion.update(e),this.panoU.ringScale.value=t,this.panoU.ringOpacity.value=n,this.needsRender=!0}if(!this.disableMotion.ended){let{progress:t}=this.disableMotion.value;this.disableMotion.update(e),this.panoU.disable.value=t,this.needsRender=!0}}dispose(){this.ringMotion.dispose(),this.tapMotion.dispose(),this.progressMotion.dispose(),this.progressOpacityMotion.dispose(),this.opacityMotion.dispose(),this.currentMotion.dispose(),this.panoMesh.material.dispose()}},xC=e=>e*(2-e),SC=(()=>{let e=new Float32Array([-.18,0,-.18,.18,0,-.18,-.18,0,.18,.18,0,.18]),t=new Float32Array([1,0,0,0,1,1,0,1]),n=new Uint8Array([0,2,1,2,3,1]),r=new l.BufferGeometry;return r.setAttribute(`position`,new l.BufferAttribute(e,3)),r.setAttribute(`uv`,new l.BufferAttribute(t,2)),r.setIndex(new l.BufferAttribute(n,1)),r})(),CC=(0,p.vec2)(.5,.5),wC=(0,p.float)(.017);function TC(e,t){let n=(0,p.length)(CC.sub(e));return(0,p.smoothstep)(t,t.add(wC),n)}function EC(e,t){let n=(0,p.length)(CC.sub(e));return(0,p.float)(1).sub((0,p.smoothstep)(t.sub(wC),t,n))}function DC(e){let t={baseColor:(0,p.uniform)(new l.Color(e)),circleScale:(0,p.uniform)(1),circleOpacity:(0,p.uniform)(1),loadingAngle:(0,p.uniform)(0),loadingOpacity:(0,p.uniform)(0),progress:(0,p.uniform)(0),progressOpacity:(0,p.uniform)(0),expand0:(0,p.uniform)(0),expand1:(0,p.uniform)(0),expandOpacity:(0,p.uniform)(0),opacity:(0,p.uniform)(0),tapScale:(0,p.uniform)(1),tapOpacity:(0,p.uniform)(1),disable:(0,p.uniform)(0)},n=(0,p.uv)(),r=(0,p.vec4)(1,1,1,(0,p.float)(.8).add((0,p.abs)((0,p.normalize)((0,p.vec2)(1,-1)).dot(n.sub(CC))).mul(1.5)).clamp(0,1).mul((0,p.step)(t.progress,(0,p.float)(0))).mul(t.tapOpacity).mul(TC(n,(0,p.float)(.2).mul(t.circleScale).mul(t.tapScale))).mul(EC(n,(0,p.float)(.3).mul(t.circleScale).mul(t.tapScale)))),i=(0,p.mod)(p.PI.sub((0,p.atan)(CC.x.sub(n.x),CC.y.sub(n.y))).add(t.loadingAngle),p.PI2),a=(0,p.vec4)(1,1,1,(0,p.float)(1).sub((0,p.smoothstep)((0,p.float)(0),p.PI2,i)).mul(.9).add(.1).mul(t.tapOpacity).mul(t.loadingOpacity).mul(TC(n,(0,p.float)(.2).mul(t.circleScale).mul(t.tapScale))).mul(EC(n,(0,p.float)(.3).mul(t.circleScale).mul(t.tapScale)))),o=p.PI.add((0,p.atan)(CC.x.sub(n.x),CC.y.sub(n.y))),s=(0,p.float)(1).sub((0,p.step)(t.progress.mul(p.PI2),o)),c=(0,p.float)(.04),u=t.progress.mul(p.PI2),d=(0,p.step)((0,p.length)((0,p.vec2)(CC.x.add((0,p.float)(0).sin().mul(.25)),CC.y.add((0,p.float)(0).cos().mul(.25))).sub(n)),c),f=(0,p.step)((0,p.length)((0,p.vec2)(CC.x.add(u.sin().mul(.25)),CC.y.add(u.cos().mul(.25))).sub(n)),c),m=(0,p.vec4)(1,1,1,s.add(d).add(f).clamp(0,1).mul(.9).mul(t.tapOpacity).mul(t.progressOpacity).mul(TC(n,(0,p.float)(.2).mul(t.circleScale).mul(t.tapScale))).mul(EC(n,(0,p.float)(.3).mul(t.circleScale).mul(t.tapScale)))),h=(0,p.float)(.25).add((0,p.float)(.25).mul(t.expand0)),g=(0,p.length)(CC.sub(n)),_=(0,p.vec4)(1,1,1,(0,p.float)(1).sub(h.sub(g).div(.2).clamp(0,1)).mul(.8).mul((0,p.float)(1).sub((0,p.abs)(t.expand0.sub(.5)).mul(2)).mul(1.2).clamp(0,1)).mul(t.expandOpacity).mul(EC(n,h))),v=(0,p.float)(.25).add((0,p.float)(.23).mul(t.expand1)),y=(0,p.length)(CC.sub(n)),b=(0,p.vec4)(1,1,1,(0,p.float)(1).sub(v.sub(y).div(.2).clamp(0,1)).mul(.8).mul((0,p.float)(1).sub((0,p.abs)(t.expand1.sub(.5)).mul(2)).mul(1.2).clamp(0,1)).mul(t.expandOpacity).mul(EC(n,v))),x=(0,p.vec4)(1,1,1,(0,p.float)(.5).mul(t.tapOpacity).mul(EC(n,(0,p.float)(.32).mul(t.circleScale).mul(t.tapScale)))),S=(0,p.vec4)(1,1,1,0);S=(0,p.mix)(S,b,b.w),S=(0,p.mix)(S,_,_.w),S=(0,p.mix)(S,r,r.w),S=(0,p.mix)(S,m,m.w),S=(0,p.mix)(S,a,a.w),S=(0,p.mix)(S,x,t.disable);let C=(0,p.vec4)(S.xyz.mul(t.baseColor),S.w.mul(t.opacity).mul(t.opacity)),w=new l.NodeMaterial;return w.fragmentNode=C,w.blending=l.CustomBlending,w.blendSrc=l.SrcAlphaFactor,w.blendDst=l.OneMinusSrcAlphaFactor,w.blendSrcAlpha=l.OneFactor,w.blendDstAlpha=l.OneMinusSrcAlphaFactor,w.depthWrite=!1,w.transparent=!0,{material:w,u:t}}var OC=class extends l.Object3D{constructor(e={}){var t,n;super();let r=(t=e.color)==null?16777215:t,i=(n=e.scale)==null?1:n;this.progress=0,this.opacity=0,this.loading=!1,this.current=!1,this.disabled=!1,this.currentMotion=new Y({progress:0}),this.tapMotion=new Y({scale:1,opacity:1}),this.loadingOpacityMotion=new Y({opacity:0}),this.progressMotion=new Y({progress:0}),this.progressOpacityMotion=new Y({opacity:0}),this.opacityMotion=new Y({opacity:0}),this.disableMotion=new Y({progress:0});let{material:a,u:o}=DC(r);this.panoU=o,this.panoMesh=new l.Mesh(SC,a),this.renderOrder=-2,this.panoMesh.renderOrder=-2,this.panoMesh.position.y=.004,this.panoMesh.scale.set(i,1,i),this.add(this.panoMesh),this.currentStartTime=K(),this.needsRender=!0}setProgress(e){this.setDisabled(!1),this.setLoading(!1),this.progress!==e&&(e=U(e,0,1),this.tapMotion.ended&&(this.progress===0&&this.progressOpacityMotion.set({opacity:1},500).catch(q),e===0?this.progressOpacityMotion.set({opacity:0},500).catch(q).then(()=>{this.progressMotion.set({progress:0},0).catch(q)}):this.progressMotion.set({progress:U(e*1.2,0,1)},100).catch(q)),this.progress=e)}setOpacity(e){this.opacity!==e&&(this.opacity=e=U(e,0,1),this.opacityMotion.set({opacity:e},200).catch(q))}setCurrent(e){this.current!==e&&(this.currentMotion.set({progress:+!!e},2e3).catch(q),this.current=e,this.current===!0&&(this.currentStartTime=K()))}setLoading(e){this.loading!==e&&(this.loading=e,this.disabled===!0&&this.setDisabled(!1),this.loadingOpacityMotion.set({opacity:+!!e},500).catch(q))}setDisabled(e){this.disabled!==e&&(this.disabled=e,this.loading===!0&&this.setLoading(!1),this.disableMotion.set({progress:+!!e},500).catch(q))}tap(){return this.tapMotion.ended?(this.progressOpacityMotion.set({opacity:0},0).catch(q),this.progressMotion.set({progress:0},0).catch(q),this.tapMotion.setKeyframes([{progress:0,value:{scale:1,opacity:1}},{progress:.3,value:{scale:.85,opacity:.5}},{progress:.8,value:{scale:1.05,opacity:.6}},{progress:1,value:{scale:1,opacity:1}}],600).then(()=>{this.progressOpacityMotion.set({opacity:+(this.progress>0)},300).catch(q),this.progressMotion.set({progress:this.progress},120).catch(q)}).catch(q)):Promise.resolve()}updateTime(e,t){if(this.progressMotion.ended||(this.progressMotion.update(e),this.panoU.progress.value=this.progressMotion.value.progress,this.needsRender=!0),this.progressOpacityMotion.ended||(this.progressOpacityMotion.update(e),this.panoU.progressOpacity.value=this.progressOpacityMotion.value.opacity,this.needsRender=!0),this.opacityMotion.ended||(this.opacityMotion.update(e),this.panoU.opacity.value=this.opacityMotion.value.opacity,this.needsRender=!0),this.visible=this.opacityMotion.value.opacity!==0,(!this.loadingOpacityMotion.ended||this.loadingOpacityMotion.value.opacity>0)&&(this.loadingOpacityMotion.update(e),this.panoU.loadingOpacity.value=this.loadingOpacityMotion.value.opacity,this.panoU.loadingAngle.value=e/120%(Math.PI*2),this.needsRender=!0),this.tapMotion.ended||(this.tapMotion.update(e),this.panoU.tapOpacity.value=this.tapMotion.value.opacity,this.panoU.tapScale.value=this.tapMotion.value.scale,this.needsRender=!0),this.panoU.circleOpacity.value=Math.max(.6,1-Math.max(this.loadingOpacityMotion.value.opacity,this.progressOpacityMotion.value.opacity)),this.current||!this.currentMotion.ended){this.currentMotion.update(e),this.panoU.expandOpacity.value=this.currentMotion.value.progress;{let t=(e-this.currentStartTime-1500)/2e3;if(t%5<2){let e=1+Math.sin(Math.PI*t)/25*this.currentMotion.value.progress;this.panoU.circleScale.value=e,this.needsRender=!0}}{let t=(e-this.currentStartTime-1500)/2e3;if(t%5<2){let e=t%1;this.panoU.expand0.value=xC(e)*this.currentMotion.value.progress,this.needsRender=!0}}{let t=(e-this.currentStartTime-1e3)/2e3;if(t%5<2){let e=t%1;this.panoU.expand1.value=xC(e)*this.currentMotion.value.progress,this.needsRender=!0}}}if(!this.disableMotion.ended){let{progress:t}=this.disableMotion.value;this.disableMotion.update(e),this.panoU.disable.value=t,this.needsRender=!0}}dispose(){this.tapMotion.dispose(),this.progressMotion.dispose(),this.progressOpacityMotion.dispose(),this.opacityMotion.dispose(),this.currentMotion.dispose(),this.panoMesh.material.dispose()}},kC=e=>e*(2-e),AC=(()=>{let e=new Float32Array([-.18,0,-.18,.18,0,-.18,-.18,0,.18,.18,0,.18]),t=new Float32Array([1,0,0,0,1,1,0,1]),n=new Uint8Array([0,2,1,2,3,1]),r=new l.BufferGeometry;return r.setAttribute(`position`,new l.BufferAttribute(e,3)),r.setAttribute(`uv`,new l.BufferAttribute(t,2)),r.setIndex(new l.BufferAttribute(n,1)),r})(),jC=(0,p.vec2)(.5,.5),MC=(0,p.float)(.017);function NC(e,t){let n=(0,p.length)(jC.sub(e));return(0,p.smoothstep)(t,t.add(MC),n)}function PC(e,t){let n=(0,p.length)(jC.sub(e));return(0,p.float)(1).sub((0,p.smoothstep)(t.sub(MC),t,n))}function FC(e){let t=e.map,n=e.borderWidth>0,r={baseColor:(0,p.uniform)(new l.Color(e.color)),circleScale:(0,p.uniform)(1),circleOpacity:(0,p.uniform)(1),loadingAngle:(0,p.uniform)(0),loadingOpacity:(0,p.uniform)(0),progress:(0,p.uniform)(0),progressOpacity:(0,p.uniform)(0),expand0:(0,p.uniform)(0),expand1:(0,p.uniform)(0),expandOpacity:(0,p.uniform)(0),opacity:(0,p.uniform)(0),tapScale:(0,p.uniform)(1),tapOpacity:(0,p.uniform)(1),disable:(0,p.uniform)(0)},i=(0,p.uniform)(e.mapAlpha),a=(0,p.uniform)(e.borderWidth),o=(0,p.uniform)(new l.Color(e.borderColor)),s=(0,p.uv)(),c=(0,p.float)(.3).mul(r.circleScale).mul(r.tapScale),u=n?NC(s,c.sub(a.clamp(0,1).mul(c))):NC(s,c.sub((0,p.float)(.2).mul(c))),d;if(t){let n=c.div(.5);d=(0,p.texture)(t,s.sub(jC).div(n).add(jC)),d=(0,p.vec4)(d.rgb,d.a.mul(i)),e.mapUseColor&&(d=(0,p.vec4)(r.baseColor,(0,p.float)(1)).mul(d))}else d=(0,p.vec4)(r.baseColor,(0,p.float)(1));let f;if(e.mapUseReverse)f=(0,p.vec4)(r.baseColor,(0,p.float)(1).sub(d.a));else if(n){let e=NC(s,c.sub(a.clamp(0,1).mul(c))),t=a.mul(2).add((0,p.abs)((0,p.normalize)((0,p.vec2)(1,-1)).dot(s.sub(jC)))).clamp(0,1);f=(0,p.mix)((0,p.vec4)(o,e.mul(t)),d,d.a)}else f=d;let m=(0,p.vec4)(f.rgb,f.a.mul(r.circleOpacity).mul(r.tapOpacity).mul(PC(s,c))),h=(0,p.vec4)(r.baseColor,(0,p.float)(.5).mul(r.tapOpacity).mul(PC(s,(0,p.float)(.32).mul(r.circleScale).mul(r.tapScale)))),g=(0,p.mod)(p.PI.sub((0,p.atan)(jC.x.sub(s.x),jC.y.sub(s.y))).add(r.loadingAngle),p.PI2),_=(0,p.float)(1).sub((0,p.smoothstep)((0,p.float)(0),p.PI2,g)).mul(.9).add(.1),v=(0,p.vec4)(r.baseColor,_.mul(r.tapOpacity).mul(r.loadingOpacity).mul(u).mul(PC(s,c))),y=p.PI.add((0,p.atan)(jC.x.sub(s.x),jC.y.sub(s.y))),b=(0,p.float)(1).sub((0,p.step)(r.progress.mul(p.PI2),y)).mul(.7),x=(0,p.vec4)(r.baseColor,b.mul(r.tapOpacity).mul(r.progressOpacity).mul(u).mul(PC(s,c))),S=(0,p.float)(.25).add((0,p.float)(.25).mul(r.expand0)),C=(0,p.length)(jC.sub(s)),w=(0,p.float)(1).sub(S.sub(C).div(.2).clamp(0,1)).mul(.8).mul((0,p.float)(1).sub((0,p.abs)(r.expand0.sub(.5)).mul(2)).mul(1.2).clamp(0,1)),T=(0,p.vec4)(r.baseColor,w.mul(r.expandOpacity).mul(PC(s,S))),E=(0,p.float)(.25).add((0,p.float)(.23).mul(r.expand1)),D=(0,p.length)(jC.sub(s)),O=(0,p.float)(1).sub(E.sub(D).div(.2).clamp(0,1)).mul(.8).mul((0,p.float)(1).sub((0,p.abs)(r.expand1.sub(.5)).mul(2)).mul(1.2).clamp(0,1)),k=(0,p.vec4)(r.baseColor,O.mul(r.expandOpacity).mul(PC(s,E))),A=(0,p.vec4)(r.baseColor,(0,p.float)(0));A=(0,p.mix)(A,k,k.w),A=(0,p.mix)(A,T,T.w),A=(0,p.mix)(A,m,m.w),A=(0,p.mix)(A,x,x.w),A=(0,p.mix)(A,v,v.w),A=(0,p.mix)(A,h,r.disable);let j=(0,p.vec4)(A.rgb,A.a.mul(r.opacity)),M=new l.NodeMaterial;return M.fragmentNode=j,M.blending=l.CustomBlending,M.blendSrc=l.SrcAlphaFactor,M.blendDst=l.OneMinusSrcAlphaFactor,M.blendSrcAlpha=l.OneFactor,M.blendDstAlpha=l.OneMinusSrcAlphaFactor,M.depthWrite=!1,M.transparent=!0,{material:M,u:r}}var IC=class extends l.Object3D{constructor(e={}){var t,n,r,i,a,o,s;super();let c=(t=e.color)==null?16777215:t,u=(n=e.scale)==null?1:n;this.progress=0,this.opacity=0,this.loading=!1,this.current=!1,this.disabled=!1,this.currentMotion=new Y({progress:0}),this.tapMotion=new Y({scale:1,opacity:1}),this.loadingOpacityMotion=new Y({opacity:0}),this.progressMotion=new Y({progress:0}),this.progressOpacityMotion=new Y({opacity:0}),this.opacityMotion=new Y({opacity:0}),this.disableMotion=new Y({progress:0});let{material:d,u:f}=FC({color:c,map:e.map,mapAlpha:(r=e.mapAlpha)==null?1:r,borderWidth:(i=e.borderWidth)==null?.1:i,borderColor:(a=e.borderColor)==null?16777215:a,mapUseColor:(o=e.mapUseColor)==null?!1:o,mapUseReverse:(s=e.mapUseReverse)==null?!1:s});this.panoU=f,this.panoMesh=new l.Mesh(AC,d),this.renderOrder=-2,this.panoMesh.renderOrder=-2,this.panoMesh.position.y=.004,this.panoMesh.scale.set(u,1,u),this.add(this.panoMesh),this.currentStartTime=K(),this.needsRender=!0}setProgress(e){this.setDisabled(!1),this.setLoading(!1),this.progress!==e&&(e=U(e,0,1),this.tapMotion.ended&&(this.progress===0&&this.progressOpacityMotion.set({opacity:1},500).catch(q),e===0?this.progressOpacityMotion.set({opacity:0},500).catch(q).then(()=>{this.progressMotion.set({progress:0},0).catch(q)}):this.progressMotion.set({progress:U(e*1.2,0,1)},100).catch(q)),this.progress=e)}setOpacity(e){this.opacity!==e&&(this.opacity=e=U(e,0,1),this.opacityMotion.set({opacity:e},200).catch(q))}setCurrent(e){this.current!==e&&(this.currentMotion.set({progress:+!!e},2e3).catch(q),this.current=e,this.current===!0&&(this.currentStartTime=K()))}setLoading(e){this.loading!==e&&(this.loading=e,this.disabled===!0&&this.setDisabled(!1),this.loadingOpacityMotion.set({opacity:+!!e},500).catch(q))}setDisabled(e){this.disabled!==e&&(this.disabled=e,this.loading===!0&&this.setLoading(!1),this.disableMotion.set({progress:+!!e},500).catch(q))}tap(){return this.tapMotion.ended?(this.progressOpacityMotion.set({opacity:0},0).catch(q),this.progressMotion.set({progress:0},0).catch(q),this.tapMotion.setKeyframes([{progress:0,value:{scale:1,opacity:1}},{progress:.3,value:{scale:.85,opacity:.5}},{progress:.8,value:{scale:1.05,opacity:.6}},{progress:1,value:{scale:1,opacity:1}}],600).then(()=>{this.progressOpacityMotion.set({opacity:+(this.progress>0)},300).catch(q),this.progressMotion.set({progress:this.progress},120).catch(q)}).catch(q)):Promise.resolve()}updateTime(e,t){if(this.progressMotion.ended||(this.progressMotion.update(e),this.panoU.progress.value=this.progressMotion.value.progress,this.needsRender=!0),this.progressOpacityMotion.ended||(this.progressOpacityMotion.update(e),this.panoU.progressOpacity.value=this.progressOpacityMotion.value.opacity,this.needsRender=!0),this.opacityMotion.ended||(this.opacityMotion.update(e),this.panoU.opacity.value=this.opacityMotion.value.opacity,this.needsRender=!0),this.visible=this.opacityMotion.value.opacity!==0,(!this.loadingOpacityMotion.ended||this.loadingOpacityMotion.value.opacity>0)&&(this.loadingOpacityMotion.update(e),this.panoU.loadingOpacity.value=this.loadingOpacityMotion.value.opacity,this.panoU.loadingAngle.value=e/120%(Math.PI*2),this.needsRender=!0),this.tapMotion.ended||(this.tapMotion.update(e),this.panoU.tapOpacity.value=this.tapMotion.value.opacity,this.panoU.tapScale.value=this.tapMotion.value.scale,this.needsRender=!0),this.panoU.circleOpacity.value=Math.max(.6,1-Math.max(this.loadingOpacityMotion.value.opacity,this.progressOpacityMotion.value.opacity)),this.current||!this.currentMotion.ended){this.currentMotion.update(e),this.panoU.expandOpacity.value=this.currentMotion.value.progress;{let t=(e-this.currentStartTime-1500)/2e3;if(t%5<2){let e=t%1;this.panoU.expand0.value=kC(e)*this.currentMotion.value.progress,this.needsRender=!0}}{let t=(e-this.currentStartTime-1e3)/2e3;if(t%5<2){let e=t%1;this.panoU.expand1.value=kC(e)*this.currentMotion.value.progress,this.needsRender=!0}}}if(!this.disableMotion.ended){let{progress:t}=this.disableMotion.value;this.disableMotion.update(e),this.panoU.disable.value=t,this.needsRender=!0}}dispose(){this.tapMotion.dispose(),this.progressMotion.dispose(),this.progressOpacityMotion.dispose(),this.opacityMotion.dispose(),this.currentMotion.dispose(),this.panoMesh.material.dispose()}};function LC(e,t,n){let r=Math.abs(e-t);return r<.001||n!==void 0&&Math.abs(n-r)<.001}function RC(e,t,n){return!LC(e,t,n)}function zC(e,t){return e.distanceTo(t)<.001}function BC(e,t){return!zC(e,t)}function VC(e){return!!e&&(typeof e==`object`||typeof e==`function`)&&typeof e.then==`function`}function $(e,t){let n=!1,r={type:e,timeStamp:K(),get defaultPrevented(){return n},preventDefault(){n=!0}};for(let e of Object.keys(t))e in r||(r[e]=t[e]);return r}var HC=new WeakMap;function UC(e,t){let n=$(e,Object.assign(Object.assign({},t),{waitUntil(e){let t=HC.get(n);t&&t.push(e)}}));return HC.set(n,[]),n}function WC(e){var t;return Promise.all((t=HC.get(e))==null?[]:t).then(q)}function GC(e,t){e.mode=t.mode,e.workCode=t.workCode,e.panoIndex=t.panoIndex,e.longitude=t.longitude,e.latitude=t.latitude,e.fov=t.fov,e.offset.copy(t.offset),e.distance=t.distance}function KC(e,t){return e.workCode===t.workCode&&e.mode===t.mode&&e.panoIndex===t.panoIndex&&LC(e.longitude,t.longitude,Math.PI*2)&&LC(e.latitude,t.latitude)&&LC(e.fov,t.fov)&&zC(e.offset,t.offset)&&LC(e.distance,t.distance)}function qC(e,t){e.longitude=t.longitude,e.latitude=t.latitude,e.fov=t.fov,e.distance=t.distance,e.offset.copy(t.offset)}function JC(e){return{longitude:e.longitude,latitude:e.latitude,fov:e.fov,offset:e.offset.clone(),distance:e.distance}}function YC(e){switch(e){case`Floorplan`:return!0;case`Mapview`:return!0;default:return!1}}function XC(e){switch(e){case`Panorama`:return!0;case`VRPanorama`:return!0;case`XRPanorama`:return!0;case`Model`:return!0;default:return!1}}function ZC(e){for(let t in e)return!1;return!0}var QC=(0,p.uniform)(1),$C=(0,p.uv)(),ew=(0,p.float)(6.2831852),tw=(0,p.float)(3.1415926),nw=ew.mul($C.x),rw=tw.mul($C.y.sub(.5)),iw=rw.cos().abs(),aw=(0,p.normalize)((0,p.vec3)(nw.sin().negate().mul(iw),rw.sin().mul(QC),nw.cos().negate().mul(iw))),ow=(0,p.cubeTexture)(new l.CubeTexture,aw),sw=new l.NodeMaterial;sw.fragmentNode=ow,sw.transparent=!0,sw.depthTest=!1,sw.depthWrite=!1;var cw=new cx(sw);function lw(e,t,n){ow.value=t,QC.value=n?-1:1,cw.render(e),ow.value=null}var uw=new l.Color,dw=0,fw=1;function pw(e,t,n,r){return(0,u.__awaiter)(this,void 0,void 0,function*(){let i=new l.RenderTarget(r.width,r.height,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:l.LinearFilter,minFilter:l.LinearFilter}),a=e.getRenderTarget();e.getClearColor(uw);let o=e.getClearAlpha(),s=e.autoClear,c=e.autoClearColor,u=e.autoClearDepth,d=e.autoClearStencil;e.autoClear=!0,e.autoClearColor=!0,e.autoClearDepth=!0,e.autoClearStencil=!0,e.setRenderTarget(i),e.setClearColor(dw,fw),lw(e,t,n),e.setRenderTarget(a),e.setClearColor(uw,o),e.autoClear=s,e.autoClearColor=c,e.autoClearDepth=u,e.autoClearStencil=d;let f=yield e.readRenderTargetPixelsAsync(i,0,0,r.width,r.height);return r.data.set(f),i.dispose(),r})}var mw=(function(e,t,n,r){"use strict";var i=[``,`webkit`,`Moz`,`MS`,`ms`,`o`],a=t.createElement?t.createElement(`div`):r,o=`function`,s=Math.round,c=Math.abs,l=Date.now;function u(e,t,n){return setTimeout(v(e,n),t)}function d(e,t,n){return Array.isArray(e)?(f(e,n[t],n),!0):!1}function f(e,t,n){var i;if(e)if(e.forEach)e.forEach(t,n);else if(e.length!==r)for(i=0;i<e.length;)t.call(n,e[i],i,e),i++;else for(i in e)e.hasOwnProperty(i)&&t.call(n,e[i],i,e)}function p(t,n,r){var i=`DEPRECATED METHOD: `+n+`
977
1060
  `+r+` AT
978
- `;return function(){var n=Error(`get-stack-trace`),r=n&&n.stack?n.stack.replace(/^[^\(]+?[\n$]/gm,``).replace(/^\s+at\s+/gm,``).replace(/^Object.<anonymous>\s*\(/gm,`{anonymous}()@`):`Unknown Stack Trace`,a=e.console&&(e.console.warn||e.console.log);return a&&a.call(e.console,i,r),t.apply(this,arguments)}}var m=typeof Object.assign==`function`?Object.assign:function(e){if(e===r||e===null)throw TypeError(`Cannot convert undefined or null to object`);for(var t=Object(e),n=1;n<arguments.length;n++){var i=arguments[n];if(i!==r&&i!==null)for(var a in i)i.hasOwnProperty(a)&&(t[a]=i[a])}return t},h=p(function(e,t,n){for(var i=Object.keys(t),a=0;a<i.length;)(!n||n&&e[i[a]]===r)&&(e[i[a]]=t[i[a]]),a++;return e},`extend`,"Use `assign`."),g=p(function(e,t){return h(e,t,!0)},`merge`,"Use `assign`.");function _(e,t,n){var r=t.prototype,i=e.prototype=Object.create(r);i.constructor=e,i._super=r,n&&m(i,n)}function v(e,t){return function(){return e.apply(t,arguments)}}function y(e,t){return typeof e==o?e.apply(t&&t[0]||r,t):e}function b(e,t){return e===r?t:e}function x(e,t,n){f(T(t),function(t){e.addEventListener(t,n,!1)})}function S(e,t,n){f(T(t),function(t){e.removeEventListener(t,n,!1)})}function C(e,t){for(;e;){if(e==t)return!0;e=e.parentNode}return!1}function w(e,t){return e.indexOf(t)>-1}function T(e){return e.trim().split(/\s+/g)}function E(e,t,n){if(e.indexOf&&!n)return e.indexOf(t);for(var r=0;r<e.length;){if(n&&e[r][n]==t||!n&&e[r]===t)return r;r++}return-1}function D(e){return Array.prototype.slice.call(e,0)}function O(e,t,n){for(var r=[],i=[],a=0;a<e.length;){var o=t?e[a][t]:e[a];E(i,o)<0&&r.push(e[a]),i[a]=o,a++}return n&&(r=t?r.sort(function(e,n){return e[t]>n[t]}):r.sort()),r}function k(e,t){for(var n,a,o=t[0].toUpperCase()+t.slice(1),s=0;s<i.length;){if(n=i[s],a=n?n+o:t,a in e)return a;s++}return r}var A=1;function j(){return A++}function M(t){var n=t.ownerDocument||t;return n.defaultView||n.parentWindow||e}var N=/mobile|tablet|ip(ad|hone|od)|android/i,ee=`ontouchstart`in e,P=k(e,`PointerEvent`)!==r,F=ee&&N.test(navigator.userAgent),I=`touch`,L=`pen`,te=`mouse`,ne=`kinect`,re=25,R=1,ie=2,z=4,ae=8,oe=1,se=2,ce=4,le=8,ue=16,de=se|ce,fe=le|ue,pe=de|fe,me=[`x`,`y`],he=[`clientX`,`clientY`];function ge(e,t){var n=this;this.manager=e,this.callback=t,this.element=e.element,this.target=e.options.inputTarget,this.domHandler=function(t){y(e.options.enable,[e])&&n.handler(t)},this.init()}ge.prototype={handler:function(){},init:function(){this.evEl&&x(this.element,this.evEl,this.domHandler),this.evTarget&&x(this.target,this.evTarget,this.domHandler),this.evWin&&x(M(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&S(this.element,this.evEl,this.domHandler),this.evTarget&&S(this.target,this.evTarget,this.domHandler),this.evWin&&S(M(this.element),this.evWin,this.domHandler)}};function _e(e){var t;return t=e.options.inputClass||(P?B:F?Ge:ee?Ye:Ne),new t(e,ve)}function ve(e,t,n){var r=n.pointers.length,i=n.changedPointers.length,a=t&R&&r-i===0,o=t&(z|ae)&&r-i===0;n.isFirst=!!a,n.isFinal=!!o,a&&(e.session={}),n.eventType=t,ye(e,n),e.emit(`hammer.input`,n),e.recognize(n),e.session.prevInput=n}function ye(e,t){var n=e.session,r=t.pointers,i=r.length;n.firstInput||(n.firstInput=Se(t)),i>1&&!n.firstMultiple?n.firstMultiple=Se(t):i===1&&(n.firstMultiple=!1);var a=n.firstInput,o=n.firstMultiple,s=o?o.center:a.center,u=t.center=Ce(r);t.timeStamp=l(),t.deltaTime=t.timeStamp-a.timeStamp,t.angle=De(s,u),t.distance=Ee(s,u),be(n,t),t.offsetDirection=Te(t.deltaX,t.deltaY);var d=we(t.deltaTime,t.deltaX,t.deltaY);t.overallVelocityX=d.x,t.overallVelocityY=d.y,t.overallVelocity=c(d.x)>c(d.y)?d.x:d.y,t.scale=o?ke(o.pointers,r):1,t.rotation=o?Oe(o.pointers,r):0,t.maxPointers=n.prevInput?t.pointers.length>n.prevInput.maxPointers?t.pointers.length:n.prevInput.maxPointers:t.pointers.length,xe(n,t);var f=e.element;C(t.srcEvent.target,f)&&(f=t.srcEvent.target),t.target=f}function be(e,t){var n=t.center,r=e.offsetDelta||{},i=e.prevDelta||{},a=e.prevInput||{};(t.eventType===R||a.eventType===z)&&(i=e.prevDelta={x:a.deltaX||0,y:a.deltaY||0},r=e.offsetDelta={x:n.x,y:n.y}),t.deltaX=i.x+(n.x-r.x),t.deltaY=i.y+(n.y-r.y)}function xe(e,t){var n=e.lastInterval||t,i=t.timeStamp-n.timeStamp,a,o,s,l;if(t.eventType!=ae&&(i>re||n.velocity===r)){var u=t.deltaX-n.deltaX,d=t.deltaY-n.deltaY,f=we(i,u,d);o=f.x,s=f.y,a=c(f.x)>c(f.y)?f.x:f.y,l=Te(u,d),e.lastInterval=t}else a=n.velocity,o=n.velocityX,s=n.velocityY,l=n.direction;t.velocity=a,t.velocityX=o,t.velocityY=s,t.direction=l}function Se(e){for(var t=[],n=0;n<e.pointers.length;)t[n]={clientX:s(e.pointers[n].clientX),clientY:s(e.pointers[n].clientY)},n++;return{timeStamp:l(),pointers:t,center:Ce(t),deltaX:e.deltaX,deltaY:e.deltaY}}function Ce(e){var t=e.length;if(t===1)return{x:s(e[0].clientX),y:s(e[0].clientY)};for(var n=0,r=0,i=0;i<t;)n+=e[i].clientX,r+=e[i].clientY,i++;return{x:s(n/t),y:s(r/t)}}function we(e,t,n){return{x:t/e||0,y:n/e||0}}function Te(e,t){return e===t?oe:c(e)>=c(t)?e<0?se:ce:t<0?le:ue}function Ee(e,t,n){n||(n=me);var r=t[n[0]]-e[n[0]],i=t[n[1]]-e[n[1]];return Math.sqrt(r*r+i*i)}function De(e,t,n){n||(n=me);var r=t[n[0]]-e[n[0]],i=t[n[1]]-e[n[1]];return Math.atan2(i,r)*180/Math.PI}function Oe(e,t){return De(t[1],t[0],he)+De(e[1],e[0],he)}function ke(e,t){return Ee(t[0],t[1],he)/Ee(e[0],e[1],he)}var Ae={mousedown:R,mousemove:ie,mouseup:z},je=`mousedown`,Me=`mousemove mouseup`;function Ne(){this.evEl=je,this.evWin=Me,this.pressed=!1,ge.apply(this,arguments)}_(Ne,ge,{handler:function(e){var t=Ae[e.type];t&R&&(e.button===0||e.button===2)&&(this.pressed=!0),t&ie&&e.which!==1&&(t=z),this.pressed&&(t&z&&(this.pressed=!1),this.callback(this.manager,t,{pointers:[e],changedPointers:[e],pointerType:te,srcEvent:e}))}});var Pe={pointerdown:R,pointermove:ie,pointerup:z,pointercancel:ae,pointerout:ae},Fe={2:I,3:L,4:te,5:ne},Ie=`pointerdown`,Le=`pointermove pointerup pointercancel`;e.MSPointerEvent&&!e.PointerEvent&&(Ie=`MSPointerDown`,Le=`MSPointerMove MSPointerUp MSPointerCancel`);function B(){this.evEl=Ie,this.evWin=Le,ge.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}_(B,ge,{handler:function(e){var t=this.store,n=!1,r=!1,i=Pe[e.type.toLowerCase().replace(`ms`,``)],a=Fe[e.pointerType]||e.pointerType,o=a==I,s=E(t,e.pointerId,`pointerId`);i&R&&(e.button===0||e.button===2||o)?s<0&&(t.push(e),s=t.length-1):i&(z|ae)?n=!0:!o&&e.buttons===0&&(n=!0,r=!0,i=Pe.pointerup),!(s<0)&&(r||(t[s]=e),this.callback(this.manager,i,{pointers:t,changedPointers:[e],pointerType:a,srcEvent:t[s]}),n&&t.splice(s,1))}});var Re={touchstart:R,touchmove:ie,touchend:z,touchcancel:ae},ze=`touchstart`,Be=`touchstart touchmove touchend touchcancel`;function Ve(){this.evTarget=ze,this.evWin=Be,this.started=!1,ge.apply(this,arguments)}_(Ve,ge,{handler:function(e){var t=Re[e.type];if(t===R&&(this.started=!0),this.started){var n=He.call(this,e,t);t&(z|ae)&&n[0].length-n[1].length===0&&(this.started=!1),this.callback(this.manager,t,{pointers:n[0],changedPointers:n[1],pointerType:I,srcEvent:e})}}});function He(e,t){var n=D(e.touches),r=D(e.changedTouches);return t&(z|ae)&&(n=O(n.concat(r),`identifier`,!0)),[n,r]}var Ue={touchstart:R,touchmove:ie,touchend:z,touchcancel:ae},We=`touchstart touchmove touchend touchcancel`;function Ge(){this.evTarget=We,this.targetIds={},ge.apply(this,arguments)}_(Ge,ge,{handler:function(e){var t=Ue[e.type],n=Ke.call(this,e,t);n&&this.callback(this.manager,t,{pointers:n[0],changedPointers:n[1],pointerType:I,srcEvent:e})}});function Ke(e,t){var n=D(e.touches),r=this.targetIds;if(t&(R|ie)&&n.length===1)return r[n[0].identifier]=!0,[n,n];var i,a,o=D(e.changedTouches),s=[],c=this.target;if(a=n.filter(function(e){return C(e.target,c)}),t===R)for(i=0;i<a.length;)r[a[i].identifier]=!0,i++;for(i=0;i<o.length;)r[o[i].identifier]&&s.push(o[i]),t&(z|ae)&&delete r[o[i].identifier],i++;if(s.length)return[O(a.concat(s),`identifier`,!0),s]}var qe=2500,Je=25;function Ye(){ge.apply(this,arguments);var e=v(this.handler,this);this.touch=new Ge(this.manager,e),this.mouse=new Ne(this.manager,e),this.primaryTouch=null,this.lastTouches=[]}_(Ye,ge,{handler:function(e,t,n){var r=n.pointerType==I,i=n.pointerType==te;if(!(i&&n.sourceCapabilities&&n.sourceCapabilities.firesTouchEvents)){if(r)Xe.call(this,t,n);else if(i&&Qe.call(this,n))return;this.callback(e,t,n)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});function Xe(e,t){e&R?(this.primaryTouch=t.changedPointers[0].identifier,Ze.call(this,t)):e&(z|ae)&&Ze.call(this,t)}function Ze(e){var t=e.changedPointers[0];if(t.identifier===this.primaryTouch){var n={x:t.clientX,y:t.clientY};this.lastTouches.push(n);var r=this.lastTouches;setTimeout(function(){var e=r.indexOf(n);e>-1&&r.splice(e,1)},qe)}}function Qe(e){for(var t=e.srcEvent.clientX,n=e.srcEvent.clientY,r=0;r<this.lastTouches.length;r++){var i=this.lastTouches[r],a=Math.abs(t-i.x),o=Math.abs(n-i.y);if(a<=Je&&o<=Je)return!0}return!1}var $e=a?k(a.style,`touchAction`):r,et=$e!==r,tt=`compute`,nt=`auto`,rt=`manipulation`,it=`none`,at=`pan-x`,ot=`pan-y`,st=ut();function ct(e,t){this.manager=e,this.set(t)}ct.prototype={set:function(e){e==tt&&(e=this.compute()),et&&this.manager.element.style&&st[e]&&(this.manager.element.style[$e]=e),this.actions=e.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var e=[];return f(this.manager.recognizers,function(t){y(t.options.enable,[t])&&(e=e.concat(t.getTouchAction()))}),lt(e.join(` `))},preventDefaults:function(e){var t=e.srcEvent,n=e.offsetDirection;if(this.manager.session.prevented){t.preventDefault();return}var r=this.actions,i=w(r,it)&&!st[it],a=w(r,ot)&&!st[ot],o=w(r,at)&&!st[at];if(i){var s=e.pointers.length===1,c=e.distance<2,l=e.deltaTime<250;if(s&&c&&l)return}if(!(o&&a)&&(i||a&&n&de||o&&n&fe))return this.preventSrc(t)},preventSrc:function(e){this.manager.session.prevented=!0,e.preventDefault()}};function lt(e){if(w(e,it))return it;var t=w(e,at),n=w(e,ot);return t&&n?it:t||n?t?at:ot:w(e,rt)?rt:nt}function ut(){if(!et)return!1;var t={},n=e.CSS&&e.CSS.supports;return[`auto`,`manipulation`,`pan-y`,`pan-x`,`pan-x pan-y`,`none`].forEach(function(r){t[r]=n?e.CSS.supports(`touch-action`,r):!0}),t}var dt=1,ft=2,pt=4,mt=8,ht=mt,V=16,gt=32;function H(e){this.options=m({},this.defaults,e||{}),this.id=j(),this.manager=null,this.options.enable=b(this.options.enable,!0),this.state=dt,this.simultaneous={},this.requireFail=[]}H.prototype={defaults:{},set:function(e){return m(this.options,e),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(e){if(d(e,`recognizeWith`,this))return this;var t=this.simultaneous;return e=yt(e,this),t[e.id]||(t[e.id]=e,e.recognizeWith(this)),this},dropRecognizeWith:function(e){return d(e,`dropRecognizeWith`,this)?this:(e=yt(e,this),delete this.simultaneous[e.id],this)},requireFailure:function(e){if(d(e,`requireFailure`,this))return this;var t=this.requireFail;return e=yt(e,this),E(t,e)===-1&&(t.push(e),e.requireFailure(this)),this},dropRequireFailure:function(e){if(d(e,`dropRequireFailure`,this))return this;e=yt(e,this);var t=E(this.requireFail,e);return t>-1&&this.requireFail.splice(t,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(e){return!!this.simultaneous[e.id]},emit:function(e){var t=this,n=this.state;function r(n){t.manager.emit(n,e)}n<mt&&r(t.options.event+_t(n)),r(t.options.event),e.additionalEvent&&r(e.additionalEvent),n>=mt&&r(t.options.event+_t(n))},tryEmit:function(e){if(this.canEmit())return this.emit(e);this.state=gt},canEmit:function(){for(var e=0;e<this.requireFail.length;){if(!(this.requireFail[e].state&(gt|dt)))return!1;e++}return!0},recognize:function(e){var t=m({},e);if(!y(this.options.enable,[this,t])){this.reset(),this.state=gt;return}this.state&(ht|V|gt)&&(this.state=dt),this.state=this.process(t),this.state&(ft|pt|mt|V)&&this.tryEmit(t)},process:function(e){},getTouchAction:function(){},reset:function(){}};function _t(e){return e&V?`cancel`:e&mt?`end`:e&pt?`move`:e&ft?`start`:``}function vt(e){return e==ue?`down`:e==le?`up`:e==se?`left`:e==ce?`right`:``}function yt(e,t){var n=t.manager;return n?n.get(e):e}function bt(){H.apply(this,arguments)}_(bt,H,{defaults:{pointers:1},attrTest:function(e){var t=this.options.pointers;return t===0||e.pointers.length===t},process:function(e){var t=this.state,n=e.eventType,r=t&(ft|pt),i=this.attrTest(e);return r&&(n&ae||!i)?t|V:r||i?n&z?t|mt:t&ft?t|pt:ft:gt}});function xt(){bt.apply(this,arguments),this.pX=null,this.pY=null}_(xt,bt,{defaults:{event:`pan`,threshold:10,pointers:1,direction:pe},getTouchAction:function(){var e=this.options.direction,t=[];return e&de&&t.push(ot),e&fe&&t.push(at),t},directionTest:function(e){var t=this.options,n=!0,r=e.distance,i=e.direction,a=e.deltaX,o=e.deltaY;return i&t.direction||(t.direction&de?(i=a===0?oe:a<0?se:ce,n=a!=this.pX,r=Math.abs(e.deltaX)):(i=o===0?oe:o<0?le:ue,n=o!=this.pY,r=Math.abs(e.deltaY))),e.direction=i,n&&r>t.threshold&&i&t.direction},attrTest:function(e){return bt.prototype.attrTest.call(this,e)&&(this.state&ft||!(this.state&ft)&&this.directionTest(e))},emit:function(e){this.pX=e.deltaX,this.pY=e.deltaY;var t=vt(e.direction);t&&(e.additionalEvent=this.options.event+t),this._super.emit.call(this,e)}});function St(){bt.apply(this,arguments)}_(St,bt,{defaults:{event:`pinch`,threshold:0,pointers:2},getTouchAction:function(){return[it]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||this.state&ft)},emit:function(e){if(e.scale!==1){var t=e.scale<1?`in`:`out`;e.additionalEvent=this.options.event+t}this._super.emit.call(this,e)}});function Ct(){H.apply(this,arguments),this._timer=null,this._input=null}_(Ct,H,{defaults:{event:`press`,pointers:1,time:251,threshold:9},getTouchAction:function(){return[nt]},process:function(e){var t=this.options,n=e.pointers.length===t.pointers,r=e.distance<t.threshold,i=e.deltaTime>t.time;if(this._input=e,!r||!n||e.eventType&(z|ae)&&!i)this.reset();else if(e.eventType&R)this.reset(),this._timer=u(function(){this.state=ht,this.tryEmit()},t.time,this);else if(e.eventType&z)return ht;return gt},reset:function(){clearTimeout(this._timer)},emit:function(e){this.state===ht&&(e&&e.eventType&z?this.manager.emit(this.options.event+`up`,e):(this._input.timeStamp=l(),this.manager.emit(this.options.event,this._input)))}});function wt(){bt.apply(this,arguments)}_(wt,bt,{defaults:{event:`rotate`,threshold:0,pointers:2},getTouchAction:function(){return[it]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||this.state&ft)}});function Tt(){bt.apply(this,arguments)}_(Tt,bt,{defaults:{event:`swipe`,threshold:10,velocity:.3,direction:de|fe,pointers:1},getTouchAction:function(){return xt.prototype.getTouchAction.call(this)},attrTest:function(e){var t=this.options.direction,n;return t&(de|fe)?n=e.overallVelocity:t&de?n=e.overallVelocityX:t&fe&&(n=e.overallVelocityY),this._super.attrTest.call(this,e)&&t&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers==this.options.pointers&&c(n)>this.options.velocity&&e.eventType&z},emit:function(e){var t=vt(e.offsetDirection);t&&this.manager.emit(this.options.event+t,e),this.manager.emit(this.options.event,e)}});function Et(){H.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}_(Et,H,{defaults:{event:`tap`,pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[rt]},process:function(e){var t=this.options,n=e.pointers.length===t.pointers,r=e.distance<t.threshold,i=e.deltaTime<t.time;if(this.reset(),e.eventType&R&&this.count===0)return this.failTimeout();if(r&&i&&n){if(e.eventType!=z)return this.failTimeout();var a=this.pTime?e.timeStamp-this.pTime<t.interval:!0,o=!this.pCenter||Ee(this.pCenter,e.center)<t.posThreshold;if(this.pTime=e.timeStamp,this.pCenter=e.center,!o||!a?this.count=1:this.count+=1,this._input=e,this.count%t.taps===0)return this.hasRequireFailures()?(this._timer=u(function(){this.state=ht,this.tryEmit()},t.interval,this),ft):ht}return gt},failTimeout:function(){return this._timer=u(function(){this.state=gt},this.options.interval,this),gt},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==ht&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}});function Dt(e,t){return t=t||{},t.recognizers=b(t.recognizers,Dt.defaults.preset),new At(e,t)}Dt.VERSION=`2.0.7`,Dt.defaults={domEvents:!1,touchAction:tt,enable:!0,inputTarget:null,inputClass:null,preset:[[wt,{enable:!1}],[St,{enable:!1},[`rotate`]],[Tt,{direction:de}],[xt,{direction:de},[`swipe`]],[Et],[Et,{event:`doubletap`,taps:2},[`tap`]],[Ct]],cssProps:{userSelect:`none`,touchSelect:`none`,touchCallout:`none`,contentZooming:`none`,userDrag:`none`,tapHighlightColor:`rgba(0,0,0,0)`}};var Ot=1,kt=2;function At(e,t){this.options=m({},Dt.defaults,t||{}),this.options.inputTarget=this.options.inputTarget||e,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=e,this.input=_e(this),this.touchAction=new ct(this,this.options.touchAction),jt(this,!0),f(this.options.recognizers,function(e){var t=this.add(new e[0](e[1]));e[2]&&t.recognizeWith(e[2]),e[3]&&t.requireFailure(e[3])},this)}At.prototype={set:function(e){return m(this.options,e),e.touchAction&&this.touchAction.update(),e.inputTarget&&(this.input.destroy(),this.input.target=e.inputTarget,this.input.init()),this},stop:function(e){this.session.stopped=e?kt:Ot},recognize:function(e){var t=this.session;if(!t.stopped){this.touchAction.preventDefaults(e);var n,r=this.recognizers,i=t.curRecognizer;(!i||i&&i.state&ht)&&(i=t.curRecognizer=null);for(var a=0;a<r.length;)n=r[a],t.stopped!==kt&&(!i||n==i||n.canRecognizeWith(i))?n.recognize(e):n.reset(),!i&&n.state&(ft|pt|mt)&&(i=t.curRecognizer=n),a++}},get:function(e){if(e instanceof H)return e;for(var t=this.recognizers,n=0;n<t.length;n++)if(t[n].options.event==e)return t[n];return null},add:function(e){if(d(e,`add`,this))return this;var t=this.get(e.options.event);return t&&this.remove(t),this.recognizers.push(e),e.manager=this,this.touchAction.update(),e},remove:function(e){if(d(e,`remove`,this))return this;if(e=this.get(e),e){var t=this.recognizers,n=E(t,e);n!==-1&&(t.splice(n,1),this.touchAction.update())}return this},on:function(e,t){if(e!==r&&t!==r){var n=this.handlers;return f(T(e),function(e){n[e]=n[e]||[],n[e].push(t)}),this}},off:function(e,t){if(e!==r){var n=this.handlers;return f(T(e),function(e){t?n[e]&&n[e].splice(E(n[e],t),1):delete n[e]}),this}},emit:function(e,t){this.options.domEvents&&Mt(e,t);var n=this.handlers[e]&&this.handlers[e].slice();if(!(!n||!n.length)){t.type=e,t.preventDefault=function(){t.srcEvent.preventDefault()};for(var r=0;r<n.length;)n[r](t),r++}},destroy:function(){this.element&&jt(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}};function jt(e,t){var n=e.element;if(n.style){var r;f(e.options.cssProps,function(i,a){r=k(n.style,a),t?(e.oldCssProps[r]=n.style[r],n.style[r]=i):n.style[r]=e.oldCssProps[r]||``}),t||(e.oldCssProps={})}}function Mt(e,n){var r=t.createEvent(`Event`);r.initEvent(e,!0,!0),r.gesture=n,n.target.dispatchEvent(r)}return m(Dt,{INPUT_START:R,INPUT_MOVE:ie,INPUT_END:z,INPUT_CANCEL:ae,STATE_POSSIBLE:dt,STATE_BEGAN:ft,STATE_CHANGED:pt,STATE_ENDED:mt,STATE_RECOGNIZED:ht,STATE_CANCELLED:V,STATE_FAILED:gt,DIRECTION_NONE:oe,DIRECTION_LEFT:se,DIRECTION_RIGHT:ce,DIRECTION_UP:le,DIRECTION_DOWN:ue,DIRECTION_HORIZONTAL:de,DIRECTION_VERTICAL:fe,DIRECTION_ALL:pe,Manager:At,Input:ge,TouchAction:ct,TouchInput:Ge,MouseInput:Ne,PointerEventInput:B,TouchMouseInput:Ye,SingleTouchInput:Ve,Recognizer:H,AttrRecognizer:bt,Tap:Et,Pan:xt,Swipe:Tt,Pinch:St,Rotate:wt,Press:Ct,on:x,off:S,each:f,merge:g,extend:h,assign:m,inherit:_,bindFn:v,prefixed:k}),Dt})(typeof window<`u`?window:{},typeof document<`u`?document:{},`Hammer`);function hw(e,t,n){if(n.isPerspectiveCamera){e.setFromCamera(t,n);return}if(n.isOrthographicCamera){let r=n.projectionMatrix.elements[14];e.ray.origin.set(t.x,t.y,r).unproject(n),e.ray.direction.set(0,0,-1).transformDirection(n.matrixWorld),e.camera=n;return}e.setFromCamera(t,n)}var gw=class e extends Bt{static parseArgs(t){return t instanceof e?t:Object.assign({},t)}static initAnimationEndState(e){var t,n,r,i,a,o,s,c;let l=this.parseArgs(e),{state:u,currentState:d}=l.initial,f=typeof u.panoIndex==`number`?{workCode:(r=(t=u.workCode)==null?(n=l.works[0])==null?void 0:n.workCode:t)==null?``:r,panoIndex:u.panoIndex}:{workCode:d.workCode,panoIndex:d.panoIndex};return Object.assign(Object.assign({},f),{mode:``,longitude:(i=u.longitude)==null?d.longitude:i,latitude:(a=u.latitude)==null?d.latitude:a,fov:(o=u.fov)==null?d.fov:o,offset:(s=u.offset)==null?d.offset:s,distance:(c=u.distance)==null?d.distance:c})}constructor(t){var n,r,i;super();let a=e.parseArgs(t);this.mode=``,this.pending=new Set,this.userAction=a.initial.userAction,this.destroyed=!1,this.fiveId=a.fiveId,this.scene=a.scene,this.modelScene=a.modelScene,this.xrCustomObjectsScene=a.xrCustomObjectsScene,this.helper=a.helper,this.camera=a.camera,this.renderer=a.renderer,this.viewport=a.viewport,this.element=a.element,this.enableWheel=a.enableWheel,this.enableHDR=a.enableHDR,this.works=a.works,this.imageOptions=a.imageOptions,this.videoTexture=a.videoTexture,this.extraElements=a.extraElements,this.initial=a.initial,this.currentPano=typeof this.initial.state.panoIndex==`number`?{workCode:(i=(n=this.initial.state.workCode)==null?(r=a.works[0])==null?void 0:r.workCode:n)==null?``:i,panoIndex:this.initial.state.panoIndex}:{workCode:this.initial.currentState.workCode,panoIndex:this.initial.currentState.panoIndex},this.needsRender=!0,this.cameraMotion=new Y({longitude:{value:this.camera.pose.longitude,circle:[0,Math.PI*2]},latitude:this.camera.pose.latitude,fov:this.camera.pose.fov}),this.inMomentumMovement=null,this.eventUnbinds=[a.element].concat(a.extraElements||[]).map(e=>this.bindEvents(e)),this.initAnimationIsReady=!1,this.pending.add(`init-animation`),this.initAnimationReady=new Promise(e=>{nu.shared.add(()=>{this.initAnimation().then(()=>{this.initAnimationIsReady=!0,this.pending.delete(`init-animation`),e()})},!0,0)})}updateConfiguration(e){return!0}destroy(){var e;this.stopMomentumMovement(),this.destroyed=!0,this.off(),this.cameraMotion.dispose();for(let e of this.eventUnbinds)e();this.panState=void 0,(e=this.pressState)==null||e.stop(),this.pressState=void 0}isReady(){return this.inMomentumMovement===null&&this.pending.size===0&&this.cameraMotion.ended===!0}bindExtraElement(e){for(let t of this.eventUnbinds)if(t.element===e)return;this.eventUnbinds.push(this.bindEvents(e))}unbindExtraElement(e){let t=[];for(let n of this.eventUnbinds)n.element===e?n():t.push(n);this.eventUnbinds=t}updateModel(e){this.needsRender=!0}updateWork(e,t,n,r){return this.works=e,this.userAction=r,!1}updateTime(e,t,...n){if(this.destroyed)return;let r={};this.cameraMotion.ended&&(this.cameraMotion.update(e),r.longitude=this.cameraMotion.value.longitude,r.latitude=this.cameraMotion.value.latitude,r.fov=this.cameraMotion.value.fov),ZC(r)&&this.setCamera(r)}render(){return!1}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={};return e.longitude!==void 0&&(r.longitude=e.longitude),e.latitude!==void 0&&(r.latitude=e.latitude),e.fov!==void 0&&(r.fov=e.fov),this.cameraMotion.set(r,t).catch(q)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.cameraMotion.setKeyframes(r,t)})}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(K())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance})}initAnimation(){let{state:t,currentState:n,duration:r,userAction:i}=this.initial,a=e.initAnimationEndState(this);return this.userAction=i,this.emit(`initAnimation.start`,$(`initAnimation.start`,{state:a,userAction:this.userAction})),this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:a,userAction:this.userAction})),Promise.resolve()}setCamera(e={}){var t,n,r,i,a;let o=(t=e.longitude)==null?this.camera.pose.longitude:t,s=(n=e.latitude)==null?this.camera.pose.latitude:n,c=(r=e.fov)==null?this.camera.pose.fov:r,l=(i=e.distance)==null?this.camera.pose.distance:i,u=(a=e.offset)==null?this.camera.pose.offset:a,d=RC(o,this.camera.pose.longitude,Math.PI*2)||RC(s,this.camera.pose.latitude),f=RC(c,this.camera.pose.fov),p=RC(l,this.camera.pose.distance),m=BC(u,this.camera.pose.offset);(f||d||m||p)&&(this.camera.setFromPose({longitude:o,latitude:s,fov:c,distance:l,offset:u}),this.emit(`camera.update`,$(`camera.update`,{userAction:this.userAction,state:Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:o,latitude:s,fov:c,offset:u,distance:l})})),this.needsRender=!0)}stopMomentumMovement(){if(this.inMomentumMovement&&this.inMomentumMovement.event&&!this.inMomentumMovement.event.defaultPrevented&&!this.inMomentumMovement.event.isFinal){let e=$(`gesture.momentum`,Object.assign(Object.assign({},this.inMomentumMovement.event),{isFirst:!1,isFinal:!0}));this.emit(`gesture.fire`,e),this.emit(`gesture.momentum`,e)}this.inMomentumMovement=null}onPanGesture(e){this.stopMomentumMovement(),this.emit(`gesture.pan`,e)}onTapGesture(e){this.stopMomentumMovement(),this.emit(`gesture.tap`,e)}onDblTapGesture(e){this.stopMomentumMovement(),this.emit(`gesture.dbltap`,e),!e.defaultPrevented&&(e.type=`gesture.tap`,this.onTapGesture(e))}onPressGesture(e){this.stopMomentumMovement(),this.emit(`gesture.press`,e)}onPinchGesture(e){this.stopMomentumMovement(),this.emit(`gesture.pinch`,e)}onMouseWheel(e){this.stopMomentumMovement(),this.emit(`gesture.mousewheel`,e)}onMouseMove(e){this.stopMomentumMovement(),this.emit(`gesture.mousemove`,e)}relativeClientPosition(e){let{top:t,left:n,width:r,height:i}=this.element.getBoundingClientRect();return n+=r*this.viewport.left,t+=i*(1-this.viewport.bottom-this.viewport.height),r*=this.viewport.width,i*=this.viewport.height,new l.Vector2((e.x-n)/r*2-1,-(e.y-t)/i*2+1)}createRaycasterFromCamera(e,t){let n=new l.Raycaster;return n.params.Points={threshold:.1},n.firstHitOnly=!0,n.near=t.near,n.far=t.far,hw(n,e,t),n}bindEvents(e){let t=e=>{let t=this.relativeClientPosition(e);return!(Math.abs(t.x)>1||Math.abs(t.y)>1)},n=e=>({button:`button`in e?e.button:0,buttons:`buttons`in e?e.buttons:0,shiftKey:`shiftKey`in e?e.shiftKey:!1,ctrlKey:`ctrlKey`in e?e.ctrlKey:!1,altKey:`altKey`in e?e.altKey:!1,metaKey:`metaKey`in e?e.metaKey:!1}),r=new mw.Manager(e),i=e=>e.session.firstInput||null,a=new mw.Pan({threshold:10,pointers:0}),o=new mw.Tap({interval:410}),s=new mw.Pinch({threshold:0,pointers:2});r.add([a,o,s]),r.on(`panstart pan`,e=>{let a=n(e.srcEvent),o=i(r);if(o&&!t(o.center))return;let s=$(`gesture.pan`,{target:e.target,pointerType:e.pointerType,srcEvent:e.srcEvent,pointers:e.pointers.map(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},a),{coords:t,raycaster:n})}),isFirst:e.isFirst,isFinal:e.isFinal,scale:e.scale,center:(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},a),{coords:t,raycaster:n})})(e.center),velocityX:e.velocityX,velocityY:e.velocityY,overallVelocityX:e.overallVelocityX,overallVelocityY:e.overallVelocityY,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),JC(this.camera.pose))});this.emit(`gesture.fire`,s),this.onPanGesture(s),v()}),r.on(`tap`,e=>{let a=n(e.srcEvent);if(e.pointerType===`mouse`&&a.button!==0)return;let o=i(r);if(o&&!t(o.center))return;let s=$(`gesture.tap`,{target:e.target,pointerType:e.pointerType,srcEvent:e.srcEvent,pointers:e.pointers.map(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},a),{coords:t,raycaster:n})}),isFirst:!0,isFinal:!0,scale:e.scale,center:(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},a),{coords:t,raycaster:n})})(e.center),velocityX:e.velocityX,velocityY:e.velocityY,overallVelocityX:e.overallVelocityX,overallVelocityY:e.overallVelocityY,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),JC(this.camera.pose))});this.emit(`gesture.fire`,s),this.onTapGesture(s),v()}),r.on(`pinchstart pinch pinchend`,e=>{let a=n(e.srcEvent),o=i(r);if(o&&!t(o.center))return;let s=$(`gesture.pinch`,{target:e.target,pointerType:e.pointerType,srcEvent:e.srcEvent,pointers:e.pointers.map(e=>{var t;let n=this.relativeClientPosition(e),r=new l.Raycaster;return r.params.Points={threshold:.1},hw(r,n,this.camera),Object.assign(Object.assign({x:e.x,y:e.y,delta:(t=e.delta)==null?0:t},a),{coords:n,raycaster:r})}),isFirst:e.type===`pinchstart`,isFinal:e.type===`pinchend`,scale:e.scale,center:(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},a),{coords:t,raycaster:n})})(e.center),velocityX:e.velocityX,velocityY:e.velocityY,overallVelocityX:e.overallVelocityX,overallVelocityY:e.overallVelocityY,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),JC(this.camera.pose))});this.emit(`gesture.fire`,s),this.onPinchGesture(s),v()}),r.on(`dbltap`,e=>{let a=n(e.srcEvent);if(e.pointerType===`mouse`&&a.button!==0)return;let o=i(r);if(o&&!t(o.center))return;let s=$(`gesture.dbltap`,{target:e.target,pointerType:e.pointerType,srcEvent:e.srcEvent,pointers:e.pointers.map(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},a),{coords:t,raycaster:n})}),isFirst:!0,isFinal:!0,scale:e.scale,center:(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},a),{coords:t,raycaster:n})})(e.center),velocityX:e.velocityX,velocityY:e.velocityY,overallVelocityX:e.overallVelocityX,overallVelocityY:e.overallVelocityY,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),JC(this.camera.pose))});this.emit(`gesture.fire`,s),this.onDblTapGesture(s),v()});let c=null,u=null,d=(e,t,r)=>{let i={x:r.clientX,y:r.clientY},a=this.relativeClientPosition(i),o=this.createRaycasterFromCamera(a,this.camera),s=Object.assign(Object.assign(Object.assign(Object.assign({},i),{coords:a,raycaster:o}),n(r)),{delta:0}),c=e===`pinchend`?t:t-r.deltaY/280;return $(`gesture.pinch`,{target:r.target,pointerType:`mouse`,srcEvent:r,pointers:[Object.assign({},s)],isFirst:e===`pinchstart`,isFinal:e===`pinchend`,scale:U(c,.1,10),center:Object.assign({},s),velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),JC(this.camera.pose))})},f=e=>{var r;if(t({x:e.clientX,y:e.clientY})){if(e.preventDefault(),e.ctrlKey){let t=(r=c==null?void 0:c.prevEvent.scale)==null?1:r,n=d(c?`pinch`:`pinchstart`,t,e);this.emit(`gesture.fire`,n),c===null?c={firstEvent:n,prevEvent:n}:c.prevEvent=n,this.emit(`gesture.fire`,n),this.onPinchGesture(n),u!==null&&window.clearTimeout(u),u=window.setTimeout(()=>{var t;u=null;let n=d(`pinchend`,(t=c==null?void 0:c.prevEvent.scale)==null?1:t,e);this.emit(`gesture.fire`,n),c=null,this.onPinchGesture(n)},200)}else{let t=(Math.abs(e.deltaY)>Math.abs(e.deltaX)?e.deltaY:e.deltaX)/-60,r=this.mouseWheelState!==void 0,i={x:e.clientX,y:e.clientY},a=this.relativeClientPosition(i),o=this.createRaycasterFromCamera(a,this.camera),s=Object.assign(Object.assign(Object.assign(Object.assign({},i),{coords:a,raycaster:o}),n(e)),{delta:t}),c=$(`gesture.mousewheel`,{target:e.target,pointerType:`mouse`,srcEvent:e,pointers:[Object.assign({},s)],isFirst:r,isFinal:!1,scale:0,center:Object.assign({},s),velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),JC(this.camera.pose))});this.emit(`gesture.fire`,c),this.onMouseWheel(c),this.mouseWheelState&&clearTimeout(this.mouseWheelState.timer),this.mouseWheelState={timer:setTimeout(()=>{this.mouseWheelState=void 0;let t=$(`gesture.mousewheel`,{target:e.target,pointerType:`mouse`,srcEvent:e,pointers:[Object.assign(Object.assign({},s),{delta:0})],isFirst:!1,isFinal:!0,scale:0,center:Object.assign(Object.assign({},s),{delta:0}),velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),JC(this.camera.pose))});this.emit(`gesture.fire`,t),this.onMouseWheel(t)},100)}}v()}},p=e=>{if(WS)return;if(!t({x:e.clientX,y:e.clientY})){m();return}let r=!1;this.mouseMoveState||(r=!0);let i={x:e.clientX,y:e.clientY},a=this.relativeClientPosition(i),o=this.createRaycasterFromCamera(a,this.camera),s=Object.assign(Object.assign(Object.assign(Object.assign({},i),{coords:a,raycaster:o}),n(e)),{delta:0}),c=$(`gesture.mousemove`,{target:e.target,pointerType:`mouse`,srcEvent:e,pointers:[Object.assign({},s)],isFirst:r,isFinal:!1,scale:0,center:Object.assign({},s),velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),JC(this.camera.pose))});this.emit(`gesture.fire`,c),this.mouseMoveState={timeStamp:K(),event:c},this.onMouseMove(c),this.pressState&&Math.abs(e.clientX-this.pressState.event.center.y)>10&&Math.abs(e.clientY-this.pressState.event.center.y)>10&&v()},m=()=>{if(this.mouseMoveState){let e=$(this.mouseMoveState.event.type,Object.assign(Object.assign({},this.mouseMoveState.event),{isFinal:!0}));this.emit(`gesture.fire`,e),this.mouseMoveState=void 0,this.onMouseMove(e)}v()},h=e=>{if(!t(e.center)){v();return}let n=!1;this.pressState||(n=!0,this.pressState={event:e,timeStamp:K(),stop:q});let r=K()-this.pressState.timeStamp,i=$(this.pressState.event.type,Object.assign(Object.assign({},this.pressState.event),{isFirst:n,isFinal:!1,center:Object.assign(Object.assign({},this.pressState.event.center),{delta:r}),pointers:this.pressState.event.pointers.map(e=>Object.assign(Object.assign({},e),{delta:r}))}));this.emit(`gesture.fire`,i),this.onPressGesture(i),this.pressState&&(this.pressState.stop=nu.shared.add(t=>{h(e)},!0,1))},g=e=>{if(v(),e.touches.length>1||e.changedTouches.length<=0)return;let t={x:e.changedTouches[0].clientX,y:e.changedTouches[0].clientY},r=this.relativeClientPosition(t),i=this.createRaycasterFromCamera(r,this.camera),a=Object.assign(Object.assign(Object.assign(Object.assign({},t),{coords:r,raycaster:i}),n(e)),{delta:0}),o=$(`gesture.press`,{target:e.target,pointerType:`touch`,srcEvent:e,pointers:[Object.assign({},a)],isFirst:!1,isFinal:!1,scale:0,center:a,velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),JC(this.camera.pose))});this.emit(`gesture.fire`,o),h(o)},_=e=>{v();let t={x:e.clientX,y:e.clientY},r=this.relativeClientPosition(t),i=this.createRaycasterFromCamera(r,this.camera),a=Object.assign(Object.assign(Object.assign(Object.assign({},t),{coords:r,raycaster:i}),n(e)),{delta:0}),o=$(`gesture.press`,{target:e.target,pointerType:`mouse`,srcEvent:e,pointers:[Object.assign({},a)],isFirst:!1,isFinal:!1,scale:0,center:a,velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),JC(this.camera.pose))});this.emit(`gesture.fire`,o),h(o)},v=()=>{var e;if(this.pressState){let t=K()-this.pressState.timeStamp,n=$(this.pressState.event.type,Object.assign(Object.assign({},this.pressState.event),{center:Object.assign(Object.assign({},this.pressState.event.center),{delta:t}),isFirst:!1,isFinal:!0,pointers:this.pressState.event.pointers.map(e=>Object.assign(Object.assign({},e),{delta:t}))}));this.emit(`gesture.fire`,n),this.onPressGesture(n),(e=this.pressState)==null||e.stop(),this.pressState=void 0}},y=null,b=e=>{var t,r,i;let a=!1,o=!1;switch(e.type){case`gesturestart`:a=!0;break;case`gestureend`:o=!0;break;default:break}let s={x:(t=e.clientX)==null?0:t,y:(r=e.clientY)==null?0:r},c=this.relativeClientPosition(s),l=this.createRaycasterFromCamera(c,this.camera),u=Object.assign(Object.assign(Object.assign(Object.assign({},s),{coords:c,raycaster:l}),n(e)),{delta:0});return $(`gesture.pinch`,{target:e.target,pointerType:`mouse`,srcEvent:e,pointers:[Object.assign({},u)],isFirst:a,isFinal:o,scale:(i=e.scale)==null?1:i,center:Object.assign({},u),velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),JC(this.camera.pose))})},x=e=>{if(e.preventDefault(),WS)return;let n=b(e);this.emit(`gesture.fire`,n),y={firstEvent:n};let r=y.firstEvent;r&&!t(r.center)||this.onPinchGesture(n)},S=e=>{if(e.preventDefault(),WS||!y)return;let n=y.firstEvent;if(n&&!t(n.center))return;let r=b(e);this.emit(`gesture.fire`,r),this.onPinchGesture(r)},C=e=>{if(e.preventDefault(),WS||!y)return;let n=y.firstEvent;if(y=null,n&&!t(n.center))return;let r=b(e);this.emit(`gesture.fire`,r),this.onPinchGesture(r)},w=t=>{if(t&&typeof t.preventDefault==`function`&&t.currentTarget===e&&t.preventDefault(),typeof getSelection==`function`){let e=getSelection();e&&e.focusNode&&(e.removeAllRanges&&e.removeAllRanges(),e.empty&&e.empty())}};return this.enableWheel&&e.addEventListener(`wheel`,f,{passive:!1}),e.addEventListener(`mousemove`,p,!1),e.addEventListener(`mouseout`,m,!1),e.addEventListener(`touchstart`,g,{passive:!0}),e.addEventListener(`touchend`,v,!1),e.addEventListener(`touchcancel`,v,!1),e.addEventListener(`mousedown`,_,!1),e.addEventListener(`mouseup`,v,!1),e.addEventListener(`gesturestart`,x,{passive:!1}),e.addEventListener(`gesturechange`,S,{passive:!1}),e.addEventListener(`gestureend`,C,{passive:!1}),e.addEventListener(`touchstart`,w,{passive:!1}),e.addEventListener(`contextmenu`,w,!1),Object.assign(()=>{r.destroy(),e.removeEventListener(`wheel`,f,!1),e.removeEventListener(`mousemove`,p,!1),e.removeEventListener(`mouseout`,m,!1),e.removeEventListener(`touchstart`,g,!1),e.removeEventListener(`touchend`,v,!1),e.removeEventListener(`touchcancel`,v,!1),e.removeEventListener(`mousedown`,_,!1),e.removeEventListener(`mouseup`,v,!1),e.removeEventListener(`gesturestart`,x,!1),e.removeEventListener(`gesturechange`,S,!1),e.removeEventListener(`gestureend`,C,!1),e.removeEventListener(`touchstart`,w,!1),e.removeEventListener(`contextmenu`,w,!1)},{element:e})}},_w=new l.CircleGeometry(.1,16),vw=(0,p.uv)(),yw=(0,p.vec2)(.5,.5).sub(vw).length(),bw=(0,p.float)(.01),xw=(0,p.float)(.49),Sw=(0,p.float)(.29),Cw=(0,p.float)(1).sub((0,p.smoothstep)(xw.sub(bw),xw,yw)),ww=(0,p.smoothstep)(Sw,Sw.add(bw),yw),Tw=(0,p.vec4)(.576,.635,1,.3),Ew=(0,p.vec4)(1,1,1,(0,p.abs)(yw.sub(xw.add(Sw).div(2))).div(xw.sub(Sw)).mul(1.5).add(.1).clamp(0,1)),Dw=(0,p.mix)(Tw,Ew,Ew.w),Ow=(0,p.vec4)(Dw.xyz,Dw.w.mul(Cw).mul(ww)),kw=new l.NodeMaterial;kw.fragmentNode=Ow,kw.side=l.DoubleSide,kw.blending=l.CustomBlending,kw.blendSrc=l.SrcAlphaFactor,kw.blendDst=l.OneMinusSrcAlphaFactor,kw.blendSrcAlpha=l.OneFactor,kw.blendDstAlpha=l.OneMinusSrcAlphaFactor,kw.depthWrite=!1,kw.transparent=!0;var Aw=class extends l.Object3D{constructor(){super(),this.ringMesh=new l.Mesh(_w,kw),this.ringMesh.position.z=.01,this.ringMesh.renderOrder=9999999999,this.add(this.ringMesh)}dispose(){this.remove(this.ringMesh)}},jw=new l.Box3,Mw=new l.Vector3,Nw={defaultLongitude:Math.PI/4,defaultLatitude:Math.PI/4,defaultFov:80,maxFov:120,minFov:20,maxLatitude:Math.PI/2,minLatitude:-Math.PI/2,intersectMeshCreator:()=>new Aw},Pw=class e extends gw{static distanceFromModel(e,t,n){let r=e.boundingBox,i=r.isEmpty()?10:Math.pow(Math.pow(r.max.x-r.min.x+1,2)+Math.pow(r.max.y-r.min.y+1,2)+Math.pow(r.max.z-r.min.z+1,2),1/2);i=isNaN(i)||!isFinite(i)?1:i;let a=i/2/Math.tan(Math.PI*t/360);return n<1&&(a/=n),isNaN(a)||!isFinite(a)?i:a}static parseArgs(t){var n,r,i,a,o,s,c,l;if(t instanceof e)return t;let u=super.parseArgs(t);return Object.assign(Object.assign({},u),{defaultLongitude:(n=t.defaultLongitude)==null?Nw.defaultLongitude:n,defaultLatitude:(r=t.defaultLatitude)==null?Nw.defaultLatitude:r,defaultFov:(i=t.defaultFov)==null?Nw.defaultFov:i,maxFov:(a=t.maxFov)==null?Nw.maxFov:a,minFov:(o=t.minFov)==null?Nw.minFov:o,maxLatitude:(s=t.maxLatitude)==null?Nw.maxLatitude:s,minLatitude:(c=t.minLatitude)==null?Nw.minLatitude:c,intersectMeshCreator:(l=t.intersectMeshCreator)==null?Nw.intersectMeshCreator:l})}static initAnimationEndState(t){var n,r,i,a,o,s,c;let u=this.parseArgs(t),{state:d,currentState:f}=t.initial,p=typeof d.panoIndex==`number`?{workCode:(i=(n=d.workCode)==null?(r=u.works[0])==null?void 0:r.workCode:n)==null?``:i,panoIndex:d.panoIndex}:{workCode:f.workCode,panoIndex:f.panoIndex},m=(a=d.fov)==null?u.defaultFov:a,h=(o=d.longitude)==null?YC(f.mode)?f.longitude:u.defaultLongitude:o,g=U(typeof u.minLatitude==`function`?u.minLatitude(m):u.minLatitude,-Math.PI/2,Math.PI/2),_=U(typeof u.maxLatitude==`function`?u.maxLatitude(m):u.maxLatitude,-Math.PI/2,Math.PI/2),v=U((s=d.latitude)==null?f.mode===`Floorplan`?f.latitude:u.defaultLatitude:s,g,_),y=d.offset?d.offset.clone():t.modelScene.boundingBox.getCenter(new l.Vector3),b=(c=d.distance)==null?e.distanceFromModel(u.modelScene,u.defaultFov,u.camera.aspect):c;return Object.assign(Object.assign({},p),{mode:`Floorplan`,longitude:h,latitude:v,fov:m,offset:y,distance:b})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Floorplan`,this.defaultLongitude=n.defaultLongitude,this.defaultLatitude=n.defaultLatitude,this.defaultFov=n.defaultFov,this.maxFov=n.maxFov,this.minFov=n.minFov,this.maxLatitude=n.maxLatitude,this.minLatitude=n.minLatitude,this.locationMotion=new Y({x:this.camera.pose.offset.x,y:this.camera.pose.offset.y,z:this.camera.pose.offset.z,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Y({modelAlpha:this.modelScene.parameter.resolveValue().modelAlpha}),this.perspToOrthoMotion=new Y({perspToOrtho:this.camera.perspToOrtho.x}),this.pendingTextureId=null,this.textureLoader=new mu,this.intersectMeshCreator=n.intersectMeshCreator,this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=`intersect`,this.intersectMesh.visible=!1,this.helper.add(this.intersectMesh)}updateConfiguration(e){if(super.updateConfiguration(e)===!1)return!1;if(e.defaultLongitude!==void 0&&this.defaultLongitude!==e.defaultLongitude&&(this.defaultLongitude=e.defaultLongitude),e.defaultLatitude!==void 0&&this.defaultLatitude!==e.defaultLatitude&&(this.defaultLatitude=e.defaultLatitude),e.defaultFov!==void 0&&this.defaultFov!==e.defaultFov&&(this.defaultFov=e.defaultFov),e.maxFov!==void 0&&this.maxFov!==e.maxFov&&(this.maxFov=e.maxFov),e.minFov!==void 0&&this.minFov!==e.minFov&&(this.minFov=e.minFov),e.maxLatitude!==void 0&&this.maxLatitude!==e.maxLatitude&&(this.maxLatitude=e.maxLatitude),e.minLatitude!==void 0&&this.minLatitude!==e.minLatitude&&(this.minLatitude=e.minLatitude),e.intersectMeshCreator!==void 0&&this.intersectMeshCreator!==e.intersectMeshCreator){this.intersectMeshCreator=e.intersectMeshCreator;let t=this.intersectMesh;this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=t.name,this.intersectMesh.visible=t.visible;let n=this.intersectMesh.parent;n&&n.add(this.intersectMesh),t.dispose()}return!0}destroy(){super.destroy(),this.pendingTextureId=null,this.locationMotion.dispose(),this.panState=void 0,this.intersectMesh.dispose(),this.helper.remove(this.intersectMesh)}isReady(){return this.locationMotion.ended===!1?!1:super.isReady()}updateWork(e,t,n,r){var i;return this.works=e,this.updateCamera(t,(i=n.duration)==null?0:i,r),!0}updateModel(t){super.updateModel(t);let n=t.boundingBox.getCenter(new l.Vector3),r=e.distanceFromModel(t,this.defaultFov,this.camera.aspect);this.updateCamera({offset:n,distance:r},0,!0)}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},i={};return e.distance!==void 0&&(r.distance=e.distance),e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(i.longitude=e.longitude),e.latitude!==void 0&&(i.latitude=e.latitude),e.fov!==void 0&&(i.fov=e.fov),this.locationMotion.set(r,t).catch(q),this.cameraMotion.set(i,t).catch(q)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],i=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:t.value.distance,x:t.value.offset.x,y:t.value.offset.x,z:t.value.offset.x}}),i.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(q),this.cameraMotion.setKeyframes(e,t)})}updateTime(e,t,...n){if(this.destroyed)return;let r={},i={};if(this.modelAlphaMotion.ended||(this.modelAlphaMotion.update(e),r.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.modelScene.parameter.modelAlpha===0&&this.modelScene.parameter.progress!==1){let{pano0:e,pano1:t}=this.modelScene.parameter;e&&e.map!==(t==null?void 0:t.map)&&e.map.dispose(),r.progress=1,r.pano0=r.pano1=t}if(this.perspToOrthoMotion.ended||(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(U(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended||(this.locationMotion.update(e),i.distance=this.locationMotion.value.distance,i.offset=new l.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z)),this.cameraMotion.ended||(this.cameraMotion.update(e),i.longitude=this.cameraMotion.value.longitude,i.latitude=this.cameraMotion.value.latitude,i.fov=this.cameraMotion.value.fov),ZC(r)||this.modelScene.parameter.set(r),ZC(i)||this.setCamera(i),this.intersectMesh&&this.intersectMesh.parent){let e=U(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1)}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(K())[1],t=this.locationMotion.getKeyFrameSegment(K())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:new l.Vector3(t.value.x,t.value.y,t.value.z),distance:t.value.distance})}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:i,userAction:a}=this.initial;this.userAction=a;let o=e.initAnimationEndState(this),s=pl(o,[`longitude`,`latitude`,`fov`]),c={x:o.offset.x,y:o.offset.y,z:o.offset.z,distance:o.distance};this.emit(`initAnimation.start`,$(`initAnimation.start`,{state:o,userAction:this.userAction})),this.modelAlphaMotion.set({modelAlpha:1},i/3).catch(q),this.perspToOrthoMotion.set({perspToOrtho:0},i).catch(q),this.cameraMotion.set(s,i).catch(q),this.locationMotion.set(c,i).then(()=>{this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:o,userAction:this.userAction}))},e=>{let t=Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),JC(this.camera.pose));this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:t,userAction:this.userAction}))}).then(()=>{t()})})}updateRenderSize(e){this.needsRender=!0}getForwardObserverOrNot(e){let[t]=this.modelScene.intersectRaycaster(e);if(!t)return null;let n=[];for(let t of this.works){let r=this.modelScene.models.find(e=>e.work===t);if(!(!r||r.visible===!1)&&!(t.observers.length<=0)&&(jw.copy(t.observerBox).expandByScalar(10).applyMatrix4(t.transform),jw.containsPoint(e.ray.origin)||e.ray.intersectsBox(jw)))for(let e of t.observers)n.push(e)}let[r,i]=em(n,e=>Mw.copy(e.standingPosition).applyMatrix4(e.work.transform).distanceTo(t.point),!0);return r&&i<Math.max(r.standingPosition.distanceTo(this.camera.position)/5,10)?r:null}coordinatesForOffset(e){let t=this.renderer.getSize(new l.Vector2);return{longitude:-2*e.x/(t.x*this.viewport.width),latitude:2*e.y/(t.y*this.viewport.height)}}requestMomentumMovement(e,t,n,r){if(this.inMomentumMovement===null)return;r=Math.max(r,1);let i=Object.assign({},n),a={longitude:0,latitude:0};for(let e=0;e<r;e++)i.longitude*=.996,i.latitude*=.996*.998,a.longitude+=i.longitude,a.latitude+=i.latitude;let o=ma(this.cameraMotion.value.longitude+a.longitude),s=this.cameraMotion.value.fov,c=U(typeof this.minLatitude==`function`?this.minLatitude(s):this.minLatitude,-Math.PI/2,Math.PI/2),l=U(typeof this.maxLatitude==`function`?this.maxLatitude(s):this.maxLatitude,-Math.PI/2,Math.PI/2),u=U(this.cameraMotion.value.latitude+a.latitude,c,l),d=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:o,latitude:u,fov:this.cameraMotion.value.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance}),f=!(i.longitude>1e-4||i.longitude<-1e-4||i.latitude>1e-4||i.latitude<-1e-4),p=$(`gesture.momentum`,Object.assign(Object.assign({},e),{isFirst:t,isFinal:f,state:d}));if(this.emit(`gesture.fire`,p),this.inMomentumMovement.event=p,this.emit(`gesture.momentum`,p),e.defaultPrevented){this.inMomentumMovement=null;return}this.inMomentumMovement&&(this.cameraMotion.set({longitude:o,latitude:u},0).catch(q),f?this.inMomentumMovement=null:nu.shared.add((t,n)=>{this.requestMomentumMovement(e,!1,i,n)},!0))}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=this.panState,n=e.pointers.length;if(e.isFinal?this.panState=void 0:this.panState={pointerLength:n,x:e.center.x,y:e.center.y},t===void 0||t.pointerLength!==n)return;let r={x:e.center.x-t.x,y:e.center.y-t.y},i=this.relativeClientPosition(e.center),a=1,o=this.camera.pose.latitude;Math.abs(o)>Math.PI/6&&(a=o<0?i.y<0?-1:1:i.y>0?-1:1),r.x*=a;let s=this.coordinatesForOffset(r),c=ma(this.cameraMotion.value.longitude+s.longitude),l=this.camera.pose.fov,u=U(typeof this.minLatitude==`function`?this.minLatitude(l):this.minLatitude,-Math.PI/2,Math.PI/2),d=U(typeof this.maxLatitude==`function`?this.maxLatitude(l):this.maxLatitude,-Math.PI/2,Math.PI/2),f=U(this.cameraMotion.value.latitude+s.latitude,u,d);this.camera.aspect<1&&Math.abs(e.overallVelocityX)>.2&&Math.atan2(Math.abs(e.overallVelocityY),Math.abs(e.overallVelocityX))<Math.PI/6.923&&(f=this.cameraMotion.value.latitude);let p=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:c,latitude:f,fov:l,offset:this.camera.pose.offset,distance:this.camera.pose.distance});if(e.state=p,this.emit(`gesture.pan`,e),!e.defaultPrevented&&(this.cameraMotion.set({longitude:p.longitude,latitude:p.latitude},0).catch(q),e.isFinal)){let t=e.velocityX*a,n=e.velocityY;this.inMomentumMovement={uuid:Ft()},this.requestMomentumMovement(e,!0,this.coordinatesForOffset({x:t,y:n}),0)}}onPinchGesture(e){var t;if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let n=(t=this.pinchState)==null?void 0:t.fov;if(e.isFirst){this.pinchState={x:e.center.x,y:e.center.y,fov:this.cameraMotion.value.fov};return}if(e.isFinal&&(this.panState=void 0,this.pinchState=void 0),n===void 0)return;let r=U(n/e.scale,this.minFov,this.maxFov),i=U(typeof this.minLatitude==`function`?this.minLatitude(r):this.minLatitude,-Math.PI/2,Math.PI/2),a=U(typeof this.maxLatitude==`function`?this.maxLatitude(r):this.maxLatitude,-Math.PI/2,Math.PI/2),o=U(this.cameraMotion.value.latitude,i,a);e.state.fov=r,e.state.latitude=o,this.emit(`gesture.pinch`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:r,latitude:o},0).catch(q),this.onPanGesture(e))}onMouseMove(e){var t,n;if(!this.intersectMesh.parent||this.panState)return;if(this.emit(`gesture.mousemove`,e),e.defaultPrevented){this.hideIntersectMesh();return}let r=e.center.raycaster;if(e.isFinal&&this.intersectMesh.parent&&this.intersectMesh.visible===!0){this.hideIntersectMesh();return}let[i]=this.modelScene.intersectRaycaster(r),a=$(`intersect.update`,{raycaster:r,intersection:i==null?null:i,object:this.intersectMesh});if(this.emit(`intersect.update`,a),a.defaultPrevented){this.hideIntersectMesh();return}if(i){let e=(n=(t=i.face)==null?void 0:t.normal)==null?new l.Vector3().copy(r.ray.direction).multiplyScalar(-1):n,a=e.clone(),o=i.point.clone();this.intersectMesh.position.copy(o);let s=o.clone().add(a);if(this.intersectMesh.lookAt(s),Math.abs(e.y)>.99){let e=this.camera.position.clone().sub(o);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0}else this.hideIntersectMesh()}onMouseWheel(e){if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let{minFov:t,maxFov:n}=this,r=U(this.camera.fov-e.center.delta,t,n),i=U(typeof this.minLatitude==`function`?this.minLatitude(r):this.minLatitude,-Math.PI/2,Math.PI/2),a=U(typeof this.maxLatitude==`function`?this.maxLatitude(r):this.maxLatitude,-Math.PI/2,Math.PI/2),o=U(this.cameraMotion.value.latitude,i,a);e.state.fov=r,e.state.latitude=o,this.emit(`gesture.mousewheel`,e),!e.defaultPrevented&&this.cameraMotion.set({fov:r,latitude:o},0).catch(q)}onTapGesture(e){var t;this.userAction=e.userAction,this.stopMomentumMovement();let n=e.center.raycaster,r=this.getForwardObserverOrNot(n);if(!r)this.emit(`gesture.tap`,e);else{let n={longitude:this.camera.pose.longitude,latitude:0},i=Object.assign(Object.assign({},e.state),{mode:`Panorama`,workCode:r.work.workCode,panoIndex:r.panoIndex,longitude:n.longitude,latitude:n.latitude,offset:r?r.position.clone():new l.Vector3,distance:0});if(e.state=i,this.emit(`gesture.tap`,e),!e.defaultPrevented&&(this.emit(`pano.select`,$(`pano.select`,{prevPano:this.currentPano,state:i,userAction:e.userAction,options:n,progress:0,error:null})),r&&r.active)){let e=this.pendingTextureId=Ft(),a=mb({panoIndex:r.panoIndex,workCode:r.work.workCode}),o=this.imageOptions.transform,s=Object.assign({key:`pano.${a}`},pl(this.imageOptions,[`format`,`size`,`quality`,`sharpen`,`forceUseExifOrientation`,`mappings`])),c={right:r.images.work.getURL(r.images.right),left:r.images.work.getURL(r.images.left),up:r.images.work.getURL(r.images.up),down:r.images.work.getURL(r.images.down),front:r.images.work.getURL(r.images.front),back:r.images.work.getURL(r.images.back)},d,f,p=this.enableHDR?r.images.gainmap:void 0;p&&(d={right:r.images.work.getURL(p.right),left:r.images.work.getURL(p.left),up:r.images.work.getURL(p.up),down:r.images.work.getURL(p.down),front:r.images.work.getURL(p.front),back:r.images.work.getURL(p.back)},f=r.images.work.getURL(p.cfg));let m=`pano:`+fb([c,d,s]),h=this.modelScene.parameter,g;if(h.pano0&&h.pano0.map.name===m?g=h.pano0:h.pano1&&h.pano1.map.name===m&&(g=h.pano1),g)h.pano0&&h.pano0.map!==g.map&&h.pano0.map.dispose(),h.pano1&&h.pano1.map!==g.map&&h.pano1.map!==((t=h.pano0)==null?void 0:t.map)&&h.pano1.map.dispose(),h.set({pano0:g,pano1:g}),this.emit(`pano.request`,$(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:i,options:n,error:null}));else{let t=this.textureLoader.loadCubeTexture(c,{imageURL:{transform:o,options:s},format:l.RGBAFormat,viaAjax:!0,fetcher:gy(this.fiveId,r.work)},void 0,void 0,void 0,this.renderer),p=f&&d?Promise.all([gy(this.fiveId,r.work).ajax(f,{responseType:`text`}).then(e=>Wt(JSON.parse(e.body))),this.textureLoader.loadCubeTexture(d,{imageURL:{transform:o,options:s},format:l.RGBAFormat,colorSpace:l.NoColorSpace,viaAjax:!0,fetcher:gy(this.fiveId,r.work)},void 0,void 0,void 0,this.renderer)]).then(([e,t])=>({config:e,map:t.body})):Promise.resolve(void 0);Promise.all([t,p]).then(t=>(0,u.__awaiter)(this,[t],void 0,function*([t,o]){var s,c;let{body:u}=t;if(this.destroyed||this.pendingTextureId!==e){u.dispose();return}this.pendingTextureId=null,u.name=m;let d=Array.isArray(u.image)?u.image[0]:u.image,f=(s=d==null?void 0:d.width)==null?2048:s,p=yield pw(this.renderer,u,!0,Tx),g=new kx().formPixels(p.data),_={panoId:a,map:u,mapSize:f,mapHistogram:new l.Vector4().fromArray(g.toArray()),matrix:r.matrix.clone().premultiply(r.work.transform),zoom:1,gainmap:o?{map:o.map,cfg:o.config}:void 0};h.pano0&&h.pano0.map.dispose(),h.pano1&&h.pano1.map!==((c=h.pano0)==null?void 0:c.map)&&h.pano1.map.dispose(),h.set({pano0:_,pano1:_}),this.emit(`pano.request`,$(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:i,options:n,error:null}))})).catch(t=>{this.destroyed||this.pendingTextureId!==e||(this.pendingTextureId=null)})}}}}onDblTapGesture(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=this.cameraMotion.value.fov,n=this.minFov-t<t-this.defaultFov?this.minFov:this.defaultFov;e.state.fov=n,this.emit(`gesture.dbltap`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:n},360).catch(q),this.hideIntersectMesh())}hideIntersectMesh(){this.intersectMesh.visible=!1,this.needsRender=!0}},Fw=Object.assign(Object.assign({},ml(Nw,[`defaultLongitude`,`defaultLatitude`,`maxLatitude`,`minLatitude`])),{defaultLongitude:0,defaultLatitude:Math.PI/2}),Iw=class e extends Pw{static parseArgs(t){var n,r;if(t instanceof e)return t;let i=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2,defaultLongitude:(n=t.defaultLongitude)==null?Fw.defaultLongitude:n,defaultLatitude:(r=t.defaultLatitude)==null?Fw.defaultLatitude:r});return super.parseArgs(i)}static initAnimationEndState(e){var t,n;let r=this.parseArgs(e),i=super.initAnimationEndState(Object.assign(Object.assign({},r),{initial:Object.assign(Object.assign({},r.initial),{state:Object.assign(Object.assign({},r.initial.state),{longitude:(t=r.initial.state.longitude)==null?r.defaultLongitude:t,latitude:(n=r.initial.state.latitude)==null?r.defaultLatitude:n})})}));return Object.assign(Object.assign({},i),{mode:`Topview`})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Topview`}updateConfiguration(e){return super.updateConfiguration(Object.assign({},e))}updateModel(e){this.needsRender=!0;let t=this.modelScene.boundingBox.getCenter(new l.Vector3);this.locationMotion.set({x:t.x,y:t.y,z:t.z,distance:Pw.distanceFromModel(this.modelScene,this.defaultFov,this.camera.aspect)},0).catch(q),this.hideIntersectMesh()}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},i={};return e.distance!==void 0&&(r.distance=e.distance),e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(i.longitude=e.longitude),e.latitude!==void 0&&(i.latitude=e.latitude),e.fov!==void 0&&(i.fov=e.fov),this.locationMotion.set(r,t).catch(q),this.cameraMotion.set(i,t).catch(q)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],i=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:t.value.distance,x:t.value.offset.x,y:t.value.offset.y,z:t.value.offset.z}}),i.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(q),this.cameraMotion.setKeyframes(e,t)})}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:i,userAction:a}=this.initial;this.userAction=a;let o=e.initAnimationEndState(this),s={longitude:o.longitude,latitude:o.latitude,fov:o.fov},c={x:o.offset.x,y:o.offset.y,z:o.offset.z,distance:o.distance};this.emit(`initAnimation.start`,$(`initAnimation.start`,{state:o,userAction:this.userAction})),this.modelAlphaMotion.set({modelAlpha:1},i/3).catch(q),this.perspToOrthoMotion.set({perspToOrtho:1},i).catch(q),this.cameraMotion.set(s,i).catch(q),this.locationMotion.set(c,i).then(()=>{this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:o,userAction:this.userAction}))},e=>{let t=Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),JC(this.camera.pose));this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:t,userAction:this.userAction}))}).then(()=>{t()})})}requestMomentumMovement(){this.inMomentumMovement=null}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=this.panState,n=e.pointers.length;if(e.isFinal?this.panState=void 0:this.panState={pointerLength:n,x:e.center.x,y:e.center.y},t===void 0||t.pointerLength!==n)return;let r={x:e.center.x-t.x,y:e.center.y-t.y},i=new l.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),a=this.locationMotion.value.distance;a*=Math.tan(this.cameraMotion.value.fov/2*Math.PI/180);let o=this.renderer.getSize(new l.Vector2),s=2*r.x*a/o.y,c=2*r.y*a/o.y,u=new l.Vector3;u.setFromMatrixColumn(this.camera.matrix,0),u.multiplyScalar(-s),i.add(u),u.setFromMatrixColumn(this.camera.matrix,1),u.multiplyScalar(c),i.add(u);let d=this.modelScene.boundingBox.getCenter(new l.Vector3),f=this.modelScene.boundingBox.getSize(new l.Vector3),p=Math.max(f.x,f.y,f.z)/2;i.clamp(d.clone().sub(new l.Vector3().setScalar(p)),d.clone().add(new l.Vector3().setScalar(p))),e.state=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:0,latitude:Math.PI/2,fov:this.cameraMotion.value.fov,offset:i,distance:this.locationMotion.value.distance}),this.emit(`gesture.pan`,e),!e.defaultPrevented&&this.locationMotion.set({x:i.x,y:i.y,z:i.z},0).catch(q)}onPinchGesture(e){var t;if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let n=(t=this.pinchState)==null?void 0:t.fov;if(e.isFirst){this.pinchState={x:e.center.x,y:e.center.y,fov:this.cameraMotion.value.fov};return}if(e.isFinal&&(this.pinchState=void 0),n===void 0)return;let r=U(n/e.scale,this.minFov,this.maxFov);e.state.fov=r,this.emit(`gesture.pinch`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:r},0).catch(q),e.type=`gesture.pan`,this.onPanGesture(e))}onMouseWheel(e){if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let t=U(this.cameraMotion.value.fov-e.center.delta,this.minFov,this.maxFov);e.state.fov=t,this.emit(`gesture.mousewheel`,e),!e.defaultPrevented&&this.cameraMotion.set({fov:t},0).catch(q)}},Lw={defaultLatitude:0,defaultFov:90,maxFov:120,minFov:20,maxLatitude:e=>Math.PI/2-e/2/180*Math.PI,minLatitude:e=>-Math.PI/2+e/2/180*Math.PI,moveSpeed:3.6,intersectMeshCreator:()=>new Aw,aerialObserverMinHeight:5},Rw=class e extends gw{static parseArgs(t){var n,r,i,a,o,s,c,l,u;if(t instanceof e)return t;let d=super.parseArgs(t);return Object.assign(Object.assign({},d),{defaultLatitude:(n=t.defaultLatitude)==null?Lw.defaultLatitude:n,defaultFov:(r=t.defaultFov)==null?Lw.defaultFov:r,maxFov:(i=t.maxFov)==null?Lw.maxFov:i,minFov:(a=t.minFov)==null?Lw.minFov:a,maxLatitude:(o=t.maxLatitude)==null?Lw.maxLatitude:o,minLatitude:(s=t.minLatitude)==null?Lw.minLatitude:s,moveSpeed:(c=t.moveSpeed)==null?Lw.moveSpeed:c,intersectMeshCreator:(l=t.intersectMeshCreator)==null?Lw.intersectMeshCreator:l,aerialObserverMinHeight:(u=t.aerialObserverMinHeight)==null?Lw.aerialObserverMinHeight:u})}static initAnimationEndState(e){var t,n,r,i,a,o;let s=this.parseArgs(e),c=s.works,{state:u,currentState:d}=e.initial,f=typeof u.panoIndex==`number`?{workCode:(r=(t=u.workCode)==null?(n=s.works[0])==null?void 0:n.workCode:t)==null?``:r,panoIndex:u.panoIndex}:{workCode:d.workCode,panoIndex:d.panoIndex},p=c.getObserver(f),m=U((i=u.fov)==null?XC(d.mode)?d.fov:s.defaultFov:i,s.minFov,s.maxFov),h=(a=u.longitude)==null?d.longitude:a,g=U(typeof s.minLatitude==`function`?s.minLatitude(m):s.minLatitude,-Math.PI/2,Math.PI/2),_=U(typeof s.maxLatitude==`function`?s.maxLatitude(m):s.maxLatitude,-Math.PI/2,Math.PI/2),v=U((o=u.latitude)==null?XC(d.mode)?d.latitude:s.defaultLatitude:o,g,_),y=new l.Vector3;return p&&y.copy(p.position).applyMatrix4(p.work.transform),{workCode:f.workCode,panoIndex:f.panoIndex,mode:`PanoramaLike`,longitude:h,latitude:v,fov:m,offset:y,distance:0}}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`PanoramaLike`,this.defaultLatitude=n.defaultLatitude,this.defaultFov=n.defaultFov,this.maxFov=n.maxFov,this.minFov=n.minFov,this.maxLatitude=n.maxLatitude,this.minLatitude=n.minLatitude,this.moveSpeed=n.moveSpeed,this.intersectMeshCreator=n.intersectMeshCreator,this.aerialObserverMinHeight=n.aerialObserverMinHeight,this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=`intersect`,this.intersectMesh.visible=!1,this.helper.add(this.intersectMesh)}updateConfiguration(e){if(super.updateConfiguration(e)===!1)return!1;if(e.defaultLatitude!==void 0&&this.defaultLatitude!==e.defaultLatitude&&(this.defaultLatitude=e.defaultLatitude),e.maxLatitude!==void 0&&this.maxLatitude!==e.maxLatitude&&(this.maxLatitude=e.maxLatitude),e.minLatitude!==void 0&&this.minLatitude!==e.minLatitude&&(this.minLatitude=e.minLatitude),e.defaultFov!==void 0&&this.defaultFov!==e.defaultFov&&(this.defaultFov=e.defaultFov),e.maxFov!==void 0&&this.maxFov!==e.maxFov&&(this.maxFov=e.maxFov),e.minFov!==void 0&&this.minFov!==e.minFov&&(this.minFov=e.minFov),e.moveSpeed!==void 0&&this.moveSpeed!==e.moveSpeed&&(this.moveSpeed=e.moveSpeed),e.intersectMeshCreator!==void 0&&this.intersectMeshCreator!==e.intersectMeshCreator){this.intersectMeshCreator=e.intersectMeshCreator;let t=this.intersectMesh;this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=t.name,this.intersectMesh.visible=t.visible;let n=this.intersectMesh.parent;n&&n.add(this.intersectMesh),t.dispose()}return e.aerialObserverMinHeight!==void 0&&this.aerialObserverMinHeight!==e.aerialObserverMinHeight&&(this.aerialObserverMinHeight=e.aerialObserverMinHeight),!0}destroy(){super.destroy(),this.intersectMesh&&(this.helper.remove(this.intersectMesh),this.intersectMesh.dispose()),this.panState=void 0}isReady(){return this.panState||this.pinchState?!1:super.isReady()}calculateMovingDuration(e,t){switch(typeof e){case`function`:return e(t,this.moveSpeed);case`number`:return e;case`string`:return Number(e);default:return U(t,2,5)/this.moveSpeed*1e3}}hideIntersectMesh(){this.intersectMesh.visible=!1,this.needsRender=!0}coordinatesForOffset(e){let t=this.cameraMotion.value.fov,n=this.camera.aspect,r=this.renderer.getSize(new l.Vector2);return{longitude:2*e.x/(r.x*this.viewport.width)*t/95*n,latitude:-2*e.y/(r.y*this.viewport.height)*t/95}}cameraBounce(){let{longitude:e,latitude:t,fov:n}=this.cameraMotion.value,r=[{progress:0,value:{longitude:e,latitude:t,fov:n}},{progress:.5,value:{longitude:e,latitude:t,fov:n*.98}},{progress:1,value:{longitude:e,latitude:t,fov:n}}];this.cameraMotion.setKeyframes(r,500).catch(q)}requestMomentumMovement(e,t,n,r){if(this.inMomentumMovement===null)return;r=Math.max(r,1);let i=Object.assign({},n),a={longitude:0,latitude:0};for(let e=0;e<r;e++)i.longitude*=.996,i.latitude*=.996*.99,a.longitude+=i.longitude,a.latitude+=i.latitude;let o=this.cameraMotion.value.fov,s=ma(this.cameraMotion.value.longitude+a.longitude),c=U(typeof this.minLatitude==`function`?this.minLatitude(o):this.minLatitude,-Math.PI/2,Math.PI/2),l=U(typeof this.maxLatitude==`function`?this.maxLatitude(o):this.maxLatitude,-Math.PI/2,Math.PI/2),u=U(this.cameraMotion.value.latitude+a.latitude,c,l),d=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:s,latitude:u,fov:o,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance}),f=!(i.longitude>1e-4||i.longitude<-1e-4||i.latitude>1e-4||i.latitude<-1e-4),p=$(`gesture.momentum`,Object.assign(Object.assign({},e),{isFirst:t,isFinal:f,state:d}));if(this.emit(`gesture.fire`,p),this.inMomentumMovement.event=p,this.emit(`gesture.momentum`,p),e.defaultPrevented){this.inMomentumMovement=null;return}this.inMomentumMovement&&(this.cameraMotion.set({longitude:s,latitude:u},0).catch(q),f?this.inMomentumMovement=null:nu.shared.add((t,n)=>{this.requestMomentumMovement(e,!1,i,n)},!0))}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=this.panState,n=e.pointers.length;if(e.isFinal?this.panState=void 0:this.panState={pointerLength:n,x:e.center.x,y:e.center.y},t===void 0||t.pointerLength!==n)return;let r={x:e.center.x-t.x,y:e.center.y-t.y},i=this.coordinatesForOffset(r),a=ma(this.cameraMotion.value.longitude+i.longitude),o=this.cameraMotion.value.fov,s=U(typeof this.minLatitude==`function`?this.minLatitude(o):this.minLatitude,-Math.PI/2,Math.PI/2),c=U(typeof this.maxLatitude==`function`?this.maxLatitude(o):this.maxLatitude,-Math.PI/2,Math.PI/2),l=U(this.cameraMotion.value.latitude+i.latitude,s,c);this.camera.aspect<1&&Math.abs(e.overallVelocityX)>.2&&Math.atan2(Math.abs(e.overallVelocityY),Math.abs(e.overallVelocityX))<Math.PI/6.923&&(l=this.cameraMotion.value.latitude);let u=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:a,latitude:l,fov:o,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance});if(e.state=u,this.emit(`gesture.pan`,e),e.defaultPrevented)return;let d={longitude:u.longitude,latitude:u.latitude,fov:u.fov};if(this.cameraMotion.set(d,0).catch(q),e.isFinal){let t=e.velocityX,n=e.velocityY*.6;Math.abs(n)>.5&&Math.abs(t)<.5&&(t=0),this.inMomentumMovement={uuid:Ft()},this.requestMomentumMovement(e,!0,this.coordinatesForOffset({x:t,y:n}),0)}}onPinchGesture(e){var t;this.userAction=e.userAction,this.stopMomentumMovement();let n=(t=this.pinchState)==null?void 0:t.fov,r=e.scale;if(e.isFirst){this.pinchState={x:e.center.x,y:e.center.y,fov:this.cameraMotion.value.fov};return}if(e.isFinal&&(this.pinchState=void 0),n===void 0)return;let i=U(n/r,this.minFov,this.maxFov),a=U(typeof this.minLatitude==`function`?this.minLatitude(i):this.minLatitude,-Math.PI/2,Math.PI/2),o=U(typeof this.maxLatitude==`function`?this.maxLatitude(i):this.maxLatitude,-Math.PI/2,Math.PI/2),s=U(this.cameraMotion.value.latitude,a,o);e.state.fov=i,e.state.latitude=s,this.emit(`gesture.pinch`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:i,latitude:s},0).catch(q),e.type=`gesture.pan`,this.onPanGesture(e))}onMouseWheel(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=U(this.cameraMotion.value.fov-e.center.delta,this.minFov,this.maxFov),n=U(typeof this.minLatitude==`function`?this.minLatitude(t):this.minLatitude,-Math.PI/2,Math.PI/2),r=U(typeof this.maxLatitude==`function`?this.maxLatitude(t):this.maxLatitude,-Math.PI/2,Math.PI/2),i=U(this.cameraMotion.value.latitude,n,r);e.state.fov=t,e.state.latitude=i,this.emit(`gesture.mousewheel`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:t,latitude:i},0).catch(q),this.onMouseMove(e))}onMouseMove(e){var t,n;if(!this.intersectMesh.parent||this.panState||(this.emit(`gesture.mousemove`,e),e.defaultPrevented))return;let r=e.center.raycaster;if(e.isFinal&&this.intersectMesh.parent){this.hideIntersectMesh();return}r.floorIndex=-1;let[i]=this.modelScene.intersectRaycaster(r),a=$(`intersect.update`,{raycaster:r,intersection:i==null?null:i,object:this.intersectMesh});if(this.emit(`intersect.update`,a),a.defaultPrevented){this.hideIntersectMesh();return}if(i){let e=(n=(t=i.face)==null?void 0:t.normal)==null?new l.Vector3().copy(r.ray.direction).multiplyScalar(-1):n,a=e.clone(),o=i.point.clone();this.intersectMesh.position.copy(o);let s=o.clone().add(a);if(this.intersectMesh.lookAt(s),Math.abs(e.y)>.99){let e=this.camera.position.clone().sub(o);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0}else this.hideIntersectMesh()}onDblTapGesture(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=this.cameraMotion.value.fov,n=2,r=this.works.getObserver(this.currentPano);if(r){let e=r.images.tiles;e&&e.length&&(n=Math.max(...e.map(e=>e.level)))}let i=Math.max(40-n*5,this.minFov,5),a=i-t<t-this.defaultFov?i:this.defaultFov;e.state.fov=a,this.emit(`gesture.dbltap`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:a},360).catch(q),this.hideIntersectMesh())}},zw=`data:video/mp4;base64,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`,Bw;function Vw(){return Bw||(Bw=new Promise(e=>{let t,n=document.createElement(`video`);n.muted=!0,n.src=zw,n.addEventListener(`timeupdate`,function r(){n.removeEventListener(`timeupdate`,r,!1),clearTimeout(t);let i=document.createElement(`canvas`);i.width=i.height=1;let a=i.getContext(`2d`);if(!a){e(!1);return}a.drawImage(n,0,0,1,1);let{data:o}=a.getImageData(0,0,1,1);o[3]>10?e(!0):e(!1)},!1),n.addEventListener(`canplay`,function e(){n.removeEventListener(`canplay`,e,!1),n.play()},!1),t=window.setTimeout(()=>e(!1),1e3)}))}var Hw=[`right`,`left`,`up`,`down`,`front`,`back`];function Uw(e,t,n,r){let i=new l.Box3;switch(e){case`up`:i.min.y=.5,i.max.y=.5,i.min.x=t-.5,i.max.x=t-.5+r,i.min.z=-n+.5-r,i.max.z=-n+.5;break;case`down`:i.min.y=-.5,i.max.y=-.5,i.min.x=t-.5,i.max.x=t-.5+r,i.min.z=n-.5,i.max.z=n-.5+r;break;case`left`:i.min.x=-.5,i.max.x=-.5,i.min.z=-t+.5-r,i.max.z=-t+.5,i.min.y=-n+.5-r,i.max.y=-n+.5;break;case`right`:i.min.x=.5,i.max.x=.5,i.min.z=t-.5,i.max.z=t-.5+r,i.min.y=-n+.5-r,i.max.y=-n+.5;break;case`front`:i.min.z=-.5,i.max.z=-.5,i.min.x=t-.5,i.max.x=t-.5+r,i.min.y=-n+.5-r,i.max.y=-n+.5;break;case`back`:i.min.z=.5,i.max.z=.5,i.min.x=-t+.5-r,i.max.x=-t+.5,i.min.y=-n+.5-r,i.max.y=-n+.5;break;default:break}return i.applyMatrix4(new l.Matrix4().makeRotationY(Math.PI))}var Ww=(e,t)=>{if(e.level>=t)return;let n=e.level+1,r=e.size/2,i=[new l.Vector2(e.position.x,e.position.y),new l.Vector2(e.position.x+r,e.position.y),new l.Vector2(e.position.x,e.position.y+r),new l.Vector2(e.position.x+r,e.position.y+r)];for(let a of i){let i={face:e.face,level:n,size:r,position:a,box:Uw(e.face,a.x,a.y,r),parent:e,children:[]};e.children.push(i),Ww(i,t)}};function Gw(e,t){let n={level:0,face:e,position:new l.Vector2(0,0),size:1,box:Uw(e,0,0,1),parent:null,children:[]};return Ww(n,t),n}function Kw(e){return{children:Hw.map(t=>Gw(t,e)),maxLevel:e}}function qw(e,t){for(let n of e.children)t(n)!==!1&&qw(n,t)}var Jw,Yw=new l.Vector3,Xw=new l.Quaternion,Zw=new l.Matrix4,Qw=new l.Matrix4,$w=new l.Matrix4,eT=new l.Matrix4,tT=new l.Matrix4,nT=new l.Quaternion,rT=new l.Matrix4,iT=0,aT=new l.Color,oT=(Jw=Math.SQRT1_2)==null?Math.sqrt(2):Jw,sT={up:new l.Quaternion(oT,0,0,oT),down:new l.Quaternion(-oT,0,0,oT),left:new l.Quaternion(0,oT,0,oT),right:new l.Quaternion(0,-oT,0,oT),front:new l.Quaternion(0,0,0,1),back:new l.Quaternion(0,1,0,0)},cT=(()=>{let e=new Float32Array([-.5,-.5,0,.5,-.5,0,-.5,.5,0,.5,.5,0]),t=new Float32Array([0,0,1,0,0,1,1,1]),n=new Uint32Array([0,1,2,1,3,2]),r=new l.BufferGeometry;return r.setAttribute(`position`,new l.BufferAttribute(e,3)),r.setAttribute(`uv`,new l.BufferAttribute(t,2)),r.setIndex(new l.BufferAttribute(n,1)),r.computeBoundingBox(),r})(),lT=null;function uT(){return lT||(lT=new l.DataTexture(new Uint8Array([255,255,255,255]),1,1),lT.needsUpdate=!0),lT}function dT(){return{enabled:(0,p.uniform)(0),maxDisplayBoost:(0,p.uniform)(1),gamma:(0,p.uniform)(Vt.gamma),minContentBoost:(0,p.uniform)(Vt.minContentBoost),maxContentBoost:(0,p.uniform)(Vt.maxContentBoost),hdrCapacityMin:(0,p.uniform)(Vt.hdrCapacityMin),hdrCapacityMax:(0,p.uniform)(Vt.hdrCapacityMax),offsetSdr:(0,p.uniform)(Vt.offsetSdr),offsetHdr:(0,p.uniform)(Vt.offsetHdr)}}function fT(e,t){let n=(0,p.vec3)((0,p.clamp)(e.r,(0,p.float)(0),(0,p.float)(1)),(0,p.clamp)(e.g,(0,p.float)(0),(0,p.float)(1)),(0,p.clamp)(e.b,(0,p.float)(0),(0,p.float)(1))),r=(0,p.float)(1).div((0,p.max)(t.gamma,(0,p.float)(1e-6))),i=(0,p.vec3)((0,p.pow)(n.r,r),(0,p.pow)(n.g,r),(0,p.pow)(n.b,r)),a=(0,p.log2)((0,p.max)(t.maxDisplayBoost,(0,p.float)(1))),o=(0,p.log2)((0,p.max)(t.hdrCapacityMin,(0,p.float)(1e-6))),s=(0,p.log2)((0,p.max)(t.hdrCapacityMax,(0,p.float)(1e-6))).sub(o),c=(0,p.clamp)(a.sub(o).div((0,p.max)(s,(0,p.float)(1e-6))),(0,p.float)(0),(0,p.float)(1)).mul((0,p.step)((0,p.float)(1e-6),s)),l=(0,p.log2)((0,p.max)(t.minContentBoost,(0,p.float)(1e-6))),u=(0,p.log2)((0,p.max)(t.maxContentBoost,(0,p.float)(1e-6))),d=(0,p.vec3)(l).add(i.mul((0,p.vec3)(u.sub(l)))).mul(c);return(0,p.vec3)((0,p.exp2)(d.x),(0,p.exp2)(d.y),(0,p.exp2)(d.z))}function pT(e,t,n){return(0,p.vec3)(e).add(n.offsetSdr).mul(t).sub(n.offsetHdr)}var mT=class extends l.NodeMaterial{constructor(e){super(),this.map=null,this.flipY=!0,this.level=-1,this._hdr=e,this._mapNode=(0,p.texture)(uT()),this._gainNode=(0,p.texture)(uT()),this.depthTest=!0,this.depthWrite=!1,this.transparent=!0,this.setupNode()}setupNode(){let e=(0,p.uv)(),t=(0,p.vec3)(e.x,e.y,0),n=(0,p.materialReference)(`opacity`,`float`),r=this._mapNode.sample(t.xy),i=fT(this._gainNode.sample(t.xy).rgb,this._hdr),a=pT(r.rgb,i,this._hdr),o=(0,p.vec4)((0,p.mix)(r.rgb,a,this._hdr.enabled),r.a.mul(n));this.outputNode=o}setMap(e){this.map=e,this._mapNode.value=e==null?uT():e}setGain(e){this._gainNode.value=e==null?uT():e}},hT=class extends l.Mesh{constructor(e,t,n,r,i){super(cT,n),this.disposed=!1,this.releaseMaterial=r,this.releaseTexture=i,e.box.getCenter(this.position),this.quaternion.multiplyQuaternions(new l.Quaternion().setFromAxisAngle(new l.Vector3(0,1,0),-Math.PI),sT[e.face]),this.scale.setScalar(e.size),this.node=e,this.name=`tiling:tile`,this.material.level=e.level,this.material.visible=!1,this.material.polygonOffset=!0,this.material.polygonOffsetFactor=-e.level,this.material.polygonOffsetUnits=-e.level,this.activeTime=-1,this.frustumCulled=!1,this.renderOrder=e.level,this.appearDuration=0,this.appearMotion=new Y({appear:0}),t.then(([e,t])=>{this.colorTexture=e,this.gainmapTexture=t,this.disposed?(this.releaseTexture(e),this.releaseTexture(t),this.colorTexture=void 0,this.gainmapTexture=void 0):(this.material.setMap(e==null?null:e),this.material.setGain(t),this.material.visible=!0,this.appearMotion.set({appear:1},this.appearDuration*1e3).catch(q))}).catch(q)}updateTime(e){let t=!1;if(this.disposed)return t;this.appearMotion.ended===!1&&this.appearMotion.update(e),this.activeTime=e;let n=yh(this.appearMotion.value.appear);return this.material.opacity!==n&&(this.material.opacity=n,t=!0),this.material.transparent=!0,t}dispose(){this.disposed=!0,this.releaseTexture(this.colorTexture),this.releaseTexture(this.gainmapTexture),this.colorTexture=void 0,this.gainmapTexture=void 0,this.releaseMaterial(this.material)}},gT=wy(20,20,20);gT.applyMatrix4(new l.Matrix4().makeScale(-1,1,1));var _T=class extends l.NodeMaterial{constructor(e){super();let t=(0,p.normalize)(p.positionLocal),n=(0,p.vec3)(t.x,t.y,t.z);this._mapNode=(0,p.cubeTexture)(new l.CubeTexture,n),this._gainNode=(0,p.cubeTexture)(new l.CubeTexture,n);let r=fT(this._gainNode.rgb,e),i=pT(this._mapNode.rgb,r,e);this.fragmentNode=(0,p.vec4)((0,p.mix)(this._mapNode.rgb,i,e.enabled),1),this.depthTest=!0,this.depthWrite=!0,this.transparent=!1}get map(){return this._mapNode.value}set map(e){this._mapNode.value=e}set gainmap(e){this._gainNode.value=e==null?null:e}},vT=class extends l.Mesh{constructor(e){super(gT,new _T(e)),this.disposed=!1,this.frustumCulled=!1,this.renderOrder=9999}update(e,t,n){if(this.disposed){this.material.map=null,this.material.gainmap=null,this.visible=!1;return}this.material.map=t,n&&(this.material.gainmap=n),this.visible=t!==null}dispose(){this.disposed=!0,this.material.dispose()}},yT=64,bT=32,xT=class{constructor(e){var t;this.prevHDRKey=``,this.tileMaterialPool=[],this.tileTexturePool=new Map,this.forceRenderWhenNextUpdate=!0,this.releaseTileMaterial=e=>{if(e.setMap(null),e.setGain(null),e.opacity=0,e.visible=!1,this.disposed||this.tileMaterialPool.length>=yT){e.dispose();return}this.tileMaterialPool.push(e)},this.releaseTileTexture=e=>{var t,n;if(!e)return;let r=e.image,i=(t=r==null?void 0:r.width)==null?0:t,a=(n=r==null?void 0:r.height)==null?0:n;if(this.disposed||i===0||a===0){e.dispose();return}let o=`${i}x${a}:${e.colorSpace}`,s=this.tileTexturePool.get(o);if(s||(s=[],this.tileTexturePool.set(o,s)),s.length>=bT){e.dispose();return}s.push(e)},this.fiveId=e.fiveId,this.enableHDR=(t=e.enableHDR)==null?!1:t,this.disposed=!1,this.level=0,this.pedding=0,this.maxRequest=1,this.appearDuration=.5,this.maxCacheTile=48,this.imageOptions={},this.hdrUniforms=dT(),this.boundingMesh=new vT(this.hdrUniforms),this.boundingMesh.frustumCulled=!1,this.textureLoader=new mu,this.observer=null,this.tileTree=Kw(0),this.tileMeshes=new Map,this.frustum=new l.Frustum,this.scene=new l.Scene,this.camera=new l.PerspectiveCamera(90,1,.1,100),this.scene.add(this.boundingMesh),this.renderTarget=new l.RenderTarget(1,1,{depthBuffer:!0,stencilBuffer:!1,generateMipmaps:!1,magFilter:l.LinearFilter,minFilter:l.LinearFilter,wrapS:l.ClampToEdgeWrapping,wrapT:l.ClampToEdgeWrapping,type:e.enableHDR?l.HalfFloatType:l.UnsignedByteType}),this.renderTarget.texture.colorSpace=e.enableHDR?l.LinearSRGBColorSpace:l.SRGBColorSpace}dispose(){this.setObserver(null),this.renderTarget.dispose(),this.boundingMesh.dispose();for(let e of this.tileMaterialPool)e.dispose();this.tileMaterialPool.length=0,this.tileTexturePool.forEach(e=>{for(let t of e){let e=t.image;e&&typeof e.close==`function`&&e.close(),t.dispose()}}),this.tileTexturePool.clear(),this.disposed=!0}acquireTileMaterial(){return this.tileMaterialPool.pop()||new mT(this.hdrUniforms)}acquireTileTexture(e,t,n){let r=this.tileTexturePool.get(`${e}x${t}:${n}`);return r&&r.pop()||new l.Texture}adoptTileTexture(e){var t,n;if(!e)return;let r=e.image,i=(t=r==null?void 0:r.width)==null?0:t,a=(n=r==null?void 0:r.height)==null?0:n;if(i===0||a===0)return e;let o=this.acquireTileTexture(i,a,e.colorSpace),s=o.image;return s&&s!==r&&typeof s.close==`function`&&s.close(),o.image=e.image,o.flipY=e.flipY,o.wrapS=e.wrapS,o.wrapT=e.wrapT,o.minFilter=e.minFilter,o.magFilter=e.magFilter,o.colorSpace=e.colorSpace,o.generateMipmaps=e.generateMipmaps,o.repeat.copy(e.repeat),o.offset.copy(e.offset),o.center.copy(e.center),o.matrixAutoUpdate=e.matrixAutoUpdate,o.updateMatrix(),o.needsUpdate=!0,e.image=null,o}cleanup(){this.tileMeshes.forEach(e=>{e.dispose(),this.scene.remove(e)}),this.tileMeshes.clear(),this.forceRenderWhenNextUpdate=!0}setObserver(e){var t,n,r,i;if(this.disposed||this.observer===e)return;this.cleanup(),this.observer=e;let a=(i=(r=(n=(t=this.observer)==null?void 0:t.images.tiles)==null?void 0:n.slice().sort((e,t)=>t.level-e.level)[0])==null?void 0:r.level)==null?0:i;this.tileTree=Kw(a)}update(e){var t,n,r,i,a,o,s,c,u,d;let f=this.forceRenderWhenNextUpdate;if(this.disposed)return f;let{time:p,resolution:m,pixelRatio:h,renderer:g,cameraMatrix:_,cameraProjectionMatrix:v,panoMap:y,panoGainmap:b,panoMatrix:x,panoZoom:S,minLevel:C,level:w,useHDR:T,maxDisplayBoost:E}=e,D=b==null?void 0:b.cfg;this.boundingMesh.update(p,y,b==null?void 0:b.map),this.hdrUniforms.enabled.value=+!!T,this.hdrUniforms.maxDisplayBoost.value=E==null?1:E,this.hdrUniforms.gamma.value=(t=D==null?void 0:D.gamma)==null?Vt.gamma:t,this.hdrUniforms.minContentBoost.value=(n=D==null?void 0:D.minContentBoost)==null?Vt.minContentBoost:n,this.hdrUniforms.maxContentBoost.value=(r=D==null?void 0:D.maxContentBoost)==null?Vt.maxContentBoost:r,this.hdrUniforms.hdrCapacityMin.value=(i=D==null?void 0:D.hdrCapacityMin)==null?Vt.hdrCapacityMin:i,this.hdrUniforms.hdrCapacityMax.value=(a=D==null?void 0:D.hdrCapacityMax)==null?Vt.hdrCapacityMax:a,this.hdrUniforms.offsetSdr.value=(o=D==null?void 0:D.offsetSdr)==null?Vt.offsetSdr:o,this.hdrUniforms.offsetHdr.value=(s=D==null?void 0:D.offsetHdr)==null?Vt.offsetHdr:s;let O=[this.hdrUniforms.enabled.value,this.hdrUniforms.maxDisplayBoost.value,this.hdrUniforms.gamma.value,this.hdrUniforms.minContentBoost.value,this.hdrUniforms.maxContentBoost.value,this.hdrUniforms.hdrCapacityMin.value,this.hdrUniforms.hdrCapacityMax.value,this.hdrUniforms.offsetSdr.value,this.hdrUniforms.offsetHdr.value].join(`|`);if(O!==this.prevHDRKey&&(this.prevHDRKey=O,f=!0),this.observer===null)return(this.renderTarget.width!==1||this.renderTarget.height!==1)&&(this.renderTarget.setSize(1,1),f=!0),!1;this.level=U(w,0,this.tileTree.maxLevel);let k=Math.floor(m.width*h),A=Math.floor(m.height*h),j=Math.max(k,A),M=(d=(u=(c=g.backend.device)==null?void 0:c.limits)==null?void 0:u.maxTextureDimension2D)==null?8192:d;j>M&&(k=Math.floor(k/j*M),A=Math.floor(A/j*M)),(this.renderTarget.width!==k||this.renderTarget.height!==A)&&this.renderTarget.setSize(k,A),this.scene.matrix.equals(x)||(this.scene.matrix.copy(x),this.scene.matrixWorld.copy(this.scene.matrix),this.scene.matrix.decompose(this.scene.position,this.scene.quaternion,this.scene.scale),this.scene.matrixAutoUpdate=!1,f=!0);let N=Xw.setFromRotationMatrix(_),ee=Zw.compose(this.scene.position,N,this.scene.scale);this.camera.matrix.equals(ee)||(this.camera.matrix.copy(ee),this.camera.matrixWorld.copy(this.camera.matrix),this.camera.position.copy(this.scene.position),this.camera.quaternion.copy(N),this.camera.scale.copy(this.scene.scale),f=!0);let P=Qw.copy(v);P.elements[0]*=S,P.elements[5]*=S,this.camera.projectionMatrix.equals(P)||(this.camera.projectionMatrix.copy(P),this.camera.projectionMatrixInverse.copy(this.camera.projectionMatrix).invert(),f=!0),nT.copy(this.scene.quaternion).invert(),rT.makeRotationFromQuaternion(nT),$w.copy(this.camera.matrix),$w.setPosition(0,0,0),$w.premultiply(rT),eT.copy($w).invert(),tT.multiplyMatrices(this.camera.projectionMatrix,eT),this.frustum.setFromProjectionMatrix(tT);let F=this.frustum.planes[5].normal,I=[];w>=C&&qw(this.tileTree,e=>{if(!(e.level<C)){if(e.level>w||!this.frustum.intersectsBox(e.box))return!1;I.push(e)}});let L=new WeakMap;I.sort((e,t)=>{if(e.level!==t.level)return e.level-t.level;let n=L.get(e);n===void 0&&(n=e.box.getCenter(Yw).angleTo(F),L.set(e,n));let r=L.get(t);return r===void 0&&(r=t.box.getCenter(Yw).angleTo(F),L.set(t,r)),n-r});let te=new WeakSet,ne=this.observer.images.tiles;if(ne)for(let e of I){let t=ne.find(t=>t.level===e.level);if(!t)continue;te.add(e);let n=this.tileMeshes.get(e);if(n){n.appearDuration=this.appearDuration,n.updateTime(p)&&(f=!0);continue}if(this.pedding>=this.maxRequest)continue;let r=Math.pow(2,e.level)*e.position.y,i=Math.pow(2,e.level)*e.position.x,a=`${mb({panoIndex:this.observer.panoIndex,workCode:this.observer.work.workCode})}.${e.face}.${e.level}.${r}.${i}`,o=t.work.getURL(t[e.face]),s=this.enableHDR&&t.gainmap?t.work.getURL(t.gainmap[e.face]):void 0,c=t.size,u=this.imageOptions.transform,d=Object.assign(Object.assign({},pl(this.imageOptions,[`format`,`sharpen`,`forceUseExifOrientation`,`mappings`])),{key:`pano_tile.${a}`,size:t.scale>=1?void 0:c*e.size*t.scale,cut:e.size===1?void 0:[c*e.position.x,c*e.position.y,c*e.size,c*e.size]});e.level===1&&t.scale>=.5&&(d.format===`jpg`||/\.jpg$/.test(o))&&(d.size=void 0,d.quality||(d.quality=70)),e.size===1&&console.warn(`tile: ${d.key} should not appear.`),this.pedding++;let m=Promise.all([this.textureLoader.loadTexture(o,{imageURL:{transform:u,options:d},colorSpace:l.SRGBColorSpace,minFilter:l.LinearFilter,magFilter:l.LinearFilter,generateMipmaps:!1,fetcher:gy(this.fiveId,this.observer.work)}).then(e=>this.adoptTileTexture(e.body)),s?this.textureLoader.loadTexture(s,{imageURL:{transform:u,options:d},colorSpace:l.NoColorSpace,minFilter:l.LinearFilter,magFilter:l.LinearFilter,generateMipmaps:!1,fetcher:gy(this.fiveId,this.observer.work)}).then(e=>this.adoptTileTexture(e.body)):Promise.resolve(void 0)]);m.then(([e,t])=>Promise.all([e?Yh(e,g):Promise.resolve(),t?Yh(t,g):Promise.resolve()])).then(e=>(this.pedding--,e),e=>(this.pedding--,Promise.reject(e))),n=new hT(e,m,this.acquireTileMaterial(),this.releaseTileMaterial,this.releaseTileTexture),n.name=`tiling:tile-${a}`,n.visible=!1,n.appearDuration=this.appearDuration,this.tileMeshes.set(e,n),this.scene.add(n),n.updateTime(p),f=!0}let re=[],R=[];this.tileMeshes.forEach((e,t)=>{te.has(t)?re.push(e):R.push(e);let n=t.level>=C&&t.level<=w;e.visible!==n&&(e.visible=n,f=!0)});let ie=R.sort((e,t)=>t.activeTime-e.activeTime).slice(Math.max(0,this.maxCacheTile-re.length));for(let e of ie)this.tileMeshes.delete(e.node),this.scene.remove(e),e.dispose(),f=!0;if(f){let e=g.getRenderTarget(),t=g.getClearColor(aT),n=g.getClearAlpha(),r=g.autoClear,i=g.autoClearColor,a=g.autoClearDepth,o=g.autoClearStencil;g.autoClear=!0,g.autoClearColor=!0,g.autoClearDepth=!0,g.autoClearStencil=!0,g.setRenderTarget(this.renderTarget),g.setClearColor(new l.Color(0,0,0),iT),g.render(this.scene,this.camera),g.setRenderTarget(e),g.setClearColor(t,n),g.autoClear=r,g.autoClearColor=i,g.autoClearDepth=a,g.autoClearStencil=o}return this.forceRenderWhenNextUpdate=!1,f}},ST=new l.Matrix4().makeRotationAxis(new l.Vector3(0,1,0),Math.PI),CT=new l.Matrix4,wT=(0,p.float)(-1),TT=(0,p.vec2)(.5,.5),ET=wy(2,2,2);ET.applyMatrix4(new l.Matrix4().makeScale(-1,1,1));function DT(){let e={size:(0,p.uniform)(new l.Vector2),mapMatrix:(0,p.uniform)(new l.Matrix4),panoMatrix:(0,p.uniform)(new l.Matrix4),alpha:(0,p.uniform)(1),map:(0,p.texture)(new l.Texture)},t=p.positionWorld.sub(p.cameraPosition).normalize().toVar(`cameraToVertex`),n=e.panoMatrix.toMat3().transpose().mul(t).toVar(`panoDirection`),r=(0,p.vec3)(n.x.mul(wT),n.y,n.z),i=e.mapMatrix.mul((0,p.vec4)(r,1)).toVar(`mapCoods`),a=(0,p.vec2)((0,p.float)(.5).add(i.x.div(i.z).div(e.size.x)),(0,p.float)(.5).sub(i.y.div(i.z).div(e.size.y))).toVar(`videoUv`),o=(0,p.texture)(e.map,a),s=(0,p.float)(1).sub((0,p.step)((0,p.float)(0),i.z)).mul((0,p.float)(1).sub((0,p.step)((0,p.float)(.5),(0,p.abs)(a.x.sub(.5))))).mul((0,p.float)(1).sub((0,p.step)((0,p.float)(.5),(0,p.abs)(a.y.sub(.5))))),c=(0,p.float)(5).mul((0,p.float)(1).sub((0,p.distance)(a,TT).div(.55).clamp(0,1))).clamp(0,1),u=new l.NodeMaterial;return u.fragmentNode=(0,p.vec4)(o.rgb,s.mul(c).mul(e.alpha)),u.depthTest=!1,u.depthWrite=!1,u.fog=!1,u.blending=l.CustomBlending,u.blendSrc=l.SrcAlphaFactor,u.blendDst=l.OneMinusSrcAlphaFactor,u.blendSrcAlpha=l.OneFactor,u.blendDstAlpha=l.OneMinusSrcAlphaFactor,{material:u,u:e}}var OT=class{constructor(){let{material:e,u:t}=DT();this.material=e,this.u=t,this.object=new l.Mesh(ET,this.material),this.object.visible=!1,this.object.renderOrder=-1,this.object.frustumCulled=!1,this.object.name=`pano-video`,this.alphaMotion=new Y({alpha:0}),this.active=!1}setMaterial(e){e?(this.u.size.value.copy(e.size),this.u.mapMatrix.value.copy(CT.multiplyMatrices(ST,e.matrix).transpose()),this.u.panoMatrix.value.copy(e.panoMatrix),e.map.colorSpace=l.SRGBColorSpace,this.u.map.value=e.map,this.alphaMotion.set({alpha:e.alpha},500).catch(q)):(this.u.size.value.setScalar(0),this.u.mapMatrix.value.identity(),this.u.panoMatrix.value.identity(),this.u.map.value=null,this.u.alpha.value=0,this.alphaMotion.set({alpha:0},0).catch(q));let t=e!==null;this.active!==t&&(this.active=t,this.object.visible=t)}updateTime(e){this.alphaMotion.ended||(this.alphaMotion.update(e),this.u.alpha.value=this.alphaMotion.value.alpha)}dispose(){this.material.dispose()}},kT=new l.Color(0,0,0),AT=new l.Color;function jT(e){let t=e.mul(256*256*256).fract(),n=e.mul(256*256).fract().sub(t.mul(1/256)),r=e.mul(256).fract().sub(n.mul(1/256));return(0,p.vec4)(t,n,r,e.sub(r.mul(1/256))).mul(256/255)}var MT=(0,p.uniform)(0),NT=jT((0,p.clamp)((0,p.length)(p.positionWorld.sub(p.cameraPosition)).div(MT),0,1)),PT=new l.NodeMaterial;PT.fragmentNode=NT,PT.fog=!1;function FT(e,t,n,r=1e3){MT.value=r,e.getClearColor(AT);let i=e.getClearAlpha(),a=t.overrideMaterial;t.overrideMaterial=PT,e.setClearColor(kT,0),n.update(e,t),e.setClearColor(AT,i),t.overrideMaterial=a}function IT(e){if(e instanceof Error)return e;let t=typeof e;return Error(t&&t===`object`?JSON.stringify(e):e)}var LT=vh,RT=new l.Raycaster,zT=new l.Vector3,BT=[new l.Vector3(0,0,0).multiplyScalar(.1),new l.Vector3(1,0,0).multiplyScalar(.1),new l.Vector3(-.5,0,-Math.sqrt(3)/2).multiplyScalar(.1),new l.Vector3(-.5,0,Math.sqrt(3)/2).multiplyScalar(.1)],VT=Object.assign(Object.assign({},Lw),{maxAccessibleDistance:5,panoTapTriggerRadius:.5,panoCircleMeshCreator:(e,t)=>e.position.distanceTo(e.standingPosition)>t.aerialObserverMinHeight?new OC:new bC,adjustPanoCircleMeshPositionBasedOnModel:!1,tileLevelForFov:((e,t)=>{var n;let r=e=>e/180*Math.PI,i=(n=Math.log2)==null?(e=>Math.log(e)*Math.LOG2E):n,a=t.height/2/Math.tan(r(e/2))*Math.tan(r(45))*2,o=Math.max(i(a/512),0);return o<2.3&&o>.1&&(o=1),o=o%1>.75?Math.ceil(o):Math.floor(o),o}),tileAppearDuration:.5,tileMaxRequest:3,flyEffectUseDepthBuffer:!1}),HT=class e extends Rw{static parseArgs(t){var n,r,i,a,o,s,c,l;if(t instanceof e)return t;let u=super.parseArgs(t);return Object.assign(Object.assign({},u),{maxAccessibleDistance:(n=t.maxAccessibleDistance)==null?VT.maxAccessibleDistance:n,panoTapTriggerRadius:(r=t.panoTapTriggerRadius)==null?VT.panoTapTriggerRadius:r,panoCircleMeshCreator:(i=t.panoCircleMeshCreator)==null?VT.panoCircleMeshCreator:i,adjustPanoCircleMeshPositionBasedOnModel:(a=t.adjustPanoCircleMeshPositionBasedOnModel)==null?VT.adjustPanoCircleMeshPositionBasedOnModel:a,tileLevelForFov:(o=t.tileLevelForFov)==null?VT.tileLevelForFov:o,tileAppearDuration:(s=t.tileAppearDuration)==null?VT.tileAppearDuration:s,tileMaxRequest:(c=t.tileMaxRequest)==null?VT.tileMaxRequest:c,flyEffectUseDepthBuffer:(l=t.flyEffectUseDepthBuffer)==null?VT.flyEffectUseDepthBuffer:l})}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`Panorama`})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Panorama`,this.initAnimationed=!1,this.maxAccessibleDistance=n.maxAccessibleDistance,this.panoTapTriggerRadius=n.panoTapTriggerRadius,this.panoCircleMeshCreator=n.panoCircleMeshCreator,this.adjustPanoCircleMeshPositionBasedOnModel=n.adjustPanoCircleMeshPositionBasedOnModel,this.tileLevelForFov=n.tileLevelForFov,this.tileAppearDuration=n.tileAppearDuration,this.tileMaxRequest=n.tileMaxRequest,this.flyEffectUseDepthBuffer=n.flyEffectUseDepthBuffer,this.adjustPanoCircleMeshPositionFix=new Map;let{pano0:r,pano1:i}=this.modelScene.parameter.resolveValue();r&&(i==null?void 0:i.map)!==r.map&&(this.modelScene.parameter.set({pano0:i}),r.map.dispose());let a=new Set;r&&a.add(r),i&&a.add(i),this.panoMeshes=new Map,this.locationMotion=new Y({count:0,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Y({modelAlpha:this.modelScene.parameter.resolveValue().modelAlpha}),this.perspToOrthoMotion=new Y({perspToOrtho:this.camera.perspToOrtho.x}),this.panoResources={},this.panoResources[this.locationMotion.keyframes[0].key=this.locationMotion.keyframes[1].key=Ft()]={panoId:mb(this.currentPano),panoPicture:this.modelScene.parameter.resolveValue().pano1,position:this.camera.pose.offset.clone(),effect:`fly`,effectEasing:LT,fixCameraTransform:new l.Matrix4},this.panoPictureObserverMap=new WeakMap,this.textureLoader=new mu,this.tiling=new xT({fiveId:this.fiveId,enableHDR:this.enableHDR}),this.panoVideo=new OT,this.scene.add(this.panoVideo.object),this.accessibleObserverFloorCheckCount=0}get tileLevel(){return this.tiling.level}updateConfiguration(e){return super.updateConfiguration(e)===!1?!1:(e.maxAccessibleDistance!==void 0&&this.maxAccessibleDistance!==e.maxAccessibleDistance&&(this.maxAccessibleDistance=e.maxAccessibleDistance),e.panoTapTriggerRadius!==void 0&&this.panoTapTriggerRadius!==e.panoTapTriggerRadius&&(this.panoTapTriggerRadius=e.panoTapTriggerRadius),e.panoCircleMeshCreator!==void 0&&this.panoCircleMeshCreator!==e.panoCircleMeshCreator&&(this.panoCircleMeshCreator=e.panoCircleMeshCreator,this.panoMeshes&&(this.panoMeshes.forEach(e=>{this.helper.remove(e),e.dispose()}),this.panoMeshes.clear())),e.tileLevelForFov!==void 0&&this.tileLevelForFov!==e.tileLevelForFov&&(this.tileLevelForFov=e.tileLevelForFov),e.tileMaxRequest!==void 0&&this.tileMaxRequest!==e.tileMaxRequest&&(this.tileMaxRequest=e.tileMaxRequest),e.flyEffectUseDepthBuffer!==void 0&&this.flyEffectUseDepthBuffer!==e.flyEffectUseDepthBuffer&&(this.flyEffectUseDepthBuffer=e.flyEffectUseDepthBuffer),e.adjustPanoCircleMeshPositionBasedOnModel!==void 0&&this.adjustPanoCircleMeshPositionBasedOnModel!==e.adjustPanoCircleMeshPositionBasedOnModel&&(this.adjustPanoCircleMeshPositionBasedOnModel=e.adjustPanoCircleMeshPositionBasedOnModel,this.adjustPanoCircleMeshPositionBasedOnModel||this.adjustPanoCircleMeshPositionFix.clear()),!0)}destroy(){super.destroy(),this.tiling.dispose(),this.modelScene.parameter.set({refinedScreen:null,pano0Depth:null,pano1Depth:null}),this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0),this.locationMotion.dispose(),this.pendingTextureTask=void 0,this.panoMeshes&&(this.panoMeshes.forEach(e=>{this.helper.remove(e),e.dispose()}),this.panoMeshes.clear());let e=this.videoTexture.image;e.pause(),e.oncanplay=q,e.ontimeupdate=q,this.scene.remove(this.panoVideo.object),this.panoVideo.setMaterial(null),this.panoVideo.dispose();let{pano0:t,pano1:n}=this.modelScene.parameter.resolveValue();for(let e of Object.keys(this.panoResources)){let r=this.panoResources[e];if(r.panoPicture){let e=r.panoPicture.map;e&&e!==(t==null?void 0:t.map)&&e!==(n==null?void 0:n.map)&&(e.dispose(),r.panoPicture=null)}delete this.panoResources[e]}}isReady(){return this.locationMotion.ended===!0?super.isReady():!1}isTileReady(){let e=this.tiling.pedding<=0;return this.initAnimationed&&e}updateWork(t,n,r,i){this.userAction=i,this.works=t;let a=e.initAnimationEndState(Object.assign(Object.assign({},this),{initial:{currentState:Object.assign(Object.assign({},this.currentPano),this.camera.pose),duration:r.duration,effect:r.effect,state:n,userAction:i}}));return(a.workCode!==this.currentPano.workCode||a.panoIndex!==this.currentPano.panoIndex||a.longitude!==this.cameraMotion.value.longitude||a.latitude!==this.cameraMotion.value.latitude||a.fov!==this.cameraMotion.value.fov)&&(this.initAnimationed=!1,this.moveToPano({workCode:a.workCode,panoIndex:a.panoIndex},{effect:r.effect,duration:r.duration,longitude:a.longitude,latitude:a.latitude,fov:a.fov,moveEndCallback:()=>{this.initAnimationed=!0},moveCancelCallback:()=>{this.initAnimationed=!0}},i)),!0}updateModel(e){this.modelScene=e,this.hideIntersectMesh()}updateTime(e,t,...n){var r,i,a,o,s,c;if(this.destroyed)return;let u={},d={},f=this.camera.getDirection(new l.Vector3),p=this.locationMotion.keyframes[0],m=this.locationMotion.keyframes[this.locationMotion.keyframes.length-1],[h,g]=this.locationMotion.getKeyFrameSegment(e),_=this.panoResourceFromLocationMotionKeyframe(h),v=this.panoResourceFromLocationMotionKeyframe(g),y=this.panoResourceFromLocationMotionKeyframe(p),b=this.panoResourceFromLocationMotionKeyframe(m),x=!1;if(this.cameraMotion.ended===!1&&(this.cameraMotion.update(e),d.longitude=this.cameraMotion.value.longitude,d.latitude=this.cameraMotion.value.latitude,d.fov=this.cameraMotion.value.fov),this.modelAlphaMotion.ended===!1&&(this.modelAlphaMotion.update(e),u.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.perspToOrthoMotion.ended===!1&&(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(U(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended===!1){this.locationMotion.update(e);let t=this.locationMotion.value.count-g.value.count+1,n=new l.Vector3().copy(_.position),a=new l.Vector3().copy(v.position);if(u.progress=v.effectEasing(t),t>=.01&&t<=.99&&(u.progress=U(v.effectEasing(t),.01,.99)),v.panoPicture&&(t<1?_.panoPicture&&(u.pano0=_.panoPicture):u.pano0=v.panoPicture,u.pano1=v.panoPicture),v.effect===`montage`?u.transition=`BLACK`:v.effect===`spread`?u.transition=`SPREAD`:u.transition=`FADE`,v.effect===`zoomin`||v.effect===`zoomout`?u.progress=Math.pow(t,3):v.effect===`model`&&this.camera.pose.distance<.01&&(u.modelAlpha=1-Math.pow(U(Math.abs(t-.5)*2,0,1),4)),t<1&&v.effect!==`fly`&&v.effect!==`model`){if(u.pano0&&_.panoPicture){let e={panoId:u.pano0.panoId,map:u.pano0.map,mapHistogram:u.pano0.mapHistogram,mapSize:u.pano0.mapSize,zoom:u.pano0.zoom,matrix:_.panoPicture.matrix.clone().premultiply(_.fixCameraTransform).setPosition(v.position),gainmap:u.pano0.gainmap?{map:u.pano0.gainmap.map,cfg:Object.assign({},u.pano0.gainmap.cfg)}:void 0},t=this.panoPictureObserverMap.get(u.pano0);t&&this.panoPictureObserverMap.set(e,t),u.pano0=e}n.copy(a),x=!0}d.distance=this.locationMotion.value.distance,d.offset=new l.Vector3(n.x+(a.x-n.x)*t,n.y+(a.y-n.y)*t,n.z+(a.z-n.z)*t);let o=[],s=[];for(let e of this.locationMotion.keyframes){let{key:t,progress:n}=e;t!==void 0&&(o.push(t),n>this.locationMotion.progress&&s.push(t))}for(let e of Object.keys(this.panoResources)){if(s.indexOf(e)>=0)continue;let t=this.panoResources[e];if(t.panoPicture){let e=t.panoPicture.map;if(e){if(e===((r=u.pano0)==null?void 0:r.map)||e===((i=u.pano1)==null?void 0:i.map))continue;e.dispose(),t.panoPicture=null}}o.indexOf(e)>=0||delete this.panoResources[e]}let c=hb(v.panoId);c!==this.currentPano&&(this.currentPano=c,this.accessibleObserverFloorCheckCount=0),this.emit(`pano.moving`,$(`pano.moving`,{userAction:this.userAction,prevPano:hb(y.panoId),state:Object.assign(Object.assign(Object.assign(Object.assign({},hb(b.panoId)),{mode:this.mode}),JC(this.camera.pose)),d),options:{},progress:this.locationMotion.progress,error:null}))}ZC(u)===!1&&this.modelScene.parameter.set(u),!this.modelScene.parameter.pano0&&this.modelScene.parameter.pano1&&this.modelScene.parameter.set(`pano0`,this.modelScene.parameter.pano1),ZC(d)===!1&&this.setCamera(d);let S=this.works.getObserver(this.currentPano),C=this.locationMotion.ended?this.getForwardObserverOrNot(this.camera):null,w=this.works.getObserver(_.panoId),T=this.works.getObserver(v.panoId);if(this.adjustPanoCircleMeshPositionBasedOnModel&&this.helper.visible&&S){let e=[],t=S.work.observers;for(let n of S.accessibleNodes){let r=t[n];r&&e.push(r)}let n=new Map;if(e.sort((e,t)=>{let r=n.get(e);r===void 0&&(r=e.standingPosition.distanceTo(S.standingPosition),n.set(e,r));let i=n.get(e);return i===void 0&&(i=t.standingPosition.distanceTo(S.standingPosition),n.set(t,i)),r-i}),e.length){this.accessibleObserverFloorCheckCount%=e.length;let t=e[this.accessibleObserverFloorCheckCount],n=this.modelScene.models.find(e=>e.work===(t==null?void 0:t.work));if(t&&n&&n.visible){let e=.3,r=.005,i=t.standingPosition.clone().applyMatrix4(t.work.transform),a=mb({panoIndex:t.panoIndex,workCode:t.work.workCode}),o=BT.map(t=>{RT.ray.origin.copy(i),RT.ray.origin.add(zT.copy(t).setY(e)),RT.ray.direction.set(0,-1,0),RT.firstHitOnly=!0,RT.floorIndex=-1;let[a]=n.intersectRaycaster(RT);return a&&a.distance-r<=e?new l.Vector3().copy(i).setY(a.point.y+r):i});o.sort((e,t)=>t.y-e.y);let s=o[Math.floor(o.length/2)],[c]=o.filter(e=>e.distanceTo(s)<=.05);if(c){let e=new l.Vector4(i.x,i.y,i.z,c.y-i.y),t=this.adjustPanoCircleMeshPositionFix.get(a);t&&!e.equals(t)&&(this.needsRender=!0),this.adjustPanoCircleMeshPositionFix.set(a,e)}}this.accessibleObserverFloorCheckCount++}}let E=new Map;if(w)for(let e of w.accessibleNodes){let t=w.work.observers[e];if(t){let e=mb({panoIndex:t.panoIndex,workCode:t.work.workCode});E.set(e,t)}}if(T)for(let e of T.accessibleNodes){let t=T.work.observers[e];if(t){let e=mb({panoIndex:t.panoIndex,workCode:t.work.workCode});E.set(e,t)}}if(this.panoMeshes.forEach((e,t)=>{E.get(t)?E.delete(t):(this.helper.remove(e),e.dispose(),this.panoMeshes.delete(t))}),E.forEach((e,t)=>{let n=this.panoCircleMeshCreator(e,{aerialObserverMinHeight:this.aerialObserverMinHeight});this.panoMeshes.set(t,n),this.helper.add(n),E.delete(t)}),this.panoMeshes.forEach((e,t)=>{let n=this.works.getObserver(t);if(n){let r=n.position.distanceTo(n.standingPosition)>this.aerialObserverMinHeight;if(r)e.position.copy(n.position).applyMatrix4(n.work.transform),e.scale.setScalar(18);else{e.position.copy(n.standingPosition).applyMatrix4(n.work.transform);let t=this.adjustPanoCircleMeshPositionFix.get(n.panoId);t&&(zT.set(t.x,t.y,t.z),zT.equals(e.position)&&(e.position.y+=t.w)),e.scale.setScalar(1.2)}let i=this.camera.position.clone().setY(e.position.y),a=new l.Vector3().copy(e.position).sub(i).normalize();if(t===mb(this.currentPano)){let t=U((.5-i.distanceTo(e.position))/.5,0,1);a.multiplyScalar(1-t).add(f.clone().multiplyScalar(t))}if(a.length()>0){let t=r?-Math.PI/2:0,n=Math.atan2(a.x,a.z);e.quaternion.setFromEuler(new l.Euler(t,n,0,`YXZ`))}}else e.visible=!1}),this.camera.pose.distance>.1||x)this.panoMeshes.forEach(n=>{n.setOpacity(0),n.setCurrent(!1),n.updateTime&&n.updateTime(e,t),n.visible=!1});else if(S){let n=S.work.observers,[,r]=em(S.accessibleNodes,e=>{let t=n[e];return!t||!t.active?1/0:S.standingPosition.distanceTo(t.standingPosition)},!0);r=U(r,3,1/0);let i=S.accessibleNodes.concat(S.panoIndex).map(e=>mb({panoIndex:e,workCode:S.work.workCode}));this.panoMeshes.forEach((n,a)=>{let o=this.works.getObserver(a),s=!1,c=1;if(i.indexOf(a)===-1)s=!1,c=0;else if(!o)s=!1,c=0;else if(!o.loadable&&!o.active)s=!1,c=0;else{let e=n.position.clone().project(this.camera);s=Math.abs(e.x)<1&&Math.abs(e.y)<1&&Math.abs(e.z)<1&&!n.loading&&n.progress===0&&C!==null&&mb({panoIndex:C.panoIndex,workCode:C.work.workCode})===a;let t=n.position.clone().setY(this.camera.position.y).distanceTo(this.camera.position);c=t<.01?0:U(r/t,.1,.85)}o&&o===T&&o.position.distanceTo(o.standingPosition)>this.aerialObserverMinHeight&&n.position.distanceTo(this.camera.position)<35&&(c=0),this.modelScene.parameter.resolveValue().modelAlpha>0&&(c=0),n.setCurrent(s),n.setOpacity(c),n.updateTime&&n.updateTime(e,t)})}{let e=(a=this.modelScene.parameter.progress)==null?1:a,t=Math.round(e),n=this.modelScene.parameter.pano0,r=this.modelScene.parameter.pano1,i=t===0?n:r,s;if(i&&(s=this.works.getObserver(i.panoId),s||(s=this.panoPictureObserverMap.get(i))),this.tiling.appearDuration=this.tileAppearDuration,this.tiling.maxRequest=e<(ou()?.6:.99)?0:this.tileMaxRequest,this.tiling.imageOptions=this.imageOptions,!s||!i||this.tileLevelForFov===!1||this.camera.perspToOrtho.x>0){this.tiling.setObserver(null);let e={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:null,panoGainmap:void 0,panoMatrix:new l.Matrix4,panoZoom:1,minLevel:0,level:0};this.tiling.update(e),this.modelScene.parameter.set(`refinedScreen`,null)}else{let e=Zl(i.mapSize),a=e+1,c=new l.Vector2().copy(this.camera.resolution).multiplyScalar(this.camera.pixelRatio),u=Math.floor(this.tileLevelForFov(this.camera.fov,c)),d=u>e?u:0;this.tiling.setObserver(s);let f={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:i.map,panoGainmap:i.gainmap,panoMatrix:i.matrix,panoZoom:i.zoom,minLevel:a,level:d,useHDR:this.modelScene.parameter.useHDR,maxDisplayBoost:this.modelScene.parameter.maxDisplayBoost},p=this.tiling.update(f),m={map:this.tiling.renderTarget.texture,matrixInverse:this.tiling.camera.matrixWorldInverse,projectionMatrix:this.tiling.camera.projectionMatrix,pano:t,opacity:(n==null?void 0:n.panoId)===(r==null?void 0:r.panoId)?1:bh(Math.abs(((o=this.modelScene.parameter.progress)==null?0:o)-.5)*2)},h=this.modelScene.parameter.refinedScreen;(p||m.pano!==(h==null?void 0:h.pano)||m.opacity!==(h==null?void 0:h.opacity))&&this.modelScene.parameter.set(`refinedScreen`,m)}}if(this.panoVideo.object.position.copy(this.camera.position),this.panoVideo.updateTime(e),S&&S.images.video&&(this.needsRender=!0),this.intersectMesh&&this.intersectMesh.parent&&S&&S.position.y-S.standingPosition.y>10){let e=U(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1);{let e=v.effect,{pano0:t,pano1:n}=this.modelScene.parameter;if(t&&n&&t!==n&&(e===`fly`||e===`model`)&&this.flyEffectUseDepthBuffer){if(((s=this.modelScene.parameter.pano0Depth)==null?void 0:s.panoId)!==t.panoId||((c=this.modelScene.parameter.pano1Depth)==null?void 0:c.panoId)!==n.panoId){this.pano0DepthCubeRenderTarget?this.pano0DepthCubeRenderTarget.width!==512&&this.pano0DepthCubeRenderTarget.setSize(512,512):this.pano0DepthCubeRenderTarget=new l.CubeRenderTarget(512,{minFilter:l.NearestFilter,magFilter:l.NearestFilter,generateMipmaps:!1}),this.pano1DepthCubeRenderTarget?this.pano1DepthCubeRenderTarget.width!==512&&this.pano1DepthCubeRenderTarget.setSize(512,512):this.pano1DepthCubeRenderTarget=new l.CubeRenderTarget(512,{minFilter:l.NearestFilter,magFilter:l.NearestFilter,generateMipmaps:!1});let e=new l.CubeCamera(this.camera.near,this.camera.far,this.pano0DepthCubeRenderTarget);e.matrix.copy(t.matrix),e.matrixWorld.copy(e.matrix),e.matrixAutoUpdate=!1,FT(this.renderer,this.modelScene,e,500);let r=new l.CubeCamera(this.camera.near,this.camera.far,this.pano1DepthCubeRenderTarget);r.matrix.copy(n.matrix),r.matrixWorld.copy(r.matrix),r.matrixAutoUpdate=!1,FT(this.renderer,this.modelScene,r,500),this.modelScene.parameter.set({pano0Depth:{panoId:t.panoId,map:this.pano0DepthCubeRenderTarget.texture,mapSize:this.pano0DepthCubeRenderTarget.width,maxDepth:500},pano1Depth:{panoId:n.panoId,map:this.pano1DepthCubeRenderTarget.texture,mapSize:this.pano1DepthCubeRenderTarget.width,maxDepth:500}})}}else this.modelScene.parameter.set({pano0Depth:null,pano1Depth:null}),this.flyEffectUseDepthBuffer||(this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0))}}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(K())[1],t=this.locationMotion.getKeyFrameSegment(K())[1],n=this.panoResourceFromLocationMotionKeyframe(t),r=this.works.getObserver(n.panoId);return{workCode:r?r.work.workCode:this.currentPano.workCode,panoIndex:r?r.panoIndex:this.currentPano.panoIndex,mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:r?r.position.clone().applyMatrix4(r.work.transform):this.camera.position.clone(),distance:this.locationMotion.value.distance}}moveToPano(e,t,n){var r,i,a;this.userAction=n,this.stopMomentumMovement();let o=mb(e),s=this.works.getObserver(e);if(!s)throw Error(`Invalid PanoId ${JSON.stringify(e)}`);let c=Jl(s.images.up),d=this.imageOptions.size;d===void 0&&s&&c&&(d=Number(c)),d===void 0&&(d=2048);let f=this.imageOptions.transform,p=Object.assign({key:`pano.${o}`},pl(this.imageOptions,[`format`,`size`,`quality`,`sharpen`,`forceUseExifOrientation`,`mappings`])),m={right:s.images.work.getURL(s.images.right),left:s.images.work.getURL(s.images.left),up:s.images.work.getURL(s.images.up),down:s.images.work.getURL(s.images.down),front:s.images.work.getURL(s.images.front),back:s.images.work.getURL(s.images.back)},h,g,_=this.enableHDR?s.images.gainmap:void 0;_&&(h={right:s.images.work.getURL(_.right),left:s.images.work.getURL(_.left),up:s.images.work.getURL(_.up),down:s.images.work.getURL(_.down),front:s.images.work.getURL(_.front),back:s.images.work.getURL(_.back)},g=s.images.work.getURL(_.cfg));let v=`pano:`+fb([m,h,p]);if(this.pendingTextureTask){if(this.pendingTextureTask.hash===v)return;{let e=this.pendingTextureTask.panoId;(r=this.panoMeshes.get(e))==null||r.setProgress(0),this.emit(`pano.texture.abort`,$(`pano.texture.abort`,{error:null,progress:0,meta:null,pano:{panoIndex:s.panoIndex,workCode:s.work.workCode}}))}}let y=`move-to-pano-`+o;this.pending.add(y);let b=UC(`pano.prepare`,{options:t,prevMode:this.mode,prevPano:this.currentPano,pano:e});if(this.emit(`pano.prepare`,b),b.defaultPrevented){this.pending.delete(y);return}b.options!==t&&Object.assign(t,b.options);let x=(i=t.effect)==null?`fly`:i,S=this.modelScene.parameter,C;if(S.pano0&&S.pano0.map.name===v?C=S.pano0:S.pano1&&S.pano1.map.name===v&&(C=S.pano1),C){let n={panoId:o,effect:x,effectEasing:(a=t.effectEasing)==null?LT:a,panoPicture:{panoId:C.panoId,map:C.map,mapHistogram:C.mapHistogram,mapSize:C.mapSize,matrix:s.matrix.clone().premultiply(s.work.transform),zoom:1,gainmap:C.gainmap?{map:C.gainmap.map,cfg:Object.assign({},C.gainmap.cfg)}:void 0},position:s.position.clone().applyMatrix4(s.work.transform),fixCameraTransform:new l.Matrix4};n.panoPicture&&this.panoPictureObserverMap.set(n.panoPicture,s),this.pendingTextureTask=void 0,Promise.resolve().then(()=>WC(b)).then(()=>{nu.shared.add(()=>{this.pending.delete(y),this.doMoveToPano(e,n,t)},!0,1)}).catch(n=>{var r;let i=IT(n),a=Object.assign(Object.assign(Object.assign({},e),{mode:this.mode}),JC(this.camera.pose));this.emit(`pano.error`,$(`pano.error`,{error:i,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:a})),this.emit(`pano.cancel`,$(`pano.cancel`,{error:i,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:a})),this.emit(`error`,i),t.moveCancelCallback&&t.moveCancelCallback(),this.pending.delete(y),this.pendingTextureTask=void 0,(r=this.panoMeshes.get(o))==null||r.setProgress(0)});return}this.pendingTextureTask={panoId:o,hash:v,onLoad:(n,r)=>(0,u.__awaiter)(this,void 0,void 0,function*(){var i,a;let c=n.body;if(this.destroyed)c.dispose();else{c.name=v;let n=Array.isArray(c.image)?c.image[0]:c.image,u=(i=n==null?void 0:n.width)==null?2048:i,{data:d}=yield pw(this.renderer,c,!0,Tx),f=new kx().formPixels(d),p={panoId:o,effect:x,effectEasing:(a=t.effectEasing)==null?LT:a,panoPicture:{panoId:o,map:c,mapSize:u,mapHistogram:new l.Vector4().fromArray(f.toArray()),matrix:s.matrix.clone().premultiply(s.work.transform),zoom:1,gainmap:r},position:s.position.clone().applyMatrix4(s.work.transform),fixCameraTransform:new l.Matrix4};p.panoPicture&&this.panoPictureObserverMap.set(p.panoPicture,s),this.doMoveToPano(e,p,t)}}),onError:n=>{let r=Object.assign(Object.assign(Object.assign({},e),{mode:this.mode}),JC(this.camera.pose));this.emit(`pano.error`,$(`pano.error`,{error:n,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:r})),this.emit(`pano.cancel`,$(`pano.cancel`,{error:n,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:r})),this.emit(`error`,n),t.moveCancelCallback&&t.moveCancelCallback()}};let w=this.panoMeshes.get(o);w&&w.tap&&w.tap();let T=this.textureLoader.loadCubeTexture(m,{imageURL:{transform:f,options:p},format:l.RGBAFormat,viaAjax:!0,fetcher:gy(this.fiveId,s.work)},void 0,void 0,t=>{var n,r;this.emit(`pano.texture.progress`,$(`pano.texture.progress`,{error:null,progress:t,meta:null,pano:e})),((n=this.pendingTextureTask)==null?void 0:n.hash)===v&&((r=this.panoMeshes.get(o))==null||r.setProgress(t))},this.renderer),E=g&&h?Promise.all([gy(this.fiveId,s.work).ajax(g,{responseType:`text`}).then(e=>Wt(JSON.parse(e.body))),this.textureLoader.loadCubeTexture(h,{imageURL:{transform:f,options:p},format:l.RGBAFormat,colorSpace:l.NoColorSpace,viaAjax:!0,fetcher:gy(this.fiveId,s.work)},void 0,void 0,void 0,this.renderer)]).then(([e,t])=>({config:e,map:t.body})):Promise.resolve(void 0),D=Promise.resolve().then(()=>WC(b)).then(()=>null).catch(e=>IT(e));Promise.all([T,E,D]).then(([t,n,r])=>{var i,a,s,c;if(this.pending.delete(y),r){t.body.dispose(),((i=this.pendingTextureTask)==null?void 0:i.hash)===v&&(this.pendingTextureTask.onError(r),this.pendingTextureTask=void 0,(a=this.panoMeshes.get(o))==null||a.setProgress(0));return}((s=this.pendingTextureTask)==null?void 0:s.hash)===v?(this.pendingTextureTask.onLoad(t,n?{map:n.map,cfg:n.config}:void 0),this.pendingTextureTask=void 0,(c=this.panoMeshes.get(o))==null||c.setProgress(0)):t.body.dispose(),this.emit(`pano.texture.success`,$(`pano.texture.success`,{error:null,progress:1,meta:t.meta,pano:e}))}).catch(t=>{var n,r;this.pending.delete(y),((n=this.pendingTextureTask)==null?void 0:n.hash)===v&&(this.pendingTextureTask.onError(t),this.pendingTextureTask=void 0,(r=this.panoMeshes.get(o))==null||r.setProgress(0)),this.emit(`pano.texture.error`,$(`pano.texture.error`,{error:t,progress:0,meta:null,pano:e})),this.emit(`error`,t)}),this.emit(`pano.texture.load`,$(`pano.texture.load`,{error:null,progress:0,meta:null,pano:e}))}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{duration:n,effect:r,userAction:i}=this.initial;this.userAction=i;let a=e.initAnimationEndState(this),o={workCode:a.workCode,panoIndex:a.panoIndex},s={modelAlpha:0},c={perspToOrtho:0},l=!1;this.moveToPano(o,{longitude:a.longitude,latitude:a.latitude,fov:a.fov,effect:r,duration:n,moveStartCallback:e=>{l=!0,this.perspToOrthoMotion.set(c,n).catch(q),this.modelAlphaMotion.setKeyframes([{progress:0,value:Object.assign({},this.modelAlphaMotion.value)},{progress:.6,value:Object.assign({},this.modelAlphaMotion.value)},{progress:1,value:s}],n).catch(q),this.emit(`initAnimation.start`,$(`initAnimation.start`,{state:e,userAction:this.userAction}))},moveEndCallback:e=>{this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:e,userAction:this.userAction})),this.initAnimationed=!0,t()},moveCancelCallback:()=>{let e=Object.assign(Object.assign(Object.assign({},o),{mode:this.mode}),JC(this.camera.pose));l===!1&&this.emit(`initAnimation.start`,$(`initAnimation.start`,{state:e,userAction:this.userAction})),this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:e,userAction:this.userAction})),this.initAnimationed=!0,t()}},i)})}panoResourceFromLocationMotionKeyframe(e){return this.panoResources[e.key]}locationMotionKeyframesLength(e){let t=0;for(let n=1;n<e.length;n++){let r=this.panoResourceFromLocationMotionKeyframe(e[n-1]).position,i=this.panoResourceFromLocationMotionKeyframe(e[n]).position,a=r.distanceTo(i)*(e[n].value.count-e[n-1].value.count);t+=a}return t}doMoveToPano(e,t,n={}){var r,i,a,o,s,c,u,d,f,p,m;let h=K(),g=Ft();this.panoResources[g]=t;let _,v,y;if(this.locationMotion.ended){let[e,n]=this.locationMotion.getKeyFrameSegment(h),i=this.locationMotion.value,a=((r=this.panoResourceFromLocationMotionKeyframe(n))==null?this.camera:r).position,o=t.position;_=Math.max(a.distanceTo(o),1),v=[{key:n.key,progress:0,value:Object.assign(Object.assign({},i),{count:0})},{key:g,progress:1,value:{distance:0,count:1}}],y=0}else{let[e,n]=this.locationMotion.getKeyFrameSegment(h),r=this.locationMotion.value,i=this.panoResourceFromLocationMotionKeyframe(e).position,a=this.panoResourceFromLocationMotionKeyframe(n).position,o=t.position,s=n.value.count-r.count,c=Math.max(i.distanceTo(a),1)*s;_=c+Math.max(a.distanceTo(o),1),v=[{key:e.key,progress:0,value:Object.assign({},r)},{key:n.key,progress:c/_,value:n.value},{key:g,progress:1,value:{count:n.value.count+1,distance:0}}];let l=this.locationMotionKeyframesLength(this.locationMotion.keyframes),u=this.locationMotionKeyframesLength(v);y=l===0||l===0?0:this.locationMotion.getProgressVelocity(h)*l/u}let b=t.effect===`instant`?0:this.calculateMovingDuration(n.duration,t.effect===`fly`||t.effect===`model`?_:0),x={longitude:n.longitude,latitude:n.latitude,fov:n.fov},S=Object.assign(Object.assign({},e),{mode:this.mode,longitude:(i=x.longitude)==null?this.camera.pose.longitude:i,latitude:(a=x.latitude)==null?this.camera.pose.latitude:a,fov:(o=x.fov)==null?this.camera.pose.fov:o,offset:t.position.clone(),distance:this.camera.pose.distance}),C=this.currentPano;if(this.emit(`pano.moveTo`,$(`pano.moveTo`,{options:n,prevPano:C,progress:0,state:S,userAction:this.userAction,error:null})),n.moveStartCallback&&n.moveStartCallback(S),this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement&&this.videoTexture.image.getAttribute(`src`)&&(this.videoTexture.image.pause(),this.videoTexture.image.removeAttribute(`uuid`),this.videoTexture.image.removeAttribute(`src`),this.videoTexture.image.oncanplay=q,this.videoTexture.needsUpdate=!0),this.panoVideo.setMaterial(null),t.effect===`fly`||t.effect===`model`)this.cameraMotion.set(x,b).catch(q);else{let e=ha({longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude}),n=ha({longitude:(s=x.longitude)==null?this.cameraMotion.value.longitude:s,latitude:(c=x.latitude)==null?this.cameraMotion.value.latitude:c}),r=new l.Object3D;r.lookAt(e);let i=new l.Matrix4().makeRotationFromQuaternion(r.quaternion);r.lookAt(n);let a=new l.Matrix4().makeRotationFromQuaternion(r.quaternion),o=i.clone().invert().premultiply(a),h=this.cameraMotion.value.fov,g=(u=x.fov)==null?this.cameraMotion.value.fov:u,_=1;t.effect===`zoomin`?_=1.5:t.effect===`zoomout`&&(_=.4);let y=U(g*_,1,170);for(let e=0;e<v.length-1;e++){let t=v[e].key;if(t){let e=this.panoResources[t];e&&(e.fixCameraTransform.copy(o),e.panoPicture&&(e.panoPicture.zoom=Math.tan(y/2/180*Math.PI)/Math.tan(h/2/180*Math.PI)))}}this.cameraMotion.setKeyframes([{progress:0,value:{longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude,fov:this.cameraMotion.value.fov}},{progress:0,value:{longitude:(d=x.longitude)==null?this.cameraMotion.value.longitude:d,latitude:(f=x.latitude)==null?this.cameraMotion.value.latitude:f,fov:y}},{progress:1,value:{longitude:(p=x.longitude)==null?this.cameraMotion.value.longitude:p,latitude:(m=x.latitude)==null?this.cameraMotion.value.latitude:m,fov:g}}],b).catch(q)}this.locationMotion.setKeyframes(v,b,y).then(()=>{for(let e of this.modelScene.children)e instanceof Fy&&e.show();let t=Object.assign(Object.assign({},e),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance});this.emit(`pano.arrived`,$(`pano.arrived`,{options:n,prevPano:C,progress:1,state:t,userAction:this.userAction,error:null})),n.moveEndCallback&&n.moveEndCallback(t);let r=this.works.getObserver(e);if(r&&r.images.video&&this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement){let e={map:this.videoTexture,size:r.images.video.size.clone(),matrix:r.images.video.matrix.clone(),panoMatrix:r.matrix.clone().premultiply(r.work.transform),alpha:1},t=Ft(),n=this.videoTexture.image;n.setAttribute(`uuid`,t),n.oncanplay=q,n.ontimeupdate=q,Vw().then(i=>{i&&r.images.video&&n.getAttribute(`uuid`)===t&&(n.oncanplay=()=>{n.oncanplay=q,n.play()},n.ontimeupdate=()=>{n.currentTime>.5&&(n.ontimeupdate=q,this.panoVideo.setMaterial(e))},n.src=r.images.video.source)}).catch((()=>{n.removeAttribute(`uuid`)}))}else{let e=this.videoTexture.image;e.removeAttribute(`uuid`),e.oncanplay=q,e.ontimeupdate=q}},()=>{this.emit(`pano.cancel`,$(`pano.cancel`,{options:n,prevPano:C,progress:0,state:S,userAction:this.userAction,error:null})),n.moveCancelCallback&&n.moveCancelCallback()})}getForwardObserverOrNot(e,t){let n=this.works.getObserver(this.currentPano);if(!n)return null;let r=t==null?new l.Raycaster(e.position.clone(),e.getWorldDirection(new l.Vector3)):t;r.params.Points={threshold:.1},r.firstHitOnly=!0,r.floorIndex=-1;let i=n.standingPosition.clone().applyMatrix4(n.work.transform);if(n.position.clone().applyMatrix4(n.work.transform).distanceTo(r.ray.origin)>1){let e=new l.Raycaster(r.ray.origin,new l.Vector3(0,-1,0));e.firstHitOnly=r.firstHitOnly,e.floorIndex=r.floorIndex;let[t]=this.modelScene.intersectRaycaster(e);t&&t.distance<=2?i.copy(t.point):i.copy(r.ray.origin).add(new l.Vector3(0,-1.5,0))}let[a]=this.modelScene.intersectRaycaster(r),o=(a?a.point:r.ray.origin.clone().add(r.ray.direction.clone().normalize().multiplyScalar(3))).clone().sub(i).normalize();if(o.length()===0)return null;let s=n.work.observers,c=n.accessibleNodes.filter(t=>{if(t===this.currentPano.panoIndex&&n.work.workCode===this.currentPano.workCode)return!1;let r=s[t];if(!r)return!1;let i=r.standingPosition.clone().applyMatrix4(r.work.transform).project(e);return Math.abs(i.z)>1||Math.abs(i.x)>1||Math.abs(i.y)>1?!1:r.loadable||r.active}),u=new Map,d=c.slice().sort((e,t)=>{let n=s[e],r=u.get(n);r===void 0&&(r=zT.copy(n.standingPosition).applyMatrix4(n.work.transform).distanceTo(i),u.set(n,r));let a=s[t],o=u.get(a);return o===void 0&&(o=zT.copy(a.standingPosition).applyMatrix4(a.work.transform).distanceTo(i),u.set(a,o)),r-o});u.clear();for(let e of[Math.PI/8,Math.PI/6,Math.PI/4,Math.PI/3])for(let t of d){let n=s[t];if(n){let t=zT.copy(n.standingPosition).applyMatrix4(n.work.transform).sub(i);if(t&&t.length()!==0&&o.angleTo(t)<e)return n}}let f=null;if(t){let n=t.ray.intersectBox(this.modelScene.boundingBox,zT);n&&(n.project(e),Math.abs(n.z)<=1&&(f=n.clone()))}else f=new l.Vector3(0,0,0);if(f){let t=n.accessibleNodes.filter(t=>{if(t===this.currentPano.panoIndex&&n.work.workCode===this.currentPano.workCode)return!1;let r=s[t];if(!r)return!1;let i=r.position.clone().applyMatrix4(r.work.transform).project(e);return Math.abs(i.z)>1||Math.abs(i.x)>1||Math.abs(i.y)>1?!1:r.loadable||r.active}),r=new Map,i=t.slice().sort((t,n)=>{let i=s[t],a=r.get(i);a===void 0&&(a=zT.copy(i.position).applyMatrix4(i.work.transform).distanceTo(e.position),r.set(i,a));let o=s[n],c=r.get(o);return c===void 0&&(c=zT.copy(o.position).applyMatrix4(o.work.transform).distanceTo(e.position),r.set(o,c)),a-c});r.clear();for(let t of i){let n=s[t];if(n){let t=zT.copy(n.position).applyMatrix4(n.work.transform);if(t.project(e),Math.abs(t.z)>1)continue;if(Math.pow(f.x-t.x,2)+Math.pow(f.y-t.y,2)<Math.pow(.4,2))return n}}}return null}onTapGesture(e){var t;if(this.userAction=e.userAction,this.stopMomentumMovement(),!this.initAnimationed)return;let n=e.center.raycaster;n.floorIndex=-1;let r=this.camera.getDirection(new l.Vector3).setY(0),i=null,a=this.works.getObserver(this.currentPano);if(!a)return;let o=a.work.observers,s=a.accessibleNodes.filter(e=>{if(e===this.currentPano.panoIndex&&a.work.workCode===this.currentPano.workCode)return!1;let t=o[e];return!t||zT.copy(t.position).applyMatrix4(t.work.transform).distanceTo(this.camera.position)>this.maxAccessibleDistance?!1:t.loadable||t.active}),[c]=this.modelScene.intersectRaycaster(n);if(c){let[e,n]=em(s,e=>{let t=o[e];return t?zT.copy(t.standingPosition).applyMatrix4(t.work.transform).distanceTo(c.point):1/0},!0);typeof e==`number`&&n<this.panoTapTriggerRadius&&(i=(t=o[e])==null?null:t)}if(i||(i=this.getForwardObserverOrNot(this.camera,n)),i&&i.panoId===mb(this.currentPano)&&(i=null),i&&!this.locationMotion.ended){for(let e of this.locationMotion.keyframes)if(this.panoResourceFromLocationMotionKeyframe(e).panoId===i.panoId){i=null;break}}if(!i)this.emit(`gesture.tap`,e),e.defaultPrevented||this.locationMotion.ended===!0&&this.cameraBounce();else{let t={},n=Math.PI/6,o=Math.PI/12,s=i.position.clone().applyMatrix4(i.work.transform).setY(0).sub(a.position.clone().applyMatrix4(i.work.transform).setY(0)).normalize(),c=[],l=[],u=[],d=i.work.observers;for(let e of i.accessibleNodes){if(i.panoIndex===e||e===this.currentPano.panoIndex&&i.work.workCode===this.currentPano.workCode)continue;let t=d[e];if(!t)continue;let r=t.position.clone().applyMatrix4(t.work.transform).sub(i.position.clone().applyMatrix4(i.work.transform)).setY(0).normalize();s.angleTo(r)<n&&u.push(r)}let[f]=(u.length>0?u:[...c,...l]).slice().sort((e,t)=>e.angleTo(s)-t.angleTo(s));if(f&&f.angleTo(r)>o&&(t.longitude=Math.atan2(-f.x,-f.z)),this.cameraMotion.value.latitude<-Math.PI/4){let n=e.state.fov;t.latitude=U(0,U(typeof this.minLatitude==`function`?this.minLatitude(n):this.minLatitude,-Math.PI/2,Math.PI/2),U(typeof this.maxLatitude==`function`?this.maxLatitude(n):this.maxLatitude,-Math.PI/2,Math.PI/2))}let p=Object.assign({},e.state);if(p.workCode=i.work.workCode,p.panoIndex=i.panoIndex,t.longitude!==void 0&&(p.longitude=t.longitude),t.latitude!==void 0&&(p.latitude=t.latitude),t.fov!==void 0&&(p.fov=t.fov),p.distance=0,p.offset=i.position.clone(),e.state=p,this.emit(`gesture.tap`,e),!e.defaultPrevented){if(this.emit(`pano.select`,$(`pano.select`,{prevPano:this.currentPano,state:p,userAction:e.userAction,options:t,progress:0,error:null})),i&&!i.active){let e=mb({panoIndex:i.panoIndex,workCode:i.work.workCode}),t=this.panoMeshes.get(e);t&&(t.setDisabled(!1),t.setLoading(!0))}i&&i.active&&this.emit(`pano.request`,$(`pano.request`,{userAction:e.userAction,prevPano:this.currentPano,progress:0,state:p,options:t,error:null}))}}}},UT=Math.PI/180,WT=180/Math.PI,GT=.001,KT=1,qT=(()=>{let e=typeof navigator<`u`&&/iPad|iPhone|iPod/.test(navigator.platform);return()=>e})(),JT=(()=>{let e=typeof navigator<`u`&&/^((?!chrome|android).)*safari/i.test(navigator.userAgent);return()=>e})(),YT=(()=>{let e=typeof navigator<`u`&&navigator.userAgent.indexOf(`Firefox`)!==-1&&navigator.userAgent.indexOf(`Android`)!==-1;return()=>e})(),XT=(()=>{let e=typeof navigator<`u`?navigator.userAgent.match(/.*Chrome\/([0-9]+)/):null,t=e?parseInt(e[1],10):null;return()=>t})(),ZT=(()=>{let e=!1;if(XT()===65){let t=typeof navigator<`u`?navigator.userAgent.match(/.*Chrome\/([0-9\.]*)/):null;if(t){let[n,r,i,a]=t[1].split(`.`);e=parseInt(i,10)===3325&&parseInt(a,10)<148}}return()=>e})(),QT=(()=>{let e=qT()&&JT()&&typeof navigator<`u`&&navigator.userAgent.indexOf(`13_4`)!==-1;return()=>e})(),$T=(()=>{let e=typeof navigator<`u`&&navigator.userAgent.indexOf(`R7 Build`)!==-1;return()=>e})();function eE(){let e=typeof window<`u`&&(window.orientation==90||window.orientation==-90);return $T()?!e:e}function tE(e){return!(isNaN(e)||e<=GT||e>KT)}function nE(e){return e.w>1?0:2*Math.acos(e.w)}var rE=(()=>{let e={};return(t,n)=>{e[t]===void 0&&(console.warn(`cardboard: `+n),e[t]=!0)}})();function iE(e){let t,n=e.indexOf(`://`);t=n===-1?0:n+3;let r=e.indexOf(`/`,t);return r===-1&&(r=e.length),e.substring(0,r)}function aE(){if(typeof window>`u`||typeof document>`u`)return!1;let e=window.self!==window.top,t=iE(document.referrer),n=iE(window.location.href);return e&&t!==n}var oE=(()=>{function e(e,t,n){let r=t?t[0]:0,i=t?t[1]:0,a=t?t[2]:0,o=t?t[3]:1,s=r+r,c=i+i,l=a+a,u=r*s,d=r*c,f=r*l,p=i*c,m=i*l,h=a*l,g=o*s,_=o*c,v=o*l;return e[0]=1-(p+h),e[1]=d+v,e[2]=f-_,e[3]=0,e[4]=d-v,e[5]=1-(u+h),e[6]=m+g,e[7]=0,e[8]=f+_,e[9]=m-g,e[10]=1-(u+p),e[11]=0,e[12]=n?n[0]:0,e[13]=n?n[1]:0,e[14]=n?n[2]:0,e[15]=1,e}function t(e,t,n){let r=n[0],i=n[1],a=n[2],o,s,c,l,u,d,f,p,m,h,g,_;return t===e?(e[12]=t[0]*r+t[4]*i+t[8]*a+t[12],e[13]=t[1]*r+t[5]*i+t[9]*a+t[13],e[14]=t[2]*r+t[6]*i+t[10]*a+t[14],e[15]=t[3]*r+t[7]*i+t[11]*a+t[15]):(o=t[0],s=t[1],c=t[2],l=t[3],u=t[4],d=t[5],f=t[6],p=t[7],m=t[8],h=t[9],g=t[10],_=t[11],e[0]=o,e[1]=s,e[2]=c,e[3]=l,e[4]=u,e[5]=d,e[6]=f,e[7]=p,e[8]=m,e[9]=h,e[10]=g,e[11]=_,e[12]=o*r+u*i+m*a+t[12],e[13]=s*r+d*i+h*a+t[13],e[14]=c*r+f*i+g*a+t[14],e[15]=l*r+p*i+_*a+t[15]),e}function n(e,t){let n=t[0],r=t[1],i=t[2],a=t[3],o=t[4],s=t[5],c=t[6],l=t[7],u=t[8],d=t[9],f=t[10],p=t[11],m=t[12],h=t[13],g=t[14],_=t[15],v=n*s-r*o,y=n*c-i*o,b=n*l-a*o,x=r*c-i*s,S=r*l-a*s,C=i*l-a*c,w=u*h-d*m,T=u*g-f*m,E=u*_-p*m,D=d*g-f*h,O=d*_-p*h,k=f*_-p*g,A=v*k-y*O+b*D+x*E-S*T+C*w;return A?(A=1/A,e[0]=(s*k-c*O+l*D)*A,e[1]=(i*O-r*k-a*D)*A,e[2]=(h*C-g*S+_*x)*A,e[3]=(f*S-d*C-p*x)*A,e[4]=(c*E-o*k-l*T)*A,e[5]=(n*k-i*E+a*T)*A,e[6]=(g*b-m*C-_*y)*A,e[7]=(u*C-f*b+p*y)*A,e[8]=(o*O-s*E+l*w)*A,e[9]=(r*E-n*O-a*w)*A,e[10]=(m*S-h*b+_*v)*A,e[11]=(d*b-u*S-p*v)*A,e[12]=(s*T-o*D-c*w)*A,e[13]=(n*D-r*T+i*w)*A,e[14]=(h*y-m*x-g*v)*A,e[15]=(u*x-d*y+f*v)*A,e):null}return(r,i,a)=>{e(r,i),a&&t(r,r,a),n(r,r)}})(),sE=class{constructor(e=new l.Vector3,t=0){this.sample=e,this.timestampS=t}set(e,t){this.sample=e,this.timestampS=t}copy(e){this.set(e.sample,e.timestampS)}},cE=class{constructor(e,t){this.kFilter=e,this.isDebug=t,this.currentAccelMeasurement=new sE,this.currentGyroMeasurement=new sE,this.previousGyroMeasurement=new sE,qT()?this.filterQ=new l.Quaternion(-1,0,0,1):this.filterQ=new l.Quaternion(1,0,0,1),this.previousFilterQ=new l.Quaternion,this.previousFilterQ.copy(this.filterQ),this.accelQ=new l.Quaternion,this.isOrientationInitialized=!1,this.estimatedGravity=new l.Vector3,this.measuredGravity=new l.Vector3,this.gyroIntegralQ=new l.Quaternion}addAccelMeasurement(e,t){this.currentAccelMeasurement.set(e,t)}addGyroMeasurement(e,t){this.currentGyroMeasurement.set(e,t),tE(t-this.previousGyroMeasurement.timestampS)&&this.run_(),this.previousGyroMeasurement.copy(this.currentGyroMeasurement)}getOrientation(){return this.filterQ}run_(){if(!this.isOrientationInitialized){this.accelQ=this.accelToQuaternion_(this.currentAccelMeasurement.sample),this.previousFilterQ.copy(this.accelQ),this.isOrientationInitialized=!0;return}let e=this.currentGyroMeasurement.timestampS-this.previousGyroMeasurement.timestampS,t=this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample,e);this.gyroIntegralQ.multiply(t),this.filterQ.copy(this.previousFilterQ),this.filterQ.multiply(t);let n=new l.Quaternion;n.copy(this.filterQ),n.invert(),this.estimatedGravity.set(0,0,-1),this.estimatedGravity.applyQuaternion(n),this.estimatedGravity.normalize(),this.measuredGravity.copy(this.currentAccelMeasurement.sample),this.measuredGravity.normalize();let r=new l.Quaternion;r.setFromUnitVectors(this.estimatedGravity,this.measuredGravity),r.invert(),this.isDebug&&console.log(`Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)`,WT*nE(r),this.estimatedGravity.x.toFixed(1),this.estimatedGravity.y.toFixed(1),this.estimatedGravity.z.toFixed(1),this.measuredGravity.x.toFixed(1),this.measuredGravity.y.toFixed(1),this.measuredGravity.z.toFixed(1));let i=new l.Quaternion;i.copy(this.filterQ),i.multiply(r),this.filterQ.slerp(i,1-this.kFilter),this.previousFilterQ.copy(this.filterQ)}accelToQuaternion_(e){let t=new l.Vector3;t.copy(e),t.normalize();let n=new l.Quaternion;return n.setFromUnitVectors(new l.Vector3(0,0,-1),t),n.invert(),n}gyroToQuaternionDelta_(e,t){let n=new l.Quaternion,r=new l.Vector3;return r.copy(e),r.normalize(),n.setFromAxisAngle(r,e.length()*t),n}},lE=class{constructor(e,t){this.predictionTimeS=e,this.isDebug=t,this.previousQ=new l.Quaternion,this.previousTimestampS=null,this.deltaQ=new l.Quaternion,this.outQ=new l.Quaternion}getPrediction(e,t,n){if(!this.previousTimestampS)return this.previousQ.copy(e),this.previousTimestampS=n,e;let r=new l.Vector3;r.copy(t),r.normalize();let i=t.length();if(i<UT*20)return this.isDebug&&console.log(`Moving slowly, at %s deg/s: no prediction`,(WT*i).toFixed(1)),this.outQ.copy(e),this.previousQ.copy(e),this.outQ;let a=i*this.predictionTimeS;return this.deltaQ.setFromAxisAngle(r,a),this.outQ.copy(this.previousQ),this.outQ.multiply(this.deltaQ),this.previousQ.copy(e),this.previousTimestampS=n,this.outQ}},uE=class{constructor(e){this.coefficients=e}distortInverse(e){let t=0,n=1,r=e-this.distort(t);for(;Math.abs(n-t)>1e-4;){let i=e-this.distort(n),a=n-i*((n-t)/(i-r));t=n,n=a,r=i}return n}distort(e){let t=e*e,n=0;for(let e=0;e<this.coefficients.length;e++)n=t*(n+this.coefficients[e]);return(n+1)*e}},dE=class{constructor(){this.angularAcceleration=null,this.angularVelocity=null,this.linearAcceleration=null,this.linearVelocity=null,this.orientation=null,this.position=null}},fE=class{constructor(){this.leftDegrees=0,this.rightDegrees=0,this.upDegrees=0,this.downDegrees=0}},pE=class{constructor(e,t,n,r){this.viewer={id:`CardboardV1`,label:`Cardboard I/O 2014`,fov:40,interLensDistance:.06,baselineLensDistance:.035,screenLensDistance:.042,distortionCoefficients:[.441,.156],inverseCoefficients:[-.4410035,.42756155,-.4804439,.5460139,-.58821183,.5733938,-.48303202,.33299083,-.17573841,.0651772,-.01488963,.001559834]},this.device={widthMeters:.11,heightMeters:.062,bevelMeters:.004},this.depthNear=.01,this.depthFar=1e4,this.yawOnly=n,this.accelerometer=new l.Vector3,this.gyroscope=new l.Vector3,this.filter=new cE(e,r),this.posePredictor=new lE(t,r),this.isFirefoxAndroid=YT(),this.isIOS=qT();let i=XT();this.isDeviceMotionInRadians=!this.isIOS&&i!==null&&i<66,this.isWithoutDeviceMotion=ZT()||QT(),this.filterToWorldQ=new l.Quaternion,qT()?this.filterToWorldQ.setFromAxisAngle(new l.Vector3(1,0,0),Math.PI/2):this.filterToWorldQ.setFromAxisAngle(new l.Vector3(1,0,0),-Math.PI/2),this.inverseWorldToScreenQ=new l.Quaternion,this.worldToScreenQ=new l.Quaternion,this.originalPoseAdjustQ=new l.Quaternion;let a=typeof window<`u`?-window.orientation*Math.PI/180:0;this.originalPoseAdjustQ.setFromAxisAngle(new l.Vector3(0,0,1),a),this.setScreenTransform_(),eE()&&this.filterToWorldQ.multiply(this.inverseWorldToScreenQ),this.resetQ=new l.Quaternion,this.orientationOut_=new Float32Array(4),this.previousTimestampS=Date.now()}getPosition(){return null}getOrientation(){let e;if(this.isWithoutDeviceMotion&&this._deviceOrientationQ){this.deviceOrientationFixQ=this.deviceOrientationFixQ||(function(){let e=new l.Quaternion().setFromAxisAngle(new l.Vector3(0,0,-1),0),t=new l.Quaternion;return typeof window<`u`&&window.orientation===-90?t.setFromAxisAngle(new l.Vector3(0,1,0),Math.PI/-2):t.setFromAxisAngle(new l.Vector3(0,1,0),Math.PI/2),e.multiply(t)})(),this.deviceOrientationFilterToWorldQ=this.deviceOrientationFilterToWorldQ||(function(){let e=new l.Quaternion;return e.setFromAxisAngle(new l.Vector3(1,0,0),-Math.PI/2),e})(),e=this._deviceOrientationQ;let t=new l.Quaternion;return t.copy(e),t.multiply(this.deviceOrientationFilterToWorldQ),t.multiply(this.resetQ),t.multiply(this.worldToScreenQ),t.multiplyQuaternions(this.deviceOrientationFixQ,t),this.yawOnly&&(t.x=0,t.z=0,t.normalize()),this.orientationOut_[0]=t.x,this.orientationOut_[1]=t.y,this.orientationOut_[2]=t.z,this.orientationOut_[3]=t.w,this.orientationOut_}else{let t=this.filter.getOrientation();e=this.posePredictor.getPrediction(t,this.gyroscope,this.previousTimestampS)}let t=new l.Quaternion;return t.copy(this.filterToWorldQ),t.multiply(this.resetQ),t.multiply(e),t.multiply(this.worldToScreenQ),this.yawOnly&&(t.x=0,t.z=0,t.normalize()),this.orientationOut_[0]=t.x,this.orientationOut_[1]=t.y,this.orientationOut_[2]=t.z,this.orientationOut_[3]=t.w,this.orientationOut_}getPose(){let e=new dE;return e.orientation=this.getOrientation(),e}resetPose(){this.resetQ.copy(this.filter.getOrientation()),this.resetQ.x=0,this.resetQ.y=0,this.resetQ.z*=-1,this.resetQ.normalize(),eE()&&this.resetQ.multiply(this.inverseWorldToScreenQ),this.resetQ.multiply(this.originalPoseAdjustQ)}getFrameData(e){let t=this.getOrientation(),n=this.getEyeOffset(),r=this.getEyeProjectionMatrix();return e.pose.angularAcceleration=null,e.pose.angularVelocity=null,e.pose.linearAcceleration=null,e.pose.linearVelocity=null,e.pose.orientation=t,e.pose.position=null,e.timestamp=this.previousTimestampS,e.leftProjectionMatrix.set(r.left),e.rightProjectionMatrix.set(r.right),oE(e.leftViewMatrix,t,n.left),oE(e.rightViewMatrix,t,n.right),e}start(){if(typeof window>`u`)return()=>{};let e=this.onDeviceMotion_.bind(this),t=this.onOrientationChange_.bind(this),n=this.onMessage_.bind(this),r=this.onDeviceOrientation_.bind(this);return qT()&&aE()&&window.addEventListener(`message`,n),window.addEventListener(`orientationchange`,t),this.isWithoutDeviceMotion?window.addEventListener(`deviceorientation`,r):window.addEventListener(`devicemotion`,e),()=>{window.removeEventListener(`devicemotion`,e),window.removeEventListener(`deviceorientation`,t),window.removeEventListener(`orientationchange`,t),window.removeEventListener(`message`,n)}}getEyeOffset(){return{left:[-this.viewer.interLensDistance*.5,0,0],right:[this.viewer.interLensDistance*.5,0,0]}}getEyeProjectionMatrix(){let e=this.getEyeFieldOfView(),t=this.depthNear,n=this.depthFar,r={left:[],right:[]};{let i=e.left.upDegrees*UT,a=e.left.downDegrees*UT,o=e.left.leftDegrees*UT,s=e.left.rightDegrees*UT,c=2/(o+s),l=2/(i+a);r.left[0]=c,r.left[1]=0,r.left[2]=0,r.left[3]=0,r.left[4]=0,r.left[5]=l,r.left[6]=0,r.left[7]=0,r.left[8]=-((o-s)*c*.5),r.left[9]=(i-a)*l*.5,r.left[10]=n/(t-n),r.left[11]=-1,r.left[12]=0,r.left[13]=0,r.left[14]=n*t/(t-n),r.left[15]=0}{let i=e.right.upDegrees*UT,a=e.right.downDegrees*UT,o=e.right.leftDegrees*UT,s=e.right.rightDegrees*UT,c=2/(o+s),l=2/(i+a);r.right[0]=c,r.right[1]=0,r.right[2]=0,r.right[3]=0,r.right[4]=0,r.right[5]=l,r.right[6]=0,r.right[7]=0,r.right[8]=-((o-s)*c*.5),r.right[9]=(i-a)*l*.5,r.right[10]=n/(t-n),r.right[11]=-1,r.right[12]=0,r.right[13]=0,r.right[14]=n*t/(t-n),r.right[15]=0}return r}getEyeFieldOfView(){let e=this.viewer,t=this.device,n=new uE(e.distortionCoefficients),r=e.screenLensDistance,i=(t.widthMeters-e.interLensDistance)/2,a=e.interLensDistance/2,o=e.baselineLensDistance-t.bevelMeters,s=t.heightMeters-o,c=WT*Math.atan(n.distort(i/r)),l=WT*Math.atan(n.distort(a/r)),u=WT*Math.atan(n.distort(o/r)),d=WT*Math.atan(n.distort(s/r)),f=new fE,p=new fE;return f.leftDegrees=Math.min(c,e.fov),f.rightDegrees=Math.min(l,e.fov),f.downDegrees=Math.min(u,e.fov),f.upDegrees=Math.min(d,e.fov),p.leftDegrees=f.rightDegrees,p.rightDegrees=f.leftDegrees,p.upDegrees=f.upDegrees,p.downDegrees=f.downDegrees,{left:f,right:p}}onDeviceOrientation_(e){this._deviceOrientationQ=this._deviceOrientationQ||new l.Quaternion;let{alpha:t,beta:n,gamma:r}=e;t=(t||0)*Math.PI/180,n=(n||0)*Math.PI/180,r=(r||0)*Math.PI/180,this._deviceOrientationQ.setFromEuler(new l.Euler(t,n,-r,`YXZ`))}onDeviceMotion_(e){this.updateDeviceMotion_(e)}updateDeviceMotion_(e){let t=e.accelerationIncludingGravity,n=e.rotationRate,r=e.timeStamp/1e3,i=r-this.previousTimestampS;if(i<0){rE(`fusion-pose-sensor:invalid:non-monotonic`,`Invalid timestamps detected: non-monotonic timestamp from devicemotion`),this.previousTimestampS=r;return}else if(i<=GT||i>KT){rE(`fusion-pose-sensor:invalid:outside-threshold`,`Invalid timestamps detected: Timestamp from devicemotion outside expected range.`),this.previousTimestampS=r;return}t&&(this.accelerometer.set(-t.x,-t.y,-t.z),n&&($T()?this.gyroscope.set(-n.beta,n.alpha,n.gamma):this.gyroscope.set(n.alpha,n.beta,n.gamma),this.isDeviceMotionInRadians||this.gyroscope.multiplyScalar(Math.PI/180),this.filter.addGyroMeasurement(this.gyroscope,r)),this.filter.addAccelMeasurement(this.accelerometer,r)),this.previousTimestampS=r}onOrientationChange_(){this.setScreenTransform_()}onMessage_(e){let t=e.data;!t||!t.type||t.type.toLowerCase()===`devicemotion`&&this.updateDeviceMotion_(t.deviceMotionEvent)}setScreenTransform_(){switch(this.worldToScreenQ.set(0,0,0,1),typeof window<`u`?window.orientation:0){case 0:break;case 90:this.worldToScreenQ.setFromAxisAngle(new l.Vector3(0,0,1),-Math.PI/2);break;case-90:this.worldToScreenQ.setFromAxisAngle(new l.Vector3(0,0,1),Math.PI/2);break;case 180:break}this.inverseWorldToScreenQ.copy(this.worldToScreenQ),this.inverseWorldToScreenQ.invert()}},mE=[0,0,.5,1],hE=[.5,0,.5,1],gE=class{constructor(e){this.renderer=e,this.sensor=new pE(.98,.04,!1,!1),this.scale=1,this.cameraL=new l.PerspectiveCamera,this.cameraR=new l.PerspectiveCamera;let t=this.sensor.start();this.dispose=()=>{let e=this.renderer.getSize(new l.Vector2);this.renderer.setScissor(0,0,e.width,e.height),this.renderer.setViewport(0,0,e.width,e.height),this.renderer.setScissorTest(!1),t()}}render(e,t){let n=this.renderer.getSize(new l.Vector2);if(n.width>n.height){var r=e.matrixWorldAutoUpdate;r&&(e.updateMatrixWorld(),e.matrixWorldAutoUpdate=!1);let i={x:Math.round(n.width*mE[0]),y:Math.round(n.height*mE[1]),width:Math.round(n.width*mE[2]),height:Math.round(n.height*mE[3])},a={x:Math.round(n.width*hE[0]),y:Math.round(n.height*hE[1]),width:Math.round(n.width*hE[2]),height:Math.round(n.height*hE[3])};this.renderer.setScissorTest(!0),this.renderer.autoClear&&this.renderer.clear(),t.parent===null&&t.updateMatrixWorld(),t.matrixWorld.decompose(this.cameraL.position,this.cameraL.quaternion,this.cameraL.scale),t.matrixWorld.decompose(this.cameraR.position,this.cameraR.quaternion,this.cameraR.scale);let o=this.sensor.getEyeOffset();this.cameraL.translateOnAxis(new l.Vector3().fromArray(o.left),this.scale),this.cameraR.translateOnAxis(new l.Vector3().fromArray(o.right),this.scale);let s=this.sensor.getEyeProjectionMatrix();this.cameraL.projectionMatrix.fromArray(s.left),this.cameraR.projectionMatrix.fromArray(s.right),this.renderer.setViewport(i.x,i.y,i.width,i.height),this.renderer.setScissor(i.x,i.y,i.width,i.height),this.renderer.render(e,this.cameraL),this.renderer.setViewport(a.x,a.y,a.width,a.height),this.renderer.setScissor(a.x,a.y,a.width,a.height),this.renderer.render(e,this.cameraR),this.renderer.setViewport(0,0,n.width,n.height),this.renderer.setScissor(0,0,n.width,n.height),this.renderer.setScissorTest(!1),r&&(e.matrixWorldAutoUpdate=!0)}else this.renderer.render(e,t)}dispose(){}},_E=`data:image/png;base64,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`,vE=`data:image/png;base64,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`,yE,bE={zh:{TITLE:`眼镜模式`,HIT:`请将手机横屏放入 VR 眼镜中`},en:{TITLE:`GLASSES MODE`,HIT:`Please put the mobile phone horizontally into the VR glasses.`},ja:{TITLE:`メガネモード`,HIT:`携帯電話をVRメガネに水平に入れてください。`}},xE=typeof navigator<`u`?(yE=bE[navigator.language.split(`-`)[0]])==null?bE.zh:yE:bE.zh,SE=`
1061
+ `;return function(){var n=Error(`get-stack-trace`),r=n&&n.stack?n.stack.replace(/^[^\(]+?[\n$]/gm,``).replace(/^\s+at\s+/gm,``).replace(/^Object.<anonymous>\s*\(/gm,`{anonymous}()@`):`Unknown Stack Trace`,a=e.console&&(e.console.warn||e.console.log);return a&&a.call(e.console,i,r),t.apply(this,arguments)}}var m=typeof Object.assign==`function`?Object.assign:function(e){if(e===r||e===null)throw TypeError(`Cannot convert undefined or null to object`);for(var t=Object(e),n=1;n<arguments.length;n++){var i=arguments[n];if(i!==r&&i!==null)for(var a in i)i.hasOwnProperty(a)&&(t[a]=i[a])}return t},h=p(function(e,t,n){for(var i=Object.keys(t),a=0;a<i.length;)(!n||n&&e[i[a]]===r)&&(e[i[a]]=t[i[a]]),a++;return e},`extend`,"Use `assign`."),g=p(function(e,t){return h(e,t,!0)},`merge`,"Use `assign`.");function _(e,t,n){var r=t.prototype,i=e.prototype=Object.create(r);i.constructor=e,i._super=r,n&&m(i,n)}function v(e,t){return function(){return e.apply(t,arguments)}}function y(e,t){return typeof e==o?e.apply(t&&t[0]||r,t):e}function b(e,t){return e===r?t:e}function x(e,t,n){f(T(t),function(t){e.addEventListener(t,n,!1)})}function S(e,t,n){f(T(t),function(t){e.removeEventListener(t,n,!1)})}function C(e,t){for(;e;){if(e==t)return!0;e=e.parentNode}return!1}function w(e,t){return e.indexOf(t)>-1}function T(e){return e.trim().split(/\s+/g)}function E(e,t,n){if(e.indexOf&&!n)return e.indexOf(t);for(var r=0;r<e.length;){if(n&&e[r][n]==t||!n&&e[r]===t)return r;r++}return-1}function D(e){return Array.prototype.slice.call(e,0)}function O(e,t,n){for(var r=[],i=[],a=0;a<e.length;){var o=t?e[a][t]:e[a];E(i,o)<0&&r.push(e[a]),i[a]=o,a++}return n&&(r=t?r.sort(function(e,n){return e[t]>n[t]}):r.sort()),r}function k(e,t){for(var n,a,o=t[0].toUpperCase()+t.slice(1),s=0;s<i.length;){if(n=i[s],a=n?n+o:t,a in e)return a;s++}return r}var A=1;function j(){return A++}function M(t){var n=t.ownerDocument||t;return n.defaultView||n.parentWindow||e}var N=/mobile|tablet|ip(ad|hone|od)|android/i,ee=`ontouchstart`in e,P=k(e,`PointerEvent`)!==r,F=ee&&N.test(navigator.userAgent),I=`touch`,L=`pen`,te=`mouse`,ne=`kinect`,re=25,R=1,ie=2,z=4,ae=8,oe=1,se=2,ce=4,le=8,ue=16,de=se|ce,fe=le|ue,pe=de|fe,me=[`x`,`y`],he=[`clientX`,`clientY`];function ge(e,t){var n=this;this.manager=e,this.callback=t,this.element=e.element,this.target=e.options.inputTarget,this.domHandler=function(t){y(e.options.enable,[e])&&n.handler(t)},this.init()}ge.prototype={handler:function(){},init:function(){this.evEl&&x(this.element,this.evEl,this.domHandler),this.evTarget&&x(this.target,this.evTarget,this.domHandler),this.evWin&&x(M(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&S(this.element,this.evEl,this.domHandler),this.evTarget&&S(this.target,this.evTarget,this.domHandler),this.evWin&&S(M(this.element),this.evWin,this.domHandler)}};function _e(e){var t;return t=e.options.inputClass||(P?B:F?Ge:ee?Ye:Ne),new t(e,ve)}function ve(e,t,n){var r=n.pointers.length,i=n.changedPointers.length,a=t&R&&r-i===0,o=t&(z|ae)&&r-i===0;n.isFirst=!!a,n.isFinal=!!o,a&&(e.session={}),n.eventType=t,ye(e,n),e.emit(`hammer.input`,n),e.recognize(n),e.session.prevInput=n}function ye(e,t){var n=e.session,r=t.pointers,i=r.length;n.firstInput||(n.firstInput=Se(t)),i>1&&!n.firstMultiple?n.firstMultiple=Se(t):i===1&&(n.firstMultiple=!1);var a=n.firstInput,o=n.firstMultiple,s=o?o.center:a.center,u=t.center=Ce(r);t.timeStamp=l(),t.deltaTime=t.timeStamp-a.timeStamp,t.angle=De(s,u),t.distance=Ee(s,u),be(n,t),t.offsetDirection=Te(t.deltaX,t.deltaY);var d=we(t.deltaTime,t.deltaX,t.deltaY);t.overallVelocityX=d.x,t.overallVelocityY=d.y,t.overallVelocity=c(d.x)>c(d.y)?d.x:d.y,t.scale=o?ke(o.pointers,r):1,t.rotation=o?Oe(o.pointers,r):0,t.maxPointers=n.prevInput?t.pointers.length>n.prevInput.maxPointers?t.pointers.length:n.prevInput.maxPointers:t.pointers.length,xe(n,t);var f=e.element;C(t.srcEvent.target,f)&&(f=t.srcEvent.target),t.target=f}function be(e,t){var n=t.center,r=e.offsetDelta||{},i=e.prevDelta||{},a=e.prevInput||{};(t.eventType===R||a.eventType===z)&&(i=e.prevDelta={x:a.deltaX||0,y:a.deltaY||0},r=e.offsetDelta={x:n.x,y:n.y}),t.deltaX=i.x+(n.x-r.x),t.deltaY=i.y+(n.y-r.y)}function xe(e,t){var n=e.lastInterval||t,i=t.timeStamp-n.timeStamp,a,o,s,l;if(t.eventType!=ae&&(i>re||n.velocity===r)){var u=t.deltaX-n.deltaX,d=t.deltaY-n.deltaY,f=we(i,u,d);o=f.x,s=f.y,a=c(f.x)>c(f.y)?f.x:f.y,l=Te(u,d),e.lastInterval=t}else a=n.velocity,o=n.velocityX,s=n.velocityY,l=n.direction;t.velocity=a,t.velocityX=o,t.velocityY=s,t.direction=l}function Se(e){for(var t=[],n=0;n<e.pointers.length;)t[n]={clientX:s(e.pointers[n].clientX),clientY:s(e.pointers[n].clientY)},n++;return{timeStamp:l(),pointers:t,center:Ce(t),deltaX:e.deltaX,deltaY:e.deltaY}}function Ce(e){var t=e.length;if(t===1)return{x:s(e[0].clientX),y:s(e[0].clientY)};for(var n=0,r=0,i=0;i<t;)n+=e[i].clientX,r+=e[i].clientY,i++;return{x:s(n/t),y:s(r/t)}}function we(e,t,n){return{x:t/e||0,y:n/e||0}}function Te(e,t){return e===t?oe:c(e)>=c(t)?e<0?se:ce:t<0?le:ue}function Ee(e,t,n){n||(n=me);var r=t[n[0]]-e[n[0]],i=t[n[1]]-e[n[1]];return Math.sqrt(r*r+i*i)}function De(e,t,n){n||(n=me);var r=t[n[0]]-e[n[0]],i=t[n[1]]-e[n[1]];return Math.atan2(i,r)*180/Math.PI}function Oe(e,t){return De(t[1],t[0],he)+De(e[1],e[0],he)}function ke(e,t){return Ee(t[0],t[1],he)/Ee(e[0],e[1],he)}var Ae={mousedown:R,mousemove:ie,mouseup:z},je=`mousedown`,Me=`mousemove mouseup`;function Ne(){this.evEl=je,this.evWin=Me,this.pressed=!1,ge.apply(this,arguments)}_(Ne,ge,{handler:function(e){var t=Ae[e.type];t&R&&(e.button===0||e.button===2)&&(this.pressed=!0),t&ie&&e.which!==1&&(t=z),this.pressed&&(t&z&&(this.pressed=!1),this.callback(this.manager,t,{pointers:[e],changedPointers:[e],pointerType:te,srcEvent:e}))}});var Pe={pointerdown:R,pointermove:ie,pointerup:z,pointercancel:ae,pointerout:ae},Fe={2:I,3:L,4:te,5:ne},Ie=`pointerdown`,Le=`pointermove pointerup pointercancel`;e.MSPointerEvent&&!e.PointerEvent&&(Ie=`MSPointerDown`,Le=`MSPointerMove MSPointerUp MSPointerCancel`);function B(){this.evEl=Ie,this.evWin=Le,ge.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}_(B,ge,{handler:function(e){var t=this.store,n=!1,r=!1,i=Pe[e.type.toLowerCase().replace(`ms`,``)],a=Fe[e.pointerType]||e.pointerType,o=a==I,s=E(t,e.pointerId,`pointerId`);i&R&&(e.button===0||e.button===2||o)?s<0&&(t.push(e),s=t.length-1):i&(z|ae)?n=!0:!o&&e.buttons===0&&(n=!0,r=!0,i=Pe.pointerup),!(s<0)&&(r||(t[s]=e),this.callback(this.manager,i,{pointers:t,changedPointers:[e],pointerType:a,srcEvent:t[s]}),n&&t.splice(s,1))}});var Re={touchstart:R,touchmove:ie,touchend:z,touchcancel:ae},ze=`touchstart`,Be=`touchstart touchmove touchend touchcancel`;function Ve(){this.evTarget=ze,this.evWin=Be,this.started=!1,ge.apply(this,arguments)}_(Ve,ge,{handler:function(e){var t=Re[e.type];if(t===R&&(this.started=!0),this.started){var n=He.call(this,e,t);t&(z|ae)&&n[0].length-n[1].length===0&&(this.started=!1),this.callback(this.manager,t,{pointers:n[0],changedPointers:n[1],pointerType:I,srcEvent:e})}}});function He(e,t){var n=D(e.touches),r=D(e.changedTouches);return t&(z|ae)&&(n=O(n.concat(r),`identifier`,!0)),[n,r]}var Ue={touchstart:R,touchmove:ie,touchend:z,touchcancel:ae},We=`touchstart touchmove touchend touchcancel`;function Ge(){this.evTarget=We,this.targetIds={},ge.apply(this,arguments)}_(Ge,ge,{handler:function(e){var t=Ue[e.type],n=Ke.call(this,e,t);n&&this.callback(this.manager,t,{pointers:n[0],changedPointers:n[1],pointerType:I,srcEvent:e})}});function Ke(e,t){var n=D(e.touches),r=this.targetIds;if(t&(R|ie)&&n.length===1)return r[n[0].identifier]=!0,[n,n];var i,a,o=D(e.changedTouches),s=[],c=this.target;if(a=n.filter(function(e){return C(e.target,c)}),t===R)for(i=0;i<a.length;)r[a[i].identifier]=!0,i++;for(i=0;i<o.length;)r[o[i].identifier]&&s.push(o[i]),t&(z|ae)&&delete r[o[i].identifier],i++;if(s.length)return[O(a.concat(s),`identifier`,!0),s]}var qe=2500,Je=25;function Ye(){ge.apply(this,arguments);var e=v(this.handler,this);this.touch=new Ge(this.manager,e),this.mouse=new Ne(this.manager,e),this.primaryTouch=null,this.lastTouches=[]}_(Ye,ge,{handler:function(e,t,n){var r=n.pointerType==I,i=n.pointerType==te;if(!(i&&n.sourceCapabilities&&n.sourceCapabilities.firesTouchEvents)){if(r)Xe.call(this,t,n);else if(i&&Qe.call(this,n))return;this.callback(e,t,n)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});function Xe(e,t){e&R?(this.primaryTouch=t.changedPointers[0].identifier,Ze.call(this,t)):e&(z|ae)&&Ze.call(this,t)}function Ze(e){var t=e.changedPointers[0];if(t.identifier===this.primaryTouch){var n={x:t.clientX,y:t.clientY};this.lastTouches.push(n);var r=this.lastTouches;setTimeout(function(){var e=r.indexOf(n);e>-1&&r.splice(e,1)},qe)}}function Qe(e){for(var t=e.srcEvent.clientX,n=e.srcEvent.clientY,r=0;r<this.lastTouches.length;r++){var i=this.lastTouches[r],a=Math.abs(t-i.x),o=Math.abs(n-i.y);if(a<=Je&&o<=Je)return!0}return!1}var $e=a?k(a.style,`touchAction`):r,et=$e!==r,tt=`compute`,nt=`auto`,rt=`manipulation`,it=`none`,at=`pan-x`,ot=`pan-y`,st=ut();function ct(e,t){this.manager=e,this.set(t)}ct.prototype={set:function(e){e==tt&&(e=this.compute()),et&&this.manager.element.style&&st[e]&&(this.manager.element.style[$e]=e),this.actions=e.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var e=[];return f(this.manager.recognizers,function(t){y(t.options.enable,[t])&&(e=e.concat(t.getTouchAction()))}),lt(e.join(` `))},preventDefaults:function(e){var t=e.srcEvent,n=e.offsetDirection;if(this.manager.session.prevented){t.preventDefault();return}var r=this.actions,i=w(r,it)&&!st[it],a=w(r,ot)&&!st[ot],o=w(r,at)&&!st[at];if(i){var s=e.pointers.length===1,c=e.distance<2,l=e.deltaTime<250;if(s&&c&&l)return}if(!(o&&a)&&(i||a&&n&de||o&&n&fe))return this.preventSrc(t)},preventSrc:function(e){this.manager.session.prevented=!0,e.preventDefault()}};function lt(e){if(w(e,it))return it;var t=w(e,at),n=w(e,ot);return t&&n?it:t||n?t?at:ot:w(e,rt)?rt:nt}function ut(){if(!et)return!1;var t={},n=e.CSS&&e.CSS.supports;return[`auto`,`manipulation`,`pan-y`,`pan-x`,`pan-x pan-y`,`none`].forEach(function(r){t[r]=n?e.CSS.supports(`touch-action`,r):!0}),t}var dt=1,ft=2,pt=4,mt=8,ht=mt,V=16,gt=32;function H(e){this.options=m({},this.defaults,e||{}),this.id=j(),this.manager=null,this.options.enable=b(this.options.enable,!0),this.state=dt,this.simultaneous={},this.requireFail=[]}H.prototype={defaults:{},set:function(e){return m(this.options,e),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(e){if(d(e,`recognizeWith`,this))return this;var t=this.simultaneous;return e=yt(e,this),t[e.id]||(t[e.id]=e,e.recognizeWith(this)),this},dropRecognizeWith:function(e){return d(e,`dropRecognizeWith`,this)?this:(e=yt(e,this),delete this.simultaneous[e.id],this)},requireFailure:function(e){if(d(e,`requireFailure`,this))return this;var t=this.requireFail;return e=yt(e,this),E(t,e)===-1&&(t.push(e),e.requireFailure(this)),this},dropRequireFailure:function(e){if(d(e,`dropRequireFailure`,this))return this;e=yt(e,this);var t=E(this.requireFail,e);return t>-1&&this.requireFail.splice(t,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(e){return!!this.simultaneous[e.id]},emit:function(e){var t=this,n=this.state;function r(n){t.manager.emit(n,e)}n<mt&&r(t.options.event+_t(n)),r(t.options.event),e.additionalEvent&&r(e.additionalEvent),n>=mt&&r(t.options.event+_t(n))},tryEmit:function(e){if(this.canEmit())return this.emit(e);this.state=gt},canEmit:function(){for(var e=0;e<this.requireFail.length;){if(!(this.requireFail[e].state&(gt|dt)))return!1;e++}return!0},recognize:function(e){var t=m({},e);if(!y(this.options.enable,[this,t])){this.reset(),this.state=gt;return}this.state&(ht|V|gt)&&(this.state=dt),this.state=this.process(t),this.state&(ft|pt|mt|V)&&this.tryEmit(t)},process:function(e){},getTouchAction:function(){},reset:function(){}};function _t(e){return e&V?`cancel`:e&mt?`end`:e&pt?`move`:e&ft?`start`:``}function vt(e){return e==ue?`down`:e==le?`up`:e==se?`left`:e==ce?`right`:``}function yt(e,t){var n=t.manager;return n?n.get(e):e}function bt(){H.apply(this,arguments)}_(bt,H,{defaults:{pointers:1},attrTest:function(e){var t=this.options.pointers;return t===0||e.pointers.length===t},process:function(e){var t=this.state,n=e.eventType,r=t&(ft|pt),i=this.attrTest(e);return r&&(n&ae||!i)?t|V:r||i?n&z?t|mt:t&ft?t|pt:ft:gt}});function xt(){bt.apply(this,arguments),this.pX=null,this.pY=null}_(xt,bt,{defaults:{event:`pan`,threshold:10,pointers:1,direction:pe},getTouchAction:function(){var e=this.options.direction,t=[];return e&de&&t.push(ot),e&fe&&t.push(at),t},directionTest:function(e){var t=this.options,n=!0,r=e.distance,i=e.direction,a=e.deltaX,o=e.deltaY;return i&t.direction||(t.direction&de?(i=a===0?oe:a<0?se:ce,n=a!=this.pX,r=Math.abs(e.deltaX)):(i=o===0?oe:o<0?le:ue,n=o!=this.pY,r=Math.abs(e.deltaY))),e.direction=i,n&&r>t.threshold&&i&t.direction},attrTest:function(e){return bt.prototype.attrTest.call(this,e)&&(this.state&ft||!(this.state&ft)&&this.directionTest(e))},emit:function(e){this.pX=e.deltaX,this.pY=e.deltaY;var t=vt(e.direction);t&&(e.additionalEvent=this.options.event+t),this._super.emit.call(this,e)}});function St(){bt.apply(this,arguments)}_(St,bt,{defaults:{event:`pinch`,threshold:0,pointers:2},getTouchAction:function(){return[it]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||this.state&ft)},emit:function(e){if(e.scale!==1){var t=e.scale<1?`in`:`out`;e.additionalEvent=this.options.event+t}this._super.emit.call(this,e)}});function Ct(){H.apply(this,arguments),this._timer=null,this._input=null}_(Ct,H,{defaults:{event:`press`,pointers:1,time:251,threshold:9},getTouchAction:function(){return[nt]},process:function(e){var t=this.options,n=e.pointers.length===t.pointers,r=e.distance<t.threshold,i=e.deltaTime>t.time;if(this._input=e,!r||!n||e.eventType&(z|ae)&&!i)this.reset();else if(e.eventType&R)this.reset(),this._timer=u(function(){this.state=ht,this.tryEmit()},t.time,this);else if(e.eventType&z)return ht;return gt},reset:function(){clearTimeout(this._timer)},emit:function(e){this.state===ht&&(e&&e.eventType&z?this.manager.emit(this.options.event+`up`,e):(this._input.timeStamp=l(),this.manager.emit(this.options.event,this._input)))}});function wt(){bt.apply(this,arguments)}_(wt,bt,{defaults:{event:`rotate`,threshold:0,pointers:2},getTouchAction:function(){return[it]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||this.state&ft)}});function Tt(){bt.apply(this,arguments)}_(Tt,bt,{defaults:{event:`swipe`,threshold:10,velocity:.3,direction:de|fe,pointers:1},getTouchAction:function(){return xt.prototype.getTouchAction.call(this)},attrTest:function(e){var t=this.options.direction,n;return t&(de|fe)?n=e.overallVelocity:t&de?n=e.overallVelocityX:t&fe&&(n=e.overallVelocityY),this._super.attrTest.call(this,e)&&t&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers==this.options.pointers&&c(n)>this.options.velocity&&e.eventType&z},emit:function(e){var t=vt(e.offsetDirection);t&&this.manager.emit(this.options.event+t,e),this.manager.emit(this.options.event,e)}});function Et(){H.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}_(Et,H,{defaults:{event:`tap`,pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[rt]},process:function(e){var t=this.options,n=e.pointers.length===t.pointers,r=e.distance<t.threshold,i=e.deltaTime<t.time;if(this.reset(),e.eventType&R&&this.count===0)return this.failTimeout();if(r&&i&&n){if(e.eventType!=z)return this.failTimeout();var a=this.pTime?e.timeStamp-this.pTime<t.interval:!0,o=!this.pCenter||Ee(this.pCenter,e.center)<t.posThreshold;if(this.pTime=e.timeStamp,this.pCenter=e.center,!o||!a?this.count=1:this.count+=1,this._input=e,this.count%t.taps===0)return this.hasRequireFailures()?(this._timer=u(function(){this.state=ht,this.tryEmit()},t.interval,this),ft):ht}return gt},failTimeout:function(){return this._timer=u(function(){this.state=gt},this.options.interval,this),gt},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==ht&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}});function Dt(e,t){return t=t||{},t.recognizers=b(t.recognizers,Dt.defaults.preset),new At(e,t)}Dt.VERSION=`2.0.7`,Dt.defaults={domEvents:!1,touchAction:tt,enable:!0,inputTarget:null,inputClass:null,preset:[[wt,{enable:!1}],[St,{enable:!1},[`rotate`]],[Tt,{direction:de}],[xt,{direction:de},[`swipe`]],[Et],[Et,{event:`doubletap`,taps:2},[`tap`]],[Ct]],cssProps:{userSelect:`none`,touchSelect:`none`,touchCallout:`none`,contentZooming:`none`,userDrag:`none`,tapHighlightColor:`rgba(0,0,0,0)`}};var Ot=1,kt=2;function At(e,t){this.options=m({},Dt.defaults,t||{}),this.options.inputTarget=this.options.inputTarget||e,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=e,this.input=_e(this),this.touchAction=new ct(this,this.options.touchAction),jt(this,!0),f(this.options.recognizers,function(e){var t=this.add(new e[0](e[1]));e[2]&&t.recognizeWith(e[2]),e[3]&&t.requireFailure(e[3])},this)}At.prototype={set:function(e){return m(this.options,e),e.touchAction&&this.touchAction.update(),e.inputTarget&&(this.input.destroy(),this.input.target=e.inputTarget,this.input.init()),this},stop:function(e){this.session.stopped=e?kt:Ot},recognize:function(e){var t=this.session;if(!t.stopped){this.touchAction.preventDefaults(e);var n,r=this.recognizers,i=t.curRecognizer;(!i||i&&i.state&ht)&&(i=t.curRecognizer=null);for(var a=0;a<r.length;)n=r[a],t.stopped!==kt&&(!i||n==i||n.canRecognizeWith(i))?n.recognize(e):n.reset(),!i&&n.state&(ft|pt|mt)&&(i=t.curRecognizer=n),a++}},get:function(e){if(e instanceof H)return e;for(var t=this.recognizers,n=0;n<t.length;n++)if(t[n].options.event==e)return t[n];return null},add:function(e){if(d(e,`add`,this))return this;var t=this.get(e.options.event);return t&&this.remove(t),this.recognizers.push(e),e.manager=this,this.touchAction.update(),e},remove:function(e){if(d(e,`remove`,this))return this;if(e=this.get(e),e){var t=this.recognizers,n=E(t,e);n!==-1&&(t.splice(n,1),this.touchAction.update())}return this},on:function(e,t){if(e!==r&&t!==r){var n=this.handlers;return f(T(e),function(e){n[e]=n[e]||[],n[e].push(t)}),this}},off:function(e,t){if(e!==r){var n=this.handlers;return f(T(e),function(e){t?n[e]&&n[e].splice(E(n[e],t),1):delete n[e]}),this}},emit:function(e,t){this.options.domEvents&&Mt(e,t);var n=this.handlers[e]&&this.handlers[e].slice();if(!(!n||!n.length)){t.type=e,t.preventDefault=function(){t.srcEvent.preventDefault()};for(var r=0;r<n.length;)n[r](t),r++}},destroy:function(){this.element&&jt(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}};function jt(e,t){var n=e.element;if(n.style){var r;f(e.options.cssProps,function(i,a){r=k(n.style,a),t?(e.oldCssProps[r]=n.style[r],n.style[r]=i):n.style[r]=e.oldCssProps[r]||``}),t||(e.oldCssProps={})}}function Mt(e,n){var r=t.createEvent(`Event`);r.initEvent(e,!0,!0),r.gesture=n,n.target.dispatchEvent(r)}return m(Dt,{INPUT_START:R,INPUT_MOVE:ie,INPUT_END:z,INPUT_CANCEL:ae,STATE_POSSIBLE:dt,STATE_BEGAN:ft,STATE_CHANGED:pt,STATE_ENDED:mt,STATE_RECOGNIZED:ht,STATE_CANCELLED:V,STATE_FAILED:gt,DIRECTION_NONE:oe,DIRECTION_LEFT:se,DIRECTION_RIGHT:ce,DIRECTION_UP:le,DIRECTION_DOWN:ue,DIRECTION_HORIZONTAL:de,DIRECTION_VERTICAL:fe,DIRECTION_ALL:pe,Manager:At,Input:ge,TouchAction:ct,TouchInput:Ge,MouseInput:Ne,PointerEventInput:B,TouchMouseInput:Ye,SingleTouchInput:Ve,Recognizer:H,AttrRecognizer:bt,Tap:Et,Pan:xt,Swipe:Tt,Pinch:St,Rotate:wt,Press:Ct,on:x,off:S,each:f,merge:g,extend:h,assign:m,inherit:_,bindFn:v,prefixed:k}),Dt})(typeof window<`u`?window:{},typeof document<`u`?document:{},`Hammer`);function hw(e,t,n){if(n.isPerspectiveCamera){e.setFromCamera(t,n);return}if(n.isOrthographicCamera){let r=n.projectionMatrix.elements[14];e.ray.origin.set(t.x,t.y,r).unproject(n),e.ray.direction.set(0,0,-1).transformDirection(n.matrixWorld),e.camera=n;return}e.setFromCamera(t,n)}var gw=class e extends Bt{static parseArgs(t){return t instanceof e?t:Object.assign({},t)}static initAnimationEndState(e){var t,n,r,i,a,o,s,c;let l=this.parseArgs(e),{state:u,currentState:d}=l.initial,f=typeof u.panoIndex==`number`?{workCode:(r=(t=u.workCode)==null?(n=l.works[0])==null?void 0:n.workCode:t)==null?``:r,panoIndex:u.panoIndex}:{workCode:d.workCode,panoIndex:d.panoIndex};return Object.assign(Object.assign({},f),{mode:``,longitude:(i=u.longitude)==null?d.longitude:i,latitude:(a=u.latitude)==null?d.latitude:a,fov:(o=u.fov)==null?d.fov:o,offset:(s=u.offset)==null?d.offset:s,distance:(c=u.distance)==null?d.distance:c})}constructor(t){var n,r,i;super();let a=e.parseArgs(t);this.mode=``,this.pending=new Set,this.userAction=a.initial.userAction,this.destroyed=!1,this.fiveId=a.fiveId,this.scene=a.scene,this.modelScene=a.modelScene,this.xrCustomObjectsScene=a.xrCustomObjectsScene,this.helper=a.helper,this.camera=a.camera,this.renderer=a.renderer,this.viewport=a.viewport,this.element=a.element,this.enableWheel=a.enableWheel,this.enableHDR=a.enableHDR,this.works=a.works,this.imageOptions=a.imageOptions,this.videoTexture=a.videoTexture,this.extraElements=a.extraElements,this.initial=a.initial,this.currentPano=typeof this.initial.state.panoIndex==`number`?{workCode:(i=(n=this.initial.state.workCode)==null?(r=a.works[0])==null?void 0:r.workCode:n)==null?``:i,panoIndex:this.initial.state.panoIndex}:{workCode:this.initial.currentState.workCode,panoIndex:this.initial.currentState.panoIndex},this.needsRender=!0,this.cameraMotion=new Y({longitude:{value:this.camera.pose.longitude,circle:[0,Math.PI*2]},latitude:this.camera.pose.latitude,fov:this.camera.pose.fov}),this.inMomentumMovement=null,this.eventUnbinds=[a.element].concat(a.extraElements||[]).map(e=>this.bindEvents(e)),this.initAnimationIsReady=!1,this.pending.add(`init-animation`),this.initAnimationReady=new Promise(e=>{nu.shared.add(()=>{this.initAnimation().then(()=>{this.initAnimationIsReady=!0,this.pending.delete(`init-animation`),e()})},!0,0)})}updateConfiguration(e){return!0}destroy(){var e;this.stopMomentumMovement(),this.destroyed=!0,this.off(),this.cameraMotion.dispose();for(let e of this.eventUnbinds)e();this.panState=void 0,(e=this.pressState)==null||e.stop(),this.pressState=void 0}isReady(){return this.inMomentumMovement===null&&this.pending.size===0&&this.cameraMotion.ended===!0}bindExtraElement(e){for(let t of this.eventUnbinds)if(t.element===e)return;this.eventUnbinds.push(this.bindEvents(e))}unbindExtraElement(e){let t=[];for(let n of this.eventUnbinds)n.element===e?n():t.push(n);this.eventUnbinds=t}updateModel(e){this.needsRender=!0}updateWork(e,t,n,r){return this.works=e,this.userAction=r,!1}updateTime(e,t,...n){if(this.destroyed)return;let r={};this.cameraMotion.ended&&(this.cameraMotion.update(e),r.longitude=this.cameraMotion.value.longitude,r.latitude=this.cameraMotion.value.latitude,r.fov=this.cameraMotion.value.fov),ZC(r)&&this.setCamera(r)}render(){return!1}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={};return e.longitude!==void 0&&(r.longitude=e.longitude),e.latitude!==void 0&&(r.latitude=e.latitude),e.fov!==void 0&&(r.fov=e.fov),this.cameraMotion.set(r,t).catch(q)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.cameraMotion.setKeyframes(r,t)})}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(K())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance})}initAnimation(){let{state:t,currentState:n,duration:r,userAction:i}=this.initial,a=e.initAnimationEndState(this);return this.userAction=i,this.emit(`initAnimation.start`,$(`initAnimation.start`,{state:a,userAction:this.userAction})),this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:a,userAction:this.userAction})),Promise.resolve()}setCamera(e={}){var t,n,r,i,a;let o=(t=e.longitude)==null?this.camera.pose.longitude:t,s=(n=e.latitude)==null?this.camera.pose.latitude:n,c=(r=e.fov)==null?this.camera.pose.fov:r,l=(i=e.distance)==null?this.camera.pose.distance:i,u=(a=e.offset)==null?this.camera.pose.offset:a,d=RC(o,this.camera.pose.longitude,Math.PI*2)||RC(s,this.camera.pose.latitude),f=RC(c,this.camera.pose.fov),p=RC(l,this.camera.pose.distance),m=BC(u,this.camera.pose.offset);(f||d||m||p)&&(this.camera.setFromPose({longitude:o,latitude:s,fov:c,distance:l,offset:u}),this.emit(`camera.update`,$(`camera.update`,{userAction:this.userAction,state:Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:o,latitude:s,fov:c,offset:u,distance:l})})),this.needsRender=!0)}stopMomentumMovement(){if(this.inMomentumMovement&&this.inMomentumMovement.event&&!this.inMomentumMovement.event.defaultPrevented&&!this.inMomentumMovement.event.isFinal){let e=$(`gesture.momentum`,Object.assign(Object.assign({},this.inMomentumMovement.event),{isFirst:!1,isFinal:!0}));this.emit(`gesture.fire`,e),this.emit(`gesture.momentum`,e)}this.inMomentumMovement=null}onPanGesture(e){this.stopMomentumMovement(),this.emit(`gesture.pan`,e)}onTapGesture(e){this.stopMomentumMovement(),this.emit(`gesture.tap`,e)}onDblTapGesture(e){this.stopMomentumMovement(),this.emit(`gesture.dbltap`,e),!e.defaultPrevented&&(e.type=`gesture.tap`,this.onTapGesture(e))}onPressGesture(e){this.stopMomentumMovement(),this.emit(`gesture.press`,e)}onPinchGesture(e){this.stopMomentumMovement(),this.emit(`gesture.pinch`,e)}onMouseWheel(e){this.stopMomentumMovement(),this.emit(`gesture.mousewheel`,e)}onMouseMove(e){this.stopMomentumMovement(),this.emit(`gesture.mousemove`,e)}relativeClientPosition(e){let{top:t,left:n,width:r,height:i}=this.element.getBoundingClientRect();return n+=r*this.viewport.left,t+=i*(1-this.viewport.bottom-this.viewport.height),r*=this.viewport.width,i*=this.viewport.height,new l.Vector2((e.x-n)/r*2-1,-(e.y-t)/i*2+1)}createRaycasterFromCamera(e,t){let n=new l.Raycaster;return n.params.Points={threshold:.1},n.firstHitOnly=!0,n.near=t.near,n.far=t.far,hw(n,e,t),n}bindEvents(e){let t=e=>{let t=this.relativeClientPosition(e);return!(Math.abs(t.x)>1||Math.abs(t.y)>1)},n=e=>({button:`button`in e?e.button:0,buttons:`buttons`in e?e.buttons:0,shiftKey:`shiftKey`in e?e.shiftKey:!1,ctrlKey:`ctrlKey`in e?e.ctrlKey:!1,altKey:`altKey`in e?e.altKey:!1,metaKey:`metaKey`in e?e.metaKey:!1}),r=new mw.Manager(e),i=e=>e.session.firstInput||null,a=new mw.Pan({threshold:10,pointers:0}),o=new mw.Tap({interval:410}),s=new mw.Pinch({threshold:0,pointers:2});r.add([a,o,s]),r.on(`panstart pan`,e=>{let a=n(e.srcEvent),o=i(r);if(o&&!t(o.center))return;let s=$(`gesture.pan`,{target:e.target,pointerType:e.pointerType,srcEvent:e.srcEvent,pointers:e.pointers.map(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},a),{coords:t,raycaster:n})}),isFirst:e.isFirst,isFinal:e.isFinal,scale:e.scale,center:(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},a),{coords:t,raycaster:n})})(e.center),velocityX:e.velocityX,velocityY:e.velocityY,overallVelocityX:e.overallVelocityX,overallVelocityY:e.overallVelocityY,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),JC(this.camera.pose))});this.emit(`gesture.fire`,s),this.onPanGesture(s),v()}),r.on(`tap`,e=>{let a=n(e.srcEvent);if(e.pointerType===`mouse`&&a.button!==0)return;let o=i(r);if(o&&!t(o.center))return;let s=$(`gesture.tap`,{target:e.target,pointerType:e.pointerType,srcEvent:e.srcEvent,pointers:e.pointers.map(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},a),{coords:t,raycaster:n})}),isFirst:!0,isFinal:!0,scale:e.scale,center:(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},a),{coords:t,raycaster:n})})(e.center),velocityX:e.velocityX,velocityY:e.velocityY,overallVelocityX:e.overallVelocityX,overallVelocityY:e.overallVelocityY,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),JC(this.camera.pose))});this.emit(`gesture.fire`,s),this.onTapGesture(s),v()}),r.on(`pinchstart pinch pinchend`,e=>{let a=n(e.srcEvent),o=i(r);if(o&&!t(o.center))return;let s=$(`gesture.pinch`,{target:e.target,pointerType:e.pointerType,srcEvent:e.srcEvent,pointers:e.pointers.map(e=>{var t;let n=this.relativeClientPosition(e),r=new l.Raycaster;return r.params.Points={threshold:.1},hw(r,n,this.camera),Object.assign(Object.assign({x:e.x,y:e.y,delta:(t=e.delta)==null?0:t},a),{coords:n,raycaster:r})}),isFirst:e.type===`pinchstart`,isFinal:e.type===`pinchend`,scale:e.scale,center:(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},a),{coords:t,raycaster:n})})(e.center),velocityX:e.velocityX,velocityY:e.velocityY,overallVelocityX:e.overallVelocityX,overallVelocityY:e.overallVelocityY,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),JC(this.camera.pose))});this.emit(`gesture.fire`,s),this.onPinchGesture(s),v()}),r.on(`dbltap`,e=>{let a=n(e.srcEvent);if(e.pointerType===`mouse`&&a.button!==0)return;let o=i(r);if(o&&!t(o.center))return;let s=$(`gesture.dbltap`,{target:e.target,pointerType:e.pointerType,srcEvent:e.srcEvent,pointers:e.pointers.map(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},a),{coords:t,raycaster:n})}),isFirst:!0,isFinal:!0,scale:e.scale,center:(e=>{let t=this.relativeClientPosition(e),n=this.createRaycasterFromCamera(t,this.camera);return Object.assign(Object.assign({x:e.x,y:e.y,delta:0},a),{coords:t,raycaster:n})})(e.center),velocityX:e.velocityX,velocityY:e.velocityY,overallVelocityX:e.overallVelocityX,overallVelocityY:e.overallVelocityY,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),JC(this.camera.pose))});this.emit(`gesture.fire`,s),this.onDblTapGesture(s),v()});let c=null,u=null,d=(e,t,r)=>{let i={x:r.clientX,y:r.clientY},a=this.relativeClientPosition(i),o=this.createRaycasterFromCamera(a,this.camera),s=Object.assign(Object.assign(Object.assign(Object.assign({},i),{coords:a,raycaster:o}),n(r)),{delta:0}),c=e===`pinchend`?t:t-r.deltaY/280;return $(`gesture.pinch`,{target:r.target,pointerType:`mouse`,srcEvent:r,pointers:[Object.assign({},s)],isFirst:e===`pinchstart`,isFinal:e===`pinchend`,scale:U(c,.1,10),center:Object.assign({},s),velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),JC(this.camera.pose))})},f=e=>{var r;if(t({x:e.clientX,y:e.clientY})){if(e.preventDefault(),e.ctrlKey){let t=(r=c==null?void 0:c.prevEvent.scale)==null?1:r,n=d(c?`pinch`:`pinchstart`,t,e);this.emit(`gesture.fire`,n),c===null?c={firstEvent:n,prevEvent:n}:c.prevEvent=n,this.emit(`gesture.fire`,n),this.onPinchGesture(n),u!==null&&window.clearTimeout(u),u=window.setTimeout(()=>{var t;u=null;let n=d(`pinchend`,(t=c==null?void 0:c.prevEvent.scale)==null?1:t,e);this.emit(`gesture.fire`,n),c=null,this.onPinchGesture(n)},200)}else{let t=(Math.abs(e.deltaY)>Math.abs(e.deltaX)?e.deltaY:e.deltaX)/-60,r=this.mouseWheelState!==void 0,i={x:e.clientX,y:e.clientY},a=this.relativeClientPosition(i),o=this.createRaycasterFromCamera(a,this.camera),s=Object.assign(Object.assign(Object.assign(Object.assign({},i),{coords:a,raycaster:o}),n(e)),{delta:t}),c=$(`gesture.mousewheel`,{target:e.target,pointerType:`mouse`,srcEvent:e,pointers:[Object.assign({},s)],isFirst:r,isFinal:!1,scale:0,center:Object.assign({},s),velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),JC(this.camera.pose))});this.emit(`gesture.fire`,c),this.onMouseWheel(c),this.mouseWheelState&&clearTimeout(this.mouseWheelState.timer),this.mouseWheelState={timer:setTimeout(()=>{this.mouseWheelState=void 0;let t=$(`gesture.mousewheel`,{target:e.target,pointerType:`mouse`,srcEvent:e,pointers:[Object.assign(Object.assign({},s),{delta:0})],isFirst:!1,isFinal:!0,scale:0,center:Object.assign(Object.assign({},s),{delta:0}),velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),JC(this.camera.pose))});this.emit(`gesture.fire`,t),this.onMouseWheel(t)},100)}}v()}},p=e=>{if(WS)return;if(!t({x:e.clientX,y:e.clientY})){m();return}let r=!1;this.mouseMoveState||(r=!0);let i={x:e.clientX,y:e.clientY},a=this.relativeClientPosition(i),o=this.createRaycasterFromCamera(a,this.camera),s=Object.assign(Object.assign(Object.assign(Object.assign({},i),{coords:a,raycaster:o}),n(e)),{delta:0}),c=$(`gesture.mousemove`,{target:e.target,pointerType:`mouse`,srcEvent:e,pointers:[Object.assign({},s)],isFirst:r,isFinal:!1,scale:0,center:Object.assign({},s),velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),JC(this.camera.pose))});this.emit(`gesture.fire`,c),this.mouseMoveState={timeStamp:K(),event:c},this.onMouseMove(c),this.pressState&&Math.abs(e.clientX-this.pressState.event.center.y)>10&&Math.abs(e.clientY-this.pressState.event.center.y)>10&&v()},m=()=>{if(this.mouseMoveState){let e=$(this.mouseMoveState.event.type,Object.assign(Object.assign({},this.mouseMoveState.event),{isFinal:!0}));this.emit(`gesture.fire`,e),this.mouseMoveState=void 0,this.onMouseMove(e)}v()},h=e=>{if(!t(e.center)){v();return}let n=!1;this.pressState||(n=!0,this.pressState={event:e,timeStamp:K(),stop:q});let r=K()-this.pressState.timeStamp,i=$(this.pressState.event.type,Object.assign(Object.assign({},this.pressState.event),{isFirst:n,isFinal:!1,center:Object.assign(Object.assign({},this.pressState.event.center),{delta:r}),pointers:this.pressState.event.pointers.map(e=>Object.assign(Object.assign({},e),{delta:r}))}));this.emit(`gesture.fire`,i),this.onPressGesture(i),this.pressState&&(this.pressState.stop=nu.shared.add(t=>{h(e)},!0,1))},g=e=>{if(v(),e.touches.length>1||e.changedTouches.length<=0)return;let t={x:e.changedTouches[0].clientX,y:e.changedTouches[0].clientY},r=this.relativeClientPosition(t),i=this.createRaycasterFromCamera(r,this.camera),a=Object.assign(Object.assign(Object.assign(Object.assign({},t),{coords:r,raycaster:i}),n(e)),{delta:0}),o=$(`gesture.press`,{target:e.target,pointerType:`touch`,srcEvent:e,pointers:[Object.assign({},a)],isFirst:!1,isFinal:!1,scale:0,center:a,velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),JC(this.camera.pose))});this.emit(`gesture.fire`,o),h(o)},_=e=>{v();let t={x:e.clientX,y:e.clientY},r=this.relativeClientPosition(t),i=this.createRaycasterFromCamera(r,this.camera),a=Object.assign(Object.assign(Object.assign(Object.assign({},t),{coords:r,raycaster:i}),n(e)),{delta:0}),o=$(`gesture.press`,{target:e.target,pointerType:`mouse`,srcEvent:e,pointers:[Object.assign({},a)],isFirst:!1,isFinal:!1,scale:0,center:a,velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),JC(this.camera.pose))});this.emit(`gesture.fire`,o),h(o)},v=()=>{var e;if(this.pressState){let t=K()-this.pressState.timeStamp,n=$(this.pressState.event.type,Object.assign(Object.assign({},this.pressState.event),{center:Object.assign(Object.assign({},this.pressState.event.center),{delta:t}),isFirst:!1,isFinal:!0,pointers:this.pressState.event.pointers.map(e=>Object.assign(Object.assign({},e),{delta:t}))}));this.emit(`gesture.fire`,n),this.onPressGesture(n),(e=this.pressState)==null||e.stop(),this.pressState=void 0}},y=null,b=e=>{var t,r,i;let a=!1,o=!1;switch(e.type){case`gesturestart`:a=!0;break;case`gestureend`:o=!0;break;default:break}let s={x:(t=e.clientX)==null?0:t,y:(r=e.clientY)==null?0:r},c=this.relativeClientPosition(s),l=this.createRaycasterFromCamera(c,this.camera),u=Object.assign(Object.assign(Object.assign(Object.assign({},s),{coords:c,raycaster:l}),n(e)),{delta:0});return $(`gesture.pinch`,{target:e.target,pointerType:`mouse`,srcEvent:e,pointers:[Object.assign({},u)],isFirst:a,isFinal:o,scale:(i=e.scale)==null?1:i,center:Object.assign({},u),velocityX:0,velocityY:0,overallVelocityX:0,overallVelocityY:0,userAction:!0,state:Object.assign(Object.assign({mode:this.mode},this.currentPano),JC(this.camera.pose))})},x=e=>{if(e.preventDefault(),WS)return;let n=b(e);this.emit(`gesture.fire`,n),y={firstEvent:n};let r=y.firstEvent;r&&!t(r.center)||this.onPinchGesture(n)},S=e=>{if(e.preventDefault(),WS||!y)return;let n=y.firstEvent;if(n&&!t(n.center))return;let r=b(e);this.emit(`gesture.fire`,r),this.onPinchGesture(r)},C=e=>{if(e.preventDefault(),WS||!y)return;let n=y.firstEvent;if(y=null,n&&!t(n.center))return;let r=b(e);this.emit(`gesture.fire`,r),this.onPinchGesture(r)},w=t=>{if(t&&typeof t.preventDefault==`function`&&t.currentTarget===e&&t.preventDefault(),typeof getSelection==`function`){let e=getSelection();e&&e.focusNode&&(e.removeAllRanges&&e.removeAllRanges(),e.empty&&e.empty())}};return this.enableWheel&&e.addEventListener(`wheel`,f,{passive:!1}),e.addEventListener(`mousemove`,p,!1),e.addEventListener(`mouseout`,m,!1),e.addEventListener(`touchstart`,g,{passive:!0}),e.addEventListener(`touchend`,v,!1),e.addEventListener(`touchcancel`,v,!1),e.addEventListener(`mousedown`,_,!1),e.addEventListener(`mouseup`,v,!1),e.addEventListener(`gesturestart`,x,{passive:!1}),e.addEventListener(`gesturechange`,S,{passive:!1}),e.addEventListener(`gestureend`,C,{passive:!1}),e.addEventListener(`touchstart`,w,{passive:!1}),e.addEventListener(`contextmenu`,w,!1),Object.assign(()=>{r.destroy(),e.removeEventListener(`wheel`,f,!1),e.removeEventListener(`mousemove`,p,!1),e.removeEventListener(`mouseout`,m,!1),e.removeEventListener(`touchstart`,g,!1),e.removeEventListener(`touchend`,v,!1),e.removeEventListener(`touchcancel`,v,!1),e.removeEventListener(`mousedown`,_,!1),e.removeEventListener(`mouseup`,v,!1),e.removeEventListener(`gesturestart`,x,!1),e.removeEventListener(`gesturechange`,S,!1),e.removeEventListener(`gestureend`,C,!1),e.removeEventListener(`touchstart`,w,!1),e.removeEventListener(`contextmenu`,w,!1)},{element:e})}},_w=new l.CircleGeometry(.1,16),vw=(0,p.uv)(),yw=(0,p.vec2)(.5,.5).sub(vw).length(),bw=(0,p.float)(.01),xw=(0,p.float)(.49),Sw=(0,p.float)(.29),Cw=(0,p.float)(1).sub((0,p.smoothstep)(xw.sub(bw),xw,yw)),ww=(0,p.smoothstep)(Sw,Sw.add(bw),yw),Tw=(0,p.vec4)(.576,.635,1,.3),Ew=(0,p.vec4)(1,1,1,(0,p.abs)(yw.sub(xw.add(Sw).div(2))).div(xw.sub(Sw)).mul(1.5).add(.1).clamp(0,1)),Dw=(0,p.mix)(Tw,Ew,Ew.w),Ow=(0,p.vec4)(Dw.xyz,Dw.w.mul(Cw).mul(ww)),kw=new l.NodeMaterial;kw.fragmentNode=Ow,kw.side=l.DoubleSide,kw.blending=l.CustomBlending,kw.blendSrc=l.SrcAlphaFactor,kw.blendDst=l.OneMinusSrcAlphaFactor,kw.blendSrcAlpha=l.OneFactor,kw.blendDstAlpha=l.OneMinusSrcAlphaFactor,kw.depthWrite=!1,kw.transparent=!0;var Aw=class extends l.Object3D{constructor(){super(),this.ringMesh=new l.Mesh(_w,kw),this.ringMesh.position.z=.01,this.ringMesh.renderOrder=9999999999,this.add(this.ringMesh)}dispose(){this.remove(this.ringMesh)}},jw=new l.Box3,Mw=new l.Vector3,Nw={defaultLongitude:Math.PI/4,defaultLatitude:Math.PI/4,defaultFov:80,maxFov:120,minFov:20,maxLatitude:Math.PI/2,minLatitude:-Math.PI/2,intersectMeshCreator:()=>new Aw},Pw=class e extends gw{static distanceFromModel(e,t,n){let r=e.boundingBox,i=r.isEmpty()?10:Math.pow(Math.pow(r.max.x-r.min.x+1,2)+Math.pow(r.max.y-r.min.y+1,2)+Math.pow(r.max.z-r.min.z+1,2),1/2);i=isNaN(i)||!isFinite(i)?1:i;let a=i/2/Math.tan(Math.PI*t/360);return n<1&&(a/=n),isNaN(a)||!isFinite(a)?i:a}static parseArgs(t){var n,r,i,a,o,s,c,l;if(t instanceof e)return t;let u=super.parseArgs(t);return Object.assign(Object.assign({},u),{defaultLongitude:(n=t.defaultLongitude)==null?Nw.defaultLongitude:n,defaultLatitude:(r=t.defaultLatitude)==null?Nw.defaultLatitude:r,defaultFov:(i=t.defaultFov)==null?Nw.defaultFov:i,maxFov:(a=t.maxFov)==null?Nw.maxFov:a,minFov:(o=t.minFov)==null?Nw.minFov:o,maxLatitude:(s=t.maxLatitude)==null?Nw.maxLatitude:s,minLatitude:(c=t.minLatitude)==null?Nw.minLatitude:c,intersectMeshCreator:(l=t.intersectMeshCreator)==null?Nw.intersectMeshCreator:l})}static initAnimationEndState(t){var n,r,i,a,o,s,c;let u=this.parseArgs(t),{state:d,currentState:f}=t.initial,p=typeof d.panoIndex==`number`?{workCode:(i=(n=d.workCode)==null?(r=u.works[0])==null?void 0:r.workCode:n)==null?``:i,panoIndex:d.panoIndex}:{workCode:f.workCode,panoIndex:f.panoIndex},m=(a=d.fov)==null?u.defaultFov:a,h=(o=d.longitude)==null?YC(f.mode)?f.longitude:u.defaultLongitude:o,g=U(typeof u.minLatitude==`function`?u.minLatitude(m):u.minLatitude,-Math.PI/2,Math.PI/2),_=U(typeof u.maxLatitude==`function`?u.maxLatitude(m):u.maxLatitude,-Math.PI/2,Math.PI/2),v=U((s=d.latitude)==null?f.mode===`Floorplan`?f.latitude:u.defaultLatitude:s,g,_),y=d.offset?d.offset.clone():t.modelScene.boundingBox.getCenter(new l.Vector3),b=(c=d.distance)==null?e.distanceFromModel(u.modelScene,u.defaultFov,u.camera.aspect):c;return Object.assign(Object.assign({},p),{mode:`Floorplan`,longitude:h,latitude:v,fov:m,offset:y,distance:b})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Floorplan`,this.defaultLongitude=n.defaultLongitude,this.defaultLatitude=n.defaultLatitude,this.defaultFov=n.defaultFov,this.maxFov=n.maxFov,this.minFov=n.minFov,this.maxLatitude=n.maxLatitude,this.minLatitude=n.minLatitude,this.locationMotion=new Y({x:this.camera.pose.offset.x,y:this.camera.pose.offset.y,z:this.camera.pose.offset.z,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Y({modelAlpha:this.modelScene.parameter.resolveValue().modelAlpha}),this.perspToOrthoMotion=new Y({perspToOrtho:this.camera.perspToOrtho.x}),this.pendingTextureId=null,this.textureLoader=new mu,this.intersectMeshCreator=n.intersectMeshCreator,this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=`intersect`,this.intersectMesh.visible=!1,this.helper.add(this.intersectMesh)}updateConfiguration(e){if(super.updateConfiguration(e)===!1)return!1;if(e.defaultLongitude!==void 0&&this.defaultLongitude!==e.defaultLongitude&&(this.defaultLongitude=e.defaultLongitude),e.defaultLatitude!==void 0&&this.defaultLatitude!==e.defaultLatitude&&(this.defaultLatitude=e.defaultLatitude),e.defaultFov!==void 0&&this.defaultFov!==e.defaultFov&&(this.defaultFov=e.defaultFov),e.maxFov!==void 0&&this.maxFov!==e.maxFov&&(this.maxFov=e.maxFov),e.minFov!==void 0&&this.minFov!==e.minFov&&(this.minFov=e.minFov),e.maxLatitude!==void 0&&this.maxLatitude!==e.maxLatitude&&(this.maxLatitude=e.maxLatitude),e.minLatitude!==void 0&&this.minLatitude!==e.minLatitude&&(this.minLatitude=e.minLatitude),e.intersectMeshCreator!==void 0&&this.intersectMeshCreator!==e.intersectMeshCreator){this.intersectMeshCreator=e.intersectMeshCreator;let t=this.intersectMesh;this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=t.name,this.intersectMesh.visible=t.visible;let n=this.intersectMesh.parent;n&&n.add(this.intersectMesh),t.dispose()}return!0}destroy(){super.destroy(),this.pendingTextureId=null,this.locationMotion.dispose(),this.panState=void 0,this.intersectMesh.dispose(),this.helper.remove(this.intersectMesh)}isReady(){return this.locationMotion.ended===!1?!1:super.isReady()}updateWork(e,t,n,r){var i;return this.works=e,this.updateCamera(t,(i=n.duration)==null?0:i,r),!0}updateModel(t){super.updateModel(t);let n=t.boundingBox.getCenter(new l.Vector3),r=e.distanceFromModel(t,this.defaultFov,this.camera.aspect);this.updateCamera({offset:n,distance:r},0,!0)}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},i={};return e.distance!==void 0&&(r.distance=e.distance),e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(i.longitude=e.longitude),e.latitude!==void 0&&(i.latitude=e.latitude),e.fov!==void 0&&(i.fov=e.fov),this.locationMotion.set(r,t).catch(q),this.cameraMotion.set(i,t).catch(q)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],i=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:t.value.distance,x:t.value.offset.x,y:t.value.offset.x,z:t.value.offset.x}}),i.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(q),this.cameraMotion.setKeyframes(e,t)})}updateTime(e,t,...n){if(this.destroyed)return;let r={},i={};if(this.modelAlphaMotion.ended||(this.modelAlphaMotion.update(e),r.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.modelScene.parameter.modelAlpha===0&&this.modelScene.parameter.progress!==1){let{pano0:e,pano1:t}=this.modelScene.parameter;e&&e.map!==(t==null?void 0:t.map)&&e.map.dispose(),r.progress=1,r.pano0=r.pano1=t}if(this.perspToOrthoMotion.ended||(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(U(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended||(this.locationMotion.update(e),i.distance=this.locationMotion.value.distance,i.offset=new l.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z)),this.cameraMotion.ended||(this.cameraMotion.update(e),i.longitude=this.cameraMotion.value.longitude,i.latitude=this.cameraMotion.value.latitude,i.fov=this.cameraMotion.value.fov),ZC(r)||this.modelScene.parameter.set(r),ZC(i)||this.setCamera(i),this.intersectMesh&&this.intersectMesh.parent){let e=U(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1)}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(K())[1],t=this.locationMotion.getKeyFrameSegment(K())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:new l.Vector3(t.value.x,t.value.y,t.value.z),distance:t.value.distance})}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:i,userAction:a}=this.initial;this.userAction=a;let o=e.initAnimationEndState(this),s=pl(o,[`longitude`,`latitude`,`fov`]),c={x:o.offset.x,y:o.offset.y,z:o.offset.z,distance:o.distance};this.emit(`initAnimation.start`,$(`initAnimation.start`,{state:o,userAction:this.userAction})),this.modelAlphaMotion.set({modelAlpha:1},i/3).catch(q),this.perspToOrthoMotion.set({perspToOrtho:0},i).catch(q),this.cameraMotion.set(s,i).catch(q),this.locationMotion.set(c,i).then(()=>{this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:o,userAction:this.userAction}))},e=>{let t=Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),JC(this.camera.pose));this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:t,userAction:this.userAction}))}).then(()=>{t()})})}updateRenderSize(e){this.needsRender=!0}getForwardObserverOrNot(e){let[t]=this.modelScene.intersectRaycaster(e);if(!t)return null;let n=[];for(let t of this.works){let r=this.modelScene.models.find(e=>e.work===t);if(!(!r||r.visible===!1)&&!(t.observers.length<=0)&&(jw.copy(t.observerBox).expandByScalar(10).applyMatrix4(t.transform),jw.containsPoint(e.ray.origin)||e.ray.intersectsBox(jw)))for(let e of t.observers)n.push(e)}let[r,i]=em(n,e=>Mw.copy(e.standingPosition).applyMatrix4(e.work.transform).distanceTo(t.point),!0);return r&&i<Math.max(r.standingPosition.distanceTo(this.camera.position)/5,10)?r:null}coordinatesForOffset(e){let t=this.renderer.getSize(new l.Vector2);return{longitude:-2*e.x/(t.x*this.viewport.width),latitude:2*e.y/(t.y*this.viewport.height)}}requestMomentumMovement(e,t,n,r){if(this.inMomentumMovement===null)return;r=Math.max(r,1);let i=Object.assign({},n),a={longitude:0,latitude:0};for(let e=0;e<r;e++)i.longitude*=.996,i.latitude*=.996*.998,a.longitude+=i.longitude,a.latitude+=i.latitude;let o=ma(this.cameraMotion.value.longitude+a.longitude),s=this.cameraMotion.value.fov,c=U(typeof this.minLatitude==`function`?this.minLatitude(s):this.minLatitude,-Math.PI/2,Math.PI/2),l=U(typeof this.maxLatitude==`function`?this.maxLatitude(s):this.maxLatitude,-Math.PI/2,Math.PI/2),u=U(this.cameraMotion.value.latitude+a.latitude,c,l),d=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:o,latitude:u,fov:this.cameraMotion.value.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance}),f=!(i.longitude>1e-4||i.longitude<-1e-4||i.latitude>1e-4||i.latitude<-1e-4),p=$(`gesture.momentum`,Object.assign(Object.assign({},e),{isFirst:t,isFinal:f,state:d}));if(this.emit(`gesture.fire`,p),this.inMomentumMovement.event=p,this.emit(`gesture.momentum`,p),e.defaultPrevented){this.inMomentumMovement=null;return}this.inMomentumMovement&&(this.cameraMotion.set({longitude:o,latitude:u},0).catch(q),f?this.inMomentumMovement=null:nu.shared.add((t,n)=>{this.requestMomentumMovement(e,!1,i,n)},!0))}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=this.panState,n=e.pointers.length;if(e.isFinal?this.panState=void 0:this.panState={pointerLength:n,x:e.center.x,y:e.center.y},t===void 0||t.pointerLength!==n)return;let r={x:e.center.x-t.x,y:e.center.y-t.y},i=this.relativeClientPosition(e.center),a=1,o=this.camera.pose.latitude;Math.abs(o)>Math.PI/6&&(a=o<0?i.y<0?-1:1:i.y>0?-1:1),r.x*=a;let s=this.coordinatesForOffset(r),c=ma(this.cameraMotion.value.longitude+s.longitude),l=this.camera.pose.fov,u=U(typeof this.minLatitude==`function`?this.minLatitude(l):this.minLatitude,-Math.PI/2,Math.PI/2),d=U(typeof this.maxLatitude==`function`?this.maxLatitude(l):this.maxLatitude,-Math.PI/2,Math.PI/2),f=U(this.cameraMotion.value.latitude+s.latitude,u,d);this.camera.aspect<1&&Math.abs(e.overallVelocityX)>.2&&Math.atan2(Math.abs(e.overallVelocityY),Math.abs(e.overallVelocityX))<Math.PI/6.923&&(f=this.cameraMotion.value.latitude);let p=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:c,latitude:f,fov:l,offset:this.camera.pose.offset,distance:this.camera.pose.distance});if(e.state=p,this.emit(`gesture.pan`,e),!e.defaultPrevented&&(this.cameraMotion.set({longitude:p.longitude,latitude:p.latitude},0).catch(q),e.isFinal)){let t=e.velocityX*a,n=e.velocityY;this.inMomentumMovement={uuid:Ft()},this.requestMomentumMovement(e,!0,this.coordinatesForOffset({x:t,y:n}),0)}}onPinchGesture(e){var t;if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let n=(t=this.pinchState)==null?void 0:t.fov;if(e.isFirst){this.pinchState={x:e.center.x,y:e.center.y,fov:this.cameraMotion.value.fov};return}if(e.isFinal&&(this.panState=void 0,this.pinchState=void 0),n===void 0)return;let r=U(n/e.scale,this.minFov,this.maxFov),i=U(typeof this.minLatitude==`function`?this.minLatitude(r):this.minLatitude,-Math.PI/2,Math.PI/2),a=U(typeof this.maxLatitude==`function`?this.maxLatitude(r):this.maxLatitude,-Math.PI/2,Math.PI/2),o=U(this.cameraMotion.value.latitude,i,a);e.state.fov=r,e.state.latitude=o,this.emit(`gesture.pinch`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:r,latitude:o},0).catch(q),this.onPanGesture(e))}onMouseMove(e){var t,n;if(!this.intersectMesh.parent||this.panState)return;if(this.emit(`gesture.mousemove`,e),e.defaultPrevented){this.hideIntersectMesh();return}let r=e.center.raycaster;if(e.isFinal&&this.intersectMesh.parent&&this.intersectMesh.visible===!0){this.hideIntersectMesh();return}let[i]=this.modelScene.intersectRaycaster(r),a=$(`intersect.update`,{raycaster:r,intersection:i==null?null:i,object:this.intersectMesh});if(this.emit(`intersect.update`,a),a.defaultPrevented){this.hideIntersectMesh();return}if(i){let e=(n=(t=i.face)==null?void 0:t.normal)==null?new l.Vector3().copy(r.ray.direction).multiplyScalar(-1):n,a=e.clone(),o=i.point.clone();this.intersectMesh.position.copy(o);let s=o.clone().add(a);if(this.intersectMesh.lookAt(s),Math.abs(e.y)>.99){let e=this.camera.position.clone().sub(o);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0}else this.hideIntersectMesh()}onMouseWheel(e){if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let{minFov:t,maxFov:n}=this,r=U(this.camera.fov-e.center.delta,t,n),i=U(typeof this.minLatitude==`function`?this.minLatitude(r):this.minLatitude,-Math.PI/2,Math.PI/2),a=U(typeof this.maxLatitude==`function`?this.maxLatitude(r):this.maxLatitude,-Math.PI/2,Math.PI/2),o=U(this.cameraMotion.value.latitude,i,a);e.state.fov=r,e.state.latitude=o,this.emit(`gesture.mousewheel`,e),!e.defaultPrevented&&this.cameraMotion.set({fov:r,latitude:o},0).catch(q)}onTapGesture(e){var t;this.userAction=e.userAction,this.stopMomentumMovement();let n=e.center.raycaster,r=this.getForwardObserverOrNot(n);if(!r)this.emit(`gesture.tap`,e);else{let n={longitude:this.camera.pose.longitude,latitude:0},i=Object.assign(Object.assign({},e.state),{mode:`Panorama`,workCode:r.work.workCode,panoIndex:r.panoIndex,longitude:n.longitude,latitude:n.latitude,offset:r?r.position.clone():new l.Vector3,distance:0});if(e.state=i,this.emit(`gesture.tap`,e),!e.defaultPrevented&&(this.emit(`pano.select`,$(`pano.select`,{prevPano:this.currentPano,state:i,userAction:e.userAction,options:n,progress:0,error:null})),r&&r.active)){let e=this.pendingTextureId=Ft(),a=mb({panoIndex:r.panoIndex,workCode:r.work.workCode}),o=this.imageOptions.transform,s=Object.assign({key:`pano.${a}`},pl(this.imageOptions,[`format`,`size`,`quality`,`sharpen`,`forceUseExifOrientation`,`mappings`])),c={right:r.images.work.getURL(r.images.right),left:r.images.work.getURL(r.images.left),up:r.images.work.getURL(r.images.up),down:r.images.work.getURL(r.images.down),front:r.images.work.getURL(r.images.front),back:r.images.work.getURL(r.images.back)},d,f,p=this.enableHDR?r.images.gainmap:void 0;p&&(d={right:r.images.work.getURL(p.right),left:r.images.work.getURL(p.left),up:r.images.work.getURL(p.up),down:r.images.work.getURL(p.down),front:r.images.work.getURL(p.front),back:r.images.work.getURL(p.back)},f=r.images.work.getURL(p.cfg));let m=`pano:`+fb([c,d,s]),h=this.modelScene.parameter,g;if(h.pano0&&h.pano0.map.name===m?g=h.pano0:h.pano1&&h.pano1.map.name===m&&(g=h.pano1),g)h.pano0&&h.pano0.map!==g.map&&h.pano0.map.dispose(),h.pano1&&h.pano1.map!==g.map&&h.pano1.map!==((t=h.pano0)==null?void 0:t.map)&&h.pano1.map.dispose(),h.set({pano0:g,pano1:g}),this.emit(`pano.request`,$(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:i,options:n,error:null}));else{let t=this.textureLoader.loadCubeTexture(c,{imageURL:{transform:o,options:s},format:l.RGBAFormat,viaAjax:!0,fetcher:gy(this.fiveId,r.work)},void 0,void 0,void 0,this.renderer),p=f&&d?Promise.all([gy(this.fiveId,r.work).ajax(f,{responseType:`text`}).then(e=>Wt(JSON.parse(e.body))),this.textureLoader.loadCubeTexture(d,{imageURL:{transform:o,options:s},format:l.RGBAFormat,colorSpace:l.NoColorSpace,viaAjax:!0,fetcher:gy(this.fiveId,r.work)},void 0,void 0,void 0,this.renderer)]).then(([e,t])=>({config:e,map:t.body})):Promise.resolve(void 0);Promise.all([t,p]).then(t=>(0,u.__awaiter)(this,[t],void 0,function*([t,o]){var s,c;let{body:u}=t;if(this.destroyed||this.pendingTextureId!==e){u.dispose();return}this.pendingTextureId=null,u.name=m;let d=Array.isArray(u.image)?u.image[0]:u.image,f=(s=d==null?void 0:d.width)==null?2048:s,p=yield pw(this.renderer,u,!0,Tx),g=new kx().formPixels(p.data),_={panoId:a,map:u,mapSize:f,mapHistogram:new l.Vector4().fromArray(g.toArray()),matrix:r.matrix.clone().premultiply(r.work.transform),zoom:1,gainmap:o?{map:o.map,cfg:o.config}:void 0};h.pano0&&h.pano0.map.dispose(),h.pano1&&h.pano1.map!==((c=h.pano0)==null?void 0:c.map)&&h.pano1.map.dispose(),h.set({pano0:_,pano1:_}),this.emit(`pano.request`,$(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:i,options:n,error:null}))})).catch(t=>{this.destroyed||this.pendingTextureId!==e||(this.pendingTextureId=null)})}}}}onDblTapGesture(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=this.cameraMotion.value.fov,n=this.minFov-t<t-this.defaultFov?this.minFov:this.defaultFov;e.state.fov=n,this.emit(`gesture.dbltap`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:n},360).catch(q),this.hideIntersectMesh())}hideIntersectMesh(){this.intersectMesh.visible=!1,this.needsRender=!0}},Fw=Object.assign(Object.assign({},ml(Nw,[`defaultLongitude`,`defaultLatitude`,`maxLatitude`,`minLatitude`])),{defaultLongitude:0,defaultLatitude:Math.PI/2}),Iw=class e extends Pw{static parseArgs(t){var n,r;if(t instanceof e)return t;let i=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2,defaultLongitude:(n=t.defaultLongitude)==null?Fw.defaultLongitude:n,defaultLatitude:(r=t.defaultLatitude)==null?Fw.defaultLatitude:r});return super.parseArgs(i)}static initAnimationEndState(e){var t,n;let r=this.parseArgs(e),i=super.initAnimationEndState(Object.assign(Object.assign({},r),{initial:Object.assign(Object.assign({},r.initial),{state:Object.assign(Object.assign({},r.initial.state),{longitude:(t=r.initial.state.longitude)==null?r.defaultLongitude:t,latitude:(n=r.initial.state.latitude)==null?r.defaultLatitude:n})})}));return Object.assign(Object.assign({},i),{mode:`Topview`})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Topview`}updateConfiguration(e){return super.updateConfiguration(Object.assign({},e))}updateModel(e){this.needsRender=!0;let t=this.modelScene.boundingBox.getCenter(new l.Vector3);this.locationMotion.set({x:t.x,y:t.y,z:t.z,distance:Pw.distanceFromModel(this.modelScene,this.defaultFov,this.camera.aspect)},0).catch(q),this.hideIntersectMesh()}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},i={};return e.distance!==void 0&&(r.distance=e.distance),e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(i.longitude=e.longitude),e.latitude!==void 0&&(i.latitude=e.latitude),e.fov!==void 0&&(i.fov=e.fov),this.locationMotion.set(r,t).catch(q),this.cameraMotion.set(i,t).catch(q)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],i=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:t.value.distance,x:t.value.offset.x,y:t.value.offset.y,z:t.value.offset.z}}),i.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(q),this.cameraMotion.setKeyframes(e,t)})}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:i,userAction:a}=this.initial;this.userAction=a;let o=e.initAnimationEndState(this),s={longitude:o.longitude,latitude:o.latitude,fov:o.fov},c={x:o.offset.x,y:o.offset.y,z:o.offset.z,distance:o.distance};this.emit(`initAnimation.start`,$(`initAnimation.start`,{state:o,userAction:this.userAction})),this.modelAlphaMotion.set({modelAlpha:1},i/3).catch(q),this.perspToOrthoMotion.set({perspToOrtho:1},i).catch(q),this.cameraMotion.set(s,i).catch(q),this.locationMotion.set(c,i).then(()=>{this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:o,userAction:this.userAction}))},e=>{let t=Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),JC(this.camera.pose));this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:t,userAction:this.userAction}))}).then(()=>{t()})})}requestMomentumMovement(){this.inMomentumMovement=null}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=this.panState,n=e.pointers.length;if(e.isFinal?this.panState=void 0:this.panState={pointerLength:n,x:e.center.x,y:e.center.y},t===void 0||t.pointerLength!==n)return;let r={x:e.center.x-t.x,y:e.center.y-t.y},i=new l.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),a=this.locationMotion.value.distance;a*=Math.tan(this.cameraMotion.value.fov/2*Math.PI/180);let o=this.renderer.getSize(new l.Vector2),s=2*r.x*a/o.y,c=2*r.y*a/o.y,u=new l.Vector3;u.setFromMatrixColumn(this.camera.matrix,0),u.multiplyScalar(-s),i.add(u),u.setFromMatrixColumn(this.camera.matrix,1),u.multiplyScalar(c),i.add(u);let d=this.modelScene.boundingBox.getCenter(new l.Vector3),f=this.modelScene.boundingBox.getSize(new l.Vector3),p=Math.max(f.x,f.y,f.z)/2;i.clamp(d.clone().sub(new l.Vector3().setScalar(p)),d.clone().add(new l.Vector3().setScalar(p))),e.state=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:0,latitude:Math.PI/2,fov:this.cameraMotion.value.fov,offset:i,distance:this.locationMotion.value.distance}),this.emit(`gesture.pan`,e),!e.defaultPrevented&&this.locationMotion.set({x:i.x,y:i.y,z:i.z},0).catch(q)}onPinchGesture(e){var t;if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let n=(t=this.pinchState)==null?void 0:t.fov;if(e.isFirst){this.pinchState={x:e.center.x,y:e.center.y,fov:this.cameraMotion.value.fov};return}if(e.isFinal&&(this.pinchState=void 0),n===void 0)return;let r=U(n/e.scale,this.minFov,this.maxFov);e.state.fov=r,this.emit(`gesture.pinch`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:r},0).catch(q),e.type=`gesture.pan`,this.onPanGesture(e))}onMouseWheel(e){if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let t=U(this.cameraMotion.value.fov-e.center.delta,this.minFov,this.maxFov);e.state.fov=t,this.emit(`gesture.mousewheel`,e),!e.defaultPrevented&&this.cameraMotion.set({fov:t},0).catch(q)}},Lw={defaultLatitude:0,defaultFov:90,maxFov:120,minFov:20,maxLatitude:e=>Math.PI/2-e/2/180*Math.PI,minLatitude:e=>-Math.PI/2+e/2/180*Math.PI,moveSpeed:3.6,intersectMeshCreator:()=>new Aw,aerialObserverMinHeight:5},Rw=class e extends gw{static parseArgs(t){var n,r,i,a,o,s,c,l,u;if(t instanceof e)return t;let d=super.parseArgs(t);return Object.assign(Object.assign({},d),{defaultLatitude:(n=t.defaultLatitude)==null?Lw.defaultLatitude:n,defaultFov:(r=t.defaultFov)==null?Lw.defaultFov:r,maxFov:(i=t.maxFov)==null?Lw.maxFov:i,minFov:(a=t.minFov)==null?Lw.minFov:a,maxLatitude:(o=t.maxLatitude)==null?Lw.maxLatitude:o,minLatitude:(s=t.minLatitude)==null?Lw.minLatitude:s,moveSpeed:(c=t.moveSpeed)==null?Lw.moveSpeed:c,intersectMeshCreator:(l=t.intersectMeshCreator)==null?Lw.intersectMeshCreator:l,aerialObserverMinHeight:(u=t.aerialObserverMinHeight)==null?Lw.aerialObserverMinHeight:u})}static initAnimationEndState(e){var t,n,r,i,a,o;let s=this.parseArgs(e),c=s.works,{state:u,currentState:d}=e.initial,f=typeof u.panoIndex==`number`?{workCode:(r=(t=u.workCode)==null?(n=s.works[0])==null?void 0:n.workCode:t)==null?``:r,panoIndex:u.panoIndex}:{workCode:d.workCode,panoIndex:d.panoIndex},p=c.getObserver(f),m=U((i=u.fov)==null?XC(d.mode)?d.fov:s.defaultFov:i,s.minFov,s.maxFov),h=(a=u.longitude)==null?d.longitude:a,g=U(typeof s.minLatitude==`function`?s.minLatitude(m):s.minLatitude,-Math.PI/2,Math.PI/2),_=U(typeof s.maxLatitude==`function`?s.maxLatitude(m):s.maxLatitude,-Math.PI/2,Math.PI/2),v=U((o=u.latitude)==null?XC(d.mode)?d.latitude:s.defaultLatitude:o,g,_),y=new l.Vector3;return p&&y.copy(p.position).applyMatrix4(p.work.transform),{workCode:f.workCode,panoIndex:f.panoIndex,mode:`PanoramaLike`,longitude:h,latitude:v,fov:m,offset:y,distance:0}}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`PanoramaLike`,this.defaultLatitude=n.defaultLatitude,this.defaultFov=n.defaultFov,this.maxFov=n.maxFov,this.minFov=n.minFov,this.maxLatitude=n.maxLatitude,this.minLatitude=n.minLatitude,this.moveSpeed=n.moveSpeed,this.intersectMeshCreator=n.intersectMeshCreator,this.aerialObserverMinHeight=n.aerialObserverMinHeight,this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=`intersect`,this.intersectMesh.visible=!1,this.helper.add(this.intersectMesh)}updateConfiguration(e){if(super.updateConfiguration(e)===!1)return!1;if(e.defaultLatitude!==void 0&&this.defaultLatitude!==e.defaultLatitude&&(this.defaultLatitude=e.defaultLatitude),e.maxLatitude!==void 0&&this.maxLatitude!==e.maxLatitude&&(this.maxLatitude=e.maxLatitude),e.minLatitude!==void 0&&this.minLatitude!==e.minLatitude&&(this.minLatitude=e.minLatitude),e.defaultFov!==void 0&&this.defaultFov!==e.defaultFov&&(this.defaultFov=e.defaultFov),e.maxFov!==void 0&&this.maxFov!==e.maxFov&&(this.maxFov=e.maxFov),e.minFov!==void 0&&this.minFov!==e.minFov&&(this.minFov=e.minFov),e.moveSpeed!==void 0&&this.moveSpeed!==e.moveSpeed&&(this.moveSpeed=e.moveSpeed),e.intersectMeshCreator!==void 0&&this.intersectMeshCreator!==e.intersectMeshCreator){this.intersectMeshCreator=e.intersectMeshCreator;let t=this.intersectMesh;this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=t.name,this.intersectMesh.visible=t.visible;let n=this.intersectMesh.parent;n&&n.add(this.intersectMesh),t.dispose()}return e.aerialObserverMinHeight!==void 0&&this.aerialObserverMinHeight!==e.aerialObserverMinHeight&&(this.aerialObserverMinHeight=e.aerialObserverMinHeight),!0}destroy(){super.destroy(),this.intersectMesh&&(this.helper.remove(this.intersectMesh),this.intersectMesh.dispose()),this.panState=void 0}isReady(){return this.panState||this.pinchState?!1:super.isReady()}calculateMovingDuration(e,t){switch(typeof e){case`function`:return e(t,this.moveSpeed);case`number`:return e;case`string`:return Number(e);default:return U(t,2,5)/this.moveSpeed*1e3}}hideIntersectMesh(){this.intersectMesh.visible=!1,this.needsRender=!0}coordinatesForOffset(e){let t=this.cameraMotion.value.fov,n=this.camera.aspect,r=this.renderer.getSize(new l.Vector2);return{longitude:2*e.x/(r.x*this.viewport.width)*t/95*n,latitude:-2*e.y/(r.y*this.viewport.height)*t/95}}cameraBounce(){let{longitude:e,latitude:t,fov:n}=this.cameraMotion.value,r=[{progress:0,value:{longitude:e,latitude:t,fov:n}},{progress:.5,value:{longitude:e,latitude:t,fov:n*.98}},{progress:1,value:{longitude:e,latitude:t,fov:n}}];this.cameraMotion.setKeyframes(r,500).catch(q)}requestMomentumMovement(e,t,n,r){if(this.inMomentumMovement===null)return;r=Math.max(r,1);let i=Object.assign({},n),a={longitude:0,latitude:0};for(let e=0;e<r;e++)i.longitude*=.996,i.latitude*=.996*.99,a.longitude+=i.longitude,a.latitude+=i.latitude;let o=this.cameraMotion.value.fov,s=ma(this.cameraMotion.value.longitude+a.longitude),c=U(typeof this.minLatitude==`function`?this.minLatitude(o):this.minLatitude,-Math.PI/2,Math.PI/2),l=U(typeof this.maxLatitude==`function`?this.maxLatitude(o):this.maxLatitude,-Math.PI/2,Math.PI/2),u=U(this.cameraMotion.value.latitude+a.latitude,c,l),d=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:s,latitude:u,fov:o,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance}),f=!(i.longitude>1e-4||i.longitude<-1e-4||i.latitude>1e-4||i.latitude<-1e-4),p=$(`gesture.momentum`,Object.assign(Object.assign({},e),{isFirst:t,isFinal:f,state:d}));if(this.emit(`gesture.fire`,p),this.inMomentumMovement.event=p,this.emit(`gesture.momentum`,p),e.defaultPrevented){this.inMomentumMovement=null;return}this.inMomentumMovement&&(this.cameraMotion.set({longitude:s,latitude:u},0).catch(q),f?this.inMomentumMovement=null:nu.shared.add((t,n)=>{this.requestMomentumMovement(e,!1,i,n)},!0))}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=this.panState,n=e.pointers.length;if(e.isFinal?this.panState=void 0:this.panState={pointerLength:n,x:e.center.x,y:e.center.y},t===void 0||t.pointerLength!==n)return;let r={x:e.center.x-t.x,y:e.center.y-t.y},i=this.coordinatesForOffset(r),a=ma(this.cameraMotion.value.longitude+i.longitude),o=this.cameraMotion.value.fov,s=U(typeof this.minLatitude==`function`?this.minLatitude(o):this.minLatitude,-Math.PI/2,Math.PI/2),c=U(typeof this.maxLatitude==`function`?this.maxLatitude(o):this.maxLatitude,-Math.PI/2,Math.PI/2),l=U(this.cameraMotion.value.latitude+i.latitude,s,c);this.camera.aspect<1&&Math.abs(e.overallVelocityX)>.2&&Math.atan2(Math.abs(e.overallVelocityY),Math.abs(e.overallVelocityX))<Math.PI/6.923&&(l=this.cameraMotion.value.latitude);let u=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:a,latitude:l,fov:o,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance});if(e.state=u,this.emit(`gesture.pan`,e),e.defaultPrevented)return;let d={longitude:u.longitude,latitude:u.latitude,fov:u.fov};if(this.cameraMotion.set(d,0).catch(q),e.isFinal){let t=e.velocityX,n=e.velocityY*.6;Math.abs(n)>.5&&Math.abs(t)<.5&&(t=0),this.inMomentumMovement={uuid:Ft()},this.requestMomentumMovement(e,!0,this.coordinatesForOffset({x:t,y:n}),0)}}onPinchGesture(e){var t;this.userAction=e.userAction,this.stopMomentumMovement();let n=(t=this.pinchState)==null?void 0:t.fov,r=e.scale;if(e.isFirst){this.pinchState={x:e.center.x,y:e.center.y,fov:this.cameraMotion.value.fov};return}if(e.isFinal&&(this.pinchState=void 0),n===void 0)return;let i=U(n/r,this.minFov,this.maxFov),a=U(typeof this.minLatitude==`function`?this.minLatitude(i):this.minLatitude,-Math.PI/2,Math.PI/2),o=U(typeof this.maxLatitude==`function`?this.maxLatitude(i):this.maxLatitude,-Math.PI/2,Math.PI/2),s=U(this.cameraMotion.value.latitude,a,o);e.state.fov=i,e.state.latitude=s,this.emit(`gesture.pinch`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:i,latitude:s},0).catch(q),e.type=`gesture.pan`,this.onPanGesture(e))}onMouseWheel(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=U(this.cameraMotion.value.fov-e.center.delta,this.minFov,this.maxFov),n=U(typeof this.minLatitude==`function`?this.minLatitude(t):this.minLatitude,-Math.PI/2,Math.PI/2),r=U(typeof this.maxLatitude==`function`?this.maxLatitude(t):this.maxLatitude,-Math.PI/2,Math.PI/2),i=U(this.cameraMotion.value.latitude,n,r);e.state.fov=t,e.state.latitude=i,this.emit(`gesture.mousewheel`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:t,latitude:i},0).catch(q),this.onMouseMove(e))}onMouseMove(e){var t,n;if(!this.intersectMesh.parent||this.panState||(this.emit(`gesture.mousemove`,e),e.defaultPrevented))return;let r=e.center.raycaster;if(e.isFinal&&this.intersectMesh.parent){this.hideIntersectMesh();return}r.floorIndex=-1;let[i]=this.modelScene.intersectRaycaster(r),a=$(`intersect.update`,{raycaster:r,intersection:i==null?null:i,object:this.intersectMesh});if(this.emit(`intersect.update`,a),a.defaultPrevented){this.hideIntersectMesh();return}if(i){let e=(n=(t=i.face)==null?void 0:t.normal)==null?new l.Vector3().copy(r.ray.direction).multiplyScalar(-1):n,a=e.clone(),o=i.point.clone();this.intersectMesh.position.copy(o);let s=o.clone().add(a);if(this.intersectMesh.lookAt(s),Math.abs(e.y)>.99){let e=this.camera.position.clone().sub(o);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0}else this.hideIntersectMesh()}onDblTapGesture(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=this.cameraMotion.value.fov,n=2,r=this.works.getObserver(this.currentPano);if(r){let e=r.images.tiles;e&&e.length&&(n=Math.max(...e.map(e=>e.level)))}let i=Math.max(40-n*5,this.minFov,5),a=i-t<t-this.defaultFov?i:this.defaultFov;e.state.fov=a,this.emit(`gesture.dbltap`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:a},360).catch(q),this.hideIntersectMesh())}},zw=`data:video/mp4;base64,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`,Bw;function Vw(){return Bw||(Bw=new Promise(e=>{let t,n=document.createElement(`video`);n.muted=!0,n.src=zw,n.addEventListener(`timeupdate`,function r(){n.removeEventListener(`timeupdate`,r,!1),clearTimeout(t);let i=document.createElement(`canvas`);i.width=i.height=1;let a=i.getContext(`2d`);if(!a){e(!1);return}a.drawImage(n,0,0,1,1);let{data:o}=a.getImageData(0,0,1,1);o[3]>10?e(!0):e(!1)},!1),n.addEventListener(`canplay`,function e(){n.removeEventListener(`canplay`,e,!1),n.play()},!1),t=window.setTimeout(()=>e(!1),1e3)}))}var Hw=[`right`,`left`,`up`,`down`,`front`,`back`];function Uw(e,t,n,r){let i=new l.Box3;switch(e){case`up`:i.min.y=.5,i.max.y=.5,i.min.x=t-.5,i.max.x=t-.5+r,i.min.z=-n+.5-r,i.max.z=-n+.5;break;case`down`:i.min.y=-.5,i.max.y=-.5,i.min.x=t-.5,i.max.x=t-.5+r,i.min.z=n-.5,i.max.z=n-.5+r;break;case`left`:i.min.x=-.5,i.max.x=-.5,i.min.z=-t+.5-r,i.max.z=-t+.5,i.min.y=-n+.5-r,i.max.y=-n+.5;break;case`right`:i.min.x=.5,i.max.x=.5,i.min.z=t-.5,i.max.z=t-.5+r,i.min.y=-n+.5-r,i.max.y=-n+.5;break;case`front`:i.min.z=-.5,i.max.z=-.5,i.min.x=t-.5,i.max.x=t-.5+r,i.min.y=-n+.5-r,i.max.y=-n+.5;break;case`back`:i.min.z=.5,i.max.z=.5,i.min.x=-t+.5-r,i.max.x=-t+.5,i.min.y=-n+.5-r,i.max.y=-n+.5;break;default:break}return i.applyMatrix4(new l.Matrix4().makeRotationY(Math.PI))}var Ww=(e,t)=>{if(e.level>=t)return;let n=e.level+1,r=e.size/2,i=[new l.Vector2(e.position.x,e.position.y),new l.Vector2(e.position.x+r,e.position.y),new l.Vector2(e.position.x,e.position.y+r),new l.Vector2(e.position.x+r,e.position.y+r)];for(let a of i){let i={face:e.face,level:n,size:r,position:a,box:Uw(e.face,a.x,a.y,r),parent:e,children:[]};e.children.push(i),Ww(i,t)}};function Gw(e,t){let n={level:0,face:e,position:new l.Vector2(0,0),size:1,box:Uw(e,0,0,1),parent:null,children:[]};return Ww(n,t),n}function Kw(e){return{children:Hw.map(t=>Gw(t,e)),maxLevel:e}}function qw(e,t){for(let n of e.children)t(n)!==!1&&qw(n,t)}var Jw,Yw=new l.Vector3,Xw=new l.Quaternion,Zw=new l.Matrix4,Qw=new l.Matrix4,$w=new l.Matrix4,eT=new l.Matrix4,tT=new l.Matrix4,nT=new l.Quaternion,rT=new l.Matrix4,iT=0,aT=new l.Color,oT=(Jw=Math.SQRT1_2)==null?Math.sqrt(2):Jw,sT={up:new l.Quaternion(oT,0,0,oT),down:new l.Quaternion(-oT,0,0,oT),left:new l.Quaternion(0,oT,0,oT),right:new l.Quaternion(0,-oT,0,oT),front:new l.Quaternion(0,0,0,1),back:new l.Quaternion(0,1,0,0)},cT=(()=>{let e=new Float32Array([-.5,-.5,0,.5,-.5,0,-.5,.5,0,.5,.5,0]),t=new Float32Array([0,0,1,0,0,1,1,1]),n=new Uint32Array([0,1,2,1,3,2]),r=new l.BufferGeometry;return r.setAttribute(`position`,new l.BufferAttribute(e,3)),r.setAttribute(`uv`,new l.BufferAttribute(t,2)),r.setIndex(new l.BufferAttribute(n,1)),r.computeBoundingBox(),r})(),lT=null;function uT(){return lT||(lT=new l.DataTexture(new Uint8Array([255,255,255,255]),1,1),lT.needsUpdate=!0),lT}function dT(){return{enabled:(0,p.uniform)(0),maxDisplayBoost:(0,p.uniform)(1),gamma:(0,p.uniform)(Vt.gamma),minContentBoost:(0,p.uniform)(Vt.minContentBoost),maxContentBoost:(0,p.uniform)(Vt.maxContentBoost),hdrCapacityMin:(0,p.uniform)(Vt.hdrCapacityMin),hdrCapacityMax:(0,p.uniform)(Vt.hdrCapacityMax),offsetSdr:(0,p.uniform)(Vt.offsetSdr),offsetHdr:(0,p.uniform)(Vt.offsetHdr)}}function fT(e,t){let n=(0,p.vec3)((0,p.clamp)(e.r,(0,p.float)(0),(0,p.float)(1)),(0,p.clamp)(e.g,(0,p.float)(0),(0,p.float)(1)),(0,p.clamp)(e.b,(0,p.float)(0),(0,p.float)(1))),r=(0,p.float)(1).div((0,p.max)(t.gamma,(0,p.float)(1e-6))),i=(0,p.vec3)((0,p.pow)(n.r,r),(0,p.pow)(n.g,r),(0,p.pow)(n.b,r)),a=(0,p.log2)((0,p.max)(t.maxDisplayBoost,(0,p.float)(1))),o=(0,p.log2)((0,p.max)(t.hdrCapacityMin,(0,p.float)(1e-6))),s=(0,p.log2)((0,p.max)(t.hdrCapacityMax,(0,p.float)(1e-6))).sub(o),c=(0,p.clamp)(a.sub(o).div((0,p.max)(s,(0,p.float)(1e-6))),(0,p.float)(0),(0,p.float)(1)).mul((0,p.step)((0,p.float)(1e-6),s)),l=(0,p.log2)((0,p.max)(t.minContentBoost,(0,p.float)(1e-6))),u=(0,p.log2)((0,p.max)(t.maxContentBoost,(0,p.float)(1e-6))),d=(0,p.vec3)(l).add(i.mul((0,p.vec3)(u.sub(l)))).mul(c);return(0,p.vec3)((0,p.exp2)(d.x),(0,p.exp2)(d.y),(0,p.exp2)(d.z))}function pT(e,t,n){return(0,p.vec3)(e).add(n.offsetSdr).mul(t).sub(n.offsetHdr)}var mT=class extends l.NodeMaterial{constructor(e){super(),this.map=null,this.flipY=!0,this.level=-1,this._hdr=e,this._mapNode=(0,p.texture)(uT()),this._gainNode=(0,p.texture)(uT()),this.depthTest=!0,this.depthWrite=!1,this.transparent=!0,this.setupNode()}setupNode(){let e=(0,p.uv)(),t=(0,p.vec3)(e.x,e.y,0),n=(0,p.materialReference)(`opacity`,`float`),r=this._mapNode.sample(t.xy),i=fT(this._gainNode.sample(t.xy).rgb,this._hdr),a=pT(r.rgb,i,this._hdr),o=(0,p.vec4)((0,p.mix)(r.rgb,a,this._hdr.enabled),r.a.mul(n));this.outputNode=o}setMap(e){this.map=e,this._mapNode.value=e==null?uT():e}setGain(e){this._gainNode.value=e==null?uT():e}},hT=class extends l.Mesh{constructor(e,t,n,r,i){super(cT,n),this.disposed=!1,this.releaseMaterial=r,this.releaseTexture=i,e.box.getCenter(this.position),this.quaternion.multiplyQuaternions(new l.Quaternion().setFromAxisAngle(new l.Vector3(0,1,0),-Math.PI),sT[e.face]),this.scale.setScalar(e.size),this.node=e,this.name=`tiling:tile`,this.material.level=e.level,this.material.visible=!1,this.material.polygonOffset=!0,this.material.polygonOffsetFactor=-e.level,this.material.polygonOffsetUnits=-e.level,this.activeTime=-1,this.frustumCulled=!1,this.renderOrder=e.level,this.appearDuration=0,this.appearMotion=new Y({appear:0}),t.then(([e,t])=>{this.colorTexture=e,this.gainmapTexture=t,this.disposed?(this.releaseTexture(e),this.releaseTexture(t),this.colorTexture=void 0,this.gainmapTexture=void 0):(this.material.setMap(e==null?null:e),this.material.setGain(t),this.material.visible=!0,this.appearMotion.set({appear:1},this.appearDuration*1e3).catch(q))}).catch(q)}updateTime(e){let t=!1;if(this.disposed)return t;this.appearMotion.ended===!1&&this.appearMotion.update(e),this.activeTime=e;let n=yh(this.appearMotion.value.appear);return this.material.opacity!==n&&(this.material.opacity=n,t=!0),this.material.transparent=!0,t}dispose(){this.disposed=!0,this.releaseTexture(this.colorTexture),this.releaseTexture(this.gainmapTexture),this.colorTexture=void 0,this.gainmapTexture=void 0,this.releaseMaterial(this.material)}},gT=wy(20,20,20);gT.applyMatrix4(new l.Matrix4().makeScale(-1,1,1));var _T=class extends l.NodeMaterial{constructor(e){super();let t=(0,p.normalize)(p.positionLocal),n=(0,p.vec3)(t.x,t.y,t.z);this._mapNode=(0,p.cubeTexture)(new l.CubeTexture,n),this._gainNode=(0,p.cubeTexture)(new l.CubeTexture,n);let r=fT(this._gainNode.rgb,e),i=pT(this._mapNode.rgb,r,e);this.fragmentNode=(0,p.vec4)((0,p.mix)(this._mapNode.rgb,i,e.enabled),1),this.depthTest=!0,this.depthWrite=!0,this.transparent=!1}get map(){return this._mapNode.value}set map(e){this._mapNode.value=e}set gainmap(e){this._gainNode.value=e==null?null:e}},vT=class extends l.Mesh{constructor(e){super(gT,new _T(e)),this.disposed=!1,this.frustumCulled=!1,this.renderOrder=9999}update(e,t,n){if(this.disposed){this.material.map=null,this.material.gainmap=null,this.visible=!1;return}this.material.map=t,n&&(this.material.gainmap=n),this.visible=t!==null}dispose(){this.disposed=!0,this.material.dispose()}},yT=64,bT=32,xT=class{constructor(e){var t;this.prevHDRKey=``,this.tileMaterialPool=[],this.tileTexturePool=new Map,this.forceRenderWhenNextUpdate=!0,this.releaseTileMaterial=e=>{if(e.setMap(null),e.setGain(null),e.opacity=0,e.visible=!1,this.disposed||this.tileMaterialPool.length>=yT){e.dispose();return}this.tileMaterialPool.push(e)},this.releaseTileTexture=e=>{var t,n;if(!e)return;let r=e.image,i=(t=r==null?void 0:r.width)==null?0:t,a=(n=r==null?void 0:r.height)==null?0:n;if(this.disposed||i===0||a===0){e.dispose();return}let o=`${i}x${a}:${e.colorSpace}`,s=this.tileTexturePool.get(o);if(s||(s=[],this.tileTexturePool.set(o,s)),s.length>=bT){e.dispose();return}s.push(e)},this.fiveId=e.fiveId,this.enableHDR=(t=e.enableHDR)==null?!1:t,this.disposed=!1,this.level=0,this.pedding=0,this.maxRequest=1,this.appearDuration=.5,this.maxCacheTile=48,this.imageOptions={},this.hdrUniforms=dT(),this.boundingMesh=new vT(this.hdrUniforms),this.boundingMesh.frustumCulled=!1,this.textureLoader=new mu,this.observer=null,this.tileTree=Kw(0),this.tileMeshes=new Map,this.frustum=new l.Frustum,this.scene=new l.Scene,this.camera=new l.PerspectiveCamera(90,1,.1,100),this.scene.add(this.boundingMesh),this.renderTarget=new l.RenderTarget(1,1,{depthBuffer:!0,stencilBuffer:!1,generateMipmaps:!1,magFilter:l.LinearFilter,minFilter:l.LinearFilter,wrapS:l.ClampToEdgeWrapping,wrapT:l.ClampToEdgeWrapping,type:e.enableHDR?l.HalfFloatType:l.UnsignedByteType}),this.renderTarget.texture.colorSpace=e.enableHDR?l.LinearSRGBColorSpace:l.SRGBColorSpace}dispose(){this.setObserver(null),this.renderTarget.dispose(),this.boundingMesh.dispose();for(let e of this.tileMaterialPool)e.dispose();this.tileMaterialPool.length=0,this.tileTexturePool.forEach(e=>{for(let t of e){let e=t.image;e&&typeof e.close==`function`&&e.close(),t.dispose()}}),this.tileTexturePool.clear(),this.disposed=!0}acquireTileMaterial(){return this.tileMaterialPool.pop()||new mT(this.hdrUniforms)}acquireTileTexture(e,t,n){let r=this.tileTexturePool.get(`${e}x${t}:${n}`);return r&&r.pop()||new l.Texture}adoptTileTexture(e){var t,n;if(!e)return;let r=e.image,i=(t=r==null?void 0:r.width)==null?0:t,a=(n=r==null?void 0:r.height)==null?0:n;if(i===0||a===0)return e;let o=this.acquireTileTexture(i,a,e.colorSpace),s=o.image;return s&&s!==r&&typeof s.close==`function`&&s.close(),o.image=e.image,o.flipY=e.flipY,o.wrapS=e.wrapS,o.wrapT=e.wrapT,o.minFilter=e.minFilter,o.magFilter=e.magFilter,o.colorSpace=e.colorSpace,o.generateMipmaps=e.generateMipmaps,o.repeat.copy(e.repeat),o.offset.copy(e.offset),o.center.copy(e.center),o.matrixAutoUpdate=e.matrixAutoUpdate,o.updateMatrix(),o.needsUpdate=!0,e.image=null,o}cleanup(){this.tileMeshes.forEach(e=>{e.dispose(),this.scene.remove(e)}),this.tileMeshes.clear(),this.forceRenderWhenNextUpdate=!0}setObserver(e){var t,n,r,i;if(this.disposed||this.observer===e)return;this.cleanup(),this.observer=e;let a=(i=(r=(n=(t=this.observer)==null?void 0:t.images.tiles)==null?void 0:n.slice().sort((e,t)=>t.level-e.level)[0])==null?void 0:r.level)==null?0:i;this.tileTree=Kw(a)}update(e){var t,n,r,i,a,o,s,c,u,d;let f=this.forceRenderWhenNextUpdate;if(this.disposed)return f;let{time:p,resolution:m,pixelRatio:h,renderer:g,cameraMatrix:_,cameraProjectionMatrix:v,panoMap:y,panoGainmap:b,panoMatrix:x,panoZoom:S,minLevel:C,level:w,useHDR:T,maxDisplayBoost:E}=e,D=b==null?void 0:b.cfg;this.boundingMesh.update(p,y,b==null?void 0:b.map),this.hdrUniforms.enabled.value=+!!T,this.hdrUniforms.maxDisplayBoost.value=E==null?1:E,this.hdrUniforms.gamma.value=(t=D==null?void 0:D.gamma)==null?Vt.gamma:t,this.hdrUniforms.minContentBoost.value=(n=D==null?void 0:D.minContentBoost)==null?Vt.minContentBoost:n,this.hdrUniforms.maxContentBoost.value=(r=D==null?void 0:D.maxContentBoost)==null?Vt.maxContentBoost:r,this.hdrUniforms.hdrCapacityMin.value=(i=D==null?void 0:D.hdrCapacityMin)==null?Vt.hdrCapacityMin:i,this.hdrUniforms.hdrCapacityMax.value=(a=D==null?void 0:D.hdrCapacityMax)==null?Vt.hdrCapacityMax:a,this.hdrUniforms.offsetSdr.value=(o=D==null?void 0:D.offsetSdr)==null?Vt.offsetSdr:o,this.hdrUniforms.offsetHdr.value=(s=D==null?void 0:D.offsetHdr)==null?Vt.offsetHdr:s;let O=[this.hdrUniforms.enabled.value,this.hdrUniforms.maxDisplayBoost.value,this.hdrUniforms.gamma.value,this.hdrUniforms.minContentBoost.value,this.hdrUniforms.maxContentBoost.value,this.hdrUniforms.hdrCapacityMin.value,this.hdrUniforms.hdrCapacityMax.value,this.hdrUniforms.offsetSdr.value,this.hdrUniforms.offsetHdr.value].join(`|`);if(O!==this.prevHDRKey&&(this.prevHDRKey=O,f=!0),this.observer===null)return(this.renderTarget.width!==1||this.renderTarget.height!==1)&&(this.renderTarget.setSize(1,1),f=!0),!1;this.level=U(w,0,this.tileTree.maxLevel);let k=Math.floor(m.width*h),A=Math.floor(m.height*h),j=Math.max(k,A),M=(d=(u=(c=g.backend.device)==null?void 0:c.limits)==null?void 0:u.maxTextureDimension2D)==null?8192:d;j>M&&(k=Math.floor(k/j*M),A=Math.floor(A/j*M)),(this.renderTarget.width!==k||this.renderTarget.height!==A)&&this.renderTarget.setSize(k,A),this.scene.matrix.equals(x)||(this.scene.matrix.copy(x),this.scene.matrixWorld.copy(this.scene.matrix),this.scene.matrix.decompose(this.scene.position,this.scene.quaternion,this.scene.scale),this.scene.matrixAutoUpdate=!1,f=!0);let N=Xw.setFromRotationMatrix(_),ee=Zw.compose(this.scene.position,N,this.scene.scale);this.camera.matrix.equals(ee)||(this.camera.matrix.copy(ee),this.camera.matrixWorld.copy(this.camera.matrix),this.camera.position.copy(this.scene.position),this.camera.quaternion.copy(N),this.camera.scale.copy(this.scene.scale),f=!0);let P=Qw.copy(v);P.elements[0]*=S,P.elements[5]*=S,this.camera.projectionMatrix.equals(P)||(this.camera.projectionMatrix.copy(P),this.camera.projectionMatrixInverse.copy(this.camera.projectionMatrix).invert(),f=!0),nT.copy(this.scene.quaternion).invert(),rT.makeRotationFromQuaternion(nT),$w.copy(this.camera.matrix),$w.setPosition(0,0,0),$w.premultiply(rT),eT.copy($w).invert(),tT.multiplyMatrices(this.camera.projectionMatrix,eT),this.frustum.setFromProjectionMatrix(tT);let F=this.frustum.planes[5].normal,I=[];w>=C&&qw(this.tileTree,e=>{if(!(e.level<C)){if(e.level>w||!this.frustum.intersectsBox(e.box))return!1;I.push(e)}});let L=new WeakMap;I.sort((e,t)=>{if(e.level!==t.level)return e.level-t.level;let n=L.get(e);n===void 0&&(n=e.box.getCenter(Yw).angleTo(F),L.set(e,n));let r=L.get(t);return r===void 0&&(r=t.box.getCenter(Yw).angleTo(F),L.set(t,r)),n-r});let te=new WeakSet,ne=this.observer.images.tiles;if(ne)for(let e of I){let t=ne.find(t=>t.level===e.level);if(!t)continue;te.add(e);let n=this.tileMeshes.get(e);if(n){n.appearDuration=this.appearDuration,n.updateTime(p)&&(f=!0);continue}if(this.pedding>=this.maxRequest)continue;let r=Math.pow(2,e.level)*e.position.y,i=Math.pow(2,e.level)*e.position.x,a=`${mb({panoIndex:this.observer.panoIndex,workCode:this.observer.work.workCode})}.${e.face}.${e.level}.${r}.${i}`,o=t.work.getURL(t[e.face]),s=this.enableHDR&&t.gainmap?t.work.getURL(t.gainmap[e.face]):void 0,c=t.size,u=this.imageOptions.transform,d=Object.assign(Object.assign({},pl(this.imageOptions,[`format`,`sharpen`,`forceUseExifOrientation`,`mappings`])),{key:`pano_tile.${a}`,size:t.scale>=1?void 0:c*e.size*t.scale,cut:e.size===1?void 0:[c*e.position.x,c*e.position.y,c*e.size,c*e.size]});e.level===1&&t.scale>=.5&&(d.format===`jpg`||/\.jpg$/.test(o))&&(d.size=void 0,d.quality||(d.quality=70)),e.size===1&&console.warn(`tile: ${d.key} should not appear.`),this.pedding++;let m=Promise.all([this.textureLoader.loadTexture(o,{imageURL:{transform:u,options:d},colorSpace:l.SRGBColorSpace,minFilter:l.LinearFilter,magFilter:l.LinearFilter,generateMipmaps:!1,fetcher:gy(this.fiveId,this.observer.work)}).then(e=>this.adoptTileTexture(e.body)),s?this.textureLoader.loadTexture(s,{imageURL:{transform:u,options:d},colorSpace:l.NoColorSpace,minFilter:l.LinearFilter,magFilter:l.LinearFilter,generateMipmaps:!1,fetcher:gy(this.fiveId,this.observer.work)}).then(e=>this.adoptTileTexture(e.body)):Promise.resolve(void 0)]);m.then(([e,t])=>Promise.all([e?Yh(e,g):Promise.resolve(),t?Yh(t,g):Promise.resolve()])).then(e=>(this.pedding--,e),e=>(this.pedding--,Promise.reject(e))),n=new hT(e,m,this.acquireTileMaterial(),this.releaseTileMaterial,this.releaseTileTexture),n.name=`tiling:tile-${a}`,n.visible=!1,n.appearDuration=this.appearDuration,this.tileMeshes.set(e,n),this.scene.add(n),n.updateTime(p),f=!0}let re=[],R=[];this.tileMeshes.forEach((e,t)=>{te.has(t)?re.push(e):R.push(e);let n=t.level>=C&&t.level<=w;e.visible!==n&&(e.visible=n,f=!0)});let ie=R.sort((e,t)=>t.activeTime-e.activeTime).slice(Math.max(0,this.maxCacheTile-re.length));for(let e of ie)this.tileMeshes.delete(e.node),this.scene.remove(e),e.dispose(),f=!0;if(f){let e=g.getRenderTarget(),t=g.getClearColor(aT),n=g.getClearAlpha(),r=g.autoClear,i=g.autoClearColor,a=g.autoClearDepth,o=g.autoClearStencil;g.autoClear=!0,g.autoClearColor=!0,g.autoClearDepth=!0,g.autoClearStencil=!0,g.setRenderTarget(this.renderTarget),g.setClearColor(new l.Color(0,0,0),iT),g.render(this.scene,this.camera),g.setRenderTarget(e),g.setClearColor(t,n),g.autoClear=r,g.autoClearColor=i,g.autoClearDepth=a,g.autoClearStencil=o}return this.forceRenderWhenNextUpdate=!1,f}},ST=new l.Matrix4().makeRotationAxis(new l.Vector3(0,1,0),Math.PI),CT=new l.Matrix4,wT=(0,p.float)(-1),TT=(0,p.vec2)(.5,.5),ET=wy(2,2,2);ET.applyMatrix4(new l.Matrix4().makeScale(-1,1,1));function DT(){let e={size:(0,p.uniform)(new l.Vector2),mapMatrix:(0,p.uniform)(new l.Matrix4),panoMatrix:(0,p.uniform)(new l.Matrix4),alpha:(0,p.uniform)(1),map:(0,p.texture)(new l.Texture)},t=p.positionWorld.sub(p.cameraPosition).normalize().toVar(`cameraToVertex`),n=e.panoMatrix.toMat3().transpose().mul(t).toVar(`panoDirection`),r=(0,p.vec3)(n.x.mul(wT),n.y,n.z),i=e.mapMatrix.mul((0,p.vec4)(r,1)).toVar(`mapCoods`),a=(0,p.vec2)((0,p.float)(.5).add(i.x.div(i.z).div(e.size.x)),(0,p.float)(.5).sub(i.y.div(i.z).div(e.size.y))).toVar(`videoUv`),o=(0,p.texture)(e.map,a),s=(0,p.float)(1).sub((0,p.step)((0,p.float)(0),i.z)).mul((0,p.float)(1).sub((0,p.step)((0,p.float)(.5),(0,p.abs)(a.x.sub(.5))))).mul((0,p.float)(1).sub((0,p.step)((0,p.float)(.5),(0,p.abs)(a.y.sub(.5))))),c=(0,p.float)(5).mul((0,p.float)(1).sub((0,p.distance)(a,TT).div(.55).clamp(0,1))).clamp(0,1),u=new l.NodeMaterial;return u.fragmentNode=(0,p.vec4)(o.rgb,s.mul(c).mul(e.alpha)),u.depthTest=!1,u.depthWrite=!1,u.fog=!1,u.blending=l.CustomBlending,u.blendSrc=l.SrcAlphaFactor,u.blendDst=l.OneMinusSrcAlphaFactor,u.blendSrcAlpha=l.OneFactor,u.blendDstAlpha=l.OneMinusSrcAlphaFactor,{material:u,u:e}}var OT=class{constructor(){let{material:e,u:t}=DT();this.material=e,this.u=t,this.object=new l.Mesh(ET,this.material),this.object.visible=!1,this.object.renderOrder=-1,this.object.frustumCulled=!1,this.object.name=`pano-video`,this.alphaMotion=new Y({alpha:0}),this.active=!1}setMaterial(e){e?(this.u.size.value.copy(e.size),this.u.mapMatrix.value.copy(CT.multiplyMatrices(ST,e.matrix).transpose()),this.u.panoMatrix.value.copy(e.panoMatrix),e.map.colorSpace=l.SRGBColorSpace,this.u.map.value=e.map,this.alphaMotion.set({alpha:e.alpha},500).catch(q)):(this.u.size.value.setScalar(0),this.u.mapMatrix.value.identity(),this.u.panoMatrix.value.identity(),this.u.map.value=null,this.u.alpha.value=0,this.alphaMotion.set({alpha:0},0).catch(q));let t=e!==null;this.active!==t&&(this.active=t,this.object.visible=t)}updateTime(e){this.alphaMotion.ended||(this.alphaMotion.update(e),this.u.alpha.value=this.alphaMotion.value.alpha)}dispose(){this.material.dispose()}},kT=new l.Color(0,0,0),AT=new l.Color;function jT(e){let t=e.mul(256*256*256).fract(),n=e.mul(256*256).fract().sub(t.mul(1/256)),r=e.mul(256).fract().sub(n.mul(1/256));return(0,p.vec4)(t,n,r,e.sub(r.mul(1/256))).mul(256/255)}var MT=(0,p.uniform)(0),NT=jT((0,p.clamp)((0,p.length)(p.positionWorld.sub(p.cameraPosition)).div(MT),0,1)),PT=new l.NodeMaterial;PT.fragmentNode=NT,PT.fog=!1;function FT(e,t,n,r=1e3){MT.value=r,e.getClearColor(AT);let i=e.getClearAlpha(),a=t.overrideMaterial;t.overrideMaterial=PT,e.setClearColor(kT,0),n.update(e,t),e.setClearColor(AT,i),t.overrideMaterial=a}function IT(e){if(e instanceof Error)return e;let t=typeof e;return Error(t&&t===`object`?JSON.stringify(e):e)}var LT=vh,RT=new l.Raycaster,zT=new l.Vector3,BT=[new l.Vector3(0,0,0).multiplyScalar(.1),new l.Vector3(1,0,0).multiplyScalar(.1),new l.Vector3(-.5,0,-Math.sqrt(3)/2).multiplyScalar(.1),new l.Vector3(-.5,0,Math.sqrt(3)/2).multiplyScalar(.1)],VT=Object.assign(Object.assign({},Lw),{maxAccessibleDistance:5,panoTapTriggerRadius:.5,panoCircleMeshCreator:(e,t)=>e.position.distanceTo(e.standingPosition)>t.aerialObserverMinHeight?new OC:new bC,adjustPanoCircleMeshPositionBasedOnModel:!1,tileLevelForFov:((e,t)=>{var n;let r=e=>e/180*Math.PI,i=(n=Math.log2)==null?(e=>Math.log(e)*Math.LOG2E):n,a=t.height/2/Math.tan(r(e/2))*Math.tan(r(45))*2,o=Math.max(i(a/512),0);return o<2.3&&o>.1&&(o=1),o=o%1>.75?Math.ceil(o):Math.floor(o),o}),tileAppearDuration:.5,tileMaxRequest:3,flyEffectUseDepthBuffer:!1}),HT=class e extends Rw{static parseArgs(t){var n,r,i,a,o,s,c,l;if(t instanceof e)return t;let u=super.parseArgs(t);return Object.assign(Object.assign({},u),{maxAccessibleDistance:(n=t.maxAccessibleDistance)==null?VT.maxAccessibleDistance:n,panoTapTriggerRadius:(r=t.panoTapTriggerRadius)==null?VT.panoTapTriggerRadius:r,panoCircleMeshCreator:(i=t.panoCircleMeshCreator)==null?VT.panoCircleMeshCreator:i,adjustPanoCircleMeshPositionBasedOnModel:(a=t.adjustPanoCircleMeshPositionBasedOnModel)==null?VT.adjustPanoCircleMeshPositionBasedOnModel:a,tileLevelForFov:(o=t.tileLevelForFov)==null?VT.tileLevelForFov:o,tileAppearDuration:(s=t.tileAppearDuration)==null?VT.tileAppearDuration:s,tileMaxRequest:(c=t.tileMaxRequest)==null?VT.tileMaxRequest:c,flyEffectUseDepthBuffer:(l=t.flyEffectUseDepthBuffer)==null?VT.flyEffectUseDepthBuffer:l})}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`Panorama`})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Panorama`,this.initAnimationed=!1,this.maxAccessibleDistance=n.maxAccessibleDistance,this.panoTapTriggerRadius=n.panoTapTriggerRadius,this.panoCircleMeshCreator=n.panoCircleMeshCreator,this.adjustPanoCircleMeshPositionBasedOnModel=n.adjustPanoCircleMeshPositionBasedOnModel,this.tileLevelForFov=n.tileLevelForFov,this.tileAppearDuration=n.tileAppearDuration,this.tileMaxRequest=n.tileMaxRequest,this.flyEffectUseDepthBuffer=n.flyEffectUseDepthBuffer,this.adjustPanoCircleMeshPositionFix=new Map;let{pano0:r,pano1:i}=this.modelScene.parameter.resolveValue();r&&(i==null?void 0:i.map)!==r.map&&(this.modelScene.parameter.set({pano0:i}),r.map.dispose());let a=new Set;r&&a.add(r),i&&a.add(i),this.panoMeshes=new Map,this.locationMotion=new Y({count:0,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Y({modelAlpha:this.modelScene.parameter.resolveValue().modelAlpha}),this.perspToOrthoMotion=new Y({perspToOrtho:this.camera.perspToOrtho.x}),this.panoResources={},this.panoResources[this.locationMotion.keyframes[0].key=this.locationMotion.keyframes[1].key=Ft()]={panoId:mb(this.currentPano),panoPicture:this.modelScene.parameter.resolveValue().pano1,position:this.camera.pose.offset.clone(),effect:`fly`,effectEasing:LT,fixCameraTransform:new l.Matrix4},this.panoPictureObserverMap=new WeakMap,this.textureLoader=new mu,this.tiling=new xT({fiveId:this.fiveId,enableHDR:this.enableHDR}),this.panoVideo=new OT,this.scene.add(this.panoVideo.object),this.accessibleObserverFloorCheckCount=0}get tileLevel(){return this.tiling.level}updateConfiguration(e){return super.updateConfiguration(e)===!1?!1:(e.maxAccessibleDistance!==void 0&&this.maxAccessibleDistance!==e.maxAccessibleDistance&&(this.maxAccessibleDistance=e.maxAccessibleDistance),e.panoTapTriggerRadius!==void 0&&this.panoTapTriggerRadius!==e.panoTapTriggerRadius&&(this.panoTapTriggerRadius=e.panoTapTriggerRadius),e.panoCircleMeshCreator!==void 0&&this.panoCircleMeshCreator!==e.panoCircleMeshCreator&&(this.panoCircleMeshCreator=e.panoCircleMeshCreator,this.panoMeshes&&(this.panoMeshes.forEach(e=>{this.helper.remove(e),e.dispose()}),this.panoMeshes.clear())),e.tileLevelForFov!==void 0&&this.tileLevelForFov!==e.tileLevelForFov&&(this.tileLevelForFov=e.tileLevelForFov),e.tileMaxRequest!==void 0&&this.tileMaxRequest!==e.tileMaxRequest&&(this.tileMaxRequest=e.tileMaxRequest),e.flyEffectUseDepthBuffer!==void 0&&this.flyEffectUseDepthBuffer!==e.flyEffectUseDepthBuffer&&(this.flyEffectUseDepthBuffer=e.flyEffectUseDepthBuffer),e.adjustPanoCircleMeshPositionBasedOnModel!==void 0&&this.adjustPanoCircleMeshPositionBasedOnModel!==e.adjustPanoCircleMeshPositionBasedOnModel&&(this.adjustPanoCircleMeshPositionBasedOnModel=e.adjustPanoCircleMeshPositionBasedOnModel,this.adjustPanoCircleMeshPositionBasedOnModel||this.adjustPanoCircleMeshPositionFix.clear()),!0)}destroy(){super.destroy(),this.tiling.dispose(),this.modelScene.parameter.set({refinedScreen:null,pano0Depth:null,pano1Depth:null}),this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0),this.locationMotion.dispose(),this.pendingTextureTask=void 0,this.panoMeshes&&(this.panoMeshes.forEach(e=>{this.helper.remove(e),e.dispose()}),this.panoMeshes.clear());let e=this.videoTexture.image;e.pause(),e.oncanplay=q,e.ontimeupdate=q,this.scene.remove(this.panoVideo.object),this.panoVideo.setMaterial(null),this.panoVideo.dispose();let{pano0:t,pano1:n}=this.modelScene.parameter.resolveValue();for(let e of Object.keys(this.panoResources)){let r=this.panoResources[e];if(r.panoPicture){let e=r.panoPicture.map;e&&e!==(t==null?void 0:t.map)&&e!==(n==null?void 0:n.map)&&(e.dispose(),r.panoPicture=null)}delete this.panoResources[e]}}isReady(){return this.locationMotion.ended===!0?super.isReady():!1}isTileReady(){let e=this.tiling.pedding<=0;return this.initAnimationed&&e}updateWork(t,n,r,i){this.userAction=i,this.works=t;let a=e.initAnimationEndState(Object.assign(Object.assign({},this),{initial:{currentState:Object.assign(Object.assign({},this.currentPano),this.camera.pose),duration:r.duration,effect:r.effect,state:n,userAction:i}}));return(a.workCode!==this.currentPano.workCode||a.panoIndex!==this.currentPano.panoIndex||a.longitude!==this.cameraMotion.value.longitude||a.latitude!==this.cameraMotion.value.latitude||a.fov!==this.cameraMotion.value.fov)&&(this.initAnimationed=!1,this.moveToPano({workCode:a.workCode,panoIndex:a.panoIndex},{effect:r.effect,duration:r.duration,longitude:a.longitude,latitude:a.latitude,fov:a.fov,moveEndCallback:()=>{this.initAnimationed=!0},moveCancelCallback:()=>{this.initAnimationed=!0}},i)),!0}updateModel(e){this.modelScene=e,this.hideIntersectMesh()}updateTime(e,t,...n){var r,i,a,o,s,c;if(this.destroyed)return;let u={},d={},f=this.camera.getDirection(new l.Vector3),p=this.locationMotion.keyframes[0],m=this.locationMotion.keyframes[this.locationMotion.keyframes.length-1],[h,g]=this.locationMotion.getKeyFrameSegment(e),_=this.panoResourceFromLocationMotionKeyframe(h),v=this.panoResourceFromLocationMotionKeyframe(g),y=this.panoResourceFromLocationMotionKeyframe(p),b=this.panoResourceFromLocationMotionKeyframe(m),x=!1;if(this.cameraMotion.ended===!1&&(this.cameraMotion.update(e),d.longitude=this.cameraMotion.value.longitude,d.latitude=this.cameraMotion.value.latitude,d.fov=this.cameraMotion.value.fov),this.modelAlphaMotion.ended===!1&&(this.modelAlphaMotion.update(e),u.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.perspToOrthoMotion.ended===!1&&(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(U(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended===!1){this.locationMotion.update(e);let t=this.locationMotion.value.count-g.value.count+1,n=new l.Vector3().copy(_.position),a=new l.Vector3().copy(v.position);if(u.progress=v.effectEasing(t),t>=.01&&t<=.99&&(u.progress=U(v.effectEasing(t),.01,.99)),v.panoPicture&&(t<1?_.panoPicture&&(u.pano0=_.panoPicture):u.pano0=v.panoPicture,u.pano1=v.panoPicture),v.effect===`montage`?u.transition=`BLACK`:v.effect===`spread`?u.transition=`SPREAD`:u.transition=`FADE`,v.effect===`zoomin`||v.effect===`zoomout`?u.progress=Math.pow(t,3):v.effect===`model`&&this.camera.pose.distance<.01&&(u.modelAlpha=1-Math.pow(U(Math.abs(t-.5)*2,0,1),4)),t<1&&v.effect!==`fly`&&v.effect!==`model`){if(u.pano0&&_.panoPicture){let e={panoId:u.pano0.panoId,map:u.pano0.map,mapHistogram:u.pano0.mapHistogram,mapSize:u.pano0.mapSize,zoom:u.pano0.zoom,matrix:_.panoPicture.matrix.clone().premultiply(_.fixCameraTransform).setPosition(v.position),gainmap:u.pano0.gainmap?{map:u.pano0.gainmap.map,cfg:Object.assign({},u.pano0.gainmap.cfg)}:void 0},t=this.panoPictureObserverMap.get(u.pano0);t&&this.panoPictureObserverMap.set(e,t),u.pano0=e}n.copy(a),x=!0}d.distance=this.locationMotion.value.distance,d.offset=new l.Vector3(n.x+(a.x-n.x)*t,n.y+(a.y-n.y)*t,n.z+(a.z-n.z)*t);let o=[],s=[];for(let e of this.locationMotion.keyframes){let{key:t,progress:n}=e;t!==void 0&&(o.push(t),n>this.locationMotion.progress&&s.push(t))}for(let e of Object.keys(this.panoResources)){if(s.indexOf(e)>=0)continue;let t=this.panoResources[e];if(t.panoPicture){let e=t.panoPicture.map;if(e){if(e===((r=u.pano0)==null?void 0:r.map)||e===((i=u.pano1)==null?void 0:i.map))continue;e.dispose(),t.panoPicture=null}}o.indexOf(e)>=0||delete this.panoResources[e]}let c=hb(v.panoId);c!==this.currentPano&&(this.currentPano=c,this.accessibleObserverFloorCheckCount=0),this.emit(`pano.moving`,$(`pano.moving`,{userAction:this.userAction,prevPano:hb(y.panoId),state:Object.assign(Object.assign(Object.assign(Object.assign({},hb(b.panoId)),{mode:this.mode}),JC(this.camera.pose)),d),options:{},progress:this.locationMotion.progress,error:null}))}ZC(u)===!1&&this.modelScene.parameter.set(u),!this.modelScene.parameter.pano0&&this.modelScene.parameter.pano1&&this.modelScene.parameter.set(`pano0`,this.modelScene.parameter.pano1),ZC(d)===!1&&this.setCamera(d);let S=this.works.getObserver(this.currentPano),C=this.locationMotion.ended?this.getForwardObserverOrNot(this.camera):null,w=this.works.getObserver(_.panoId),T=this.works.getObserver(v.panoId);if(this.adjustPanoCircleMeshPositionBasedOnModel&&this.helper.visible&&S){let e=[],t=S.work.observers;for(let n of S.accessibleNodes){let r=t[n];r&&e.push(r)}let n=new Map;if(e.sort((e,t)=>{let r=n.get(e);r===void 0&&(r=e.standingPosition.distanceTo(S.standingPosition),n.set(e,r));let i=n.get(e);return i===void 0&&(i=t.standingPosition.distanceTo(S.standingPosition),n.set(t,i)),r-i}),e.length){this.accessibleObserverFloorCheckCount%=e.length;let t=e[this.accessibleObserverFloorCheckCount],n=this.modelScene.models.find(e=>e.work===(t==null?void 0:t.work));if(t&&n&&n.visible){let e=.3,r=.005,i=t.standingPosition.clone().applyMatrix4(t.work.transform),a=mb({panoIndex:t.panoIndex,workCode:t.work.workCode}),o=BT.map(t=>{RT.ray.origin.copy(i),RT.ray.origin.add(zT.copy(t).setY(e)),RT.ray.direction.set(0,-1,0),RT.firstHitOnly=!0,RT.floorIndex=-1;let[a]=n.intersectRaycaster(RT);return a&&a.distance-r<=e?new l.Vector3().copy(i).setY(a.point.y+r):i});o.sort((e,t)=>t.y-e.y);let s=o[Math.floor(o.length/2)],[c]=o.filter(e=>e.distanceTo(s)<=.05);if(c){let e=new l.Vector4(i.x,i.y,i.z,c.y-i.y),t=this.adjustPanoCircleMeshPositionFix.get(a);t&&!e.equals(t)&&(this.needsRender=!0),this.adjustPanoCircleMeshPositionFix.set(a,e)}}this.accessibleObserverFloorCheckCount++}}let E=new Map;if(w)for(let e of w.accessibleNodes){let t=w.work.observers[e];if(t){let e=mb({panoIndex:t.panoIndex,workCode:t.work.workCode});E.set(e,t)}}if(T)for(let e of T.accessibleNodes){let t=T.work.observers[e];if(t){let e=mb({panoIndex:t.panoIndex,workCode:t.work.workCode});E.set(e,t)}}if(this.panoMeshes.forEach((e,t)=>{E.get(t)?E.delete(t):(this.helper.remove(e),e.dispose(),this.panoMeshes.delete(t))}),E.forEach((e,t)=>{let n=this.panoCircleMeshCreator(e,{aerialObserverMinHeight:this.aerialObserverMinHeight});this.panoMeshes.set(t,n),this.helper.add(n),E.delete(t)}),this.panoMeshes.forEach((e,t)=>{let n=this.works.getObserver(t);if(n){let r=n.position.distanceTo(n.standingPosition)>this.aerialObserverMinHeight;if(r)e.position.copy(n.position).applyMatrix4(n.work.transform),e.scale.setScalar(18);else{e.position.copy(n.standingPosition).applyMatrix4(n.work.transform);let t=this.adjustPanoCircleMeshPositionFix.get(n.panoId);t&&(zT.set(t.x,t.y,t.z),zT.equals(e.position)&&(e.position.y+=t.w)),e.scale.setScalar(1.2)}let i=this.camera.position.clone().setY(e.position.y),a=new l.Vector3().copy(e.position).sub(i).normalize();if(t===mb(this.currentPano)){let t=U((.5-i.distanceTo(e.position))/.5,0,1);a.multiplyScalar(1-t).add(f.clone().multiplyScalar(t))}if(a.length()>0){let t=r?-Math.PI/2:0,n=Math.atan2(a.x,a.z);e.quaternion.setFromEuler(new l.Euler(t,n,0,`YXZ`))}}else e.visible=!1}),this.camera.pose.distance>.1||x)this.panoMeshes.forEach(n=>{n.setOpacity(0),n.setCurrent(!1),n.updateTime&&n.updateTime(e,t),n.visible=!1});else if(S){let n=S.work.observers,[,r]=em(S.accessibleNodes,e=>{let t=n[e];return!t||!t.active?1/0:S.standingPosition.distanceTo(t.standingPosition)},!0);r=U(r,3,1/0);let i=S.accessibleNodes.concat(S.panoIndex).map(e=>mb({panoIndex:e,workCode:S.work.workCode}));this.panoMeshes.forEach((n,a)=>{let o=this.works.getObserver(a),s=!1,c=1;if(i.indexOf(a)===-1)s=!1,c=0;else if(!o)s=!1,c=0;else if(!o.loadable&&!o.active)s=!1,c=0;else{let e=n.position.clone().project(this.camera);s=Math.abs(e.x)<1&&Math.abs(e.y)<1&&Math.abs(e.z)<1&&!n.loading&&n.progress===0&&C!==null&&mb({panoIndex:C.panoIndex,workCode:C.work.workCode})===a;let t=n.position.clone().setY(this.camera.position.y).distanceTo(this.camera.position);c=t<.01?0:U(r/t,.1,.85)}o&&o===T&&o.position.distanceTo(o.standingPosition)>this.aerialObserverMinHeight&&n.position.distanceTo(this.camera.position)<35&&(c=0),this.modelScene.parameter.resolveValue().modelAlpha>0&&(c=0),n.setCurrent(s),n.setOpacity(c),n.updateTime&&n.updateTime(e,t)})}{let e=(a=this.modelScene.parameter.progress)==null?1:a,t=Math.round(e),n=this.modelScene.parameter.pano0,r=this.modelScene.parameter.pano1,i=t===0?n:r,s;if(i&&(s=this.works.getObserver(i.panoId),s||(s=this.panoPictureObserverMap.get(i))),this.tiling.appearDuration=this.tileAppearDuration,this.tiling.maxRequest=e<(ou()?.6:.99)?0:this.tileMaxRequest,this.tiling.imageOptions=this.imageOptions,!s||!i||this.tileLevelForFov===!1||this.camera.perspToOrtho.x>0){this.tiling.setObserver(null);let e={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:null,panoGainmap:void 0,panoMatrix:new l.Matrix4,panoZoom:1,minLevel:0,level:0};this.tiling.update(e),this.modelScene.parameter.set(`refinedScreen`,null)}else{let e=Zl(i.mapSize),a=e+1,c=new l.Vector2().copy(this.camera.resolution).multiplyScalar(this.camera.pixelRatio),u=Math.floor(this.tileLevelForFov(this.camera.fov,c)),d=u>e?u:0;this.tiling.setObserver(s);let f={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:i.map,panoGainmap:i.gainmap,panoMatrix:i.matrix,panoZoom:i.zoom,minLevel:a,level:d,useHDR:this.modelScene.parameter.useHDR,maxDisplayBoost:this.modelScene.parameter.maxDisplayBoost},p=this.tiling.update(f),m={map:this.tiling.renderTarget.texture,matrixInverse:this.tiling.camera.matrixWorldInverse,projectionMatrix:this.tiling.camera.projectionMatrix,pano:t,opacity:(n==null?void 0:n.panoId)===(r==null?void 0:r.panoId)?1:bh(Math.abs(((o=this.modelScene.parameter.progress)==null?0:o)-.5)*2)},h=this.modelScene.parameter.refinedScreen;(p||m.pano!==(h==null?void 0:h.pano)||m.opacity!==(h==null?void 0:h.opacity))&&this.modelScene.parameter.set(`refinedScreen`,m)}}if(this.panoVideo.object.position.copy(this.camera.position),this.panoVideo.updateTime(e),S&&S.images.video&&(this.needsRender=!0),this.intersectMesh&&this.intersectMesh.parent&&S&&S.position.y-S.standingPosition.y>10){let e=U(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1);{let e=v.effect,{pano0:t,pano1:n}=this.modelScene.parameter;if(t&&n&&t!==n&&(e===`fly`||e===`model`)&&this.flyEffectUseDepthBuffer){if(((s=this.modelScene.parameter.pano0Depth)==null?void 0:s.panoId)!==t.panoId||((c=this.modelScene.parameter.pano1Depth)==null?void 0:c.panoId)!==n.panoId){this.pano0DepthCubeRenderTarget?this.pano0DepthCubeRenderTarget.width!==512&&this.pano0DepthCubeRenderTarget.setSize(512,512):this.pano0DepthCubeRenderTarget=new l.CubeRenderTarget(512,{minFilter:l.NearestFilter,magFilter:l.NearestFilter,generateMipmaps:!1}),this.pano1DepthCubeRenderTarget?this.pano1DepthCubeRenderTarget.width!==512&&this.pano1DepthCubeRenderTarget.setSize(512,512):this.pano1DepthCubeRenderTarget=new l.CubeRenderTarget(512,{minFilter:l.NearestFilter,magFilter:l.NearestFilter,generateMipmaps:!1});let e=new l.CubeCamera(this.camera.near,this.camera.far,this.pano0DepthCubeRenderTarget);e.matrix.copy(t.matrix),e.matrixWorld.copy(e.matrix),e.matrixAutoUpdate=!1,FT(this.renderer,this.modelScene,e,500);let r=new l.CubeCamera(this.camera.near,this.camera.far,this.pano1DepthCubeRenderTarget);r.matrix.copy(n.matrix),r.matrixWorld.copy(r.matrix),r.matrixAutoUpdate=!1,FT(this.renderer,this.modelScene,r,500),this.modelScene.parameter.set({pano0Depth:{panoId:t.panoId,map:this.pano0DepthCubeRenderTarget.texture,mapSize:this.pano0DepthCubeRenderTarget.width,maxDepth:500},pano1Depth:{panoId:n.panoId,map:this.pano1DepthCubeRenderTarget.texture,mapSize:this.pano1DepthCubeRenderTarget.width,maxDepth:500}})}}else this.modelScene.parameter.set({pano0Depth:null,pano1Depth:null}),this.flyEffectUseDepthBuffer||(this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0))}}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(K())[1],t=this.locationMotion.getKeyFrameSegment(K())[1],n=this.panoResourceFromLocationMotionKeyframe(t),r=this.works.getObserver(n.panoId);return{workCode:r?r.work.workCode:this.currentPano.workCode,panoIndex:r?r.panoIndex:this.currentPano.panoIndex,mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:r?r.position.clone().applyMatrix4(r.work.transform):this.camera.position.clone(),distance:this.locationMotion.value.distance}}moveToPano(e,t,n){var r,i,a;this.userAction=n,this.stopMomentumMovement();let o=mb(e),s=this.works.getObserver(e);if(!s)throw Error(`Invalid PanoId ${JSON.stringify(e)}`);let c=Jl(s.images.up),d=this.imageOptions.size;d===void 0&&s&&c&&(d=Number(c)),d===void 0&&(d=2048);let f=this.imageOptions.transform,p=Object.assign({key:`pano.${o}`},pl(this.imageOptions,[`format`,`size`,`quality`,`sharpen`,`forceUseExifOrientation`,`mappings`])),m={right:s.images.work.getURL(s.images.right),left:s.images.work.getURL(s.images.left),up:s.images.work.getURL(s.images.up),down:s.images.work.getURL(s.images.down),front:s.images.work.getURL(s.images.front),back:s.images.work.getURL(s.images.back)},h,g,_=this.enableHDR?s.images.gainmap:void 0;_&&(h={right:s.images.work.getURL(_.right),left:s.images.work.getURL(_.left),up:s.images.work.getURL(_.up),down:s.images.work.getURL(_.down),front:s.images.work.getURL(_.front),back:s.images.work.getURL(_.back)},g=s.images.work.getURL(_.cfg));let v=`pano:`+fb([m,h,p]);if(this.pendingTextureTask){if(this.pendingTextureTask.hash===v)return;{let e=this.pendingTextureTask.panoId;(r=this.panoMeshes.get(e))==null||r.setProgress(0),this.emit(`pano.texture.abort`,$(`pano.texture.abort`,{error:null,progress:0,meta:null,pano:{panoIndex:s.panoIndex,workCode:s.work.workCode}}))}}let y=`move-to-pano-`+o;this.pending.add(y);let b=UC(`pano.prepare`,{options:t,prevMode:this.mode,prevPano:this.currentPano,pano:e});if(this.emit(`pano.prepare`,b),b.defaultPrevented){this.pending.delete(y);return}b.options!==t&&Object.assign(t,b.options);let x=(i=t.effect)==null?`fly`:i,S=this.modelScene.parameter,C;if(S.pano0&&S.pano0.map.name===v?C=S.pano0:S.pano1&&S.pano1.map.name===v&&(C=S.pano1),C){let n={panoId:o,effect:x,effectEasing:(a=t.effectEasing)==null?LT:a,panoPicture:{panoId:C.panoId,map:C.map,mapHistogram:C.mapHistogram,mapSize:C.mapSize,matrix:s.matrix.clone().premultiply(s.work.transform),zoom:1,gainmap:C.gainmap?{map:C.gainmap.map,cfg:Object.assign({},C.gainmap.cfg)}:void 0},position:s.position.clone().applyMatrix4(s.work.transform),fixCameraTransform:new l.Matrix4};n.panoPicture&&this.panoPictureObserverMap.set(n.panoPicture,s),this.pendingTextureTask=void 0,Promise.resolve().then(()=>WC(b)).then(()=>{nu.shared.add(()=>{this.pending.delete(y),this.doMoveToPano(e,n,t)},!0,1)}).catch(n=>{var r;let i=IT(n),a=Object.assign(Object.assign(Object.assign({},e),{mode:this.mode}),JC(this.camera.pose));this.emit(`pano.error`,$(`pano.error`,{error:i,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:a})),this.emit(`pano.cancel`,$(`pano.cancel`,{error:i,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:a})),this.emit(`error`,i),t.moveCancelCallback&&t.moveCancelCallback(),this.pending.delete(y),this.pendingTextureTask=void 0,(r=this.panoMeshes.get(o))==null||r.setProgress(0)});return}this.pendingTextureTask={panoId:o,hash:v,onLoad:(n,r)=>(0,u.__awaiter)(this,void 0,void 0,function*(){var i,a;let c=n.body;if(this.destroyed)c.dispose();else{c.name=v;let n=Array.isArray(c.image)?c.image[0]:c.image,u=(i=n==null?void 0:n.width)==null?2048:i,{data:d}=yield pw(this.renderer,c,!0,Tx),f=new kx().formPixels(d),p={panoId:o,effect:x,effectEasing:(a=t.effectEasing)==null?LT:a,panoPicture:{panoId:o,map:c,mapSize:u,mapHistogram:new l.Vector4().fromArray(f.toArray()),matrix:s.matrix.clone().premultiply(s.work.transform),zoom:1,gainmap:r},position:s.position.clone().applyMatrix4(s.work.transform),fixCameraTransform:new l.Matrix4};p.panoPicture&&this.panoPictureObserverMap.set(p.panoPicture,s),this.doMoveToPano(e,p,t)}}),onError:n=>{let r=Object.assign(Object.assign(Object.assign({},e),{mode:this.mode}),JC(this.camera.pose));this.emit(`pano.error`,$(`pano.error`,{error:n,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:r})),this.emit(`pano.cancel`,$(`pano.cancel`,{error:n,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:r})),this.emit(`error`,n),t.moveCancelCallback&&t.moveCancelCallback()}};let w=this.panoMeshes.get(o);w&&w.tap&&w.tap();let T=this.textureLoader.loadCubeTexture(m,{imageURL:{transform:f,options:p},format:l.RGBAFormat,viaAjax:!0,fetcher:gy(this.fiveId,s.work)},void 0,void 0,t=>{var n,r;this.emit(`pano.texture.progress`,$(`pano.texture.progress`,{error:null,progress:t,meta:null,pano:e})),((n=this.pendingTextureTask)==null?void 0:n.hash)===v&&((r=this.panoMeshes.get(o))==null||r.setProgress(t))},this.renderer),E=g&&h?Promise.all([gy(this.fiveId,s.work).ajax(g,{responseType:`text`}).then(e=>Wt(JSON.parse(e.body))),this.textureLoader.loadCubeTexture(h,{imageURL:{transform:f,options:p},format:l.RGBAFormat,colorSpace:l.NoColorSpace,viaAjax:!0,fetcher:gy(this.fiveId,s.work)},void 0,void 0,void 0,this.renderer)]).then(([e,t])=>({config:e,map:t.body})):Promise.resolve(void 0),D=Promise.resolve().then(()=>WC(b)).then(()=>null).catch(e=>IT(e));Promise.all([T,E,D]).then(([t,n,r])=>{var i,a,s,c;if(this.pending.delete(y),r){t.body.dispose(),((i=this.pendingTextureTask)==null?void 0:i.hash)===v&&(this.pendingTextureTask.onError(r),this.pendingTextureTask=void 0,(a=this.panoMeshes.get(o))==null||a.setProgress(0));return}((s=this.pendingTextureTask)==null?void 0:s.hash)===v?(this.pendingTextureTask.onLoad(t,n?{map:n.map,cfg:n.config}:void 0),this.pendingTextureTask=void 0,(c=this.panoMeshes.get(o))==null||c.setProgress(0)):t.body.dispose(),this.emit(`pano.texture.success`,$(`pano.texture.success`,{error:null,progress:1,meta:t.meta,pano:e}))}).catch(t=>{var n,r;this.pending.delete(y),((n=this.pendingTextureTask)==null?void 0:n.hash)===v&&(this.pendingTextureTask.onError(t),this.pendingTextureTask=void 0,(r=this.panoMeshes.get(o))==null||r.setProgress(0)),this.emit(`pano.texture.error`,$(`pano.texture.error`,{error:t,progress:0,meta:null,pano:e})),this.emit(`error`,t)}),this.emit(`pano.texture.load`,$(`pano.texture.load`,{error:null,progress:0,meta:null,pano:e}))}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{duration:n,effect:r,userAction:i}=this.initial;this.userAction=i;let a=e.initAnimationEndState(this),o={workCode:a.workCode,panoIndex:a.panoIndex},s={modelAlpha:0},c={perspToOrtho:0},l=!1;this.moveToPano(o,{longitude:a.longitude,latitude:a.latitude,fov:a.fov,effect:r,duration:n,moveStartCallback:e=>{l=!0,this.perspToOrthoMotion.set(c,n).catch(q),this.modelAlphaMotion.setKeyframes([{progress:0,value:Object.assign({},this.modelAlphaMotion.value)},{progress:.6,value:Object.assign({},this.modelAlphaMotion.value)},{progress:1,value:s}],n).catch(q),this.emit(`initAnimation.start`,$(`initAnimation.start`,{state:e,userAction:this.userAction}))},moveEndCallback:e=>{this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:e,userAction:this.userAction})),this.initAnimationed=!0,t()},moveCancelCallback:()=>{let e=Object.assign(Object.assign(Object.assign({},o),{mode:this.mode}),JC(this.camera.pose));l===!1&&this.emit(`initAnimation.start`,$(`initAnimation.start`,{state:e,userAction:this.userAction})),this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:e,userAction:this.userAction})),this.initAnimationed=!0,t()}},i)})}panoResourceFromLocationMotionKeyframe(e){return this.panoResources[e.key]}locationMotionKeyframesLength(e){let t=0;for(let n=1;n<e.length;n++){let r=this.panoResourceFromLocationMotionKeyframe(e[n-1]).position,i=this.panoResourceFromLocationMotionKeyframe(e[n]).position,a=r.distanceTo(i)*(e[n].value.count-e[n-1].value.count);t+=a}return t}doMoveToPano(e,t,n={}){var r,i,a,o,s,c,u,d,f,p,m;let h=K(),g=Ft();this.panoResources[g]=t;let _,v,y;if(this.locationMotion.ended){let[e,n]=this.locationMotion.getKeyFrameSegment(h),i=this.locationMotion.value,a=((r=this.panoResourceFromLocationMotionKeyframe(n))==null?this.camera:r).position,o=t.position;_=Math.max(a.distanceTo(o),1),v=[{key:n.key,progress:0,value:Object.assign(Object.assign({},i),{count:0})},{key:g,progress:1,value:{distance:0,count:1}}],y=0}else{let[e,n]=this.locationMotion.getKeyFrameSegment(h),r=this.locationMotion.value,i=this.panoResourceFromLocationMotionKeyframe(e).position,a=this.panoResourceFromLocationMotionKeyframe(n).position,o=t.position,s=n.value.count-r.count,c=Math.max(i.distanceTo(a),1)*s;_=c+Math.max(a.distanceTo(o),1),v=[{key:e.key,progress:0,value:Object.assign({},r)},{key:n.key,progress:c/_,value:n.value},{key:g,progress:1,value:{count:n.value.count+1,distance:0}}];let l=this.locationMotionKeyframesLength(this.locationMotion.keyframes),u=this.locationMotionKeyframesLength(v);y=l===0||l===0?0:this.locationMotion.getProgressVelocity(h)*l/u}let b=t.effect===`instant`?0:this.calculateMovingDuration(n.duration,t.effect===`fly`||t.effect===`model`?_:0),x={longitude:n.longitude,latitude:n.latitude,fov:n.fov},S=Object.assign(Object.assign({},e),{mode:this.mode,longitude:(i=x.longitude)==null?this.camera.pose.longitude:i,latitude:(a=x.latitude)==null?this.camera.pose.latitude:a,fov:(o=x.fov)==null?this.camera.pose.fov:o,offset:t.position.clone(),distance:this.camera.pose.distance}),C=this.currentPano;if(this.emit(`pano.moveTo`,$(`pano.moveTo`,{options:n,prevPano:C,progress:0,state:S,userAction:this.userAction,error:null})),n.moveStartCallback&&n.moveStartCallback(S),this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement&&this.videoTexture.image.getAttribute(`src`)&&(this.videoTexture.image.pause(),this.videoTexture.image.removeAttribute(`uuid`),this.videoTexture.image.removeAttribute(`src`),this.videoTexture.image.oncanplay=q,this.videoTexture.needsUpdate=!0),this.panoVideo.setMaterial(null),t.effect===`fly`||t.effect===`model`)this.cameraMotion.set(x,b).catch(q);else{let e=ha({longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude}),n=ha({longitude:(s=x.longitude)==null?this.cameraMotion.value.longitude:s,latitude:(c=x.latitude)==null?this.cameraMotion.value.latitude:c}),r=new l.Object3D;r.lookAt(e);let i=new l.Matrix4().makeRotationFromQuaternion(r.quaternion);r.lookAt(n);let a=new l.Matrix4().makeRotationFromQuaternion(r.quaternion),o=i.clone().invert().premultiply(a),h=this.cameraMotion.value.fov,g=(u=x.fov)==null?this.cameraMotion.value.fov:u,_=1;t.effect===`zoomin`?_=1.5:t.effect===`zoomout`&&(_=.4);let y=U(g*_,1,170);for(let e=0;e<v.length-1;e++){let t=v[e].key;if(t){let e=this.panoResources[t];e&&(e.fixCameraTransform.copy(o),e.panoPicture&&(e.panoPicture.zoom=Math.tan(y/2/180*Math.PI)/Math.tan(h/2/180*Math.PI)))}}this.cameraMotion.setKeyframes([{progress:0,value:{longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude,fov:this.cameraMotion.value.fov}},{progress:0,value:{longitude:(d=x.longitude)==null?this.cameraMotion.value.longitude:d,latitude:(f=x.latitude)==null?this.cameraMotion.value.latitude:f,fov:y}},{progress:1,value:{longitude:(p=x.longitude)==null?this.cameraMotion.value.longitude:p,latitude:(m=x.latitude)==null?this.cameraMotion.value.latitude:m,fov:g}}],b).catch(q)}this.locationMotion.setKeyframes(v,b,y).then(()=>{for(let e of this.modelScene.children)e instanceof Fy&&e.show();let t=Object.assign(Object.assign({},e),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance});this.emit(`pano.arrived`,$(`pano.arrived`,{options:n,prevPano:C,progress:1,state:t,userAction:this.userAction,error:null})),n.moveEndCallback&&n.moveEndCallback(t);let r=this.works.getObserver(e);if(r&&r.images.video&&this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement){let e={map:this.videoTexture,size:r.images.video.size.clone(),matrix:r.images.video.matrix.clone(),panoMatrix:r.matrix.clone().premultiply(r.work.transform),alpha:1},t=Ft(),n=this.videoTexture.image;n.setAttribute(`uuid`,t),n.oncanplay=q,n.ontimeupdate=q,Vw().then(i=>{i&&r.images.video&&n.getAttribute(`uuid`)===t&&(n.oncanplay=()=>{n.oncanplay=q,n.play()},n.ontimeupdate=()=>{n.currentTime>.5&&(n.ontimeupdate=q,this.panoVideo.setMaterial(e))},n.src=r.images.video.source)}).catch((()=>{n.removeAttribute(`uuid`)}))}else{let e=this.videoTexture.image;e.removeAttribute(`uuid`),e.oncanplay=q,e.ontimeupdate=q}},()=>{this.emit(`pano.cancel`,$(`pano.cancel`,{options:n,prevPano:C,progress:0,state:S,userAction:this.userAction,error:null})),n.moveCancelCallback&&n.moveCancelCallback()})}getForwardObserverOrNot(e,t){let n=this.works.getObserver(this.currentPano);if(!n)return null;let r=t==null?new l.Raycaster(e.position.clone(),e.getWorldDirection(new l.Vector3)):t;r.params.Points={threshold:.1},r.firstHitOnly=!0,r.floorIndex=-1;let i=n.standingPosition.clone().applyMatrix4(n.work.transform);if(n.position.clone().applyMatrix4(n.work.transform).distanceTo(r.ray.origin)>1){let e=new l.Raycaster(r.ray.origin,new l.Vector3(0,-1,0));e.firstHitOnly=r.firstHitOnly,e.floorIndex=r.floorIndex;let[t]=this.modelScene.intersectRaycaster(e);t&&t.distance<=2?i.copy(t.point):i.copy(r.ray.origin).add(new l.Vector3(0,-1.5,0))}let[a]=this.modelScene.intersectRaycaster(r),o=(a?a.point:r.ray.origin.clone().add(r.ray.direction.clone().normalize().multiplyScalar(3))).clone().sub(i).normalize();if(o.length()===0)return null;let s=n.work.observers,c=n.accessibleNodes.filter(t=>{if(t===this.currentPano.panoIndex&&n.work.workCode===this.currentPano.workCode)return!1;let r=s[t];if(!r)return!1;let i=r.standingPosition.clone().applyMatrix4(r.work.transform).project(e);return Math.abs(i.z)>1||Math.abs(i.x)>1||Math.abs(i.y)>1?!1:r.loadable||r.active}),u=new Map,d=c.slice().sort((e,t)=>{let n=s[e],r=u.get(n);r===void 0&&(r=zT.copy(n.standingPosition).applyMatrix4(n.work.transform).distanceTo(i),u.set(n,r));let a=s[t],o=u.get(a);return o===void 0&&(o=zT.copy(a.standingPosition).applyMatrix4(a.work.transform).distanceTo(i),u.set(a,o)),r-o});u.clear();for(let e of[Math.PI/8,Math.PI/6,Math.PI/4,Math.PI/3])for(let t of d){let n=s[t];if(n){let t=zT.copy(n.standingPosition).applyMatrix4(n.work.transform).sub(i);if(t&&t.length()!==0&&o.angleTo(t)<e)return n}}let f=null;if(t){let n=t.ray.intersectBox(this.modelScene.boundingBox,zT);n&&(n.project(e),Math.abs(n.z)<=1&&(f=n.clone()))}else f=new l.Vector3(0,0,0);if(f){let t=n.accessibleNodes.filter(t=>{if(t===this.currentPano.panoIndex&&n.work.workCode===this.currentPano.workCode)return!1;let r=s[t];if(!r)return!1;let i=r.position.clone().applyMatrix4(r.work.transform).project(e);return Math.abs(i.z)>1||Math.abs(i.x)>1||Math.abs(i.y)>1?!1:r.loadable||r.active}),r=new Map,i=t.slice().sort((t,n)=>{let i=s[t],a=r.get(i);a===void 0&&(a=zT.copy(i.position).applyMatrix4(i.work.transform).distanceTo(e.position),r.set(i,a));let o=s[n],c=r.get(o);return c===void 0&&(c=zT.copy(o.position).applyMatrix4(o.work.transform).distanceTo(e.position),r.set(o,c)),a-c});r.clear();for(let t of i){let n=s[t];if(n){let t=zT.copy(n.position).applyMatrix4(n.work.transform);if(t.project(e),Math.abs(t.z)>1)continue;if(Math.pow(f.x-t.x,2)+Math.pow(f.y-t.y,2)<Math.pow(.4,2))return n}}}return null}onTapGesture(e){var t;if(this.userAction=e.userAction,this.stopMomentumMovement(),!this.initAnimationed)return;let n=e.center.raycaster;n.floorIndex=-1;let r=this.camera.getDirection(new l.Vector3).setY(0),i=null,a=this.works.getObserver(this.currentPano);if(!a)return;let o=a.work.observers,s=a.accessibleNodes.filter(e=>{if(e===this.currentPano.panoIndex&&a.work.workCode===this.currentPano.workCode)return!1;let t=o[e];return!t||zT.copy(t.position).applyMatrix4(t.work.transform).distanceTo(this.camera.position)>this.maxAccessibleDistance?!1:t.loadable||t.active}),[c]=this.modelScene.intersectRaycaster(n);if(c){let[e,n]=em(s,e=>{let t=o[e];return t?zT.copy(t.standingPosition).applyMatrix4(t.work.transform).distanceTo(c.point):1/0},!0);typeof e==`number`&&n<this.panoTapTriggerRadius&&(i=(t=o[e])==null?null:t)}if(i||(i=this.getForwardObserverOrNot(this.camera,n)),i&&i.panoId===mb(this.currentPano)&&(i=null),i&&!this.locationMotion.ended){for(let e of this.locationMotion.keyframes)if(this.panoResourceFromLocationMotionKeyframe(e).panoId===i.panoId){i=null;break}}if(!i)this.emit(`gesture.tap`,e),e.defaultPrevented||this.locationMotion.ended===!0&&this.cameraBounce();else{let t={},n=Math.PI/6,o=Math.PI/12,s=i.position.clone().applyMatrix4(i.work.transform).setY(0).sub(a.position.clone().applyMatrix4(i.work.transform).setY(0)).normalize(),c=[],l=[],u=[],d=i.work.observers;for(let e of i.accessibleNodes){if(i.panoIndex===e||e===this.currentPano.panoIndex&&i.work.workCode===this.currentPano.workCode)continue;let t=d[e];if(!t)continue;let r=t.position.clone().applyMatrix4(t.work.transform).sub(i.position.clone().applyMatrix4(i.work.transform)).setY(0).normalize();s.angleTo(r)<n&&u.push(r)}let[f]=(u.length>0?u:[...c,...l]).slice().sort((e,t)=>e.angleTo(s)-t.angleTo(s));if(f&&f.angleTo(r)>o&&(t.longitude=Math.atan2(-f.x,-f.z)),this.cameraMotion.value.latitude<-Math.PI/4){let n=e.state.fov;t.latitude=U(0,U(typeof this.minLatitude==`function`?this.minLatitude(n):this.minLatitude,-Math.PI/2,Math.PI/2),U(typeof this.maxLatitude==`function`?this.maxLatitude(n):this.maxLatitude,-Math.PI/2,Math.PI/2))}let p=Object.assign({},e.state);if(p.workCode=i.work.workCode,p.panoIndex=i.panoIndex,t.longitude!==void 0&&(p.longitude=t.longitude),t.latitude!==void 0&&(p.latitude=t.latitude),t.fov!==void 0&&(p.fov=t.fov),p.distance=0,p.offset=i.position.clone(),e.state=p,this.emit(`gesture.tap`,e),!e.defaultPrevented){if(this.emit(`pano.select`,$(`pano.select`,{prevPano:this.currentPano,state:p,userAction:e.userAction,options:t,progress:0,error:null})),i&&!i.active){let e=mb({panoIndex:i.panoIndex,workCode:i.work.workCode}),t=this.panoMeshes.get(e);t&&(t.setDisabled(!1),t.setLoading(!0))}i&&i.active&&this.emit(`pano.request`,$(`pano.request`,{userAction:e.userAction,prevPano:this.currentPano,progress:0,state:p,options:t,error:null}))}}}},UT=Math.PI/180,WT=180/Math.PI,GT=.001,KT=1,qT=(()=>{let e=typeof navigator<`u`&&/iPad|iPhone|iPod/.test(navigator.platform);return()=>e})(),JT=(()=>{let e=typeof navigator<`u`&&/^((?!chrome|android).)*safari/i.test(navigator.userAgent);return()=>e})(),YT=(()=>{let e=typeof navigator<`u`&&navigator.userAgent.indexOf(`Firefox`)!==-1&&navigator.userAgent.indexOf(`Android`)!==-1;return()=>e})(),XT=(()=>{let e=typeof navigator<`u`?navigator.userAgent.match(/.*Chrome\/([0-9]+)/):null,t=e?parseInt(e[1],10):null;return()=>t})(),ZT=(()=>{let e=!1;if(XT()===65){let t=typeof navigator<`u`?navigator.userAgent.match(/.*Chrome\/([0-9\.]*)/):null;if(t){let[n,r,i,a]=t[1].split(`.`);e=parseInt(i,10)===3325&&parseInt(a,10)<148}}return()=>e})(),QT=(()=>{let e=qT()&&JT()&&typeof navigator<`u`&&navigator.userAgent.indexOf(`13_4`)!==-1;return()=>e})(),$T=(()=>{let e=typeof navigator<`u`&&navigator.userAgent.indexOf(`R7 Build`)!==-1;return()=>e})();function eE(){let e=typeof window<`u`&&(window.orientation==90||window.orientation==-90);return $T()?!e:e}function tE(e){return!(isNaN(e)||e<=GT||e>KT)}function nE(e){return e.w>1?0:2*Math.acos(e.w)}var rE=(()=>{let e={};return(t,n)=>{e[t]===void 0&&(console.warn(`cardboard: `+n),e[t]=!0)}})();function iE(e){let t,n=e.indexOf(`://`);t=n===-1?0:n+3;let r=e.indexOf(`/`,t);return r===-1&&(r=e.length),e.substring(0,r)}function aE(){if(typeof window>`u`||typeof document>`u`)return!1;let e=window.self!==window.top,t=iE(document.referrer),n=iE(window.location.href);return e&&t!==n}var oE=(()=>{function e(e,t,n){let r=t?t[0]:0,i=t?t[1]:0,a=t?t[2]:0,o=t?t[3]:1,s=r+r,c=i+i,l=a+a,u=r*s,d=r*c,f=r*l,p=i*c,m=i*l,h=a*l,g=o*s,_=o*c,v=o*l;return e[0]=1-(p+h),e[1]=d+v,e[2]=f-_,e[3]=0,e[4]=d-v,e[5]=1-(u+h),e[6]=m+g,e[7]=0,e[8]=f+_,e[9]=m-g,e[10]=1-(u+p),e[11]=0,e[12]=n?n[0]:0,e[13]=n?n[1]:0,e[14]=n?n[2]:0,e[15]=1,e}function t(e,t,n){let r=n[0],i=n[1],a=n[2],o,s,c,l,u,d,f,p,m,h,g,_;return t===e?(e[12]=t[0]*r+t[4]*i+t[8]*a+t[12],e[13]=t[1]*r+t[5]*i+t[9]*a+t[13],e[14]=t[2]*r+t[6]*i+t[10]*a+t[14],e[15]=t[3]*r+t[7]*i+t[11]*a+t[15]):(o=t[0],s=t[1],c=t[2],l=t[3],u=t[4],d=t[5],f=t[6],p=t[7],m=t[8],h=t[9],g=t[10],_=t[11],e[0]=o,e[1]=s,e[2]=c,e[3]=l,e[4]=u,e[5]=d,e[6]=f,e[7]=p,e[8]=m,e[9]=h,e[10]=g,e[11]=_,e[12]=o*r+u*i+m*a+t[12],e[13]=s*r+d*i+h*a+t[13],e[14]=c*r+f*i+g*a+t[14],e[15]=l*r+p*i+_*a+t[15]),e}function n(e,t){let n=t[0],r=t[1],i=t[2],a=t[3],o=t[4],s=t[5],c=t[6],l=t[7],u=t[8],d=t[9],f=t[10],p=t[11],m=t[12],h=t[13],g=t[14],_=t[15],v=n*s-r*o,y=n*c-i*o,b=n*l-a*o,x=r*c-i*s,S=r*l-a*s,C=i*l-a*c,w=u*h-d*m,T=u*g-f*m,E=u*_-p*m,D=d*g-f*h,O=d*_-p*h,k=f*_-p*g,A=v*k-y*O+b*D+x*E-S*T+C*w;return A?(A=1/A,e[0]=(s*k-c*O+l*D)*A,e[1]=(i*O-r*k-a*D)*A,e[2]=(h*C-g*S+_*x)*A,e[3]=(f*S-d*C-p*x)*A,e[4]=(c*E-o*k-l*T)*A,e[5]=(n*k-i*E+a*T)*A,e[6]=(g*b-m*C-_*y)*A,e[7]=(u*C-f*b+p*y)*A,e[8]=(o*O-s*E+l*w)*A,e[9]=(r*E-n*O-a*w)*A,e[10]=(m*S-h*b+_*v)*A,e[11]=(d*b-u*S-p*v)*A,e[12]=(s*T-o*D-c*w)*A,e[13]=(n*D-r*T+i*w)*A,e[14]=(h*y-m*x-g*v)*A,e[15]=(u*x-d*y+f*v)*A,e):null}return(r,i,a)=>{e(r,i),a&&t(r,r,a),n(r,r)}})(),sE=class{constructor(e=new l.Vector3,t=0){this.sample=e,this.timestampS=t}set(e,t){this.sample=e,this.timestampS=t}copy(e){this.set(e.sample,e.timestampS)}},cE=class{constructor(e,t){this.kFilter=e,this.isDebug=t,this.currentAccelMeasurement=new sE,this.currentGyroMeasurement=new sE,this.previousGyroMeasurement=new sE,qT()?this.filterQ=new l.Quaternion(-1,0,0,1):this.filterQ=new l.Quaternion(1,0,0,1),this.previousFilterQ=new l.Quaternion,this.previousFilterQ.copy(this.filterQ),this.accelQ=new l.Quaternion,this.isOrientationInitialized=!1,this.estimatedGravity=new l.Vector3,this.measuredGravity=new l.Vector3,this.gyroIntegralQ=new l.Quaternion}addAccelMeasurement(e,t){this.currentAccelMeasurement.set(e,t)}addGyroMeasurement(e,t){this.currentGyroMeasurement.set(e,t),tE(t-this.previousGyroMeasurement.timestampS)&&this.run_(),this.previousGyroMeasurement.copy(this.currentGyroMeasurement)}getOrientation(){return this.filterQ}run_(){if(!this.isOrientationInitialized){this.accelQ=this.accelToQuaternion_(this.currentAccelMeasurement.sample),this.previousFilterQ.copy(this.accelQ),this.isOrientationInitialized=!0;return}let e=this.currentGyroMeasurement.timestampS-this.previousGyroMeasurement.timestampS,t=this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample,e);this.gyroIntegralQ.multiply(t),this.filterQ.copy(this.previousFilterQ),this.filterQ.multiply(t);let n=new l.Quaternion;n.copy(this.filterQ),n.invert(),this.estimatedGravity.set(0,0,-1),this.estimatedGravity.applyQuaternion(n),this.estimatedGravity.normalize(),this.measuredGravity.copy(this.currentAccelMeasurement.sample),this.measuredGravity.normalize();let r=new l.Quaternion;r.setFromUnitVectors(this.estimatedGravity,this.measuredGravity),r.invert(),this.isDebug&&console.log(`Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)`,WT*nE(r),this.estimatedGravity.x.toFixed(1),this.estimatedGravity.y.toFixed(1),this.estimatedGravity.z.toFixed(1),this.measuredGravity.x.toFixed(1),this.measuredGravity.y.toFixed(1),this.measuredGravity.z.toFixed(1));let i=new l.Quaternion;i.copy(this.filterQ),i.multiply(r),this.filterQ.slerp(i,1-this.kFilter),this.previousFilterQ.copy(this.filterQ)}accelToQuaternion_(e){let t=new l.Vector3;t.copy(e),t.normalize();let n=new l.Quaternion;return n.setFromUnitVectors(new l.Vector3(0,0,-1),t),n.invert(),n}gyroToQuaternionDelta_(e,t){let n=new l.Quaternion,r=new l.Vector3;return r.copy(e),r.normalize(),n.setFromAxisAngle(r,e.length()*t),n}},lE=class{constructor(e,t){this.predictionTimeS=e,this.isDebug=t,this.previousQ=new l.Quaternion,this.previousTimestampS=null,this.deltaQ=new l.Quaternion,this.outQ=new l.Quaternion}getPrediction(e,t,n){if(!this.previousTimestampS)return this.previousQ.copy(e),this.previousTimestampS=n,e;let r=new l.Vector3;r.copy(t),r.normalize();let i=t.length();if(i<UT*20)return this.isDebug&&console.log(`Moving slowly, at %s deg/s: no prediction`,(WT*i).toFixed(1)),this.outQ.copy(e),this.previousQ.copy(e),this.outQ;let a=i*this.predictionTimeS;return this.deltaQ.setFromAxisAngle(r,a),this.outQ.copy(this.previousQ),this.outQ.multiply(this.deltaQ),this.previousQ.copy(e),this.previousTimestampS=n,this.outQ}},uE=class{constructor(e){this.coefficients=e}distortInverse(e){let t=0,n=1,r=e-this.distort(t);for(;Math.abs(n-t)>1e-4;){let i=e-this.distort(n),a=n-i*((n-t)/(i-r));t=n,n=a,r=i}return n}distort(e){let t=e*e,n=0;for(let e=0;e<this.coefficients.length;e++)n=t*(n+this.coefficients[e]);return(n+1)*e}},dE=class{constructor(){this.angularAcceleration=null,this.angularVelocity=null,this.linearAcceleration=null,this.linearVelocity=null,this.orientation=null,this.position=null}},fE=class{constructor(){this.leftDegrees=0,this.rightDegrees=0,this.upDegrees=0,this.downDegrees=0}},pE=class{constructor(e,t,n,r){this.viewer={id:`CardboardV1`,label:`Cardboard I/O 2014`,fov:40,interLensDistance:.06,baselineLensDistance:.035,screenLensDistance:.042,distortionCoefficients:[.441,.156],inverseCoefficients:[-.4410035,.42756155,-.4804439,.5460139,-.58821183,.5733938,-.48303202,.33299083,-.17573841,.0651772,-.01488963,.001559834]},this.device={widthMeters:.11,heightMeters:.062,bevelMeters:.004},this.depthNear=.01,this.depthFar=1e4,this.yawOnly=n,this.accelerometer=new l.Vector3,this.gyroscope=new l.Vector3,this.filter=new cE(e,r),this.posePredictor=new lE(t,r),this.isFirefoxAndroid=YT(),this.isIOS=qT();let i=XT();this.isDeviceMotionInRadians=!this.isIOS&&i!==null&&i<66,this.isWithoutDeviceMotion=ZT()||QT(),this.filterToWorldQ=new l.Quaternion,qT()?this.filterToWorldQ.setFromAxisAngle(new l.Vector3(1,0,0),Math.PI/2):this.filterToWorldQ.setFromAxisAngle(new l.Vector3(1,0,0),-Math.PI/2),this.inverseWorldToScreenQ=new l.Quaternion,this.worldToScreenQ=new l.Quaternion,this.originalPoseAdjustQ=new l.Quaternion;let a=typeof window<`u`?-window.orientation*Math.PI/180:0;this.originalPoseAdjustQ.setFromAxisAngle(new l.Vector3(0,0,1),a),this.setScreenTransform_(),eE()&&this.filterToWorldQ.multiply(this.inverseWorldToScreenQ),this.resetQ=new l.Quaternion,this.orientationOut_=new Float32Array(4),this.previousTimestampS=Date.now()}getPosition(){return null}getOrientation(){let e;if(this.isWithoutDeviceMotion&&this._deviceOrientationQ){this.deviceOrientationFixQ=this.deviceOrientationFixQ||(function(){let e=new l.Quaternion().setFromAxisAngle(new l.Vector3(0,0,-1),0),t=new l.Quaternion;return typeof window<`u`&&window.orientation===-90?t.setFromAxisAngle(new l.Vector3(0,1,0),Math.PI/-2):t.setFromAxisAngle(new l.Vector3(0,1,0),Math.PI/2),e.multiply(t)})(),this.deviceOrientationFilterToWorldQ=this.deviceOrientationFilterToWorldQ||(function(){let e=new l.Quaternion;return e.setFromAxisAngle(new l.Vector3(1,0,0),-Math.PI/2),e})(),e=this._deviceOrientationQ;let t=new l.Quaternion;return t.copy(e),t.multiply(this.deviceOrientationFilterToWorldQ),t.multiply(this.resetQ),t.multiply(this.worldToScreenQ),t.multiplyQuaternions(this.deviceOrientationFixQ,t),this.yawOnly&&(t.x=0,t.z=0,t.normalize()),this.orientationOut_[0]=t.x,this.orientationOut_[1]=t.y,this.orientationOut_[2]=t.z,this.orientationOut_[3]=t.w,this.orientationOut_}else{let t=this.filter.getOrientation();e=this.posePredictor.getPrediction(t,this.gyroscope,this.previousTimestampS)}let t=new l.Quaternion;return t.copy(this.filterToWorldQ),t.multiply(this.resetQ),t.multiply(e),t.multiply(this.worldToScreenQ),this.yawOnly&&(t.x=0,t.z=0,t.normalize()),this.orientationOut_[0]=t.x,this.orientationOut_[1]=t.y,this.orientationOut_[2]=t.z,this.orientationOut_[3]=t.w,this.orientationOut_}getPose(){let e=new dE;return e.orientation=this.getOrientation(),e}resetPose(){this.resetQ.copy(this.filter.getOrientation()),this.resetQ.x=0,this.resetQ.y=0,this.resetQ.z*=-1,this.resetQ.normalize(),eE()&&this.resetQ.multiply(this.inverseWorldToScreenQ),this.resetQ.multiply(this.originalPoseAdjustQ)}getFrameData(e){let t=this.getOrientation(),n=this.getEyeOffset(),r=this.getEyeProjectionMatrix();return e.pose.angularAcceleration=null,e.pose.angularVelocity=null,e.pose.linearAcceleration=null,e.pose.linearVelocity=null,e.pose.orientation=t,e.pose.position=null,e.timestamp=this.previousTimestampS,e.leftProjectionMatrix.set(r.left),e.rightProjectionMatrix.set(r.right),oE(e.leftViewMatrix,t,n.left),oE(e.rightViewMatrix,t,n.right),e}start(){if(typeof window>`u`)return()=>{};let e=this.onDeviceMotion_.bind(this),t=this.onOrientationChange_.bind(this),n=this.onMessage_.bind(this),r=this.onDeviceOrientation_.bind(this);return qT()&&aE()&&window.addEventListener(`message`,n),window.addEventListener(`orientationchange`,t),this.isWithoutDeviceMotion?window.addEventListener(`deviceorientation`,r):window.addEventListener(`devicemotion`,e),()=>{window.removeEventListener(`devicemotion`,e),window.removeEventListener(`deviceorientation`,t),window.removeEventListener(`orientationchange`,t),window.removeEventListener(`message`,n)}}getEyeOffset(){return{left:[-this.viewer.interLensDistance*.5,0,0],right:[this.viewer.interLensDistance*.5,0,0]}}getEyeProjectionMatrix(){let e=this.getEyeFieldOfView(),t=this.depthNear,n=this.depthFar,r={left:[],right:[]};{let i=e.left.upDegrees*UT,a=e.left.downDegrees*UT,o=e.left.leftDegrees*UT,s=e.left.rightDegrees*UT,c=2/(o+s),l=2/(i+a);r.left[0]=c,r.left[1]=0,r.left[2]=0,r.left[3]=0,r.left[4]=0,r.left[5]=l,r.left[6]=0,r.left[7]=0,r.left[8]=-((o-s)*c*.5),r.left[9]=(i-a)*l*.5,r.left[10]=n/(t-n),r.left[11]=-1,r.left[12]=0,r.left[13]=0,r.left[14]=n*t/(t-n),r.left[15]=0}{let i=e.right.upDegrees*UT,a=e.right.downDegrees*UT,o=e.right.leftDegrees*UT,s=e.right.rightDegrees*UT,c=2/(o+s),l=2/(i+a);r.right[0]=c,r.right[1]=0,r.right[2]=0,r.right[3]=0,r.right[4]=0,r.right[5]=l,r.right[6]=0,r.right[7]=0,r.right[8]=-((o-s)*c*.5),r.right[9]=(i-a)*l*.5,r.right[10]=n/(t-n),r.right[11]=-1,r.right[12]=0,r.right[13]=0,r.right[14]=n*t/(t-n),r.right[15]=0}return r}getEyeFieldOfView(){let e=this.viewer,t=this.device,n=new uE(e.distortionCoefficients),r=e.screenLensDistance,i=(t.widthMeters-e.interLensDistance)/2,a=e.interLensDistance/2,o=e.baselineLensDistance-t.bevelMeters,s=t.heightMeters-o,c=WT*Math.atan(n.distort(i/r)),l=WT*Math.atan(n.distort(a/r)),u=WT*Math.atan(n.distort(o/r)),d=WT*Math.atan(n.distort(s/r)),f=new fE,p=new fE;return f.leftDegrees=Math.min(c,e.fov),f.rightDegrees=Math.min(l,e.fov),f.downDegrees=Math.min(u,e.fov),f.upDegrees=Math.min(d,e.fov),p.leftDegrees=f.rightDegrees,p.rightDegrees=f.leftDegrees,p.upDegrees=f.upDegrees,p.downDegrees=f.downDegrees,{left:f,right:p}}onDeviceOrientation_(e){this._deviceOrientationQ=this._deviceOrientationQ||new l.Quaternion;let{alpha:t,beta:n,gamma:r}=e;t=(t||0)*Math.PI/180,n=(n||0)*Math.PI/180,r=(r||0)*Math.PI/180,this._deviceOrientationQ.setFromEuler(new l.Euler(t,n,-r,`YXZ`))}onDeviceMotion_(e){this.updateDeviceMotion_(e)}updateDeviceMotion_(e){let t=e.accelerationIncludingGravity,n=e.rotationRate,r=e.timeStamp/1e3,i=r-this.previousTimestampS;if(i<0){rE(`fusion-pose-sensor:invalid:non-monotonic`,`Invalid timestamps detected: non-monotonic timestamp from devicemotion`),this.previousTimestampS=r;return}else if(i<=GT||i>KT){rE(`fusion-pose-sensor:invalid:outside-threshold`,`Invalid timestamps detected: Timestamp from devicemotion outside expected range.`),this.previousTimestampS=r;return}t&&(this.accelerometer.set(-t.x,-t.y,-t.z),n&&($T()?this.gyroscope.set(-n.beta,n.alpha,n.gamma):this.gyroscope.set(n.alpha,n.beta,n.gamma),this.isDeviceMotionInRadians||this.gyroscope.multiplyScalar(Math.PI/180),this.filter.addGyroMeasurement(this.gyroscope,r)),this.filter.addAccelMeasurement(this.accelerometer,r)),this.previousTimestampS=r}onOrientationChange_(){this.setScreenTransform_()}onMessage_(e){let t=e.data;!t||!t.type||t.type.toLowerCase()===`devicemotion`&&this.updateDeviceMotion_(t.deviceMotionEvent)}setScreenTransform_(){switch(this.worldToScreenQ.set(0,0,0,1),typeof window<`u`?window.orientation:0){case 0:break;case 90:this.worldToScreenQ.setFromAxisAngle(new l.Vector3(0,0,1),-Math.PI/2);break;case-90:this.worldToScreenQ.setFromAxisAngle(new l.Vector3(0,0,1),Math.PI/2);break;case 180:break}this.inverseWorldToScreenQ.copy(this.worldToScreenQ),this.inverseWorldToScreenQ.invert()}},mE=[0,0,.5,1],hE=[.5,0,.5,1],gE=class{constructor(e){this.renderer=e,this.sensor=new pE(.98,.04,!1,!1),this.scale=1,this.cameraL=new l.PerspectiveCamera,this.cameraR=new l.PerspectiveCamera;let t=this.sensor.start();this.dispose=()=>{let e=this.renderer.getSize(new l.Vector2);this.renderer.setScissor(0,0,e.width,e.height),this.renderer.setViewport(0,0,e.width,e.height),this.renderer.setScissorTest(!1),t()}}render(e,t){let n=this.renderer.getSize(new l.Vector2);if(n.width>n.height){var r=e.matrixWorldAutoUpdate;r&&(e.updateMatrixWorld(),e.matrixWorldAutoUpdate=!1);let i={x:Math.round(n.width*mE[0]),y:Math.round(n.height*mE[1]),width:Math.round(n.width*mE[2]),height:Math.round(n.height*mE[3])},a={x:Math.round(n.width*hE[0]),y:Math.round(n.height*hE[1]),width:Math.round(n.width*hE[2]),height:Math.round(n.height*hE[3])};this.renderer.setScissorTest(!0),this.renderer.autoClear&&this.renderer.clear(),t.parent===null&&t.updateMatrixWorld(),t.matrixWorld.decompose(this.cameraL.position,this.cameraL.quaternion,this.cameraL.scale),t.matrixWorld.decompose(this.cameraR.position,this.cameraR.quaternion,this.cameraR.scale);let o=this.sensor.getEyeOffset();this.cameraL.translateOnAxis(new l.Vector3().fromArray(o.left),this.scale),this.cameraR.translateOnAxis(new l.Vector3().fromArray(o.right),this.scale);let s=this.sensor.getEyeProjectionMatrix();this.cameraL.projectionMatrix.fromArray(s.left),this.cameraR.projectionMatrix.fromArray(s.right),this.renderer.setViewport(i.x,i.y,i.width,i.height),this.renderer.setScissor(i.x,i.y,i.width,i.height),this.renderer.render(e,this.cameraL),this.renderer.setViewport(a.x,a.y,a.width,a.height),this.renderer.setScissor(a.x,a.y,a.width,a.height),this.renderer.render(e,this.cameraR),this.renderer.setViewport(0,0,n.width,n.height),this.renderer.setScissor(0,0,n.width,n.height),this.renderer.setScissorTest(!1),r&&(e.matrixWorldAutoUpdate=!0)}else this.renderer.render(e,t)}dispose(){}},_E=`data:image/png;base64,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`,vE=`data:image/png;base64,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`,yE,bE={zh:{TITLE:`眼镜模式`,HIT:`请将手机横屏放入 VR 眼镜中`},en:{TITLE:`GLASSES MODE`,HIT:`Please put the mobile phone horizontally into the VR glasses.`},ja:{TITLE:`メガネモード`,HIT:`携帯電話をVRメガネに水平に入れてください。`}},xE=typeof navigator<`u`?(yE=bE[navigator.language.split(`-`)[0]])==null?bE.en:yE:bE.zh,SE=`
979
1062
  <style>
980
1063
  .$id {
981
1064
  all: initial;
@@ -1236,4 +1319,4 @@ Z
1236
1319
  </svg>
1237
1320
  </div>
1238
1321
  </div>
1239
- `;function CE(e){let t=1,n=document.getElementsByTagName(`meta`);for(let e=0;e<n.length;e++){let r=n[e];if(r.getAttribute(`name`)===`viewport`){let e=(r.getAttribute(`content`)||``).match(/initial\-scale\=([\d|\.]+)/);e&&(t=Number(e[1])),isNaN(t)&&(t=1)}}let r=e=>Math.floor(e*t)+`px`;return SE.replace(/\n/g,` `).replace(/\ +/g,` `).replace(/\$id/g,e).replace(/(\d+)px/g,(e,t)=>r(Number(t)))}function wE(){let e=`five_vr_helper_`+Ft(),t=CE(e),n=document.createElement(`div`);return n.className=e,n.innerHTML=t,n}var TE=new l.CircleGeometry(.12,16),EE=(0,p.vec2)(.5,.5),DE=(0,p.float)(.017);function OE(e,t){let n=(0,p.length)(EE.sub(e));return(0,p.smoothstep)(t,t.add(DE),n)}function kE(e,t){let n=(0,p.length)(EE.sub(e));return(0,p.float)(1).sub((0,p.smoothstep)(t.sub(DE),t,n))}function AE(){let e={opacity:(0,p.uniform)(0)},t=(0,p.uv)(),n=(0,p.length)(EE.sub(t)),r=(0,p.float)(.01),i=(0,p.float)(.49),a=(0,p.float)(.29),o=(0,p.float)(1).sub((0,p.smoothstep)(i.sub(r),i,n)),s=(0,p.smoothstep)(a,a.add(r),n),c=(0,p.vec4)(.576,.635,1,.3),u=(0,p.vec4)(1,1,1,(0,p.abs)(n.sub(i.add(a).div(2))).div(i.sub(a)).mul(1.5).add(.1).clamp(0,1)),d=(0,p.mix)(c,u,u.w),f=new l.NodeMaterial;return f.fragmentNode=(0,p.vec4)(d.xyz,d.w.mul(e.opacity).mul(o).mul(s)),f.blending=l.CustomBlending,f.blendSrc=l.SrcAlphaFactor,f.blendDst=l.OneMinusSrcAlphaFactor,f.blendSrcAlpha=l.OneFactor,f.blendDstAlpha=l.OneMinusSrcAlphaFactor,f.depthWrite=!1,f.transparent=!0,{material:f,u:e}}function jE(){let e={circleScale:(0,p.uniform)(1),circleFade:(0,p.uniform)(0),circleOpacity:(0,p.uniform)(.5),loadingAngle:(0,p.uniform)(0),loadingOpacity:(0,p.uniform)(0),opacity:(0,p.uniform)(0),disable:(0,p.uniform)(0)},t=(0,p.uv)();(0,p.length)(EE.sub(t));let n=(0,p.float)(.98).add((0,p.abs)((0,p.normalize)((0,p.vec2)(1,-1)).dot(t.sub(EE))).mul(2)).clamp(0,1),r=(0,p.vec4)((0,p.mix)((0,p.vec4)(.576,.635,1,1).xyz,(0,p.vec4)(1,1,1,1).xyz,e.circleFade.mul(.5)),n.mul(e.circleOpacity).mul(kE(t,(0,p.float)(.3).mul(e.circleScale)))),i=(0,p.mod)(p.PI.sub((0,p.atan)(EE.x.sub(t.x),EE.y.sub(t.y))).add(e.loadingAngle),p.PI2),a=(0,p.vec4)(1,1,1,(0,p.float)(1).sub((0,p.smoothstep)((0,p.float)(0),p.PI2,i)).mul(.9).add(.1).mul(e.loadingOpacity).mul(OE(t,(0,p.float)(.2).mul(e.circleScale))).mul(kE(t,(0,p.float)(.25).mul(e.circleScale)))),o=(0,p.vec4)(1,1,1,(0,p.float)(.5).mul(kE(t,(0,p.float)(.32).mul(e.circleScale)))),s=(0,p.vec4)(1,1,1,0);s=(0,p.mix)(s,r,r.w),s=(0,p.mix)(s,a,a.w),s=(0,p.mix)(s,o,e.disable);let c=(0,p.vec4)(s.xyz,s.w.mul(e.opacity)),u=new l.NodeMaterial;return u.fragmentNode=c,u.blending=l.CustomBlending,u.blendSrc=l.SrcAlphaFactor,u.blendDst=l.OneMinusSrcAlphaFactor,u.blendSrcAlpha=l.OneFactor,u.blendDstAlpha=l.OneMinusSrcAlphaFactor,u.depthWrite=!1,u.transparent=!0,{material:u,u:e}}var ME=class extends l.Object3D{constructor(){super(),this.progress=0,this.opacity=0,this.loading=!1,this.current=!1,this.disabled=!1,this.currentMotion=new Y({ringScale:1.1,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}),this.opacityMotion=new Y({opacity:0}),this.loadingMotion=new Y({opacity:0}),this.disableMotion=new Y({opacity:0}),this.hitTestMesh=new l.Mesh(TE,new l.MeshBasicMaterial({blending:l.CustomBlending,blendSrc:l.SrcAlphaFactor,blendDst:l.OneMinusSrcAlphaFactor,blendSrcAlpha:l.OneFactor,blendDstAlpha:l.OneMinusSrcAlphaFactor,depthWrite:!1,transparent:!0,color:0,opacity:0})),this.hitTestMesh.scale.set(1.5,1.5,1.5);let{material:e,u:t}=AE();this.ringMesh=new l.Mesh(TE,e),this.ringU=t;let{material:n,u:r}=jE();this.panoMesh=new l.Mesh(TE,n),this.panoU=r,this.add(this.hitTestMesh),this.add(this.ringMesh),this.add(this.panoMesh),this.renderOrder=1e4,this.needsRender=!0}setProgress(e){this.progress=e,this.setLoading(e>0)}setOpacity(e){this.opacity!==e&&(this.opacity=e=U(e,0,1),this.opacityMotion.set({opacity:e},30).catch(q))}setCurrent(e){if(this.current!==e){if(e)this.currentMotion.setKeyframes([{progress:0,value:{ringScale:2,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.05,value:{ringScale:1,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.15,value:{ringScale:1.2,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.25,value:{ringScale:1.1,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.8,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.85,circleScale:1}},{progress:.9,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.65,circleScale:.8}},{progress:.92,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.65,circleScale:.8}},{progress:1,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.85,circleScale:1.1}}],1500).catch(q);else{let e=[{progress:0,value:Object.assign({},this.currentMotion.value)},{progress:1,value:{ringScale:1.1,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}}];this.currentMotion.setKeyframes(e,200).catch(q)}this.current=e}}setLoading(e){this.loading!==e&&(e?this.loadingMotion.setKeyframes([{progress:0,value:{opacity:0}},{progress:.3,value:{opacity:0}},{progress:1,value:{opacity:.8}}],500).catch(q):this.loadingMotion.set({opacity:0},0).catch(q),this.loading=e,this.disabled===!0&&this.setDisabled(!1),this.needsRender=!0)}setDisabled(e){this.disabled!==e&&(this.disabled=e,this.loading===!0&&this.setLoading(!1),this.disableMotion.set({opacity:+!!e},300).catch(q),this.needsRender=!0)}tap(){return Promise.resolve()}updateTime(e,t){this.opacityMotion.update(e),this.currentMotion.update(e),this.loadingMotion.update(e);let n=this.opacityMotion.value.opacity;this.visible=n!==0;let{ringScale:r,ringOpacity:i,circleFade:a,circleOpacity:o,circleScale:s}=this.currentMotion.value;this.ringMesh.scale.set(r,1,r),this.ringU.opacity.value=i*n,this.panoU.opacity.value=n,this.panoU.circleOpacity.value=o,this.panoU.circleScale.value=s,this.panoU.circleFade.value=a,this.panoU.loadingOpacity.value=this.loadingMotion.value.opacity,this.panoU.disable.value=this.disableMotion.value.opacity,this.panoU.loadingAngle.value=e/120%(Math.PI*2),this.needsRender=!0}dispose(){this.hitTestMesh.material.dispose(),this.ringMesh.material.dispose(),this.panoMesh.material.dispose()}},NE=1500,PE=Object.assign({},ml(VT,[`maxLatitude`,`minLatitude`])),FE=class e extends HT{static parseArgs(t){if(t instanceof e)return t;let n=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2});return super.parseArgs(n)}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`VRPanorama`})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`VRPanorama`,this.cardboard=new gE(this.renderer);let r=wE();this.helperElement=r;let i=new mw(r);this.element.parentNode&&(this.element.parentNode.insertBefore(r,this.element),this.updateHelperElementSize(),i.on(`tap`,()=>this.emit(`vr.requestExit`,$(`vr.requestExit`,{})))),this.destroyHelper=()=>{i.destroy(),r.parentNode&&r.parentNode.removeChild(r),this.helperElement=void 0}}updateConfiguration(e){return super.updateConfiguration(Object.assign(Object.assign({},e),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2}))}destroy(){super.destroy(),this.cardboard.dispose(),this.destroyHelper()}isReady(){return!1}updateRenderSize(){this.needsRender=!0}updateCamera(e,t,n){return Promise.resolve()}updateCameraWithKeyframes(e,t,n){return Promise.resolve()}updateTime(e,t,...n){var r,i,a,o,s,c;if(this.destroyed)return;this.updateHelperElementSize(),this.userAction=!0,this.needsRender=!0;let u={},d={},f=this.locationMotion.keyframes[0],p=this.locationMotion.keyframes[this.locationMotion.keyframes.length-1],[m,h]=this.locationMotion.getKeyFrameSegment(e),g=this.panoResourceFromLocationMotionKeyframe(m),_=this.panoResourceFromLocationMotionKeyframe(h),v=this.panoResourceFromLocationMotionKeyframe(f),y=this.panoResourceFromLocationMotionKeyframe(p),b=!1;if(this.modelAlphaMotion.ended===!1&&(this.modelAlphaMotion.update(e),u.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.perspToOrthoMotion.ended===!1&&(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(U(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended===!1){this.locationMotion.update(e);let t=this.locationMotion.value.count-h.value.count+1,n=new l.Vector3().copy(g.position),a=new l.Vector3().copy(_.position);if(u.progress=t,t>=.01&&t<=.99&&(u.progress=U(_.effectEasing(t),.01,.99)),_.panoPicture&&(t<1?g.panoPicture&&(u.pano0=g.panoPicture):u.pano0=_.panoPicture,u.pano1=_.panoPicture),_.effect===`montage`?u.transition=`BLACK`:_.effect===`spread`?u.transition=`SPREAD`:u.transition=`FADE`,_.effect===`zoomin`||_.effect===`zoomout`?u.progress=Math.pow(t,3):_.effect===`model`&&this.camera.pose.distance<.01&&(u.modelAlpha=1-Math.pow(U(Math.abs(t-.5)*2,0,1),4)),t<1&&_.effect!==`fly`){if(u.pano0&&g.panoPicture){let e={panoId:u.pano0.panoId,map:u.pano0.map,mapHistogram:u.pano0.mapHistogram,mapSize:u.pano0.mapSize,zoom:u.pano0.zoom,matrix:g.panoPicture.matrix.clone().setPosition(_.position),gainmap:u.pano0.gainmap?{map:u.pano0.gainmap.map,cfg:Object.assign({},u.pano0.gainmap.cfg)}:void 0},t=this.panoPictureObserverMap.get(u.pano0);t&&this.panoPictureObserverMap.set(e,t),u.pano0=e}n.copy(a),b=!0}d.distance=this.locationMotion.value.distance,d.offset=new l.Vector3(n.x+(a.x-n.x)*t,n.y+(a.y-n.y)*t,n.z+(a.z-n.z)*t);let o=[],s=[];for(let e of this.locationMotion.keyframes){let{key:t,progress:n}=e;t!==void 0&&(o.push(t),n>this.locationMotion.progress&&s.push(t))}for(let e of Object.keys(this.panoResources)){if(s.indexOf(e)>=0)continue;let t=this.panoResources[e];if(t.panoPicture){let e=t.panoPicture.map;if(e){if(e===((r=u.pano0)==null?void 0:r.map)||e===((i=u.pano1)==null?void 0:i.map))continue;e.dispose(),t.panoPicture=null}}o.indexOf(e)>=0||delete this.panoResources[e]}this.currentPano=hb(_.panoId),this.emit(`pano.moving`,$(`pano.moving`,{userAction:this.userAction,prevPano:hb(v.panoId),state:Object.assign(Object.assign(Object.assign(Object.assign({},hb(y.panoId)),{mode:this.mode}),JC(this.camera.pose)),d),options:{},progress:this.locationMotion.progress,error:null}))}ZC(u)===!1&&this.modelScene.parameter.set(u),d.offset&&this.camera.position.copy(d.offset);let x=this.camera.pose.longitude,S=this.camera.pose.latitude;this.camera.quaternion.fromArray(this.cardboard.sensor.getOrientation()),this.camera.computePose(),(x!==this.camera.pose.longitude||S!==this.camera.pose.latitude)&&(this.cameraMotion.set(pl(this.camera.pose,[`longitude`,`latitude`]),0).catch(q),this.emit(`camera.update`,$(`camera.update`,{userAction:!0,state:Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),JC(this.camera.pose))}))),this.works.getObserver(this.currentPano);let C=this.works.getObserver(g.panoId),w=this.works.getObserver(_.panoId),T=new Map;if(C)for(let e of C.accessibleNodes){let t=C.work.observers[e];if(t){let e=mb({panoIndex:t.panoIndex,workCode:t.work.workCode});T.set(e,t)}}if(w)for(let e of w.accessibleNodes){let t=w.work.observers[e];if(t){let e=mb({panoIndex:t.panoIndex,workCode:t.work.workCode});T.set(e,t)}}if(this.panoMeshes.forEach((e,t)=>{let n=T.get(t);n?(e.position.copy(n.position).applyMatrix4(n.work.transform),T.delete(t)):(this.helper.remove(e),e.dispose(),this.panoMeshes.delete(t))}),T.forEach((e,t)=>{let n=new ME;n.position.copy(e.position).applyMatrix4(e.work.transform),e.position.distanceTo(e.standingPosition)>this.aerialObserverMinHeight?n.scale.setScalar(15):n.scale.setScalar(1),this.panoMeshes.set(t,n),this.helper.add(n),T.delete(t)}),this.camera.pose.distance>.1||b?this.panoMeshes.forEach((n,r)=>{n.setOpacity(0),n.updateTime&&n.updateTime(e,t),n.visible=!1}):this.panoMeshes.forEach((e,t)=>{let n=hb(t),r=this.works.getObserver(n);if(!r)return;if(!r.loadable&&!r.active){e.setOpacity(0);return}let i=e.position.clone().setY(this.camera.position.y).distanceTo(this.camera.position);i<.05?e.setOpacity(0):e.setOpacity(U(1.5/i,0,1)),gb(this.currentPano,n)&&e.setOpacity(0),e.lookAt(this.camera.position)}),this.locationMotion.ended){let n=this.intersect(e);this.panoMeshes.forEach((r,i)=>{r.setCurrent(r===n),r.updateTime&&r.updateTime(e,t)})}{let e=(a=this.modelScene.parameter.progress)==null?1:a,t=Math.round(e),n=this.modelScene.parameter.pano0,r=this.modelScene.parameter.pano1,i=t===0?n:r,s;if(i&&(s=this.works.getObserver(i.panoId),s||(s=this.panoPictureObserverMap.get(i))),this.tiling.appearDuration=this.tileAppearDuration,this.tiling.maxRequest=e<(ou()?.6:.99)?0:this.tileMaxRequest,this.tiling.imageOptions=this.imageOptions,!s||!i||this.tileLevelForFov===!1||this.camera.perspToOrtho.x>0){this.tiling.setObserver(null);let e={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:null,panoGainmap:void 0,panoMatrix:new l.Matrix4,panoZoom:1,minLevel:0,level:0};this.tiling.update(e),this.modelScene.parameter.set(`refinedScreen`,null)}else{let e=Zl(i.mapSize),a=e+1,c=new l.Vector2().copy(this.camera.resolution).multiplyScalar(this.camera.pixelRatio),u=Math.floor(this.tileLevelForFov(this.camera.fov,c)),d=u>e?u:0;this.tiling.setObserver(s);let f={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:i.map,panoGainmap:i.gainmap,panoMatrix:i.matrix,panoZoom:i.zoom,minLevel:a,level:d,useHDR:this.modelScene.parameter.useHDR,maxDisplayBoost:this.modelScene.parameter.maxDisplayBoost},p=this.tiling.update(f),m={map:this.tiling.renderTarget.texture,matrixInverse:this.tiling.camera.matrixWorldInverse,projectionMatrix:this.tiling.camera.projectionMatrix,pano:t,opacity:(n==null?void 0:n.panoId)===(r==null?void 0:r.panoId)?1:bh(Math.abs(((o=this.modelScene.parameter.progress)==null?0:o)-.5)*2)},h=this.modelScene.parameter.refinedScreen;(p||m.pano!==(h==null?void 0:h.pano)||m.opacity!==(h==null?void 0:h.opacity))&&this.modelScene.parameter.set(`refinedScreen`,m)}}this.panoVideo.object.position.copy(this.camera.position),this.panoVideo.updateTime(e);{let e=_.effect,{pano0:t,pano1:n}=this.modelScene.parameter;if(t&&n&&t!==n&&(e===`fly`||e===`model`)&&this.flyEffectUseDepthBuffer){if(((s=this.modelScene.parameter.pano0Depth)==null?void 0:s.panoId)!==t.panoId||((c=this.modelScene.parameter.pano1Depth)==null?void 0:c.panoId)!==n.panoId){this.pano0DepthCubeRenderTarget?this.pano0DepthCubeRenderTarget.width!==512&&this.pano0DepthCubeRenderTarget.setSize(512,512):this.pano0DepthCubeRenderTarget=new l.CubeRenderTarget(512,{minFilter:l.NearestFilter,magFilter:l.NearestFilter,generateMipmaps:!1}),this.pano1DepthCubeRenderTarget?this.pano1DepthCubeRenderTarget.width!==512&&this.pano1DepthCubeRenderTarget.setSize(512,512):this.pano1DepthCubeRenderTarget=new l.CubeRenderTarget(512,{minFilter:l.NearestFilter,magFilter:l.NearestFilter,generateMipmaps:!1});let e=new l.CubeCamera(this.camera.near,this.camera.far,this.pano0DepthCubeRenderTarget);e.matrix.copy(t.matrix),e.matrixWorld.copy(e.matrix),e.matrixAutoUpdate=!1,FT(this.renderer,this.modelScene,e,500);let r=new l.CubeCamera(this.camera.near,this.camera.far,this.pano1DepthCubeRenderTarget);r.matrix.copy(n.matrix),r.matrixWorld.copy(r.matrix),r.matrixAutoUpdate=!1,FT(this.renderer,this.modelScene,r,500),this.modelScene.parameter.set({pano0Depth:{panoId:t.panoId,map:this.pano0DepthCubeRenderTarget.texture,mapSize:this.pano0DepthCubeRenderTarget.width,maxDepth:500},pano1Depth:{panoId:n.panoId,map:this.pano1DepthCubeRenderTarget.texture,mapSize:this.pano1DepthCubeRenderTarget.width,maxDepth:500}})}}else this.modelScene.parameter.set({pano0Depth:null,pano1Depth:null}),this.flyEffectUseDepthBuffer||(this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0))}}render(){return this.renderer.setRenderTarget(null),this.renderer.setScissorTest(!1),this.cardboard.render(this.scene,this.camera),!0}setCamera(e={}){}destroyHelper(){}updateHelperElementSize(){if(!this.helperElement)return;let e=new l.Vector2(this.element.offsetWidth,this.element.offsetHeight),t=e.x*this.viewport.left,n=e.y*(1-this.viewport.bottom-this.viewport.height),r=e.x*this.viewport.width,i=e.y*this.viewport.height;this.helperElement.style.marginLeft!==t+`px`&&(this.helperElement.style.marginLeft=t+`px`),this.helperElement.style.marginTop!==n+`px`&&(this.helperElement.style.marginTop=n+`px`),this.helperElement.style.width!==r+`px`&&(this.helperElement.style.width=r+`px`),this.helperElement.style.height!==i+`px`&&(this.helperElement.style.height=i+`px`)}intersect(e){var t,n;if(this.locationMotion.ended===!1){this.intersectMesh.visible=!1,this.activePanoMesh=void 0,this.activeTime=void 0;return}if(this.activePanoMesh&&this.activeTime&&e-this.activeTime>NE){let e=this.activePanoMesh,t=null;return this.panoMeshes.forEach((n,r)=>{n===e&&(t=r)}),t!==null&&this.moveToPano(hb(t),{},!0),this.activePanoMesh=void 0,this.activeTime=void 0,e}let r=this.camera.getDirection(new l.Vector3),i=new l.Raycaster(this.camera.position,r);i.params.Points={threshold:.1},i.firstHitOnly=!0,i.floorIndex=-1;let a,o=[],s=this.works.getObserver(this.currentPano),c=s?s.accessibleNodes.map(e=>mb({panoIndex:e,workCode:s.work.workCode})):[];for(let e of c){let r=this.panoMeshes.get(e);if(r){let[e]=i.intersectObject((t=r.hitTestMesh)==null?r:t,!0);if(e){let t=(n=s==null?void 0:s.floorIndex)==null?0:n;o.push({panoMesh:r,intersection:Object.assign({floorIndex:t,floor:t},e)})}}}let[u]=o.sort((e,t)=>e.intersection.distance-t.intersection.distance);u?(a=u.intersection,this.activePanoMesh!==u.panoMesh&&(this.activePanoMesh=u.panoMesh,this.activeTime=e),this.intersectMesh.position.copy(u.panoMesh.position),this.intersectMesh.lookAt(this.camera.position)):(this.activePanoMesh=void 0,this.activeTime=void 0),a||(a=this.modelScene.intersectRaycaster(i)[0]);let d=$(`intersect.update`,{raycaster:i,intersection:a==null?null:a,object:this.intersectMesh});if(this.emit(`intersect.update`,d),d.defaultPrevented){this.hideIntersectMesh();return}if(a&&a.face){let e=a.face.normal,t=new l.Quaternion;t.setFromUnitVectors(new l.Vector3(0,0,1),e),this.intersectMesh.quaternion.copy(t);let n=a.point.clone();this.intersectMesh.position.copy(n),u?this.intersectMesh.visible=!1:this.intersectMesh.visible=!0}else this.intersectMesh.visible=!1;return u==null?void 0:u.panoMesh}onPanGesture(){}onTapGesture(){}onPinchGesture(){}onMouseMove(){}onMouseOut(){}},IE=.01,LE=`183`,RE={isXRRenderTarget:!0,_hasExternalTextures:!1,_autoAllocateDepthBuffer:!0,_isOpaqueFramebuffer:!0};function zE(e,t,n,r){let i=new l.RenderTarget(t,n,{format:l.RGBAFormat,type:l.UnsignedByteType,colorSpace:e.outputColorSpace,stencilBuffer:e.stencil===!0,resolveDepthBuffer:r,resolveStencilBuffer:r});return Object.assign(i,RE),i}var BE=class{constructor(e,t={}){var n;this.resources=null,this.warnedRevision=!1,this._outputBufferType=null,this.clearColorScratch=new l.Color,this.viewportScratch=new l.Vector4,this.renderer=e,this.atlasSamples=(n=t.atlasSamples)==null?0:n}get outputBufferType(){return this._outputBufferType}verify(){let e=this.renderer,t=[],n=e.backend;n?(n.isWebGLBackend!==!0&&t.push(`backend.isWebGLBackend`),typeof n.setXRTarget!=`function`&&t.push(`backend.setXRTarget`)):t.push(`renderer.backend`),typeof e.setOutputRenderTarget!=`function`&&t.push(`renderer.setOutputRenderTarget`),typeof e.getOutputRenderTarget!=`function`&&t.push(`renderer.getOutputRenderTarget`);let r=zE(this.renderer,1,1,!0);try{let e=r;for(let[n,r]of Object.entries(RE))e[n]!==r&&t.push(`xrRT.${n}(期望 ${String(r)},实际 ${String(e[n])})`);for(let n of[`multiview`,`resolveDepthBuffer`])e[n]===void 0&&t.push(`xrRT.${n}`)}finally{r.dispose()}if(t.length>0)throw Error(`[RenderTargetBridge] three 内部 API 校验失败(THREE.REVISION=${l.REVISION}),缺失或不符:${t.join(`、`)}`);l.REVISION!==LE&&!this.warnedRevision&&(this.warnedRevision=!0,console.warn(`[RenderTargetBridge] THREE.REVISION=${l.REVISION},XR 标志位语义仅在 r${LE} 复核过,继续运行`))}verifyCameras(e){let t=this.renderer.coordinateSystem,n=e.map((e,n)=>e.coordinateSystem===t?null:n).filter(e=>e!==null);if(n.length>0)throw Error(`[RenderTargetBridge] Eye_Camera[${n.join(`,`)}] 的 coordinateSystem 与 renderer(${t})不一致,three 会改写其投影矩阵(THREE.REVISION=${l.REVISION})`)}init(e){var t,n,r;this.build(e),this._outputBufferType=(r=(n=(t=this.renderer).getOutputBufferType)==null?void 0:n.call(t))==null?null:r}renderFrame(e,t,n){let r=this.renderer,i=r,a=i.backend,o={autoClear:r.autoClear,autoClearColor:r.autoClearColor,autoClearDepth:r.autoClearDepth,autoClearStencil:r.autoClearStencil,viewport:r.getViewport(this.viewportScratch).clone(),scissorTest:r.getScissorTest(),clearAlpha:r.getClearAlpha(),output:i.getOutputRenderTarget(),rt:r.getRenderTarget(),clearColor:i.getClearColor(this.clearColorScratch).clone()};try{let{atlas:s,xrRT:c,quad:u,width:d,height:f}=this.syncResources(e);r.setScissorTest(!1),r.setRenderTarget(s);let p=t.background;r.setClearColor(p instanceof l.Color?p:o.clearColor,1),r.clear(!0,!0,!1),r.autoClear=!1,r.autoClearColor=!1,r.autoClearDepth=!1,r.autoClearStencil=!1;for(let e of n){let n=e.viewport;s.viewport.set(n.x,f-n.height-n.y,n.width,n.height),r.render(t,e.camera)}r.setScissorTest(!1),a.setXRTarget(e.framebuffer),r.setRenderTarget(null),i.setOutputRenderTarget(c);let m=r.getPixelRatio();r.setViewport(0,0,(d+IE)/m,(f+IE)/m),u.render(r)}finally{i.setOutputRenderTarget(o.output),a.setXRTarget(null),r.setRenderTarget(o.rt),r.autoClear=o.autoClear,r.autoClearColor=o.autoClearColor,r.autoClearDepth=o.autoClearDepth,r.autoClearStencil=o.autoClearStencil,r.setScissorTest(o.scissorTest),r.setViewport(o.viewport),r.setClearColor(o.clearColor,o.clearAlpha)}}dispose(){var e,t,n;if(!this.resources)return;this.releaseResources();let r=this.renderer;(t=(e=r.backend)==null?void 0:e.setXRTarget)==null||t.call(e,null),(n=r.setOutputRenderTarget)==null||n.call(r,null),this._outputBufferType=null}syncResources(e){let t=this.resources;return t&&t.layer===e&&t.width===e.framebufferWidth&&t.height===e.framebufferHeight?t:this.build(e)}build(e){this.releaseResources();let t=e.framebufferWidth,n=e.framebufferHeight,r=new l.RenderTarget(t,n,{format:l.RGBAFormat,type:this.supportsHalfFloat()?l.HalfFloatType:l.UnsignedByteType,colorSpace:l.LinearSRGBColorSpace,depthBuffer:!0,stencilBuffer:!1,samples:this.atlasSamples,generateMipmaps:!1,minFilter:l.LinearFilter,magFilter:l.LinearFilter}),i=zE(this.renderer,t,n,e.ignoreDepthValues===!1),a=new l.NodeMaterial;a.fragmentNode=(0,p.vec4)((0,p.texture)(r.texture).rgb,1),a.depthTest=!1,a.depthWrite=!1;let o=new l.QuadMesh(a);return this.resources={layer:e,width:t,height:n,atlas:r,xrRT:i,quad:o},this.resources}releaseResources(){let e=this.resources;e&&(this.resources=null,e.atlas.dispose(),e.xrRT.dispose(),e.quad.material.dispose())}supportsHalfFloat(){var e;let t=(e=this.renderer.backend)==null?void 0:e.gl;return t?!!t.getExtension(`EXT_color_buffer_float`)||!!t.getExtension(`EXT_color_buffer_half_float`):!1}},VE=class{constructor(){this.root=new l.Group,this._entries=new Map,this._dir=new l.Vector3}add(e){for(let t of e){if(this._entries.has(t))continue;let e=new l.Object3D,n=new l.Object3D;e.visible=!1,n.visible=!1,this.root.add(e,n),this._entries.set(t,{source:t,targetRay:e,grip:n,rayFrame:-1})}}remove(e){let t=[];for(let n of e){let e=this._entries.get(n);e&&(this._entries.delete(n),this.root.remove(e.targetRay,e.grip),t.push(e))}return t}update(e,t,n,r){for(let i of this._entries.values()){let{source:a,targetRay:o,grip:s}=i,c=e.getPose(a.targetRaySpace,t),l=a.gripSpace?e.getPose(a.gripSpace,t):null;c?(this._applyPose(o,c,n),i.rayFrame=r):o.visible=!1,c&&l?this._applyPose(s,l,n):s.visible=!1}}hideAll(){for(let{targetRay:e,grip:t}of this._entries.values())e.visible=!1,t.visible=!1}fill(e,t,n){let r=this._entries.get(e);if(!r||r.rayFrame!==n||!r.targetRay.visible)return!1;let{matrixWorld:i}=r.targetRay;return t.ray.origin.setFromMatrixPosition(i),t.ray.direction.copy(this._dir.set(0,0,-1).transformDirection(i)),!0}clear(){for(let{targetRay:e,grip:t}of this._entries.values())this.root.remove(e,t);this._entries.clear()}entries(){return this._entries}_applyPose(e,t,n){let{position:r,orientation:i}=t.transform;e.position.set(n.x+r.x,n.y+r.y,n.z+r.z),e.quaternion.set(i.x,i.y,i.z,i.w),e.visible=!0,e.updateMatrixWorld(!0)}},HE=5e3;function UE(e){let t=[...new Set([e,`local`,`viewer`])];return t.slice(0,t.indexOf(`viewer`)+1)}function WE(){let e=Error(`会话在参考空间解析前已结束`);return e.aborted=!0,e}function GE(e){return e.map(e=>`${e.type}(${e.reason})`).join(`, `)}function KE(e,t){return(0,u.__awaiter)(this,arguments,void 0,function*(e,t,n={}){var r,i,a;let o=(r=n.timeoutMs)==null?HE:r,s=n.isAborted,c=(i=n.schedule)==null?((e,t)=>setTimeout(e,t)):i,l=(a=n.clear)==null?(e=>clearTimeout(e)):a,u=UE(t),d=[];for(let n of u){let r=yield qE(e,n,o,c,l);if(s!=null&&s())throw WE();if(r.ok)return n!==t&&console.warn(`[XR] 参考空间降级:期望 ${t},实际采用 ${n};失败:${GE(d)}`),{space:r.space,type:n,failures:d};d.push({type:n,reason:r.reason})}let f=Error(`所有参考空间均不可用(期望 ${t}):${GE(d)}`);throw f.attempts=d,f})}function qE(e,t,n,r,i){return(0,u.__awaiter)(this,void 0,void 0,function*(){let a,o=!1,s=new Promise(n=>{let r=e=>{o||n({ok:!0,space:e})},i=()=>{o||n({ok:!1,reason:`rejected`})};try{e.requestReferenceSpace(t).then(r,i)}catch(e){i()}}),c=new Promise(e=>{a=r(()=>e({ok:!1,reason:`timeout`}),n)});try{return yield Promise.race([s,c])}finally{o=!0,i(a)}})}var JE=5e3,YE=`会话在进入过程中已结束`,XE=class{static isBackendXRCapable(e){let t=e.backend;return(t==null?void 0:t.isWebGPUBackend)!==!0}static isBrowserXRCapable(){return typeof navigator<`u`&&`xr`in navigator}get isPresenting(){return this._isPresenting}get session(){return this._session}get frame(){return this._frame}get referenceSpaceType(){return this._referenceSpaceType}constructor(e,t,n){var r;this.inputs=new VE,this._isPresenting=!1,this._session=null,this._frame=null,this._referenceSpaceType=null,this.refSpace=null,this.layer=null,this.entering=!1,this.entered=!1,this.endedDuringEnter=!1,this.snapshot=null,this.listeners=[],this.firstFrameArrived=!1,this.firstFrameWaiter=null,this.frameNo=0,this.submittedNear=NaN,this.submittedFar=NaN,this.offset=new l.Vector3,this.info={time:0,hasPose:!1,headOrientation:new l.Quaternion,headLocal:new l.Vector3,views:[]},this.viewPool=[{eye:0,viewport:new l.Vector4},{eye:1,viewport:new l.Vector4}],this.frameViews=[],this.bridgeEyes=[],this.tmpViewport=new l.Vector4,this.tmpSize=new l.Vector2,this.onSessionEndEvent=()=>{var e;if(this._session){if(!this.entered){this.endedDuringEnter=!0,(e=this.firstFrameWaiter)==null||e.reject(Error(YE));return}this.teardown()}},this.onInputSourcesChangeEvent=e=>{var t,n;if(!this._session)return;let{added:r,removed:i}=e;this.inputs.add(r),this.inputs.remove(i),(n=(t=this.callbacks).onInputSourcesChange)==null||n.call(t,r,i)},this.onSelectEvent=e=>{var t,n;(n=(t=this.callbacks).onSelect)==null||n.call(t,e.inputSource)},this.onReferenceSpaceReset=()=>{},this.renderer=e,this.options=t==null?{}:t,this.callbacks=n,this.bridge=new BE(e,{atlasSamples:(r=this.options.atlasSamples)==null?0:r}),this.device=ZS(),this.profile=tC(this.device,this.options.deviceProfile,e=>{console.warn(`[XR] Device_Profile 字段 ${e} 非法,已回落默认值`)});let i=()=>{let t=new l.PerspectiveCamera;return t.coordinateSystem=e.coordinateSystem,t};this.eyeCameras=[i(),i()],this.info.views=this.frameViews}enter(e){return(0,u.__awaiter)(this,void 0,void 0,function*(){var t,n;if(!(this.entering||this.entered)){this.entering=!0,this.endedDuringEnter=!1,this.firstFrameArrived=!1,this._session=e;try{this.snapshot=this.captureRendererState(),this.bridge.verify(),this.bridge.verifyCameras(this.eyeCameras);let r=(t=this.renderer.backend)==null?void 0:t.gl;if(!r)throw Error(`[XRManager] 取不到 WebGL2 上下文(renderer.backend.gl),无法创建 XRWebGLLayer`);this.listen(e,`end`,this.onSessionEndEvent),this.listen(e,`inputsourceschange`,this.onInputSourcesChangeEvent),this.listen(e,`select`,this.onSelectEvent),yield r.makeXRCompatible(),this.throwIfEnded();let i=r.getContextAttributes(),a=new XRWebGLLayer(e,r,{alpha:!1,framebufferScaleFactor:1,antialias:i==null?void 0:i.antialias,depth:i==null?void 0:i.depth,stencil:i==null?void 0:i.stencil});this.layer=a;let o=this.options.foveation;o!==void 0&&`fixedFoveation`in a&&(a.fixedFoveation=U(o,0,1)),e.updateRenderState({baseLayer:a}),this.submittedNear=e.renderState.depthNear,this.submittedFar=e.renderState.depthFar,this.bridge.init(a);let s=yield KE(e,(n=this.options.referenceSpaceType)==null?`local-floor`:n,{isAborted:()=>this.endedDuringEnter});this.throwIfEnded(),this.refSpace=s.space,this._referenceSpaceType=s.type,this.listen(s.space,`reset`,this.onReferenceSpaceReset),nu.shared.setContext(e),yield this.waitFirstFrame(),this.throwIfEnded(),this.syncExistingInputSources(e),this.entering=!1,this.entered=!0,this._isPresenting=!0;try{this.callbacks.onSessionStart(e,this.device)}catch(e){console.error(`[XR] onSessionStart 回调抛错`,e)}}catch(e){throw this.rollback(),this.endedDuringEnter?Error(YE):e}}})}exit(){return(0,u.__awaiter)(this,void 0,void 0,function*(){let e=this._session;if(!(!this.entered||!e))try{yield e.end()}catch(t){this._session===e&&this.teardown()}})}dispose(){var e;let t=this._session;if(this.entering){this.endedDuringEnter=!0,(e=this.firstFrameWaiter)==null||e.reject(Error(YE)),t&&this.endQuietly(t);return}this.entered&&t&&(this.teardown(),this.endQuietly(t))}beginFrame(e,t,n,r,i){let a=this.info;a.time=t;let o=this._session,s=this.refSpace,c=this.layer;if(!o||!s||!c)return this.markNoPose(),a;this._frame=e,this.frameNo++,this.notifyFirstFrame();let l=e.getViewerPose(s),u=l==null?void 0:l.views,d=u?u.length:0;if(!l||!u||d!==1&&d!==2||!this.collectViews(c,u))return this.markNoPose(),this.inputs.hideAll(),a;let f=0,p=0,m=0;for(let e=0;e<d;e++){let t=u[e].transform.position;f+=t.x,p+=t.y,m+=t.z}a.headLocal.set(f/d,p/d,m/d);let h=l.transform.orientation;a.headOrientation.set(h.x,h.y,h.z,h.w),a.hasPose=!0,this.offset.copy(n).sub(a.headLocal);for(let e=0;e<d;e++){let t=u[e],a=this.eyeCameras[this.frameViews[e].eye];a.projectionMatrix.fromArray(t.projectionMatrix),a.projectionMatrixInverse.copy(a.projectionMatrix).invert();let o=t.transform.orientation;a.position.copy(n),a.quaternion.set(o.x,o.y,o.z,o.w),a.near=r,a.far=i,a.updateMatrixWorld(!0)}return this.syncDepthRange(o,r,i),this.inputs.update(e,s,this.offset,this.frameNo),a}renderEyes(e){var t;let n=this.layer;if(!n||!this._session||!this.info.hasPose)return!1;let r=this.bridgeEyes,i=this.frameViews;r.length=i.length;for(let e=0;e<i.length;e++){let n=(t=r[e])==null?r[e]={camera:this.eyeCameras[0],viewport:i[e].viewport}:t;n.camera=this.eyeCameras[i[e].eye],n.viewport=i[e].viewport}return this.bridge.renderFrame(n,e,r),!0}fillRaycaster(e,t){return this.inputs.fill(e,t,this.frameNo)}markNoPose(){this.info.hasPose=!1,this.frameViews.length=0}collectViews(e,t){let n=0;this.frameViews.length=0;for(let r=0;r<t.length;r++){let i=+(t[r].eye===`right`);n&1<<i&&(i=+(i===0)),n|=1<<i;let a=e.getViewport(t[r]);if(!a)return this.frameViews.length=0,!1;let o=this.viewPool[r];o.eye=i,o.viewport.set(a.x,a.y,a.width,a.height),this.frameViews.push(o)}return!0}syncDepthRange(e,t,n){t===this.submittedNear&&n===this.submittedFar||Number.isFinite(t)&&Number.isFinite(n)&&t>0&&n>t&&(e.updateRenderState({depthNear:t,depthFar:n}),this.submittedNear=t,this.submittedFar=n)}notifyFirstFrame(){var e;this.firstFrameArrived||(this.firstFrameArrived=!0,(e=this.firstFrameWaiter)==null||e.resolve())}throwIfEnded(){if(this.endedDuringEnter)throw Error(YE)}waitFirstFrame(){var e;if(this.firstFrameArrived)return Promise.resolve();let t=(e=this.options.firstFrameTimeoutMs)==null?JE:e;return new Promise((e,n)=>{let r=setTimeout(()=>{this.firstFrameWaiter=null,n(Error(`等待首帧超时(${t}ms 内未收到首个 XRFrame)`))},t);this.firstFrameWaiter={resolve:()=>{clearTimeout(r),this.firstFrameWaiter=null,e()},reject:e=>{clearTimeout(r),this.firstFrameWaiter=null,n(e)}}})}syncExistingInputSources(e){var t,n,r;let i=this.inputs.entries(),a=Array.from((t=e.inputSources)==null?[]:t).filter(e=>!i.has(e));a.length!==0&&(this.inputs.add(a),(r=(n=this.callbacks).onInputSourcesChange)==null||r.call(n,a,[]))}listen(e,t,n){e.addEventListener(t,n),this.listeners.push({target:e,type:t,handler:n})}removeListeners(){for(let{target:e,type:t,handler:n}of this.listeners)e.removeEventListener(t,n);this.listeners.length=0}captureRendererState(){let e=this.renderer;return{viewport:e.getViewport(new l.Vector4).clone(),autoClear:e.autoClear,autoClearColor:e.autoClearColor,autoClearDepth:e.autoClearDepth,autoClearStencil:e.autoClearStencil,pixelRatio:e.getPixelRatio(),size:e.getSize(new l.Vector2).clone()}}restoreRendererState(){let e=this.snapshot;if(!e)return;this.snapshot=null;let t=this.renderer;t.autoClear=e.autoClear,t.autoClearColor=e.autoClearColor,t.autoClearDepth=e.autoClearDepth,t.autoClearStencil=e.autoClearStencil,t.getPixelRatio()!==e.pixelRatio&&t.setPixelRatio(e.pixelRatio),t.getSize(this.tmpSize).equals(e.size)||t.setSize(e.size.x,e.size.y),t.getViewport(this.tmpViewport).equals(e.viewport)||t.setViewport(e.viewport)}releaseFrameSource(e){let t=nu.shared;e&&t.getContext()===e&&t.setContext(null)}clearReferences(){this._session=null,this._frame=null,this.refSpace=null,this._referenceSpaceType=null,this.layer=null,this.markNoPose(),this.frameNo=0,this.firstFrameArrived=!1,this.submittedNear=NaN,this.submittedFar=NaN}rollback(){var e;let t=this._session;(e=this.firstFrameWaiter)==null||e.reject(Error(YE)),this.removeListeners(),this.inputs.clear(),this.bridge.dispose(),this.releaseFrameSource(t),this.restoreRendererState(),this.clearReferences(),this._isPresenting=!1,this.entering=!1,this.entered=!1}teardown(){var e,t;let n=this._session;if(n){this._isPresenting=!1,this.entered=!1;try{(t=(e=this.callbacks).onSessionEnding)==null||t.call(e)}catch(e){console.error(`[XR] onSessionEnding 回调抛错`,e)}this.inputs.clear(),this.bridge.dispose(),this.removeListeners(),this.releaseFrameSource(n),this.restoreRendererState(),this.clearReferences(),this.callbacks.onSessionEnd(this.device)}}endQuietly(e){try{Promise.resolve(e.end()).catch(()=>{})}catch(e){}}},ZE={Handedness:Object.freeze({NONE:`none`,LEFT:`left`,RIGHT:`right`}),ComponentState:Object.freeze({DEFAULT:`default`,TOUCHED:`touched`,PRESSED:`pressed`}),ComponentProperty:Object.freeze({BUTTON:`button`,X_AXIS:`xAxis`,Y_AXIS:`yAxis`,STATE:`state`}),ComponentType:Object.freeze({TRIGGER:`trigger`,SQUEEZE:`squeeze`,TOUCHPAD:`touchpad`,THUMBSTICK:`thumbstick`,BUTTON:`button`}),ButtonTouchThreshold:.05,AxisTouchThreshold:.1,VisualResponseProperty:Object.freeze({TRANSFORM:`transform`,VISIBILITY:`visibility`})};function QE(e){return(0,u.__awaiter)(this,void 0,void 0,function*(){let t=yield fetch(e);if(t.ok)return t.json();throw Error(t.statusText)})}function $E(e){return(0,u.__awaiter)(this,void 0,void 0,function*(){if(!e)throw Error(`No basePath supplied`);return yield QE(`${e}/profilesList.json`)})}function eD(e,t){return(0,u.__awaiter)(this,arguments,void 0,function*(e,t,n=null,r=!0){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No basePath supplied`);let i=yield $E(t),a;if(e.profiles.some(e=>{let n=i[e];return n&&(a={profileId:e,profilePath:`${t}/${n.path}`,deprecated:!!n.deprecated}),!!a}),!a){if(!n)throw Error(`No matching profile name found`);let e=i[n];if(!e)throw Error(`No matching profile name found and default profile "${n}" missing.`);a={profileId:n,profilePath:`${t}/${e.path}`,deprecated:!!e.deprecated}}let o=yield QE(a.profilePath),s;if(r){let t;if(t=o.layouts[e.handedness],!t)throw Error(`No matching handedness, ${e.handedness}, in profile ${a.profileId}`);t.assetPath&&(s=a.profilePath.replace(`profile.json`,t.assetPath))}return{profile:o,assetPath:s}})}var tD={xAxis:0,yAxis:0,button:0,state:ZE.ComponentState.DEFAULT};function nD(e=0,t=0){let n=e,r=t;if(Math.sqrt(e*e+t*t)>1){let i=Math.atan2(t,e);n=Math.cos(i),r=Math.sin(i)}return{normalizedXAxis:n*.5+.5,normalizedYAxis:r*.5+.5}}var rD=class{constructor(e){this.componentProperty=e.componentProperty,this.states=e.states,this.valueNodeName=e.valueNodeName,this.valueNodeProperty=e.valueNodeProperty,this.valueNodeProperty===ZE.VisualResponseProperty.TRANSFORM&&(this.minNodeName=e.minNodeName,this.maxNodeName=e.maxNodeName),this.value=0,this.updateFromComponent(tD)}updateFromComponent({xAxis:e,yAxis:t,button:n,state:r}){let{normalizedXAxis:i,normalizedYAxis:a}=nD(e,t);switch(this.componentProperty){case ZE.ComponentProperty.X_AXIS:this.value=this.states.includes(r)?i:.5;break;case ZE.ComponentProperty.Y_AXIS:this.value=this.states.includes(r)?a:.5;break;case ZE.ComponentProperty.BUTTON:this.value=this.states.includes(r)?n:0;break;case ZE.ComponentProperty.STATE:this.valueNodeProperty===ZE.VisualResponseProperty.VISIBILITY?this.value=this.states.includes(r):this.value=+!!this.states.includes(r);break;default:throw Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`)}}},iD=class{constructor(e,t){if(!e||!t||!t.visualResponses||!t.gamepadIndices||Object.keys(t.gamepadIndices).length===0)throw Error(`Invalid arguments supplied`);this.id=e,this.type=t.type,this.rootNodeName=t.rootNodeName,this.touchPointNodeName=t.touchPointNodeName,this.visualResponses={},Object.keys(t.visualResponses).forEach(e=>{let n=new rD(t.visualResponses[e]);this.visualResponses[e]=n}),this.gamepadIndices=Object.assign({},t.gamepadIndices),this.values={state:ZE.ComponentState.DEFAULT,button:this.gamepadIndices.button===void 0?void 0:0,xAxis:this.gamepadIndices.xAxis===void 0?void 0:0,yAxis:this.gamepadIndices.yAxis===void 0?void 0:0}}get data(){return Object.assign({id:this.id},this.values)}updateFromGamepad(e){if(this.values.state=ZE.ComponentState.DEFAULT,this.gamepadIndices.button!==void 0&&e.buttons.length>this.gamepadIndices.button){let t=e.buttons[this.gamepadIndices.button];this.values.button=t.value,this.values.button=this.values.button<0?0:this.values.button,this.values.button=this.values.button>1?1:this.values.button,t.pressed||this.values.button===1?this.values.state=ZE.ComponentState.PRESSED:(t.touched||this.values.button>ZE.ButtonTouchThreshold)&&(this.values.state=ZE.ComponentState.TOUCHED)}this.gamepadIndices.xAxis!==void 0&&e.axes.length>this.gamepadIndices.xAxis&&(this.values.xAxis=e.axes[this.gamepadIndices.xAxis],this.values.xAxis=this.values.xAxis<-1?-1:this.values.xAxis,this.values.xAxis=this.values.xAxis>1?1:this.values.xAxis,this.values.state===ZE.ComponentState.DEFAULT&&Math.abs(this.values.xAxis)>ZE.AxisTouchThreshold&&(this.values.state=ZE.ComponentState.TOUCHED)),this.gamepadIndices.yAxis!==void 0&&e.axes.length>this.gamepadIndices.yAxis&&(this.values.yAxis=e.axes[this.gamepadIndices.yAxis],this.values.yAxis=this.values.yAxis<-1?-1:this.values.yAxis,this.values.yAxis=this.values.yAxis>1?1:this.values.yAxis,this.values.state===ZE.ComponentState.DEFAULT&&Math.abs(this.values.yAxis)>ZE.AxisTouchThreshold&&(this.values.state=ZE.ComponentState.TOUCHED)),Object.values(this.visualResponses).forEach(e=>{e.updateFromComponent(this.values)})}},aD=class{constructor(e,t,n){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No profile supplied`);this.xrInputSource=e,this.assetUrl=n,this.id=t.profileId,this.layoutDescription=t.layouts[e.handedness],this.components={},Object.keys(this.layoutDescription.components).forEach(e=>{let t=this.layoutDescription.components[e];this.components[e]=new iD(e,t)}),this.updateFromGamepad()}get gripSpace(){return this.xrInputSource.gripSpace}get targetRaySpace(){return this.xrInputSource.targetRaySpace}get data(){let e=[];return Object.values(this.components).forEach(t=>{e.push(t.data)}),e}updateFromGamepad(){Object.values(this.components).forEach(e=>{e.updateFromGamepad(this.xrInputSource.gamepad)})}},oD=`https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles`,sD=`generic-trigger`,cD=class extends l.Object3D{constructor(){super(),this.motionController=null,this.envMap=null}setEnvironmentMap(e){return this.envMap==e?this:(this.envMap=e,this.traverse(e=>{e instanceof l.Mesh&&e.isMesh&&(e.material.envMap=this.envMap,e.material.needsUpdate=!0)}),this)}updateMatrixWorld(e){super.updateMatrixWorld(e),this.motionController&&(this.motionController.updateFromGamepad(),Object.values(this.motionController.components).forEach(e=>{Object.values(e.visualResponses).forEach(e=>{let{valueNode:t,minNode:n,maxNode:r,value:i,valueNodeProperty:a}=e;t&&(a===ZE.VisualResponseProperty.VISIBILITY?t.visible=i:a===ZE.VisualResponseProperty.TRANSFORM&&(t.quaternion.copy(n.quaternion).slerp(r.quaternion,i),t.position.lerpVectors(n.position,r.position,i)))})}))}};function lD(e,t){Object.values(e.components).forEach(e=>{let{type:n,touchPointNodeName:r,visualResponses:i}=e;if(n===ZE.ComponentType.TOUCHPAD)if(e.touchPointNode=t.getObjectByName(r),e.touchPointNode){let t=new l.Mesh(new l.SphereGeometry(.001),new l.MeshBasicMaterial({color:255}));e.touchPointNode.add(t)}else console.warn(`Could not find touch dot, ${e.touchPointNodeName}, in touchpad component ${e.id}`);Object.values(i).forEach(e=>{let{valueNodeName:n,minNodeName:r,maxNodeName:i,valueNodeProperty:a}=e;if(a===ZE.VisualResponseProperty.TRANSFORM){if(e.minNode=t.getObjectByName(r),e.maxNode=t.getObjectByName(i),!e.minNode){console.warn(`Could not find ${r} in the model`);return}if(!e.maxNode){console.warn(`Could not find ${i} in the model`);return}}e.valueNode=t.getObjectByName(n),e.valueNode||console.warn(`Could not find ${n} in the model`)})})}function uD(e,t){lD(e.motionController,t),e.envMap&&t.traverse(t=>{t instanceof l.Mesh&&t.isMesh&&(t.material.envMap=e.envMap,t.material.needsUpdate=!0)}),e.add(t)}var dD=class{constructor(e=null){this.gltfLoader=e,this.path=oD,this._assetCache={}}createControllerModel(e){let t=new cD,n=null;return e.addEventListener(`connected`,e=>{let r=e.data;r.targetRayMode!==`tracked-pointer`||!r.gamepad||eD(r,this.path,sD).then(({profile:e,assetPath:i})=>{t.motionController=new aD(r,e,i);let a=this._assetCache[t.motionController.assetUrl];if(a)n=a.scene.clone(),uD(t,n);else{if(!this.gltfLoader)throw Error(`GLTFLoader not set.`);this.gltfLoader.load(t.motionController.assetUrl,e=>{this._assetCache[t.motionController.assetUrl]=e,n=e.scene.clone(),uD(t,n)})}}).catch(e=>{console.warn(e)})}),e.addEventListener(`disconnected`,()=>{t.motionController=null,t.remove(n),n=null}),t}},fD=class{constructor(){this.states=new Map}sample(e,t,n,r){let i=this.states.get(e),a=i==null?void 0:i.get(t);if(!a){if(!n)return[];let a=i;return a||(a=new Map,this.states.set(e,a)),a.set(t,{downAt:r,pressFired:!1}),[{type:`buttonDown`,name:t,source:e,time:r,duration:0}]}let o=r-a.downAt,s=o>=300;if(n)return s&&!a.pressFired?(a.pressFired=!0,[{type:`press`,name:t,source:e,time:r,duration:o}]):[];this.deleteState(e,t);let c=[];return a.pressFired?c.push({type:`buttonUp`,name:t,source:e,time:r,duration:o}):s?(c.push({type:`press`,name:t,source:e,time:r,duration:o}),c.push({type:`buttonUp`,name:t,source:e,time:r,duration:o})):(c.push({type:`buttonUp`,name:t,source:e,time:r,duration:o}),c.push({type:`tap`,name:t,source:e,time:r,duration:o})),c}removeSource(e,t){let n=this.states.get(e);if(!n)return[];let r=[];for(let[i,a]of n)r.push({type:`buttonUp`,name:i,source:e,time:t,duration:t-a.downAt});return this.states.delete(e),r}reset(e){let t=[];for(let[n,r]of this.states)for(let[i,a]of r)t.push({type:`buttonUp`,name:i,source:n,time:e,duration:e-a.downAt});return this.states.clear(),t}deleteState(e,t){let n=this.states.get(e);n&&(n.delete(t),n.size===0&&this.states.delete(e))}},pD=Object.assign(Object.assign({},ml(VT,[`maxLatitude`,`minLatitude`])),{referenceSpaceType:`local-floor`,foveation:1,showControllerModel:!0,showPointerRay:!0,deviceProfile:{}}),mD=5,hD=1e-4,gD=1500;function _D(){return{load(e,t){fl.ajax(e,{responseType:`arraybuffer`}).then(t=>{var n;return bp(t.body,{resourcePath:e.slice(0,e.lastIndexOf(`/`)+1),search:(n=e.split(`?`)[1])==null?``:n,fetcher:fl})}).then(e=>t(e)).catch(t=>{console.warn(`[XRPanorama] 手柄模型 glTF 加载失败,跳过模型挂载:`,e,t)})}}}var vD=class e extends HT{static parseArgs(t){if(t instanceof e)return t;let n=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2});return super.parseArgs(n)}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`XRPanorama`})}constructor(t){var n,r,i,a,o;let s=e.parseArgs(t);super(s),this.controllerRayFilled={left:!1,right:!1},this.controllerModelFactory=null,this.buttonStateMachine=new fD,this.inputVisuals=new Map,this.inputsDirty=!1,this.walkedThisFrame=!1,this.lastFrameTime=0,this.walkSources={left:null,right:null},this.gazeRayPool=null,this.mode=`XRPanorama`;let c=pD,l=(n=t.referenceSpaceType)==null?c.referenceSpaceType:n,u=(r=t.foveation)==null?c.foveation:r;this.showControllerModel=(i=t.showControllerModel)==null?c.showControllerModel:i,this.showPointerRay=(a=t.showPointerRay)==null?c.showPointerRay:a,this.controllerRaycasters={left:this.createPickingRaycaster(),right:this.createPickingRaycaster()},this.gazeRaycaster=null,this.xrManager=new XE(this.renderer,{referenceSpaceType:l,foveation:u,deviceProfile:(o=t.deviceProfile)==null?c.deviceProfile:o},{onSessionStart:(e,t)=>{this.emit(`xr.session.start`,$(`xr.session.start`,{session:e,machineType:nC(t)}))},onSessionEnd:e=>{this.emit(`xr.session.end`,$(`xr.session.end`,{session:null,machineType:nC(e)}))},onSessionEnding:()=>{this.resetButtonStates(),this.clearInputVisuals()},onSelect:e=>this.onXRSelect(e),onInputSourcesChange:(e,t)=>{for(let e of t){this.removeInputVisual(e);for(let t of this.buttonStateMachine.removeSource(e,this.lastFrameTime))this.dispatchButtonEvent(t)}for(let t of e)this.syncInputVisual(t)}}),this.buttonMaps={left:this.createButtonMap(`left`),right:this.createButtonMap(`right`)},this.scene.add(this.xrManager.inputs.root);let d=nu.shared.getContext();(d?this.xrManager.enter(d):Promise.reject(Error(`[XR] 缺少 XRSession:请经 Five.changeMode 进入 XRPanorama`))).catch(e=>{console.error(`[XR] 进入失败`,e),this.emit(`error`,e instanceof Error?e:Error(String(e)))})}updateConfiguration(e){let t=super.updateConfiguration(Object.assign(Object.assign({},e),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2}));return e.showControllerModel!==void 0&&e.showControllerModel!==this.showControllerModel&&(this.showControllerModel=e.showControllerModel,this.inputsDirty=!0),e.showPointerRay!==void 0&&e.showPointerRay!==this.showPointerRay&&(this.showPointerRay=e.showPointerRay,this.inputsDirty=!0),t}updateTime(e,t,...n){var r,i;if(this.destroyed)return;this.walkedThisFrame=!1,this.lastFrameTime=e;let a=n[1];if(this.userAction=!0,this.needsRender=!0,!a){this.controllerRayFilled.left=!1,this.controllerRayFilled.right=!1,this.gazeRaycaster=null,super.updateTime(e,t),this.intersect(e);return}super.updateTime(e,t);let o=this.xrManager.beginFrame(a,e,this.camera.position,this.camera.near,this.camera.far);if(o.hasPose&&this.syncCameraFromXR(o.headOrientation),this.inputsDirty){this.inputsDirty=!1;for(let e of this.xrManager.inputs.entries().keys())this.syncInputVisual(e)}this.updateControllerHelper((i=(r=this.xrManager.session)==null?void 0:r.inputSources)==null?[]:i,e,t),this.updateGazeRay(),this.intersect(e)}syncCameraFromXR(e){this.camera.quaternion.copy(e),this.camera.matrix.compose(this.camera.position,this.camera.quaternion,this.camera.scale),this.camera.computePose(this.camera.pose.distance)}render(){return this.xrManager.isPresenting?(this.xrManager.renderEyes(this.scene),!0):!1}updateCamera(e,t,n){return Promise.resolve()}updateCameraWithKeyframes(e,t,n){return Promise.resolve()}setCamera(e={}){e.offset&&this.camera.position.copy(e.offset),this.camera.matrix.compose(this.camera.position,this.camera.quaternion,this.camera.scale),this.camera.computePose(this.camera.pose.distance)}updateRenderSize(){this.needsRender=!0}isReady(){return!1}createPickingRaycaster(){let e=new l.Raycaster;return e.params.Points={threshold:.1},e.firstHitOnly=!0,e.floorIndex=-1,e}updateControllerHelper(e,t,n){var r,i,a;if(this.controllerRayFilled.left=!1,this.controllerRayFilled.right=!1,this.walkSources.left=null,this.walkSources.right=null,!e||e.length===0)return;let o={up:0,down:0,left:0,right:0},s={up:0,down:0,left:0,right:0},c={X:!1,Y:!1,LeftTrigger:!1,LeftPinch:!1,A:!1,B:!1,RightTrigger:!1,RightPinch:!1};for(let n=0;n<e.length;n++){let l=e[n];if(!l)continue;let u=l.handedness===`left`?`left`:`right`;this.xrManager.fillRaycaster(l,this.controllerRaycasters[u])&&(this.controllerRayFilled[u]=!0),this.readAxes(l.gamepad,u===`left`?o:s);let d=(r=l.gamepad)==null?void 0:r.buttons;for(let{name:e,index:n}of this.buttonMaps[u]){let r=(a=(i=d==null?void 0:d[n])==null?void 0:i.pressed)==null?!1:a;r&&(c[e]=!0);for(let n of this.buttonStateMachine.sample(l,e,r,t))this.dispatchButtonEvent(n)}}this.emit(`xr.controller.update`,$(`xr.controller.update`,{left:{axes:o,raycaster:this.controllerRaycasters.left,deltaTime:n},right:{axes:s,raycaster:this.controllerRaycasters.right,deltaTime:n},buttons:c})),this.walkByTap()}createButtonMap(e){let t=this.xrManager.profile.buttons,n=e===`left`,r=[[n?`LeftTrigger`:`RightTrigger`,t.trigger],[n?`X`:`A`,t.primary],[n?`Y`:`B`,t.secondary],[n?`LeftPinch`:`RightPinch`,t.pinch]],i=[];for(let[e,t]of r)t!==null&&i.push({name:e,index:t});return i}dispatchButtonEvent(e){let{type:t,name:n,source:r}=e,i=this.emitGesture(`xr.gesture.${t}`,n,t===`buttonDown`||t===`tap`,t===`buttonUp`||t===`tap`);t===`tap`&&!i.defaultPrevented&&(n===`RightTrigger`?this.walkSources.right=r:n===`LeftTrigger`&&(this.walkSources.left=r))}walkByTap(){this.tryWalk(this.walkSources.right,`right`),this.tryWalk(this.walkSources.left,`left`)}tryWalk(e,t){if(!e||this.walkedThisFrame)return;let n=this.controllerRaycasters[t];this.xrManager.fillRaycaster(e,n)&&(this.walkedThisFrame=!0,this.activePanoMesh=void 0,this.activeTime=void 0,this.checkSelectedPano(n))}resetButtonStates(){for(let e of this.buttonStateMachine.reset(this.lastFrameTime))this.dispatchButtonEvent(e)}readAxes(e,t){var n,r;if(!e)return;let{x:i,y:a}=this.xrManager.profile.axes,o=(n=i===null?0:e.axes[i])==null?0:n,s=(r=a===null?0:e.axes[a])==null?0:r;t.right=o>0?o:0,t.left=o<0?-o:0,t.down=s>0?s:0,t.up=s<0?-s:0}getControllerModelFactory(){if(!this.controllerModelFactory){let e=new dD;e.gltfLoader=_D(),this.controllerModelFactory=e}return this.controllerModelFactory}syncInputVisual(e){let t=this.xrManager.inputs.entries().get(e);if(!t)return;let n=this.inputVisuals.get(e);n||(n={},this.inputVisuals.set(e,n));let r=e.targetRayMode===`tracked-pointer`,i=r&&!!e.gamepad&&!!e.gripSpace&&this.showControllerModel&&this.xrManager.profile.model!==`none`;if(i&&!n.model){let r=new l.Object3D,i=this.getControllerModelFactory().createControllerModel(r);r.dispatchEvent({type:`connected`,data:e}),t.grip.add(i),n.model=i}else!i&&n.model&&(n.model.removeFromParent(),n.model=void 0);let a=r&&this.showPointerRay;if(a&&!n.ray){let e=new l.BufferGeometry;e.setAttribute(`position`,new l.Float32BufferAttribute([0,0,0,0,0,-5],3));let r=new l.LineBasicMaterial({color:16777215,depthTest:!1,depthWrite:!1,transparent:!0}),i=new l.LineSegments(e,r);i.renderOrder=999,i.frustumCulled=!1,t.targetRay.add(i),n.ray=i,n.rayLength=mD}else!a&&n.ray&&(this.disposeRay(n.ray),n.ray=void 0)}updatePointerRayLength(e,t){for(let[n,r]of this.inputVisuals){let i=r.ray;if(!i)continue;let a=n.handedness===`left`?`left`:`right`,o=mD;if(e&&t&&e===this.controllerRaycasters[a]&&(o=Math.min(e.ray.origin.distanceTo(t),mD)),r.rayLength!==void 0&&Math.abs(r.rayLength-o)<hD)continue;let s=i.geometry.getAttribute(`position`);s.setZ(1,-o),s.needsUpdate=!0,r.rayLength=o}}removeInputVisual(e){var t;let n=this.inputVisuals.get(e);n&&((t=n.model)==null||t.removeFromParent(),n.ray&&this.disposeRay(n.ray),this.inputVisuals.delete(e))}clearInputVisuals(){for(let e of Array.from(this.inputVisuals.keys()))this.removeInputVisual(e)}disposeRay(e){e.removeFromParent(),e.geometry.dispose(),e.material.dispose()}emitGesture(e,t,n,r){let i=$(e,{session:this.xrManager.session,buttons:t,machineType:nC(this.xrManager.device),isFirst:n,isFinal:r,controllers:{raycaster:{leftRay:this.controllerRaycasters.left,rightRay:this.controllerRaycasters.right}}});return this.emit(e,i),i}updateGazeRay(){var e,t;let n=(e=this.xrManager.session)==null?void 0:e.inputSources;if(!n||n.length===0){this.gazeRaycaster=null;return}let r=null;for(let e=0;e<n.length;e++){let t=n[e];if(!t)continue;let i=t.targetRayMode;if(i===`transient-pointer`||i===`gaze`||t.hand!=null){r=t;break}}if(!r){this.gazeRaycaster=null;return}let i=(t=this.gazeRayPool)==null?this.gazeRayPool=this.createPickingRaycaster():t;this.gazeRaycaster=this.xrManager.fillRaycaster(r,i)?i:null}onXRSelect(e){var t;if(e.targetRayMode!==`gaze`&&e.targetRayMode!==`transient-pointer`)return;let n=(t=this.gazeRayPool)==null?this.gazeRayPool=this.createPickingRaycaster():t;this.xrManager.fillRaycaster(e,n)&&this.checkSelectedPano(n)}pickPickingRaycaster(){return this.gazeRaycaster?this.gazeRaycaster:this.controllerRayFilled.right?this.controllerRaycasters.right:this.controllerRayFilled.left?this.controllerRaycasters.left:null}intersect(e){var t,n;if(this.locationMotion.ended===!1){this.intersectMesh.visible=!1,this.activePanoMesh=void 0,this.activeTime=void 0,this.updatePointerRayLength(null,null);return}if(this.activePanoMesh&&this.activeTime&&e-this.activeTime>gD){let e=this.activePanoMesh,t=null;return this.panoMeshes.forEach((n,r)=>{n===e&&(t=r)}),t!==null&&(this.moveToPano(hb(t),{},!0),this.walkedThisFrame=!0),this.activePanoMesh=void 0,this.activeTime=void 0,this.updatePointerRayLength(null,null),e}let r=this.pickPickingRaycaster();if(!r){this.intersectMesh.visible=!1,this.activePanoMesh=void 0,this.activeTime=void 0,this.updatePointerRayLength(null,null);return}let i,a=[],o=this.works.getObserver(this.currentPano),s=o?o.accessibleNodes.map(e=>mb({panoIndex:e,workCode:o.work.workCode})):[];for(let e of s){let i=this.panoMeshes.get(e);if(i){let[e]=r.intersectObject((t=i.hitTestMesh)==null?i:t,!0);if(e){let t=(n=o==null?void 0:o.floorIndex)==null?0:n;a.push({panoMesh:i,intersection:Object.assign({floorIndex:t,floor:t},e)})}}}let[c]=a.sort((e,t)=>e.intersection.distance-t.intersection.distance);c?(i=c.intersection,this.activePanoMesh!==c.panoMesh&&(this.activePanoMesh=c.panoMesh,this.activeTime=e),this.intersectMesh.position.copy(c.panoMesh.position),this.intersectMesh.lookAt(this.camera.position)):(this.activePanoMesh=void 0,this.activeTime=void 0),i||(i=this.modelScene.intersectRaycaster(r)[0]),this.updatePointerRayLength(r,i?i.point:null);let u=$(`intersect.update`,{raycaster:r,intersection:i==null?null:i,object:this.intersectMesh});if(this.emit(`intersect.update`,u),u.defaultPrevented){this.hideIntersectMesh();return}if(i&&i.face){let e=i.face.normal,t=new l.Quaternion;t.setFromUnitVectors(new l.Vector3(0,0,1),e),this.intersectMesh.quaternion.copy(t);let n=i.point.clone();this.intersectMesh.position.copy(n),c?this.intersectMesh.visible=!1:this.intersectMesh.visible=!0}else this.intersectMesh.visible=!1;return c==null?void 0:c.panoMesh}checkSelectedPano(e){var t;this.stopMomentumMovement();let n=this.works.getObserver(this.currentPano);if(!n)return;let r=n.work.observers,i=n.accessibleNodes.filter(e=>{if(e===this.currentPano.panoIndex&&n.work.workCode===this.currentPano.workCode)return!1;let t=r[e];return!t||t.position.clone().applyMatrix4(t.work.transform).distanceTo(this.camera.position)>this.maxAccessibleDistance?!1:t.loadable||t.active}),a=null,[o]=this.modelScene.intersectRaycaster(e);if(o){let[e,n]=em(i,e=>{let t=r[e];return t?t.standingPosition.clone().applyMatrix4(t.work.transform).distanceTo(o.point):1/0},!0);typeof e==`number`&&n<this.panoTapTriggerRadius&&(a=(t=r[e])==null?null:t)}if(a||(a=this.getForwardObserverOrNot(this.xrManager.eyeCameras[0],e)),a&&a.panoId===mb(this.currentPano)&&(a=null),a&&!this.locationMotion.ended){for(let e of this.locationMotion.keyframes)if(this.panoResourceFromLocationMotionKeyframe(e).panoId===a.panoId){a=null;break}}if(!a){this.locationMotion.ended===!0&&this.cameraBounce();return}let s={workCode:a.work.workCode,panoIndex:a.panoIndex,mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,distance:0,offset:a.position.clone()};if(this.emit(`pano.select`,$(`pano.select`,{prevPano:this.currentPano,state:s,userAction:!0,options:{},progress:0,error:null})),!a.active){let e=this.panoMeshes.get(a.panoId);e&&(e.setDisabled(!1),e.setLoading(!0));return}this.emit(`pano.request`,$(`pano.request`,{userAction:!0,prevPano:this.currentPano,state:s,options:{},progress:0,error:null}))}destroy(){super.destroy(),this.xrManager.dispose(),this.clearInputVisuals(),this.scene.remove(this.xrManager.inputs.root)}onPanGesture(){}onTapGesture(){}onPinchGesture(){}onMouseMove(){}onMouseOut(){}},yD=new l.Vector3(0,1.6,0),bD=new l.Box3,xD=new l.Vector3,SD=Object.assign({},Lw),CD=class e extends Rw{static parseArgs(t){return t instanceof e?t:super.parseArgs(t)}static initAnimationEndState(e){var t,n,r,i,a,o;let s=this.parseArgs(e),c=s.works,{state:u,currentState:d}=e.initial,f=typeof u.panoIndex==`number`?{workCode:(r=(t=u.workCode)==null?(n=s.works[0])==null?void 0:n.workCode:t)==null?``:r,panoIndex:u.panoIndex}:{workCode:d.workCode,panoIndex:d.panoIndex},p=c.getObserver(f),m=U((i=u.fov)==null?!p||XC(d.mode)?d.fov:s.defaultFov:i,s.minFov,s.maxFov),h=(a=u.longitude)==null?d.longitude:a,g=U(typeof s.minLatitude==`function`?s.minLatitude(m):s.minLatitude,-Math.PI/2,Math.PI/2),_=U(typeof s.maxLatitude==`function`?s.maxLatitude(m):s.maxLatitude,-Math.PI/2,Math.PI/2),v=U((o=u.latitude)==null?!p||XC(d.mode)?d.latitude:s.defaultLatitude:o,g,_),y=new l.Vector3;if(s.initial.state.offset)y.copy(s.initial.state.offset);else if(p)y.copy(p.position).applyMatrix4(p.work.transform);else{let e=ha(d).setLength(d.distance);y.copy(s.initial.currentState.offset).sub(e)}return{workCode:f.workCode,panoIndex:f.panoIndex,mode:`Model`,longitude:h,latitude:v,fov:m,offset:y,distance:0}}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Model`,this.locationMotion=new Y({x:this.camera.pose.offset.x,y:this.camera.pose.offset.y,z:this.camera.pose.offset.z,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Y({modelAlpha:this.modelScene.parameter.resolveValue().modelAlpha}),this.perspToOrthoMotion=new Y({perspToOrtho:this.camera.perspToOrtho.x})}updateConfiguration(e){return super.updateConfiguration(e)}destroy(){super.destroy(),this.locationMotion.dispose()}isReady(){return this.locationMotion.ended===!1?!1:super.isReady()}updateWork(t,n,r,i){this.works=t;let a=e.initAnimationEndState(Object.assign(Object.assign({},this),{initial:{currentState:Object.assign(Object.assign({},this.currentPano),this.camera.pose),duration:r.duration,effect:r.effect,state:n,userAction:i}}));return(a.workCode!==this.currentPano.workCode||a.panoIndex!==this.currentPano.panoIndex||a.longitude!==this.cameraMotion.value.longitude||a.latitude!==this.cameraMotion.value.latitude||a.fov!==this.cameraMotion.value.fov)&&this.moveToPosition(a.offset,{duration:0,longitude:a.longitude,latitude:a.latitude,fov:a.fov},i),!0}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},i={};return r.distance=0,e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(i.longitude=e.longitude),e.latitude!==void 0&&(i.latitude=e.latitude),e.fov!==void 0&&(i.fov=e.fov),this.locationMotion.set(r,t).catch(q),this.cameraMotion.set(i,t).catch(q)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],i=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:0,x:t.value.offset.x,y:t.value.offset.x,z:t.value.offset.x}}),i.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(q),this.cameraMotion.setKeyframes(e,t)})}updateTime(e,t,...n){if(this.destroyed)return;let r={},i={};if(this.modelAlphaMotion.ended||(this.modelAlphaMotion.update(e),r.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.modelScene.parameter.modelAlpha===0&&this.modelScene.parameter.progress!==1){let{pano0:e,pano1:t}=this.modelScene.parameter;e&&e.map!==(t==null?void 0:t.map)&&e.map.dispose(),r.progress=1,r.pano0=r.pano1=t}if(this.perspToOrthoMotion.ended||(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(U(this.perspToOrthoMotion.value.perspToOrtho,0,1))),!this.locationMotion.ended){this.locationMotion.update(e),i.distance=this.locationMotion.value.distance,i.offset=new l.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z);let t=new l.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),n=[];for(let e of this.works){let r=this.modelScene.models.find(t=>t.work===e);if(!(!r||r.visible===!1)&&!(e.observers.length<=0)&&(bD.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),bD.containsPoint(t)))for(let t of e.observers)n.push(t)}let r=em(n,e=>xD.copy(e.position).applyMatrix4(e.work.transform).distanceTo(t));this.currentPano=r?{workCode:r.work.workCode,panoIndex:r.panoIndex}:{workCode:``,panoIndex:0}}this.cameraMotion.ended||(this.cameraMotion.update(e),i.longitude=this.cameraMotion.value.longitude,i.latitude=this.cameraMotion.value.latitude,i.fov=this.cameraMotion.value.fov),ZC(r)||this.modelScene.parameter.set(r),ZC(i)||this.setCamera(i);let a=this.works.getObserver(this.currentPano);if(this.intersectMesh&&this.intersectMesh.parent&&a&&a.position.y-a.standingPosition.y>10){let e=U(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1)}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:i,userAction:a}=this.initial;this.userAction=a;let o=e.initAnimationEndState(this),s={modelAlpha:1},c={perspToOrtho:0},l={longitude:o.longitude,latitude:o.latitude,fov:o.fov,duration:i,moveStartCallback:e=>{this.perspToOrthoMotion.set(c,i).catch(q),this.modelAlphaMotion.set(s,i).catch(q),this.emit(`initAnimation.start`,$(`initAnimation.start`,{state:e,userAction:this.userAction}))},moveEndCallback:e=>{this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:e,userAction:this.userAction})),t()},moveCancelCallback:()=>{let e=this.currentPano,n=Object.assign(Object.assign({},e),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance});this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:n,userAction:this.userAction})),t()}};this.moveToPosition(o.offset,l,a)})}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(K())[1],t=this.locationMotion.getKeyFrameSegment(K())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:new l.Vector3(t.value.x,t.value.y,t.value.z),distance:t.value.distance})}moveToPano(e,t={},n){let r=this.works.getObserver(e);if(r){let e=new l.Vector3().copy(r.position).applyMatrix4(r.work.transform);this.moveToPosition(e,t,n)}}moveToPosition(e,t={},n){var r,i,a;this.userAction=n,this.stopMomentumMovement();let o=K(),s=new l.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),c=s.distanceTo(e),u=this.locationMotion.getProgressVelocity(o),d=0;for(let e=1;e<this.locationMotion.keyframes.length;e++){let{x:t,y:n,z:r}=this.locationMotion.keyframes[e-1].value,{x:i,y:a,z:o}=this.locationMotion.keyframes[e].value;d+=Math.sqrt(Math.pow(i-t,2)+Math.pow(a-n,2)+Math.pow(o-r,2))}let f=c===0?0:u*d/c,p=this.calculateMovingDuration(t.duration,c),m={x:e.x,y:e.y,z:e.z,distance:0},h={longitude:t.longitude,latitude:t.latitude,fov:t.fov},g=[];for(let e of this.works){let t=this.modelScene.models.find(t=>t.work===e);if(!(!t||t.visible===!1)&&!(e.observers.length<=0)&&(bD.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),bD.containsPoint(s)))for(let t of e.observers)g.push(t)}let _=em(g,e=>xD.copy(e.position).applyMatrix4(e.work.transform).distanceTo(s)),v=_?{workCode:_.work.workCode,panoIndex:_.panoIndex}:{workCode:``,panoIndex:0},y=Object.assign(Object.assign({},v),{mode:this.mode,longitude:(r=h.longitude)==null?this.camera.pose.longitude:r,latitude:(i=h.latitude)==null?this.camera.pose.latitude:i,fov:(a=h.fov)==null?this.camera.pose.fov:a,offset:e.clone(),distance:0}),b=this.currentPano;this.emit(`pano.moveTo`,$(`pano.moveTo`,{options:t,prevPano:b,progress:0,state:y,userAction:this.userAction,error:null})),t.moveStartCallback&&t.moveStartCallback(y),this.cameraMotion.set(h,p).catch(q),this.locationMotion.set(m,p,f).then(()=>{for(let e of this.modelScene.children)e instanceof Fy&&e.show();let e=Object.assign(Object.assign(Object.assign({},v),{mode:this.mode}),JC(this.camera.pose));this.emit(`pano.arrived`,$(`pano.arrived`,{options:t,prevPano:b,progress:0,state:e,userAction:this.userAction,error:null})),t.moveEndCallback&&t.moveEndCallback(e)},()=>{t.moveCancelCallback&&t.moveCancelCallback(),this.emit(`pano.cancel`,$(`pano.cancel`,{options:t,prevPano:b,progress:0,state:y,userAction:this.userAction,error:null}))})}onTapGesture(e){let t=e.center.raycaster;this.stopMomentumMovement();let[n]=this.modelScene.intersectRaycaster(t);if(n&&n.face){let e=n.face.normal,t=n.point;if(new l.Vector3(0,1,0).angleTo(e)>Math.PI/3){let r=new l.Raycaster;r.firstHitOnly=!0;let i=e.clone().setLength(.3).add(t);r.set(i,new l.Vector3(0,-1,0)),n=this.modelScene.intersectRaycaster(r)[0]}}if(n){let t=new l.Vector3().copy(n.point).add(yD),r=[];for(let e of this.works){let n=this.modelScene.models.find(t=>t.work===e);if(!(!n||n.visible===!1)&&!(e.observers.length<=0)&&(bD.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),bD.containsPoint(t)))for(let t of e.observers)r.push(t)}let[i,a]=em(r,e=>xD.copy(e.position).applyMatrix4(e.work.transform).distanceTo(t),!0);i&&a<5&&(t.y=xD.copy(i.position).applyMatrix4(i.work.transform).y),e.state.offset.copy(t),e.state.distance=0,this.emit(`gesture.tap`,e),e.defaultPrevented||this.moveToPosition(t,{},!0)}else this.emit(`gesture.tap`,e),e.defaultPrevented||this.cameraBounce()}},wD=new l.Box3,TD=new l.Vector3,ED=.5,DD=Math.PI/7,OD={defaultLongitude:Math.PI/4,defaultLatitude:Math.PI/4,defaultDistance:150,maxLatitude:Math.PI/2,minLatitude:0,cameraType:`auto`,cameraFence:null,intersectMeshCreator:()=>new Aw},kD={Floorplan:Pw,Topview:Iw,Panorama:HT,VRPanorama:FE,XRPanorama:vD,Model:CD,Mapview:class e extends gw{static parseArgs(t){var n,r,i,a,o,s,c,l;if(t instanceof e)return t;let u=super.parseArgs(t);return Object.assign(Object.assign({},u),{defaultLongitude:(n=t.defaultLongitude)==null?OD.defaultLongitude:n,defaultLatitude:(r=t.defaultLatitude)==null?OD.defaultLatitude:r,defaultDistance:(i=t.defaultDistance)==null?OD.defaultDistance:i,maxLatitude:(a=t.maxLatitude)==null?OD.maxLatitude:a,minLatitude:(o=t.minLatitude)==null?OD.minLatitude:o,cameraType:(s=t.cameraType)==null?OD.cameraType:s,cameraFence:(c=t.cameraFence)==null?OD.cameraFence:c,intersectMeshCreator:(l=t.intersectMeshCreator)==null?OD.intersectMeshCreator:l})}static distanceFromModel(e,t,n){let r=e.boundingBox,i=r.isEmpty()?10:Math.pow(Math.pow(r.max.x-r.min.x+1,2)+Math.pow(r.max.y-r.min.y+1,2)+Math.pow(r.max.z-r.min.z+1,2),1/2);i=isNaN(i)||!isFinite(i)?1:i;let a=i/2/Math.tan(Math.PI*t/360);return n<1&&(a/=n),isNaN(a)||!isFinite(a)?i:a}static initAnimationEndState(t){var n,r,i,a,o,s,c;let u=this.parseArgs(t),d=u.works,f=u.modelScene,{state:p,currentState:m}=t.initial,h=typeof p.panoIndex==`number`?{workCode:(i=(n=p.workCode)==null?(r=u.works[0])==null?void 0:r.workCode:n)==null?``:i,panoIndex:p.panoIndex}:{workCode:m.workCode,panoIndex:m.panoIndex},g=(a=p.fov)==null?60:a,_=U(typeof u.minLatitude==`function`?u.minLatitude(g):u.minLatitude,-Math.PI/2,Math.PI/2),v=U(typeof u.maxLatitude==`function`?u.maxLatitude(g):u.maxLatitude,-Math.PI/2,Math.PI/2),y=U((o=p.latitude)==null?YC(m.mode)?m.latitude:u.defaultLatitude:o,_,v),b=e.distanceFromModel(u.modelScene,g,u.camera.aspect),x=new l.Vector3,S=(s=p.distance)==null?Math.min(u.defaultDistance,b):s,C=(c=p.longitude)==null?YC(m.mode)?m.longitude:u.defaultLongitude:c;if(p.offset)x.copy(p.offset);else{let e=d.getObserver(h);u.defaultDistance<b&&e?(x.copy(e.position).applyMatrix4(e.work.transform),p.longitude===void 0&&(C=m.longitude)):(f.boundingBox.getCenter(x),S=b)}return Object.assign(Object.assign({},h),{mode:`Mapview`,longitude:C,latitude:y,fov:g,offset:x,distance:S})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Mapview`,this.defaultLongitude=n.defaultLongitude,this.defaultLatitude=n.defaultLatitude,this.defaultDistance=n.defaultDistance,this.maxLatitude=n.maxLatitude,this.minLatitude=n.minLatitude,this.cameraType=n.cameraType,this.cameraFence=n.cameraFence,this.locationMotion=new Y({x:this.camera.pose.offset.x,y:this.camera.pose.offset.y,z:this.camera.pose.offset.z,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Y({modelAlpha:this.modelScene.parameter.resolveValue().modelAlpha}),this.perspToOrthoMotion=new Y({perspToOrtho:this.camera.perspToOrtho.x}),this.pendingTextureId=null,this.textureLoader=new mu,this.intersectMeshCreator=n.intersectMeshCreator,this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=`intersect`,this.intersectMesh.visible=!1,this.helper.add(this.intersectMesh)}updateConfiguration(e){if(super.updateConfiguration(e)===!1)return!1;if(e.defaultLongitude!==void 0&&this.defaultLongitude!==e.defaultLongitude&&(this.defaultLongitude=e.defaultLongitude),e.defaultLatitude!==void 0&&this.defaultLatitude!==e.defaultLatitude&&(this.defaultLatitude=e.defaultLatitude),e.defaultDistance!==void 0&&this.defaultDistance!==e.defaultDistance&&(this.defaultDistance=e.defaultDistance),e.maxLatitude!==void 0&&this.maxLatitude!==e.maxLatitude&&(this.maxLatitude=e.maxLatitude),e.minLatitude!==void 0&&this.minLatitude!==e.minLatitude&&(this.minLatitude=e.minLatitude),e.cameraType!==void 0&&this.cameraType!==e.cameraType&&(this.cameraType=e.cameraType),this.cameraFence instanceof l.Box3&&e.cameraFence instanceof l.Box3||this.cameraFence instanceof l.Sphere&&e.cameraFence instanceof l.Sphere?this.cameraFence.equals(e.cameraFence)||(this.cameraFence=e.cameraFence):e.cameraFence!==void 0&&(this.cameraFence=e.cameraFence),e.intersectMeshCreator!==void 0&&this.intersectMeshCreator!==e.intersectMeshCreator){this.intersectMeshCreator=e.intersectMeshCreator;let t=this.intersectMesh;this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=t.name,this.intersectMesh.visible=t.visible;let n=this.intersectMesh.parent;n&&n.add(this.intersectMesh),t.dispose()}return!0}destroy(){super.destroy(),this.pendingTextureId=null,this.locationMotion.dispose(),this.panState=void 0,this.intersectMesh.dispose(),this.helper.remove(this.intersectMesh)}isReady(){return this.locationMotion.ended===!1?!1:super.isReady()}updateWork(t,n,r,i){this.userAction=i,this.works=t;let a=e.initAnimationEndState(Object.assign(Object.assign({},this),{initial:{currentState:Object.assign(Object.assign({},this.currentPano),this.camera.pose),duration:r.duration,effect:r.effect,state:n,userAction:i}}));this.currentPano={workCode:a.workCode,panoIndex:a.panoIndex};let o={longitude:a.longitude,latitude:a.latitude,fov:a.fov},s={x:a.offset.x,y:a.offset.y,z:a.offset.z,distance:a.distance};return(o.longitude!==this.cameraMotion.value.longitude||o.latitude!==this.cameraMotion.value.latitude||o.fov!==this.cameraMotion.value.fov)&&this.cameraMotion.set(o,r.duration).catch(q),(s.x!==this.locationMotion.value.x||s.y!==this.locationMotion.value.y||s.z!==this.locationMotion.value.z||s.distance!==this.locationMotion.value.distance)&&this.locationMotion.set(s,r.duration).catch(q),!0}updateModel(e){super.updateModel(e),this.hideIntersectMesh()}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},i={};return e.distance!==void 0&&(r.distance=e.distance),e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(i.longitude=e.longitude),e.latitude!==void 0&&(i.latitude=e.latitude),e.fov!==void 0&&(i.fov=e.fov),this.locationMotion.set(r,t).catch(q),this.cameraMotion.set(i,t).catch(q)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],i=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:t.value.distance,x:t.value.offset.x,y:t.value.offset.x,z:t.value.offset.x}}),i.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(q),this.cameraMotion.setKeyframes(e,t)})}updateTime(e,t){if(this.destroyed)return;let n={},r={};if(this.locationMotion.ended||(this.locationMotion.update(e),r.distance=this.locationMotion.value.distance,r.offset=new l.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z)),this.cameraMotion.ended||(this.cameraMotion.update(e),r.longitude=this.cameraMotion.value.longitude,r.latitude=this.cameraMotion.value.latitude,r.fov=this.cameraMotion.value.fov),this.modelAlphaMotion.ended||(this.modelAlphaMotion.update(e),n.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.modelScene.parameter.modelAlpha===0&&this.modelScene.parameter.progress!==1){let{pano0:e,pano1:t}=this.modelScene.parameter;e&&e.map!==(t==null?void 0:t.map)&&e.map.dispose(),n.progress=1,n.pano0=n.pano1=t}let i=0;if(this.cameraType===`auto`?i=+(Math.abs(Math.PI/2-this.cameraMotion.value.latitude)<.02||Math.abs(-Math.PI/2-this.cameraMotion.value.latitude)<.02):this.cameraType===`perspective`?i=0:this.cameraType===`orthographic`&&(i=1),this.perspToOrthoMotion.getTargetKeyframe().value.perspToOrtho!==i&&this.perspToOrthoMotion.set({perspToOrtho:i},500).catch(q),this.perspToOrthoMotion.ended||(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(U(this.perspToOrthoMotion.value.perspToOrtho,0,1))),ZC(n)||this.modelScene.parameter.set(n),ZC(r)||this.setCamera(r),this.cameraFence&&!this.panState&&!this.pinchState&&!this.mouseWheelState&&!this.inMomentumMovement&&this.locationMotion.ended&&this.perspToOrthoMotion.ended&&this.cameraMotion.ended){let e=ha(this.camera.pose,new l.Vector3),t=new l.Vector3().copy(this.camera.pose.offset).sub(e.clone().multiplyScalar(this.camera.pose.distance));if(this.cameraFence.distanceToPoint(t)>.01){let e=this.cameraFence.clampPoint(t,new l.Vector3),n=this.camera.pose.offset.clone().add(e).sub(t),r=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:n,distance:this.camera.pose.distance});this.fixFinalState(r),this.locationMotion.set({x:r.offset.x,y:r.offset.y,z:r.offset.z,distance:r.distance},300).catch(q)}}if(this.intersectMesh&&this.intersectMesh.parent){let e=U(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1)}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(K())[1],t=this.locationMotion.getKeyFrameSegment(K())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,distance:t.value.distance,offset:new l.Vector3(t.value.x,t.value.y,t.value.z)})}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:i,userAction:a}=this.initial;this.userAction=a;let o=e.initAnimationEndState(this),s={longitude:o.longitude,latitude:o.latitude,fov:o.fov},c={x:o.offset.x,y:o.offset.y,z:o.offset.z,distance:o.distance};this.emit(`initAnimation.start`,$(`initAnimation.start`,{state:o,userAction:this.userAction})),this.perspToOrthoMotion.set({perspToOrtho:0},i).catch(q),this.modelAlphaMotion.set({modelAlpha:1},i/3).catch(q),this.cameraMotion.set(s,i).catch(q),this.locationMotion.set(c,i).then(()=>{this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:o,userAction:this.userAction}))},e=>{let t=Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),JC(this.camera.pose));this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:t,userAction:this.userAction}))}).then(()=>{t()})})}getForwardObserverOrNot(e){let[t]=this.modelScene.intersectRaycaster(e);if(!t)return null;let n=[];for(let t of this.works){let r=this.modelScene.models.find(e=>e.work===t);if(!(!r||r.visible===!1)&&!(t.observers.length<=0)&&(wD.copy(t.observerBox).expandByScalar(10).applyMatrix4(t.transform),wD.containsPoint(e.ray.origin)||e.ray.intersectsBox(wD)))for(let e of t.observers)n.push(e)}let[r,i]=em(n,e=>TD.copy(e.standingPosition).applyMatrix4(e.work.transform).distanceTo(t.point),!0);return r&&i<Math.max(r.standingPosition.distanceTo(this.camera.position)/5,10)?r:null}coordinatesForOffset(e){let t=this.renderer.getSize(new l.Vector2);return{longitude:-2*e.x/(t.x*this.viewport.width),latitude:2*e.y/(t.y*this.viewport.height)}}requestMomentumMovement(e,t,n,r){if(this.inMomentumMovement===null)return;r=Math.max(r,1);let i=Object.assign({},n),a={longitude:0,latitude:0,x:0,y:0,z:0};for(let e=0;e<r;e++)i.longitude*=.996,i.latitude*=.996*.998,i.x*=.99,i.y*=.99,i.z*=.99,a.longitude+=i.longitude,a.latitude+=i.latitude,a.x+=i.x,a.y+=i.y,a.z+=i.z;let o=this.cameraMotion.value.fov,s=ma(this.cameraMotion.value.longitude+a.longitude),c=U(typeof this.minLatitude==`function`?this.minLatitude(o):this.minLatitude,-Math.PI/2,Math.PI/2),u=U(typeof this.maxLatitude==`function`?this.maxLatitude(o):this.maxLatitude,-Math.PI/2,Math.PI/2),d=U(this.cameraMotion.value.latitude+a.latitude,c,u),f=new l.Vector3(this.locationMotion.value.x+a.x,this.locationMotion.value.y+a.y,this.locationMotion.value.z+a.z),p=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:s,latitude:d,offset:f,fov:o,distance:this.locationMotion.value.distance}),m=e.state.offset.clone().sub(ha(e.state).setLength(p.distance)),h=!(Math.abs(i.longitude)>1e-4||Math.abs(i.latitude)>1e-4||Math.abs(i.x)>1e-4||Math.abs(i.y)>1e-4||Math.abs(i.z)>1e-4);(this.cameraFence?this.cameraFence.containsPoint(m):!0)===!1&&(h=!0);let g=$(`gesture.momentum`,Object.assign(Object.assign({},e),{isFirst:t,isFinal:h,state:p}));if(this.emit(`gesture.fire`,g),this.inMomentumMovement.event=g,this.emit(`gesture.momentum`,g),e.defaultPrevented){this.inMomentumMovement=null;return}this.inMomentumMovement&&(this.cameraMotion.set({longitude:s,latitude:d},0).catch(q),this.locationMotion.set({x:p.offset.x,y:p.offset.y,z:p.offset.z,distance:p.distance},0).catch(q),h?this.inMomentumMovement=null:nu.shared.add((t,n)=>{this.requestMomentumMovement(e,!1,i,n)},!0))}fixFinalState(e){if(this.perspToOrthoMotion.getTargetKeyframe().value.perspToOrtho===1)return;let t=ha(e,new l.Vector3),n=new l.Vector3().copy(e.offset).sub(t.clone().setLength(e.distance)),r=new l.Raycaster(n,t);r.params.Points={threshold:.1},r.firstHitOnly=!0,r.hitFilter=e=>e.distance>ED+r.near,r.near=this.camera.near,r.far=this.camera.far;let i;if(i=this.modelScene.intersectRaycaster(r)[0],i&&i.distance<this.camera.near&&(i=void 0),!i){let e=new l.Plane(new l.Vector3(0,1,0),-this.modelScene.boundingBox.min.y),t=r.ray.intersectPlane(e,new l.Vector3);if(t){let e=t.distanceTo(r.ray.origin);e<1e3&&e>=r.near&&(i={distance:e,floorIndex:0,floor:0,point:t,object:this.scene,face:null})}}if(!i){let r=Math.max(e.distance,3);i={distance:r,floorIndex:0,floor:0,point:n.clone().add(t.clone().setLength(r)),object:this.scene,face:null}}i.distance>=this.camera.near&&RC(e.distance,i.distance)&&(e.distance=i.distance,e.offset=i.point)}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=e.pointers.length,n=this.panState,r=0,i=!1;e.pointerType===`mouse`&&(r=e.center.buttons,i=e.center.shiftKey),n&&r===0&&n.buttons!==0&&(r=n.buttons);let a=n==null?void 0:n.target;if(!a){let t=this.relativeClientPosition(e.center),n=this.createRaycasterFromCamera(t,this.camera);a=new l.Vector3().copy(n.ray.direction).multiplyScalar(3).add(n.ray.origin);let[r]=this.modelScene.intersectRaycaster(n);if(!r&&n.ray.direction.y<-.3){let e=new l.Plane(new l.Vector3(0,1,0),0),t=n.ray.intersectPlane(e,new l.Vector3);if(t){let e=t.distanceTo(n.ray.origin);e<1e4&&e>=n.near&&(r={distance:e,floorIndex:0,floor:0,point:t,object:this.scene})}}if(r)a.copy(r.point);else{let e=new l.Vector3().copy(this.camera.pose.offset).sub(this.camera.position).normalize(),t=new l.Plane().setFromNormalAndCoplanarPoint(e,this.camera.pose.offset);n.ray.intersectPlane(t,a)}}if(e.isFinal?this.panState=void 0:this.panState={target:a,buttons:r,pointerLength:t,x:e.center.x,y:e.center.y},!(n===void 0||n.pointerLength!==t))if(t>1||r===2||i){let t={x:e.center.x-n.x,y:e.center.y-n.y},r=new l.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),i=ha(this.cameraMotion.value).setLength(this.locationMotion.value.distance).add(r),a=new l.Vector3().copy(i).sub(n.target).length();a*=Math.tan(this.camera.pose.fov/2*Math.PI/180);let o=this.renderer.getSize(new l.Vector2),s=2*t.x*a/o.y,c=2*t.y*a/o.y,u=new l.Vector3;u.setFromMatrixColumn(this.camera.matrix,0),u.multiplyScalar(-s),r.add(u),this.camera.pose.latitude<DD?u.setFromMatrixColumn(this.camera.matrix,1):(u.setFromMatrixColumn(this.camera.matrix,0),u.crossVectors(this.camera.up,u)),u.multiplyScalar(c),r.add(u);let d=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:r,distance:this.camera.pose.distance});if(e.state=d,this.emit(`gesture.pan`,e),e.defaultPrevented)return;if(this.locationMotion.set({x:d.offset.x,y:d.offset.y,z:d.offset.z},0).catch(q),e.isFinal&&(this.fixFinalState(d),Object.assign(e,{__fixFinalState:!0}),this.locationMotion.set({distance:d.distance,x:d.offset.x,y:d.offset.y,z:d.offset.z},0).catch(q)),e.isFinal){let t=this.renderer.getSize(new l.Vector2),n=2*e.velocityX*a/t.y,r=2*e.velocityY*a/t.y,i=new l.Vector3,o=new l.Vector3;i.setFromMatrixColumn(this.camera.matrix,0),i.multiplyScalar(-n),o.add(i),this.camera.pose.latitude<DD?i.setFromMatrixColumn(this.camera.matrix,1):(i.setFromMatrixColumn(this.camera.matrix,0),i.crossVectors(this.camera.up,i)),i.multiplyScalar(r),o.add(i),this.inMomentumMovement={uuid:Ft()},this.requestMomentumMovement(e,!0,{longitude:0,latitude:0,x:o.x,y:o.y,z:o.z},0)}}else{let t={x:e.center.x-n.x,y:e.center.y-n.y},r=this.coordinatesForOffset(t),i=ma(this.cameraMotion.value.longitude+r.longitude),a=this.camera.pose.fov,o=U(typeof this.minLatitude==`function`?this.minLatitude(a):this.minLatitude,-Math.PI/2,Math.PI/2),s=U(typeof this.maxLatitude==`function`?this.maxLatitude(a):this.maxLatitude,-Math.PI/2,Math.PI/2),c=U(this.cameraMotion.value.latitude+r.latitude,o,s);this.camera.aspect<1&&Math.abs(e.overallVelocityX)>.2&&Math.atan2(Math.abs(e.overallVelocityY),Math.abs(e.overallVelocityX))<Math.PI/6.923&&(c=this.cameraMotion.value.latitude);let l=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:i,latitude:c,fov:a,offset:this.camera.pose.offset,distance:this.camera.pose.distance});if(e.isFinal&&Object.assign(e,{__fixFinalState:!0}),e.state=l,this.emit(`gesture.pan`,e),e.defaultPrevented)return;if(e.isFinal?this.locationMotion.set({distance:l.distance,x:l.offset.x,y:l.offset.y,z:l.offset.z},0).catch(q):this.cameraMotion.set({longitude:l.longitude,latitude:l.latitude},0).catch(q),e.isFinal){let t=e.velocityX,n=e.velocityY;this.inMomentumMovement={uuid:Ft()},this.requestMomentumMovement(e,!0,Object.assign(Object.assign({},this.coordinatesForOffset({x:t,y:n})),{x:0,y:0,z:0}),0)}}}onPinchGesture(t){var n;if(!this.initAnimationIsReady)return;this.userAction=t.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let r=(n=this.pinchState)==null?void 0:n.distance;if(t.isFirst){this.pinchState={x:t.center.x,y:t.center.y,scale:1,distance:this.locationMotion.value.distance};return}if(r===void 0)return;let i=this.modelScene.boundingBox.getCenter(new l.Vector3),a=e.distanceFromModel(this.modelScene,this.cameraMotion.value.fov,this.camera.aspect),o=U(r/t.scale,ED,1/0),s=t.state.offset.clone().sub(ha(t.state).setLength(o)),c=this.modelScene.boundingBox.containsPoint(s),u;if(!c&&this.pinchState&&this.pinchState.scale>t.scale&&i.distanceTo(s)>a?u=t.state.distance:(u=o,this.pinchState&&(this.pinchState.scale=t.scale)),t.state.distance=u,this.emit(`gesture.pinch`,t),!t.defaultPrevented&&(this.locationMotion.set({distance:t.state.distance},0).catch(q),t.pointerType!==`mouse`&&(t.type=`gesture.pan`,this.onPanGesture(t)),t.isFinal)){if(!(`__fixFinalState`in t)){let e=t.state;this.fixFinalState(t.state);let n={x:e.offset.x,y:e.offset.y,z:e.offset.z,distance:e.distance};this.locationMotion.set(n,0).catch(q)}this.panState=void 0,this.pinchState=void 0}}onMouseMove(e){var t,n;if(!this.intersectMesh.parent||this.panState||this.pinchState||this.mouseWheelState||(this.emit(`gesture.mousemove`,e),e.defaultPrevented))return;let r=e.center.raycaster;if(e.isFinal&&this.intersectMesh.parent&&this.intersectMesh.visible===!0){this.hideIntersectMesh();return}let[i]=this.modelScene.intersectRaycaster(r),a=$(`intersect.update`,{raycaster:r,intersection:i==null?null:i,object:this.intersectMesh});if(this.emit(`intersect.update`,a),a.defaultPrevented){this.hideIntersectMesh();return}if(i){let e=(n=(t=i.face)==null?void 0:t.normal)==null?new l.Vector3().copy(r.ray.direction).multiplyScalar(-1):n,a=e.clone(),o=i.point.clone();this.intersectMesh.position.copy(o);let s=o.clone().add(a);if(this.intersectMesh.lookAt(s),Math.abs(e.y)>.99){let e=this.camera.position.clone().sub(o);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0}else this.hideIntersectMesh()}onMouseWheel(t){if(this.initAnimationIsReady)if(this.userAction=t.userAction,this.stopMomentumMovement(),this.hideIntersectMesh(),t.isFinal){let e=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude,fov:this.cameraMotion.value.fov,offset:new l.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),distance:this.locationMotion.value.distance});if(this.fixFinalState(e),this.emit(`gesture.mousewheel`,t),t.defaultPrevented)return;let n={x:e.offset.x,y:e.offset.y,z:e.offset.z,distance:e.distance};this.locationMotion.set(n,0).catch(q)}else{let n=e.distanceFromModel(this.modelScene,this.cameraMotion.value.fov,this.camera.aspect),r=new l.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),i=ha(this.cameraMotion.value,new l.Vector3).negate(),a=new l.Ray(r,i).intersectBox(this.modelScene.boundingBox,new l.Vector3);a&&(n+=a.distanceTo(r));let o=Math.max(this.locationMotion.value.distance-this.camera.near,0),s=t.center.delta/10*Math.max(o/5,.1);if(o<=n||s>0)if(this.locationMotion.value.distance-s>=ED){let e=this.locationMotion.value.distance-s;t.state.distance=e}else{let e=ha(this.cameraMotion.value);e.setLength(s),t.state.offset.add(e)}if(this.emit(`gesture.mousewheel`,t),t.defaultPrevented)return;this.locationMotion.set({distance:t.state.distance,x:t.state.offset.x,y:t.state.offset.y,z:t.state.offset.z},0).catch(q)}}onTapGesture(e){var t;this.userAction=e.userAction,this.stopMomentumMovement();let n=e.center.raycaster,r=this.getForwardObserverOrNot(n);if(!r)this.emit(`gesture.tap`,e);else{let n={longitude:this.camera.pose.longitude,latitude:0},i=Object.assign(Object.assign({},e.state),{mode:`Panorama`,workCode:r.work.workCode,panoIndex:r.panoIndex,longitude:n.longitude,latitude:n.latitude,offset:r?r.position.clone():new l.Vector3,distance:0});if(e.state=i,this.emit(`gesture.tap`,e),!e.defaultPrevented&&(this.emit(`pano.select`,$(`pano.select`,{prevPano:this.currentPano,state:i,userAction:e.userAction,options:n,progress:0,error:null})),r&&r.active)){let e=this.pendingTextureId=Ft(),a=mb({panoIndex:r.panoIndex,workCode:r.work.workCode}),o=this.imageOptions.transform,s=Object.assign({key:`pano.${a}`},pl(this.imageOptions,[`format`,`size`,`quality`,`sharpen`,`forceUseExifOrientation`,`mappings`])),c={right:r.images.work.getURL(r.images.right),left:r.images.work.getURL(r.images.left),up:r.images.work.getURL(r.images.up),down:r.images.work.getURL(r.images.down),front:r.images.work.getURL(r.images.front),back:r.images.work.getURL(r.images.back)},d,f,p=this.enableHDR?r.images.gainmap:void 0;p&&(d={right:r.images.work.getURL(p.right),left:r.images.work.getURL(p.left),up:r.images.work.getURL(p.up),down:r.images.work.getURL(p.down),front:r.images.work.getURL(p.front),back:r.images.work.getURL(p.back)},f=r.images.work.getURL(p.cfg));let m=`pano:`+fb([c,d,s]),h=this.modelScene.parameter,g;if(h.pano0&&h.pano0.map.name===m?g=h.pano0:h.pano1&&h.pano1.map.name===m&&(g=h.pano1),g)h.pano0&&h.pano0.map!==g.map&&h.pano0.map.dispose(),h.pano1&&h.pano1.map!==g.map&&h.pano1.map!==((t=h.pano0)==null?void 0:t.map)&&h.pano1.map.dispose(),h.set({pano0:g,pano1:g}),this.emit(`pano.request`,$(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:i,options:n,error:null}));else{let t=this.textureLoader.loadCubeTexture(c,{imageURL:{transform:o,options:s},format:l.RGBAFormat,viaAjax:!0,fetcher:gy(this.fiveId,r.work)},void 0,void 0,void 0,this.renderer),p=f&&d?Promise.all([gy(this.fiveId,r.work).ajax(f,{responseType:`text`}).then(e=>Wt(JSON.parse(e.body))),this.textureLoader.loadCubeTexture(d,{imageURL:{transform:o,options:s},format:l.RGBAFormat,colorSpace:l.NoColorSpace,viaAjax:!0,fetcher:gy(this.fiveId,r.work)},void 0,void 0,void 0,this.renderer)]).then(([e,t])=>({config:e,map:t.body})):Promise.resolve(void 0);Promise.all([t,p]).then(t=>(0,u.__awaiter)(this,[t],void 0,function*([t,o]){var s,c;let{body:u}=t;if(this.destroyed||this.pendingTextureId!==e){u.dispose();return}this.pendingTextureId=null,u.name=m;let d=Array.isArray(u.image)?u.image[0]:u.image,f=(s=d==null?void 0:d.width)==null?2048:s,p=yield pw(this.renderer,u,!0,Tx),g=new kx().formPixels(p.data),_={panoId:a,map:u,mapSize:f,mapHistogram:new l.Vector4().fromArray(g.toArray()),matrix:r.matrix.clone().premultiply(r.work.transform),zoom:1,gainmap:o?{map:o.map,cfg:o.config}:void 0};h.pano0&&h.pano0.map.dispose(),h.pano1&&h.pano1.map!==((c=h.pano0)==null?void 0:c.map)&&h.pano1.map.dispose(),h.set({pano0:_,pano1:_}),this.emit(`pano.request`,$(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:i,options:n,error:null}))})).catch(t=>{this.destroyed||this.pendingTextureId!==e||(this.pendingTextureId=null)})}}}}onDblTapGesture(e){if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=e.state,n=e.center.raycaster,r=n.ray.origin.clone().add(n.ray.direction.clone().setLength(3)),i=1,[a]=this.modelScene.intersectRaycaster(n);if(a&&(r=a.point.clone(),i=a.distance>4/2?1:3),e.state.distance=i,e.state.offset=r,this.emit(`gesture.dbltap`,e),e.defaultPrevented)return;let o={x:t.offset.x,y:t.offset.y,z:t.offset.z,distance:t.distance};this.locationMotion.set(o,360).catch(q),this.hideIntersectMesh()}hideIntersectMesh(){this.intersectMesh.visible===!0&&(this.intersectMesh.visible=!1,this.needsRender=!0)}}},AD={Floorplan:Nw,Topview:Fw,Panorama:VT,VRPanorama:PE,XRPanorama:pD,Model:SD,Mapview:OD},jD=`gesture.pan,gesture.tap,gesture.dbltap,gesture.press,gesture.pinch,gesture.mousewheel,gesture.mousemove,gesture.momentum,gesture.fire,initAnimation.start,initAnimation.end,camera.update,intersect.update,pano.select,pano.moveTo,pano.moving,pano.arrived,pano.cancel,pano.error,pano.prepare,pano.texture.load,pano.texture.progress,pano.texture.success,pano.texture.error,pano.texture.abort,xr.session.start,xr.session.end,xr.gesture.tap,xr.gesture.press,xr.gesture.buttonUp,xr.gesture.buttonDown,xr.controller.update`.split(`,`);function MD(e){e.on(`initAnimation.start`,t=>{e.emit(`initAnimationWillStart`,t.state.panoIndex,t.state,t.userAction)}),e.on(`initAnimation.end`,t=>{e.emit(`initAnimationEnded`,t.state.panoIndex,t.state,t.userAction)}),e.on(`gesture.pan`,t=>{let n=!1;n=e.emit(`wantsGesture`,`pan`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPanGesture`,t.state,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`pan`,t.pointers,t.isFinal),e.emit(`panGesture`,t.state,t.isFinal))}),e.on(`gesture.tap`,t=>{let n=!1;n=e.emit(`wantsGesture`,`tap`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsTapGesture`,t.center.raycaster,t.center.coords,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`tap`,t.pointers,t.isFinal),e.emit(`tapGesture`,t.center.raycaster,t.center.coords,t.isFinal))}),e.on(`gesture.dbltap`,t=>{let n=!1;n=e.emit(`wantsGesture`,`dbltap`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsDblTapGesture`,t.center.raycaster,t.center.coords,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`dbltap`,t.pointers,t.isFinal),e.emit(`dblTapGesture`,t.center.raycaster,t.center.coords,t.isFinal))}),e.on(`gesture.press`,t=>{let n=!1;n=e.emit(`wantsGesture`,`press`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPressGesture`,t.center.raycaster,t.center.coords,t.center.delta,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`press`,t.pointers,t.isFinal),e.emit(`pressGesture`,t.center.raycaster,t.center.coords,t.center.delta,t.isFinal))}),e.on(`gesture.pinch`,t=>{let n=!1;n=e.emit(`wantsGesture`,`pinch`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPinchGesture`,t.scale,t.state.fov,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`pinch`,t.pointers,t.isFinal),e.emit(`pinchGesture`,t.scale,t.state.fov,t.isFinal))}),e.on(`gesture.mousewheel`,t=>{let n=!1;n=e.emit(`wantsGesture`,`mouseWheel`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsMouseWheel`,t.center.delta,t.state.fov,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`mouseWheel`,t.pointers,t.isFinal),e.emit(`mouseWheel`,t.center.delta,t.state.fov,t.isFinal))}),e.on(`gesture.mousemove`,t=>{let n=!1;n=e.emit(`wantsGesture`,`mouseMove`,t.pointers,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`mouseMove`,t.pointers,t.isFinal),n=e.emit(`wantsChangeCameraFov`,t.state.fov),n&&t.preventDefault())}),e.on(`gesture.momentum`,t=>{let n=!1;n=e.emit(`wantsInteriaPan`,t.state),n&&t.preventDefault(),t.defaultPrevented||e.emit(`interiaPan`,t.state,t.isFinal)}),e.on(`camera.update`,t=>{e.emit(`cameraFovUpdate`,t.state.fov,t.userAction),e.emit(`cameraDirectionUpdate`,t.state,t.userAction);let n=ha(t.state);n.setLength(t.state.distance);let r=t.state.offset.clone().sub(n);e.emit(`cameraPositionUpdate`,r,t.userAction),e.emit(`cameraUpdate`,t.state,t.userAction)}),e.on(`intersect.update`,t=>{if(t.intersection){let n=!1;n=e.emit(`wantsShowIntersectionOnModel`,t.raycaster),n&&t.preventDefault(),t.defaultPrevented||e.emit(`intersectionOnModelUpdate`,t.intersection,t.object)}else e.emit(`intersectionHidden`)}),e.on(`pano.request`,t=>{let n=e.emit(`wantsMoveToPano`,t.state.panoIndex,t.options,t.userAction);n||(n=e.emit(`wantsToMoveToPano`,t.state.panoIndex,t.options,t.userAction)),n&&t.preventDefault(),t.defaultPrevented||e.emit(`panoWillLoad`,t.state.panoIndex)}),e.on(`pano.select`,t=>{e.emit(`panoSelected`,t.state.panoIndex)}),e.on(`pano.moveTo`,t=>{e.emit(`panoLoaded`,t.state.panoIndex),e.emit(`moveToPano`,t.state.panoIndex,t.userAction),e.emit(`panoWillArrive`,t.state.panoIndex,t.state,t.userAction)}),e.on(`pano.moving`,t=>{e.emit(`movingToPano`,t.state.panoIndex,t.prevPano.panoIndex,t.progress)}),e.on(`pano.arrived`,t=>{e.emit(`panoArrived`,t.state.panoIndex,t.state,t.userAction)}),e.on(`pano.cancel`,t=>{e.emit(`moveToPanoCanceled`,t.state.panoIndex)}),e.on(`pano.error`,t=>{e.emit(`panoLoadError`,t.error,t.state.panoIndex)}),e.on(`pano.texture.load`,t=>{e.emit(`textureStartLoad`,t.pano.panoIndex)}),e.on(`pano.texture.success`,t=>{e.emit(`textureLoaded`,t.pano.panoIndex,t.meta)}),e.on(`pano.texture.error`,t=>{e.emit(`textureError`,t.error,t.pano.panoIndex)}),e.on(`pano.texture.abort`,t=>{e.emit(`textureAbort`,t.pano.panoIndex)}),e.on(`pano.texture.progress`,t=>{e.emit(`textureLoading`,t.progress,t.pano.panoIndex)}),e.on(`xr.session.start`,t=>{e.emit(`webXRSessionStart`)}),e.on(`xr.session.end`,t=>{e.emit(`webXRSessionEnd`)}),e.on(`xr.gesture.tap`,t=>{e.emit(`webXRControllerEvent`,`tap`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.press`,t=>{e.emit(`webXRControllerEvent`,`press`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.buttonUp`,t=>{e.emit(`webXRControllerEvent`,`buttonUp`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.buttonDown`,t=>{e.emit(`webXRControllerEvent`,`buttonDown`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.controller.update`,t=>{e.emit(`webXRControllerRayUpdate`,{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0}),t.left&&e.emit(`webXRAxesUpdate`,`left`,{raycaster:{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0},axesState:{up:t.left.axes.up,down:t.left.axes.down,left:t.left.axes.left,right:t.left.axes.right},deltaTime:t.left.deltaTime}),t.right&&e.emit(`webXRAxesUpdate`,`right`,{raycaster:{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0},axesState:{up:t.right.axes.up,down:t.right.axes.down,left:t.right.axes.left,right:t.right.axes.right},deltaTime:t.right.deltaTime})}),e.on(`works.request`,t=>{e.emit(`willLoad`,t.input,t.works[0],e.getCurrentState())}),e.on(`works.load`,t=>{e.emit(`load`,t.input,t.works[0],e.getCurrentState())}),e.on(`works.ready`,t=>{e.emit(`loaded`,t.input,t.works[0])}),e.on(`state.change`,t=>{e.emit(`stateChange`,t.state,t.userAction)}),e.on(`currentState.change`,t=>{e.emit(`currentStateChange`,t.state,t.userAction)}),e.on(`state.set`,t=>{e.emit(`setState`,t.state)}),e.on(`state.synced`,t=>{e.emit(`stateSynced`,t.state)}),e.on(`model.request`,t=>{e.emit(`modelWillLoad`,t.work.model)}),e.on(`model.error`,t=>{e.emit(`modelLoadError`,t.error,t.model)}),e.on(`model.load`,t=>{e.emit(`modelLoaded`,t.model)}),e.on(`model.changeShownFloor`,t=>{e.emit(`modelShownFloorChange`,t.model.shownFloor,t.model.floorLength)}),e.on(`render`,t=>{e.emit(`renderFrame`,t.needsRender)}),e.on(`mode.change.request`,t=>{e.emit(`wantsChangeMode`,t.mode,t.prevMode)}),e.on(`mode.change`,t=>{e.emit(`modeChange`,t.mode,t.prevMode,t.state.panoIndex,t.state,t.userAction)}),e.on(`helpers.visible`,t=>{e.emit(`helpersVisibleChange`,t.object.visible)}),e.on(`network.resource`,t=>{e.emit(`network`,t.source,t.requestType,t.requestState,t.detail)})}function ND(){if(typeof window<`u`){let e=document.createElement(`video`);e.loop=!0,e.autoplay=!0,e.playsInline=!0,e.muted=!0,e.crossOrigin=``;let t=()=>{document.removeEventListener(`touchstart`,t,!1),document.removeEventListener(`mousedown`,t,!1),e.muted=!1};return document.addEventListener(`touchstart`,t,!1),document.addEventListener(`mousedown`,t,!1),e}else return{}}function PD(){let e=new l.Group;e.name=`internalLights`;{let t=new l.DirectionalLight(16777215,.1);t.name=`direction0`,t.position.copy(new l.Vector3(0,1,0)),e.add(t)}{let t=new l.DirectionalLight(16777215,.1);t.name=`direction1`,t.position.copy(new l.Vector3(-1,-1,-1)),e.add(t)}{let t=new l.DirectionalLight(16777215,.3);t.name=`direction2`,t.position.copy(new l.Vector3(1,1,1)),e.add(t)}{let t=new l.AmbientLight(16777215,.6);t.name=`ambient0`,e.add(t)}return e}function FD(e){var t,n;let r={},i=e.split(/(\;|\,)/);for(let e of i){let i=e.split(`=`),a=(t=i[0])==null?void 0:t.trim(),o=(n=i[1])==null?void 0:n.trim();a&&o&&(r[a]=o)}return r}function ID(){var e;if(typeof document<`u`){let t=document.getElementsByTagName(`meta`);for(let n=0;n<t.length;n++){let r=t[n];if(r.getAttribute(`name`)===`viewport`){let t=FD((e=r.getAttribute(`content`))==null?``:e),n=Number(t[`initial-scale`]);if(!isNaN(n))return n}}}return 1}function LD(){return typeof location>`u`||location.protocol!==`https:`?Promise.reject(Error(`Request DeviceOrientation Permission denied.`)):typeof DeviceOrientationEvent<`u`&&typeof DeviceOrientationEvent.requestPermission==`function`?DeviceOrientationEvent.requestPermission().then(e=>{if(e==`granted`)return Promise.resolve();{let e=Error(`Request DeviceOrientation Permission denied.`);return Promise.reject(e)}}):Promise.resolve()}function RD(){if(`xr`in navigator)return navigator.xr.isSessionSupported(`immersive-vr`).then(e=>e?Promise.resolve():Promise.reject()).then(()=>navigator.xr.requestSession(`immersive-vr`,{optionalFeatures:[`local-floor`]}).then(e=>Promise.resolve(e)));{let e=Error(`Request XR Permission denied.`);return Promise.reject(e)}}var zD=800,BD=90,VD=e=>e.replace(`//vrlab-public.ljcdn.com/`,`//vr-public.realsee-cdn.cn/`).replace(`//vrlab-image4.ljcdn.com/`,`//vr-image-4.realsee-cdn.cn/`).replace(`//vrlab-image3.ljcdn.com/`,`//vr-image-3.realsee-cdn.cn/`).replace(`//vrlab-image2.ljcdn.com/`,`//vr-image-2.realsee-cdn.cn/`).replace(`//vrlab-image1.ljcdn.com/`,`//vr-image-1.realsee-cdn.cn/`),HD=new l.Sphere,UD=new l.Box3,WD=new l.Vector4,GD=new l.Vector4,KD=new l.Color,qD=new l.Vector2,JD=new WeakMap,YD=ax([nx(null)]),XD={},ZD=class e extends Bt{static get version(){return`1.0.0-alpha.11`}static get dracoPath(){return rf.decoderPath}static set dracoPath(e){rf.setDecoderPath(e)}static get ktx2Path(){return ff.transcoderPath}static set ktx2Path(e){ff.setTranscoderPath(e)}static get useNativeImageBitmap(){return ou()}static set useNativeImageBitmap(e){au(e)}constructor(e={}){var t,n,r,i,a,o,s,c,u,d,f,p;if(super(),this.pbmGaussianSplattingRenderMesh=null,this.fiveId=Ft(),XD[this.fiveId]=this,this.currentUpdateArgs={time:K(),args:[]},this.currentMode=`Panorama`,this.pano={workCode:``,panoIndex:0},this.needsRender=!0,this.onlyRenderIfNeeds=(t=e.onlyRenderIfNeeds)==null?!0:t,this.imageOptions=Object.assign({},(n=e.imageOptions)==null?{}:n),this.textureOptions=Object.assign({},(r=e.textureOptions)==null?{}:r),this.poweredByRealsee=(i=e.poweredByRealsee)==null?!0:i,this.backgroundColor=new l.Color((a=e.backgroundColor)==null?1579548:a),this.backgroundAlpha=(o=e.backgroundAlpha)==null?1:o,this.extraElements=[],this.controllerInits={Panorama:Object.assign({},e.panorama),Model:Object.assign({},e.model),Floorplan:Object.assign({},e.floorplan),Topview:Object.assign({},e.topview),Mapview:Object.assign({},e.mapview),VRPanorama:Object.assign({},e.vrPanorama),XRPanorama:Object.assign({},e.xrPanorama)},this.fps={testCount:0,testTime:K()},this.modeChangeDuration=(s=e.modeChangeDuration)==null?zD:s,this.enableWheel=(c=e.enableWheel)==null?!0:c,this._enableHDR=!!e.enableHDR&&US&&!e.forceWebGL,typeof window<`u`)if(`renderer`in e)e.renderer instanceof oC&&this.throwError(Error(`cannot render a internal renderer`)),this.renderer=e.renderer;else try{this.renderer=new oC({outputType:this._enableHDR?l.HalfFloatType:void 0,logarithmicDepthBuffer:e.logarithmicDepthBuffer,forceWebGL:(u=e.forceWebGL)==null?!1:u});let t=ID();this.renderer.setPixelRatio(t===1?window.devicePixelRatio:1),this.renderer.setSize(512,512),this.renderer.setClearColor(this.backgroundColor,this.backgroundAlpha)}catch(e){let t=e instanceof Error?e:Error(String(e));this.throwError(t)}this.getPixelsRenderTarget=new l.RenderTarget(1,1,{colorSpace:(f=(d=this.renderer)==null?void 0:d.outputColorSpace)==null?l.SRGBColorSpace:f,generateMipmaps:!1}),this.renderer&&Jc(this.renderer),this.viewport=Object.assign({left:0,bottom:0,width:1,height:1},e.viewport),this.camera=new Oa(BD),this.scene=new fC,this.scene.background=this.backgroundColor,this.xrCustomObjectsScene=new l.Scene,this.scene.add(this.xrCustomObjectsScene),this.scene.matrixAutoUpdate=!1,this.requestProxy=(p=e.requestProxy)==null?VD:p,this.networkSubscribe=new ol,this.networkSubscribe.on(`network`,(e,t,n,r)=>{var i;this.emit(`network.resource`,$(`network.resource`,{source:e,requestType:t,requestState:n,detail:r})),(i=this.analysis)==null||i.network(this.works,e,t,n,r)}),this.readyCallbacks=[],this.syncingState=!1,this.helperGroup=new l.Group,this.helperGroup.name=`helper`,this.helperGroup.matrixAutoUpdate=!1,this.scene.add(this.helperGroup),JD.set(this,YD),this.modelScene=new Ky({fiveId:this.fiveId}),this.modelScene.addEventListener(`model.create`,e=>{this.bindModel(e.model)}),this.scene.add(this.modelScene);let[m]=this.modelScene.setModels(YD,{forceReplaceImmediately:!0});Q(m,`loaded`,{get(){return!1},set(e){}}),this.videoTexture=new l.VideoTexture(e.videoInstance||ND());let h=PD();this.scene.add(h),this.state={mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance},this.stateSynced=!1,this.destroyed=!1,this.paused=!0,typeof window<`u`&&(e.play!==!1&&this.play(),this.stopAnimationLoop=nu.shared.add((e,t,...n)=>{this.updateTime(e,t,...n)},!1,0,10));let g=()=>{typeof document<`u`&&document.fullscreenElement===null&&this.currentMode===`VRPanorama`&&this.controller.emit(`vr.requestExit`,$(`vr.requestExit`,{}))},_=()=>{this.needsRender=!0},v=()=>{this.renderer instanceof oC&&this.renderer.reconfigureContext(),this.needsRender=!0},y=()=>{typeof document<`u`&&document.visibilityState===`visible`&&v()},b=()=>{v()};if(this.renderer instanceof oC&&(this.renderer.onDeviceLostCallback=()=>{v()}),typeof document<`u`&&(document.addEventListener(`visibilitychange`,y,!1),document.addEventListener(`fullscreenchange`,g,!1)),typeof window<`u`&&window.addEventListener(`pageshow`,b,!1),this.renderer&&this.renderer.domElement.addEventListener(`webglcontextrestored`,_,!1),this.removeEventListeners=()=>{typeof document<`u`&&(document.removeEventListener(`visibilitychange`,y,!1),document.removeEventListener(`fullscreenchange`,g,!1)),typeof window<`u`&&window.removeEventListener(`pageshow`,b,!1),this.renderer instanceof oC&&(this.renderer.onDeviceLostCallback=void 0),this.renderer&&this.renderer.domElement.removeEventListener(`webglcontextrestored`,_,!1)},this.loadWorkTask=this.prepare(),this.plugins={},e.plugins&&e.plugins.length){for(let t of e.plugins)if(typeof t==`function`)t(this);else if(Array.isArray(t)){let[e,n,r]=t;if(typeof e==`function`){let t=e(this,r);typeof n==`string`&&(this.plugins[n]?this.throwError(Error(`plugin name ${n} is exists.`)):this.plugins[n]=t)}}}MD(this),this.fiveRenderer=new BS({outputType:this._enableHDR?l.HalfFloatType:void 0}),this.adaptiveLuminancePass=new Gx,this.adaptiveLuminancePass.enabled=!1,this.fiveRenderer.composer.addPass(this.adaptiveLuminancePass),this.eyeDomeLightingPass=new qx(this.camera),this.eyeDomeLightingPass.enabled=!1,this.fiveRenderer.composer.addPass(this.eyeDomeLightingPass),this.pbmGaussianSplattingRenderMesh=new Ei,this.scene.add(this.pbmGaussianSplattingRenderMesh)}get ident(){return this.fiveId}get panoIndex(){return this.pano.panoIndex}prepare(){return Promise.all([Ol().catch(q)]).then(q)}dispose(){var e;if(this.destroyed===!0)return;delete XD[this.fiveId],this.emit(`dispose`),this.destroyed=!0,this.pause(),this.stopAnimationLoop&&(this.stopAnimationLoop(),this.stopAnimationLoop=void 0),this.off(),this.networkSubscribe.off(),this.controller&&(this.controller.destroy(),this.controller=void 0);let t=this.getElement();t&&t.parentNode&&t.parentNode.removeChild(t);let n=this.modelScene.parameter;n.pano0&&n.pano0.map.dispose(),n.pano1&&n.pano1.map!==((e=n.pano0)==null?void 0:e.map)&&n.pano1.map.dispose(),n.reset(`pano0`,`pano1`),this.modelScene.dispose(),JD.set(this,YD),this.renderer&&(!(this.renderer instanceof oC)||this.renderer.isInitialized)&&this.renderer.render(new l.Scene,new l.PerspectiveCamera),this.fiveRenderer.dispose(),this.renderer instanceof oC&&this.renderer.dispose()}setViewport(e){Object.assign(this.viewport,e),this.needsRender=!0}get boundingMesh(){return this.modelScene.boundingMesh}get helperVisible(){return this.helperGroup.visible}set helperVisible(e){this.helperGroup.visible!==e&&(this.helperGroup.visible=e,this.emit(`helpers.visible`,$(`helpers.visible`,{object:this.helperGroup})),this.needsRender=!0)}updateConfiguration(e,t=!0){let n=!1,r=!1;e.panorama&&(Object.assign(this.controllerInits.Panorama,hl(e.panorama)),this.currentMode===`Panorama`&&(n=!0)),e.model&&(Object.assign(this.controllerInits.Model,hl(e.model)),this.currentMode===`Model`&&(n=!0)),e.floorplan&&(Object.assign(this.controllerInits.Floorplan,hl(e.floorplan)),this.currentMode===`Floorplan`&&(n=!0)),e.topview&&(Object.assign(this.controllerInits.Topview,hl(e.topview)),this.currentMode===`Topview`&&(n=!0)),e.mapview&&(Object.assign(this.controllerInits.Mapview,hl(e.mapview)),this.currentMode===`Mapview`&&(n=!0)),e.vrPanorama&&(Object.assign(this.controllerInits.VRPanorama,hl(e.vrPanorama)),this.currentMode===`VRPanorama`&&(n=!0)),e.xrPanorama&&(Object.assign(this.controllerInits.XRPanorama,hl(e.xrPanorama)),this.currentMode===`XRPanorama`&&(n=!0)),e.imageOptions&&(Object.assign(this.imageOptions,e.imageOptions),(this.currentMode===`Panorama`||this.currentMode===`VRPanorama`||this.currentMode===`XRPanorama`)&&(r=!0,n=!0)),e.textureOptions&&Object.assign(this.textureOptions,e.textureOptions),t&&n&&this.controller&&this.currentMode&&(!this.controller.updateConfiguration(this.controllerInits[this.currentMode])||r)&&this.changeMode(this.currentMode,this.getCurrentState(),0,!1,!0)}appendTo(e,t={}){if(!this.renderer)return;if(!(this.renderer instanceof oC)){this.throwError(Error(`cannot call appendTo method when render a external renderer`));return}let n=this.getElement();if(!n)return;e.appendChild(n),this.refresh(t);let r=window.getComputedStyle(e).position;r!==`relative`&&r!==`absolute`&&r!==`fixed`&&r!==`sticky`&&(e.style.position=`relative`)}refresh(e={},t){var n,r,i,a,o,s;if(!this.renderer)return;let c=this.renderer.domElement.parentNode,{width:l=(n=c==null?void 0:c.offsetWidth)==null?512:n,height:u=(r=c==null?void 0:c.offsetHeight)==null?512:r}=e;if(l=Math.max(1,l),u=Math.max(1,u),!t){let e=ID(),n=typeof window<`u`?window.devicePixelRatio:1;if(t=(i=e===1?n:1)==null?1:i,t>1){let e=Math.max(l,u)*t,n=Math.min((s=(o=(a=this.renderer.backend.device)==null?void 0:a.limits)==null?void 0:o.maxTextureDimension2D)==null?8192:s,4096);e>n&&(t=Math.max(t/e*n,1),t=Math.floor(t*100)/100)}}this.renderer.setPixelRatio(t),this.renderer.setSize(l,u),this.needsRender=!0;let d=K(),f=d-this.currentUpdateArgs.time,p=this.currentUpdateArgs.args;this.updateTime(d,f,...p)}addExtraElement(e){return this.extraElements.indexOf(e)===-1&&(this.extraElements.push(e),this.controller&&this.controller.bindExtraElement(e)),()=>this.removeExtraElement(e)}removeExtraElement(e){let t=this.extraElements.indexOf(e);t!==-1&&(this.extraElements.splice(t,1),this.controller&&this.controller.unbindExtraElement(e))}getSize(e){if(!this.renderer)throw Error(`renderer is not initialized`);return this.renderer.getSize(e),e.x*=this.viewport.width,e.y*=this.viewport.height,e}getDrawingBufferSize(e){if(!this.renderer)throw Error(`renderer is not initialized`);return this.renderer.getDrawingBufferSize(e),e.x*=this.viewport.width,e.y*=this.viewport.height,e}updateCamera(e,t,n=!0){if(!this.controller)throw Error(`controller is not initialized.`);return this.controller.updateCamera(e,t,n)}updateCameraWithKeyframes(e,t,n=!0){if(!this.controller)throw Error(`controller is not initialized.`);return this.controller.updateCameraWithKeyframes(e,t,n)}get works(){return JD.get(this)||YD}get work(){return this.works[0]}get observers(){return this.work.observers}get models(){return this.modelScene.models}get model(){return this.modelScene.models[0]}load(e,t,n,r=!0){if(!this.renderer)throw Error(`renderer is not initialized`);let i=this.loadWorkTask.then(()=>VC(e)?e.then(e=>this.load_(e,t,n,r)):this.load_(e,t,n,r));return this.loadWorkTask=i.catch(e=>{this.throwError(e)}),i}load_(t,n,r,i=!0){var a,o,s,c,u,d,f,p,m,h;let g={};typeof r==`number`?g.duration=r:typeof r==`object`&&Object.assign(g,r),this.works===YD&&(g.duration===void 0&&(g.duration=0),g.effect===void 0&&(g.effect=`instant`));let _={};Object.assign(_,g.model),!_[`3d-tiles`]&&g[`3d-tiles`]&&(_[`3d-tiles`]=g[`3d-tiles`]),!_.textureOptions&&g.textureOptions&&(_.textureOptions=g.textureOptions),!_.textureOptions&&this.textureOptions&&(_.textureOptions=this.textureOptions);let v=[];if(Array.isArray(t))for(let e of t)e instanceof tx?v.push(e):typeof e!=`string`&&`work`in e?v.push(nx(e.work,e)):v.push(nx(e));else t instanceof tx?v.push(t):v.push(nx(t));g.mode===`add`&&(v=[].concat(this.works,v));let y;try{y=ax(v)}catch(e){return this.throwError(e),Promise.reject(e)}for(let e of y)this.bindWorkFetcher(e);n===void 0&&(n=`inherit`),n===`inherit`&&this.works===YD&&(n=`initial`);let b=this.currentMode,x=y.initial,S=x.work.observers[0],C=S?{workCode:S.work.workCode,panoIndex:S.panoIndex}:{workCode:x.work.workCode,panoIndex:0},w=(a=x.mode)==null?S?`Panorama`:`Mapview`:a,T={};if(n===`inherit`){let e=this.getCurrentState(),[t]=y.filter(t=>t.workCode===e.workCode);if(t)C={workCode:e.workCode,panoIndex:e.panoIndex},w=e.mode,T={longitude:e.latitude,latitude:e.latitude,fov:e.fov,distance:e.distance,offset:e.offset.clone()};else{n={mode:b};let e=(s=(o=y[0])==null?void 0:o.observers)==null?void 0:s[this.panoIndex];e?(n.workCode=e.work.workCode,n.panoIndex=e.panoIndex):typeof y.initial.panoIndex==`number`?(n.workCode=y.initial.work.workCode,n.panoIndex=y.initial.panoIndex):(n.mode===`Panorama`||n.mode===`VRPanorama`||n.mode===`XRPanorama`)&&(n.mode=`Mapview`),n.mode===b&&(n.longitude=this.camera.pose.longitude,n.latitude=this.camera.pose.latitude,n.fov=this.camera.pose.fov)}}if(n===`initial`&&(typeof x.panoIndex==`number`&&(C={workCode:x.work.workCode,panoIndex:x.panoIndex}),x.mode&&(w=x.mode),T={longitude:x.longitude,latitude:x.latitude,fov:x.fov,distance:x.distance,offset:(c=x.offset)==null?void 0:c.clone()}),typeof n==`object`){if(w=(u=n.mode)==null?b:u,typeof n.panoIndex==`number`){let e=y.getObserver({workCode:(f=(d=n.workCode)==null?x.work.workCode:d)==null?``:f,panoIndex:n.panoIndex});e&&(C={workCode:e.work.workCode,panoIndex:e.panoIndex})}T={longitude:n.longitude,latitude:n.latitude,fov:n.fov,distance:n.distance,offset:n.offset?new l.Vector3().copy(n.offset):void 0}}let E=(p=g.duration)==null?this.modeChangeDuration:p;(w===`Floorplan`||w===`Topview`||w===`Mapview`)&&b===w&&(E=0);let D=`fly`;(w===`Panorama`||w===`VRPanorama`||w===`XRPanorama`)&&b===w&&(D=(m=g.effect)==null?`fade`:m),this.emit(`works.request`,$(`works.request`,{input:t,works:y,userAction:i}));let O=(e,t,r)=>{let a=this.getCurrentState(),o=Object.assign(Object.assign({mode:e},t),r);n===`inherit`&&(o=this.getCurrentState()),this.pano=t;let s=Object.assign(Object.assign({initial:{state:o,currentState:a,duration:E,effect:D,userAction:i}},this.commonParams()),this.controllerInits[e]),c=kD[o.mode].initAnimationEndState(s);if(this.controller&&b===e)this.controller.updateWork(y,c,{effect:D,duration:E},i)===!1&&(this.controller.destroy(),this.controller=this.applyController(e,s));else{if(this.controller)this.controller.destroy();else{let t=kD[e].initAnimationEndState(s);this.camera.setFromPose(t),this.emit(`camera.update`,$(`camera.update`,{state:this.getCurrentState(),userAction:i}))}this.controller=this.applyController(e,s);let t=$(`mode.change`,{prevMode:b,mode:e,state:c,userAction:i});try{this.emit(`mode.change`,t)}catch(e){console.error(e)}}this.state.workCode=this.pano.workCode,this.state.panoIndex=this.pano.panoIndex,this.updateTime(this.currentUpdateArgs.time,0,...this.currentUpdateArgs.args)};JD.set(this,y);let k=Promise.resolve();if(w===e.Mode.Floorplan||w===e.Mode.Topview||w===e.Mode.Mapview||w===e.Mode.Model){this.modelScene.loaded===!1&&(this.camera.setFromPose(T),qC(this.state,this.camera.pose));let e=this.modelScene.setModels(y,_);k=Promise.all(e.map(e=>e.loadedReady)).then(()=>{this.needsRender=!0,O(w,C,T),this.emit(`camera.update`,$(`camera.update`,{state:this.getCurrentState(),userAction:i}))})}else{O(w,C,T);let e=this.controller,t=!1;this.modelScene.autoRefine=!1;let n=()=>{this.works===y&&t===!1&&(this.needsRender=!0,this.emit(`camera.update`,$(`camera.update`,{state:this.getCurrentState(),userAction:i})),t=!0,this.modelScene.autoRefine=!0),e.off(`pano.arrived`,n),e.off(`pano.cancel`,n)},r=this.modelScene.setModels(y,_);k=Promise.all(r.map(e=>e.initReady)).then(q),e.once(`pano.arrived`,n),e.once(`pano.cancel`,n),setTimeout(n,((h=g.duration)==null?this.modeChangeDuration:h)+1e3)}return this.emit(`works.load`,$(`works.load`,{input:t,userAction:i,works:y})),k.then(()=>this.ready()).then(()=>{var e;this.emit(`works.ready`,$(`works.ready`,{input:t,userAction:i,works:y})),(e=this.analysis)==null||e.work(y)})}reset(){let e=this.loadWorkTask.then(()=>this.reset_());return this.loadWorkTask=e.catch(e=>{this.throwError(e)}),e}reset_(){return new Promise(e=>{var t;this.controller&&(this.controller.destroy(),this.controller=void 0);let n=this.modelScene.parameter;n.pano0&&n.pano0.map.dispose(),n.pano1&&n.pano1.map!==((t=n.pano0)==null?void 0:t.map)&&n.pano1.map.dispose(),n.set({pano0:null,pano1:null,modelAlpha:1}),JD.set(this,YD),this.modelScene.setModels(YD,{forceReplaceImmediately:!0}),this.renderer&&this.modelScene.update(this.renderer,this.camera),this.needsRender=!0,this.currentMode=`Panorama`,this.pano={workCode:``,panoIndex:0},this.camera.setFromPose({distance:0,fov:BD,longitude:0,latitude:0,offset:new l.Vector3(0,0,0)}),this.state={mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance},this.camera.needsRender=!1,this.needsRender=!1,e()})}changeMode(t,n={},r,i=!0,a=!1){return new Promise((o,s)=>{var c,l,u,d;if(!this.renderer)throw Error(`renderer is not initialized.`);n=Object.assign({},n);let f=0;this.controller&&(f=typeof r==`number`?r:(c=r==null?void 0:r.duration)==null?this.modeChangeDuration:c);let p=`fly`;this.controller&&typeof r==`object`&&r.effect&&(p=r.effect);let m=typeof n.panoIndex==`number`?{workCode:(d=(l=n.workCode)==null?(u=this.work)==null?void 0:u.workCode:l)==null?``:d,panoIndex:n.panoIndex}:this.pano;if(!e.Mode.hasOwnProperty(t)){let e=Error(`mode "${t}" is not existed`);this.throwError(e),s(e);return}if((t===e.Mode.Panorama||t===e.Mode.VRPanorama||t===e.Mode.XRPanorama)&&!this.works.getObserver(m)){let e=Error(`PanoId ${mb(m)} not existed.`);this.throwError(e),s(e);return}(t===e.Mode.Floorplan||t===e.Mode.Topview||t===e.Mode.Mapview||t===e.Mode.Model)&&this.modelScene.empty&&(f=0);let h=this.controller,g=this.currentMode,_=()=>{if(this.controller&&this.controller.stopMomentumMovement(),this.controller&&a===!1&&g===t)t===e.Mode.Panorama||t===e.Mode.Model||t===e.Mode.VRPanorama||t===e.Mode.XRPanorama?!gb(this.pano,m)&&`moveToPano`in this.controller&&typeof this.controller.moveToPano==`function`?this.controller.moveToPano(m,Object.assign({duration:f},n),i):this.controller.updateCamera(n,f,i).catch(q):(gb(this.pano,m)||(this.pano=m),this.controller.updateCamera(n,f,i).catch(q));else{let e=Object.assign(Object.assign({},n),m),r=Object.assign(Object.assign({initial:{state:e,currentState:this.getCurrentState(),duration:f,effect:p,userAction:i}},this.commonParams()),this.controllerInits[t]),a=kD[t].initAnimationEndState(r),o=$(`mode.change.request`,{prevMode:this.currentMode,mode:t,state:a,userAction:i});if(this.emit(`mode.change.request`,o),!o.defaultPrevented){h&&h.destroy(),this.controller=this.applyController(t,r);let e=$(`mode.change`,{prevMode:this.currentMode,mode:t,state:a,userAction:i});this.emit(`mode.change`,e)}}o()},v=nu.shared.getContext();if(v&&(typeof XRSession<`u`&&v instanceof XRSession&&v.end(),nu.shared.setContext(null)),t===e.Mode.VRPanorama)this.requestFullscreen(),LD().then(()=>_()).catch(e=>{let t=e instanceof Error?e:Error(String(e));this.exitFullscreen(),this.throwError(t),s(t)});else if(t===e.Mode.XRPanorama){if(!XE.isBackendXRCapable(this.renderer)){let e=Error(`XRPanorama 需要 WebGL2 回落后端。请在 new Five() 时传入 { forceWebGL: true }。后端在运行时无法切换,设备检测必须发生在 new Five() 之前。`);this.throwError(e),s(e);return}if(!XE.isBrowserXRCapable()){let e=Error(`当前浏览器不支持 WebXR(navigator.xr 不存在)。`);this.throwError(e),s(e);return}RD().then(e=>{nu.shared.setContext(e),a=!0;try{_()}catch(t){console.error(`[XR] changeMode 建立 XRPanorama controller 失败,结束 session: ${t instanceof Error?t.message:String(t)}`),Promise.resolve(e.end()).catch(()=>{}),nu.shared.setContext(null);let n=t instanceof Error?t:Error(String(t));this.throwError(n),s(n)}}).catch(e=>{let t=e instanceof Error?e:Error(String(e));this.throwError(t),s(t)})}else _()})}getPixels(e,t,n,r,i,a,o){return(0,u.__awaiter)(this,void 0,void 0,function*(){if(!this.renderer)throw Error(`renderer is not initialized.`);let s=K(),c=this.renderer.getPixelRatio(),u=this.renderer.getRenderTarget(),d=this.getSize(new l.Vector2),f=0,p=0,m=1,h=1,g,_,v,y,b;typeof e==`number`?(f=e,typeof t==`number`&&(p=t),typeof n==`number`&&(m=n),typeof r==`number`&&(h=r),g=i,_=a,b=o):(f=e.x,p=e.y,m=e.width,h=e.height,g=e.pixelRatio,_=e.flipY,v=e.helperVisible,y=e.skipPanorama,b=e.buffer),f=Math.floor(f),p=Math.floor(p),m=Math.floor(m),h=Math.floor(h),g=Math.floor(g==null?c:g),_=_==null?!1:_;let x=this.helperVisible,S=this.modelScene.parameter.modelAlpha;this.helperVisible=v==null?this.helperVisible:v,y&&(this.controller instanceof kD.Panorama||this.controller instanceof kD.VRPanorama||this.controller instanceof kD.XRPanorama)&&y===!0&&this.modelScene.parameter.set(`modelAlpha`,1),this.modelScene.update(this.renderer,this.camera);let C=this.getPixelsRenderTarget;C.setSize(m*g,h*g),this.renderer.setRenderTarget(C),this.camera.pixelRatio=g,this.camera.resolution.set(m,h),this.camera.setViewOffset(d.width,d.height,f,d.height-p-h,m,h),this.camera.aspect=d.width/d.height,this.camera.updateTime(s),this.scene.update(this.renderer,this.camera);let w=this.renderer.autoClear,T=this.renderer.autoClearColor,E=this.renderer.autoClearDepth,D=this.renderer.autoClearStencil,O=this.renderer.getClearColor(KD),k=this.renderer.getClearAlpha(),A=this.renderer.getScissorTest();this.renderer.autoClear=!0,this.renderer.autoClearColor=!0,this.renderer.autoClearDepth=!0,this.renderer.autoClearStencil=!0,this.renderer.setScissorTest(!1);let j=this.scene.background;this.scene.background=this.camera.isOrthographicCamera||this.backgroundAlpha<1?null:j,this.renderer.render(this.scene,this.camera),this.scene.background=j,this.renderer.autoClear=w,this.renderer.autoClearColor=T,this.renderer.autoClearDepth=E,this.renderer.autoClearStencil=D,this.renderer.setClearColor(O,k),this.renderer.setScissorTest(A),this.helperVisible=x,S===void 0?this.modelScene.parameter.reset(`modelAlpha`):this.modelScene.parameter.set(`modelAlpha`,S),this.renderer.setRenderTarget(u),this.camera.clearViewOffset(),this.camera.pixelRatio=c,this.camera.resolution.copy(d),this.camera.aspect=this.camera.resolution.width/this.camera.resolution.height,this.camera.updateTime(s),this.modelScene.update(this.renderer,this.camera),this.scene.update(this.renderer,this.camera);let M=m*g,N=h*g,ee=M*N,P=ee*4;if(b){if(b.length!==P)throw Error(`buffer length is not equals pixels ${P}`)}else b=new Uint8Array(P);let F=yield this.renderer.readRenderTargetPixelsAsync(C,0,0,M,N),I=M*4;if(F.length===P)b.set(F);else{let e=Math.ceil(I/256)*256;for(let t=0;t<N;t++){let n=t*e;b.set(F.subarray(n,n+I),t*I)}}if(!_){let e=ee/2;for(let t=0,n=0,r=0,i=0;n<e;n++)for(i=(N-Math.floor(n/M)-1)*M+n%M,r=0;r<4;r++)t=b[n*4+r],b[n*4+r]=b[i*4+r],b[i*4+r]=t}return b})}getElement(){var e;return(e=this.renderer)==null?void 0:e.domElement}render(e){let t=this.renderer;if(!t)return;let n=t.getRenderTarget();t.setRenderTarget(null);let r=t.autoClear,i=t.autoClearColor,a=t.autoClearDepth,o=t.autoClearStencil,s=t.getClearColor(KD),c=t.getClearAlpha(),l=t.getViewport(WD),u=t.getScissor(GD),d=t.getScissorTest();t.autoClear=!0,t.autoClearColor=!0,t.autoClearDepth=!0,t.autoClearStencil=!0;let f=t.getSize(qD),p=Math.floor(f.x*this.viewport.left),m=Math.floor(f.y*this.viewport.bottom),h=Math.floor(f.x*this.viewport.width),g=Math.floor(f.y*this.viewport.height);t.setClearColor(this.backgroundColor,this.backgroundAlpha),t.setViewport(p,m,h,g),t.setScissor(p,m,h,g);let _=this.viewport.bottom!==0||this.viewport.left!==0||this.viewport.width!==1||this.viewport.height!==1;t.setScissorTest(_);let v=this.scene.background;this.scene.background=this.camera.isOrthographicCamera||this.backgroundAlpha<1?null:v;let y=!0;this.controller&&this.controller.render()&&(y=!1),y&&this.fiveRenderer.render(t,this.scene,this.modelScene,this.camera,this.needsRender),this.scene.background=v,t.autoClear=r,t.autoClearColor=i,t.autoClearDepth=a,t.autoClearStencil=o,t.setClearColor(s,c),t.setViewport(l),t.setScissor(u),t.setScissorTest(d),t.setRenderTarget(n),e&&nu.shared.add(e,!0)}updateTime(e,t,...n){if(this.currentUpdateArgs={time:e,args:n},this.destroyed)return;if(this.renderer&&ff.detectSupport(this.renderer),this.syncingState=this.syncState(e,t),this.controller&&this.controller.updateTime(e,t,...n),this.renderer&&(this.camera.pixelRatio=this.renderer.getPixelRatio(),this.getSize(this.camera.resolution),this.camera.aspect=this.camera.resolution.width/this.camera.resolution.height),this.camera.controllerMode=this.currentMode,this.camera.updateTime(e),this.renderer){let e=this.modelScene.loaded,t=this.modelScene.refined;this.modelScene.update(this.renderer,this.camera),e===!1&&this.modelScene.loaded===!0&&(this.controller&&this.controller.updateModel(this.modelScene),nu.shared.add(()=>{this.emit(`models.load`,$(`models.load`,{modelScene:this.modelScene}))},!0,0,10)),t===!1&&this.modelScene.refined===!0&&nu.shared.add(()=>{this.emit(`models.refined`,$(`models.refined`,{modelScene:this.modelScene}))},!0,0,10)}if(this.camera.autoNearFar){UD.makeEmpty(),UD.expandByObject(this.modelScene.boundingMesh);let t=UD.getBoundingSphere(HD),n=t.radius*2;t.containsPoint(this.camera.position)||(n=this.camera.position.distanceTo(t.center)+t.radius);let r=U(n/500,.001,.1),i=U(n,800);this.camera.near!==r&&(this.camera.near=r),this.camera.far!==i&&(this.camera.far=i),this.camera.updateTime(e)}if(this.renderer){let e=this.modelScene.visible;this.modelScene.visible=!1,this.scene.update(this.renderer,this.camera),this.modelScene.visible=e}if(this.syncingState=!1,this.controller&&this.controller.needsRender===!0&&(this.controller.needsRender=!1,this.needsRender=!0),this.camera.needsRender===!0&&(this.camera.needsRender=!1,this.needsRender=!0),this.modelScene.needsRender===!0&&(this.modelScene.needsRender=!1,this.needsRender=!0),this.scene.needsRender===!0&&(this.scene.needsRender=!1,this.needsRender=!0),this.pbmGaussianSplattingRenderMesh&&this.pbmGaussianSplattingRenderMesh.needsRender===!0&&(this.pbmGaussianSplattingRenderMesh.needsRender=!1,this.needsRender=!0),this.onlyRenderIfNeeds!==!0&&(this.needsRender=!0),this.paused===!0||this.renderer instanceof oC&&!this.renderer.isInitialized)return;let r=$(`render.prepare`,{needsRender:this.needsRender});this.emit(`render.prepare`,r),r.defaultPrevented&&(this.needsRender=!1);let i=this.needsRender;this.render(),this.needsRender=!1,this.emit(`render`,$(`render`,{needsRender:i})),this.hasListener(`fps`)&&(this.fps.testTime&&e-this.fps.testTime<1e3?this.fps.testCount++:(this.emit(`fps`,this.fps.testCount),this.fps.testTime=e,this.fps.testCount=0))}pause(){this.paused=!0,this.renderer&&this.renderer instanceof oC&&this.renderer.clear(!0,!0,!0)}play(){this.needsRender=!0,this.paused=!1}moveToPano(t,n={},r=!0){let{controller:i,renderer:a}=this;if(!i)return this.throwError(Error(`controller is not initialized.`)),Promise.resolve();if(!a)return this.throwError(Error(`renderer is not initialized.`)),Promise.resolve();typeof t==`number`&&this.pano.workCode&&(t={workCode:this.pano.workCode,panoIndex:t});let o=this.works.getObserver(t);if(!o)return this.throwError(Error(`pano ${JSON.stringify(t)} not existed.`)),Promise.resolve();let s={workCode:o.work.workCode,panoIndex:o.panoIndex};return`moveToPano`in i&&typeof i.moveToPano==`function`?i.moveToPano(s,n,r):o&&(this.pano=s,this.once(`initAnimation.start`,e=>{n.moveStartCallback&&n.moveStartCallback(e.state)}),this.once(`initAnimation.end`,e=>{n.moveEndCallback&&n.moveEndCallback(e.state)}),this.changeMode(e.Mode.Panorama,n,{effect:n.effect},r)),this.ready()}preloadPano(e,t=q){let n=this.works.getObserver(e);if(!n)return Promise.reject(Error(`Pano ${JSON.stringify(e)} never found`));let r=[`right`,`left`,`up`,`down`,`front`,`back`],i=K();return Promise.all(r.map(e=>{let t=mb({panoIndex:n.panoIndex,workCode:n.work.workCode}),r=Object.assign({key:`pano.${t}.${e}`},pl(this.imageOptions,[`size`,`format`,`quality`,`forceUseExifOrientation`,`mappings`])),i=n.work.getURL(n.images[e]),a=this.imageOptions.transform?this.imageOptions.transform(i,r):Gl(i,r);return gy(this.fiveId,n.work).preload(a)})).then(()=>{let e=K()-i;return t(e),e})}project2d(e,t=!1){if(!this.renderer)return null;if(t){let t=this.camera.position,n=e.clone().sub(t),r=new l.Raycaster(t,n.clone().normalize());r.params.Points={threshold:.1};let[i]=this.modelScene.intersectRaycaster(r);if(i&&i.distance+.01<n.length())return null}let n=e.clone().project(this.camera);if(Math.abs(n.z)>1)return null;let r=this.renderer.getSize(new l.Vector2),i=r.x*this.viewport.width,a=r.y*this.viewport.height,o=r.x*this.viewport.left+(n.x+1)/2*i,s=r.y*(1-this.viewport.bottom-this.viewport.height)+(-n.y+1)/2*a;return new l.Vector2(o,s)}getCurrentState(){return Object.assign(Object.assign({},this.camera.copyPose()),{mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex})}setState(e,t=!1,n=!0){var r,i,a,o,s,c,u,d,f,p;e=pl(e,[`mode`,`workCode`,`panoIndex`,`longitude`,`latitude`,`fov`,`offset`,`distance`]),e.offset&&!(e instanceof l.Vector3)&&(e.offset=new l.Vector3(e.offset.x,e.offset.y,e.offset.z));let m;if(typeof e.panoIndex==`number`)if(e.workCode)m={workCode:e.workCode,panoIndex:e.panoIndex};else{let t=(i=(r=this.work)==null?void 0:r.workCode)==null?``:i,n=this.state.workCode;this.works.filter(e=>e.workCode===n).length>0&&(t=n),m={workCode:t,panoIndex:e.panoIndex}}let h=(a=e.mode)==null?this.state.mode:a,g,_,v,y,b;if(this.controller&&this.controller.stopMomentumMovement(),this.state.mode!==h){if(h===`VRPanorama`){this.changeMode(`VRPanorama`,void 0,void 0,!0);return}if(h===`XRPanorama`){this.changeMode(`XRPanorama`,void 0,void 0,!0);return}let t={workCode:m==null?void 0:m.workCode,panoIndex:m==null?void 0:m.panoIndex};typeof e.longitude==`number`&&(t.longitude=e.longitude),typeof e.latitude==`number`&&(t.latitude=e.latitude),typeof e.fov==`number`&&(t.fov=e.fov),typeof e.distance==`number`&&(t.distance=e.distance),e.offset instanceof l.Vector3&&(t.offset=e.offset);let n=Object.assign(Object.assign({initial:{state:t,currentState:this.getCurrentState(),duration:this.modeChangeDuration,effect:`fly`,userAction:!1}},this.commonParams()),this.controllerInits[h]),r=kD[h].initAnimationEndState(n);g=r.longitude,_=r.latitude,v=r.fov,y=r.offset,b=r.distance}else g=(o=e.longitude)==null?this.state.longitude:o,_=(s=e.latitude)==null?this.state.latitude:s,v=(c=e.fov)==null?this.state.fov:c,y=(u=e.offset)==null?this.state.offset:u,b=(d=e.distance)==null?this.state.distance:d;let x={workCode:(m==null?this.pano:m).workCode,panoIndex:(m==null?this.pano:m).panoIndex,mode:h,longitude:g,latitude:_,fov:v,offset:y,distance:b};this.emit(`state.set`,$(`state.set`,{userAction:n,state:x})),KC(this.state,x)||(this.controller&&x.mode===`VRPanorama`&&x.mode!==this.state.mode?(GC(this.state,x),this.changeMode(`VRPanorama`)):this.controller&&x.mode===`XRPanorama`&&x.mode!==this.state.mode?(GC(this.state,x),this.changeMode(`XRPanorama`)):(GC(this.state,x),this.controller&&n&&(this.controller.userAction=!1),t&&this.state.mode===x.mode&&(this.syncingState=this.syncState(K(),0,t),this.syncingState&&((f=this.controller)==null||f.updateTime(K(),0),this.syncingState=!1)),this.emit(`state.change`,$(`state.change`,{userAction:n,state:this.state})),(p=this.analysis)==null||p.state(this.works,this.state)))}syncState(t,n,r=!1){let i=this.stateSynced;if(this.stateSynced=!1,!this.controller)return!1;if(this.state.mode!==this.currentMode){let e={mode:this.state.mode,workCode:this.state.workCode,panoIndex:this.state.panoIndex,longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset,distance:this.state.distance};return this.changeMode(this.state.mode,e,this.modeChangeDuration,this.controller.userAction),!0}if(!this.controller.isReady())return!1;if(this.controller instanceof kD.Model){if(BC(this.camera.pose.offset,this.state.offset)){let e={longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset};return this.controller.moveToPosition(this.state.offset,Object.assign(Object.assign({},e),{duration:r?0:void 0}),!1),!0}}else{let e={workCode:this.state.workCode,panoIndex:this.state.panoIndex};if(!gb(e,this.pano)&&`moveToPano`in this.controller&&typeof this.controller.moveToPano==`function`){let t={longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset,distance:this.state.distance};return this.controller.moveToPano(e,t,!1),!0}}if(this.controller instanceof kD.Floorplan||this.controller instanceof kD.Topview||this.controller instanceof kD.Mapview){let e=.2,t=Math.PI/45,n=r?this.state.fov:Mx(this.camera.pose.fov,this.state.fov,1),i=Math.abs(this.camera.pose.distance-this.state.distance),a=i>e*15?i/15:.2,o=r?this.state.distance:Mx(this.camera.pose.distance,this.state.distance,a),s=this.camera.pose.offset.distanceTo(this.state.offset),c=s>e*15?s/15:e,u=r?new l.Vector3().copy(this.state.offset):Nx(this.camera.pose.offset,this.state.offset,c),{longitude:d,latitude:f}=r?{longitude:this.state.longitude,latitude:this.state.latitude}:Px({longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude},{longitude:this.state.longitude,latitude:this.state.latitude},t);if(RC(n,this.camera.pose.fov)||BC(u,this.camera.pose.offset)||RC(o,this.camera.pose.distance)||RC(d,this.camera.pose.longitude,Math.PI*2)||RC(f,this.camera.pose.latitude)){let e={x:u.x,y:u.y,z:u.z},t={fov:n};return Object.assign(e,{distance:o}),Object.assign(t,{longitude:d,latitude:f}),this.controller.stopMomentumMovement(),this.controller.cameraMotion.set(t,0).catch(q),this.controller.locationMotion.set(e,0).catch(q),!0}}else{let e=Math.PI/45,t=r?this.state.fov:Mx(this.camera.pose.fov,this.state.fov,1),{longitude:n,latitude:i}=r?{longitude:this.state.longitude,latitude:this.state.latitude}:Px({longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude},{longitude:this.state.longitude,latitude:this.state.latitude},e),a=this.state.distance,o=new l.Vector3().copy(this.state.offset);if(RC(a,this.camera.pose.distance)&&(this.state.distance=this.camera.pose.distance),BC(o,this.camera.pose.offset)&&(this.state.offset=this.camera.pose.offset.clone()),RC(n,this.camera.pose.longitude,Math.PI*2)||RC(i,this.camera.pose.latitude)||RC(t,this.camera.pose.fov))return this.controller.stopMomentumMovement(),this.controller.cameraMotion.set({longitude:n,latitude:i,fov:t},0).catch(q),!0}if(this.stateSynced=!0,i===!1&&this.emit(`state.synced`,$(`state.synced`,{userAction:!1,state:this.state})),this.readyCallbacks.length&&this.stateSynced){let t=this.currentMode;if(!(t===e.Mode.Floorplan||t===e.Mode.Topview||t===e.Mode.Mapview||t===e.Mode.Model)||this.modelScene.loaded){let e=this.readyCallbacks.slice();this.readyCallbacks.length=0;for(let t of e)this.controller instanceof kD.Panorama&&t.tile===!0?this.readyCallbacks.push(t):t()}}return!1}ready(e={}){return new Promise(t=>{var n;this.readyCallbacks.push(Object.assign(t,{tile:(n=e.tile)==null?!1:n}))}).then(()=>{var e;return Promise.all([this.model.initReady,(e=this.renderer)==null?void 0:e.ready])}).then(q)}requestFullscreen(){var e;if(!WS)return;let t=(e=this.getElement())==null?void 0:e.parentNode;t&&`requestFullscreen`in t&&typeof document<`u`&&document.fullscreenElement===null&&t.requestFullscreen()}exitFullscreen(){typeof document<`u`&&document.fullscreenElement&&`exitFullscreen`in document&&document.exitFullscreen()}throwError(e){this.hasListener(`error`)?this.emit(`error`,e):console.error(e)}bindModel(e){let t=()=>{nu.shared.add(()=>{this.emit(`model.load`,$(`model.load`,{work:e.work,model:e,error:null}))},!0)},n=t=>{let{error:n}=t;this.emit(`model.error`,$(`model.error`,{work:e.work,model:e,error:n})),this.throwError(n)},r=()=>{this.emit(`model.changeShownFloor`,$(`model.changeShownFloor`,{work:e.work,model:e,error:null}))},i=t=>{this.emit(`models.tileLoad`,$(`models.tileLoad`,{work:e.work,model:e,tile:t.tile}))},a=t=>{this.emit(`models.tileUnload`,$(`models.tileUnload`,{work:e.work,model:e,tile:t.tile}))},o=()=>{e.removeEventListener(`load`,t),e.removeEventListener(`error`,n),e.removeEventListener(`changeShownFloor`,r),e.removeEventListener(`tileLoad`,i),e.removeEventListener(`tileUnload`,a),e.removeEventListener(`dispose`,o)};e.addEventListener(`load`,t),e.addEventListener(`error`,n),e.addEventListener(`changeShownFloor`,r),e.addEventListener(`tileLoad`,i),e.addEventListener(`tileUnload`,a),e.addEventListener(`dispose`,o),this.emit(`model.request`,$(`model.request`,{work:e.work,model:e,error:null}))}bindWorkFetcher(e){let t=this,n=e.workCode,r=e.allowHosts,i=new dl({get networkSubscribe(){return t.networkSubscribe},requestProxy(e){return Promise.resolve(e).then(e=>t.requestProxy(e,n)).then(e=>{let t=zb(e,r);return t instanceof Error?Promise.reject(t):t})}});_y(this.fiveId,e,i)}commonParams(){return{fiveId:this.fiveId,scene:this.scene,xrCustomObjectsScene:this.xrCustomObjectsScene,helper:this.helperGroup,camera:this.camera,renderer:this.renderer,viewport:this.viewport,element:this.getElement(),works:this.works,imageOptions:this.imageOptions,enableWheel:this.enableWheel,enableHDR:this._enableHDR,extraElements:this.extraElements,videoTexture:this.videoTexture,modelScene:this.modelScene}}applyController(t,n){if(!this.renderer)throw Error(`renderer is not initialized.`);let r=kD[t];this.currentMode=t;let i=new r(n);for(let e of jD)i.on(e,(...t)=>{if(this.emit(e,...t))return!1});{let e=kD[t].initAnimationEndState(n),r=n.initial.userAction;KC(this.state,e)||(GC(this.state,e),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state}))),this.emit(`currentState.change`,$(`currentState.change`,{userAction:r,state:this.getCurrentState()}))}return i.on(`camera.update`,e=>{var t;if(this.controller){let n=this.controller.getTargetState();e.userAction&&this.syncingState===!1&&this.state.mode===n.mode&&!KC(this.state,n)&&(GC(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:e.userAction,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}this.emit(`currentState.change`,$(`currentState.change`,{userAction:e.userAction,state:this.getCurrentState()}))}),i.on(`initAnimation.start`,e=>{var t;let{state:n,userAction:r}=e;r&&this.state.mode===n.mode&&!KC(this.state,n)&&(GC(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),i.on(`initAnimation.end`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!KC(this.state,n)&&(GC(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),i.on(`pano.moveTo`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!KC(this.state,n)&&(GC(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),i.on(`pano.arrived`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!KC(this.state,n)&&(GC(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),i.on(`pano.cancel`,e=>{var t;let{state:n,userAction:r}=e;r&&this.state.mode===n.mode&&!KC(this.state,n)&&(GC(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),i.on(`pano.moveTo`,e=>{let{userAction:t}=e;this.emit(`currentState.change`,$(`currentState.change`,{userAction:t,state:this.getCurrentState()}))}),i.on(`pano.request`,e=>{this.emit(`pano.request`,e),e.defaultPrevented||this.moveToPano(e.state,e.options,e.userAction)}),i.on(`vr.requestExit`,()=>{this.currentMode===e.Mode.VRPanorama&&(this.exitFullscreen(),this.changeMode(e.Mode.Panorama))}),i.on(`error`,e=>this.throwError(e)),i}removeEventListeners(){}get internalLightsEnabled(){let e=this.scene.children.find(e=>e.name===`internalLights`);return e?e.visible:!1}set internalLightsEnabled(e){let t=this.scene.children.find(e=>e.name===`internalLights`);t&&(t.visible=e),t=this.modelScene.children.find(e=>e.name===`internalLights`),t&&(t.visible=e)}get scissor(){return this.viewport}setScissor(e){return this.setViewport(e)}getPose(){let{longitude:e,latitude:t,fov:n,offset:r,distance:i}=this.camera.copyPose();return{longitude:e,latitude:t,fov:n,offset:r.clone(),distance:i}}getLongitudeAndLatitude(){let{longitude:e,latitude:t}=this.getPose();return{longitude:e,latitude:t}}getOffset(){return this.getPose().offset}getCameraLocal(){if(this.pano.workCode&&this.controller&&this.works){let e=this.works.getObserver(this.pano);if(e){let t=new l.Object3D;t.matrix.copy(e.matrix).premultiply(e.work.transform),t.matrix.decompose(t.position,t.quaternion,t.scale),t.matrixAutoUpdate=!1;let n=new l.Vector3(0,0,-1);n.applyQuaternion(this.camera.quaternion);let r=t.quaternion.clone().invert();return n.applyQuaternion(r),{theta:Math.atan2(n.x,-n.z),phi:-Math.asin(n.y),lookAtVector:n}}}return null}addPass(e){this.fiveRenderer.composer.addPass(e)}removePass(e){let t=this.fiveRenderer.composer.passes.indexOf(e);t!==-1&&this.fiveRenderer.composer.passes.splice(t,1)}insertPass(e,t){this.fiveRenderer.composer.insertPass(e,t)}get renderMode(){return this.fiveRenderer.renderMode}set renderMode(e){this.fiveRenderer.renderMode=e}get enableEDL(){return this.eyeDomeLightingPass.enabled}set enableEDL(e){this.eyeDomeLightingPass.enabled=e,this.needsRender=!0}get enableAdaptiveLuminance(){return this.adaptiveLuminancePass.enabled}set enableAdaptiveLuminance(e){this.adaptiveLuminancePass.enabled=e,this.needsRender=!0}get enableHDR(){return this._enableHDR}};ZD.Mode={Panorama:`Panorama`,Model:`Model`,Floorplan:`Floorplan`,Topview:`Topview`,Mapview:`Mapview`,VRPanorama:`VRPanorama`,XRPanorama:`XRPanorama`},typeof window<`u`&&Object.assign(window,{__FIVE_DEBUG__:{THREE:l,constructor:ZD,instances:XD}});var QD=class{static createButton(e){let t=document.createElement(`button`),n=`ENTER VR`,r=`calc(50% - 50px)`,i=`100px`,a;function o(){t.style.display=``,t.style.cursor=`pointer`,t.style.left=r,t.style.width=i,t.textContent=n,t.onmouseenter=function(){t.style.opacity=`1.0`},t.onmouseleave=function(){t.style.opacity=`0.5`},t.onclick=function(){if(!e)return;let t;try{t=e()}catch(e){s(e);return}t&&typeof t.then==`function`&&t.then(void 0,s)}}function s(e){let o=e instanceof Error?e.message:String(e);/forceWebGL/.test(o)&&(a&&clearTimeout(a),t.textContent=`需降级到 WebGL2`,t.style.left=`calc(50% - 75px)`,t.style.width=`150px`,a=setTimeout(function(){a=void 0,t.textContent=n,t.style.left=r,t.style.width=i},3e3))}function c(){t.style.display=``,t.style.cursor=`auto`,t.style.left=`calc(50% - 75px)`,t.style.width=`150px`,t.onmouseenter=null,t.onmouseleave=null,t.onclick=null}function l(){c(),t.textContent=`VR NOT SUPPORTED`}function u(e){e.style.position=`absolute`,e.style.bottom=`20px`,e.style.padding=`12px 6px`,e.style.border=`1px solid #fff`,e.style.borderRadius=`4px`,e.style.background=`rgba(0,0,0,0.1)`,e.style.color=`#fff`,e.style.font=`normal 13px sans-serif`,e.style.textAlign=`center`,e.style.opacity=`0.5`,e.style.outline=`none`,e.style.zIndex=`999`}if(`xr`in navigator)return t.id=`VRButton`,t.style.display=`none`,u(t),navigator.xr.isSessionSupported(`immersive-vr`).then(function(e){e?o():l()}),t;{let e=document.createElement(`a`);return window.isSecureContext===!1?(e.href=document.location.href.replace(/^http:/,`https:`),e.innerHTML=`WEBXR NEEDS HTTPS`):(e.href=`https://immersiveweb.dev/`,e.innerHTML=`WEBXR NOT AVAILABLE`),e.style.left=`calc(50% - 90px)`,e.style.width=`180px`,e.style.textDecoration=`none`,u(e),e}}};exports.AdaptiveLuminancePass=Gx,exports.AnimationFrameLoop=nu,exports.BoundingMesh=Wy,exports.Camera=Oa,exports.EffectComposer=sx,exports.EyeDomeLightingPass=qx,exports.Fetcher=dl,exports.Five=ZD,exports.FivePass=lx,exports.FiveRenderer=BS,exports.FlowingFireworks3DPass=rS,exports.FlowingLight2DPass=Zx,exports.FlowingLight3DPass=Yx,exports.FullScreenQuad=cx,exports.GSPLAT_PIPELINE_AUTO=vi,exports.GSPLAT_PIPELINE_RASTER_CPU_SORT=yi,exports.GSPLAT_PIPELINE_RASTER_GPU_SORT=bi,exports.GaussianBlurPass=Jx,exports.Histogram=kx,exports.InternalWebGPURenderer=oC,exports.Model=Fy,exports.ModelScene=Ky,exports.Motion=Y,exports.NetworkSubscribe=ol,exports.PBMCustomNode=qt,exports.PBMGSObject=Mt,exports.PBMGaussianSplattingObject=Mt,exports.PBMGaussianSplattingNodeMaterial=gr,exports.PBMGaussianSplattingRenderMesh=Ei,exports.PBMGroup=wt,exports.PBMMesh=kt,exports.PBMMeshBasicMaterial=Di,exports.PBMMeshBasicNodeMaterial=zc,exports.PBMMeshPanoOnlyMaterial=Oi,exports.PBMMeshPanoOnlyNodeMaterial=Gc,exports.PBMMeshPhongMaterial=ki,exports.PBMMeshPhongNodeMaterial=Vc,exports.PBMMeshPhysicalMaterial=Ai,exports.PBMMeshPhysicalNodeMaterial=Uc,exports.PBMPanoFilter=Yt,exports.PBMPointCloud=pn,exports.PBMPointCloudMaterial=sn,exports.PBMSkinnedMesh=At,exports.PBMUpdateable=Kt,exports.PBMVertexMarkFlag=Gt,exports.PROXY_CONTROLLER_EVENT_NAMES=jD,exports.PanoCircleMesh=bC,exports.PanoCircleMeshCustom=IC,exports.PanoCircleMeshSolid=OC,exports.Parameter=Z,exports.Scene=fC,exports.Subscribe=Bt,exports.TextureLoader=mu,exports.Tile=Qp,exports.Tile3D=my,exports.Tile3DModel=my,exports.TileCache=Ih,exports.TileNode=Th,exports.TileRequestScheduler=Nh,exports.Tileset=Hh,exports.Trajectory=kh,exports.TrajectoryNode=Ah,exports.Work=tx,exports.WorkResolvedObserver=ix,exports.XRButton=QD,exports.controllersDefaultInitArgs=AD,exports.coordinatesToVector=ha,exports.createDebugBoundingMesh=qp,exports.createWorks=ax,exports.customNodesCacheKey=Jt,exports.defaultImageURLTransform=Gl,exports.draco=rf,exports.getViewportScale=ID,exports.headingToLongitude=va,exports.imageSupport=Ol,exports.isBoundingVolume=Hp,exports.isPanoId=_b,exports.loadAt3d=td,exports.loadDome=ad,exports.loadDomez=fd,exports.loadGltf=xp,exports.loadPbm=Nu,exports.loadPly=gd,exports.longitudeToHeading=_a,exports.makeBoundingVolume=Up,exports.panoEqual=gb,exports.panoParse=hb,exports.panoStringify=mb,exports.parseWork=nx,exports.registerPBMMaterials=Jc,exports.vectorToCoordinates=ga,exports.workToJson=Zy;
1322
+ `;function CE(e){let t=1,n=document.getElementsByTagName(`meta`);for(let e=0;e<n.length;e++){let r=n[e];if(r.getAttribute(`name`)===`viewport`){let e=(r.getAttribute(`content`)||``).match(/initial\-scale\=([\d|\.]+)/);e&&(t=Number(e[1])),isNaN(t)&&(t=1)}}let r=e=>Math.floor(e*t)+`px`;return SE.replace(/\n/g,` `).replace(/\ +/g,` `).replace(/\$id/g,e).replace(/(\d+)px/g,(e,t)=>r(Number(t)))}function wE(){let e=`five_vr_helper_`+Ft(),t=CE(e),n=document.createElement(`div`);return n.className=e,n.innerHTML=t,n}var TE=new l.CircleGeometry(.12,16),EE=(0,p.vec2)(.5,.5),DE=(0,p.float)(.017);function OE(e,t){let n=(0,p.length)(EE.sub(e));return(0,p.smoothstep)(t,t.add(DE),n)}function kE(e,t){let n=(0,p.length)(EE.sub(e));return(0,p.float)(1).sub((0,p.smoothstep)(t.sub(DE),t,n))}function AE(){let e={opacity:(0,p.uniform)(0)},t=(0,p.uv)(),n=(0,p.length)(EE.sub(t)),r=(0,p.float)(.01),i=(0,p.float)(.49),a=(0,p.float)(.29),o=(0,p.float)(1).sub((0,p.smoothstep)(i.sub(r),i,n)),s=(0,p.smoothstep)(a,a.add(r),n),c=(0,p.vec4)(.576,.635,1,.3),u=(0,p.vec4)(1,1,1,(0,p.abs)(n.sub(i.add(a).div(2))).div(i.sub(a)).mul(1.5).add(.1).clamp(0,1)),d=(0,p.mix)(c,u,u.w),f=new l.NodeMaterial;return f.fragmentNode=(0,p.vec4)(d.xyz,d.w.mul(e.opacity).mul(o).mul(s)),f.blending=l.CustomBlending,f.blendSrc=l.SrcAlphaFactor,f.blendDst=l.OneMinusSrcAlphaFactor,f.blendSrcAlpha=l.OneFactor,f.blendDstAlpha=l.OneMinusSrcAlphaFactor,f.depthWrite=!1,f.transparent=!0,{material:f,u:e}}function jE(){let e={circleScale:(0,p.uniform)(1),circleFade:(0,p.uniform)(0),circleOpacity:(0,p.uniform)(.5),loadingAngle:(0,p.uniform)(0),loadingOpacity:(0,p.uniform)(0),opacity:(0,p.uniform)(0),disable:(0,p.uniform)(0)},t=(0,p.uv)();(0,p.length)(EE.sub(t));let n=(0,p.float)(.98).add((0,p.abs)((0,p.normalize)((0,p.vec2)(1,-1)).dot(t.sub(EE))).mul(2)).clamp(0,1),r=(0,p.vec4)((0,p.mix)((0,p.vec4)(.576,.635,1,1).xyz,(0,p.vec4)(1,1,1,1).xyz,e.circleFade.mul(.5)),n.mul(e.circleOpacity).mul(kE(t,(0,p.float)(.3).mul(e.circleScale)))),i=(0,p.mod)(p.PI.sub((0,p.atan)(EE.x.sub(t.x),EE.y.sub(t.y))).add(e.loadingAngle),p.PI2),a=(0,p.vec4)(1,1,1,(0,p.float)(1).sub((0,p.smoothstep)((0,p.float)(0),p.PI2,i)).mul(.9).add(.1).mul(e.loadingOpacity).mul(OE(t,(0,p.float)(.2).mul(e.circleScale))).mul(kE(t,(0,p.float)(.25).mul(e.circleScale)))),o=(0,p.vec4)(1,1,1,(0,p.float)(.5).mul(kE(t,(0,p.float)(.32).mul(e.circleScale)))),s=(0,p.vec4)(1,1,1,0);s=(0,p.mix)(s,r,r.w),s=(0,p.mix)(s,a,a.w),s=(0,p.mix)(s,o,e.disable);let c=(0,p.vec4)(s.xyz,s.w.mul(e.opacity)),u=new l.NodeMaterial;return u.fragmentNode=c,u.blending=l.CustomBlending,u.blendSrc=l.SrcAlphaFactor,u.blendDst=l.OneMinusSrcAlphaFactor,u.blendSrcAlpha=l.OneFactor,u.blendDstAlpha=l.OneMinusSrcAlphaFactor,u.depthWrite=!1,u.transparent=!0,{material:u,u:e}}var ME=class extends l.Object3D{constructor(){super(),this.progress=0,this.opacity=0,this.loading=!1,this.current=!1,this.disabled=!1,this.currentMotion=new Y({ringScale:1.1,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}),this.opacityMotion=new Y({opacity:0}),this.loadingMotion=new Y({opacity:0}),this.disableMotion=new Y({opacity:0}),this.hitTestMesh=new l.Mesh(TE,new l.MeshBasicMaterial({blending:l.CustomBlending,blendSrc:l.SrcAlphaFactor,blendDst:l.OneMinusSrcAlphaFactor,blendSrcAlpha:l.OneFactor,blendDstAlpha:l.OneMinusSrcAlphaFactor,depthWrite:!1,transparent:!0,color:0,opacity:0})),this.hitTestMesh.scale.set(1.5,1.5,1.5);let{material:e,u:t}=AE();this.ringMesh=new l.Mesh(TE,e),this.ringU=t;let{material:n,u:r}=jE();this.panoMesh=new l.Mesh(TE,n),this.panoU=r,this.add(this.hitTestMesh),this.add(this.ringMesh),this.add(this.panoMesh),this.renderOrder=1e4,this.needsRender=!0}setProgress(e){this.progress=e,this.setLoading(e>0)}setOpacity(e){this.opacity!==e&&(this.opacity=e=U(e,0,1),this.opacityMotion.set({opacity:e},30).catch(q))}setCurrent(e){if(this.current!==e){if(e)this.currentMotion.setKeyframes([{progress:0,value:{ringScale:2,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.05,value:{ringScale:1,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.15,value:{ringScale:1.2,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.25,value:{ringScale:1.1,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.8,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.85,circleScale:1}},{progress:.9,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.65,circleScale:.8}},{progress:.92,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.65,circleScale:.8}},{progress:1,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.85,circleScale:1.1}}],1500).catch(q);else{let e=[{progress:0,value:Object.assign({},this.currentMotion.value)},{progress:1,value:{ringScale:1.1,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}}];this.currentMotion.setKeyframes(e,200).catch(q)}this.current=e}}setLoading(e){this.loading!==e&&(e?this.loadingMotion.setKeyframes([{progress:0,value:{opacity:0}},{progress:.3,value:{opacity:0}},{progress:1,value:{opacity:.8}}],500).catch(q):this.loadingMotion.set({opacity:0},0).catch(q),this.loading=e,this.disabled===!0&&this.setDisabled(!1),this.needsRender=!0)}setDisabled(e){this.disabled!==e&&(this.disabled=e,this.loading===!0&&this.setLoading(!1),this.disableMotion.set({opacity:+!!e},300).catch(q),this.needsRender=!0)}tap(){return Promise.resolve()}updateTime(e,t){this.opacityMotion.update(e),this.currentMotion.update(e),this.loadingMotion.update(e);let n=this.opacityMotion.value.opacity;this.visible=n!==0;let{ringScale:r,ringOpacity:i,circleFade:a,circleOpacity:o,circleScale:s}=this.currentMotion.value;this.ringMesh.scale.set(r,1,r),this.ringU.opacity.value=i*n,this.panoU.opacity.value=n,this.panoU.circleOpacity.value=o,this.panoU.circleScale.value=s,this.panoU.circleFade.value=a,this.panoU.loadingOpacity.value=this.loadingMotion.value.opacity,this.panoU.disable.value=this.disableMotion.value.opacity,this.panoU.loadingAngle.value=e/120%(Math.PI*2),this.needsRender=!0}dispose(){this.hitTestMesh.material.dispose(),this.ringMesh.material.dispose(),this.panoMesh.material.dispose()}},NE=1500,PE=Object.assign({},ml(VT,[`maxLatitude`,`minLatitude`])),FE=class e extends HT{static parseArgs(t){if(t instanceof e)return t;let n=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2});return super.parseArgs(n)}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`VRPanorama`})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`VRPanorama`,this.cardboard=new gE(this.renderer);let r=wE();this.helperElement=r;let i=new mw(r);this.element.parentNode&&(this.element.parentNode.insertBefore(r,this.element),this.updateHelperElementSize(),i.on(`tap`,()=>this.emit(`vr.requestExit`,$(`vr.requestExit`,{})))),this.destroyHelper=()=>{i.destroy(),r.parentNode&&r.parentNode.removeChild(r),this.helperElement=void 0}}updateConfiguration(e){return super.updateConfiguration(Object.assign(Object.assign({},e),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2}))}destroy(){super.destroy(),this.cardboard.dispose(),this.destroyHelper()}isReady(){return!1}updateRenderSize(){this.needsRender=!0}updateCamera(e,t,n){return Promise.resolve()}updateCameraWithKeyframes(e,t,n){return Promise.resolve()}updateTime(e,t,...n){var r,i,a,o,s,c;if(this.destroyed)return;this.updateHelperElementSize(),this.userAction=!0,this.needsRender=!0;let u={},d={},f=this.locationMotion.keyframes[0],p=this.locationMotion.keyframes[this.locationMotion.keyframes.length-1],[m,h]=this.locationMotion.getKeyFrameSegment(e),g=this.panoResourceFromLocationMotionKeyframe(m),_=this.panoResourceFromLocationMotionKeyframe(h),v=this.panoResourceFromLocationMotionKeyframe(f),y=this.panoResourceFromLocationMotionKeyframe(p),b=!1;if(this.modelAlphaMotion.ended===!1&&(this.modelAlphaMotion.update(e),u.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.perspToOrthoMotion.ended===!1&&(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(U(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended===!1){this.locationMotion.update(e);let t=this.locationMotion.value.count-h.value.count+1,n=new l.Vector3().copy(g.position),a=new l.Vector3().copy(_.position);if(u.progress=t,t>=.01&&t<=.99&&(u.progress=U(_.effectEasing(t),.01,.99)),_.panoPicture&&(t<1?g.panoPicture&&(u.pano0=g.panoPicture):u.pano0=_.panoPicture,u.pano1=_.panoPicture),_.effect===`montage`?u.transition=`BLACK`:_.effect===`spread`?u.transition=`SPREAD`:u.transition=`FADE`,_.effect===`zoomin`||_.effect===`zoomout`?u.progress=Math.pow(t,3):_.effect===`model`&&this.camera.pose.distance<.01&&(u.modelAlpha=1-Math.pow(U(Math.abs(t-.5)*2,0,1),4)),t<1&&_.effect!==`fly`){if(u.pano0&&g.panoPicture){let e={panoId:u.pano0.panoId,map:u.pano0.map,mapHistogram:u.pano0.mapHistogram,mapSize:u.pano0.mapSize,zoom:u.pano0.zoom,matrix:g.panoPicture.matrix.clone().setPosition(_.position),gainmap:u.pano0.gainmap?{map:u.pano0.gainmap.map,cfg:Object.assign({},u.pano0.gainmap.cfg)}:void 0},t=this.panoPictureObserverMap.get(u.pano0);t&&this.panoPictureObserverMap.set(e,t),u.pano0=e}n.copy(a),b=!0}d.distance=this.locationMotion.value.distance,d.offset=new l.Vector3(n.x+(a.x-n.x)*t,n.y+(a.y-n.y)*t,n.z+(a.z-n.z)*t);let o=[],s=[];for(let e of this.locationMotion.keyframes){let{key:t,progress:n}=e;t!==void 0&&(o.push(t),n>this.locationMotion.progress&&s.push(t))}for(let e of Object.keys(this.panoResources)){if(s.indexOf(e)>=0)continue;let t=this.panoResources[e];if(t.panoPicture){let e=t.panoPicture.map;if(e){if(e===((r=u.pano0)==null?void 0:r.map)||e===((i=u.pano1)==null?void 0:i.map))continue;e.dispose(),t.panoPicture=null}}o.indexOf(e)>=0||delete this.panoResources[e]}this.currentPano=hb(_.panoId),this.emit(`pano.moving`,$(`pano.moving`,{userAction:this.userAction,prevPano:hb(v.panoId),state:Object.assign(Object.assign(Object.assign(Object.assign({},hb(y.panoId)),{mode:this.mode}),JC(this.camera.pose)),d),options:{},progress:this.locationMotion.progress,error:null}))}ZC(u)===!1&&this.modelScene.parameter.set(u),d.offset&&this.camera.position.copy(d.offset);let x=this.camera.pose.longitude,S=this.camera.pose.latitude;this.camera.quaternion.fromArray(this.cardboard.sensor.getOrientation()),this.camera.computePose(),(x!==this.camera.pose.longitude||S!==this.camera.pose.latitude)&&(this.cameraMotion.set(pl(this.camera.pose,[`longitude`,`latitude`]),0).catch(q),this.emit(`camera.update`,$(`camera.update`,{userAction:!0,state:Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),JC(this.camera.pose))}))),this.works.getObserver(this.currentPano);let C=this.works.getObserver(g.panoId),w=this.works.getObserver(_.panoId),T=new Map;if(C)for(let e of C.accessibleNodes){let t=C.work.observers[e];if(t){let e=mb({panoIndex:t.panoIndex,workCode:t.work.workCode});T.set(e,t)}}if(w)for(let e of w.accessibleNodes){let t=w.work.observers[e];if(t){let e=mb({panoIndex:t.panoIndex,workCode:t.work.workCode});T.set(e,t)}}if(this.panoMeshes.forEach((e,t)=>{let n=T.get(t);n?(e.position.copy(n.position).applyMatrix4(n.work.transform),T.delete(t)):(this.helper.remove(e),e.dispose(),this.panoMeshes.delete(t))}),T.forEach((e,t)=>{let n=new ME;n.position.copy(e.position).applyMatrix4(e.work.transform),e.position.distanceTo(e.standingPosition)>this.aerialObserverMinHeight?n.scale.setScalar(15):n.scale.setScalar(1),this.panoMeshes.set(t,n),this.helper.add(n),T.delete(t)}),this.camera.pose.distance>.1||b?this.panoMeshes.forEach((n,r)=>{n.setOpacity(0),n.updateTime&&n.updateTime(e,t),n.visible=!1}):this.panoMeshes.forEach((e,t)=>{let n=hb(t),r=this.works.getObserver(n);if(!r)return;if(!r.loadable&&!r.active){e.setOpacity(0);return}let i=e.position.clone().setY(this.camera.position.y).distanceTo(this.camera.position);i<.05?e.setOpacity(0):e.setOpacity(U(1.5/i,0,1)),gb(this.currentPano,n)&&e.setOpacity(0),e.lookAt(this.camera.position)}),this.locationMotion.ended){let n=this.intersect(e);this.panoMeshes.forEach((r,i)=>{r.setCurrent(r===n),r.updateTime&&r.updateTime(e,t)})}{let e=(a=this.modelScene.parameter.progress)==null?1:a,t=Math.round(e),n=this.modelScene.parameter.pano0,r=this.modelScene.parameter.pano1,i=t===0?n:r,s;if(i&&(s=this.works.getObserver(i.panoId),s||(s=this.panoPictureObserverMap.get(i))),this.tiling.appearDuration=this.tileAppearDuration,this.tiling.maxRequest=e<(ou()?.6:.99)?0:this.tileMaxRequest,this.tiling.imageOptions=this.imageOptions,!s||!i||this.tileLevelForFov===!1||this.camera.perspToOrtho.x>0){this.tiling.setObserver(null);let e={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:null,panoGainmap:void 0,panoMatrix:new l.Matrix4,panoZoom:1,minLevel:0,level:0};this.tiling.update(e),this.modelScene.parameter.set(`refinedScreen`,null)}else{let e=Zl(i.mapSize),a=e+1,c=new l.Vector2().copy(this.camera.resolution).multiplyScalar(this.camera.pixelRatio),u=Math.floor(this.tileLevelForFov(this.camera.fov,c)),d=u>e?u:0;this.tiling.setObserver(s);let f={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:i.map,panoGainmap:i.gainmap,panoMatrix:i.matrix,panoZoom:i.zoom,minLevel:a,level:d,useHDR:this.modelScene.parameter.useHDR,maxDisplayBoost:this.modelScene.parameter.maxDisplayBoost},p=this.tiling.update(f),m={map:this.tiling.renderTarget.texture,matrixInverse:this.tiling.camera.matrixWorldInverse,projectionMatrix:this.tiling.camera.projectionMatrix,pano:t,opacity:(n==null?void 0:n.panoId)===(r==null?void 0:r.panoId)?1:bh(Math.abs(((o=this.modelScene.parameter.progress)==null?0:o)-.5)*2)},h=this.modelScene.parameter.refinedScreen;(p||m.pano!==(h==null?void 0:h.pano)||m.opacity!==(h==null?void 0:h.opacity))&&this.modelScene.parameter.set(`refinedScreen`,m)}}this.panoVideo.object.position.copy(this.camera.position),this.panoVideo.updateTime(e);{let e=_.effect,{pano0:t,pano1:n}=this.modelScene.parameter;if(t&&n&&t!==n&&(e===`fly`||e===`model`)&&this.flyEffectUseDepthBuffer){if(((s=this.modelScene.parameter.pano0Depth)==null?void 0:s.panoId)!==t.panoId||((c=this.modelScene.parameter.pano1Depth)==null?void 0:c.panoId)!==n.panoId){this.pano0DepthCubeRenderTarget?this.pano0DepthCubeRenderTarget.width!==512&&this.pano0DepthCubeRenderTarget.setSize(512,512):this.pano0DepthCubeRenderTarget=new l.CubeRenderTarget(512,{minFilter:l.NearestFilter,magFilter:l.NearestFilter,generateMipmaps:!1}),this.pano1DepthCubeRenderTarget?this.pano1DepthCubeRenderTarget.width!==512&&this.pano1DepthCubeRenderTarget.setSize(512,512):this.pano1DepthCubeRenderTarget=new l.CubeRenderTarget(512,{minFilter:l.NearestFilter,magFilter:l.NearestFilter,generateMipmaps:!1});let e=new l.CubeCamera(this.camera.near,this.camera.far,this.pano0DepthCubeRenderTarget);e.matrix.copy(t.matrix),e.matrixWorld.copy(e.matrix),e.matrixAutoUpdate=!1,FT(this.renderer,this.modelScene,e,500);let r=new l.CubeCamera(this.camera.near,this.camera.far,this.pano1DepthCubeRenderTarget);r.matrix.copy(n.matrix),r.matrixWorld.copy(r.matrix),r.matrixAutoUpdate=!1,FT(this.renderer,this.modelScene,r,500),this.modelScene.parameter.set({pano0Depth:{panoId:t.panoId,map:this.pano0DepthCubeRenderTarget.texture,mapSize:this.pano0DepthCubeRenderTarget.width,maxDepth:500},pano1Depth:{panoId:n.panoId,map:this.pano1DepthCubeRenderTarget.texture,mapSize:this.pano1DepthCubeRenderTarget.width,maxDepth:500}})}}else this.modelScene.parameter.set({pano0Depth:null,pano1Depth:null}),this.flyEffectUseDepthBuffer||(this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0))}}render(){return this.renderer.setRenderTarget(null),this.renderer.setScissorTest(!1),this.cardboard.render(this.scene,this.camera),!0}setCamera(e={}){}destroyHelper(){}updateHelperElementSize(){if(!this.helperElement)return;let e=new l.Vector2(this.element.offsetWidth,this.element.offsetHeight),t=e.x*this.viewport.left,n=e.y*(1-this.viewport.bottom-this.viewport.height),r=e.x*this.viewport.width,i=e.y*this.viewport.height;this.helperElement.style.marginLeft!==t+`px`&&(this.helperElement.style.marginLeft=t+`px`),this.helperElement.style.marginTop!==n+`px`&&(this.helperElement.style.marginTop=n+`px`),this.helperElement.style.width!==r+`px`&&(this.helperElement.style.width=r+`px`),this.helperElement.style.height!==i+`px`&&(this.helperElement.style.height=i+`px`)}intersect(e){var t,n;if(this.locationMotion.ended===!1){this.intersectMesh.visible=!1,this.activePanoMesh=void 0,this.activeTime=void 0;return}if(this.activePanoMesh&&this.activeTime&&e-this.activeTime>NE){let e=this.activePanoMesh,t=null;return this.panoMeshes.forEach((n,r)=>{n===e&&(t=r)}),t!==null&&this.moveToPano(hb(t),{},!0),this.activePanoMesh=void 0,this.activeTime=void 0,e}let r=this.camera.getDirection(new l.Vector3),i=new l.Raycaster(this.camera.position,r);i.params.Points={threshold:.1},i.firstHitOnly=!0,i.floorIndex=-1;let a,o=[],s=this.works.getObserver(this.currentPano),c=s?s.accessibleNodes.map(e=>mb({panoIndex:e,workCode:s.work.workCode})):[];for(let e of c){let r=this.panoMeshes.get(e);if(r){let[e]=i.intersectObject((t=r.hitTestMesh)==null?r:t,!0);if(e){let t=(n=s==null?void 0:s.floorIndex)==null?0:n;o.push({panoMesh:r,intersection:Object.assign({floorIndex:t,floor:t},e)})}}}let[u]=o.sort((e,t)=>e.intersection.distance-t.intersection.distance);u?(a=u.intersection,this.activePanoMesh!==u.panoMesh&&(this.activePanoMesh=u.panoMesh,this.activeTime=e),this.intersectMesh.position.copy(u.panoMesh.position),this.intersectMesh.lookAt(this.camera.position)):(this.activePanoMesh=void 0,this.activeTime=void 0),a||(a=this.modelScene.intersectRaycaster(i)[0]);let d=$(`intersect.update`,{raycaster:i,intersection:a==null?null:a,object:this.intersectMesh});if(this.emit(`intersect.update`,d),d.defaultPrevented){this.hideIntersectMesh();return}if(a&&a.face){let e=a.face.normal,t=new l.Quaternion;t.setFromUnitVectors(new l.Vector3(0,0,1),e),this.intersectMesh.quaternion.copy(t);let n=a.point.clone();this.intersectMesh.position.copy(n),u?this.intersectMesh.visible=!1:this.intersectMesh.visible=!0}else this.intersectMesh.visible=!1;return u==null?void 0:u.panoMesh}onPanGesture(){}onTapGesture(){}onPinchGesture(){}onMouseMove(){}onMouseOut(){}},IE=.01,LE=`183`,RE={isXRRenderTarget:!0,_hasExternalTextures:!1,_autoAllocateDepthBuffer:!0,_isOpaqueFramebuffer:!0};function zE(e,t,n,r){let i=new l.RenderTarget(t,n,{format:l.RGBAFormat,type:l.UnsignedByteType,colorSpace:e.outputColorSpace,stencilBuffer:e.stencil===!0,resolveDepthBuffer:r,resolveStencilBuffer:r});return Object.assign(i,RE),i}var BE=class{constructor(e,t={}){var n;this.resources=null,this.warnedRevision=!1,this._outputBufferType=null,this.clearColorScratch=new l.Color,this.viewportScratch=new l.Vector4,this.renderer=e,this.atlasSamples=(n=t.atlasSamples)==null?0:n}get outputBufferType(){return this._outputBufferType}verify(){let e=this.renderer,t=[],n=e.backend;n?(n.isWebGLBackend!==!0&&t.push(`backend.isWebGLBackend`),typeof n.setXRTarget!=`function`&&t.push(`backend.setXRTarget`)):t.push(`renderer.backend`),typeof e.setOutputRenderTarget!=`function`&&t.push(`renderer.setOutputRenderTarget`),typeof e.getOutputRenderTarget!=`function`&&t.push(`renderer.getOutputRenderTarget`);let r=zE(this.renderer,1,1,!0);try{let e=r;for(let[n,r]of Object.entries(RE))e[n]!==r&&t.push(`xrRT.${n}(期望 ${String(r)},实际 ${String(e[n])})`);for(let n of[`multiview`,`resolveDepthBuffer`])e[n]===void 0&&t.push(`xrRT.${n}`)}finally{r.dispose()}if(t.length>0)throw Error(`[RenderTargetBridge] three 内部 API 校验失败(THREE.REVISION=${l.REVISION}),缺失或不符:${t.join(`、`)}`);l.REVISION!==LE&&!this.warnedRevision&&(this.warnedRevision=!0,console.warn(`[RenderTargetBridge] THREE.REVISION=${l.REVISION},XR 标志位语义仅在 r${LE} 复核过,继续运行`))}verifyCameras(e){let t=this.renderer.coordinateSystem,n=e.map((e,n)=>e.coordinateSystem===t?null:n).filter(e=>e!==null);if(n.length>0)throw Error(`[RenderTargetBridge] Eye_Camera[${n.join(`,`)}] 的 coordinateSystem 与 renderer(${t})不一致,three 会改写其投影矩阵(THREE.REVISION=${l.REVISION})`)}init(e){var t,n,r;this.build(e),this._outputBufferType=(r=(n=(t=this.renderer).getOutputBufferType)==null?void 0:n.call(t))==null?null:r}renderFrame(e,t,n){let r=this.renderer,i=r,a=i.backend,o={autoClear:r.autoClear,autoClearColor:r.autoClearColor,autoClearDepth:r.autoClearDepth,autoClearStencil:r.autoClearStencil,viewport:r.getViewport(this.viewportScratch).clone(),scissorTest:r.getScissorTest(),clearAlpha:r.getClearAlpha(),output:i.getOutputRenderTarget(),rt:r.getRenderTarget(),clearColor:i.getClearColor(this.clearColorScratch).clone()};try{let{atlas:s,xrRT:c,quad:u,width:d,height:f}=this.syncResources(e);r.setScissorTest(!1),r.setRenderTarget(s);let p=t.background;r.setClearColor(p instanceof l.Color?p:o.clearColor,1),r.clear(!0,!0,!1),r.autoClear=!1,r.autoClearColor=!1,r.autoClearDepth=!1,r.autoClearStencil=!1;for(let e of n){let n=e.viewport;s.viewport.set(n.x,f-n.height-n.y,n.width,n.height),r.render(t,e.camera)}r.setScissorTest(!1),a.setXRTarget(e.framebuffer),r.setRenderTarget(null),i.setOutputRenderTarget(c);let m=r.getPixelRatio();r.setViewport(0,0,(d+IE)/m,(f+IE)/m),u.render(r)}finally{i.setOutputRenderTarget(o.output),a.setXRTarget(null),r.setRenderTarget(o.rt),r.autoClear=o.autoClear,r.autoClearColor=o.autoClearColor,r.autoClearDepth=o.autoClearDepth,r.autoClearStencil=o.autoClearStencil,r.setScissorTest(o.scissorTest),r.setViewport(o.viewport),r.setClearColor(o.clearColor,o.clearAlpha)}}dispose(){var e,t,n;if(!this.resources)return;this.releaseResources();let r=this.renderer;(t=(e=r.backend)==null?void 0:e.setXRTarget)==null||t.call(e,null),(n=r.setOutputRenderTarget)==null||n.call(r,null),this._outputBufferType=null}syncResources(e){let t=this.resources;return t&&t.layer===e&&t.width===e.framebufferWidth&&t.height===e.framebufferHeight?t:this.build(e)}build(e){this.releaseResources();let t=e.framebufferWidth,n=e.framebufferHeight,r=new l.RenderTarget(t,n,{format:l.RGBAFormat,type:this.supportsHalfFloat()?l.HalfFloatType:l.UnsignedByteType,colorSpace:l.LinearSRGBColorSpace,depthBuffer:!0,stencilBuffer:!1,samples:this.atlasSamples,generateMipmaps:!1,minFilter:l.LinearFilter,magFilter:l.LinearFilter}),i=zE(this.renderer,t,n,e.ignoreDepthValues===!1),a=new l.NodeMaterial;a.fragmentNode=(0,p.vec4)((0,p.texture)(r.texture).rgb,1),a.depthTest=!1,a.depthWrite=!1;let o=new l.QuadMesh(a);return this.resources={layer:e,width:t,height:n,atlas:r,xrRT:i,quad:o},this.resources}releaseResources(){let e=this.resources;e&&(this.resources=null,e.atlas.dispose(),e.xrRT.dispose(),e.quad.material.dispose())}supportsHalfFloat(){var e;let t=(e=this.renderer.backend)==null?void 0:e.gl;return t?!!t.getExtension(`EXT_color_buffer_float`)||!!t.getExtension(`EXT_color_buffer_half_float`):!1}},VE=class{constructor(){this.root=new l.Group,this._entries=new Map,this._dir=new l.Vector3}add(e){for(let t of e){if(this._entries.has(t))continue;let e=new l.Object3D,n=new l.Object3D;e.visible=!1,n.visible=!1,this.root.add(e,n),this._entries.set(t,{source:t,targetRay:e,grip:n,rayFrame:-1})}}remove(e){let t=[];for(let n of e){let e=this._entries.get(n);e&&(this._entries.delete(n),this.root.remove(e.targetRay,e.grip),t.push(e))}return t}update(e,t,n,r){for(let i of this._entries.values()){let{source:a,targetRay:o,grip:s}=i,c=e.getPose(a.targetRaySpace,t),l=a.gripSpace?e.getPose(a.gripSpace,t):null;c?(this._applyPose(o,c,n),i.rayFrame=r):o.visible=!1,c&&l?this._applyPose(s,l,n):s.visible=!1}}hideAll(){for(let{targetRay:e,grip:t}of this._entries.values())e.visible=!1,t.visible=!1}fill(e,t,n){let r=this._entries.get(e);if(!r||r.rayFrame!==n||!r.targetRay.visible)return!1;let{matrixWorld:i}=r.targetRay;return t.ray.origin.setFromMatrixPosition(i),t.ray.direction.copy(this._dir.set(0,0,-1).transformDirection(i)),!0}clear(){for(let{targetRay:e,grip:t}of this._entries.values())this.root.remove(e,t);this._entries.clear()}entries(){return this._entries}_applyPose(e,t,n){let{position:r,orientation:i}=t.transform;e.position.set(n.x+r.x,n.y+r.y,n.z+r.z),e.quaternion.set(i.x,i.y,i.z,i.w),e.visible=!0,e.updateMatrixWorld(!0)}},HE=5e3;function UE(e){let t=[...new Set([e,`local`,`viewer`])];return t.slice(0,t.indexOf(`viewer`)+1)}function WE(){let e=Error(`会话在参考空间解析前已结束`);return e.aborted=!0,e}function GE(e){return e.map(e=>`${e.type}(${e.reason})`).join(`, `)}function KE(e,t){return(0,u.__awaiter)(this,arguments,void 0,function*(e,t,n={}){var r,i,a;let o=(r=n.timeoutMs)==null?HE:r,s=n.isAborted,c=(i=n.schedule)==null?((e,t)=>setTimeout(e,t)):i,l=(a=n.clear)==null?(e=>clearTimeout(e)):a,u=UE(t),d=[];for(let n of u){let r=yield qE(e,n,o,c,l);if(s!=null&&s())throw WE();if(r.ok)return n!==t&&console.warn(`[XR] 参考空间降级:期望 ${t},实际采用 ${n};失败:${GE(d)}`),{space:r.space,type:n,failures:d};d.push({type:n,reason:r.reason})}let f=Error(`所有参考空间均不可用(期望 ${t}):${GE(d)}`);throw f.attempts=d,f})}function qE(e,t,n,r,i){return(0,u.__awaiter)(this,void 0,void 0,function*(){let a,o=!1,s=new Promise(n=>{let r=e=>{o||n({ok:!0,space:e})},i=()=>{o||n({ok:!1,reason:`rejected`})};try{e.requestReferenceSpace(t).then(r,i)}catch(e){i()}}),c=new Promise(e=>{a=r(()=>e({ok:!1,reason:`timeout`}),n)});try{return yield Promise.race([s,c])}finally{o=!0,i(a)}})}var JE=5e3,YE=`会话在进入过程中已结束`,XE=class{static isBackendXRCapable(e){let t=e.backend;return(t==null?void 0:t.isWebGPUBackend)!==!0}static isBrowserXRCapable(){return typeof navigator<`u`&&`xr`in navigator}get isPresenting(){return this._isPresenting}get session(){return this._session}get frame(){return this._frame}get referenceSpaceType(){return this._referenceSpaceType}constructor(e,t,n){var r;this.inputs=new VE,this._isPresenting=!1,this._session=null,this._frame=null,this._referenceSpaceType=null,this.refSpace=null,this.layer=null,this.entering=!1,this.entered=!1,this.endedDuringEnter=!1,this.snapshot=null,this.listeners=[],this.firstFrameArrived=!1,this.firstFrameWaiter=null,this.frameNo=0,this.submittedNear=NaN,this.submittedFar=NaN,this.offset=new l.Vector3,this.info={time:0,hasPose:!1,headOrientation:new l.Quaternion,headLocal:new l.Vector3,views:[]},this.viewPool=[{eye:0,viewport:new l.Vector4},{eye:1,viewport:new l.Vector4}],this.frameViews=[],this.bridgeEyes=[],this.tmpViewport=new l.Vector4,this.tmpSize=new l.Vector2,this.onSessionEndEvent=()=>{var e;if(this._session){if(!this.entered){this.endedDuringEnter=!0,(e=this.firstFrameWaiter)==null||e.reject(Error(YE));return}this.teardown()}},this.onInputSourcesChangeEvent=e=>{var t,n;if(!this._session)return;let{added:r,removed:i}=e;this.inputs.add(r),this.inputs.remove(i),(n=(t=this.callbacks).onInputSourcesChange)==null||n.call(t,r,i)},this.onSelectEvent=e=>{var t,n;(n=(t=this.callbacks).onSelect)==null||n.call(t,e.inputSource)},this.onReferenceSpaceReset=()=>{},this.renderer=e,this.options=t==null?{}:t,this.callbacks=n,this.bridge=new BE(e,{atlasSamples:(r=this.options.atlasSamples)==null?0:r}),this.device=ZS(),this.profile=tC(this.device,this.options.deviceProfile,e=>{console.warn(`[XR] Device_Profile 字段 ${e} 非法,已回落默认值`)});let i=()=>{let t=new l.PerspectiveCamera;return t.coordinateSystem=e.coordinateSystem,t};this.eyeCameras=[i(),i()],this.info.views=this.frameViews}enter(e){return(0,u.__awaiter)(this,void 0,void 0,function*(){var t,n;if(!(this.entering||this.entered)){this.entering=!0,this.endedDuringEnter=!1,this.firstFrameArrived=!1,this._session=e;try{this.snapshot=this.captureRendererState(),this.bridge.verify(),this.bridge.verifyCameras(this.eyeCameras);let r=(t=this.renderer.backend)==null?void 0:t.gl;if(!r)throw Error(`[XRManager] 取不到 WebGL2 上下文(renderer.backend.gl),无法创建 XRWebGLLayer`);this.listen(e,`end`,this.onSessionEndEvent),this.listen(e,`inputsourceschange`,this.onInputSourcesChangeEvent),this.listen(e,`select`,this.onSelectEvent),yield r.makeXRCompatible(),this.throwIfEnded();let i=r.getContextAttributes(),a=new XRWebGLLayer(e,r,{alpha:!1,framebufferScaleFactor:1,antialias:i==null?void 0:i.antialias,depth:i==null?void 0:i.depth,stencil:i==null?void 0:i.stencil});this.layer=a;let o=this.options.foveation;o!==void 0&&`fixedFoveation`in a&&(a.fixedFoveation=U(o,0,1)),e.updateRenderState({baseLayer:a}),this.submittedNear=e.renderState.depthNear,this.submittedFar=e.renderState.depthFar,this.bridge.init(a);let s=yield KE(e,(n=this.options.referenceSpaceType)==null?`local-floor`:n,{isAborted:()=>this.endedDuringEnter});this.throwIfEnded(),this.refSpace=s.space,this._referenceSpaceType=s.type,this.listen(s.space,`reset`,this.onReferenceSpaceReset),nu.shared.setContext(e),yield this.waitFirstFrame(),this.throwIfEnded(),this.syncExistingInputSources(e),this.entering=!1,this.entered=!0,this._isPresenting=!0;try{this.callbacks.onSessionStart(e,this.device)}catch(e){console.error(`[XR] onSessionStart 回调抛错`,e)}}catch(e){throw this.rollback(),this.endedDuringEnter?Error(YE):e}}})}exit(){return(0,u.__awaiter)(this,void 0,void 0,function*(){let e=this._session;if(!(!this.entered||!e))try{yield e.end()}catch(t){this._session===e&&this.teardown()}})}dispose(){var e;let t=this._session;if(this.entering){this.endedDuringEnter=!0,(e=this.firstFrameWaiter)==null||e.reject(Error(YE)),t&&this.endQuietly(t);return}this.entered&&t&&(this.teardown(),this.endQuietly(t))}beginFrame(e,t,n,r,i){let a=this.info;a.time=t;let o=this._session,s=this.refSpace,c=this.layer;if(!o||!s||!c)return this.markNoPose(),a;this._frame=e,this.frameNo++,this.notifyFirstFrame();let l=e.getViewerPose(s),u=l==null?void 0:l.views,d=u?u.length:0;if(!l||!u||d!==1&&d!==2||!this.collectViews(c,u))return this.markNoPose(),this.inputs.hideAll(),a;let f=0,p=0,m=0;for(let e=0;e<d;e++){let t=u[e].transform.position;f+=t.x,p+=t.y,m+=t.z}a.headLocal.set(f/d,p/d,m/d);let h=l.transform.orientation;a.headOrientation.set(h.x,h.y,h.z,h.w),a.hasPose=!0,this.offset.copy(n).sub(a.headLocal);for(let e=0;e<d;e++){let t=u[e],a=this.eyeCameras[this.frameViews[e].eye];a.projectionMatrix.fromArray(t.projectionMatrix),a.projectionMatrixInverse.copy(a.projectionMatrix).invert();let o=t.transform.orientation;a.position.copy(n),a.quaternion.set(o.x,o.y,o.z,o.w),a.near=r,a.far=i,a.updateMatrixWorld(!0)}return this.syncDepthRange(o,r,i),this.inputs.update(e,s,this.offset,this.frameNo),a}renderEyes(e){var t;let n=this.layer;if(!n||!this._session||!this.info.hasPose)return!1;let r=this.bridgeEyes,i=this.frameViews;r.length=i.length;for(let e=0;e<i.length;e++){let n=(t=r[e])==null?r[e]={camera:this.eyeCameras[0],viewport:i[e].viewport}:t;n.camera=this.eyeCameras[i[e].eye],n.viewport=i[e].viewport}return this.bridge.renderFrame(n,e,r),!0}fillRaycaster(e,t){return this.inputs.fill(e,t,this.frameNo)}markNoPose(){this.info.hasPose=!1,this.frameViews.length=0}collectViews(e,t){let n=0;this.frameViews.length=0;for(let r=0;r<t.length;r++){let i=+(t[r].eye===`right`);n&1<<i&&(i=+(i===0)),n|=1<<i;let a=e.getViewport(t[r]);if(!a)return this.frameViews.length=0,!1;let o=this.viewPool[r];o.eye=i,o.viewport.set(a.x,a.y,a.width,a.height),this.frameViews.push(o)}return!0}syncDepthRange(e,t,n){t===this.submittedNear&&n===this.submittedFar||Number.isFinite(t)&&Number.isFinite(n)&&t>0&&n>t&&(e.updateRenderState({depthNear:t,depthFar:n}),this.submittedNear=t,this.submittedFar=n)}notifyFirstFrame(){var e;this.firstFrameArrived||(this.firstFrameArrived=!0,(e=this.firstFrameWaiter)==null||e.resolve())}throwIfEnded(){if(this.endedDuringEnter)throw Error(YE)}waitFirstFrame(){var e;if(this.firstFrameArrived)return Promise.resolve();let t=(e=this.options.firstFrameTimeoutMs)==null?JE:e;return new Promise((e,n)=>{let r=setTimeout(()=>{this.firstFrameWaiter=null,n(Error(`等待首帧超时(${t}ms 内未收到首个 XRFrame)`))},t);this.firstFrameWaiter={resolve:()=>{clearTimeout(r),this.firstFrameWaiter=null,e()},reject:e=>{clearTimeout(r),this.firstFrameWaiter=null,n(e)}}})}syncExistingInputSources(e){var t,n,r;let i=this.inputs.entries(),a=Array.from((t=e.inputSources)==null?[]:t).filter(e=>!i.has(e));a.length!==0&&(this.inputs.add(a),(r=(n=this.callbacks).onInputSourcesChange)==null||r.call(n,a,[]))}listen(e,t,n){e.addEventListener(t,n),this.listeners.push({target:e,type:t,handler:n})}removeListeners(){for(let{target:e,type:t,handler:n}of this.listeners)e.removeEventListener(t,n);this.listeners.length=0}captureRendererState(){let e=this.renderer;return{viewport:e.getViewport(new l.Vector4).clone(),autoClear:e.autoClear,autoClearColor:e.autoClearColor,autoClearDepth:e.autoClearDepth,autoClearStencil:e.autoClearStencil,pixelRatio:e.getPixelRatio(),size:e.getSize(new l.Vector2).clone()}}restoreRendererState(){let e=this.snapshot;if(!e)return;this.snapshot=null;let t=this.renderer;t.autoClear=e.autoClear,t.autoClearColor=e.autoClearColor,t.autoClearDepth=e.autoClearDepth,t.autoClearStencil=e.autoClearStencil,t.getPixelRatio()!==e.pixelRatio&&t.setPixelRatio(e.pixelRatio),t.getSize(this.tmpSize).equals(e.size)||t.setSize(e.size.x,e.size.y),t.getViewport(this.tmpViewport).equals(e.viewport)||t.setViewport(e.viewport)}releaseFrameSource(e){let t=nu.shared;e&&t.getContext()===e&&t.setContext(null)}clearReferences(){this._session=null,this._frame=null,this.refSpace=null,this._referenceSpaceType=null,this.layer=null,this.markNoPose(),this.frameNo=0,this.firstFrameArrived=!1,this.submittedNear=NaN,this.submittedFar=NaN}rollback(){var e;let t=this._session;(e=this.firstFrameWaiter)==null||e.reject(Error(YE)),this.removeListeners(),this.inputs.clear(),this.bridge.dispose(),this.releaseFrameSource(t),this.restoreRendererState(),this.clearReferences(),this._isPresenting=!1,this.entering=!1,this.entered=!1}teardown(){var e,t;let n=this._session;if(n){this._isPresenting=!1,this.entered=!1;try{(t=(e=this.callbacks).onSessionEnding)==null||t.call(e)}catch(e){console.error(`[XR] onSessionEnding 回调抛错`,e)}this.inputs.clear(),this.bridge.dispose(),this.removeListeners(),this.releaseFrameSource(n),this.restoreRendererState(),this.clearReferences(),this.callbacks.onSessionEnd(this.device)}}endQuietly(e){try{Promise.resolve(e.end()).catch(()=>{})}catch(e){}}},ZE={Handedness:Object.freeze({NONE:`none`,LEFT:`left`,RIGHT:`right`}),ComponentState:Object.freeze({DEFAULT:`default`,TOUCHED:`touched`,PRESSED:`pressed`}),ComponentProperty:Object.freeze({BUTTON:`button`,X_AXIS:`xAxis`,Y_AXIS:`yAxis`,STATE:`state`}),ComponentType:Object.freeze({TRIGGER:`trigger`,SQUEEZE:`squeeze`,TOUCHPAD:`touchpad`,THUMBSTICK:`thumbstick`,BUTTON:`button`}),ButtonTouchThreshold:.05,AxisTouchThreshold:.1,VisualResponseProperty:Object.freeze({TRANSFORM:`transform`,VISIBILITY:`visibility`})};function QE(e){return(0,u.__awaiter)(this,void 0,void 0,function*(){let t=yield fetch(e);if(t.ok)return t.json();throw Error(t.statusText)})}function $E(e){return(0,u.__awaiter)(this,void 0,void 0,function*(){if(!e)throw Error(`No basePath supplied`);return yield QE(`${e}/profilesList.json`)})}function eD(e,t){return(0,u.__awaiter)(this,arguments,void 0,function*(e,t,n=null,r=!0){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No basePath supplied`);let i=yield $E(t),a;if(e.profiles.some(e=>{let n=i[e];return n&&(a={profileId:e,profilePath:`${t}/${n.path}`,deprecated:!!n.deprecated}),!!a}),!a){if(!n)throw Error(`No matching profile name found`);let e=i[n];if(!e)throw Error(`No matching profile name found and default profile "${n}" missing.`);a={profileId:n,profilePath:`${t}/${e.path}`,deprecated:!!e.deprecated}}let o=yield QE(a.profilePath),s;if(r){let t;if(t=o.layouts[e.handedness],!t)throw Error(`No matching handedness, ${e.handedness}, in profile ${a.profileId}`);t.assetPath&&(s=a.profilePath.replace(`profile.json`,t.assetPath))}return{profile:o,assetPath:s}})}var tD={xAxis:0,yAxis:0,button:0,state:ZE.ComponentState.DEFAULT};function nD(e=0,t=0){let n=e,r=t;if(Math.sqrt(e*e+t*t)>1){let i=Math.atan2(t,e);n=Math.cos(i),r=Math.sin(i)}return{normalizedXAxis:n*.5+.5,normalizedYAxis:r*.5+.5}}var rD=class{constructor(e){this.componentProperty=e.componentProperty,this.states=e.states,this.valueNodeName=e.valueNodeName,this.valueNodeProperty=e.valueNodeProperty,this.valueNodeProperty===ZE.VisualResponseProperty.TRANSFORM&&(this.minNodeName=e.minNodeName,this.maxNodeName=e.maxNodeName),this.value=0,this.updateFromComponent(tD)}updateFromComponent({xAxis:e,yAxis:t,button:n,state:r}){let{normalizedXAxis:i,normalizedYAxis:a}=nD(e,t);switch(this.componentProperty){case ZE.ComponentProperty.X_AXIS:this.value=this.states.includes(r)?i:.5;break;case ZE.ComponentProperty.Y_AXIS:this.value=this.states.includes(r)?a:.5;break;case ZE.ComponentProperty.BUTTON:this.value=this.states.includes(r)?n:0;break;case ZE.ComponentProperty.STATE:this.valueNodeProperty===ZE.VisualResponseProperty.VISIBILITY?this.value=this.states.includes(r):this.value=+!!this.states.includes(r);break;default:throw Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`)}}},iD=class{constructor(e,t){if(!e||!t||!t.visualResponses||!t.gamepadIndices||Object.keys(t.gamepadIndices).length===0)throw Error(`Invalid arguments supplied`);this.id=e,this.type=t.type,this.rootNodeName=t.rootNodeName,this.touchPointNodeName=t.touchPointNodeName,this.visualResponses={},Object.keys(t.visualResponses).forEach(e=>{let n=new rD(t.visualResponses[e]);this.visualResponses[e]=n}),this.gamepadIndices=Object.assign({},t.gamepadIndices),this.values={state:ZE.ComponentState.DEFAULT,button:this.gamepadIndices.button===void 0?void 0:0,xAxis:this.gamepadIndices.xAxis===void 0?void 0:0,yAxis:this.gamepadIndices.yAxis===void 0?void 0:0}}get data(){return Object.assign({id:this.id},this.values)}updateFromGamepad(e){if(this.values.state=ZE.ComponentState.DEFAULT,this.gamepadIndices.button!==void 0&&e.buttons.length>this.gamepadIndices.button){let t=e.buttons[this.gamepadIndices.button];this.values.button=t.value,this.values.button=this.values.button<0?0:this.values.button,this.values.button=this.values.button>1?1:this.values.button,t.pressed||this.values.button===1?this.values.state=ZE.ComponentState.PRESSED:(t.touched||this.values.button>ZE.ButtonTouchThreshold)&&(this.values.state=ZE.ComponentState.TOUCHED)}this.gamepadIndices.xAxis!==void 0&&e.axes.length>this.gamepadIndices.xAxis&&(this.values.xAxis=e.axes[this.gamepadIndices.xAxis],this.values.xAxis=this.values.xAxis<-1?-1:this.values.xAxis,this.values.xAxis=this.values.xAxis>1?1:this.values.xAxis,this.values.state===ZE.ComponentState.DEFAULT&&Math.abs(this.values.xAxis)>ZE.AxisTouchThreshold&&(this.values.state=ZE.ComponentState.TOUCHED)),this.gamepadIndices.yAxis!==void 0&&e.axes.length>this.gamepadIndices.yAxis&&(this.values.yAxis=e.axes[this.gamepadIndices.yAxis],this.values.yAxis=this.values.yAxis<-1?-1:this.values.yAxis,this.values.yAxis=this.values.yAxis>1?1:this.values.yAxis,this.values.state===ZE.ComponentState.DEFAULT&&Math.abs(this.values.yAxis)>ZE.AxisTouchThreshold&&(this.values.state=ZE.ComponentState.TOUCHED)),Object.values(this.visualResponses).forEach(e=>{e.updateFromComponent(this.values)})}},aD=class{constructor(e,t,n){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No profile supplied`);this.xrInputSource=e,this.assetUrl=n,this.id=t.profileId,this.layoutDescription=t.layouts[e.handedness],this.components={},Object.keys(this.layoutDescription.components).forEach(e=>{let t=this.layoutDescription.components[e];this.components[e]=new iD(e,t)}),this.updateFromGamepad()}get gripSpace(){return this.xrInputSource.gripSpace}get targetRaySpace(){return this.xrInputSource.targetRaySpace}get data(){let e=[];return Object.values(this.components).forEach(t=>{e.push(t.data)}),e}updateFromGamepad(){Object.values(this.components).forEach(e=>{e.updateFromGamepad(this.xrInputSource.gamepad)})}},oD=`https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles`,sD=`generic-trigger`,cD=class extends l.Object3D{constructor(){super(),this.motionController=null,this.envMap=null}setEnvironmentMap(e){return this.envMap==e?this:(this.envMap=e,this.traverse(e=>{e instanceof l.Mesh&&e.isMesh&&(e.material.envMap=this.envMap,e.material.needsUpdate=!0)}),this)}updateMatrixWorld(e){super.updateMatrixWorld(e),this.motionController&&(this.motionController.updateFromGamepad(),Object.values(this.motionController.components).forEach(e=>{Object.values(e.visualResponses).forEach(e=>{let{valueNode:t,minNode:n,maxNode:r,value:i,valueNodeProperty:a}=e;t&&(a===ZE.VisualResponseProperty.VISIBILITY?t.visible=i:a===ZE.VisualResponseProperty.TRANSFORM&&(t.quaternion.copy(n.quaternion).slerp(r.quaternion,i),t.position.lerpVectors(n.position,r.position,i)))})}))}};function lD(e,t){Object.values(e.components).forEach(e=>{let{type:n,touchPointNodeName:r,visualResponses:i}=e;if(n===ZE.ComponentType.TOUCHPAD)if(e.touchPointNode=t.getObjectByName(r),e.touchPointNode){let t=new l.Mesh(new l.SphereGeometry(.001),new l.MeshBasicMaterial({color:255}));e.touchPointNode.add(t)}else console.warn(`Could not find touch dot, ${e.touchPointNodeName}, in touchpad component ${e.id}`);Object.values(i).forEach(e=>{let{valueNodeName:n,minNodeName:r,maxNodeName:i,valueNodeProperty:a}=e;if(a===ZE.VisualResponseProperty.TRANSFORM){if(e.minNode=t.getObjectByName(r),e.maxNode=t.getObjectByName(i),!e.minNode){console.warn(`Could not find ${r} in the model`);return}if(!e.maxNode){console.warn(`Could not find ${i} in the model`);return}}e.valueNode=t.getObjectByName(n),e.valueNode||console.warn(`Could not find ${n} in the model`)})})}function uD(e,t){lD(e.motionController,t),e.envMap&&t.traverse(t=>{t instanceof l.Mesh&&t.isMesh&&(t.material.envMap=e.envMap,t.material.needsUpdate=!0)}),e.add(t)}var dD=class{constructor(e=null){this.gltfLoader=e,this.path=oD,this._assetCache={}}createControllerModel(e){let t=new cD,n=null;return e.addEventListener(`connected`,e=>{let r=e.data;r.targetRayMode!==`tracked-pointer`||!r.gamepad||eD(r,this.path,sD).then(({profile:e,assetPath:i})=>{t.motionController=new aD(r,e,i);let a=this._assetCache[t.motionController.assetUrl];if(a)n=a.scene.clone(),uD(t,n);else{if(!this.gltfLoader)throw Error(`GLTFLoader not set.`);this.gltfLoader.load(t.motionController.assetUrl,e=>{this._assetCache[t.motionController.assetUrl]=e,n=e.scene.clone(),uD(t,n)})}}).catch(e=>{console.warn(e)})}),e.addEventListener(`disconnected`,()=>{t.motionController=null,t.remove(n),n=null}),t}},fD=class{constructor(){this.states=new Map}sample(e,t,n,r){let i=this.states.get(e),a=i==null?void 0:i.get(t);if(!a){if(!n)return[];let a=i;return a||(a=new Map,this.states.set(e,a)),a.set(t,{downAt:r,pressFired:!1}),[{type:`buttonDown`,name:t,source:e,time:r,duration:0}]}let o=r-a.downAt,s=o>=300;if(n)return s&&!a.pressFired?(a.pressFired=!0,[{type:`press`,name:t,source:e,time:r,duration:o}]):[];this.deleteState(e,t);let c=[];return a.pressFired?c.push({type:`buttonUp`,name:t,source:e,time:r,duration:o}):s?(c.push({type:`press`,name:t,source:e,time:r,duration:o}),c.push({type:`buttonUp`,name:t,source:e,time:r,duration:o})):(c.push({type:`buttonUp`,name:t,source:e,time:r,duration:o}),c.push({type:`tap`,name:t,source:e,time:r,duration:o})),c}removeSource(e,t){let n=this.states.get(e);if(!n)return[];let r=[];for(let[i,a]of n)r.push({type:`buttonUp`,name:i,source:e,time:t,duration:t-a.downAt});return this.states.delete(e),r}reset(e){let t=[];for(let[n,r]of this.states)for(let[i,a]of r)t.push({type:`buttonUp`,name:i,source:n,time:e,duration:e-a.downAt});return this.states.clear(),t}deleteState(e,t){let n=this.states.get(e);n&&(n.delete(t),n.size===0&&this.states.delete(e))}},pD=Object.assign(Object.assign({},ml(VT,[`maxLatitude`,`minLatitude`])),{referenceSpaceType:`local-floor`,foveation:1,showControllerModel:!0,showPointerRay:!0,deviceProfile:{}}),mD=5,hD=1e-4,gD=1500;function _D(){return{load(e,t){fl.ajax(e,{responseType:`arraybuffer`}).then(t=>{var n;return bp(t.body,{resourcePath:e.slice(0,e.lastIndexOf(`/`)+1),search:(n=e.split(`?`)[1])==null?``:n,fetcher:fl})}).then(e=>t(e)).catch(t=>{console.warn(`[XRPanorama] 手柄模型 glTF 加载失败,跳过模型挂载:`,e,t)})}}}var vD=class e extends HT{static parseArgs(t){if(t instanceof e)return t;let n=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2});return super.parseArgs(n)}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`XRPanorama`})}constructor(t){var n,r,i,a,o;let s=e.parseArgs(t);super(s),this.controllerRayFilled={left:!1,right:!1},this.controllerModelFactory=null,this.buttonStateMachine=new fD,this.inputVisuals=new Map,this.inputsDirty=!1,this.walkedThisFrame=!1,this.lastFrameTime=0,this.walkSources={left:null,right:null},this.gazeRayPool=null,this.mode=`XRPanorama`;let c=pD,l=(n=t.referenceSpaceType)==null?c.referenceSpaceType:n,u=(r=t.foveation)==null?c.foveation:r;this.showControllerModel=(i=t.showControllerModel)==null?c.showControllerModel:i,this.showPointerRay=(a=t.showPointerRay)==null?c.showPointerRay:a,this.controllerRaycasters={left:this.createPickingRaycaster(),right:this.createPickingRaycaster()},this.gazeRaycaster=null,this.xrManager=new XE(this.renderer,{referenceSpaceType:l,foveation:u,deviceProfile:(o=t.deviceProfile)==null?c.deviceProfile:o},{onSessionStart:(e,t)=>{this.emit(`xr.session.start`,$(`xr.session.start`,{session:e,machineType:nC(t)}))},onSessionEnd:e=>{this.emit(`xr.session.end`,$(`xr.session.end`,{session:null,machineType:nC(e)}))},onSessionEnding:()=>{this.resetButtonStates(),this.clearInputVisuals()},onSelect:e=>this.onXRSelect(e),onInputSourcesChange:(e,t)=>{for(let e of t){this.removeInputVisual(e);for(let t of this.buttonStateMachine.removeSource(e,this.lastFrameTime))this.dispatchButtonEvent(t)}for(let t of e)this.syncInputVisual(t)}}),this.buttonMaps={left:this.createButtonMap(`left`),right:this.createButtonMap(`right`)},this.scene.add(this.xrManager.inputs.root);let d=nu.shared.getContext();(d?this.xrManager.enter(d):Promise.reject(Error(`[XR] 缺少 XRSession:请经 Five.changeMode 进入 XRPanorama`))).catch(e=>{console.error(`[XR] 进入失败`,e),this.emit(`error`,e instanceof Error?e:Error(String(e)))})}updateConfiguration(e){let t=super.updateConfiguration(Object.assign(Object.assign({},e),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2}));return e.showControllerModel!==void 0&&e.showControllerModel!==this.showControllerModel&&(this.showControllerModel=e.showControllerModel,this.inputsDirty=!0),e.showPointerRay!==void 0&&e.showPointerRay!==this.showPointerRay&&(this.showPointerRay=e.showPointerRay,this.inputsDirty=!0),t}updateTime(e,t,...n){var r,i;if(this.destroyed)return;this.walkedThisFrame=!1,this.lastFrameTime=e;let a=n[1];if(this.userAction=!0,this.needsRender=!0,!a){this.controllerRayFilled.left=!1,this.controllerRayFilled.right=!1,this.gazeRaycaster=null,super.updateTime(e,t),this.intersect(e);return}super.updateTime(e,t);let o=this.xrManager.beginFrame(a,e,this.camera.position,this.camera.near,this.camera.far);if(o.hasPose&&this.syncCameraFromXR(o.headOrientation),this.inputsDirty){this.inputsDirty=!1;for(let e of this.xrManager.inputs.entries().keys())this.syncInputVisual(e)}this.updateControllerHelper((i=(r=this.xrManager.session)==null?void 0:r.inputSources)==null?[]:i,e,t),this.updateGazeRay(),this.intersect(e)}syncCameraFromXR(e){this.camera.quaternion.copy(e),this.camera.matrix.compose(this.camera.position,this.camera.quaternion,this.camera.scale),this.camera.computePose(this.camera.pose.distance)}render(){return this.xrManager.isPresenting?(this.xrManager.renderEyes(this.scene),!0):!1}updateCamera(e,t,n){return Promise.resolve()}updateCameraWithKeyframes(e,t,n){return Promise.resolve()}setCamera(e={}){e.offset&&this.camera.position.copy(e.offset),this.camera.matrix.compose(this.camera.position,this.camera.quaternion,this.camera.scale),this.camera.computePose(this.camera.pose.distance)}updateRenderSize(){this.needsRender=!0}isReady(){return!1}createPickingRaycaster(){let e=new l.Raycaster;return e.params.Points={threshold:.1},e.firstHitOnly=!0,e.floorIndex=-1,e}updateControllerHelper(e,t,n){var r,i,a;if(this.controllerRayFilled.left=!1,this.controllerRayFilled.right=!1,this.walkSources.left=null,this.walkSources.right=null,!e||e.length===0)return;let o={up:0,down:0,left:0,right:0},s={up:0,down:0,left:0,right:0},c={X:!1,Y:!1,LeftTrigger:!1,LeftPinch:!1,A:!1,B:!1,RightTrigger:!1,RightPinch:!1};for(let n=0;n<e.length;n++){let l=e[n];if(!l)continue;let u=l.handedness===`left`?`left`:`right`;this.xrManager.fillRaycaster(l,this.controllerRaycasters[u])&&(this.controllerRayFilled[u]=!0),this.readAxes(l.gamepad,u===`left`?o:s);let d=(r=l.gamepad)==null?void 0:r.buttons;for(let{name:e,index:n}of this.buttonMaps[u]){let r=(a=(i=d==null?void 0:d[n])==null?void 0:i.pressed)==null?!1:a;r&&(c[e]=!0);for(let n of this.buttonStateMachine.sample(l,e,r,t))this.dispatchButtonEvent(n)}}this.emit(`xr.controller.update`,$(`xr.controller.update`,{left:{axes:o,raycaster:this.controllerRaycasters.left,deltaTime:n},right:{axes:s,raycaster:this.controllerRaycasters.right,deltaTime:n},buttons:c})),this.walkByTap()}createButtonMap(e){let t=this.xrManager.profile.buttons,n=e===`left`,r=[[n?`LeftTrigger`:`RightTrigger`,t.trigger],[n?`X`:`A`,t.primary],[n?`Y`:`B`,t.secondary],[n?`LeftPinch`:`RightPinch`,t.pinch]],i=[];for(let[e,t]of r)t!==null&&i.push({name:e,index:t});return i}dispatchButtonEvent(e){let{type:t,name:n,source:r}=e,i=this.emitGesture(`xr.gesture.${t}`,n,t===`buttonDown`||t===`tap`,t===`buttonUp`||t===`tap`);t===`tap`&&!i.defaultPrevented&&(n===`RightTrigger`?this.walkSources.right=r:n===`LeftTrigger`&&(this.walkSources.left=r))}walkByTap(){this.tryWalk(this.walkSources.right,`right`),this.tryWalk(this.walkSources.left,`left`)}tryWalk(e,t){if(!e||this.walkedThisFrame)return;let n=this.controllerRaycasters[t];this.xrManager.fillRaycaster(e,n)&&(this.walkedThisFrame=!0,this.activePanoMesh=void 0,this.activeTime=void 0,this.checkSelectedPano(n))}resetButtonStates(){for(let e of this.buttonStateMachine.reset(this.lastFrameTime))this.dispatchButtonEvent(e)}readAxes(e,t){var n,r;if(!e)return;let{x:i,y:a}=this.xrManager.profile.axes,o=(n=i===null?0:e.axes[i])==null?0:n,s=(r=a===null?0:e.axes[a])==null?0:r;t.right=o>0?o:0,t.left=o<0?-o:0,t.down=s>0?s:0,t.up=s<0?-s:0}getControllerModelFactory(){if(!this.controllerModelFactory){let e=new dD;e.gltfLoader=_D(),this.controllerModelFactory=e}return this.controllerModelFactory}syncInputVisual(e){let t=this.xrManager.inputs.entries().get(e);if(!t)return;let n=this.inputVisuals.get(e);n||(n={},this.inputVisuals.set(e,n));let r=e.targetRayMode===`tracked-pointer`,i=r&&!!e.gamepad&&!!e.gripSpace&&this.showControllerModel&&this.xrManager.profile.model!==`none`;if(i&&!n.model){let r=new l.Object3D,i=this.getControllerModelFactory().createControllerModel(r);r.dispatchEvent({type:`connected`,data:e}),t.grip.add(i),n.model=i}else!i&&n.model&&(n.model.removeFromParent(),n.model=void 0);let a=r&&this.showPointerRay;if(a&&!n.ray){let e=new l.BufferGeometry;e.setAttribute(`position`,new l.Float32BufferAttribute([0,0,0,0,0,-5],3));let r=new l.LineBasicMaterial({color:16777215,depthTest:!1,depthWrite:!1,transparent:!0}),i=new l.LineSegments(e,r);i.renderOrder=999,i.frustumCulled=!1,t.targetRay.add(i),n.ray=i,n.rayLength=mD}else!a&&n.ray&&(this.disposeRay(n.ray),n.ray=void 0)}updatePointerRayLength(e,t){for(let[n,r]of this.inputVisuals){let i=r.ray;if(!i)continue;let a=n.handedness===`left`?`left`:`right`,o=mD;if(e&&t&&e===this.controllerRaycasters[a]&&(o=Math.min(e.ray.origin.distanceTo(t),mD)),r.rayLength!==void 0&&Math.abs(r.rayLength-o)<hD)continue;let s=i.geometry.getAttribute(`position`);s.setZ(1,-o),s.needsUpdate=!0,r.rayLength=o}}removeInputVisual(e){var t;let n=this.inputVisuals.get(e);n&&((t=n.model)==null||t.removeFromParent(),n.ray&&this.disposeRay(n.ray),this.inputVisuals.delete(e))}clearInputVisuals(){for(let e of Array.from(this.inputVisuals.keys()))this.removeInputVisual(e)}disposeRay(e){e.removeFromParent(),e.geometry.dispose(),e.material.dispose()}emitGesture(e,t,n,r){let i=$(e,{session:this.xrManager.session,buttons:t,machineType:nC(this.xrManager.device),isFirst:n,isFinal:r,controllers:{raycaster:{leftRay:this.controllerRaycasters.left,rightRay:this.controllerRaycasters.right}}});return this.emit(e,i),i}updateGazeRay(){var e,t;let n=(e=this.xrManager.session)==null?void 0:e.inputSources;if(!n||n.length===0){this.gazeRaycaster=null;return}let r=null;for(let e=0;e<n.length;e++){let t=n[e];if(!t)continue;let i=t.targetRayMode;if(i===`transient-pointer`||i===`gaze`||t.hand!=null){r=t;break}}if(!r){this.gazeRaycaster=null;return}let i=(t=this.gazeRayPool)==null?this.gazeRayPool=this.createPickingRaycaster():t;this.gazeRaycaster=this.xrManager.fillRaycaster(r,i)?i:null}onXRSelect(e){var t;if(e.targetRayMode!==`gaze`&&e.targetRayMode!==`transient-pointer`)return;let n=(t=this.gazeRayPool)==null?this.gazeRayPool=this.createPickingRaycaster():t;this.xrManager.fillRaycaster(e,n)&&this.checkSelectedPano(n)}pickPickingRaycaster(){return this.gazeRaycaster?this.gazeRaycaster:this.controllerRayFilled.right?this.controllerRaycasters.right:this.controllerRayFilled.left?this.controllerRaycasters.left:null}intersect(e){var t,n;if(this.locationMotion.ended===!1){this.intersectMesh.visible=!1,this.activePanoMesh=void 0,this.activeTime=void 0,this.updatePointerRayLength(null,null);return}if(this.activePanoMesh&&this.activeTime&&e-this.activeTime>gD){let e=this.activePanoMesh,t=null;return this.panoMeshes.forEach((n,r)=>{n===e&&(t=r)}),t!==null&&(this.moveToPano(hb(t),{},!0),this.walkedThisFrame=!0),this.activePanoMesh=void 0,this.activeTime=void 0,this.updatePointerRayLength(null,null),e}let r=this.pickPickingRaycaster();if(!r){this.intersectMesh.visible=!1,this.activePanoMesh=void 0,this.activeTime=void 0,this.updatePointerRayLength(null,null);return}let i,a=[],o=this.works.getObserver(this.currentPano),s=o?o.accessibleNodes.map(e=>mb({panoIndex:e,workCode:o.work.workCode})):[];for(let e of s){let i=this.panoMeshes.get(e);if(i){let[e]=r.intersectObject((t=i.hitTestMesh)==null?i:t,!0);if(e){let t=(n=o==null?void 0:o.floorIndex)==null?0:n;a.push({panoMesh:i,intersection:Object.assign({floorIndex:t,floor:t},e)})}}}let[c]=a.sort((e,t)=>e.intersection.distance-t.intersection.distance);c?(i=c.intersection,this.activePanoMesh!==c.panoMesh&&(this.activePanoMesh=c.panoMesh,this.activeTime=e),this.intersectMesh.position.copy(c.panoMesh.position),this.intersectMesh.lookAt(this.camera.position)):(this.activePanoMesh=void 0,this.activeTime=void 0),i||(i=this.modelScene.intersectRaycaster(r)[0]),this.updatePointerRayLength(r,i?i.point:null);let u=$(`intersect.update`,{raycaster:r,intersection:i==null?null:i,object:this.intersectMesh});if(this.emit(`intersect.update`,u),u.defaultPrevented){this.hideIntersectMesh();return}if(i&&i.face){let e=i.face.normal,t=new l.Quaternion;t.setFromUnitVectors(new l.Vector3(0,0,1),e),this.intersectMesh.quaternion.copy(t);let n=i.point.clone();this.intersectMesh.position.copy(n),c?this.intersectMesh.visible=!1:this.intersectMesh.visible=!0}else this.intersectMesh.visible=!1;return c==null?void 0:c.panoMesh}checkSelectedPano(e){var t;this.stopMomentumMovement();let n=this.works.getObserver(this.currentPano);if(!n)return;let r=n.work.observers,i=n.accessibleNodes.filter(e=>{if(e===this.currentPano.panoIndex&&n.work.workCode===this.currentPano.workCode)return!1;let t=r[e];return!t||t.position.clone().applyMatrix4(t.work.transform).distanceTo(this.camera.position)>this.maxAccessibleDistance?!1:t.loadable||t.active}),a=null,[o]=this.modelScene.intersectRaycaster(e);if(o){let[e,n]=em(i,e=>{let t=r[e];return t?t.standingPosition.clone().applyMatrix4(t.work.transform).distanceTo(o.point):1/0},!0);typeof e==`number`&&n<this.panoTapTriggerRadius&&(a=(t=r[e])==null?null:t)}if(a||(a=this.getForwardObserverOrNot(this.xrManager.eyeCameras[0],e)),a&&a.panoId===mb(this.currentPano)&&(a=null),a&&!this.locationMotion.ended){for(let e of this.locationMotion.keyframes)if(this.panoResourceFromLocationMotionKeyframe(e).panoId===a.panoId){a=null;break}}if(!a){this.locationMotion.ended===!0&&this.cameraBounce();return}let s={workCode:a.work.workCode,panoIndex:a.panoIndex,mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,distance:0,offset:a.position.clone()};if(this.emit(`pano.select`,$(`pano.select`,{prevPano:this.currentPano,state:s,userAction:!0,options:{},progress:0,error:null})),!a.active){let e=this.panoMeshes.get(a.panoId);e&&(e.setDisabled(!1),e.setLoading(!0));return}this.emit(`pano.request`,$(`pano.request`,{userAction:!0,prevPano:this.currentPano,state:s,options:{},progress:0,error:null}))}destroy(){super.destroy(),this.xrManager.dispose(),this.clearInputVisuals(),this.scene.remove(this.xrManager.inputs.root)}onPanGesture(){}onTapGesture(){}onPinchGesture(){}onMouseMove(){}onMouseOut(){}},yD=new l.Vector3(0,1.6,0),bD=new l.Box3,xD=new l.Vector3,SD=Object.assign({},Lw),CD=class e extends Rw{static parseArgs(t){return t instanceof e?t:super.parseArgs(t)}static initAnimationEndState(e){var t,n,r,i,a,o;let s=this.parseArgs(e),c=s.works,{state:u,currentState:d}=e.initial,f=typeof u.panoIndex==`number`?{workCode:(r=(t=u.workCode)==null?(n=s.works[0])==null?void 0:n.workCode:t)==null?``:r,panoIndex:u.panoIndex}:{workCode:d.workCode,panoIndex:d.panoIndex},p=c.getObserver(f),m=U((i=u.fov)==null?!p||XC(d.mode)?d.fov:s.defaultFov:i,s.minFov,s.maxFov),h=(a=u.longitude)==null?d.longitude:a,g=U(typeof s.minLatitude==`function`?s.minLatitude(m):s.minLatitude,-Math.PI/2,Math.PI/2),_=U(typeof s.maxLatitude==`function`?s.maxLatitude(m):s.maxLatitude,-Math.PI/2,Math.PI/2),v=U((o=u.latitude)==null?!p||XC(d.mode)?d.latitude:s.defaultLatitude:o,g,_),y=new l.Vector3;if(s.initial.state.offset)y.copy(s.initial.state.offset);else if(p)y.copy(p.position).applyMatrix4(p.work.transform);else{let e=ha(d).setLength(d.distance);y.copy(s.initial.currentState.offset).sub(e)}return{workCode:f.workCode,panoIndex:f.panoIndex,mode:`Model`,longitude:h,latitude:v,fov:m,offset:y,distance:0}}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Model`,this.locationMotion=new Y({x:this.camera.pose.offset.x,y:this.camera.pose.offset.y,z:this.camera.pose.offset.z,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Y({modelAlpha:this.modelScene.parameter.resolveValue().modelAlpha}),this.perspToOrthoMotion=new Y({perspToOrtho:this.camera.perspToOrtho.x})}updateConfiguration(e){return super.updateConfiguration(e)}destroy(){super.destroy(),this.locationMotion.dispose()}isReady(){return this.locationMotion.ended===!1?!1:super.isReady()}updateWork(t,n,r,i){this.works=t;let a=e.initAnimationEndState(Object.assign(Object.assign({},this),{initial:{currentState:Object.assign(Object.assign({},this.currentPano),this.camera.pose),duration:r.duration,effect:r.effect,state:n,userAction:i}}));return(a.workCode!==this.currentPano.workCode||a.panoIndex!==this.currentPano.panoIndex||a.longitude!==this.cameraMotion.value.longitude||a.latitude!==this.cameraMotion.value.latitude||a.fov!==this.cameraMotion.value.fov)&&this.moveToPosition(a.offset,{duration:0,longitude:a.longitude,latitude:a.latitude,fov:a.fov},i),!0}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},i={};return r.distance=0,e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(i.longitude=e.longitude),e.latitude!==void 0&&(i.latitude=e.latitude),e.fov!==void 0&&(i.fov=e.fov),this.locationMotion.set(r,t).catch(q),this.cameraMotion.set(i,t).catch(q)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],i=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:0,x:t.value.offset.x,y:t.value.offset.x,z:t.value.offset.x}}),i.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(q),this.cameraMotion.setKeyframes(e,t)})}updateTime(e,t,...n){if(this.destroyed)return;let r={},i={};if(this.modelAlphaMotion.ended||(this.modelAlphaMotion.update(e),r.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.modelScene.parameter.modelAlpha===0&&this.modelScene.parameter.progress!==1){let{pano0:e,pano1:t}=this.modelScene.parameter;e&&e.map!==(t==null?void 0:t.map)&&e.map.dispose(),r.progress=1,r.pano0=r.pano1=t}if(this.perspToOrthoMotion.ended||(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(U(this.perspToOrthoMotion.value.perspToOrtho,0,1))),!this.locationMotion.ended){this.locationMotion.update(e),i.distance=this.locationMotion.value.distance,i.offset=new l.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z);let t=new l.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),n=[];for(let e of this.works){let r=this.modelScene.models.find(t=>t.work===e);if(!(!r||r.visible===!1)&&!(e.observers.length<=0)&&(bD.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),bD.containsPoint(t)))for(let t of e.observers)n.push(t)}let r=em(n,e=>xD.copy(e.position).applyMatrix4(e.work.transform).distanceTo(t));this.currentPano=r?{workCode:r.work.workCode,panoIndex:r.panoIndex}:{workCode:``,panoIndex:0}}this.cameraMotion.ended||(this.cameraMotion.update(e),i.longitude=this.cameraMotion.value.longitude,i.latitude=this.cameraMotion.value.latitude,i.fov=this.cameraMotion.value.fov),ZC(r)||this.modelScene.parameter.set(r),ZC(i)||this.setCamera(i);let a=this.works.getObserver(this.currentPano);if(this.intersectMesh&&this.intersectMesh.parent&&a&&a.position.y-a.standingPosition.y>10){let e=U(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1)}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:i,userAction:a}=this.initial;this.userAction=a;let o=e.initAnimationEndState(this),s={modelAlpha:1},c={perspToOrtho:0},l={longitude:o.longitude,latitude:o.latitude,fov:o.fov,duration:i,moveStartCallback:e=>{this.perspToOrthoMotion.set(c,i).catch(q),this.modelAlphaMotion.set(s,i).catch(q),this.emit(`initAnimation.start`,$(`initAnimation.start`,{state:e,userAction:this.userAction}))},moveEndCallback:e=>{this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:e,userAction:this.userAction})),t()},moveCancelCallback:()=>{let e=this.currentPano,n=Object.assign(Object.assign({},e),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance});this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:n,userAction:this.userAction})),t()}};this.moveToPosition(o.offset,l,a)})}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(K())[1],t=this.locationMotion.getKeyFrameSegment(K())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:new l.Vector3(t.value.x,t.value.y,t.value.z),distance:t.value.distance})}moveToPano(e,t={},n){let r=this.works.getObserver(e);if(r){let e=new l.Vector3().copy(r.position).applyMatrix4(r.work.transform);this.moveToPosition(e,t,n)}}moveToPosition(e,t={},n){var r,i,a;this.userAction=n,this.stopMomentumMovement();let o=K(),s=new l.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),c=s.distanceTo(e),u=this.locationMotion.getProgressVelocity(o),d=0;for(let e=1;e<this.locationMotion.keyframes.length;e++){let{x:t,y:n,z:r}=this.locationMotion.keyframes[e-1].value,{x:i,y:a,z:o}=this.locationMotion.keyframes[e].value;d+=Math.sqrt(Math.pow(i-t,2)+Math.pow(a-n,2)+Math.pow(o-r,2))}let f=c===0?0:u*d/c,p=this.calculateMovingDuration(t.duration,c),m={x:e.x,y:e.y,z:e.z,distance:0},h={longitude:t.longitude,latitude:t.latitude,fov:t.fov},g=[];for(let e of this.works){let t=this.modelScene.models.find(t=>t.work===e);if(!(!t||t.visible===!1)&&!(e.observers.length<=0)&&(bD.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),bD.containsPoint(s)))for(let t of e.observers)g.push(t)}let _=em(g,e=>xD.copy(e.position).applyMatrix4(e.work.transform).distanceTo(s)),v=_?{workCode:_.work.workCode,panoIndex:_.panoIndex}:{workCode:``,panoIndex:0},y=Object.assign(Object.assign({},v),{mode:this.mode,longitude:(r=h.longitude)==null?this.camera.pose.longitude:r,latitude:(i=h.latitude)==null?this.camera.pose.latitude:i,fov:(a=h.fov)==null?this.camera.pose.fov:a,offset:e.clone(),distance:0}),b=this.currentPano;this.emit(`pano.moveTo`,$(`pano.moveTo`,{options:t,prevPano:b,progress:0,state:y,userAction:this.userAction,error:null})),t.moveStartCallback&&t.moveStartCallback(y),this.cameraMotion.set(h,p).catch(q),this.locationMotion.set(m,p,f).then(()=>{for(let e of this.modelScene.children)e instanceof Fy&&e.show();let e=Object.assign(Object.assign(Object.assign({},v),{mode:this.mode}),JC(this.camera.pose));this.emit(`pano.arrived`,$(`pano.arrived`,{options:t,prevPano:b,progress:0,state:e,userAction:this.userAction,error:null})),t.moveEndCallback&&t.moveEndCallback(e)},()=>{t.moveCancelCallback&&t.moveCancelCallback(),this.emit(`pano.cancel`,$(`pano.cancel`,{options:t,prevPano:b,progress:0,state:y,userAction:this.userAction,error:null}))})}onTapGesture(e){let t=e.center.raycaster;this.stopMomentumMovement();let[n]=this.modelScene.intersectRaycaster(t);if(n&&n.face){let e=n.face.normal,t=n.point;if(new l.Vector3(0,1,0).angleTo(e)>Math.PI/3){let r=new l.Raycaster;r.firstHitOnly=!0;let i=e.clone().setLength(.3).add(t);r.set(i,new l.Vector3(0,-1,0)),n=this.modelScene.intersectRaycaster(r)[0]}}if(n){let t=new l.Vector3().copy(n.point).add(yD),r=[];for(let e of this.works){let n=this.modelScene.models.find(t=>t.work===e);if(!(!n||n.visible===!1)&&!(e.observers.length<=0)&&(bD.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),bD.containsPoint(t)))for(let t of e.observers)r.push(t)}let[i,a]=em(r,e=>xD.copy(e.position).applyMatrix4(e.work.transform).distanceTo(t),!0);i&&a<5&&(t.y=xD.copy(i.position).applyMatrix4(i.work.transform).y),e.state.offset.copy(t),e.state.distance=0,this.emit(`gesture.tap`,e),e.defaultPrevented||this.moveToPosition(t,{},!0)}else this.emit(`gesture.tap`,e),e.defaultPrevented||this.cameraBounce()}},wD=new l.Box3,TD=new l.Vector3,ED=.5,DD=Math.PI/7,OD={defaultLongitude:Math.PI/4,defaultLatitude:Math.PI/4,defaultDistance:150,maxLatitude:Math.PI/2,minLatitude:0,cameraType:`auto`,cameraFence:null,intersectMeshCreator:()=>new Aw},kD={Floorplan:Pw,Topview:Iw,Panorama:HT,VRPanorama:FE,XRPanorama:vD,Model:CD,Mapview:class e extends gw{static parseArgs(t){var n,r,i,a,o,s,c,l;if(t instanceof e)return t;let u=super.parseArgs(t);return Object.assign(Object.assign({},u),{defaultLongitude:(n=t.defaultLongitude)==null?OD.defaultLongitude:n,defaultLatitude:(r=t.defaultLatitude)==null?OD.defaultLatitude:r,defaultDistance:(i=t.defaultDistance)==null?OD.defaultDistance:i,maxLatitude:(a=t.maxLatitude)==null?OD.maxLatitude:a,minLatitude:(o=t.minLatitude)==null?OD.minLatitude:o,cameraType:(s=t.cameraType)==null?OD.cameraType:s,cameraFence:(c=t.cameraFence)==null?OD.cameraFence:c,intersectMeshCreator:(l=t.intersectMeshCreator)==null?OD.intersectMeshCreator:l})}static distanceFromModel(e,t,n){let r=e.boundingBox,i=r.isEmpty()?10:Math.pow(Math.pow(r.max.x-r.min.x+1,2)+Math.pow(r.max.y-r.min.y+1,2)+Math.pow(r.max.z-r.min.z+1,2),1/2);i=isNaN(i)||!isFinite(i)?1:i;let a=i/2/Math.tan(Math.PI*t/360);return n<1&&(a/=n),isNaN(a)||!isFinite(a)?i:a}static initAnimationEndState(t){var n,r,i,a,o,s,c;let u=this.parseArgs(t),d=u.works,f=u.modelScene,{state:p,currentState:m}=t.initial,h=typeof p.panoIndex==`number`?{workCode:(i=(n=p.workCode)==null?(r=u.works[0])==null?void 0:r.workCode:n)==null?``:i,panoIndex:p.panoIndex}:{workCode:m.workCode,panoIndex:m.panoIndex},g=(a=p.fov)==null?60:a,_=U(typeof u.minLatitude==`function`?u.minLatitude(g):u.minLatitude,-Math.PI/2,Math.PI/2),v=U(typeof u.maxLatitude==`function`?u.maxLatitude(g):u.maxLatitude,-Math.PI/2,Math.PI/2),y=U((o=p.latitude)==null?YC(m.mode)?m.latitude:u.defaultLatitude:o,_,v),b=e.distanceFromModel(u.modelScene,g,u.camera.aspect),x=new l.Vector3,S=(s=p.distance)==null?Math.min(u.defaultDistance,b):s,C=(c=p.longitude)==null?YC(m.mode)?m.longitude:u.defaultLongitude:c;if(p.offset)x.copy(p.offset);else{let e=d.getObserver(h);u.defaultDistance<b&&e?(x.copy(e.position).applyMatrix4(e.work.transform),p.longitude===void 0&&(C=m.longitude)):(f.boundingBox.getCenter(x),S=b)}return Object.assign(Object.assign({},h),{mode:`Mapview`,longitude:C,latitude:y,fov:g,offset:x,distance:S})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Mapview`,this.defaultLongitude=n.defaultLongitude,this.defaultLatitude=n.defaultLatitude,this.defaultDistance=n.defaultDistance,this.maxLatitude=n.maxLatitude,this.minLatitude=n.minLatitude,this.cameraType=n.cameraType,this.cameraFence=n.cameraFence,this.locationMotion=new Y({x:this.camera.pose.offset.x,y:this.camera.pose.offset.y,z:this.camera.pose.offset.z,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Y({modelAlpha:this.modelScene.parameter.resolveValue().modelAlpha}),this.perspToOrthoMotion=new Y({perspToOrtho:this.camera.perspToOrtho.x}),this.pendingTextureId=null,this.textureLoader=new mu,this.intersectMeshCreator=n.intersectMeshCreator,this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=`intersect`,this.intersectMesh.visible=!1,this.helper.add(this.intersectMesh)}updateConfiguration(e){if(super.updateConfiguration(e)===!1)return!1;if(e.defaultLongitude!==void 0&&this.defaultLongitude!==e.defaultLongitude&&(this.defaultLongitude=e.defaultLongitude),e.defaultLatitude!==void 0&&this.defaultLatitude!==e.defaultLatitude&&(this.defaultLatitude=e.defaultLatitude),e.defaultDistance!==void 0&&this.defaultDistance!==e.defaultDistance&&(this.defaultDistance=e.defaultDistance),e.maxLatitude!==void 0&&this.maxLatitude!==e.maxLatitude&&(this.maxLatitude=e.maxLatitude),e.minLatitude!==void 0&&this.minLatitude!==e.minLatitude&&(this.minLatitude=e.minLatitude),e.cameraType!==void 0&&this.cameraType!==e.cameraType&&(this.cameraType=e.cameraType),this.cameraFence instanceof l.Box3&&e.cameraFence instanceof l.Box3||this.cameraFence instanceof l.Sphere&&e.cameraFence instanceof l.Sphere?this.cameraFence.equals(e.cameraFence)||(this.cameraFence=e.cameraFence):e.cameraFence!==void 0&&(this.cameraFence=e.cameraFence),e.intersectMeshCreator!==void 0&&this.intersectMeshCreator!==e.intersectMeshCreator){this.intersectMeshCreator=e.intersectMeshCreator;let t=this.intersectMesh;this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=t.name,this.intersectMesh.visible=t.visible;let n=this.intersectMesh.parent;n&&n.add(this.intersectMesh),t.dispose()}return!0}destroy(){super.destroy(),this.pendingTextureId=null,this.locationMotion.dispose(),this.panState=void 0,this.intersectMesh.dispose(),this.helper.remove(this.intersectMesh)}isReady(){return this.locationMotion.ended===!1?!1:super.isReady()}updateWork(t,n,r,i){this.userAction=i,this.works=t;let a=e.initAnimationEndState(Object.assign(Object.assign({},this),{initial:{currentState:Object.assign(Object.assign({},this.currentPano),this.camera.pose),duration:r.duration,effect:r.effect,state:n,userAction:i}}));this.currentPano={workCode:a.workCode,panoIndex:a.panoIndex};let o={longitude:a.longitude,latitude:a.latitude,fov:a.fov},s={x:a.offset.x,y:a.offset.y,z:a.offset.z,distance:a.distance};return(o.longitude!==this.cameraMotion.value.longitude||o.latitude!==this.cameraMotion.value.latitude||o.fov!==this.cameraMotion.value.fov)&&this.cameraMotion.set(o,r.duration).catch(q),(s.x!==this.locationMotion.value.x||s.y!==this.locationMotion.value.y||s.z!==this.locationMotion.value.z||s.distance!==this.locationMotion.value.distance)&&this.locationMotion.set(s,r.duration).catch(q),!0}updateModel(e){super.updateModel(e),this.hideIntersectMesh()}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},i={};return e.distance!==void 0&&(r.distance=e.distance),e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(i.longitude=e.longitude),e.latitude!==void 0&&(i.latitude=e.latitude),e.fov!==void 0&&(i.fov=e.fov),this.locationMotion.set(r,t).catch(q),this.cameraMotion.set(i,t).catch(q)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],i=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:t.value.distance,x:t.value.offset.x,y:t.value.offset.x,z:t.value.offset.x}}),i.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(q),this.cameraMotion.setKeyframes(e,t)})}updateTime(e,t){if(this.destroyed)return;let n={},r={};if(this.locationMotion.ended||(this.locationMotion.update(e),r.distance=this.locationMotion.value.distance,r.offset=new l.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z)),this.cameraMotion.ended||(this.cameraMotion.update(e),r.longitude=this.cameraMotion.value.longitude,r.latitude=this.cameraMotion.value.latitude,r.fov=this.cameraMotion.value.fov),this.modelAlphaMotion.ended||(this.modelAlphaMotion.update(e),n.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.modelScene.parameter.modelAlpha===0&&this.modelScene.parameter.progress!==1){let{pano0:e,pano1:t}=this.modelScene.parameter;e&&e.map!==(t==null?void 0:t.map)&&e.map.dispose(),n.progress=1,n.pano0=n.pano1=t}let i=0;if(this.cameraType===`auto`?i=+(Math.abs(Math.PI/2-this.cameraMotion.value.latitude)<.02||Math.abs(-Math.PI/2-this.cameraMotion.value.latitude)<.02):this.cameraType===`perspective`?i=0:this.cameraType===`orthographic`&&(i=1),this.perspToOrthoMotion.getTargetKeyframe().value.perspToOrtho!==i&&this.perspToOrthoMotion.set({perspToOrtho:i},500).catch(q),this.perspToOrthoMotion.ended||(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(U(this.perspToOrthoMotion.value.perspToOrtho,0,1))),ZC(n)||this.modelScene.parameter.set(n),ZC(r)||this.setCamera(r),this.cameraFence&&!this.panState&&!this.pinchState&&!this.mouseWheelState&&!this.inMomentumMovement&&this.locationMotion.ended&&this.perspToOrthoMotion.ended&&this.cameraMotion.ended){let e=ha(this.camera.pose,new l.Vector3),t=new l.Vector3().copy(this.camera.pose.offset).sub(e.clone().multiplyScalar(this.camera.pose.distance));if(this.cameraFence.distanceToPoint(t)>.01){let e=this.cameraFence.clampPoint(t,new l.Vector3),n=this.camera.pose.offset.clone().add(e).sub(t),r=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:n,distance:this.camera.pose.distance});this.fixFinalState(r),this.locationMotion.set({x:r.offset.x,y:r.offset.y,z:r.offset.z,distance:r.distance},300).catch(q)}}if(this.intersectMesh&&this.intersectMesh.parent){let e=U(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1)}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(K())[1],t=this.locationMotion.getKeyFrameSegment(K())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,distance:t.value.distance,offset:new l.Vector3(t.value.x,t.value.y,t.value.z)})}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:i,userAction:a}=this.initial;this.userAction=a;let o=e.initAnimationEndState(this),s={longitude:o.longitude,latitude:o.latitude,fov:o.fov},c={x:o.offset.x,y:o.offset.y,z:o.offset.z,distance:o.distance};this.emit(`initAnimation.start`,$(`initAnimation.start`,{state:o,userAction:this.userAction})),this.perspToOrthoMotion.set({perspToOrtho:0},i).catch(q),this.modelAlphaMotion.set({modelAlpha:1},i/3).catch(q),this.cameraMotion.set(s,i).catch(q),this.locationMotion.set(c,i).then(()=>{this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:o,userAction:this.userAction}))},e=>{let t=Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),JC(this.camera.pose));this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:t,userAction:this.userAction}))}).then(()=>{t()})})}getForwardObserverOrNot(e){let[t]=this.modelScene.intersectRaycaster(e);if(!t)return null;let n=[];for(let t of this.works){let r=this.modelScene.models.find(e=>e.work===t);if(!(!r||r.visible===!1)&&!(t.observers.length<=0)&&(wD.copy(t.observerBox).expandByScalar(10).applyMatrix4(t.transform),wD.containsPoint(e.ray.origin)||e.ray.intersectsBox(wD)))for(let e of t.observers)n.push(e)}let[r,i]=em(n,e=>TD.copy(e.standingPosition).applyMatrix4(e.work.transform).distanceTo(t.point),!0);return r&&i<Math.max(r.standingPosition.distanceTo(this.camera.position)/5,10)?r:null}coordinatesForOffset(e){let t=this.renderer.getSize(new l.Vector2);return{longitude:-2*e.x/(t.x*this.viewport.width),latitude:2*e.y/(t.y*this.viewport.height)}}requestMomentumMovement(e,t,n,r){if(this.inMomentumMovement===null)return;r=Math.max(r,1);let i=Object.assign({},n),a={longitude:0,latitude:0,x:0,y:0,z:0};for(let e=0;e<r;e++)i.longitude*=.996,i.latitude*=.996*.998,i.x*=.99,i.y*=.99,i.z*=.99,a.longitude+=i.longitude,a.latitude+=i.latitude,a.x+=i.x,a.y+=i.y,a.z+=i.z;let o=this.cameraMotion.value.fov,s=ma(this.cameraMotion.value.longitude+a.longitude),c=U(typeof this.minLatitude==`function`?this.minLatitude(o):this.minLatitude,-Math.PI/2,Math.PI/2),u=U(typeof this.maxLatitude==`function`?this.maxLatitude(o):this.maxLatitude,-Math.PI/2,Math.PI/2),d=U(this.cameraMotion.value.latitude+a.latitude,c,u),f=new l.Vector3(this.locationMotion.value.x+a.x,this.locationMotion.value.y+a.y,this.locationMotion.value.z+a.z),p=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:s,latitude:d,offset:f,fov:o,distance:this.locationMotion.value.distance}),m=e.state.offset.clone().sub(ha(e.state).setLength(p.distance)),h=!(Math.abs(i.longitude)>1e-4||Math.abs(i.latitude)>1e-4||Math.abs(i.x)>1e-4||Math.abs(i.y)>1e-4||Math.abs(i.z)>1e-4);(this.cameraFence?this.cameraFence.containsPoint(m):!0)===!1&&(h=!0);let g=$(`gesture.momentum`,Object.assign(Object.assign({},e),{isFirst:t,isFinal:h,state:p}));if(this.emit(`gesture.fire`,g),this.inMomentumMovement.event=g,this.emit(`gesture.momentum`,g),e.defaultPrevented){this.inMomentumMovement=null;return}this.inMomentumMovement&&(this.cameraMotion.set({longitude:s,latitude:d},0).catch(q),this.locationMotion.set({x:p.offset.x,y:p.offset.y,z:p.offset.z,distance:p.distance},0).catch(q),h?this.inMomentumMovement=null:nu.shared.add((t,n)=>{this.requestMomentumMovement(e,!1,i,n)},!0))}fixFinalState(e){if(this.perspToOrthoMotion.getTargetKeyframe().value.perspToOrtho===1)return;let t=ha(e,new l.Vector3),n=new l.Vector3().copy(e.offset).sub(t.clone().setLength(e.distance)),r=new l.Raycaster(n,t);r.params.Points={threshold:.1},r.firstHitOnly=!0,r.hitFilter=e=>e.distance>ED+r.near,r.near=this.camera.near,r.far=this.camera.far;let i;if(i=this.modelScene.intersectRaycaster(r)[0],i&&i.distance<this.camera.near&&(i=void 0),!i){let e=new l.Plane(new l.Vector3(0,1,0),-this.modelScene.boundingBox.min.y),t=r.ray.intersectPlane(e,new l.Vector3);if(t){let e=t.distanceTo(r.ray.origin);e<1e3&&e>=r.near&&(i={distance:e,floorIndex:0,floor:0,point:t,object:this.scene,face:null})}}if(!i){let r=Math.max(e.distance,3);i={distance:r,floorIndex:0,floor:0,point:n.clone().add(t.clone().setLength(r)),object:this.scene,face:null}}i.distance>=this.camera.near&&RC(e.distance,i.distance)&&(e.distance=i.distance,e.offset=i.point)}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=e.pointers.length,n=this.panState,r=0,i=!1;e.pointerType===`mouse`&&(r=e.center.buttons,i=e.center.shiftKey),n&&r===0&&n.buttons!==0&&(r=n.buttons);let a=n==null?void 0:n.target;if(!a){let t=this.relativeClientPosition(e.center),n=this.createRaycasterFromCamera(t,this.camera);a=new l.Vector3().copy(n.ray.direction).multiplyScalar(3).add(n.ray.origin);let[r]=this.modelScene.intersectRaycaster(n);if(!r&&n.ray.direction.y<-.3){let e=new l.Plane(new l.Vector3(0,1,0),0),t=n.ray.intersectPlane(e,new l.Vector3);if(t){let e=t.distanceTo(n.ray.origin);e<1e4&&e>=n.near&&(r={distance:e,floorIndex:0,floor:0,point:t,object:this.scene})}}if(r)a.copy(r.point);else{let e=new l.Vector3().copy(this.camera.pose.offset).sub(this.camera.position).normalize(),t=new l.Plane().setFromNormalAndCoplanarPoint(e,this.camera.pose.offset);n.ray.intersectPlane(t,a)}}if(e.isFinal?this.panState=void 0:this.panState={target:a,buttons:r,pointerLength:t,x:e.center.x,y:e.center.y},!(n===void 0||n.pointerLength!==t))if(t>1||r===2||i){let t={x:e.center.x-n.x,y:e.center.y-n.y},r=new l.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),i=ha(this.cameraMotion.value).setLength(this.locationMotion.value.distance).add(r),a=new l.Vector3().copy(i).sub(n.target).length();a*=Math.tan(this.camera.pose.fov/2*Math.PI/180);let o=this.renderer.getSize(new l.Vector2),s=2*t.x*a/o.y,c=2*t.y*a/o.y,u=new l.Vector3;u.setFromMatrixColumn(this.camera.matrix,0),u.multiplyScalar(-s),r.add(u),this.camera.pose.latitude<DD?u.setFromMatrixColumn(this.camera.matrix,1):(u.setFromMatrixColumn(this.camera.matrix,0),u.crossVectors(this.camera.up,u)),u.multiplyScalar(c),r.add(u);let d=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:r,distance:this.camera.pose.distance});if(e.state=d,this.emit(`gesture.pan`,e),e.defaultPrevented)return;if(this.locationMotion.set({x:d.offset.x,y:d.offset.y,z:d.offset.z},0).catch(q),e.isFinal&&(this.fixFinalState(d),Object.assign(e,{__fixFinalState:!0}),this.locationMotion.set({distance:d.distance,x:d.offset.x,y:d.offset.y,z:d.offset.z},0).catch(q)),e.isFinal){let t=this.renderer.getSize(new l.Vector2),n=2*e.velocityX*a/t.y,r=2*e.velocityY*a/t.y,i=new l.Vector3,o=new l.Vector3;i.setFromMatrixColumn(this.camera.matrix,0),i.multiplyScalar(-n),o.add(i),this.camera.pose.latitude<DD?i.setFromMatrixColumn(this.camera.matrix,1):(i.setFromMatrixColumn(this.camera.matrix,0),i.crossVectors(this.camera.up,i)),i.multiplyScalar(r),o.add(i),this.inMomentumMovement={uuid:Ft()},this.requestMomentumMovement(e,!0,{longitude:0,latitude:0,x:o.x,y:o.y,z:o.z},0)}}else{let t={x:e.center.x-n.x,y:e.center.y-n.y},r=this.coordinatesForOffset(t),i=ma(this.cameraMotion.value.longitude+r.longitude),a=this.camera.pose.fov,o=U(typeof this.minLatitude==`function`?this.minLatitude(a):this.minLatitude,-Math.PI/2,Math.PI/2),s=U(typeof this.maxLatitude==`function`?this.maxLatitude(a):this.maxLatitude,-Math.PI/2,Math.PI/2),c=U(this.cameraMotion.value.latitude+r.latitude,o,s);this.camera.aspect<1&&Math.abs(e.overallVelocityX)>.2&&Math.atan2(Math.abs(e.overallVelocityY),Math.abs(e.overallVelocityX))<Math.PI/6.923&&(c=this.cameraMotion.value.latitude);let l=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:i,latitude:c,fov:a,offset:this.camera.pose.offset,distance:this.camera.pose.distance});if(e.isFinal&&Object.assign(e,{__fixFinalState:!0}),e.state=l,this.emit(`gesture.pan`,e),e.defaultPrevented)return;if(e.isFinal?this.locationMotion.set({distance:l.distance,x:l.offset.x,y:l.offset.y,z:l.offset.z},0).catch(q):this.cameraMotion.set({longitude:l.longitude,latitude:l.latitude},0).catch(q),e.isFinal){let t=e.velocityX,n=e.velocityY;this.inMomentumMovement={uuid:Ft()},this.requestMomentumMovement(e,!0,Object.assign(Object.assign({},this.coordinatesForOffset({x:t,y:n})),{x:0,y:0,z:0}),0)}}}onPinchGesture(t){var n;if(!this.initAnimationIsReady)return;this.userAction=t.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let r=(n=this.pinchState)==null?void 0:n.distance;if(t.isFirst){this.pinchState={x:t.center.x,y:t.center.y,scale:1,distance:this.locationMotion.value.distance};return}if(r===void 0)return;let i=this.modelScene.boundingBox.getCenter(new l.Vector3),a=e.distanceFromModel(this.modelScene,this.cameraMotion.value.fov,this.camera.aspect),o=U(r/t.scale,ED,1/0),s=t.state.offset.clone().sub(ha(t.state).setLength(o)),c=this.modelScene.boundingBox.containsPoint(s),u;if(!c&&this.pinchState&&this.pinchState.scale>t.scale&&i.distanceTo(s)>a?u=t.state.distance:(u=o,this.pinchState&&(this.pinchState.scale=t.scale)),t.state.distance=u,this.emit(`gesture.pinch`,t),!t.defaultPrevented&&(this.locationMotion.set({distance:t.state.distance},0).catch(q),t.pointerType!==`mouse`&&(t.type=`gesture.pan`,this.onPanGesture(t)),t.isFinal)){if(!(`__fixFinalState`in t)){let e=t.state;this.fixFinalState(t.state);let n={x:e.offset.x,y:e.offset.y,z:e.offset.z,distance:e.distance};this.locationMotion.set(n,0).catch(q)}this.panState=void 0,this.pinchState=void 0}}onMouseMove(e){var t,n;if(!this.intersectMesh.parent||this.panState||this.pinchState||this.mouseWheelState||(this.emit(`gesture.mousemove`,e),e.defaultPrevented))return;let r=e.center.raycaster;if(e.isFinal&&this.intersectMesh.parent&&this.intersectMesh.visible===!0){this.hideIntersectMesh();return}let[i]=this.modelScene.intersectRaycaster(r),a=$(`intersect.update`,{raycaster:r,intersection:i==null?null:i,object:this.intersectMesh});if(this.emit(`intersect.update`,a),a.defaultPrevented){this.hideIntersectMesh();return}if(i){let e=(n=(t=i.face)==null?void 0:t.normal)==null?new l.Vector3().copy(r.ray.direction).multiplyScalar(-1):n,a=e.clone(),o=i.point.clone();this.intersectMesh.position.copy(o);let s=o.clone().add(a);if(this.intersectMesh.lookAt(s),Math.abs(e.y)>.99){let e=this.camera.position.clone().sub(o);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0}else this.hideIntersectMesh()}onMouseWheel(t){if(this.initAnimationIsReady)if(this.userAction=t.userAction,this.stopMomentumMovement(),this.hideIntersectMesh(),t.isFinal){let e=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude,fov:this.cameraMotion.value.fov,offset:new l.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),distance:this.locationMotion.value.distance});if(this.fixFinalState(e),this.emit(`gesture.mousewheel`,t),t.defaultPrevented)return;let n={x:e.offset.x,y:e.offset.y,z:e.offset.z,distance:e.distance};this.locationMotion.set(n,0).catch(q)}else{let n=e.distanceFromModel(this.modelScene,this.cameraMotion.value.fov,this.camera.aspect),r=new l.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),i=ha(this.cameraMotion.value,new l.Vector3).negate(),a=new l.Ray(r,i).intersectBox(this.modelScene.boundingBox,new l.Vector3);a&&(n+=a.distanceTo(r));let o=Math.max(this.locationMotion.value.distance-this.camera.near,0),s=t.center.delta/10*Math.max(o/5,.1);if(o<=n||s>0)if(this.locationMotion.value.distance-s>=ED){let e=this.locationMotion.value.distance-s;t.state.distance=e}else{let e=ha(this.cameraMotion.value);e.setLength(s),t.state.offset.add(e)}if(this.emit(`gesture.mousewheel`,t),t.defaultPrevented)return;this.locationMotion.set({distance:t.state.distance,x:t.state.offset.x,y:t.state.offset.y,z:t.state.offset.z},0).catch(q)}}onTapGesture(e){var t;this.userAction=e.userAction,this.stopMomentumMovement();let n=e.center.raycaster,r=this.getForwardObserverOrNot(n);if(!r)this.emit(`gesture.tap`,e);else{let n={longitude:this.camera.pose.longitude,latitude:0},i=Object.assign(Object.assign({},e.state),{mode:`Panorama`,workCode:r.work.workCode,panoIndex:r.panoIndex,longitude:n.longitude,latitude:n.latitude,offset:r?r.position.clone():new l.Vector3,distance:0});if(e.state=i,this.emit(`gesture.tap`,e),!e.defaultPrevented&&(this.emit(`pano.select`,$(`pano.select`,{prevPano:this.currentPano,state:i,userAction:e.userAction,options:n,progress:0,error:null})),r&&r.active)){let e=this.pendingTextureId=Ft(),a=mb({panoIndex:r.panoIndex,workCode:r.work.workCode}),o=this.imageOptions.transform,s=Object.assign({key:`pano.${a}`},pl(this.imageOptions,[`format`,`size`,`quality`,`sharpen`,`forceUseExifOrientation`,`mappings`])),c={right:r.images.work.getURL(r.images.right),left:r.images.work.getURL(r.images.left),up:r.images.work.getURL(r.images.up),down:r.images.work.getURL(r.images.down),front:r.images.work.getURL(r.images.front),back:r.images.work.getURL(r.images.back)},d,f,p=this.enableHDR?r.images.gainmap:void 0;p&&(d={right:r.images.work.getURL(p.right),left:r.images.work.getURL(p.left),up:r.images.work.getURL(p.up),down:r.images.work.getURL(p.down),front:r.images.work.getURL(p.front),back:r.images.work.getURL(p.back)},f=r.images.work.getURL(p.cfg));let m=`pano:`+fb([c,d,s]),h=this.modelScene.parameter,g;if(h.pano0&&h.pano0.map.name===m?g=h.pano0:h.pano1&&h.pano1.map.name===m&&(g=h.pano1),g)h.pano0&&h.pano0.map!==g.map&&h.pano0.map.dispose(),h.pano1&&h.pano1.map!==g.map&&h.pano1.map!==((t=h.pano0)==null?void 0:t.map)&&h.pano1.map.dispose(),h.set({pano0:g,pano1:g}),this.emit(`pano.request`,$(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:i,options:n,error:null}));else{let t=this.textureLoader.loadCubeTexture(c,{imageURL:{transform:o,options:s},format:l.RGBAFormat,viaAjax:!0,fetcher:gy(this.fiveId,r.work)},void 0,void 0,void 0,this.renderer),p=f&&d?Promise.all([gy(this.fiveId,r.work).ajax(f,{responseType:`text`}).then(e=>Wt(JSON.parse(e.body))),this.textureLoader.loadCubeTexture(d,{imageURL:{transform:o,options:s},format:l.RGBAFormat,colorSpace:l.NoColorSpace,viaAjax:!0,fetcher:gy(this.fiveId,r.work)},void 0,void 0,void 0,this.renderer)]).then(([e,t])=>({config:e,map:t.body})):Promise.resolve(void 0);Promise.all([t,p]).then(t=>(0,u.__awaiter)(this,[t],void 0,function*([t,o]){var s,c;let{body:u}=t;if(this.destroyed||this.pendingTextureId!==e){u.dispose();return}this.pendingTextureId=null,u.name=m;let d=Array.isArray(u.image)?u.image[0]:u.image,f=(s=d==null?void 0:d.width)==null?2048:s,p=yield pw(this.renderer,u,!0,Tx),g=new kx().formPixels(p.data),_={panoId:a,map:u,mapSize:f,mapHistogram:new l.Vector4().fromArray(g.toArray()),matrix:r.matrix.clone().premultiply(r.work.transform),zoom:1,gainmap:o?{map:o.map,cfg:o.config}:void 0};h.pano0&&h.pano0.map.dispose(),h.pano1&&h.pano1.map!==((c=h.pano0)==null?void 0:c.map)&&h.pano1.map.dispose(),h.set({pano0:_,pano1:_}),this.emit(`pano.request`,$(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:i,options:n,error:null}))})).catch(t=>{this.destroyed||this.pendingTextureId!==e||(this.pendingTextureId=null)})}}}}onDblTapGesture(e){if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=e.state,n=e.center.raycaster,r=n.ray.origin.clone().add(n.ray.direction.clone().setLength(3)),i=1,[a]=this.modelScene.intersectRaycaster(n);if(a&&(r=a.point.clone(),i=a.distance>4/2?1:3),e.state.distance=i,e.state.offset=r,this.emit(`gesture.dbltap`,e),e.defaultPrevented)return;let o={x:t.offset.x,y:t.offset.y,z:t.offset.z,distance:t.distance};this.locationMotion.set(o,360).catch(q),this.hideIntersectMesh()}hideIntersectMesh(){this.intersectMesh.visible===!0&&(this.intersectMesh.visible=!1,this.needsRender=!0)}}},AD={Floorplan:Nw,Topview:Fw,Panorama:VT,VRPanorama:PE,XRPanorama:pD,Model:SD,Mapview:OD},jD=`gesture.pan,gesture.tap,gesture.dbltap,gesture.press,gesture.pinch,gesture.mousewheel,gesture.mousemove,gesture.momentum,gesture.fire,initAnimation.start,initAnimation.end,camera.update,intersect.update,pano.select,pano.moveTo,pano.moving,pano.arrived,pano.cancel,pano.error,pano.prepare,pano.texture.load,pano.texture.progress,pano.texture.success,pano.texture.error,pano.texture.abort,xr.session.start,xr.session.end,xr.gesture.tap,xr.gesture.press,xr.gesture.buttonUp,xr.gesture.buttonDown,xr.controller.update`.split(`,`);function MD(e){e.on(`initAnimation.start`,t=>{e.emit(`initAnimationWillStart`,t.state.panoIndex,t.state,t.userAction)}),e.on(`initAnimation.end`,t=>{e.emit(`initAnimationEnded`,t.state.panoIndex,t.state,t.userAction)}),e.on(`gesture.pan`,t=>{let n=!1;n=e.emit(`wantsGesture`,`pan`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPanGesture`,t.state,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`pan`,t.pointers,t.isFinal),e.emit(`panGesture`,t.state,t.isFinal))}),e.on(`gesture.tap`,t=>{let n=!1;n=e.emit(`wantsGesture`,`tap`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsTapGesture`,t.center.raycaster,t.center.coords,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`tap`,t.pointers,t.isFinal),e.emit(`tapGesture`,t.center.raycaster,t.center.coords,t.isFinal))}),e.on(`gesture.dbltap`,t=>{let n=!1;n=e.emit(`wantsGesture`,`dbltap`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsDblTapGesture`,t.center.raycaster,t.center.coords,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`dbltap`,t.pointers,t.isFinal),e.emit(`dblTapGesture`,t.center.raycaster,t.center.coords,t.isFinal))}),e.on(`gesture.press`,t=>{let n=!1;n=e.emit(`wantsGesture`,`press`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPressGesture`,t.center.raycaster,t.center.coords,t.center.delta,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`press`,t.pointers,t.isFinal),e.emit(`pressGesture`,t.center.raycaster,t.center.coords,t.center.delta,t.isFinal))}),e.on(`gesture.pinch`,t=>{let n=!1;n=e.emit(`wantsGesture`,`pinch`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPinchGesture`,t.scale,t.state.fov,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`pinch`,t.pointers,t.isFinal),e.emit(`pinchGesture`,t.scale,t.state.fov,t.isFinal))}),e.on(`gesture.mousewheel`,t=>{let n=!1;n=e.emit(`wantsGesture`,`mouseWheel`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsMouseWheel`,t.center.delta,t.state.fov,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`mouseWheel`,t.pointers,t.isFinal),e.emit(`mouseWheel`,t.center.delta,t.state.fov,t.isFinal))}),e.on(`gesture.mousemove`,t=>{let n=!1;n=e.emit(`wantsGesture`,`mouseMove`,t.pointers,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`mouseMove`,t.pointers,t.isFinal),n=e.emit(`wantsChangeCameraFov`,t.state.fov),n&&t.preventDefault())}),e.on(`gesture.momentum`,t=>{let n=!1;n=e.emit(`wantsInteriaPan`,t.state),n&&t.preventDefault(),t.defaultPrevented||e.emit(`interiaPan`,t.state,t.isFinal)}),e.on(`camera.update`,t=>{e.emit(`cameraFovUpdate`,t.state.fov,t.userAction),e.emit(`cameraDirectionUpdate`,t.state,t.userAction);let n=ha(t.state);n.setLength(t.state.distance);let r=t.state.offset.clone().sub(n);e.emit(`cameraPositionUpdate`,r,t.userAction),e.emit(`cameraUpdate`,t.state,t.userAction)}),e.on(`intersect.update`,t=>{if(t.intersection){let n=!1;n=e.emit(`wantsShowIntersectionOnModel`,t.raycaster),n&&t.preventDefault(),t.defaultPrevented||e.emit(`intersectionOnModelUpdate`,t.intersection,t.object)}else e.emit(`intersectionHidden`)}),e.on(`pano.request`,t=>{let n=e.emit(`wantsMoveToPano`,t.state.panoIndex,t.options,t.userAction);n||(n=e.emit(`wantsToMoveToPano`,t.state.panoIndex,t.options,t.userAction)),n&&t.preventDefault(),t.defaultPrevented||e.emit(`panoWillLoad`,t.state.panoIndex)}),e.on(`pano.select`,t=>{e.emit(`panoSelected`,t.state.panoIndex)}),e.on(`pano.moveTo`,t=>{e.emit(`panoLoaded`,t.state.panoIndex),e.emit(`moveToPano`,t.state.panoIndex,t.userAction),e.emit(`panoWillArrive`,t.state.panoIndex,t.state,t.userAction)}),e.on(`pano.moving`,t=>{e.emit(`movingToPano`,t.state.panoIndex,t.prevPano.panoIndex,t.progress)}),e.on(`pano.arrived`,t=>{e.emit(`panoArrived`,t.state.panoIndex,t.state,t.userAction)}),e.on(`pano.cancel`,t=>{e.emit(`moveToPanoCanceled`,t.state.panoIndex)}),e.on(`pano.error`,t=>{e.emit(`panoLoadError`,t.error,t.state.panoIndex)}),e.on(`pano.texture.load`,t=>{e.emit(`textureStartLoad`,t.pano.panoIndex)}),e.on(`pano.texture.success`,t=>{e.emit(`textureLoaded`,t.pano.panoIndex,t.meta)}),e.on(`pano.texture.error`,t=>{e.emit(`textureError`,t.error,t.pano.panoIndex)}),e.on(`pano.texture.abort`,t=>{e.emit(`textureAbort`,t.pano.panoIndex)}),e.on(`pano.texture.progress`,t=>{e.emit(`textureLoading`,t.progress,t.pano.panoIndex)}),e.on(`xr.session.start`,t=>{e.emit(`webXRSessionStart`)}),e.on(`xr.session.end`,t=>{e.emit(`webXRSessionEnd`)}),e.on(`xr.gesture.tap`,t=>{e.emit(`webXRControllerEvent`,`tap`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.press`,t=>{e.emit(`webXRControllerEvent`,`press`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.buttonUp`,t=>{e.emit(`webXRControllerEvent`,`buttonUp`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.buttonDown`,t=>{e.emit(`webXRControllerEvent`,`buttonDown`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.controller.update`,t=>{e.emit(`webXRControllerRayUpdate`,{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0}),t.left&&e.emit(`webXRAxesUpdate`,`left`,{raycaster:{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0},axesState:{up:t.left.axes.up,down:t.left.axes.down,left:t.left.axes.left,right:t.left.axes.right},deltaTime:t.left.deltaTime}),t.right&&e.emit(`webXRAxesUpdate`,`right`,{raycaster:{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0},axesState:{up:t.right.axes.up,down:t.right.axes.down,left:t.right.axes.left,right:t.right.axes.right},deltaTime:t.right.deltaTime})}),e.on(`works.request`,t=>{e.emit(`willLoad`,t.input,t.works[0],e.getCurrentState())}),e.on(`works.load`,t=>{e.emit(`load`,t.input,t.works[0],e.getCurrentState())}),e.on(`works.ready`,t=>{e.emit(`loaded`,t.input,t.works[0])}),e.on(`state.change`,t=>{e.emit(`stateChange`,t.state,t.userAction)}),e.on(`currentState.change`,t=>{e.emit(`currentStateChange`,t.state,t.userAction)}),e.on(`state.set`,t=>{e.emit(`setState`,t.state)}),e.on(`state.synced`,t=>{e.emit(`stateSynced`,t.state)}),e.on(`model.request`,t=>{e.emit(`modelWillLoad`,t.work.model)}),e.on(`model.error`,t=>{e.emit(`modelLoadError`,t.error,t.model)}),e.on(`model.load`,t=>{e.emit(`modelLoaded`,t.model)}),e.on(`model.changeShownFloor`,t=>{e.emit(`modelShownFloorChange`,t.model.shownFloor,t.model.floorLength)}),e.on(`render`,t=>{e.emit(`renderFrame`,t.needsRender)}),e.on(`mode.change.request`,t=>{e.emit(`wantsChangeMode`,t.mode,t.prevMode)}),e.on(`mode.change`,t=>{e.emit(`modeChange`,t.mode,t.prevMode,t.state.panoIndex,t.state,t.userAction)}),e.on(`helpers.visible`,t=>{e.emit(`helpersVisibleChange`,t.object.visible)}),e.on(`network.resource`,t=>{e.emit(`network`,t.source,t.requestType,t.requestState,t.detail)})}function ND(){if(typeof window<`u`){let e=document.createElement(`video`);e.loop=!0,e.autoplay=!0,e.playsInline=!0,e.muted=!0,e.crossOrigin=``;let t=()=>{document.removeEventListener(`touchstart`,t,!1),document.removeEventListener(`mousedown`,t,!1),e.muted=!1};return document.addEventListener(`touchstart`,t,!1),document.addEventListener(`mousedown`,t,!1),e}else return{}}function PD(){let e=new l.Group;e.name=`internalLights`;{let t=new l.DirectionalLight(16777215,.1*Math.PI);t.name=`direction0`,t.position.copy(new l.Vector3(0,1,0)),e.add(t)}{let t=new l.DirectionalLight(16777215,.1*Math.PI);t.name=`direction1`,t.position.copy(new l.Vector3(-1,-1,-1)),e.add(t)}{let t=new l.DirectionalLight(16777215,.3*Math.PI);t.name=`direction2`,t.position.copy(new l.Vector3(1,1,1)),e.add(t)}{let t=new l.AmbientLight(16777215,.6*Math.PI);t.name=`ambient0`,e.add(t)}return e}function FD(e){var t,n;let r={},i=e.split(/(\;|\,)/);for(let e of i){let i=e.split(`=`),a=(t=i[0])==null?void 0:t.trim(),o=(n=i[1])==null?void 0:n.trim();a&&o&&(r[a]=o)}return r}function ID(){var e;if(typeof document<`u`){let t=document.getElementsByTagName(`meta`);for(let n=0;n<t.length;n++){let r=t[n];if(r.getAttribute(`name`)===`viewport`){let t=FD((e=r.getAttribute(`content`))==null?``:e),n=Number(t[`initial-scale`]);if(!isNaN(n))return n}}}return 1}var LD,RD={zh:`data:image/png;base64,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`,en:`data:image/png;base64,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`},zD=typeof navigator<`u`?(LD=RD[navigator.language.split(`-`)[0]])==null?RD.en:LD:RD.zh,BD=[450,63],VD=[20,20],HD=new Float32Array([-.5,-.5,0,.5,-.5,0,-.5,.5,0,.5,.5,0]),UD=new Float32Array([0,0,1,0,0,1,1,1]),WD=new Uint8Array([0,1,2,1,3,2]),GD=new f.BufferGeometry;GD.setAttribute(`position`,new f.BufferAttribute(HD,3)),GD.setAttribute(`uv`,new f.BufferAttribute(UD,2)),GD.setIndex(new f.BufferAttribute(WD,1));var KD=new f.MeshBasicMaterial({transparent:!0,depthTest:!1,depthWrite:!1,stencilWrite:!1,fog:!1}),qD=new f.Mesh(GD,KD);qD.matrixAutoUpdate=!1;var JD=new f.Scene;JD.add(qD),JD.matrixAutoUpdate=!1;var YD=new f.OrthographicCamera(-.5,.5,.5,-.5,.1,1);YD.position.set(0,0,.5),YD.lookAt(0,0,0),YD.updateMatrixWorld(!0),YD.matrixAutoUpdate=!1;var XD=new f.Vector4,ZD=new f.Vector4;function QD(e){if(KD.map){let t=e.getViewport(XD),n=e.getScissor(ZD),r=e.getScissorTest(),i=e.autoClear,a=BD[0]/3,o=BD[1]/3,s=n.x+VD[0]/3,c=n.y+n.height-VD[1]/3-o;e.setViewport(s,c,a,o),e.setScissor(s,c,a,o),e.setScissorTest(!0),e.autoClear=!1,e.render(JD,YD),e.setViewport(t),e.setScissor(n),e.setScissorTest(r),e.autoClear=i}else{let e=new f.Texture,t=new Image;t.onload=()=>{e.image=t,e.wrapS=f.ClampToEdgeWrapping,e.wrapT=f.ClampToEdgeWrapping,e.minFilter=f.LinearFilter,e.needsUpdate=!0,e.generateMipmaps=!1,KD.needsUpdate=!0,t.onload=q},t.src=zD,KD.map=e}}function $D(){return typeof location>`u`||location.protocol!==`https:`?Promise.reject(Error(`Request DeviceOrientation Permission denied.`)):typeof DeviceOrientationEvent<`u`&&typeof DeviceOrientationEvent.requestPermission==`function`?DeviceOrientationEvent.requestPermission().then(e=>{if(e==`granted`)return Promise.resolve();{let e=Error(`Request DeviceOrientation Permission denied.`);return Promise.reject(e)}}):Promise.resolve()}function eO(){if(`xr`in navigator)return navigator.xr.isSessionSupported(`immersive-vr`).then(e=>e?Promise.resolve():Promise.reject()).then(()=>navigator.xr.requestSession(`immersive-vr`,{optionalFeatures:[`local-floor`]}).then(e=>Promise.resolve(e)));{let e=Error(`Request XR Permission denied.`);return Promise.reject(e)}}var tO=800,nO=90,rO=e=>e.replace(`//vrlab-public.ljcdn.com/`,`//vr-public.realsee-cdn.cn/`).replace(`//vrlab-image4.ljcdn.com/`,`//vr-image-4.realsee-cdn.cn/`).replace(`//vrlab-image3.ljcdn.com/`,`//vr-image-3.realsee-cdn.cn/`).replace(`//vrlab-image2.ljcdn.com/`,`//vr-image-2.realsee-cdn.cn/`).replace(`//vrlab-image1.ljcdn.com/`,`//vr-image-1.realsee-cdn.cn/`),iO=new l.Sphere,aO=new l.Box3,oO=new l.Vector4,sO=new l.Vector4,cO=new l.Color,lO=new l.Vector2,uO=new WeakMap,dO=ax([nx(null)]),fO={},pO=class e extends Bt{static get version(){return`1.0.0-alpha.12`}static get dracoPath(){return rf.decoderPath}static set dracoPath(e){rf.setDecoderPath(e)}static get ktx2Path(){return ff.transcoderPath}static set ktx2Path(e){ff.setTranscoderPath(e)}static get useNativeImageBitmap(){return ou()}static set useNativeImageBitmap(e){au(e)}constructor(e={}){var t,n,r,i,a,o,s,c,u,d,f,p;if(super(),this.pbmGaussianSplattingRenderMesh=null,this.fiveId=Ft(),fO[this.fiveId]=this,this.currentUpdateArgs={time:K(),args:[]},this.currentMode=`Panorama`,this.pano={workCode:``,panoIndex:0},this.needsRender=!0,this.onlyRenderIfNeeds=(t=e.onlyRenderIfNeeds)==null?!0:t,this.imageOptions=Object.assign({},(n=e.imageOptions)==null?{}:n),this.textureOptions=Object.assign({},(r=e.textureOptions)==null?{}:r),this.poweredByRealsee=(i=e.poweredByRealsee)==null?!0:i,this.backgroundColor=new l.Color((a=e.backgroundColor)==null?1579548:a),this.backgroundAlpha=(o=e.backgroundAlpha)==null?1:o,this.extraElements=[],this.controllerInits={Panorama:Object.assign({},e.panorama),Model:Object.assign({},e.model),Floorplan:Object.assign({},e.floorplan),Topview:Object.assign({},e.topview),Mapview:Object.assign({},e.mapview),VRPanorama:Object.assign({},e.vrPanorama),XRPanorama:Object.assign({},e.xrPanorama)},this.fps={testCount:0,testTime:K()},this.modeChangeDuration=(s=e.modeChangeDuration)==null?tO:s,this.enableWheel=(c=e.enableWheel)==null?!0:c,this._enableHDR=!!e.enableHDR&&US&&!e.forceWebGL,typeof window<`u`)if(`renderer`in e)e.renderer instanceof oC&&this.throwError(Error(`cannot render a internal renderer`)),this.renderer=e.renderer;else try{this.renderer=new oC({outputType:this._enableHDR?l.HalfFloatType:void 0,logarithmicDepthBuffer:e.logarithmicDepthBuffer,forceWebGL:(u=e.forceWebGL)==null?!1:u});let t=ID();this.renderer.setPixelRatio(t===1?window.devicePixelRatio:1),this.renderer.setSize(512,512),this.renderer.setClearColor(this.backgroundColor,this.backgroundAlpha)}catch(e){let t=e instanceof Error?e:Error(String(e));this.throwError(t)}this.getPixelsRenderTarget=new l.RenderTarget(1,1,{colorSpace:(f=(d=this.renderer)==null?void 0:d.outputColorSpace)==null?l.SRGBColorSpace:f,generateMipmaps:!1}),this.renderer&&Jc(this.renderer),this.viewport=Object.assign({left:0,bottom:0,width:1,height:1},e.viewport),this.camera=new Oa(nO),this.scene=new fC,this.scene.background=this.backgroundColor,this.xrCustomObjectsScene=new l.Scene,this.scene.add(this.xrCustomObjectsScene),this.scene.matrixAutoUpdate=!1,this.requestProxy=(p=e.requestProxy)==null?rO:p,this.networkSubscribe=new ol,this.networkSubscribe.on(`network`,(e,t,n,r)=>{var i;this.emit(`network.resource`,$(`network.resource`,{source:e,requestType:t,requestState:n,detail:r})),(i=this.analysis)==null||i.network(this.works,e,t,n,r)}),this.readyCallbacks=[],this.syncingState=!1,this.helperGroup=new l.Group,this.helperGroup.name=`helper`,this.helperGroup.matrixAutoUpdate=!1,this.scene.add(this.helperGroup),uO.set(this,dO),this.modelScene=new Ky({fiveId:this.fiveId}),this.modelScene.addEventListener(`model.create`,e=>{this.bindModel(e.model)}),this.scene.add(this.modelScene);let[m]=this.modelScene.setModels(dO,{forceReplaceImmediately:!0});Q(m,`loaded`,{get(){return!1},set(e){}}),this.videoTexture=new l.VideoTexture(e.videoInstance||ND());let h=PD();this.scene.add(h),this.state={mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance},this.stateSynced=!1,this.destroyed=!1,this.paused=!0,typeof window<`u`&&(e.play!==!1&&this.play(),this.stopAnimationLoop=nu.shared.add((e,t,...n)=>{this.updateTime(e,t,...n)},!1,0,10));let g=()=>{typeof document<`u`&&document.fullscreenElement===null&&this.currentMode===`VRPanorama`&&this.controller.emit(`vr.requestExit`,$(`vr.requestExit`,{}))},_=()=>{this.needsRender=!0},v=()=>{this.renderer instanceof oC&&this.renderer.reconfigureContext(),this.needsRender=!0},y=()=>{typeof document<`u`&&document.visibilityState===`visible`&&v()},b=()=>{v()};if(this.renderer instanceof oC&&(this.renderer.onDeviceLostCallback=()=>{v()}),typeof document<`u`&&(document.addEventListener(`visibilitychange`,y,!1),document.addEventListener(`fullscreenchange`,g,!1)),typeof window<`u`&&window.addEventListener(`pageshow`,b,!1),this.renderer&&this.renderer.domElement.addEventListener(`webglcontextrestored`,_,!1),this.removeEventListeners=()=>{typeof document<`u`&&(document.removeEventListener(`visibilitychange`,y,!1),document.removeEventListener(`fullscreenchange`,g,!1)),typeof window<`u`&&window.removeEventListener(`pageshow`,b,!1),this.renderer instanceof oC&&(this.renderer.onDeviceLostCallback=void 0),this.renderer&&this.renderer.domElement.removeEventListener(`webglcontextrestored`,_,!1)},this.loadWorkTask=this.prepare(),this.plugins={},e.plugins&&e.plugins.length){for(let t of e.plugins)if(typeof t==`function`)t(this);else if(Array.isArray(t)){let[e,n,r]=t;if(typeof e==`function`){let t=e(this,r);typeof n==`string`&&(this.plugins[n]?this.throwError(Error(`plugin name ${n} is exists.`)):this.plugins[n]=t)}}}MD(this),this.fiveRenderer=new BS({outputType:this._enableHDR?l.HalfFloatType:void 0}),this.adaptiveLuminancePass=new Gx,this.adaptiveLuminancePass.enabled=!1,this.fiveRenderer.composer.addPass(this.adaptiveLuminancePass),this.eyeDomeLightingPass=new qx(this.camera),this.eyeDomeLightingPass.enabled=!1,this.fiveRenderer.composer.addPass(this.eyeDomeLightingPass),this.pbmGaussianSplattingRenderMesh=new Ei,this.scene.add(this.pbmGaussianSplattingRenderMesh)}get ident(){return this.fiveId}get panoIndex(){return this.pano.panoIndex}prepare(){return Promise.all([Ol().catch(q)]).then(q)}dispose(){var e;if(this.destroyed===!0)return;delete fO[this.fiveId],this.emit(`dispose`),this.destroyed=!0,this.pause(),this.stopAnimationLoop&&(this.stopAnimationLoop(),this.stopAnimationLoop=void 0),this.off(),this.networkSubscribe.off(),this.controller&&(this.controller.destroy(),this.controller=void 0);let t=this.getElement();t&&t.parentNode&&t.parentNode.removeChild(t);let n=this.modelScene.parameter;n.pano0&&n.pano0.map.dispose(),n.pano1&&n.pano1.map!==((e=n.pano0)==null?void 0:e.map)&&n.pano1.map.dispose(),n.reset(`pano0`,`pano1`),this.modelScene.dispose(),uO.set(this,dO),this.renderer&&(!(this.renderer instanceof oC)||this.renderer.isInitialized)&&this.renderer.render(new l.Scene,new l.PerspectiveCamera),this.fiveRenderer.dispose(),this.renderer instanceof oC&&this.renderer.dispose()}setViewport(e){Object.assign(this.viewport,e),this.needsRender=!0}get boundingMesh(){return this.modelScene.boundingMesh}get helperVisible(){return this.helperGroup.visible}set helperVisible(e){this.helperGroup.visible!==e&&(this.helperGroup.visible=e,this.emit(`helpers.visible`,$(`helpers.visible`,{object:this.helperGroup})),this.needsRender=!0)}updateConfiguration(e,t=!0){let n=!1,r=!1;e.panorama&&(Object.assign(this.controllerInits.Panorama,hl(e.panorama)),this.currentMode===`Panorama`&&(n=!0)),e.model&&(Object.assign(this.controllerInits.Model,hl(e.model)),this.currentMode===`Model`&&(n=!0)),e.floorplan&&(Object.assign(this.controllerInits.Floorplan,hl(e.floorplan)),this.currentMode===`Floorplan`&&(n=!0)),e.topview&&(Object.assign(this.controllerInits.Topview,hl(e.topview)),this.currentMode===`Topview`&&(n=!0)),e.mapview&&(Object.assign(this.controllerInits.Mapview,hl(e.mapview)),this.currentMode===`Mapview`&&(n=!0)),e.vrPanorama&&(Object.assign(this.controllerInits.VRPanorama,hl(e.vrPanorama)),this.currentMode===`VRPanorama`&&(n=!0)),e.xrPanorama&&(Object.assign(this.controllerInits.XRPanorama,hl(e.xrPanorama)),this.currentMode===`XRPanorama`&&(n=!0)),e.imageOptions&&(Object.assign(this.imageOptions,e.imageOptions),(this.currentMode===`Panorama`||this.currentMode===`VRPanorama`||this.currentMode===`XRPanorama`)&&(r=!0,n=!0)),e.textureOptions&&Object.assign(this.textureOptions,e.textureOptions),t&&n&&this.controller&&this.currentMode&&(!this.controller.updateConfiguration(this.controllerInits[this.currentMode])||r)&&this.changeMode(this.currentMode,this.getCurrentState(),0,!1,!0)}appendTo(e,t={}){if(!this.renderer)return;if(!(this.renderer instanceof oC)){this.throwError(Error(`cannot call appendTo method when render a external renderer`));return}let n=this.getElement();if(!n)return;e.appendChild(n),this.refresh(t);let r=window.getComputedStyle(e).position;r!==`relative`&&r!==`absolute`&&r!==`fixed`&&r!==`sticky`&&(e.style.position=`relative`)}refresh(e={},t){var n,r,i,a,o,s;if(!this.renderer)return;let c=this.renderer.domElement.parentNode,{width:l=(n=c==null?void 0:c.offsetWidth)==null?512:n,height:u=(r=c==null?void 0:c.offsetHeight)==null?512:r}=e;if(l=Math.max(1,l),u=Math.max(1,u),!t){let e=ID(),n=typeof window<`u`?window.devicePixelRatio:1;if(t=(i=e===1?n:1)==null?1:i,t>1){let e=Math.max(l,u)*t,n=Math.min((s=(o=(a=this.renderer.backend.device)==null?void 0:a.limits)==null?void 0:o.maxTextureDimension2D)==null?8192:s,4096);e>n&&(t=Math.max(t/e*n,1),t=Math.floor(t*100)/100)}}this.renderer.setPixelRatio(t),this.renderer.setSize(l,u),this.needsRender=!0;let d=K(),f=d-this.currentUpdateArgs.time,p=this.currentUpdateArgs.args;this.updateTime(d,f,...p)}addExtraElement(e){return this.extraElements.indexOf(e)===-1&&(this.extraElements.push(e),this.controller&&this.controller.bindExtraElement(e)),()=>this.removeExtraElement(e)}removeExtraElement(e){let t=this.extraElements.indexOf(e);t!==-1&&(this.extraElements.splice(t,1),this.controller&&this.controller.unbindExtraElement(e))}getSize(e){if(!this.renderer)throw Error(`renderer is not initialized`);return this.renderer.getSize(e),e.x*=this.viewport.width,e.y*=this.viewport.height,e}getDrawingBufferSize(e){if(!this.renderer)throw Error(`renderer is not initialized`);return this.renderer.getDrawingBufferSize(e),e.x*=this.viewport.width,e.y*=this.viewport.height,e}updateCamera(e,t,n=!0){if(!this.controller)throw Error(`controller is not initialized.`);return this.controller.updateCamera(e,t,n)}updateCameraWithKeyframes(e,t,n=!0){if(!this.controller)throw Error(`controller is not initialized.`);return this.controller.updateCameraWithKeyframes(e,t,n)}get works(){return uO.get(this)||dO}get work(){return this.works[0]}get observers(){return this.work.observers}get models(){return this.modelScene.models}get model(){return this.modelScene.models[0]}load(e,t,n,r=!0){if(!this.renderer)throw Error(`renderer is not initialized`);let i=this.loadWorkTask.then(()=>VC(e)?e.then(e=>this.load_(e,t,n,r)):this.load_(e,t,n,r));return this.loadWorkTask=i.catch(e=>{this.throwError(e)}),i}load_(t,n,r,i=!0){var a,o,s,c,u,d,f,p,m,h;let g={};typeof r==`number`?g.duration=r:typeof r==`object`&&Object.assign(g,r),this.works===dO&&(g.duration===void 0&&(g.duration=0),g.effect===void 0&&(g.effect=`instant`));let _={};Object.assign(_,g.model),!_[`3d-tiles`]&&g[`3d-tiles`]&&(_[`3d-tiles`]=g[`3d-tiles`]),!_.textureOptions&&g.textureOptions&&(_.textureOptions=g.textureOptions),!_.textureOptions&&this.textureOptions&&(_.textureOptions=this.textureOptions);let v=[];if(Array.isArray(t))for(let e of t)e instanceof tx?v.push(e):typeof e!=`string`&&`work`in e?v.push(nx(e.work,e)):v.push(nx(e));else t instanceof tx?v.push(t):v.push(nx(t));g.mode===`add`&&(v=[].concat(this.works,v));let y;try{y=ax(v)}catch(e){return this.throwError(e),Promise.reject(e)}for(let e of y)this.bindWorkFetcher(e);n===void 0&&(n=`inherit`),n===`inherit`&&this.works===dO&&(n=`initial`);let b=this.currentMode,x=y.initial,S=x.work.observers[0],C=S?{workCode:S.work.workCode,panoIndex:S.panoIndex}:{workCode:x.work.workCode,panoIndex:0},w=(a=x.mode)==null?S?`Panorama`:`Mapview`:a,T={};if(n===`inherit`){let e=this.getCurrentState(),[t]=y.filter(t=>t.workCode===e.workCode);if(t)C={workCode:e.workCode,panoIndex:e.panoIndex},w=e.mode,T={longitude:e.latitude,latitude:e.latitude,fov:e.fov,distance:e.distance,offset:e.offset.clone()};else{n={mode:b};let e=(s=(o=y[0])==null?void 0:o.observers)==null?void 0:s[this.panoIndex];e?(n.workCode=e.work.workCode,n.panoIndex=e.panoIndex):typeof y.initial.panoIndex==`number`?(n.workCode=y.initial.work.workCode,n.panoIndex=y.initial.panoIndex):(n.mode===`Panorama`||n.mode===`VRPanorama`||n.mode===`XRPanorama`)&&(n.mode=`Mapview`),n.mode===b&&(n.longitude=this.camera.pose.longitude,n.latitude=this.camera.pose.latitude,n.fov=this.camera.pose.fov)}}if(n===`initial`&&(typeof x.panoIndex==`number`&&(C={workCode:x.work.workCode,panoIndex:x.panoIndex}),x.mode&&(w=x.mode),T={longitude:x.longitude,latitude:x.latitude,fov:x.fov,distance:x.distance,offset:(c=x.offset)==null?void 0:c.clone()}),typeof n==`object`){if(w=(u=n.mode)==null?b:u,typeof n.panoIndex==`number`){let e=y.getObserver({workCode:(f=(d=n.workCode)==null?x.work.workCode:d)==null?``:f,panoIndex:n.panoIndex});e&&(C={workCode:e.work.workCode,panoIndex:e.panoIndex})}T={longitude:n.longitude,latitude:n.latitude,fov:n.fov,distance:n.distance,offset:n.offset?new l.Vector3().copy(n.offset):void 0}}let E=(p=g.duration)==null?this.modeChangeDuration:p;(w===`Floorplan`||w===`Topview`||w===`Mapview`)&&b===w&&(E=0);let D=`fly`;(w===`Panorama`||w===`VRPanorama`||w===`XRPanorama`)&&b===w&&(D=(m=g.effect)==null?`fade`:m),this.emit(`works.request`,$(`works.request`,{input:t,works:y,userAction:i}));let O=(e,t,r)=>{let a=this.getCurrentState(),o=Object.assign(Object.assign({mode:e},t),r);n===`inherit`&&(o=this.getCurrentState()),this.pano=t;let s=Object.assign(Object.assign({initial:{state:o,currentState:a,duration:E,effect:D,userAction:i}},this.commonParams()),this.controllerInits[e]),c=kD[o.mode].initAnimationEndState(s);if(this.controller&&b===e)this.controller.updateWork(y,c,{effect:D,duration:E},i)===!1&&(this.controller.destroy(),this.controller=this.applyController(e,s));else{if(this.controller)this.controller.destroy();else{let t=kD[e].initAnimationEndState(s);this.camera.setFromPose(t),this.emit(`camera.update`,$(`camera.update`,{state:this.getCurrentState(),userAction:i}))}this.controller=this.applyController(e,s);let t=$(`mode.change`,{prevMode:b,mode:e,state:c,userAction:i});try{this.emit(`mode.change`,t)}catch(e){console.error(e)}}this.state.workCode=this.pano.workCode,this.state.panoIndex=this.pano.panoIndex,this.updateTime(this.currentUpdateArgs.time,0,...this.currentUpdateArgs.args)};uO.set(this,y);let k=Promise.resolve();if(w===e.Mode.Floorplan||w===e.Mode.Topview||w===e.Mode.Mapview||w===e.Mode.Model){this.modelScene.loaded===!1&&(this.camera.setFromPose(T),qC(this.state,this.camera.pose));let e=this.modelScene.setModels(y,_);k=Promise.all(e.map(e=>e.loadedReady)).then(()=>{this.needsRender=!0,O(w,C,T),this.emit(`camera.update`,$(`camera.update`,{state:this.getCurrentState(),userAction:i}))})}else{O(w,C,T);let e=this.controller,t=!1;this.modelScene.autoRefine=!1;let n=()=>{this.works===y&&t===!1&&(this.needsRender=!0,this.emit(`camera.update`,$(`camera.update`,{state:this.getCurrentState(),userAction:i})),t=!0,this.modelScene.autoRefine=!0),e.off(`pano.arrived`,n),e.off(`pano.cancel`,n)},r=this.modelScene.setModels(y,_);k=Promise.all(r.map(e=>e.initReady)).then(q),e.once(`pano.arrived`,n),e.once(`pano.cancel`,n),setTimeout(n,((h=g.duration)==null?this.modeChangeDuration:h)+1e3)}return this.emit(`works.load`,$(`works.load`,{input:t,userAction:i,works:y})),k.then(()=>this.ready()).then(()=>{var e;this.emit(`works.ready`,$(`works.ready`,{input:t,userAction:i,works:y})),(e=this.analysis)==null||e.work(y)})}reset(){let e=this.loadWorkTask.then(()=>this.reset_());return this.loadWorkTask=e.catch(e=>{this.throwError(e)}),e}reset_(){return new Promise(e=>{var t;this.controller&&(this.controller.destroy(),this.controller=void 0);let n=this.modelScene.parameter;n.pano0&&n.pano0.map.dispose(),n.pano1&&n.pano1.map!==((t=n.pano0)==null?void 0:t.map)&&n.pano1.map.dispose(),n.set({pano0:null,pano1:null,modelAlpha:1}),uO.set(this,dO),this.modelScene.setModels(dO,{forceReplaceImmediately:!0}),this.renderer&&this.modelScene.update(this.renderer,this.camera),this.needsRender=!0,this.currentMode=`Panorama`,this.pano={workCode:``,panoIndex:0},this.camera.setFromPose({distance:0,fov:nO,longitude:0,latitude:0,offset:new l.Vector3(0,0,0)}),this.state={mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance},this.camera.needsRender=!1,this.needsRender=!1,e()})}changeMode(t,n={},r,i=!0,a=!1){return new Promise((o,s)=>{var c,l,u,d;if(!this.renderer)throw Error(`renderer is not initialized.`);n=Object.assign({},n);let f=0;this.controller&&(f=typeof r==`number`?r:(c=r==null?void 0:r.duration)==null?this.modeChangeDuration:c);let p=`fly`;this.controller&&typeof r==`object`&&r.effect&&(p=r.effect);let m=typeof n.panoIndex==`number`?{workCode:(d=(l=n.workCode)==null?(u=this.work)==null?void 0:u.workCode:l)==null?``:d,panoIndex:n.panoIndex}:this.pano;if(!e.Mode.hasOwnProperty(t)){let e=Error(`mode "${t}" is not existed`);this.throwError(e),s(e);return}if((t===e.Mode.Panorama||t===e.Mode.VRPanorama||t===e.Mode.XRPanorama)&&!this.works.getObserver(m)){let e=Error(`PanoId ${mb(m)} not existed.`);this.throwError(e),s(e);return}(t===e.Mode.Floorplan||t===e.Mode.Topview||t===e.Mode.Mapview||t===e.Mode.Model)&&this.modelScene.empty&&(f=0);let h=this.controller,g=this.currentMode,_=()=>{if(this.controller&&this.controller.stopMomentumMovement(),this.controller&&a===!1&&g===t)t===e.Mode.Panorama||t===e.Mode.Model||t===e.Mode.VRPanorama||t===e.Mode.XRPanorama?!gb(this.pano,m)&&`moveToPano`in this.controller&&typeof this.controller.moveToPano==`function`?this.controller.moveToPano(m,Object.assign({duration:f},n),i):this.controller.updateCamera(n,f,i).catch(q):(gb(this.pano,m)||(this.pano=m),this.controller.updateCamera(n,f,i).catch(q));else{let e=Object.assign(Object.assign({},n),m),r=Object.assign(Object.assign({initial:{state:e,currentState:this.getCurrentState(),duration:f,effect:p,userAction:i}},this.commonParams()),this.controllerInits[t]),a=kD[t].initAnimationEndState(r),o=$(`mode.change.request`,{prevMode:this.currentMode,mode:t,state:a,userAction:i});if(this.emit(`mode.change.request`,o),!o.defaultPrevented){h&&h.destroy(),this.controller=this.applyController(t,r);let e=$(`mode.change`,{prevMode:this.currentMode,mode:t,state:a,userAction:i});this.emit(`mode.change`,e)}}o()},v=nu.shared.getContext();if(v&&(typeof XRSession<`u`&&v instanceof XRSession&&v.end(),nu.shared.setContext(null)),t===e.Mode.VRPanorama)this.requestFullscreen(),$D().then(()=>_()).catch(e=>{let t=e instanceof Error?e:Error(String(e));this.exitFullscreen(),this.throwError(t),s(t)});else if(t===e.Mode.XRPanorama){if(!XE.isBackendXRCapable(this.renderer)){let e=Error(`XRPanorama 需要 WebGL2 回落后端。请在 new Five() 时传入 { forceWebGL: true }。后端在运行时无法切换,设备检测必须发生在 new Five() 之前。`);this.throwError(e),s(e);return}if(!XE.isBrowserXRCapable()){let e=Error(`当前浏览器不支持 WebXR(navigator.xr 不存在)。`);this.throwError(e),s(e);return}eO().then(e=>{nu.shared.setContext(e),a=!0;try{_()}catch(t){console.error(`[XR] changeMode 建立 XRPanorama controller 失败,结束 session: ${t instanceof Error?t.message:String(t)}`),Promise.resolve(e.end()).catch(()=>{}),nu.shared.setContext(null);let n=t instanceof Error?t:Error(String(t));this.throwError(n),s(n)}}).catch(e=>{let t=e instanceof Error?e:Error(String(e));this.throwError(t),s(t)})}else _()})}getPixels(e,t,n,r,i,a,o){return(0,u.__awaiter)(this,void 0,void 0,function*(){if(!this.renderer)throw Error(`renderer is not initialized.`);let s=K(),c=this.renderer.getPixelRatio(),u=this.renderer.getRenderTarget(),d=this.getSize(new l.Vector2),f=0,p=0,m=1,h=1,g,_,v,y,b;typeof e==`number`?(f=e,typeof t==`number`&&(p=t),typeof n==`number`&&(m=n),typeof r==`number`&&(h=r),g=i,_=a,b=o):(f=e.x,p=e.y,m=e.width,h=e.height,g=e.pixelRatio,_=e.flipY,v=e.helperVisible,y=e.skipPanorama,b=e.buffer),f=Math.floor(f),p=Math.floor(p),m=Math.floor(m),h=Math.floor(h),g=Math.floor(g==null?c:g),_=_==null?!1:_;let x=this.helperVisible,S=this.modelScene.parameter.modelAlpha;this.helperVisible=v==null?this.helperVisible:v,y&&(this.controller instanceof kD.Panorama||this.controller instanceof kD.VRPanorama||this.controller instanceof kD.XRPanorama)&&y===!0&&this.modelScene.parameter.set(`modelAlpha`,1),this.modelScene.update(this.renderer,this.camera);let C=this.getPixelsRenderTarget;C.setSize(m*g,h*g),this.renderer.setRenderTarget(C),this.camera.pixelRatio=g,this.camera.resolution.set(m,h),this.camera.setViewOffset(d.width,d.height,f,d.height-p-h,m,h),this.camera.aspect=d.width/d.height,this.camera.updateTime(s),this.scene.update(this.renderer,this.camera);let w=this.renderer.autoClear,T=this.renderer.autoClearColor,E=this.renderer.autoClearDepth,D=this.renderer.autoClearStencil,O=this.renderer.getClearColor(cO),k=this.renderer.getClearAlpha(),A=this.renderer.getScissorTest();this.renderer.autoClear=!0,this.renderer.autoClearColor=!0,this.renderer.autoClearDepth=!0,this.renderer.autoClearStencil=!0,this.renderer.setScissorTest(!1);let j=this.scene.background;this.scene.background=this.camera.isOrthographicCamera||this.backgroundAlpha<1?null:j,this.renderer.render(this.scene,this.camera),this.scene.background=j,this.renderer.autoClear=w,this.renderer.autoClearColor=T,this.renderer.autoClearDepth=E,this.renderer.autoClearStencil=D,this.renderer.setClearColor(O,k),this.renderer.setScissorTest(A),this.helperVisible=x,S===void 0?this.modelScene.parameter.reset(`modelAlpha`):this.modelScene.parameter.set(`modelAlpha`,S),this.renderer.setRenderTarget(u),this.camera.clearViewOffset(),this.camera.pixelRatio=c,this.camera.resolution.copy(d),this.camera.aspect=this.camera.resolution.width/this.camera.resolution.height,this.camera.updateTime(s),this.modelScene.update(this.renderer,this.camera),this.scene.update(this.renderer,this.camera);let M=m*g,N=h*g,ee=M*N,P=ee*4;if(b){if(b.length!==P)throw Error(`buffer length is not equals pixels ${P}`)}else b=new Uint8Array(P);let F=yield this.renderer.readRenderTargetPixelsAsync(C,0,0,M,N),I=M*4;if(F.length===P)b.set(F);else{let e=Math.ceil(I/256)*256;for(let t=0;t<N;t++){let n=t*e;b.set(F.subarray(n,n+I),t*I)}}if(!_){let e=ee/2;for(let t=0,n=0,r=0,i=0;n<e;n++)for(i=(N-Math.floor(n/M)-1)*M+n%M,r=0;r<4;r++)t=b[n*4+r],b[n*4+r]=b[i*4+r],b[i*4+r]=t}return b})}getElement(){var e;return(e=this.renderer)==null?void 0:e.domElement}render(e){let t=this.renderer;if(!t)return;let n=t.getRenderTarget();t.setRenderTarget(null);let r=t.autoClear,i=t.autoClearColor,a=t.autoClearDepth,o=t.autoClearStencil,s=t.getClearColor(cO),c=t.getClearAlpha(),l=t.getViewport(oO),u=t.getScissor(sO),d=t.getScissorTest();t.autoClear=!0,t.autoClearColor=!0,t.autoClearDepth=!0,t.autoClearStencil=!0;let f=t.getSize(lO),p=Math.floor(f.x*this.viewport.left),m=Math.floor(f.y*this.viewport.bottom),h=Math.floor(f.x*this.viewport.width),g=Math.floor(f.y*this.viewport.height);t.setClearColor(this.backgroundColor,this.backgroundAlpha),t.setViewport(p,m,h,g),t.setScissor(p,m,h,g);let _=this.viewport.bottom!==0||this.viewport.left!==0||this.viewport.width!==1||this.viewport.height!==1;t.setScissorTest(_);let v=this.scene.background;this.scene.background=this.camera.isOrthographicCamera||this.backgroundAlpha<1?null:v;let y=!0;if(this.controller&&this.controller.render()&&(y=!1),y){let e=this.fiveRenderer.render(t,this.scene,this.modelScene,this.camera,this.needsRender);this.poweredByRealsee&&e&&QD(t)}this.scene.background=v,t.autoClear=r,t.autoClearColor=i,t.autoClearDepth=a,t.autoClearStencil=o,t.setClearColor(s,c),t.setViewport(l),t.setScissor(u),t.setScissorTest(d),t.setRenderTarget(n),e&&nu.shared.add(e,!0)}updateTime(e,t,...n){if(this.currentUpdateArgs={time:e,args:n},this.destroyed)return;if(this.renderer&&ff.detectSupport(this.renderer),this.syncingState=this.syncState(e,t),this.controller&&this.controller.updateTime(e,t,...n),this.renderer&&(this.camera.pixelRatio=this.renderer.getPixelRatio(),this.getSize(this.camera.resolution),this.camera.aspect=this.camera.resolution.width/this.camera.resolution.height),this.camera.controllerMode=this.currentMode,this.camera.updateTime(e),this.renderer){let e=this.modelScene.loaded,t=this.modelScene.refined;this.modelScene.update(this.renderer,this.camera),e===!1&&this.modelScene.loaded===!0&&(this.controller&&this.controller.updateModel(this.modelScene),nu.shared.add(()=>{this.emit(`models.load`,$(`models.load`,{modelScene:this.modelScene}))},!0,0,10)),t===!1&&this.modelScene.refined===!0&&nu.shared.add(()=>{this.emit(`models.refined`,$(`models.refined`,{modelScene:this.modelScene}))},!0,0,10)}if(this.camera.autoNearFar){aO.makeEmpty(),aO.expandByObject(this.modelScene.boundingMesh);let t=aO.getBoundingSphere(iO),n=t.radius*2;t.containsPoint(this.camera.position)||(n=this.camera.position.distanceTo(t.center)+t.radius);let r=U(n/500,.001,.1),i=U(n,800);this.camera.near!==r&&(this.camera.near=r),this.camera.far!==i&&(this.camera.far=i),this.camera.updateTime(e)}if(this.renderer){let e=this.modelScene.visible;this.modelScene.visible=!1,this.scene.update(this.renderer,this.camera),this.modelScene.visible=e}if(this.syncingState=!1,this.controller&&this.controller.needsRender===!0&&(this.controller.needsRender=!1,this.needsRender=!0),this.camera.needsRender===!0&&(this.camera.needsRender=!1,this.needsRender=!0),this.modelScene.needsRender===!0&&(this.modelScene.needsRender=!1,this.needsRender=!0),this.scene.needsRender===!0&&(this.scene.needsRender=!1,this.needsRender=!0),this.pbmGaussianSplattingRenderMesh&&this.pbmGaussianSplattingRenderMesh.needsRender===!0&&(this.pbmGaussianSplattingRenderMesh.needsRender=!1,this.needsRender=!0),this.onlyRenderIfNeeds!==!0&&(this.needsRender=!0),this.paused===!0||this.renderer instanceof oC&&!this.renderer.isInitialized)return;let r=$(`render.prepare`,{needsRender:this.needsRender});this.emit(`render.prepare`,r),r.defaultPrevented&&(this.needsRender=!1);let i=this.needsRender;this.render(),this.needsRender=!1,this.emit(`render`,$(`render`,{needsRender:i})),this.hasListener(`fps`)&&(this.fps.testTime&&e-this.fps.testTime<1e3?this.fps.testCount++:(this.emit(`fps`,this.fps.testCount),this.fps.testTime=e,this.fps.testCount=0))}pause(){this.paused=!0,this.renderer&&this.renderer instanceof oC&&this.renderer.clear(!0,!0,!0)}play(){this.needsRender=!0,this.paused=!1}moveToPano(t,n={},r=!0){let{controller:i,renderer:a}=this;if(!i)return this.throwError(Error(`controller is not initialized.`)),Promise.resolve();if(!a)return this.throwError(Error(`renderer is not initialized.`)),Promise.resolve();typeof t==`number`&&this.pano.workCode&&(t={workCode:this.pano.workCode,panoIndex:t});let o=this.works.getObserver(t);if(!o)return this.throwError(Error(`pano ${JSON.stringify(t)} not existed.`)),Promise.resolve();let s={workCode:o.work.workCode,panoIndex:o.panoIndex};return`moveToPano`in i&&typeof i.moveToPano==`function`?i.moveToPano(s,n,r):o&&(this.pano=s,this.once(`initAnimation.start`,e=>{n.moveStartCallback&&n.moveStartCallback(e.state)}),this.once(`initAnimation.end`,e=>{n.moveEndCallback&&n.moveEndCallback(e.state)}),this.changeMode(e.Mode.Panorama,n,{effect:n.effect},r)),this.ready()}preloadPano(e,t=q){let n=this.works.getObserver(e);if(!n)return Promise.reject(Error(`Pano ${JSON.stringify(e)} never found`));let r=[`right`,`left`,`up`,`down`,`front`,`back`],i=K();return Promise.all(r.map(e=>{let t=mb({panoIndex:n.panoIndex,workCode:n.work.workCode}),r=Object.assign({key:`pano.${t}.${e}`},pl(this.imageOptions,[`size`,`format`,`quality`,`forceUseExifOrientation`,`mappings`])),i=n.work.getURL(n.images[e]),a=this.imageOptions.transform?this.imageOptions.transform(i,r):Gl(i,r);return gy(this.fiveId,n.work).preload(a)})).then(()=>{let e=K()-i;return t(e),e})}project2d(e,t=!1){if(!this.renderer)return null;if(t){let t=this.camera.position,n=e.clone().sub(t),r=new l.Raycaster(t,n.clone().normalize());r.params.Points={threshold:.1};let[i]=this.modelScene.intersectRaycaster(r);if(i&&i.distance+.01<n.length())return null}let n=e.clone().project(this.camera);if(Math.abs(n.z)>1)return null;let r=this.renderer.getSize(new l.Vector2),i=r.x*this.viewport.width,a=r.y*this.viewport.height,o=r.x*this.viewport.left+(n.x+1)/2*i,s=r.y*(1-this.viewport.bottom-this.viewport.height)+(-n.y+1)/2*a;return new l.Vector2(o,s)}getCurrentState(){return Object.assign(Object.assign({},this.camera.copyPose()),{mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex})}setState(e,t=!1,n=!0){var r,i,a,o,s,c,u,d,f,p;e=pl(e,[`mode`,`workCode`,`panoIndex`,`longitude`,`latitude`,`fov`,`offset`,`distance`]),e.offset&&!(e instanceof l.Vector3)&&(e.offset=new l.Vector3(e.offset.x,e.offset.y,e.offset.z));let m;if(typeof e.panoIndex==`number`)if(e.workCode)m={workCode:e.workCode,panoIndex:e.panoIndex};else{let t=(i=(r=this.work)==null?void 0:r.workCode)==null?``:i,n=this.state.workCode;this.works.filter(e=>e.workCode===n).length>0&&(t=n),m={workCode:t,panoIndex:e.panoIndex}}let h=(a=e.mode)==null?this.state.mode:a,g,_,v,y,b;if(this.controller&&this.controller.stopMomentumMovement(),this.state.mode!==h){if(h===`VRPanorama`){this.changeMode(`VRPanorama`,void 0,void 0,!0);return}if(h===`XRPanorama`){this.changeMode(`XRPanorama`,void 0,void 0,!0);return}let t={workCode:m==null?void 0:m.workCode,panoIndex:m==null?void 0:m.panoIndex};typeof e.longitude==`number`&&(t.longitude=e.longitude),typeof e.latitude==`number`&&(t.latitude=e.latitude),typeof e.fov==`number`&&(t.fov=e.fov),typeof e.distance==`number`&&(t.distance=e.distance),e.offset instanceof l.Vector3&&(t.offset=e.offset);let n=Object.assign(Object.assign({initial:{state:t,currentState:this.getCurrentState(),duration:this.modeChangeDuration,effect:`fly`,userAction:!1}},this.commonParams()),this.controllerInits[h]),r=kD[h].initAnimationEndState(n);g=r.longitude,_=r.latitude,v=r.fov,y=r.offset,b=r.distance}else g=(o=e.longitude)==null?this.state.longitude:o,_=(s=e.latitude)==null?this.state.latitude:s,v=(c=e.fov)==null?this.state.fov:c,y=(u=e.offset)==null?this.state.offset:u,b=(d=e.distance)==null?this.state.distance:d;let x={workCode:(m==null?this.pano:m).workCode,panoIndex:(m==null?this.pano:m).panoIndex,mode:h,longitude:g,latitude:_,fov:v,offset:y,distance:b};this.emit(`state.set`,$(`state.set`,{userAction:n,state:x})),KC(this.state,x)||(this.controller&&x.mode===`VRPanorama`&&x.mode!==this.state.mode?(GC(this.state,x),this.changeMode(`VRPanorama`)):this.controller&&x.mode===`XRPanorama`&&x.mode!==this.state.mode?(GC(this.state,x),this.changeMode(`XRPanorama`)):(GC(this.state,x),this.controller&&n&&(this.controller.userAction=!1),t&&this.state.mode===x.mode&&(this.syncingState=this.syncState(K(),0,t),this.syncingState&&((f=this.controller)==null||f.updateTime(K(),0),this.syncingState=!1)),this.emit(`state.change`,$(`state.change`,{userAction:n,state:this.state})),(p=this.analysis)==null||p.state(this.works,this.state)))}syncState(t,n,r=!1){let i=this.stateSynced;if(this.stateSynced=!1,!this.controller)return!1;if(this.state.mode!==this.currentMode){let e={mode:this.state.mode,workCode:this.state.workCode,panoIndex:this.state.panoIndex,longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset,distance:this.state.distance};return this.changeMode(this.state.mode,e,this.modeChangeDuration,this.controller.userAction),!0}if(!this.controller.isReady())return!1;if(this.controller instanceof kD.Model){if(BC(this.camera.pose.offset,this.state.offset)){let e={longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset};return this.controller.moveToPosition(this.state.offset,Object.assign(Object.assign({},e),{duration:r?0:void 0}),!1),!0}}else{let e={workCode:this.state.workCode,panoIndex:this.state.panoIndex};if(!gb(e,this.pano)&&`moveToPano`in this.controller&&typeof this.controller.moveToPano==`function`){let t={longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset,distance:this.state.distance};return this.controller.moveToPano(e,t,!1),!0}}if(this.controller instanceof kD.Floorplan||this.controller instanceof kD.Topview||this.controller instanceof kD.Mapview){let e=.2,t=Math.PI/45,n=r?this.state.fov:Mx(this.camera.pose.fov,this.state.fov,1),i=Math.abs(this.camera.pose.distance-this.state.distance),a=i>e*15?i/15:.2,o=r?this.state.distance:Mx(this.camera.pose.distance,this.state.distance,a),s=this.camera.pose.offset.distanceTo(this.state.offset),c=s>e*15?s/15:e,u=r?new l.Vector3().copy(this.state.offset):Nx(this.camera.pose.offset,this.state.offset,c),{longitude:d,latitude:f}=r?{longitude:this.state.longitude,latitude:this.state.latitude}:Px({longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude},{longitude:this.state.longitude,latitude:this.state.latitude},t);if(RC(n,this.camera.pose.fov)||BC(u,this.camera.pose.offset)||RC(o,this.camera.pose.distance)||RC(d,this.camera.pose.longitude,Math.PI*2)||RC(f,this.camera.pose.latitude)){let e={x:u.x,y:u.y,z:u.z},t={fov:n};return Object.assign(e,{distance:o}),Object.assign(t,{longitude:d,latitude:f}),this.controller.stopMomentumMovement(),this.controller.cameraMotion.set(t,0).catch(q),this.controller.locationMotion.set(e,0).catch(q),!0}}else{let e=Math.PI/45,t=r?this.state.fov:Mx(this.camera.pose.fov,this.state.fov,1),{longitude:n,latitude:i}=r?{longitude:this.state.longitude,latitude:this.state.latitude}:Px({longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude},{longitude:this.state.longitude,latitude:this.state.latitude},e),a=this.state.distance,o=new l.Vector3().copy(this.state.offset);if(RC(a,this.camera.pose.distance)&&(this.state.distance=this.camera.pose.distance),BC(o,this.camera.pose.offset)&&(this.state.offset=this.camera.pose.offset.clone()),RC(n,this.camera.pose.longitude,Math.PI*2)||RC(i,this.camera.pose.latitude)||RC(t,this.camera.pose.fov))return this.controller.stopMomentumMovement(),this.controller.cameraMotion.set({longitude:n,latitude:i,fov:t},0).catch(q),!0}if(this.stateSynced=!0,i===!1&&this.emit(`state.synced`,$(`state.synced`,{userAction:!1,state:this.state})),this.readyCallbacks.length&&this.stateSynced){let t=this.currentMode;if(!(t===e.Mode.Floorplan||t===e.Mode.Topview||t===e.Mode.Mapview||t===e.Mode.Model)||this.modelScene.loaded){let e=this.readyCallbacks.slice();this.readyCallbacks.length=0;for(let t of e)this.controller instanceof kD.Panorama&&t.tile===!0?this.readyCallbacks.push(t):t()}}return!1}ready(e={}){return new Promise(t=>{var n;this.readyCallbacks.push(Object.assign(t,{tile:(n=e.tile)==null?!1:n}))}).then(()=>{var e;return Promise.all([this.model.initReady,(e=this.renderer)==null?void 0:e.ready])}).then(q)}requestFullscreen(){var e;if(!WS)return;let t=(e=this.getElement())==null?void 0:e.parentNode;t&&`requestFullscreen`in t&&typeof document<`u`&&document.fullscreenElement===null&&t.requestFullscreen()}exitFullscreen(){typeof document<`u`&&document.fullscreenElement&&`exitFullscreen`in document&&document.exitFullscreen()}throwError(e){this.hasListener(`error`)?this.emit(`error`,e):console.error(e)}bindModel(e){let t=()=>{nu.shared.add(()=>{this.emit(`model.load`,$(`model.load`,{work:e.work,model:e,error:null}))},!0)},n=t=>{let{error:n}=t;this.emit(`model.error`,$(`model.error`,{work:e.work,model:e,error:n})),this.throwError(n)},r=()=>{this.emit(`model.changeShownFloor`,$(`model.changeShownFloor`,{work:e.work,model:e,error:null}))},i=t=>{this.emit(`models.tileLoad`,$(`models.tileLoad`,{work:e.work,model:e,tile:t.tile}))},a=t=>{this.emit(`models.tileUnload`,$(`models.tileUnload`,{work:e.work,model:e,tile:t.tile}))},o=()=>{e.removeEventListener(`load`,t),e.removeEventListener(`error`,n),e.removeEventListener(`changeShownFloor`,r),e.removeEventListener(`tileLoad`,i),e.removeEventListener(`tileUnload`,a),e.removeEventListener(`dispose`,o)};e.addEventListener(`load`,t),e.addEventListener(`error`,n),e.addEventListener(`changeShownFloor`,r),e.addEventListener(`tileLoad`,i),e.addEventListener(`tileUnload`,a),e.addEventListener(`dispose`,o),this.emit(`model.request`,$(`model.request`,{work:e.work,model:e,error:null}))}bindWorkFetcher(e){let t=this,n=e.workCode,r=e.allowHosts,i=new dl({get networkSubscribe(){return t.networkSubscribe},requestProxy(e){return Promise.resolve(e).then(e=>t.requestProxy(e,n)).then(e=>{let t=zb(e,r);return t instanceof Error?Promise.reject(t):t})}});_y(this.fiveId,e,i)}commonParams(){return{fiveId:this.fiveId,scene:this.scene,xrCustomObjectsScene:this.xrCustomObjectsScene,helper:this.helperGroup,camera:this.camera,renderer:this.renderer,viewport:this.viewport,element:this.getElement(),works:this.works,imageOptions:this.imageOptions,enableWheel:this.enableWheel,enableHDR:this._enableHDR,extraElements:this.extraElements,videoTexture:this.videoTexture,modelScene:this.modelScene}}applyController(t,n){if(!this.renderer)throw Error(`renderer is not initialized.`);let r=kD[t];this.currentMode=t;let i=new r(n);for(let e of jD)i.on(e,(...t)=>{if(this.emit(e,...t))return!1});{let e=kD[t].initAnimationEndState(n),r=n.initial.userAction;KC(this.state,e)||(GC(this.state,e),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state}))),this.emit(`currentState.change`,$(`currentState.change`,{userAction:r,state:this.getCurrentState()}))}return i.on(`camera.update`,e=>{var t;if(this.controller){let n=this.controller.getTargetState();e.userAction&&this.syncingState===!1&&this.state.mode===n.mode&&!KC(this.state,n)&&(GC(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:e.userAction,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}this.emit(`currentState.change`,$(`currentState.change`,{userAction:e.userAction,state:this.getCurrentState()}))}),i.on(`initAnimation.start`,e=>{var t;let{state:n,userAction:r}=e;r&&this.state.mode===n.mode&&!KC(this.state,n)&&(GC(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),i.on(`initAnimation.end`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!KC(this.state,n)&&(GC(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),i.on(`pano.moveTo`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!KC(this.state,n)&&(GC(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),i.on(`pano.arrived`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!KC(this.state,n)&&(GC(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),i.on(`pano.cancel`,e=>{var t;let{state:n,userAction:r}=e;r&&this.state.mode===n.mode&&!KC(this.state,n)&&(GC(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),i.on(`pano.moveTo`,e=>{let{userAction:t}=e;this.emit(`currentState.change`,$(`currentState.change`,{userAction:t,state:this.getCurrentState()}))}),i.on(`pano.request`,e=>{this.emit(`pano.request`,e),e.defaultPrevented||this.moveToPano(e.state,e.options,e.userAction)}),i.on(`vr.requestExit`,()=>{this.currentMode===e.Mode.VRPanorama&&(this.exitFullscreen(),this.changeMode(e.Mode.Panorama))}),i.on(`error`,e=>this.throwError(e)),i}removeEventListeners(){}get internalLightsEnabled(){let e=this.scene.children.find(e=>e.name===`internalLights`);return e?e.visible:!1}set internalLightsEnabled(e){let t=this.scene.children.find(e=>e.name===`internalLights`);t&&(t.visible=e),t=this.modelScene.children.find(e=>e.name===`internalLights`),t&&(t.visible=e)}get scissor(){return this.viewport}setScissor(e){return this.setViewport(e)}getPose(){let{longitude:e,latitude:t,fov:n,offset:r,distance:i}=this.camera.copyPose();return{longitude:e,latitude:t,fov:n,offset:r.clone(),distance:i}}getLongitudeAndLatitude(){let{longitude:e,latitude:t}=this.getPose();return{longitude:e,latitude:t}}getOffset(){return this.getPose().offset}getCameraLocal(){if(this.pano.workCode&&this.controller&&this.works){let e=this.works.getObserver(this.pano);if(e){let t=new l.Object3D;t.matrix.copy(e.matrix).premultiply(e.work.transform),t.matrix.decompose(t.position,t.quaternion,t.scale),t.matrixAutoUpdate=!1;let n=new l.Vector3(0,0,-1);n.applyQuaternion(this.camera.quaternion);let r=t.quaternion.clone().invert();return n.applyQuaternion(r),{theta:Math.atan2(n.x,-n.z),phi:-Math.asin(n.y),lookAtVector:n}}}return null}addPass(e){this.fiveRenderer.composer.addPass(e)}removePass(e){let t=this.fiveRenderer.composer.passes.indexOf(e);t!==-1&&this.fiveRenderer.composer.passes.splice(t,1)}insertPass(e,t){this.fiveRenderer.composer.insertPass(e,t)}get renderMode(){return this.fiveRenderer.renderMode}set renderMode(e){this.fiveRenderer.renderMode=e}get enableEDL(){return this.eyeDomeLightingPass.enabled}set enableEDL(e){this.eyeDomeLightingPass.enabled=e,this.needsRender=!0}get enableAdaptiveLuminance(){return this.adaptiveLuminancePass.enabled}set enableAdaptiveLuminance(e){this.adaptiveLuminancePass.enabled=e,this.needsRender=!0}get enableHDR(){return this._enableHDR}};pO.Mode={Panorama:`Panorama`,Model:`Model`,Floorplan:`Floorplan`,Topview:`Topview`,Mapview:`Mapview`,VRPanorama:`VRPanorama`,XRPanorama:`XRPanorama`},typeof window<`u`&&Object.assign(window,{__FIVE_DEBUG__:{THREE:l,constructor:pO,instances:fO}});var mO=class{static createButton(e){let t=document.createElement(`button`),n=`ENTER VR`,r=`calc(50% - 50px)`,i=`100px`,a;function o(){t.style.display=``,t.style.cursor=`pointer`,t.style.left=r,t.style.width=i,t.textContent=n,t.onmouseenter=function(){t.style.opacity=`1.0`},t.onmouseleave=function(){t.style.opacity=`0.5`},t.onclick=function(){if(!e)return;let t;try{t=e()}catch(e){s(e);return}t&&typeof t.then==`function`&&t.then(void 0,s)}}function s(e){let o=e instanceof Error?e.message:String(e);/forceWebGL/.test(o)&&(a&&clearTimeout(a),t.textContent=`需降级到 WebGL2`,t.style.left=`calc(50% - 75px)`,t.style.width=`150px`,a=setTimeout(function(){a=void 0,t.textContent=n,t.style.left=r,t.style.width=i},3e3))}function c(){t.style.display=``,t.style.cursor=`auto`,t.style.left=`calc(50% - 75px)`,t.style.width=`150px`,t.onmouseenter=null,t.onmouseleave=null,t.onclick=null}function l(){c(),t.textContent=`VR NOT SUPPORTED`}function u(e){e.style.position=`absolute`,e.style.bottom=`20px`,e.style.padding=`12px 6px`,e.style.border=`1px solid #fff`,e.style.borderRadius=`4px`,e.style.background=`rgba(0,0,0,0.1)`,e.style.color=`#fff`,e.style.font=`normal 13px sans-serif`,e.style.textAlign=`center`,e.style.opacity=`0.5`,e.style.outline=`none`,e.style.zIndex=`999`}if(`xr`in navigator)return t.id=`VRButton`,t.style.display=`none`,u(t),navigator.xr.isSessionSupported(`immersive-vr`).then(function(e){e?o():l()}),t;{let e=document.createElement(`a`);return window.isSecureContext===!1?(e.href=document.location.href.replace(/^http:/,`https:`),e.innerHTML=`WEBXR NEEDS HTTPS`):(e.href=`https://immersiveweb.dev/`,e.innerHTML=`WEBXR NOT AVAILABLE`),e.style.left=`calc(50% - 90px)`,e.style.width=`180px`,e.style.textDecoration=`none`,u(e),e}}};exports.AdaptiveLuminancePass=Gx,exports.AnimationFrameLoop=nu,exports.BoundingMesh=Wy,exports.Camera=Oa,exports.EffectComposer=sx,exports.EyeDomeLightingPass=qx,exports.Fetcher=dl,exports.Five=pO,exports.FivePass=lx,exports.FiveRenderer=BS,exports.FlowingFireworks3DPass=rS,exports.FlowingLight2DPass=Zx,exports.FlowingLight3DPass=Yx,exports.FullScreenQuad=cx,exports.GSPLAT_PIPELINE_AUTO=vi,exports.GSPLAT_PIPELINE_RASTER_CPU_SORT=yi,exports.GSPLAT_PIPELINE_RASTER_GPU_SORT=bi,exports.GaussianBlurPass=Jx,exports.Histogram=kx,exports.InternalWebGPURenderer=oC,exports.Model=Fy,exports.ModelScene=Ky,exports.Motion=Y,exports.NetworkSubscribe=ol,exports.PBMCustomNode=qt,exports.PBMGSObject=Mt,exports.PBMGaussianSplattingObject=Mt,exports.PBMGaussianSplattingNodeMaterial=gr,exports.PBMGaussianSplattingRenderMesh=Ei,exports.PBMGroup=wt,exports.PBMMesh=kt,exports.PBMMeshBasicMaterial=Di,exports.PBMMeshBasicNodeMaterial=zc,exports.PBMMeshPanoOnlyMaterial=Oi,exports.PBMMeshPanoOnlyNodeMaterial=Gc,exports.PBMMeshPhongMaterial=ki,exports.PBMMeshPhongNodeMaterial=Vc,exports.PBMMeshPhysicalMaterial=Ai,exports.PBMMeshPhysicalNodeMaterial=Uc,exports.PBMPanoFilter=Yt,exports.PBMPointCloud=pn,exports.PBMPointCloudMaterial=sn,exports.PBMSkinnedMesh=At,exports.PBMUpdateable=Kt,exports.PBMVertexMarkFlag=Gt,exports.PROXY_CONTROLLER_EVENT_NAMES=jD,exports.PanoCircleMesh=bC,exports.PanoCircleMeshCustom=IC,exports.PanoCircleMeshSolid=OC,exports.Parameter=Z,exports.Scene=fC,exports.Subscribe=Bt,exports.TextureLoader=mu,exports.Tile=Qp,exports.Tile3D=my,exports.Tile3DModel=my,exports.TileCache=Ih,exports.TileNode=Th,exports.TileRequestScheduler=Nh,exports.Tileset=Hh,exports.Trajectory=kh,exports.TrajectoryNode=Ah,exports.Work=tx,exports.WorkResolvedObserver=ix,exports.XRButton=mO,exports.controllersDefaultInitArgs=AD,exports.coordinatesToVector=ha,exports.createDebugBoundingMesh=qp,exports.createWorks=ax,exports.customNodesCacheKey=Jt,exports.defaultImageURLTransform=Gl,exports.draco=rf,exports.getViewportScale=ID,exports.headingToLongitude=va,exports.imageSupport=Ol,exports.isBoundingVolume=Hp,exports.isPanoId=_b,exports.loadAt3d=td,exports.loadDome=ad,exports.loadDomez=fd,exports.loadGltf=xp,exports.loadPbm=Nu,exports.loadPly=gd,exports.longitudeToHeading=_a,exports.makeBoundingVolume=Up,exports.panoEqual=gb,exports.panoParse=hb,exports.panoStringify=mb,exports.parseWork=nx,exports.registerPBMMaterials=Jc,exports.vectorToCoordinates=ga,exports.workToJson=Zy;