@micrio/client 6.1.14 → 7.0.1

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.
package/micrio.min.b.js DELETED
@@ -1,381 +0,0 @@
1
- /* Micrio Client 6.1.14
2
- * Copyright (C) 2015 - 2026 Q42 Internet B.V., Micrio <https://micr.io>
3
- *
4
- * GitHub: https://github.com/Q42/Micrio.Client
5
- * npm: https://www.npmjs.com/package/@micrio/client
6
- *
7
- * Authored by Marcel Duin <marcel@micr.io>, 2015 - present
8
- * Co-authored by AI (2025 - present)
9
- *
10
- * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
11
- * and associated documentation files (the "Software"), to deal in the Software without
12
- * restriction, including without limitation the rights to use, copy, modify, merge, publish,
13
- * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
14
- * Software is furnished to do so, subject to the following conditions:
15
- *
16
- * The above copyright notice and this permission notice shall be included in all copies or
17
- * substantial portions of the Software.
18
- *
19
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
20
- * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
22
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
- */
25
-
26
- const _css=document.createElement('style');
27
- _css.className='micrio-interface';_css.textContent=`html {
28
- --micrio-color: #fff;
29
- --micrio-color-hover: #45A4E4;
30
- --micrio-border-radius: 4px;
31
- --micrio-background: rgba(41,41,41,0.75);
32
- --micrio-background-filter: blur(8px);
33
- --micrio-popover-background: rgba(41,41,41,0.75);
34
- --micrio-scrubber-background: rgba(255,255,255,.25);
35
-
36
- --micrio-icon-size: 18px;
37
- --micrio-text-align: left;
38
- --micrio-line-height: 1.5em;
39
-
40
- --micrio-border-margin: 16px;
41
-
42
- --micrio-button-size: 48px;
43
- --micrio-button-shadow: 0 4px 8px rgba(0,0,0,.33);
44
-
45
- --micrio-marker-size: 16px;
46
- --micrio-marker-text-color: #fff;
47
- --micrio-marker-text-shadow: 0px 2px 4px rgba(0,0,0,0.6);
48
- --micrio-marker-highlight: #00d4ee;
49
- --micrio-marker-color: #fff;
50
- --micrio-marker-border-radius: 100%;
51
- --micrio-marker-border-color: rgba(255,255,255,.2);
52
- --micrio-marker-border-size: 8px;
53
- --micrio-marker-icon: none;
54
- --micrio-marker-transition: background-color 0.25s ease, opacity 0.15s ease, border-width .15s ease, width .15s ease, height .15s ease;
55
-
56
- --micrio-popup-shadow: 0 8px 16px rgba(0,0,0,.33);
57
- --micrio-popup-padding: 16px;
58
-
59
- --micrio-progress-bar-background: rgba(255,255,255,.25);
60
- --micrio-progress-bar-height: 4px;
61
-
62
- --micrio-waypoint-size: 120px;
63
- }
64
- micr-io[data-light-mode] {
65
- --micrio-color: #000;
66
- --micrio-color-hover: #196DA6;
67
- --micrio-background: rgba(255,255,255,0.66);
68
- --micrio-progress-bar-background: rgba(0,0,0,.25);
69
- --micrio-popover-background: rgba(211,211,211,0.75);
70
- --micrio-scrubber-background: rgba(255,255,255,.5);
71
- }
72
- @media (prefers-color-scheme: light) {
73
- micr-io[data-auto-scheme] {
74
- --micrio-color: #000;
75
- --micrio-color-hover: #196DA6;
76
- --micrio-background: rgba(255,255,255,0.66);
77
- --micrio-progress-bar-background: rgba(0,0,0,.25);
78
- --micrio-popover-background: rgba(211,211,211,0.75);
79
- }
80
- }
81
- @media (max-width: 500px) {
82
- html {
83
- --micrio-border-margin: 5px;
84
- --micrio-button-size: 48px;
85
- }
86
- }
87
- micr-io { display: block; user-select: none; -webkit-touch-callout: none; overflow: hidden; position: relative; width: 100%; height: 100%; min-height: 200px; backface-visibility: hidden; -webkit-backface-visibility: hidden; background-repeat: no-repeat; background-position: center center; background-size: contain; container-type: size; }
88
- micr-io, micr-io button { font-family: var(--micrio-font-family, inherit); font-size: var(--micrio-font-size, inherit); background-color: var(--micrio-background-color, transparent); }
89
- micr-io h3 { font-weight: 600; }
90
- micr-io[dir="rtl"] { --micrio-text-align: right; }
91
- canvas.micrio { display: block; position: absolute; top: 0; left: 0; width: 100% !important; height: 100% !important; backface-visibility: hidden; user-select: none; -webkit-touch-callout: none; -webkit-user-select: none; }
92
- micr-io:not([static]) { overscroll-behavior: none; }
93
- micr-io[data-hooked]:not([data-panning]) > canvas.micrio { cursor: move; cursor: -webkit-grab; cursor: -moz-grab; cursor: -ms-grab; cursor: grab; -ms-content-zooming: none; -ms-touch-action: none; touch-action: none; }
94
- micr-io[data-panning] { cursor: -webkit-grabbing; cursor: -moz-grabbing; cursor: -ms-grabbing; cursor: grabbing; }
95
- micr-io[data-hooked][data-can-pan] > canvas.micrio { -ms-touch-action: pan-y; touch-action: pan-y; overscroll-behavior: initial; }
96
- micr-io > .micrio-grid { position: fixed; top: 0; left: 0; width: 100%; height: 100%; display: grid; grid-auto-flow: row dense; grid-gap: 0; will-change: transform; transform-origin: left top; --translate: none; --scale: 1; transform: var(--translate) scale3d(var(--scale), var(--scale), 1); }
97
- micr-io > .micrio-grid > button { background: transparent; border: none; padding: 0; margin: 0; cursor: pointer; pointer-events: auto; grid-area: auto / auto / span 1 / span 1; pointer-events: auto; }
98
- micr-io > .micrio-grid > button.focussed, micr-io > .micrio-grid.grid-pan-zoom, micr-io > .micrio-grid.grid-pan-zoom > button { pointer-events: none; }
99
-
100
-
101
- micrio-article p:first-child{margin-top:0}micrio-article p:last-child{margin-bottom:0}micrio-article a{color:var(--micrio-color)}micrio-article img{max-width:100%}
102
-
103
- micrio-audio-controller{display:contents}
104
-
105
- micrio-button-group{display:block;box-shadow:var(--micrio-button-shadow);border-radius:var(--micrio-border-radius)}
106
- micrio-button-group:empty{display:none}
107
- micrio-button-group .micrio-button{border-radius:0}
108
- micrio-button-group>micrio-button:first-child>.micrio-button,micrio-button-group>micrio-zoom-buttons:first-child>micrio-button:first-child>.micrio-button{border-radius:var(--micrio-border-radius) var(--micrio-border-radius) 0 0}
109
- micrio-button-group>micrio-button:last-child>.micrio-button,micrio-button-group>micrio-fullscreen:last-child>micrio-button:last-child>.micrio-button{border-radius:0 0 var(--micrio-border-radius) var(--micrio-border-radius)}
110
- @media(max-width:500px){micrio-button-group .micrio-button{height:calc(var(--micrio-button-size) - 4px)}
111
- }
112
-
113
- micrio-button{display:contents}
114
- .micrio-button{margin:0;padding:0 8px;cursor:pointer;box-sizing:border-box;display:flex;align-items:center;justify-content:center;transition:opacity .25s ease;font:inherit;font-size:90%;position:relative;touch-action:none;color:var(--micrio-color);background:var(--micrio-button-background,var(--micrio-background,none)) center center no-repeat;background-size:24px;min-width:var(--micrio-button-size);height:var(--micrio-button-size);border:none;border-radius:var(--micrio-border-radius);box-shadow:var(--micrio-button-shadow);backdrop-filter:var(--micrio-background-filter);text-decoration:none}
115
- .micrio-button:hover{outline:none}
116
- .micrio-button.transparent,.micrio-button.transparent:hover{background-color:transparent;backdrop-filter:none}
117
- .micrio-button>*{transition:opacity .25s ease}
118
- .micrio-button:disabled{pointer-events:none;cursor:default}
119
- .micrio-button:disabled>*{opacity:.4}
120
- .micrio-button.no-click{pointer-events:none}
121
- .micrio-button img{pointer-events:none;max-width:100%;max-height:100%}
122
- .micrio-button>*{height:var(--micrio-icon-size)!important;width:var(--micrio-icon-size);font-size:var(--micrio-icon-size);fill:var(--micrio-color)}
123
- .micrio-button.active{color:var(--micrio-color-hover)}
124
- .micrio-button.active svg{fill:var(--micrio-color-hover)}
125
- @media(hover:hover){.micrio-button:hover,.micrio-button:focus{background-color:var(--micrio-button-background-hover,var(--micrio-button-background,var(--micrio-background)));color:var(--micrio-color-hover);position:relative;z-index:1}
126
- .micrio-button:hover svg,.micrio-button:focus svg{fill:var(--micrio-color-hover);stroke:var(--micrio-color-hover)}
127
- .micrio-button:focus{outline:1px solid var(--micrio-color-hover)}
128
- }
129
-
130
- micrio-controls{position:absolute;right:var(--micrio-border-margin);bottom:var(--micrio-border-margin);padding:0;margin:0;transition:transform .25s ease,opacity .25s ease;direction:rtl;z-index:2}
131
- micrio-controls.hidden:not(:hover){transform:translateX(calc(100% + var(--micrio-border-margin)));opacity:0;pointer-events:none}
132
- micrio-controls .primary:not(.portrait){right:calc(50% + var(--micrio-border-margin))}
133
- micrio-controls .primary.portrait{bottom:calc(50% + var(--micrio-border-margin))}
134
- micrio-controls .grid-close{top:var(--micrio-border-margin);bottom:auto;position:absolute;right:0}
135
- micr-io[data-switching]>micrio-controls,micr-io[data-tour-active]>micrio-controls{opacity:0;pointer-events:none}
136
- micrio-controls>micrio-button,micrio-controls>menu{padding:0;margin:8px 0;display:block;width:var(--micrio-button-size)}
137
- micrio-controls menu.ctrl-lang{position:relative;padding:0;margin:8px 0;width:var(--micrio-button-size);min-height:var(--micrio-button-size)}
138
- micrio-controls .lang-items{position:absolute;right:100%;top:0;display:none;flex-direction:row;background:var(--micrio-background);backdrop-filter:var(--micrio-background-filter);border-radius:var(--micrio-border-radius);box-shadow:var(--micrio-button-shadow);white-space:nowrap}
139
- micrio-controls menu.ctrl-lang:hover .lang-items,micrio-controls menu.ctrl-lang:focus-within .lang-items{display:flex}
140
- micrio-controls .lang-items micrio-button{--micrio-button-shadow:none;--micrio-background-filter:none}
141
- micrio-controls .lang-items .micrio-button{padding:0}
142
- micrio-controls .lang-items .micrio-button>span{width:var(--micrio-button-size)}
143
- micrio-controls .lang-items .micrio-button.active{background:var(--micrio-color-hover);color:var(--micrio-button-background,var(--micrio-background))}
144
-
145
- micrio-details{position:absolute;bottom:var(--micrio-border-margin);left:var(--micrio-border-margin);padding:var(--micrio-popup-padding);font-size:.9em;max-width:410px;user-select:text;white-space:normal;box-sizing:border-box;color:var(--micrio-color);background:var(--micrio-background);backdrop-filter:var(--micrio-background-filter);box-shadow:var(--micrio-popup-shadow);border-radius:var(--micrio-border-radius);transition:all .5s ease}
146
- micrio-details details{display:block}
147
- micrio-details summary{cursor:pointer;list-style:none}
148
- micrio-details summary::-webkit-details-marker{display:none}
149
- micrio-details small{display:block;font-style:italic;font-weight:400}
150
- micrio-details>*{margin:0;overflow:hidden;text-overflow:ellipsis}
151
- micrio-details a{color:var(--micrio-color-hover,inherit)}
152
- micrio-details .close{position:absolute;top:0;left:calc(100% + 8px)}
153
- @media(max-width:600px){micrio-details{max-width:calc(100% - 10px)}
154
- micrio-details details:not([open]) cite{display:none}
155
- micrio-details details:not([open]) summary::marker,micrio-details details:not([open]) summary::-webkit-details-marker{display:inline-block;content:'?';font-size:20px;font-weight:700;line-height:20px;margin-right:5px}
156
- micrio-details .close{position:absolute;top:auto;left:auto;right:0;bottom:calc(100% + 8px)}
157
- }
158
-
159
- micrio-dial{position:absolute;bottom:var(--micrio-border-margin);width:320px;max-width:calc(100vw - calc(2 * (var(--micrio-button-size) + 4 * var(--micrio-border-margin))));max-width:calc(100cqw - calc(2 * (var(--micrio-button-size) + 4 * var(--micrio-border-margin))));left:50%;transform:translateX(-50%);height:calc(var(--micrio-button-size)*0.6);touch-action:none;background-color:transparent;cursor:w-resize;overflow:hidden}
160
- micrio-dial::before,micrio-dial::after{content:'';display:block;width:100%;position:absolute;background-position:var(--micrio-dial-offset,0px)}
161
- micrio-dial::before{height:50%;top:25%;background-image:repeating-linear-gradient(to right,#8888 0%,#8888 0.5%,transparent 1%,transparent 2.5%)}
162
- micrio-dial::after{height:100%;background-image:repeating-linear-gradient(to right,#fff8 0%,#fff8 0.5%,transparent 1%,transparent 20%)}
163
- micrio-dial span{position:absolute;display:block;bottom:0;line-height:calc(var(--micrio-button-size)*0.6);left:50%;transform:translateX(calc(-50% + 5px));color:var(--micrio-color);opacity:.85;pointer-events:none;text-shadow:1px 1px 3px #000,-1px -1px 3px #000;font-size:smaller}
164
-
165
- micrio-error{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;pointer-events:none;z-index:20;max-width:80%}
166
- micrio-error>micrio-icon{font-size:3em;opacity:.5;margin-bottom:8px}
167
- micrio-error>p{margin:0;font-size:.9em;opacity:.7;line-height:1.4}
168
-
169
- micrio-fullscreen{display:contents}
170
-
171
- micrio-gallery-item{display:block;width:100%;height:300px;position:relative;overflow:hidden;border-radius:var(--micrio-border-radius)}
172
- micrio-gallery-item img{width:100%;height:100%;object-fit:contain;cursor:pointer;transition:opacity .25s}
173
- micrio-gallery-item .nav{position:absolute;top:50%;transform:translateY(-50%);z-index:2;background:rgba(0,0,0,.5);color:#fff;border:none;padding:8px 12px;cursor:pointer;font-size:1.2em;border-radius:var(--micrio-border-radius)}
174
- micrio-gallery-item .nav.prev{left:8px}
175
- micrio-gallery-item .nav.next{right:8px}
176
- micrio-gallery-item .caption{padding:8px;text-align:center;font-size:.85em;opacity:.7}
177
- micrio-gallery-item .counter{position:absolute;bottom:8px;right:8px;background:rgba(0,0,0,.5);color:#fff;padding:2px 8px;border-radius:4px;font-size:.75em}
178
-
179
- micrio-gallery{position:absolute;bottom:0;left:0;width:100%;z-index:2;pointer-events:none}
180
- micrio-gallery>*{pointer-events:all}
181
-
182
- svg.micrio-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-.125em}svg.micrio-icon.small{height:.75em}
183
-
184
- micrio-logo-org{display:contents}
185
- micrio-logo-org a{position:absolute;top:calc(var(--micrio-border-margin) * 2);right:calc(var(--micrio-border-margin) * 2);z-index:1;display:block}
186
- micrio-logo-org img{max-height:64px;display:block}
187
-
188
- micrio-logo{display:contents}
189
- micrio-logo a{position:absolute;top:calc(var(--micrio-border-margin) * 2);left:calc(var(--micrio-border-margin) * 2);z-index:2;width:22px;height:22px;transition:transform .25s ease;display:block;cursor:pointer}
190
- micrio-logo a:hover{transform:rotate3d(0,0,1,-90deg)}
191
- micrio-logo a::before,micrio-logo a::after{display:block;content:'';position:absolute;transform:rotate3d(0,0,1,45deg);will-change:transform;box-sizing:unset}
192
- micrio-logo a::before{border:3px solid #00d4ee;width:16px;height:16px}
193
- micrio-logo a.loading::before{animation:micrio-logo-spin 1s infinite ease-out}
194
- micrio-logo a::after{top:8px;left:8px;width:6px;height:6px;background:#c5ff5b;outline:1px solid #c5ff5b}
195
- micrio-logo a.loading::after{animation:micrio-logo-spin .5s infinite ease-out}
196
- @keyframes micrio-logo-spin{from{transform:rotate3d(0,0,1,45deg)}to{transform:rotate3d(0,0,1,135deg)}}
197
-
198
- micrio-main{display:contents}
199
-
200
- micrio-marker-content{display:block;position:relative;padding:var(--micrio-popup-padding);overflow-y:auto;user-select:text;color:var(--micrio-color);background:var(--micrio-background);backdrop-filter:var(--micrio-background-filter);box-shadow:var(--micrio-popup-shadow);border-radius:var(--micrio-border-radius);box-sizing:border-box;text-align:var(--micrio-text-align)}
201
- micrio-marker-content>*{--micrio-button-background:none;--micrio-background-filter:none;--micrio-button-shadow:none}
202
- micrio-marker-content .micrio-progress-bar.container{background:transparent;backdrop-filter:none}
203
- micrio-marker-content h1{font-size:1.5em;font-weight:600;margin:0 0 1.25em 0}
204
- micrio-marker-content p{white-space:pre-line}
205
- micrio-marker-content figure.hidden{display:none}
206
- micrio-marker-content figure>div.micrio-media>*:first-child{width:100%}
207
- micrio-marker-content micrio-media{margin:calc(-1 * var(--micrio-popup-padding));margin-bottom:0;width:auto;--micrio-background:transparent}
208
- micrio-marker-content micrio-media:not(:last-child){margin-bottom:var(--micrio-popup-padding)}
209
- micrio-marker-content article:last-child{margin-bottom:var(--micrio-popup-padding)}
210
- micrio-marker-content button{padding:0;margin:0 calc(-1 * var(--micrio-popup-padding)) var(--micrio-popup-padding) calc(-1 * var(--micrio-popup-padding))}
211
- micrio-marker-content button:disabled{cursor:default}
212
- micrio-marker-content figcaption{padding:10px;font-style:italic;font-size:.9em;margin-bottom:var(--micrio-popup-padding);text-align:center}
213
- micrio-marker-content section{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));column-gap:5px;row-gap:5px;justify-items:center;margin-bottom:var(--micrio-popup-padding)}
214
- micrio-marker-content section button{color:inherit;border:none;display:block;width:100%;cursor:pointer;margin:0}
215
- micrio-marker-content section figure{padding:0;margin:0}
216
- micrio-marker-content section img{width:100%;display:block;object-fit:cover}
217
- @media(max-width:500px){micrio-marker-content section{display:block;float:right;width:100px;margin-left:var(--micrio-border-margin)}
218
- micrio-marker-content section>button:not(:nth-child(1)){display:none}
219
- micrio-marker-content section figcaption{display:none}
220
- }
221
-
222
- micrio-marker-popup{display:block;cursor:auto;pointer-events:all;position:absolute;top:var(--micrio-border-margin);left:var(--micrio-border-margin)}
223
- micrio-marker-popup.destroying{pointer-events:none}
224
- micrio-marker-popup>main{max-height:80vh;max-height:80cqh}
225
- micrio-marker-popup>aside{padding:var(--micrio-border-margin)}
226
- micrio-marker-popup>aside progress{display:none}
227
- @media(min-width:501px){micrio-marker-popup{width:440px;min-width:20%}micrio-marker-popup>aside{position:absolute;left:100%;top:0;padding-top:0}
228
- micrio-marker-popup>aside>.micrio-button{padding:0;margin:0 0 8px 0;display:block}
229
- }
230
- @media(max-width:500px){micrio-marker-popup>aside{position:relative;padding:0;display:flex;flex-direction:row-reverse;margin-bottom:var(--micrio-border-margin);align-items:center}
231
- micrio-marker-popup>aside progress{display:block;flex:1;opacity:0;pointer-events:none}
232
- micrio-marker-popup>aside .micrio-tour-controls{margin-bottom:0!important;display:flex}
233
- micrio-marker-popup>aside .micrio-button{display:block!important;height:var(--micrio-button-size);padding:0!important;margin:0 0 0 8px}
234
- micrio-marker-popup{width:auto;right:var(--micrio-border-margin);display:flex;bottom:calc(var(--micrio-button-size) + 2 * var(--micrio-border-margin));flex-direction:column;justify-content:space-between}
235
- micrio-marker-popup>main{max-height:40vh}
236
- }
237
- button.tour-step{height:auto;line-height:normal;vertical-align:middle;cursor:default}
238
-
239
- micrio-marker{position:absolute;display:block;transform:translate3d(var(--x,0),var(--y,0),0) translate(-50%,-50%) scale3d(var(--scale,1),var(--scale,1),1);top:0;left:0;will-change:transform}
240
- micrio-marker:not(.cluster):not(.no-fade){animation:micrio-marker-fade .25s forwards}
241
- micrio-marker.overlapped{display:none}
242
- @keyframes micrio-marker-fade{from{opacity:0}to{opacity:1}}
243
- micrio-marker.behind{pointer-events:none;opacity:0!important}
244
- micrio-marker.mat3d{transform:var(--mat);top:50%;left:50%;transform-style:preserve-3d}
245
- micrio-marker.mat3d button{position:absolute;transform:translate3d(-50%,-50%,0)}
246
- micrio-marker button{display:block;width:var(--micrio-marker-size);height:var(--micrio-marker-size);color:var(--micrio-marker-text-color);position:relative;cursor:pointer;font:inherit;padding:0;margin:0;background:transparent none center center no-repeat;background-image:var(--micrio-marker-icon);background-size:contain;border:none}
247
- micrio-marker label{position:absolute;top:50%;left:100%;text-align:var(--micrio-text-align);cursor:pointer;transform:translate(0,-50%);padding-left:10px;max-width:170px;width:max-content;white-space:pre-wrap;font-size:90%;font-weight:600;line-height:1em;text-shadow:var(--micrio-marker-text-shadow);opacity:0;pointer-events:none;transition:opacity .1s ease}
248
- micrio-marker:hover{z-index:2}
249
- micrio-marker:hover label,.show-titles micrio-marker label{opacity:1}
250
- @media(max-width:640px){micrio-marker label{font-size:12px}}
251
- .show-titles micrio-marker label{pointer-events:all}
252
- micrio-marker label.static{transform:translate(-50%,4px) scale3d(calc(1/var(--scale,1)),calc(1/var(--scale,1)),1)}
253
- micrio-marker.default button{box-sizing:content-box;background-clip:content-box;border-radius:var(--micrio-marker-border-radius);border:var(--micrio-marker-border-size) solid var(--micrio-marker-border-color);transition:var(--micrio-marker-transition);background-color:var(--micrio-marker-color)}
254
- micrio-marker.default:hover,micrio-marker.default.hovered,micrio-marker.default.opened{z-index:1}
255
- micrio-marker.default:hover button,micrio-marker.default.hovered button,micrio-marker.default.opened button{background-color:var(--micrio-marker-highlight);border-width:0;width:calc(var(--micrio-marker-size,25px) + var(--micrio-marker-border-size,3px)*2);height:calc(var(--micrio-marker-size,25px) + var(--micrio-marker-border-size,3px)*2)}
256
- micrio-marker.has-icon{--micrio-marker-icon:none}
257
- micrio-marker.has-custom-icon{--micrio-marker-size:32px}
258
- micrio-marker.default.has-icon button{color:#fff;width:calc(var(--micrio-marker-size)+24px);height:calc(var(--micrio-marker-size)+24px);background-color:var(--micrio-marker-border-color);border:none}
259
- micrio-marker.default.has-icon.opened button svg,micrio-marker.default.has-icon.hovered button svg,micrio-marker.default.has-icon:hover button svg{color:var(--micrio-marker-highlight)}
260
- micrio-marker.default.has-custom-icon button{background-color:transparent}
261
- micrio-marker.default.has-custom-icon.opened button,micrio-marker.default.has-custom-icon.hovered button,micrio-marker.default.has-custom-icon:hover button{background-color:var(--micrio-marker-highlight,var(--micrio-marker-color))}
262
- micrio-marker.cluster button{border:2px solid var(--micrio-marker-color);background:var(--micrio-cluster-marker-background,#fff);color:var(--micrio-cluster-marker-color,#000);width:calc(var(--micrio-marker-size)+12px);height:calc(var(--micrio-marker-size)+12px);border-radius:100%;box-sizing:content-box}
263
- micrio-marker.cluster:hover button{background:var(--micrio-marker-highlight,#fff);border-color:var(--micrio-marker-highlight,#fff)}
264
- micrio-marker.cluster label{pointer-events:none;display:none}
265
- micrio-marker img{max-width:100%;max-height:100%;display:block;margin:auto}
266
-
267
- micrio-markers{pointer-events:none;position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;will-change:width,height,top,left,opacity;perspective:inherit}
268
- micrio-markers:empty{display:none}
269
- micrio-markers>*{pointer-events:all}
270
- micrio-markers.inactive>*{pointer-events:none}
271
- micrio-markers.is360{transition:opacity .25s}
272
- micrio-markers.is360.inactive{opacity:0}
273
-
274
- micrio-media-controls{display:block}
275
- micrio-media-controls aside.controls-wrapper{display:flex;align-items:center;width:100%;--micrio-background:var(--micrio-background,#000)}
276
- micrio-media-controls micrio-button{border-radius:0;margin:0;border:none}
277
- micrio-media-controls micrio-button:last-child{margin-right:16px}
278
- micrio-media-controls>*{--micrio-button-background:none;--micrio-background-filter:none;--micrio-button-shadow:none}
279
- :fullscreen micrio-media-controls{position:absolute;bottom:5px;left:50%;transform:translateX(-50%);width:430px;max-width:90vw;max-width:90cqw;border-radius:var(--micrio-border-radius)}
280
- micrio-media-controls .container{flex:1;display:flex;align-items:center;gap:8px;padding:0 8px}
281
- micrio-media-controls .bars{flex:1;height:4px;background:var(--micrio-progress-bar-background,var(--micrio-color-hover));cursor:pointer;position:relative;border-radius:2px}
282
- micrio-media-controls .bar{position:absolute;top:0;left:0;height:100%;border-radius:2px;background:var(--micrio-color)}
283
- micrio-media-controls .time{font-size:90%;white-space:nowrap;font-variant-numeric:tabular-nums;color:var(--micrio-color);text-align:center;min-width:50px;padding:0;display:block}
284
-
285
- micrio-media{display:block}
286
- micrio-media figure{position:relative;margin:0;padding:0}
287
- micrio-media figure video,micrio-media figure audio{width:100%;display:block}
288
- micrio-media figure figcaption{padding:5px 10px;font-size:.85em;opacity:.7;text-align:center;background:var(--micrio-background)}
289
- micrio-media figure iframe{width:100%;border:none;display:block}
290
- micrio-media figure:has(video){width:auto}
291
- micrio-media figure.videotour{position:fixed;bottom:var(--micrio-border-margin);left:50%;transform:translateX(-50%);width:500px;max-width:90vw;display:flex;flex-direction:column;background:var(--micrio-button-background,var(--micrio-background,none));border-radius:var(--micrio-border-radius);box-shadow:var(--micrio-button-shadow);backdrop-filter:var(--micrio-background-filter);margin:0;padding:0;z-index:5}
292
- micrio-media figure.hidden{display:none!important}
293
- micrio-media figure .overlay{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:1;background:rgba(0,0,0,.3);transition:opacity .3s ease}
294
- micrio-media figure .overlay.hidden{opacity:0;pointer-events:none}
295
- micrio-media figure .overlay micrio-button{--micrio-button-size:80px;--micrio-icon-size:40px;--micrio-border-radius:100%;--micrio-button-background:rgba(0,0,0,.6);--micrio-button-shadow:none;--micrio-background-filter:none;pointer-events:none}
296
-
297
- micrio-menu{padding:0;margin:0;transition:background .2s ease,box-shadow .2s ease}
298
- .micrio-menu-action{font-family:inherit;background:transparent;display:block;border:none;padding:0 24px;font-size:.9em;cursor:pointer;text-decoration:none;border-radius:0;color:inherit;text-shadow:inherit;box-sizing:border-box;text-align:center}
299
- @media(max-width:500px){micrio-menu{font-size:1em}.micrio-menu-action{width:100%;margin-bottom:10px;padding:6px 0}}
300
- @media(min-width:501px){micrio-menu{float:left;position:relative}micrio-menu:not(:focus-within):not(:hover) .items{display:none}.micrio-menu-action{height:var(--micrio-button-size);line-height:var(--micrio-button-size);width:100%;text-align:var(--micrio-text-align);white-space:pre;font-weight:600}.items micrio-menu{float:none}.items .micrio-menu-action{width:100%}.micrio-menu-action:hover,.micrio-menu-action:focus{text-shadow:none!important;color:var(--micrio-color-hover)!important}.items{max-height:calc(100vh - 160px);overflow-y:auto;overflow-x:hidden}micrio-menu strong micrio-icon{margin-left:10px;line-height:0;vertical-align:1px}}
301
-
302
- micrio-minimap canvas{position:absolute;bottom:var(--micrio-border-margin);right:5px;transform-origin:right bottom;display:block;background-size:100%;transition:opacity .2s ease;cursor:grab;-ms-content-zooming:none;-ms-touch-action:none;touch-action:none;border-radius:var(--micrio-border-radius)}
303
- micrio-minimap canvas:not(:hover).hidden{opacity:0;pointer-events:none}
304
- micrio-minimap canvas.dragging{cursor:grabbing}
305
- micrio-minimap canvas.controls{right:calc(var(--micrio-border-margin) + var(--micrio-button-size) + 8px)}
306
- @media(max-width:800px){micrio-minimap canvas{transform:scale3d(.5,.5,1);pointer-events:none;right:65px}}
307
-
308
- micrio-popover{display:contents}
309
- dialog::backdrop{color:#fff;animation:micrio-popover-bg .2s forwards;backdrop-filter:blur(8px)}
310
- @keyframes micrio-popover-bg{from{background:#0000}to{background:var(--micrio-popover-background)}}
311
- dialog{position:relative;animation:micrio-popover-fade .5s forwards;background:transparent;border:none;overflow:visible;padding:0;pointer-events:all;max-width:90vw;max-height:90vh}
312
- @keyframes micrio-popover-fade{from{opacity:0}to{opacity:1}}
313
- dialog>aside{--micrio-background-filter:none;position:absolute;z-index:1}
314
- dialog:not(.article){display:flex}
315
- @media(min-width:640px){
316
- dialog:not(.article){width:calc(85vw - 56px);height:calc(9/16*85vw);width:calc(85cqw - 56px);height:calc(9/16*85cqw)}
317
- dialog>aside{display:block;left:100%;margin-left:var(--micrio-border-margin);top:0}
318
- }
319
- @media(max-width:639px){
320
- dialog:not(.article){width:100%;height:100%;flex-direction:column}
321
- dialog>aside{position:fixed;top:var(--micrio-border-margin);right:var(--micrio-border-margin)}
322
- dialog :global(div.micrio-media>*:first-child){border-radius:0}
323
- }
324
- @media(min-aspect-ratio:16/9){dialog:not(.article){height:75vh;width:calc(16/9*75vh);height:75cqh;width:calc(16/9*75cqh)}}
325
- dialog:not(.article)>micrio-media{flex:1}
326
- dialog:not(.article)>micrio-media>figure{height:100%}
327
- dialog:not(.article)>micrio-media>figure iframe,
328
- dialog:not(.article)>micrio-media>figure video{height:calc(100% - var(--micrio-button-size))}
329
- dialog>micrio-marker-content{width:25vw;width:25cqw;min-width:unset;max-width:320px}
330
- dialog.article{width:540px}
331
- dialog.article article{text-shadow:none;color:var(--micrio-color);background:var(--micrio-background);padding:20px;box-sizing:border-box;max-height:calc(90cqh - 48px);max-height:calc(90vh - 48px);overflow-x:hidden;overflow-y:auto;border-radius:var(--micrio-border-radius)}
332
- dialog.article h2{text-align:center}
333
-
334
- micrio-progress-bar{display:flex;width:auto;color:var(--micrio-color);background:var(--micrio-background);line-height:8px;flex:1;align-items:center;cursor:default}
335
- micrio-progress-bar .bars{flex:1;display:flex;height:var(--micrio-progress-bar-height);background:var(--micrio-progress-bar-background);position:relative}
336
- micrio-progress-bar .bars>*{height:100%;width:100%;display:block;box-sizing:border-box;position:relative;cursor:pointer;overflow:hidden}
337
- micrio-progress-bar .bars>*::before{display:block;position:absolute;content:' ';background:var(--micrio-color);height:100%;pointer-events:none;width:var(--progress,0%);will-change:width}
338
- micrio-progress-bar .bars::after{content:'';position:absolute;display:block;width:16px;height:16px;left:var(--progress);top:50%;transform:translate3d(-50%,-50%,0);background-color:var(--micrio-color);pointer-events:none;border-radius:8px}
339
- micrio-progress-bar .time{display:block;font-size:90%;min-width:50px;text-align:center;padding:0 10px;font-variant-numeric:tabular-nums}
340
-
341
- micrio-progress-circle{position:absolute;top:50%;left:50%;pointer-events:none;transform:translate(-50%,-50%) rotateZ(-90deg);z-index:10}
342
- micrio-progress-circle svg{display:block}
343
- micrio-progress-circle circle{transition:stroke-dashoffset .25s ease}
344
-
345
- micrio-serial-tour{position:absolute;bottom:0;left:0;right:0;z-index:5;background:var(--micrio-background);backdrop-filter:var(--micrio-background-filter);padding:8px var(--micrio-border-margin);display:flex;align-items:center;gap:8px;direction:ltr;box-shadow:0 -2px 10px rgba(0,0,0,.3)}
346
- micrio-serial-tour micrio-button{--micrio-button-shadow:none;--micrio-background-filter:none;--micrio-button-background:none}
347
-
348
- micrio-subtitles{position:absolute;bottom:calc(var(--micrio-border-margin) + var(--micrio-button-size) + 16px);left:50%;transform:translateX(-50%);z-index:3;pointer-events:none;text-align:center;max-width:80%}
349
- micrio-subtitles.raised{bottom:calc(var(--micrio-border-margin) + var(--micrio-button-size) + 80px)}
350
- micrio-subtitles p{display:inline;background:var(--micrio-background);color:var(--micrio-color);padding:4px 12px;border-radius:var(--micrio-border-radius);font-size:.85em;line-height:1.6;backdrop-filter:var(--micrio-background-filter)}
351
-
352
- micrio-toolbar{display:contents}
353
- micrio-toolbar menu.micrio-toolbar{position:absolute;top:calc(var(--micrio-border-margin) - (var(--micrio-button-size) / 2 - 27px));left:var(--micrio-border-margin);margin:0;padding:0;color:#fff;text-shadow:1px 1px 2px #000;transition:transform .25s ease;z-index:1}
354
- @media(max-width:500px){micrio-toolbar .micrio-button.toggle{position:absolute;top:var(--micrio-border-margin);left:0;height:34px;width:34px;box-shadow:none;z-index:2}
355
- micrio-toolbar .micrio-button.toggle.indent{left:35px}
356
- micrio-toolbar menu.micrio-toolbar{transform:translate3d(0,0,0);width:100%;height:100%;background:rgba(0,0,0,0.75);top:0;left:0;padding:32px 0;overflow-y:auto;overflow-x:hidden;box-sizing:border-box;backdrop-filter:var(--micrio-background-filter);z-index:1}
357
- micrio-toolbar menu.micrio-toolbar:not(.shown){transform:translate3d(calc(-100% - var(--micrio-border-margin) * 2),0,0)}
358
- }
359
- @media(min-width:501px){micrio-toolbar menu.indent{margin-left:calc(var(--micrio-border-margin) * 2 + 25px)}
360
- micrio-toolbar menu>.micrio-menu:not(:hover)>button.micrio-menu{margin-bottom:-15px}
361
- micrio-toolbar .micrio-toolbar>micrio-menu{color:#fff;margin-right:var(--micrio-border-margin);border-radius:var(--micrio-border-radius);overflow:hidden}
362
- micrio-toolbar .micrio-toolbar>micrio-menu:hover,micrio-toolbar .micrio-toolbar>micrio-menu:focus-within{backdrop-filter:var(--micrio-background-filter);background:var(--micrio-background);box-shadow:var(--micrio-button-shadow)}
363
- }
364
-
365
- micrio-tour{display:contents}
366
- micrio-tour .controls{position:absolute;bottom:var(--micrio-border-margin);left:50%;max-width:calc(100% - var(--micrio-border-margin) * 2);transform:translateX(-50%);box-sizing:border-box;display:flex;border-radius:var(--micrio-border-radius);box-shadow:var(--micrio-button-shadow);backdrop-filter:var(--micrio-background-filter);background-color:var(--micrio-button-background,var(--micrio-background,none));padding:0;transition:transform .2s ease;z-index:5}
367
- micrio-tour .controls>micrio-button{--micrio-button-background:none;--micrio-background-filter:none;--micrio-button-shadow:none;margin:0;border:none;border-radius:0}
368
- micrio-tour .controls .step-counter{height:var(--micrio-button-size);line-height:var(--micrio-button-size);padding:0 12px;font-size:90%;cursor:default;font-family:inherit;background:transparent;border:none;color:var(--micrio-color);display:flex;align-items:center}
369
-
370
- micrio-waypoint{display:block;position:absolute;transform-style:preserve-3d;width:0;height:0;top:50%;left:50%;--micrio-bb:var(--micrio-button-background);--micrio-bbh:var(--micrio-button-background-hover)}
371
- micrio-waypoint micrio-button{--micrio-button-background:var(--micrio-waypoint-background,var(--micrio-bb));--micrio-button-background-hover:var(--micrio-waypoint-background-hover,var(--micrio-bbh));--micrio-button-size:var(--micrio-waypoint-size);--micrio-border-radius:var(--micrio-waypoint-border-radius,100%);--micrio-icon-size:var(--micrio-waypoint-icon-size,calc(var(--micrio-button-size) - 50px));transform:translate3d(-50%,-50%,0) scale3d(.5,.5,1);pointer-events:all;transition:background-color .25s ease,opacity .25s ease,border-color .25s ease,transform .25s ease;border:var(--micrio-waypoint-border-size,var(--micrio-marker-border-size)) solid var(--micrio-waypoint-border-color,var(--micrio-marker-border-color));margin:0}
372
- micrio-waypoint micrio-button>svg{pointer-events:none;margin:0 auto}
373
- micrio-waypoint:hover micrio-button,micrio-waypoint.active micrio-button{transition:background-color .25s ease,opacity .25s ease,transform .25s ease;transform:translate3d(-50%,-50%,0) scale3d(.6,.6,1)}
374
- micrio-waypoint.clicked micrio-button{animation:micrio-waypoint-pulse .75s ease infinite alternate}
375
- @keyframes micrio-waypoint-pulse{from{transform:translate3d(-50%,-50%,0) scale3d(.5,.5,1)}to{transform:translate3d(-50%,-50%,0) scale3d(.75,.75,1)}}
376
- micrio-waypoint.direction-up micrio-button{/* up */}
377
- micrio-waypoint.direction-down micrio-button{/* down */}
378
-
379
- micrio-zoom-buttons{display:contents}`;
380
- document.head.insertBefore(_css,document.head.firstChild);
381
- !function(){function t(t){const i=new Set;return{subscribe:(e,s)=>(i.add(e),e(t),()=>i.delete(e)),set(e){t=e,i.forEach(t=>t(e))},update(i){this.set(i(t))}}}function i(t){let i;return t.subscribe(t=>{i=t})(),i}function e(){return Promise.resolve()}function s(t){return function(t){let i,e=!1;return s=>{i=s,e||(e=!0,Promise.resolve().then(()=>{e=!1,t(i)}))}}(function(t){let i=!0;return e=>{i?i=!1:t(e)}}(t))}var r=Symbol("micrio-provides"),a=new Set,n=class extends HTMLElement{constructor(...t){super(...t),this._props={}}static{this.markerImages=new Map}#t=[];#i=null;connectedCallback(){this._injectStyles(),this.onMount?.()}disconnectedCallback(){this.onDestroy?.(),this._cleanup()}setProps(t){Object.assign(this._props,t),this.onPropsChange?.()}checkRenderKey(t){return t===this.#i?(this.syncDisplay?.(),!1):(this.#i=t,!0)}watch(t,i){const e=t.subscribe(i);this.#t.push(e)}watchLater(t,i){let e=!0;const s=t.subscribe(t=>{e?e=!1:i(t)});this.#t.push(s)}watchLazy(t,i){this.watchWith(t,s(i))}watchOnce(t,i){let e;e=t.subscribe(t=>{i(t),e?.()}),this.#t.push(e)}watchWith(t,i){const e=t.subscribe(i);this.#t.push(e)}provide(t,i){let e=this[r];e||(this[r]=e=new Map),e.set(t,i)}inject(t){let i=this;for(;i;){const e=i[r];if(e?.has(t))return e.get(t);i=i.parentElement}}_injectStyles(){const t=this.constructor;if(t.styles&&!a.has(t.tag)){a.add(t.tag);const i=document.createElement("style");i.textContent=t.styles,i.setAttribute("data-micrio",t.tag),document.head.appendChild(i)}}_cleanup(){for(const t of this.#t)t();this.#t=[]}},o=(t,i={})=>new Promise(s=>{let r,a=!0;r=t.subscribe(t=>{a&&i.allowUndefined&&void 0===t||(a=!1,(void 0!==i.targetValue?t===i.targetValue:i.allowUndefined||void 0!==t)&&(r?r():e().then(()=>r()),s(t)))})}),h="6.1.14",c="https://b.micr.io/";var l=`https://viewer.${function(){try{const t=location.hostname;if(t.endsWith("micrio.dev"))return"micrio.dev";if(t.endsWith("micrio.net"))return"micrio.net"}catch{}return"micr.io"}()}/`,d="micrio-muted",m={id:"",version:h,path:c,width:0,height:0,tileSize:1024,lang:"en",settings:{camspeed:1,view:[0,0,1,1],restrict:[0,0,1,1],focus:[.5,.5],zoomLimit:1,fullscreen:!0,hookEvents:!0,hookScroll:!0,hookPinch:!0,hookDrag:!0,minimap:!0,doTourJumps:!0,audio:!0,startVolume:1,mutedVolume:0,_markers:{showTitles:!1,popupAnimation:{duration:200,x:-50},zoomOutAfterClose:!0},ui:{controls:{cultureSwitch:!0}},_360:{},_meta:{}}},u={STRINGS:{id:{r:!0},lang:{r:!0},"data-thumb":{f:"thumbSrc"},"data-title":{r:!0},"data-format":{r:!0},"data-extension":{r:!0,f:"tileExtension"},"data-tiles":{r:!0,f:"tilesId"},"data-path":{r:!0},"data-inittype":{f:"initType"},"data-start":{f:"gallery.startId"},"data-gallery-sort":{f:"gallery.sort"},"data-gallery-type":{f:"gallery.type"}},BOOLEANS:{"data-static":{},muted:{f:"audio",n:!0},"data-png":{r:!0,f:"isPng"},"data-webp":{r:!0,f:"isWebP"},"data-dz":{r:!0,f:"isDeepZoom"},"data-is360":{r:!0},"data-no-externals":{f:"noExternals"},"data-skipmeta":{f:"skipMeta"},"data-keeprendering":{f:"keepRendering"},"data-coverlimit":{f:"limitToCoverScale"},"data-events":{f:"hookEvents"},"data-keys":{f:"hookKeys"},"data-zooming":{f:"noZoom",n:!0},"data-scroll-zoom":{f:"hookScroll"},"data-pinch-zoom":{f:"hookPinch"},"data-dragging":{f:"hookDrag"},"data-two-finger-pan":{f:"twoFingerPan"},"data-control-zoom":{f:"controlZoom"},"data-ui":{f:"noUI",n:!0},"data-gtag":{f:"noGTag",n:!0},"data-controls":{f:"noControls",n:!0},"data-logo":{f:"noLogo",n:!0},"data-logo-org":{f:"noOrgLogo",n:!0},"data-toolbar":{f:"noToolbar",n:!0},"data-show-info":{f:"showInfo"},"data-social":{},"data-fullscreen":{},"data-minimap":{},"data-minimap-hide":{f:"alwaysShowMinimap",n:!0},"data-normalize-dpr":{f:"zoomLimitDPRFix"},"data-freemove":{f:"freeMove"},"data-force-path":{f:"forceInfoPath",r:!0}},NUMBERS:{"data-version":{r:!0},height:{r:!0},width:{r:!0},volume:{f:"startVolume"},"data-tilesize":{r:!0,f:"tileSize"},"data-camspeed":{},"data-zoomlimit":{f:"zoomLimit"},"data-minimap-height":{f:"minimapHeight"},"data-minimap-width":{f:"minimapWidth"},"data-mutedvolume":{f:"mutedVolume"},"data-width-cm":{f:"cmWidth"},"data-height-cm":{f:"cmHeight"},"data-gallery-cover-pages":{f:"gallery.coverPages"},lazyload:{dN:0},"data-elasticity":{f:"dragElasticity"},"data-skip-base-levels":{f:"skipBaseLevels"},"data-watermark-opacity":{f:"watermarkOpacity"}},ARRAYS:{"data-focus":{},"data-view":{}}},p=t=>JSON.parse(JSON.stringify(t));function g(t,i,e={}){if(!t||"object"!=typeof t)return i;for(const s in t){const r=t[s];if(r&&"object"==typeof r&&Object.getPrototypeOf(r)===Object.prototype){const t=i;t[s]&&"object"==typeof t[s]||(t[s]={}),g(r,t[s],e)}else{const t=i;e.mergeArrays&&t[s]instanceof Array&&r instanceof Array?t[s].push(...r):e.noOverwrite&&s in i||(t[s]=r)}}return i}var f,v="E001",b="E002",w="E003",y="E004",x="E005",k="E100",E="E101",T="E102",M="E103",C="E200",S="E201",A="E202",L="E203",P="E300",I="E301",_="E302",z="E303",D="E999",R={[v]:"You appear to be offline. Please check your internet connection and try again.",[b]:"The connection timed out. Please try again.",[w]:"Unable to load content due to security restrictions.",[y]:"The requested image or content could not be found.",[x]:"The server encountered an error. Please try again later.",[k]:"Your browser does not support WebGL, which is required to view this content. Please try a different browser.",[E]:"The graphics context was lost. The page will attempt to recover.",[T]:"There was a problem initializing the graphics. Please try refreshing the page.",[M]:"Your device is low on memory. Try closing other browser tabs or applications.",[C]:"The image data appears to be invalid or corrupted.",[S]:"The requested content could not be loaded.",[A]:"There was a problem processing the image information.",[L]:"This image uses an unsupported format version.",[P]:"Failed to load the image viewer engine. Please try refreshing the page.",[I]:"An error occurred in the image viewer. Please try refreshing the page.",[_]:"Failed to load the image. Please try again.",[z]:"Failed to load the tour. Some features may be unavailable.",[D]:"An unexpected error occurred. Please try refreshing the page."},O=class t extends Error{constructor(i,e){super(i),this.name="MicrioError",this.code=e?.code??D,this.displayMessage=e?.displayMessage??R[this.code],this.cause=e?.cause,this.statusCode=e?.statusCode,"captureStackTrace"in Error&&"function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,t)}static fromResponse(i,e){const s=i.status;let r=D;return 404===s?r=y:s>=500&&s<600?r=x:0===s?r=v:408!==s&&504!==s||(r=b),new t(`${e?e+": ":""}HTTP ${s}`,{code:r,statusCode:s})}static fromError(i,e){const s=i.message.toLowerCase();let r=D;return s.includes("network")||s.includes("internet")||s.includes("offline")?r=v:s.includes("timeout")?r=b:s.includes("cors")||s.includes("cross-origin")?r=w:s.includes("webgl")||s.includes("webglcontext")?r=k:s.includes("memory")||s.includes("out of memory")?r=M:(s.includes("wasm")||s.includes("webassembly"))&&(r=P),new t(`${e?e+": ":""}${i.message}`,{code:r,cause:i})}},X=new Map,Y=new Map,$=new Map,F=async(t,i)=>{if(!i&&X.has(t))return p(X.get(t));if(Y.has(t))return Y.get(t);if($.has(t))throw $.get(t)[1];const e=fetch(t+(i?(t.includes("?")?"&":"?")+Math.random():"")).then(async i=>{if(200==i.status)return i.json();{const e=O.fromResponse(i,`fetchJson(${t})`);throw $.set(t,[i.status,e.message]),e}}).then(e=>(i||X.set(t,e),Y.delete(t),p(e))).catch(i=>{throw Y.delete(t),i});return Y.set(t,e),e},B=new Map,V=new Map,N=new Map,H=new Map;async function U(t){if(!t||t.startsWith("http")||B.has(t))return;if(H.has(t))return H.get(t);const i=async function(t){const i=await F(`${l}${t}/bundle.json`);if(i?.images){for(const t of i.images)t?.id&&(t.settings&&(t.info.settings=t.settings,delete t.settings),B.set(t.id,t));t.startsWith("external/")&&i.images[0]?.id&&B.set(t,i.images[0])}i?.organisation&&(f=i.organisation);if(i?.spaces)for(const e of i.spaces)e?.id&&e?.data&&V.set(e.id,e.data);i?.album&&N.set(i.album.id,i.album)}(t);H.set(t,i);try{await i}finally{H.delete(t)}}var W={async getInfo(t){return(await this.getBundleImage(t))?.info},async getData(t){return(await this.getBundleImage(t))?.data},getDataSync:t=>B.get(t)?.data,getBundleImageSync:t=>B.get(t),getStepMarker(t){return this.getDataSync(t.micrioId)?.markers?.find(i=>i.id===t.markerId)},getSpaceData:t=>V.get(t),getOrganisation:()=>f,getAlbum:t=>N.get(t),async getBundleImage(t){if(t)return await U(t),B.get(t)}},G={arrowDown:[384,512,"M169.4 502.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 402.7 224 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 370.7-105.4-105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z"],arrowLeft:[512,512,"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 288 480 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-370.7 0 105.4-105.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"],arrowRight:[512,512,"M502.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l370.7 0-105.4 105.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"],arrowUp:[384,512,"M214.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 109.3 160 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-370.7 105.4 105.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z"],bars:[448,512,"M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"],chevronDown:[448,512,"M201.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 338.7 54.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"],circleExclamation:[512,512,"M256 512a256 256 0 1 1 0-512 256 256 0 1 1 0 512zm0-192a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm0-192c-18.2 0-32.7 15.5-31.4 33.7l7.4 104c.9 12.6 11.4 22.3 23.9 22.3 12.6 0 23-9.7 23.9-22.3l7.4-104c1.3-18.2-13.1-33.7-31.4-33.7z"],closedCaptioning:[512,512,"M0 128C0 92.7 28.7 64 64 64l384 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128zm152 80l32 0c4.4 0 8 3.6 8 8 0 13.3 10.7 24 24 24s24-10.7 24-24c0-30.9-25.1-56-56-56l-32 0c-30.9 0-56 25.1-56 56l0 80c0 30.9 25.1 56 56 56l32 0c30.9 0 56-25.1 56-56 0-13.3-10.7-24-24-24s-24 10.7-24 24c0 4.4-3.6 8-8 8l-32 0c-4.4 0-8-3.6-8-8l0-80c0-4.4 3.6-8 8-8zm168 8c0-4.4 3.6-8 8-8l32 0c4.4 0 8 3.6 8 8 0 13.3 10.7 24 24 24s24-10.7 24-24c0-30.9-25.1-56-56-56l-32 0c-30.9 0-56 25.1-56 56l0 80c0 30.9 25.1 56 56 56l32 0c30.9 0 56-25.1 56-56 0-13.3-10.7-24-24-24s-24 10.7-24 24c0 4.4-3.6 8-8 8l-32 0c-4.4 0-8-3.6-8-8l0-80z"],compress:[448,512,"M160 64c0-17.7-14.3-32-32-32S96 46.3 96 64l0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32l0-96zM32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-96 0zM352 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64zM320 320c-17.7 0-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0z"],ellipsisVertical:[128,512,"M64 144a56 56 0 1 1 0-112 56 56 0 1 1 0 112zm0 224c30.9 0 56 25.1 56 56s-25.1 56-56 56-56-25.1-56-56 25.1-56 56-56zm56-112c0 30.9-25.1 56-56 56s-56-25.1-56-56 25.1-56 56-56 56 25.1 56 56z"],expand:[448,512,"M32 32C14.3 32 0 46.3 0 64l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zM64 352c0-17.7-14.3-32-32-32S0 334.3 0 352l0 96c0 17.7 14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64zM320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-96 0zM448 352c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32l0-96z"],externalLink:[512,512,"M320 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l82.7 0-201.4 201.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L448 109.3 448 192c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-17.7-14.3-32-32-32L320 0zM80 96C35.8 96 0 131.8 0 176L0 432c0 44.2 35.8 80 80 80l256 0c44.2 0 80-35.8 80-80l0-80c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 80c0 8.8-7.2 16-16 16L80 448c-8.8 0-16-7.2-16-16l0-256c0-8.8 7.2-16 16-16l80 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 96z"],globe:[512,512,"M351.9 280l-190.9 0c2.9 64.5 17.2 123.9 37.5 167.4 11.4 24.5 23.7 41.8 35.1 52.4 11.2 10.5 18.9 12.2 22.9 12.2s11.7-1.7 22.9-12.2c11.4-10.6 23.7-28 35.1-52.4 20.3-43.5 34.6-102.9 37.5-167.4zM160.9 232l190.9 0C349 167.5 334.7 108.1 314.4 64.6 303 40.2 290.7 22.8 279.3 12.2 268.1 1.7 260.4 0 256.4 0s-11.7 1.7-22.9 12.2c-11.4 10.6-23.7 28-35.1 52.4-20.3 43.5-34.6 102.9-37.5 167.4zm-48 0C116.4 146.4 138.5 66.9 170.8 14.7 78.7 47.3 10.9 131.2 1.5 232l111.4 0zM1.5 280c9.4 100.8 77.2 184.7 169.3 217.3-32.3-52.2-54.4-131.7-57.9-217.3L1.5 280zm398.4 0c-3.5 85.6-25.6 165.1-57.9 217.3 92.1-32.7 159.9-116.5 169.3-217.3l-111.4 0zm111.4-48C501.9 131.2 434.1 47.3 342 14.7 374.3 66.9 396.4 146.4 399.9 232l111.4 0z"],image:[448,512,"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm64 80a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM272 224c8.4 0 16.1 4.4 20.5 11.5l88 144c4.5 7.4 4.7 16.7 .5 24.3S368.7 416 360 416L88 416c-8.9 0-17.2-5-21.3-12.9s-3.5-17.5 1.6-24.8l56-80c4.5-6.4 11.8-10.2 19.7-10.2s15.2 3.8 19.7 10.2l26.4 37.8 61.4-100.5c4.4-7.1 12.1-11.5 20.5-11.5z"],layerGroup:[512,512,"M232.5 5.2c14.9-6.9 32.1-6.9 47 0l218.6 101c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L13.9 149.8C5.4 145.8 0 137.3 0 128s5.4-17.9 13.9-21.8L232.5 5.2zM48.1 218.4l164.3 75.9c27.7 12.8 59.6 12.8 87.3 0l164.3-75.9 34.1 15.8c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L13.9 277.8C5.4 273.8 0 265.3 0 256s5.4-17.9 13.9-21.8l34.1-15.8zM13.9 362.2l34.1-15.8 164.3 75.9c27.7 12.8 59.6 12.8 87.3 0l164.3-75.9 34.1 15.8c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L13.9 405.8C5.4 401.8 0 393.3 0 384s5.4-17.9 13.9-21.8z"],link:[576,512,"M419.5 96c-16.6 0-32.7 4.5-46.8 12.7-15.8-16-34.2-29.4-54.5-39.5 28.2-24 64.1-37.2 101.3-37.2 86.4 0 156.5 70 156.5 156.5 0 41.5-16.5 81.3-45.8 110.6l-71.1 71.1c-29.3 29.3-69.1 45.8-110.6 45.8-86.4 0-156.5-70-156.5-156.5 0-1.5 0-3 .1-4.5 .5-17.7 15.2-31.6 32.9-31.1s31.6 15.2 31.1 32.9c0 .9 0 1.8 0 2.6 0 51.1 41.4 92.5 92.5 92.5 24.5 0 48-9.7 65.4-27.1l71.1-71.1c17.3-17.3 27.1-40.9 27.1-65.4 0-51.1-41.4-92.5-92.5-92.5zM275.2 173.3c-1.9-.8-3.8-1.9-5.5-3.1-12.6-6.5-27-10.2-42.1-10.2-24.5 0-48 9.7-65.4 27.1L91.1 258.2c-17.3 17.3-27.1 40.9-27.1 65.4 0 51.1 41.4 92.5 92.5 92.5 16.5 0 32.6-4.4 46.7-12.6 15.8 16 34.2 29.4 54.6 39.5-28.2 23.9-64 37.2-101.3 37.2-86.4 0-156.5-70-156.5-156.5 0-41.5 16.5-81.3 45.8-110.6l71.1-71.1c29.3-29.3 69.1-45.8 110.6-45.8 86.6 0 156.5 70.6 156.5 156.9 0 1.3 0 2.6 0 3.9-.4 17.7-15.1 31.6-32.8 31.2s-31.6-15.1-31.2-32.8c0-.8 0-1.5 0-2.3 0-33.7-18-63.3-44.8-79.6z"],minus:[448,512,"M0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32z"],pause:[384,512,"M48 32C21.5 32 0 53.5 0 80L0 432c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-352c0-26.5-21.5-48-48-48L48 32zm224 0c-26.5 0-48 21.5-48 48l0 352c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-352c0-26.5-21.5-48-48-48l-64 0z"],play:[448,512,"M91.2 36.9c-12.4-6.8-27.4-6.5-39.6 .7S32 57.9 32 72l0 368c0 14.1 7.5 27.2 19.6 34.4s27.2 7.5 39.6 .7l336-184c12.8-7 20.8-20.5 20.8-35.1s-8-28.1-20.8-35.1l-336-184z"],playCircle:[512,512,"M0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zM188.3 147.1c-7.6 4.2-12.3 12.3-12.3 20.9l0 176c0 8.7 4.7 16.7 12.3 20.9s16.8 4.1 24.3-.5l144-88c7.1-4.4 11.5-12.1 11.5-20.5s-4.4-16.1-11.5-20.5l-144-88c-7.4-4.5-16.7-4.7-24.3-.5z"],plus:[448,512,"M256 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 160-160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0 0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160 160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0 0-160z"],share:[512,512,"M307.8 18.4c-12 5-19.8 16.6-19.8 29.6l0 80-112 0c-97.2 0-176 78.8-176 176 0 113.3 81.5 163.9 100.2 174.1 2.5 1.4 5.3 1.9 8.1 1.9 10.9 0 19.7-8.9 19.7-19.7 0-7.5-4.3-14.4-9.8-19.5-9.4-8.8-22.2-26.4-22.2-56.7 0-53 43-96 96-96l96 0 0 80c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l160-160c12.5-12.5 12.5-32.8 0-45.3l-160-160c-9.2-9.2-22.9-11.9-34.9-6.9z"],video:[576,512,"M96 64c-35.3 0-64 28.7-64 64l0 256c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L96 64zM464 336l73.5 58.8c4.2 3.4 9.4 5.2 14.8 5.2 13.1 0 23.7-10.6 23.7-23.7l0-240.6c0-13.1-10.6-23.7-23.7-23.7-5.4 0-10.6 1.8-14.8 5.2L464 176 464 336z"],volumeHigh:[640,512,"M533.6 32.5c-10.3-8.4-25.4-6.8-33.8 3.5s-6.8 25.4 3.5 33.8C557.5 113.8 592 180.8 592 256s-34.5 142.2-88.7 186.3c-10.3 8.4-11.8 23.5-3.5 33.8s23.5 11.8 33.8 3.5C598.5 426.7 640 346.2 640 256S598.5 85.2 533.6 32.5zM473.1 107c-10.3-8.4-25.4-6.8-33.8 3.5s-6.8 25.4 3.5 33.8C475.3 170.7 496 210.9 496 256s-20.7 85.3-53.2 111.8c-10.3 8.4-11.8 23.5-3.5 33.8s23.5 11.8 33.8 3.5c43.2-35.2 70.9-88.9 70.9-149s-27.7-113.8-70.9-149zm-60.5 74.5c-10.3-8.4-25.4-6.8-33.8 3.5s-6.8 25.4 3.5 33.8C393.1 227.6 400 241 400 256s-6.9 28.4-17.7 37.3c-10.3 8.4-11.8 23.5-3.5 33.8s23.5 11.8 33.8 3.5C434.1 312.9 448 286.1 448 256s-13.9-56.9-35.4-74.5zM80 352l48 0 134.1 119.2c6.4 5.7 14.6 8.8 23.1 8.8 19.2 0 34.8-15.6 34.8-34.8l0-378.4c0-19.2-15.6-34.8-34.8-34.8-8.5 0-16.7 3.1-23.1 8.8L128 160 80 160c-26.5 0-48 21.5-48 48l0 96c0 26.5 21.5 48 48 48z"],volumeXmark:[576,512,"M48 352l48 0 134.1 119.2c6.4 5.7 14.6 8.8 23.1 8.8 19.2 0 34.8-15.6 34.8-34.8l0-378.4c0-19.2-15.6-34.8-34.8-34.8-8.5 0-16.7 3.1-23.1 8.8L96 160 48 160c-26.5 0-48 21.5-48 48l0 96c0 26.5 21.5 48 48 48zM367 175c-9.4 9.4-9.4 24.6 0 33.9l47 47-47 47c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l47-47 47 47c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-47-47 47-47c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-47 47-47-47c-9.4-9.4-24.6-9.4-33.9 0z"],xmark:[384,512,"M55.1 73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L147.2 256 9.9 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192.5 301.3 329.9 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.8 256 375.1 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192.5 210.7 55.1 73.4z"]},j=new Set(["chevron-down","link-ext"]),q={play:G.play,pause:G.pause,close:G.xmark,"play-filled":G.playCircle,a11y:G.globe,menu:G.bars,"zoom-in":G.plus,"zoom-out":G.minus,maximize:G.expand,minimize:G.compress,"volume-off":G.volumeXmark,"volume-up":G.volumeHigh,subtitles:G.closedCaptioning,"subtitles-off":G.closedCaptioning,"arrow-left":G.arrowLeft,"arrow-up":G.arrowUp,"arrow-right":G.arrowRight,"arrow-down":G.arrowDown,video:G.video,audio:G.volumeHigh,image:G.image,share:G.share,error:G.circleExclamation,"chevron-down":G.chevronDown,link:G.link,"link-ext":G.externalLink,"ellipsis-vertical":G.ellipsisVertical},Z=class extends n{static{this.tag="micrio-icon"}static{this.styles="svg.micrio-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-.125em}svg.micrio-icon.small{height:.75em}"}static{this.observedAttributes=["name","style"]}#e="close";#s;onMount(){this.#r(),this.#a()}attributeChangedCallback(t,i,e){"name"===t&&e&&(this.#e=e),this.isConnected&&(this.#r(),this.#a())}#r(){const t=this.inject("micrio")?.defaultSettings?.ui?.icons;if(t)switch(this.#e){case"zoom-in":this.#s=t.zoomIn;break;case"zoom-out":this.#s=t.zoomOut;break;case"maximize":this.#s=t.fullscreenEnter;break;case"minimize":this.#s=t.fullscreenLeave;break;case"close":this.#s=t.close;break;case"arrow-right":this.#s=t.next;break;case"arrow-left":this.#s=t.prev;break;case"arrow-up":this.#s=t.up;break;case"arrow-down":this.#s=t.down;break;case"play":this.#s=t.play;break;case"pause":this.#s=t.pause;break;case"subtitles":this.#s=t.subtitles;break;case"subtitles-off":this.#s=t.subtitlesOff;break;case"volume-off":this.#s=t.muted;break;case"volume-up":this.#s=t.unmuted;break;default:this.#s=void 0}else this.#s=void 0}#a(){const t=this.#s;if(t)return void(this.innerHTML=t);const i=q[this.#e];if(!i)return void(this.innerHTML="");const e="http://www.w3.org/2000/svg",s=document.createElementNS(e,"svg");s.setAttribute("xmlns",e),s.setAttribute("viewBox",`0 0 ${i[0]} ${i[1]}`),s.setAttribute("fill","currentColor"),s.classList.add("micrio-icon"),j.has(this.#e)&&s.classList.add("small");const r=document.createElementNS(e,"path");r.setAttribute("d",i[2]),s.appendChild(r),this.replaceChildren(s)}};customElements.define(Z.tag,Z);var K=class extends n{static{this.tag="micrio-button"}static{this.styles="micrio-button{display:contents}\n.micrio-button{margin:0;padding:0 8px;cursor:pointer;box-sizing:border-box;display:flex;align-items:center;justify-content:center;transition:opacity .25s ease;font:inherit;font-size:90%;position:relative;touch-action:none;color:var(--micrio-color);background:var(--micrio-button-background,var(--micrio-background,none)) center center no-repeat;background-size:24px;min-width:var(--micrio-button-size);height:var(--micrio-button-size);border:none;border-radius:var(--micrio-border-radius);box-shadow:var(--micrio-button-shadow);backdrop-filter:var(--micrio-background-filter);text-decoration:none}\n.micrio-button:hover{outline:none}\n.micrio-button.transparent,.micrio-button.transparent:hover{background-color:transparent;backdrop-filter:none}\n.micrio-button>*{transition:opacity .25s ease}\n.micrio-button:disabled{pointer-events:none;cursor:default}\n.micrio-button:disabled>*{opacity:.4}\n.micrio-button.no-click{pointer-events:none}\n.micrio-button img{pointer-events:none;max-width:100%;max-height:100%}\n.micrio-button>*{height:var(--micrio-icon-size)!important;width:var(--micrio-icon-size);font-size:var(--micrio-icon-size);fill:var(--micrio-color)}\n.micrio-button.active{color:var(--micrio-color-hover)}\n.micrio-button.active svg{fill:var(--micrio-color-hover)}\n@media(hover:hover){.micrio-button:hover,.micrio-button:focus{background-color:var(--micrio-button-background-hover,var(--micrio-button-background,var(--micrio-background)));color:var(--micrio-color-hover);position:relative;z-index:1}\n.micrio-button:hover svg,.micrio-button:focus svg{fill:var(--micrio-color-hover);stroke:var(--micrio-color-hover)}\n.micrio-button:focus{outline:1px solid var(--micrio-color-hover)}\n}"}#n;#o=[];#h=null;onMount(){this.#a()}onPropsChange(){this.#a()}onDestroy(){for(const t of this.#o)t();this.#o=[]}#a(){const t=this._props,i=!!t.href;let e=this.#n;const s=i?"a":"button";e&&e.tagName.toLowerCase()===s||(e&&e.remove(),e=document.createElement(s),e.className="micrio-button",this.appendChild(e),this.#n=e),e.className=`micrio-button ${t.type??""} ${t.className??""}`,e.classList.toggle("active",!!t.active),e.classList.toggle("no-click",!!t.noClick),i?(e.href=t.href,e.target=t.blankTarget?"_blank":""):e.disabled=!!t.disabled,e.setAttribute("title",t.title??""),e.setAttribute("aria-label",t.title??""),i?(e.removeAttribute("role"),e.removeAttribute("tabindex")):(e.setAttribute("role","button"),e.setAttribute("tabindex","0"));for(const h of this.#o)h();this.#o=[],this.#h||(this.#h=t=>{const i=this._props.onclick;i&&i(t)},e.addEventListener("click",this.#h)),t.onfocus&&(e.addEventListener("focus",t.onfocus),this.#o.push(()=>e.removeEventListener("focus",t.onfocus))),t.onpointerdown&&(e.addEventListener("pointerdown",t.onpointerdown),this.#o.push(()=>e.removeEventListener("pointerdown",t.onpointerdown)));const r=e.querySelector(":scope > micrio-icon, :scope > img");if(r&&r.remove(),t.type){const i=document.createElement("micrio-icon");i.setAttribute("name",t.type),e.appendChild(i)}else if(t.icon){const i=document.createElement("img");i.src=t.icon.src,i.alt="Icon",e.appendChild(i)}const a=[];for(const h of this.childNodes)h===e||h.nodeType!==Node.TEXT_NODE&&h.nodeType!==Node.ELEMENT_NODE||(a.push(h.textContent??""),h.remove());const n=a.join("").trim(),o=e.querySelector(":scope > .micrio-button-text");if(n)if(o)o.textContent=n;else{const t=document.createElement("span");t.className="micrio-button-text",t.textContent=n,e.appendChild(t)}else o&&o.remove()}};customElements.define(K.tag,K);var Q=class extends n{static{this.tag="micrio-button-group"}static{this.styles="micrio-button-group{display:block;box-shadow:var(--micrio-button-shadow);border-radius:var(--micrio-border-radius)}\nmicrio-button-group:empty{display:none}\nmicrio-button-group .micrio-button{border-radius:0}\nmicrio-button-group>micrio-button:first-child>.micrio-button,micrio-button-group>micrio-zoom-buttons:first-child>micrio-button:first-child>.micrio-button{border-radius:var(--micrio-border-radius) var(--micrio-border-radius) 0 0}\nmicrio-button-group>micrio-button:last-child>.micrio-button,micrio-button-group>micrio-fullscreen:last-child>micrio-button:last-child>.micrio-button{border-radius:0 0 var(--micrio-border-radius) var(--micrio-border-radius)}\n@media(max-width:500px){micrio-button-group .micrio-button{height:calc(var(--micrio-button-size) - 4px)}\n}"}};customElements.define(Q.tag,Q);var J=class extends n{static{this.tag="micrio-progress-bar"}static{this.styles="micrio-progress-bar{display:flex;width:auto;color:var(--micrio-color);background:var(--micrio-background);line-height:8px;flex:1;align-items:center;cursor:default}\nmicrio-progress-bar .bars{flex:1;display:flex;height:var(--micrio-progress-bar-height);background:var(--micrio-progress-bar-background);position:relative}\nmicrio-progress-bar .bars>*{height:100%;width:100%;display:block;box-sizing:border-box;position:relative;cursor:pointer;overflow:hidden}\nmicrio-progress-bar .bars>*::before{display:block;position:absolute;content:' ';background:var(--micrio-color);height:100%;pointer-events:none;width:var(--progress,0%);will-change:width}\nmicrio-progress-bar .bars::after{content:'';position:absolute;display:block;width:16px;height:16px;left:var(--progress);top:50%;transform:translate3d(-50%,-50%,0);background-color:var(--micrio-color);pointer-events:none;border-radius:8px}\nmicrio-progress-bar .time{display:block;font-size:90%;min-width:50px;text-align:center;padding:0 10px;font-variant-numeric:tabular-nums}"}#c={duration:0};onMount(){this.#a()}setProps(t){Object.assign(this.#c,t),this.isConnected&&this.#a()}#a(){const t=this.#c,i=t.currentTime??0,e=t.duration||1,s=Math.round(i/e*1e4)/100,r=function(t){if(isNaN(t))return"0:00";const i=t<0;i&&(t=-t);const e=Math.ceil(t),s=Math.floor(e/3600),r=Math.floor(e%3600/60),a=e%60,n=t=>t<10?"0"+t:""+t;return(i?"-":"")+(s?s+":"+n(r):""+r)+":"+n(a)}(t.ended||!i||i<=0?e:i-e),a=this.querySelector(":scope > .container");if(a){a.style.setProperty("--progress",`${s}%`),a.style.setProperty("--time",`'${r}'`);const t=a.querySelector(".time");return void(t&&(t.textContent=r))}const n=document.createElement("div");n.className="container",n.style.setProperty("--progress",`${s}%`),n.style.setProperty("--time",`'${r}'`),n.addEventListener("click",t=>t.stopPropagation()),n.addEventListener("keydown",t=>t.stopPropagation());const o=document.createElement("div");o.className="bars",n.appendChild(o);const h=document.createElement("div");h.className="time",h.textContent=r,n.appendChild(h),this.appendChild(n)}};customElements.define(J.tag,J);var tt=class extends n{static{this.tag="micrio-logo"}static{this.styles="micrio-logo{display:contents}\nmicrio-logo a{position:absolute;top:calc(var(--micrio-border-margin) * 2);left:calc(var(--micrio-border-margin) * 2);z-index:2;width:22px;height:22px;transition:transform .25s ease;display:block;cursor:pointer}\nmicrio-logo a:hover{transform:rotate3d(0,0,1,-90deg)}\nmicrio-logo a::before,micrio-logo a::after{display:block;content:'';position:absolute;transform:rotate3d(0,0,1,45deg);will-change:transform;box-sizing:unset}\nmicrio-logo a::before{border:3px solid #00d4ee;width:16px;height:16px}\nmicrio-logo a.loading::before{animation:micrio-logo-spin 1s infinite ease-out}\nmicrio-logo a::after{top:8px;left:8px;width:6px;height:6px;background:#c5ff5b;outline:1px solid #c5ff5b}\nmicrio-logo a.loading::after{animation:micrio-logo-spin .5s infinite ease-out}\n@keyframes micrio-logo-spin{from{transform:rotate3d(0,0,1,45deg)}to{transform:rotate3d(0,0,1,135deg)}}"}#l;#d;#m=!1;#u=[];onMount(){const t=this.inject("micrio");if(!t)return;const i=/micr\.io/.test(location.origin)&&self.parent==self?void 0:"_blank";this.#l=document.createElement("a"),this.#l.rel="noopener",this.#l.href="https://micr.io/",this.#l.title="Powered by Micrio",this.#l.setAttribute("aria-label","Micrio homepage"),i&&(this.#l.target=i),this.appendChild(this.#l),this.#u.push(t.loading.subscribe(t=>{clearTimeout(this.#d),t?this.#m||(this.#d=setTimeout(()=>{this.#m=!0,this.#p()},750)):(this.#m=!1,this.#p())}))}onDestroy(){clearTimeout(this.#d);for(const t of this.#u)t();this.#u=[]}#p(){this.#l&&this.#l.classList.toggle("loading",this.#m)}};customElements.define(tt.tag,tt);var it=class extends n{static{this.tag="micrio-article"}static{this.styles="micrio-article p:first-child{margin-top:0}micrio-article p:last-child{margin-bottom:0}micrio-article a{color:var(--micrio-color)}micrio-article img{max-width:100%}"}#c={};onMount(){this.#a()}setProps(t){Object.assign(this.#c,t),this.isConnected&&this.#a()}#a(){this.#c.html&&(this.innerHTML=this.#c.html)}};customElements.define(it.tag,it);var et=class extends n{static{this.tag="micrio-subtitles"}static{this.styles="micrio-subtitles{position:absolute;bottom:calc(var(--micrio-border-margin) + var(--micrio-button-size) + 16px);left:50%;transform:translateX(-50%);z-index:3;pointer-events:none;text-align:center;max-width:80%}\nmicrio-subtitles.raised{bottom:calc(var(--micrio-border-margin) + var(--micrio-button-size) + 80px)}\nmicrio-subtitles p{display:inline;background:var(--micrio-background);color:var(--micrio-color);padding:4px 12px;border-radius:var(--micrio-border-radius);font-size:.85em;line-height:1.6;backdrop-filter:var(--micrio-background-filter)}"}#c={};#u=[];onMount(){const t=this.inject("volume")?.subscribe(()=>this.#g());t&&this.#u.push(t),this.#g()}setProps(t){Object.assign(this.#c,t),this.isConnected&&(this.classList.toggle("raised",!!this.#c.raised),this.#g())}#g(){if(!this.#c.src)return void(this.innerHTML="");if(!this.inject("micrio")||!window.micrioCaptionsEnabled)return void(this.innerHTML="");const t=this.closest("micrio-media")?.querySelector("video");if(!t)return;let i=t.querySelector("track");i||(i=document.createElement("track"),i.kind="captions",i.default=!0,t.appendChild(i)),i.src=this.#c.src;const e=()=>{const t=i.track?.activeCues;t&&t.length?this.innerHTML=`<p>${t[0].text}</p>`:this.innerHTML=""};i.addEventListener("load",e),t.addEventListener("timeupdate",e)}onDestroy(){for(const t of this.#u)t();this.#u=[]}};customElements.define(et.tag,et);var st={en:{close:"Close",zoomIn:"Zoom in",zoomOut:"Zoom out",fullscreenToggle:"Toggle fullscreen",switchLanguage:"Switch language",share:"Share",audioMute:"Mute audio",audioUnmute:"Unmute audio",closeMarker:"Close this marker",tourStepNext:"Next step",tourStepPrev:"Previous step",tourStop:"Stop this tour",minimize:"Minimize",play:"Play",pause:"Pause",stop:"Stop",subtitlesToggle:"Toggle subtitles",galleryPrev:"Previous image",galleryNext:"Next image",menuToggle:"Toggle menu",waypointFollow:"Go this way",tours:"Tours",markerTours:"Marker tours",videoTours:"Video tours"},nl:{close:"Sluit",zoomIn:"Zoom in",zoomOut:"Zoom uit",fullscreenToggle:"Volledig scherm aan / uit",switchLanguage:"Kies taal",share:"Deel",audioMute:"Geluid uit",audioUnmute:"Geluid aan",closeMarker:"Sluit deze marker",tourStepNext:"Volgende stap",tourStepPrev:"Vorige stap",tourStop:"Stop deze tour",minimize:"Minimaliseer",play:"Start",pause:"Pauzeer",stop:"Stop",subtitlesToggle:"Ondertitels aan / uit",galleryPrev:"Vorige afbeelding",galleryNext:"Volgende afbeelding",menuToggle:"Menu openen / sluiten",waypointFollow:"Ga deze richting",tours:"Tours",markerTours:"Marker tours",videoTours:"Video tours"},de:{close:"Schließen",zoomIn:"Vergrößern",zoomOut:"Verkleinern",fullscreenToggle:"Vollbild umschalten",switchLanguage:"Sprache wechseln",share:"Teilen",audioMute:"Ton stummschalten",audioUnmute:"Ton einschalten",closeMarker:"Diesen Marker schließen",tourStepNext:"Nächster Schritt",tourStepPrev:"Vorheriger Schritt",tourStop:"Tour beenden",minimize:"Minimieren",play:"Abspielen",pause:"Pause",stop:"Stopp",subtitlesToggle:"Untertitel umschalten",galleryPrev:"Vorheriges Bild",galleryNext:"Nächstes Bild",menuToggle:"Menü umschalten",waypointFollow:"Diesen Weg gehen",tours:"Touren",markerTours:"Marker-Touren",videoTours:"Video-Touren"}},rt=t(st.en);function at(t){let i="cm";return t>=1e5?(i="km",t/=1e5):t>=100?(i="m",t/=100):t<1e-6?(i="nm",t*=1e7):t<.001?(i="µm",t*=1e4):t<1&&(i="mm",t*=10),t.toFixed(2)+" "+i}var nt=class extends n{static{this.tag="micrio-details"}static{this.styles="micrio-details{position:absolute;bottom:var(--micrio-border-margin);left:var(--micrio-border-margin);padding:var(--micrio-popup-padding);font-size:.9em;max-width:410px;user-select:text;white-space:normal;box-sizing:border-box;color:var(--micrio-color);background:var(--micrio-background);backdrop-filter:var(--micrio-background-filter);box-shadow:var(--micrio-popup-shadow);border-radius:var(--micrio-border-radius);transition:all .5s ease}\nmicrio-details details{display:block}\nmicrio-details summary{cursor:pointer;list-style:none}\nmicrio-details summary::-webkit-details-marker{display:none}\nmicrio-details small{display:block;font-style:italic;font-weight:400}\nmicrio-details>*{margin:0;overflow:hidden;text-overflow:ellipsis}\nmicrio-details a{color:var(--micrio-color-hover,inherit)}\nmicrio-details .close{position:absolute;top:0;left:calc(100% + 8px)}\n@media(max-width:600px){micrio-details{max-width:calc(100% - 10px)}\nmicrio-details details:not([open]) cite{display:none}\nmicrio-details details:not([open]) summary::marker,micrio-details details:not([open]) summary::-webkit-details-marker{display:inline-block;content:'?';font-size:20px;font-weight:700;line-height:20px;margin-right:5px}\nmicrio-details .close{position:absolute;top:auto;left:auto;right:0;bottom:calc(100% + 8px)}\n}"}#f;#u=[];onMount(){this.inject("micrio")&&(this.#f=document.createElement("details"),this.#f.ontoggle=()=>this.#v(),this.appendChild(this.#f),this.#a())}setProps(t){void 0!==t.info&&(this._props.info=t.info),void 0!==t.data&&(this._props.data=t.data),this.isConnected&&this.#a()}#a(){const t=this._props.info,e=this._props.data,s=this.inject("micrio"),r=s?i(s._lang):void 0,a=s?i(s.current):void 0;if(!t||!r||!a)return;const n=e?.i18n?e.i18n[r]:e,o=n?.title??t.title??"",h=n?.description,c=n?.sourceUrl,l=n?.copyright,d=a.$settings?.cmWidth,m=a.$settings?.cmHeight,u=d&&m?at(d)+" x "+at(m):null;if(o||h||c){if(this.#f.replaceChildren(),o||u){const t=document.createElement("summary");if(o){const i=document.createElement("cite");i.textContent=o,t.appendChild(i)}if(u){const i=document.createElement("small");i.textContent=u,t.appendChild(i)}this.#f.appendChild(t)}if(h){const t=document.createElement("div");t.innerHTML=h,this.#f.appendChild(t)}if(c){const t=document.createElement("p"),i=document.createElement("a");i.href=c,i.target="_blank",i.rel="noopener noreferrer",i.textContent=l||c,t.appendChild(i),this.#f.appendChild(t)}}}#v(){const t=this.#f.querySelector(":scope > micrio-button");if(this.#f.open){if(t)return;const e=document.createElement("micrio-button");e.setProps({type:"close",title:i(rt).close,className:"close",onclick:()=>{this.#f.open=!1}}),this.#f.appendChild(e)}else t?.remove()}onDestroy(){for(const t of this.#u)t();this.#u=[]}};customElements.define(nt.tag,nt);var ot=class extends n{static{this.tag="micrio-error"}static{this.styles="micrio-error{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;pointer-events:none;z-index:20;max-width:80%}\nmicrio-error>micrio-icon{font-size:3em;opacity:.5;margin-bottom:8px}\nmicrio-error>p{margin:0;font-size:.9em;opacity:.7;line-height:1.4}"}#c={};onMount(){this.#a()}setProps(t){Object.assign(this.#c,t),this.isConnected&&this.#a()}#a(){this.replaceChildren();const t=document.createElement("micrio-icon");t.setAttribute("name","error"),this.appendChild(t);const i=document.createElement("p");i.textContent=this.#c.message??"An unknown error has occurred",this.appendChild(i)}};customElements.define(ot.tag,ot);var ht=navigator?.language??"en-EN",ct="Intl"in self&&Intl.DisplayNames?new Intl.DisplayNames([ht],{type:"language"}):void 0,lt=["ar","ar-AE","ar-BH","ar-DJ","ar-DZ","ar-EG","ar-IQ","ar-JO","ar-KW","ar-LB","ar-LY","ar-MA","ar-OM","ar-QA","ar-SA","ar-SD","ar-SY","ar-TN","ar-YE","dv","dv-MV","fa","fa-AF","fa-IR","he","he-IL","iw","iw-PS","kd","ku","ku-IQ","ku-IR","ku-SY","ku-TR","pk-PK","ps","ps-AF","sd","sd-PK","syr-SY","ug","ug-CN","ur","ur-IN","ur-PK","yi","yi-IL","yi-US"],dt=class extends n{static{this.tag="micrio-controls"}static{this.styles="micrio-controls{position:absolute;right:var(--micrio-border-margin);bottom:var(--micrio-border-margin);padding:0;margin:0;transition:transform .25s ease,opacity .25s ease;direction:rtl;z-index:2}\nmicrio-controls.hidden:not(:hover){transform:translateX(calc(100% + var(--micrio-border-margin)));opacity:0;pointer-events:none}\nmicrio-controls .primary:not(.portrait){right:calc(50% + var(--micrio-border-margin))}\nmicrio-controls .primary.portrait{bottom:calc(50% + var(--micrio-border-margin))}\nmicrio-controls .grid-close{top:var(--micrio-border-margin);bottom:auto;position:absolute;right:0}\nmicr-io[data-switching]>micrio-controls,micr-io[data-tour-active]>micrio-controls{opacity:0;pointer-events:none}\nmicrio-controls>micrio-button,micrio-controls>menu{padding:0;margin:8px 0;display:block;width:var(--micrio-button-size)}\nmicrio-controls menu.ctrl-lang{position:relative;padding:0;margin:8px 0;width:var(--micrio-button-size);min-height:var(--micrio-button-size)}\nmicrio-controls .lang-items{position:absolute;right:100%;top:0;display:none;flex-direction:row;background:var(--micrio-background);backdrop-filter:var(--micrio-background-filter);border-radius:var(--micrio-border-radius);box-shadow:var(--micrio-button-shadow);white-space:nowrap}\nmicrio-controls menu.ctrl-lang:hover .lang-items,micrio-controls menu.ctrl-lang:focus-within .lang-items{display:flex}\nmicrio-controls .lang-items micrio-button{--micrio-button-shadow:none;--micrio-background-filter:none}\nmicrio-controls .lang-items .micrio-button{padding:0}\nmicrio-controls .lang-items .micrio-button>span{width:var(--micrio-button-size)}\nmicrio-controls .lang-items .micrio-button.active{background:var(--micrio-color-hover);color:var(--micrio-button-background,var(--micrio-background))}"}#c={};#u=[];#b=!1;#w=!1;#y=!1;#x=!1;#k=null;#E=!1;#T;#M=!1;#C=void 0;#S="";#A=()=>{const t=this.inject("micrio");t&&t.isMuted.set(!i(t.isMuted))};#L=()=>{const t=this.inject("micrio");if(t&&navigator.share&&t.$current?.$info){const e=t.$current.$data?.i18n?.[i(t._lang)];navigator.share({title:t.$current.$info?.title,text:e?.description||`${t.$current.$info.width} x ${t.$current.$info.height} | Micrio`,url:location.href})}};#P=t=>{this.inject("micrio").lang=t};#I=()=>this.#C?.back();#_;#z;#D;#R;#O;#X;#Y;#$;#F;onMount(){const t=this.inject("micrio");if(!t)return;const{state:e,_lang:s}=t,{tour:r,popup:a}=e,{controls:n,zoom:h,hidden:c}=t.state.ui,l=i=>{const e=i.detail;this.#E=t.canvas.viewport.portrait,e.opts.isPassive||(this.#k=e),this.#B()},d=()=>{this.#k=null,this.#B()};t.addEventListener("splitscreen-start",l),t.addEventListener("splitscreen-stop",d),this.#u.push(()=>{t.removeEventListener("splitscreen-start",l),t.removeEventListener("splitscreen-stop",d)});const m=t=>{h.set(!t.noZoom),n.set(!t.noControls),this.#w=!!t.ui?.controls?.cultureSwitch,this.#y=!!t.social,this.#x=!!t.fullscreen,this.#B()};let u,p;t.$current&&m(t.$current.$settings),this.#u.push(t.current.subscribe(e=>{e&&o(e.info).then(t=>{!t||i(r)&&"steps"in i(r)||(u?.(),u=e.settings.subscribe(m))});const s=t.canvases[0]?.grid;s!==this.#C&&(p?.(),this.#C=s,s&&(this.#M=s.clickable,p=s.focussed.subscribe(t=>{this.#T=t,this.#B()})))})),this.watchLater(c,()=>this.#B()),this.watchLater(n,()=>this.#B()),this.watchLater(h,()=>this.#B()),this.watchLater(r,()=>this.#B()),this.watchLater(a,()=>this.#B()),this.watchLater(s,()=>this.#B()),this.#V(),this.#B()}setProps(t){Object.assign(this.#c,t)}#V(){this.#b||(this.#_=document.createElement("aside"),this.#_.addEventListener("pointerover",()=>{this.inject("micrio")?.state.ui.hover.set(!0)}),this.#_.addEventListener("pointerout",t=>{t.currentTarget&&t.currentTarget.contains(t.relatedTarget)||this.inject("micrio")?.state.ui.hover.set(!1)}),this.#_.addEventListener("focusin",()=>{this.inject("micrio")?.state.ui.hover.set(!0)}),this.#_.addEventListener("focusout",t=>{t.currentTarget.contains(t.relatedTarget)||this.inject("micrio")?.state.ui.hover.set(!1)}),this.appendChild(this.#_),this.#$=document.createElement("aside"),this.#$.className="primary",this.appendChild(this.#$),this.#F=document.createElement("aside"),this.#F.className="grid-close",this.appendChild(this.#F),this.#b=!0)}#B(){if(!this.#b||!this.isConnected)return;const t=this.inject("micrio");if(!t)return;const e=i(rt),s=i(t.isMuted),r=i(t._lang),a=i(t.state.ui.controls),n=i(t.state.ui.hidden),o=i(t.state.ui.zoom),h=i(t.state.popup),c=i(t.state.tour),l=t.$current,d=l?.$info,m=d?.revision?Object.keys(d.revision):[],u=t.canvas.$isMobile,p=!(!("micrioAudioContext"in window)&&!this.#c.hasAudio),g=this.#w&&m.length>1,f=this.#y&&"share"in navigator,v=this.#x&&!(c&&"steps"in c&&c.isSerialTour),b=a&&(p||g||f||o||v),w=v&&!!h&&u,y=!!l?.grid&&"cells"==l.grid.panZoom;if(this.classList.toggle("hidden",!!n),!b)return this.#_.replaceChildren(),this.#$.replaceChildren(),void this.#F.replaceChildren();if(p?(this.#z?.isConnected||(this.#z?.remove(),this.#z=document.createElement("micrio-button"),this.#z.className="ctrl-mute",this.#_.prepend(this.#z)),this.#z.setProps({type:s?"volume-off":"volume-up",title:s?e.audioUnmute:e.audioMute,onclick:this.#A})):this.#z?.isConnected&&this.#z.remove(),g&&!w){if(!this.#R?.isConnected){this.#R?.remove(),this.#R=document.createElement("menu"),this.#R.className="ctrl-lang",this.#R.setAttribute("tabindex","0");const t=document.createElement("micrio-button");t.className="ctrl-lang-trigger",this.#R.appendChild(t);const i=document.createElement("div");i.className="lang-items",this.#R.appendChild(i),this.#_.insertBefore(this.#R,this.#D?.isConnected?this.#D:null)}this.#R.querySelector(".ctrl-lang-trigger")?.setProps({type:"a11y",title:e.switchLanguage});const t=this.#R.querySelector(".lang-items"),i=m.join(",");if(i!==this.#S){this.#S=i,t.innerHTML="";for(const i of m){const e=document.createElement("micrio-button");e.setProps({title:ct?.of(i)??i,onclick:()=>{this.#P(i)}}),e.appendChild(document.createTextNode(i.toUpperCase())),t.appendChild(e)}}const s=t.querySelectorAll(":scope > micrio-button");for(let e=0;e<s.length;e++){const t=s[e].querySelector(".micrio-button");t&&t.classList.toggle("active",m[e].toLowerCase()===r.toLowerCase())}}else this.#R?.isConnected&&this.#R.remove();f&&!w?(this.#D?.isConnected||(this.#D?.remove(),this.#D=document.createElement("micrio-button"),this.#D.className="ctrl-share",this.#_.insertBefore(this.#D,this.#O?.isConnected?this.#O:null)),this.#D.setProps({type:"share",title:e.share,onclick:this.#L})):this.#D?.isConnected&&this.#D.remove();const x=o&&!w&&!y;if(x||v?(this.#O?.isConnected||(this.#O?.remove(),this.#O=document.createElement("micrio-button-group"),this.#_.appendChild(this.#O)),x?this.#X?.isConnected||(this.#X?.remove(),this.#X=document.createElement("micrio-zoom-buttons"),this.#X.className="ctrl-zoom",this.#Y?.isConnected?this.#O.insertBefore(this.#X,this.#Y):this.#O.appendChild(this.#X)):this.#X?.isConnected&&this.#X.remove(),v?(this.#Y?.isConnected||(this.#Y?.remove(),this.#Y=document.createElement("micrio-fullscreen"),this.#Y.className="ctrl-fs",this.#O.appendChild(this.#Y)),this.#Y.setProps({el:t})):this.#Y?.isConnected&&this.#Y.remove()):this.#O?.isConnected&&this.#O.remove(),o&&this.#k){if(!this.#$?.isConnected){this.#$?.remove(),this.#$=document.createElement("aside"),this.#$.className="primary";const t=document.createElement("micrio-button-group"),i=document.createElement("micrio-zoom-buttons");t.appendChild(i),this.#$.appendChild(t),this.appendChild(this.#$)}this.#$.classList.toggle("portrait",this.#E)}else this.#$?.isConnected&&this.#$.remove();if(!this.#T||"focus"!=this.#M||h||c)this.#F?.isConnected&&this.#F.remove();else if(!this.#F?.isConnected){this.#F?.remove(),this.#F=document.createElement("aside"),this.#F.className="grid-close";const t=document.createElement("micrio-button");t.setProps({type:"close",title:e.close,onclick:this.#I}),this.#F.appendChild(t),this.appendChild(this.#F)}}onDestroy(){for(const t of this.#u)t();this.#u=[]}};customElements.define(dt.tag,dt);var mt=class extends n{static{this.tag="micrio-fullscreen"}static{this.styles="micrio-fullscreen{display:contents}"}#c={};#u=[];#N=!1;#H=!1;#U=()=>{const t=this.#c.el;if(!t)return;const i="requestFullscreen"in t,e="webkitRequestFullscreen"in t;this.#N?this.#W(t,i):this.#G(t,i,e)};onMount(){this.#c?.el&&this.#j()}setProps(t){void 0!==t.el&&(this.#c.el=t.el,this.isConnected&&!this.#H&&this.#j())}#j(){if(this.#H)return;this.#H=!0;const t=this.#c.el,i="requestFullscreen"in t,e="webkitRequestFullscreen"in t,s=()=>i?document.fullscreenElement:document.webkitFullscreenElement??null;if(this.#N=s()===t,!(i||e&&!s()))return;const r=this.inject("micrio"),a=r&&t==r&&!r.events.scrollHooked,n=()=>{this.#N=s()===t,a&&(this.#N?r.events.hookScroll():r.events.unhookScroll()),this.#q()},o=i?"fullscreenchange":"webkitfullscreenchange";document.addEventListener(o,n),this.#u.push(()=>document.removeEventListener(o,n)),this.#q()}#G(t,i,e){i?t.requestFullscreen():"webkitRequestFullscreen"in t&&t.webkitRequestFullscreen()}#W(t,i){i?document.exitFullscreen():"webkitExitFullscreen"in document&&document.webkitExitFullscreen()}#q(){this.replaceChildren();const t=document.createElement("micrio-button"),e=i(rt);t.setProps({type:this.#N?"minimize":"maximize",title:e.fullscreenToggle,onclick:this.#U}),this.appendChild(t)}onDestroy(){for(const t of this.#u)t();this.#u=[]}};customElements.define(mt.tag,mt);var ut=class extends n{static{this.tag="micrio-zoom-buttons"}static{this.styles="micrio-zoom-buttons{display:contents}"}#c={};#u=[];onMount(){const t=this.inject("micrio");if(!t)return;const e=()=>{const e=this.#c.image||t.$current,s=e?.camera.isZoomedIn()??!0,r=e?.camera.isZoomedOut(!0)??!0,a=e?.camera.getMinScale()??0;if(a>1&&a>(e?.$settings.zoomLimit??1))return void(this.innerHTML="");const n=i(rt);let o=this.querySelector(":scope > .zb-zoom-in");o||(o=document.createElement("micrio-button"),o.className="zb-zoom-in",this.appendChild(o)),o.setProps({type:"zoom-in",title:n.zoomIn,disabled:s,onclick:()=>{t.events.clicked=!0,e?.camera.zoomIn().then(()=>t.events.clicked=!1)}});let h=this.querySelector(":scope > .zb-zoom-out");h||(h=document.createElement("micrio-button"),h.className="zb-zoom-out",this.appendChild(h)),h.setProps({type:"zoom-out",title:n.zoomOut,disabled:r,onclick:()=>{t.events.clicked=!0,e?.camera.zoomOut().then(()=>t.events.clicked=!1)}})};if(this.#c.image)this.watchLater(this.#c.image.state.view,()=>e());else{let i;this.#u.push(t.current.subscribe(t=>{if(!t)return;i?.();let s=!0;i=t.state.view.subscribe(()=>{s?s=!1:e()})}))}e()}setProps(t){Object.assign(this.#c,t)}onDestroy(){for(const t of this.#u)t();this.#u=[]}};customElements.define(ut.tag,ut);var pt=class extends n{static{this.tag="micrio-logo-org"}static{this.styles="micrio-logo-org{display:contents}\nmicrio-logo-org a{position:absolute;top:calc(var(--micrio-border-margin) * 2);right:calc(var(--micrio-border-margin) * 2);z-index:1;display:block}\nmicrio-logo-org img{max-height:64px;display:block}"}#c={organisation:null};#u=[];onMount(){this.inject("micrio")&&this.#a()}setProps(t){void 0!==t.organisation&&(this.#c.organisation=t.organisation),this.isConnected&&this.#a()}#a(){const t=this.#c.organisation;if(!t?.logo)return void(this.innerHTML="");this.replaceChildren();const i=document.createElement("a");i.rel="noopener",i.href=t.href??"#",i.title=t.name??"",i.setAttribute("aria-label",`${t.name} homepage`),i.target="_blank";const e=document.createElement("img");e.src=function(t){if("string"==typeof t)return t;let i=0,e=Math.max(t.width,t.height);for(;e>1024;)i++,e/=2;return t.micrioId&&t.width>1024?"https://r2.micr.io/"+t.micrioId+"/"+i+"/0-0."+(t.isPng?"png":t.isWebP?"webp":"jpg"):t.src}(t.logo),e.alt="Logo",i.appendChild(e),this.appendChild(i)}onDestroy(){for(const t of this.#u)t();this.#u=[]}};customElements.define(pt.tag,pt);var gt=(t,i=1)=>(t%i+i)%i,ft=t=>({centerX:t[0]+t[2]/2,centerY:t[1]+t[3]/2,width:t[2],height:t[3]});function vt(t,i){const e=t.$current;if(!e)return;const s=t.spaceData?.images.find(t=>t.id==e.id),r=t.spaceData?.images.find(t=>t.id==i);if(!s||!r)return;const a=[(r.x??.5)-(s.x??.5),(s.y??.5)-(r.y??.5),(r.z??.5)-(s.z??.5)];let n=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];n>0&&(n=1/Math.sqrt(n));const o=[a[0]*n,a[1]*n,a[2]*n],h=gt(Math.atan2(-o[0],o[2])/Math.PI/2);return{v:a,vN:o,directionX:h,vector:{direction:h%1,distanceX:Math.max(0,Math.min(.4,Math.sqrt(o[0]*o[0]+o[2]*o[2]))),distanceY:-a[1]}}}var bt=class extends n{static{this.tag="micrio-waypoint"}static{this.styles="micrio-waypoint{display:block;position:absolute;transform-style:preserve-3d;width:0;height:0;top:50%;left:50%;--micrio-bb:var(--micrio-button-background);--micrio-bbh:var(--micrio-button-background-hover)}\nmicrio-waypoint micrio-button{--micrio-button-background:var(--micrio-waypoint-background,var(--micrio-bb));--micrio-button-background-hover:var(--micrio-waypoint-background-hover,var(--micrio-bbh));--micrio-button-size:var(--micrio-waypoint-size);--micrio-border-radius:var(--micrio-waypoint-border-radius,100%);--micrio-icon-size:var(--micrio-waypoint-icon-size,calc(var(--micrio-button-size) - 50px));transform:translate3d(-50%,-50%,0) scale3d(.5,.5,1);pointer-events:all;transition:background-color .25s ease,opacity .25s ease,border-color .25s ease,transform .25s ease;border:var(--micrio-waypoint-border-size,var(--micrio-marker-border-size)) solid var(--micrio-waypoint-border-color,var(--micrio-marker-border-color));margin:0}\nmicrio-waypoint micrio-button>svg{pointer-events:none;margin:0 auto}\nmicrio-waypoint:hover micrio-button,micrio-waypoint.active micrio-button{transition:background-color .25s ease,opacity .25s ease,transform .25s ease;transform:translate3d(-50%,-50%,0) scale3d(.6,.6,1)}\nmicrio-waypoint.clicked micrio-button{animation:micrio-waypoint-pulse .75s ease infinite alternate}\n@keyframes micrio-waypoint-pulse{from{transform:translate3d(-50%,-50%,0) scale3d(.5,.5,1)}to{transform:translate3d(-50%,-50%,0) scale3d(.75,.75,1)}}\nmicrio-waypoint.direction-up micrio-button{/* up */}\nmicrio-waypoint.direction-down micrio-button{/* down */}"}#c={targetId:"",image:null};#u=[];#Z=!1;#K=!1;#Q;#J;#tt;#it;#et;#st;#rt;onMount(){this.#at(),this.#a()}setProps(t){void 0!==t.targetId&&(this.#c.targetId=t.targetId),void 0!==t.image&&(this.#c.image=t.image),void 0!==t.settings&&(this.#c.settings=t.settings),this.isConnected&&(this.#at(),this.#a())}#at(){const{targetId:t,image:i,settings:e}=this.#c;if(!i||!t)return;const s=this.inject("micrio");if(!s)return;const r=i.$info,a=vt(s,t);if(!a)return void console.error(`[Micrio] Could not calculate vector for target ${t}`);const{directionX:n,v:o,vN:h,vector:c}=a;this.#et=c;const l=Math.abs(h[1])<.3,d=l?.65:.5+h[1]/10,m={x:n,y:d,baseScale:r.width/1024,scale:1,rotX:(1+(l?-(1-d):h[1]))*Math.PI/2,rotY:0,rotZ:0},u=e?.coords??p(m);this.#J=u.custom?u:m;const g=()=>{if(this.#K)return;const t=i.camera.getMatrix(this.#J.x,this.#J.y,this.#J.baseScale*this.#J.scale,1,this.#J.rotX,this.#J.rotY,this.#J.rotZ,0,1,1,!0).join(",");this.style.transform=`matrix3d(${t})`,this.classList.toggle("direction-up",o[1]<0),this.classList.toggle("direction-down",o[1]>0)},f=this;this.#tt={coords:u,settings:e??{},click:()=>{},get deleted(){return!1},set deleted(t){t&&(f.#K=!0)}},g(),this.#u.push(i.state.view.subscribe(g)),W.getData(t).then(t=>{t&&(this.#Q=t),this.#a()}),s.dispatchEvent(new CustomEvent("wp-print",{detail:this.#tt})),this.#st=()=>{i.$settings._markers?.noMarkerActions||(this.#Z=!0,i.openedView=void 0,i.state.marker.set(void 0),s.open(t,{vector:this.#et}))},this.#rt=()=>{i.$settings._markers?.noMarkerActions||(this.parentNode?.scrollTo(0,0),clearTimeout(this.#it),this.#it=setTimeout(()=>{const t=i.camera.getXY(this.#J.x,this.#J.y);!this.#Z&&(t[0]<0||t[0]>=s.offsetWidth||t[1]<0||t[1]>=s.offsetHeight||i.is360&&t[3]>4)&&i.camera.flyToCoo([this.#J.x,this.#J.y],{speed:2,limit:!0}).catch(()=>{})},150))}}#a(){if(this.#K)return void(this.style.display="none");const{settings:t}=this.#c,e=this.inject("micrio"),s=e?i(e._lang):"en",r=i(rt),a=e?.spaceData,n=t?.i18n?.[s]?.title||this.#Q?.i18n?.[s]?.title,o=a?.icons?.[t?.customIconIdx??-1];this.classList.toggle("clicked",this.#Z),this.replaceChildren();const h=document.createElement("micrio-button");h.setProps({type:o?void 0:"arrow-up",icon:o||void 0,title:n??r.waypointFollow,onclick:this.#st,onfocus:this.#rt}),this.appendChild(h)}onDestroy(){clearTimeout(this.#it);for(const t of this.#u)t();this.#u=[]}};customElements.define(bt.tag,bt);var wt=class extends n{static{this.tag="micrio-marker-content"}static{this.styles="micrio-marker-content{display:block;position:relative;padding:var(--micrio-popup-padding);overflow-y:auto;user-select:text;color:var(--micrio-color);background:var(--micrio-background);backdrop-filter:var(--micrio-background-filter);box-shadow:var(--micrio-popup-shadow);border-radius:var(--micrio-border-radius);box-sizing:border-box;text-align:var(--micrio-text-align)}\nmicrio-marker-content>*{--micrio-button-background:none;--micrio-background-filter:none;--micrio-button-shadow:none}\nmicrio-marker-content .micrio-progress-bar.container{background:transparent;backdrop-filter:none}\nmicrio-marker-content h1{font-size:1.5em;font-weight:600;margin:0 0 1.25em 0}\nmicrio-marker-content p{white-space:pre-line}\nmicrio-marker-content figure.hidden{display:none}\nmicrio-marker-content figure>div.micrio-media>*:first-child{width:100%}\nmicrio-marker-content micrio-media{margin:calc(-1 * var(--micrio-popup-padding));margin-bottom:0;width:auto;--micrio-background:transparent}\nmicrio-marker-content micrio-media:not(:last-child){margin-bottom:var(--micrio-popup-padding)}\nmicrio-marker-content article:last-child{margin-bottom:var(--micrio-popup-padding)}\nmicrio-marker-content button{padding:0;margin:0 calc(-1 * var(--micrio-popup-padding)) var(--micrio-popup-padding) calc(-1 * var(--micrio-popup-padding))}\nmicrio-marker-content button:disabled{cursor:default}\nmicrio-marker-content figcaption{padding:10px;font-style:italic;font-size:.9em;margin-bottom:var(--micrio-popup-padding);text-align:center}\nmicrio-marker-content section{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));column-gap:5px;row-gap:5px;justify-items:center;margin-bottom:var(--micrio-popup-padding)}\nmicrio-marker-content section button{color:inherit;border:none;display:block;width:100%;cursor:pointer;margin:0}\nmicrio-marker-content section figure{padding:0;margin:0}\nmicrio-marker-content section img{width:100%;display:block;object-fit:cover}\n@media(max-width:500px){micrio-marker-content section{display:block;float:right;width:100px;margin-left:var(--micrio-border-margin)}\nmicrio-marker-content section>button:not(:nth-child(1)){display:none}\nmicrio-marker-content section figcaption{display:none}\n}"}#c={marker:null};#u=[];onMount(){this.#a()}setProps(t){Object.assign(this.#c,t),this.isConnected&&this.#a()}#a(){const{marker:t,noEmbed:e=!1,noImages:s=!1,noGallery:r=!1,onclose:a}=this.#c;if(!t)return;const o=this.inject("micrio"),h=n.markerImages,c=t.id?h.get(t.id):void 0;if(!o||!c)return;const l=i(o._lang),d=`${t.id}::${l}::${e}::${s}::${r}`;if(!this.checkRenderKey(d))return;const m=i(o.state.tour),u=m&&"steps"in m&&m.isSerialTour,p=c.$settings._markers??{},g=!p.preventAutoPlay,f=t.i18n?.[l],v=1==t.images?.length,b=!t.data?.preventImageOpen&&!r,w=c.tileBase?.includes("micrio.dev"),y=v&&t.images?.[0]?.i18n?.[l]?.description,x=t=>t.i18n?.[l]?.title,k=()=>{m&&"steps"in m&&(m.isSerialTour||p.tourAutoProgress)&&a?.()};if(f){if(this.replaceChildren(),f.title){const t=document.createElement("h1");t.textContent=f.title,this._title=t,this.appendChild(t)}if(f.body&&p.primaryBodyFirst){const t=document.createElement("micrio-article");t.setProps({html:f.body}),this.appendChild(t)}if(!u&&(!f.embedUrl&&t.videoTour||f.audio)){const i=(t.videoTour?.i18n?.[l]?.audio??f?.audio)?.src,e=!g||!t?.audioAutoPlay,s=document.createElement("micrio-media");s.setProps({src:i,noPlayOverlay:!0,image:c,uuid:t.id,tour:t.videoTour,autoplay:t.audioAutoPlay||!f.audio&&!!t.videoTour,controls:!t.videoTour||!f.embedUrl,onended:k,paused:e}),this.appendChild(s)}if(!s&&t.images?.length){const i=document.createElement("section");for(const e of t.images){const s=document.createElement("button");s.title=x(e)??"",b&&s.addEventListener("click",()=>{return i=e.micrioId,void(b&&o.state.popover.set({gallery:t.images,galleryStart:i,image:c}));var i}),s.disabled=!b;const r=document.createElement("figure"),a=document.createElement("img");if(a.alt=x(e)??"",a.src=e.micrioId?`https://iiif.${w?"micrio.dev":"micr.io"}/${e.micrioId}/full/${v?"^"+Math.min(e.width,640)+",":"^,320"}/0/default.webp`:e.src,r.appendChild(a),y){const t=document.createElement("figcaption");t.textContent=y,r.appendChild(t)}s.appendChild(r),i.appendChild(s)}this.appendChild(i)}if(f.embedUrl&&!e){if(!f.audio&&t.videoTour){const i=document.createElement("micrio-media");i.setProps({image:c,className:"hidden",uuid:t.id,tour:t.videoTour,autoplay:g,secondary:!0}),this.appendChild(i)}const i=!1===t?.embedAutoPlay||!g||!(!f?.audio||!t?.audioAutoPlay),e=document.createElement("micrio-media");e.setProps({image:c,src:f.embedUrl,uuid:t.id,width:400,height:240,controls:!0,title:f.embedTitle,figcaption:f.embedDescription,autoplay:!i,onended:k,paused:i}),this.appendChild(e)}if(f.body&&!p.primaryBodyFirst){const t=document.createElement("micrio-article");t.setProps({html:f.body}),this.appendChild(t)}if(f.bodySecondary){const t=document.createElement("micrio-article");t.setProps({html:f.bodySecondary}),this.appendChild(t)}}else this.innerHTML=""}onDestroy(){for(const t of this.#u)t();this.#u=[]}};customElements.define(wt.tag,wt);var yt=t(void 0),xt=!1;function kt(){yt.set(void 0)}yt.subscribe(t=>{t?xt||window.addEventListener("click",kt):xt&&window.removeEventListener("click",kt),xt=!!t});var Et=class extends n{static{this.tag="micrio-menu"}static{this.styles="micrio-menu{padding:0;margin:0;transition:background .2s ease,box-shadow .2s ease}\n.micrio-menu-action{font-family:inherit;background:transparent;display:block;border:none;padding:0 24px;font-size:.9em;cursor:pointer;text-decoration:none;border-radius:0;color:inherit;text-shadow:inherit;box-sizing:border-box;text-align:center}\n@media(max-width:500px){micrio-menu{font-size:1em}.micrio-menu-action{width:100%;margin-bottom:10px;padding:6px 0}}\n@media(min-width:501px){micrio-menu{float:left;position:relative}micrio-menu:not(:focus-within):not(:hover) .items{display:none}.micrio-menu-action{height:var(--micrio-button-size);line-height:var(--micrio-button-size);width:100%;text-align:var(--micrio-text-align);white-space:pre;font-weight:600}.items micrio-menu{float:none}.items .micrio-menu-action{width:100%}.micrio-menu-action:hover,.micrio-menu-action:focus{text-shadow:none!important;color:var(--micrio-color-hover)!important}.items{max-height:calc(100vh - 160px);overflow-y:auto;overflow-x:hidden}micrio-menu strong micrio-icon{margin-left:10px;line-height:0;vertical-align:1px}}"}#c={menu:null,originalId:null};#nt;onMount(){const{menu:t}=this.#c,e=this.inject("micrio");if(!e)return;const{_lang:r}=e;1!==t.children?.length||this.#ot(t,i(r))?.title||(this.#c.menu=t.children[0]),this.#ht(),this.#a(),this.watch(yt,()=>this.classList.toggle("opened",this.#ct(this.#c.menu))),this.watchWith(r,s(()=>{this.#ht(),this.#a()}))}#ht(){const{menu:t,originalId:e}=this.#c,s=this.inject("micrio");if(!s)return;const{events:r,state:a,_lang:n}=s,o=this.#ot(t,i(n)),h=t;this.#nt=void 0,t.action?this.#nt=t.action:t.markerId?this.#nt=()=>{e&&s.$current?.id!=e&&s.open(e),s.$current?.state.marker.set(t.markerId)}:(o?.content||o?.embed||t.image||h.content||h.embedUrl||o?.title&&!t.children?.length&&!t.link&&!t.markerId)&&(this.#nt=()=>{r.dispatch("page-open",t),a.popover.set({contentPage:t})})}setProps(t){Object.assign(this.#c,t)}#ot(t,i){return t.i18n?.[i]??t}#ct(t){const e=i(yt);if(!e)return!1;const s=t=>t===e||!!t.children?.some(s);return s(t)}#a(){const{menu:t,originalId:e,onclose:s}=this.#c,r=this.inject("micrio");if(!r)return;const a=i(r._lang),n=this.#ot(t,a);this.replaceChildren(),this.classList.toggle("opened",this.#ct(t)),this.setAttribute("data-title",n?.title?.toLowerCase()??"");const o=i=>{t.link||i.preventDefault(),this.#nt?.();const e=!!(this.#ct(t)||this.#nt||t.link);yt.set(e?void 0:t),e&&s?.()};if(t.link){const i=document.createElement("a");i.className="micrio-menu-action",i.href=t.link,t.linkTargetBlank&&(i.target="_blank"),i.addEventListener("click",o);const e=document.createElement("strong");e.textContent=n?.title??"(Unknown)";const s=document.createElement("micrio-icon");s.setAttribute("name",t.linkTargetBlank?"link-ext":"link"),s.style.opacity=".75",e.appendChild(s),i.appendChild(e),this.appendChild(i)}else{const i=document.createElement("button");i.className="micrio-menu-action",i.type="button",i.addEventListener("click",o);const e=document.createElement("strong");if(e.textContent=n?.title??"(Unknown)",t.children?.length){const t=document.createElement("micrio-icon");t.setAttribute("name","chevron-down"),e.appendChild(t)}i.appendChild(e),this.appendChild(i)}if(t.children?.length){const i=document.createElement("div");i.className="items";for(const s of t.children){const t=document.createElement("micrio-menu");t.setProps({menu:s,originalId:e,onclose:kt}),i.appendChild(t)}this.appendChild(i)}}};customElements.define(Et.tag,Et);var Tt=class extends n{static{this.tag="micrio-toolbar"}static{this.styles="micrio-toolbar{display:contents}\nmicrio-toolbar menu.micrio-toolbar{position:absolute;top:calc(var(--micrio-border-margin) - (var(--micrio-button-size) / 2 - 27px));left:var(--micrio-border-margin);margin:0;padding:0;color:#fff;text-shadow:1px 1px 2px #000;transition:transform .25s ease;z-index:1}\n@media(max-width:500px){micrio-toolbar .micrio-button.toggle{position:absolute;top:var(--micrio-border-margin);left:0;height:34px;width:34px;box-shadow:none;z-index:2}\nmicrio-toolbar .micrio-button.toggle.indent{left:35px}\nmicrio-toolbar menu.micrio-toolbar{transform:translate3d(0,0,0);width:100%;height:100%;background:rgba(0,0,0,0.75);top:0;left:0;padding:32px 0;overflow-y:auto;overflow-x:hidden;box-sizing:border-box;backdrop-filter:var(--micrio-background-filter);z-index:1}\nmicrio-toolbar menu.micrio-toolbar:not(.shown){transform:translate3d(calc(-100% - var(--micrio-border-margin) * 2),0,0)}\n}\n@media(min-width:501px){micrio-toolbar menu.indent{margin-left:calc(var(--micrio-border-margin) * 2 + 25px)}\nmicrio-toolbar menu>.micrio-menu:not(:hover)>button.micrio-menu{margin-bottom:-15px}\nmicrio-toolbar .micrio-toolbar>micrio-menu{color:#fff;margin-right:var(--micrio-border-margin);border-radius:var(--micrio-border-radius);overflow:hidden}\nmicrio-toolbar .micrio-toolbar>micrio-menu:hover,micrio-toolbar .micrio-toolbar>micrio-menu:focus-within{backdrop-filter:var(--micrio-background-filter);background:var(--micrio-background);box-shadow:var(--micrio-button-shadow)}\n}"}#u=[];#lt;#dt=!1;#mt=!1;#U=()=>this.#dt=!this.#dt;onMount(){const t=this.inject("micrio");if(!t)return;const{_lang:i}=t;this.#mt=window.innerWidth<=500;const e=()=>{this.#mt=window.innerWidth<=500,this.#a()};this.#a(),this.#u.push(t.current.subscribe(t=>{t&&(this.#u.push(t.data.subscribe(t=>{this.#lt=t,this.#a()})),o(t.info).then(()=>this.#u.push(t.settings.subscribe(()=>this.syncDisplay?.()))))})),this.#u.push(t.state.tour.subscribe(()=>this.#a())),this.#u.push(t.state.marker.subscribe(()=>this.#a())),this.#u.push(t.state.popover.subscribe(()=>this.#a())),this.#u.push(i.subscribe(()=>this.#a())),window.addEventListener("resize",e),this.#u.push(()=>window.removeEventListener("resize",e))}#a(){if(!this.#lt)return;const t=this.inject("micrio");if(!t)return;const{_lang:e,spaceData:s,state:r}=t,a=i(e),n=i(r.tour),o=i(r.marker),h=i(r.popover),c=i(rt),l=t.$current?.id,d=t=>!!t.i18n?.[a],m=!!n||!!o||!!h,u=(this.#lt?.markerTours??[]).concat(s?.markerTours??[]).filter(d),p=u.length>0,g=this.#lt?.tours?.filter(d)??[],f=g.length>0,v=p&&f,b=this.#lt?.pages?this.#lt.pages.filter(t=>!t.id?.startsWith("_")&&(t=>!!t.i18n?.[a])(t)).concat(this.#lt.pages.filter(t=>t.id?.startsWith("_"))):void 0,w=!(b?.length||p||f),y=[(b||[]).map(t=>t.id).join(","),u.map(t=>t.id).join(",")+"|"+g.map(t=>t.id).join(","),m,a,this.#mt,this.#dt].join("::");if(!this.checkRenderKey(y))return;if(w||m)return void(this.innerHTML="");this.replaceChildren();const x=document.createElement("menu");if(x.className="micrio-toolbar",x.classList.toggle("shown",!m&&this.#dt),b)for(const i of b){const t=document.createElement("micrio-menu");t.setProps({menu:i,originalId:l,onclose:()=>{this.#mt&&(this.#dt=!1)}}),x.appendChild(t)}if(p){const t=document.createElement("micrio-menu");t.setProps({onclose:()=>{this.#mt&&(this.#dt=!1)},menu:{id:"marker-tours",i18n:{[a]:{title:v?c.markerTours:c.tours}},children:u.map(t=>({id:t.id??crypto.randomUUID(),i18n:{[a]:{title:t.i18n?.[a]?.title??"(Untitled)"}},action:()=>{t.initialStep=0,r.tour.set(t)}}))}}),x.appendChild(t)}if(f){const i=document.createElement("micrio-menu");i.setProps({onclose:()=>{this.#mt&&(this.#dt=!1)},menu:{id:"video-tours",i18n:{[a]:{title:v?c.videoTours:c.tours}},children:g.map(i=>({id:i.id??crypto.randomUUID(),i18n:{[a]:{title:i.i18n?.[a]?.title??"(Untitled)"}},action:()=>{t.$current&&t.$current.id!=l&&t.open(l),r.tour.set(i)}}))}}),x.appendChild(i)}if(this.appendChild(x),this.syncDisplay?.(),this.#mt){const t=document.createElement("micrio-button");t.setProps({title:c.menuToggle,type:this.#dt?"close":"ellipsis-vertical",className:"toggle transparent"+(this.querySelector(".micrio-toolbar.indent")?" indent":""),onclick:this.#U}),this.appendChild(t)}}syncDisplay(){const t=this.querySelector(".micrio-toolbar");if(t){const i=!this.inject("micrio")?.$current?.$settings?.noLogo;t.classList.toggle("indent",i)}}onDestroy(){for(const t of this.#u)t();this.#u=[]}};customElements.define(Tt.tag,Tt);var Mt,Ct=navigator.userAgent,St={iOS:/ipad|iphone|ipod/i.test(Ct),firefox:/firefox/i.test(Ct),OSX:/macintosh/i.test(Ct)&&/os\ x/i.test(Ct),hasTouch:"TouchEvent"in self,safari:!1};St.safari=(St.OSX||St.iOS)&&(/safari/i.test(Ct)||/instagram/i.test(Ct))&&!/chrome/i.test(Ct),St.OSX&&St.safari&&"TouchEvent"in self&&(St.iOS=!0,St.OSX=!1);var At,Lt=null,Pt=t(!1);function It(t,i,e){At&&(At.setPosition?At.setPosition(t,i,e):"positionX"in At&&(At.positionX.value=t,At.positionY.value=i,At.positionZ.value=e))}function _t(t,i,e){At&&(At.setOrientation?At.setOrientation(t,i,e,0,1,0):"forwardX"in At&&(At.forwardX.value=t,At.forwardY.value=i,At.forwardZ.value=e))}var zt=class{#ut=new Audio;#pt;#gt;#ft=-1;constructor(t,i,e){this.#pt=t,this.#gt=i,this.#ut.preload="none",this.#ut.loop=!1,this.#ut.volume=e,this.#ut.onended=()=>this.#vt(),this.#vt()}#vt(){if(!this.#gt&&this.#ft+1===this.#pt.length)return;const t=this.#pt[++this.#ft%this.#pt.length];this.#ut.src=t.src??"",this.#ut.play()}setVolume(t){this.#ut.volume=t}destroy(){this.#ut.pause()}},Dt=class extends n{static{this.tag="micrio-audio-controller"}static{this.styles="micrio-audio-controller{display:contents}"}#u=[];#bt;onMount(){const t=this.inject("micrio");if(!t)return;const{events:e}=t,s=t.$current;if(!s)return;const r=s.$info;if(!r)return;const a=!!r.is360,n=r.height/r.width,o="AudioContext"in window||"webkitAudioContext"in window;if(!o)return;const h=()=>Pt.set(!0),c=()=>{"suspended"===Lt?.state?Lt.resume().then(()=>{}).catch(()=>{}):Lt||h()},l=new Audio("data:audio/mpeg;base64,...");if(l.volume=St.iOS?0:1e-4,document.body.appendChild(l),o){this.#u.push(Pt.subscribe(t=>{if(!t)return;const e=this.inject("volume"),r=e?i(e):1;Lt||function(t){if(!Mt){if(Lt||(Lt="micrioAudioContext"in window?window.micrioAudioContext:"AudioContext"in window?new AudioContext:"webkitAudioContext"in window?new window.webkitAudioContext:null),!Lt)return console.warn("[Micrio] Your browser does not support the Web Audio API");"suspended"===Lt.state&&Lt.resume().then(()=>{}).catch(()=>{}),(Mt=Lt.createGain()).connect(Lt.destination),Mt.gain.value=t,"upX"in(At=Lt.listener)&&(At.upX.value=0,At.upY.value=1,At.upZ.value=0)}}("number"==typeof r?r:1),Lt&&s.$data?.markers?.filter(t=>!!t.positionalAudio).length&&this.#u.push(s.state.view.subscribe(t=>{if(!t)return;const i=Math.max(0,1.05-s.camera.getScale());((t,i,e)=>{if(a){t*=2*-Math.PI,i-=.5,i*=-Math.PI;const s=10*(1-e),r=Math.cos(i)*Math.sin(t)*s,a=Math.sin(i)*s,n=Math.cos(i)*Math.cos(t)*s;It(r,a,n);let o=r*r+a*a+n*n;o>0&&(o=1/Math.sqrt(o)),_t(r*o,a*o,n*o)}else It(2*(t-.5),2*(.5-i)*n,e),_t(0,0,-1)})(t[0]+t[2]/2,t[1]+t[3]/2,i*(a?1:1.5))}))})),Lt||(l.play().then(h).catch(()=>e.dispatch("autoplay-blocked")),addEventListener("pointerup",c,{once:!0}));const t=s.$data;if(t?.music?.items.length){const e=this.inject("volume"),s=e?i(e):1;this.#bt=new zt(t.music.items,t.music.loop??!0,s*(t.music.volume??1))}}this.#u.push(t.isMuted.subscribe(t=>{Mt&&(Mt.gain.value=t?0:1)})),this.destroy=()=>{Lt&&(l.remove(),removeEventListener("pointerup",c))}}onDestroy(){this.#bt?.destroy();for(const t of this.#u)t();this.#u=[]}};customElements.define(Dt.tag,Dt);var Rt=class{constructor(t,e){this.image=t,this.data=e,this.timeline=[],this._paused=!0,this.playing=!1,this.wasPaused=!1,this.unhookEvents=!1,this.micrio=t.engine.micrio;const s=e.i18n?.[i(this.micrio._lang)]??void 0;if(!s)throw new Error("No valid content for video tour!");this.content=s,this.unhookEvents=!e.keepInteraction&&this.micrio.events.$enabled,e.instance=this,this.read(),this.micrio.events.dispatch("videotour-start",this.data)}destroy(){this.unhookEvents&&this.micrio.events.enabled.set(!0),this.playing&&(this.image.camera.stop(),this.micrio.removeAttribute("data-videotour-playing"),this.micrio.events.dispatch("videotour-stop",this.data),this.playing=!1,delete this.startedAt,delete this.data.instance,this.startAt=void 0,clearTimeout(this._to))}read(){const t=this.content.timeline;this.timeline.length=0;for(let i=0;i<t.length;i++){const e=t[i],s=t[i-1],r=s?1*s.end:0;this.timeline.push({view:e.rect,start:1e3*r,duration:1e3*(1*e.start-r),pauseDuration:1*(e.end-e.start)*1e3})}this.startedAt&&!this.playing&&(this.progress=this.currentTime)}get duration(){return Number(this.content.duration)}set duration(t){this.content.duration=t}get paused(){return this._paused}get ended(){return this.currentTime>=this.duration}get currentTime(){return(this.pausedAt?this.pausedAt:this.startedAt?Date.now()-this.startedAt:0)/1e3}set currentTime(t){this.setProgress(t/this.content.duration)}get progress(){return this.currentTime/this.content.duration}set progress(t){this.setProgress(t)}play(){this.startedPlaying(),this.wasPaused=!1,this.pausedAt?(this.startedAt=Date.now()-this.pausedAt,this._paused=!1,this.gotoTime(this.pausedAt),this.pausedAt=void 0):this.playing||(this.startedAt=Date.now(),void 0===this.startAt?this.gotoStep(0,0):this.gotoTime(this.duration*this.startAt*1e3),this.startAt=void 0),this._paused=!1,this.playing=!0}pause(){this._paused||null==this.currentIndex||null==this.startedAt||(this._paused=!0,this.stoppedPlaying(),clearTimeout(this._to),this.currentIndex>=0&&this.image.camera.stop(),this.ended?this.reset():this.pausedAt=Date.now()-this.startedAt)}reset(){this.stoppedPlaying(),this.pausedAt=void 0,this.playing=!1,this.read()}gotoStep(t,i){if(null==this.startedAt)return;if(clearTimeout(this._to),!this.timeline[t]){if(!this.paused||!this.wasPaused){const t=Math.max(0,Math.round(1e3*this.duration-(Date.now()-this.startedAt)));this._to=setTimeout(()=>this.pause(),t)}return}const e=this.timeline[t],s=Math.round(e.start-(Date.now()-this.startedAt));this.currentIndex=t,this.image.camera.stop(),s>0?this._paused||(this._to=setTimeout(()=>this.startAni(i),s)):this.startAni(i)}nextStep(){null!=this.currentIndex&&this.gotoStep(this.currentIndex+1)}getView(t){return this.timeline[t]?.view}startAni(t=0){if(null==this.currentIndex||isNaN(t))return;const i=this.timeline[this.currentIndex];if(null==i)return;const e=ft(i.view),s=this.getView(this.currentIndex-1),r=s?ft(s):void 0,a=this.image.opts?.area;if(this.wasPaused&&r){const i=this.micrio.engine.ease(t),s={centerX:r.centerX*(1-i)+e.centerX*i,centerY:r.centerY*(1-i)+e.centerY*i,width:r.width*(1-i)+e.width*i,height:r.height*(1-i)+e.height*i};this.image.camera.setView([s.centerX-s.width/2,s.centerY-s.height/2,s.width,s.height],{noLimit:!0,area:a}),this.nextStep()}else this.image.camera.flyToView(i.view,{duration:i.duration,progress:t,prevView:r?[r.centerX-r.width/2,r.centerY-r.height/2,r.width,r.height]:void 0,area:a}).then(()=>{null!=this.currentIndex&&i==this.timeline[this.currentIndex]&&this.nextStep()}).catch(()=>{})}startedPlaying(){this.micrio.setAttribute("data-videotour-playing",""),this.micrio.events.dispatch("videotour-play"),this.unhookEvents&&this.micrio.events.enabled.set(!1)}stoppedPlaying(){this.micrio.removeAttribute("data-videotour-playing"),this.micrio.events.dispatch("videotour-pause"),this.unhookEvents&&this.micrio.events.enabled.set(!0)}setProgress(t){t=Math.max(0,Math.min(1,t)),this.wasPaused=!!this.paused||!this.playing,this.pause(),this.wasPaused||(this._paused=!1,this.startedPlaying());const i=this.duration*t*1e3;this.pausedAt=i,this.gotoTime(i),this.wasPaused?this.pause():(this.pausedAt=void 0,this._paused=!1)}gotoTime(t){let i=null,e=0;for(;e<this.timeline.length&&!(this.timeline[e].start>t);e++)i=this.timeline[e];if(e--,i||!(e>0))if(i){this.image.camera.stop();const s=i.duration>0?(t-i.start)/i.duration:0;this.startedAt=Date.now()-i.start-i.duration*s,isNaN(this.startedAt)&&(this.startedAt=Date.now()-t),s>1?(this.gotoStep(e+1),null!=i.view&&this.image.camera.setView(i.view,{noLimit:!0})):(e>0&&this.image.camera.setView(this.timeline[e-1].view,{noLimit:!0}),this.gotoStep(e,s))}else this.timeline.length&&this.image.camera.stop(),this.paused||this.gotoStep(0)}};window.MicrioVideoTour=Rt;var Ot=[],Xt=(t,i,e)=>new Promise((s,r)=>{if(e||Ot.includes(t))return s();const a=document.createElement("script"),n=()=>{Ot.push(t),s()};i?self[i]=n:a.onload=n,a.onerror=()=>r&&r(),a.async=!0,a.defer=!0,self.crossOriginIsolated&&(a.crossOrigin="anonymous"),a.src=t,document.head.appendChild(a)}),Yt={UNSTARTED:-1,ENDED:0,PLAYING:1,PAUSED:2,BUFFERING:3,CUED:5},$t=class{constructor(t,i,e={}){this.frame=t,this.config=i,this.callbacks=e,this.requiresTimeTick=!0,this.destroyed=!1}async initialize(){if("YT"in window||await Xt("https://r2.micr.io/youtube.js","onYouTubeIframeAPIReady"),!("YT"in window))throw new Error("Failed to load YouTube API");return new Promise((t,i)=>{this.player=new window.YT.Player(this.frame,{host:"https://www.youtube-nocookie.com",width:this.config.width.toString(),height:this.config.height.toString(),playerVars:{controls:0},events:{onError:()=>{this.callbacks.onError?.(new Error("YouTube player error")),i(new Error("YouTube player error"))},onReady:()=>{this.destroyed?i(new Error("Player destroyed during initialization")):(this.callbacks.onReady?.(),this.callbacks.onDurationChange?.(this.player.getDuration()),t())},onStateChange:t=>this.handleStateChange(t.data)}})})}handleStateChange(t){switch(t){case Yt.UNSTARTED:this.callbacks.onBlocked?.(),this.callbacks.onPause?.();break;case Yt.ENDED:this.callbacks.onEnded?.();break;case Yt.PLAYING:this.callbacks.onPlay?.(),this.callbacks.onSeeked?.();break;case Yt.PAUSED:this.callbacks.onPause?.();break;case Yt.BUFFERING:this.callbacks.onBuffering?.(),this.callbacks.onSeeking?.()}}async play(){this.player?.playVideo()}pause(){this.destroyed||this.player?.pauseVideo?.()}async getCurrentTime(){return this.player?.getCurrentTime?.()??0}setCurrentTime(t){this.callbacks.onSeeking?.(),this.player?.seekTo?.(t)}async getDuration(){return this.player?.getDuration?.()??0}async isPaused(){if(!this.player)return!0;const t=this.player.getPlayerState?.();return void 0===t||[Yt.UNSTARTED,Yt.ENDED,Yt.PAUSED,Yt.CUED].includes(t)}setMuted(t){t?this.player?.mute?.():this.player?.unMute?.()}setVolume(t){}destroy(){this.destroyed=!0,this.player?.destroy?.(),this.player=void 0}},Ft=class{constructor(t,i,e={}){this.frame=t,this.config=i,this.callbacks=e,this.requiresTimeTick=!1,this.destroyed=!1}async initialize(){if("Vimeo"in window||await Xt("https://r2.micr.io/vimeo.min.js"),!("Vimeo"in window))throw new Error("Failed to load Vimeo API");return new Promise((t,i)=>{this.player=new window.Vimeo.Player(this.frame,{width:this.config.width.toString(),height:this.config.height.toString(),title:!1,autoplay:!1});const e=this.player;e.on("error",()=>{this.callbacks.onError?.(new Error("Vimeo player error")),i(new Error("Vimeo player error"))}),e.on("loaded",()=>{this.destroyed?i(new Error("Player destroyed during initialization")):e.getVolume().then(()=>{this.callbacks.onReady?.(),t()})}),e.on("play",()=>{this.callbacks.onPlay?.(),this.callbacks.onSeeked?.()}),e.on("bufferstart",()=>{this.callbacks.onBuffering?.(),this.callbacks.onSeeking?.()}),e.on("seeked",()=>{this.callbacks.onSeeked?.()}),e.on("pause",()=>{this.callbacks.onPause?.()}),e.on("timeupdate",t=>{t&&(this.callbacks.onDurationChange?.(t.duration),this.callbacks.onTimeUpdate?.(t.seconds))}),e.on("ended",()=>{this.callbacks.onEnded?.()})})}async play(){this.player?.play()}pause(){this.player?.pause()}async getCurrentTime(){return await(this.player?.getCurrentTime?.())??0}setCurrentTime(t){this.player?.setCurrentTime?.(t)}async getDuration(){return await(this.player?.getDuration?.())??0}async isPaused(){return await(this.player?.getPaused?.())??!0}setMuted(t){this.player?.setVolume?.(t?0:1)}setVolume(t){this.player?.setVolume?.(Math.max(0,Math.min(1,t)))}destroy(){if(this.destroyed=!0,this.player){for(const t of["error","loaded","play","bufferstart","seeked","pause","volumechange","timeupdate","ended"])this.player.off(t);this.player.destroy(),this.player=void 0}}},Bt=class{constructor(t,i={}){this.element=t,this.callbacks=i,this.requiresTimeTick=!1,this.attachEventListeners()}attachEventListeners(){const t=this.element,i=this.callbacks;i.onPlay&&t.addEventListener("play",i.onPlay),i.onPause&&t.addEventListener("pause",i.onPause),i.onEnded&&t.addEventListener("ended",i.onEnded),i.onSeeking&&t.addEventListener("seeking",i.onSeeking),i.onSeeked&&t.addEventListener("seeked",i.onSeeked),i.onTimeUpdate&&t.addEventListener("timeupdate",()=>i.onTimeUpdate?.(t.currentTime)),i.onDurationChange&&t.addEventListener("durationchange",()=>i.onDurationChange?.(t.duration)),i.onError&&t.addEventListener("error",()=>i.onError?.(new Error("Media playback error"))),i.onReady&&t.addEventListener("canplay",i.onReady)}async play(){try{await this.element.play()}catch(t){throw t instanceof Error&&!/pause\(\)/.test(t.message)&&this.callbacks.onBlocked?.(),t}}pause(){this.element.pause()}async getCurrentTime(){return this.element.currentTime}setCurrentTime(t){this.element.currentTime=t}async getDuration(){return this.element.duration}async isPaused(){return this.element.paused}setMuted(t){this.element.muted=t}setVolume(t){this.element.volume=Math.max(0,Math.min(1,t))}destroy(){const t=this.element,i=this.callbacks;i.onPlay&&t.removeEventListener("play",i.onPlay),i.onPause&&t.removeEventListener("pause",i.onPause),i.onEnded&&t.removeEventListener("ended",i.onEnded),i.onSeeking&&t.removeEventListener("seeking",i.onSeeking),i.onSeeked&&t.removeEventListener("seeked",i.onSeeked)}},Vt=class{constructor(t,i,e={}){this.element=t,this.hlsSrc=i,this.callbacks=e,this.requiresTimeTick=!1,this.destroyed=!1}async initialize(){if("Hls"in window||await Xt("https://r2.micr.io/hls-1.6.15.min.js",void 0,"Hls"in window?{}:void 0),!("Hls"in window))throw new Error("Failed to load HLS.js");if(this.destroyed)throw new Error("Adapter destroyed during initialization");const t=new window.Hls({abrEwmaDefaultEstimate:1e7,abrEwmaDefaultEstimateMax:5e7});this.hls=t,t.loadSource(this.hlsSrc),t.attachMedia(this.element),this.html5Adapter=new Bt(this.element,this.callbacks),this.callbacks.onReady?.()}async play(){return this.html5Adapter?.play()}pause(){this.html5Adapter?.pause()}async getCurrentTime(){return this.html5Adapter?.getCurrentTime()??Promise.resolve(0)}setCurrentTime(t){this.html5Adapter?.setCurrentTime(t)}async getDuration(){return this.html5Adapter?.getDuration()??Promise.resolve(0)}async isPaused(){return this.html5Adapter?.isPaused()??Promise.resolve(!0)}setMuted(t){this.html5Adapter?.setMuted(t)}setVolume(t){this.html5Adapter?.setVolume(t)}destroy(){this.destroyed=!0,this.html5Adapter?.destroy(),this.hls?.destroy(),this.hls=void 0,this.html5Adapter=void 0}},Nt="micrio-captions-disable",Ht=t("1"!=localStorage.getItem(Nt));Ht.subscribe(t=>{t?localStorage.removeItem(Nt):localStorage.setItem(Nt,"1")});var Ut=class extends n{static{this.tag="micrio-media-controls"}static{this.styles="micrio-media-controls{display:block}\nmicrio-media-controls aside.controls-wrapper{display:flex;align-items:center;width:100%;--micrio-background:var(--micrio-background,#000)}\nmicrio-media-controls micrio-button{border-radius:0;margin:0;border:none}\nmicrio-media-controls micrio-button:last-child{margin-right:16px}\nmicrio-media-controls>*{--micrio-button-background:none;--micrio-background-filter:none;--micrio-button-shadow:none}\n:fullscreen micrio-media-controls{position:absolute;bottom:5px;left:50%;transform:translateX(-50%);width:430px;max-width:90vw;max-width:90cqw;border-radius:var(--micrio-border-radius)}\nmicrio-media-controls .container{flex:1;display:flex;align-items:center;gap:8px;padding:0 8px}\nmicrio-media-controls .bars{flex:1;height:4px;background:var(--micrio-progress-bar-background,var(--micrio-color-hover));cursor:pointer;position:relative;border-radius:2px}\nmicrio-media-controls .bar{position:absolute;top:0;left:0;height:100%;border-radius:2px;background:var(--micrio-color)}\nmicrio-media-controls .time{font-size:90%;white-space:nowrap;font-variant-numeric:tabular-nums;color:var(--micrio-color);text-align:center;min-width:50px;padding:0;display:block}"}#c={paused:!0,ended:!1};#wt;#yt;#xt;#kt;#b=!1;#Et;#Tt=!1;#Mt=!1;#Ct=-1;#St="";onMount(){this.#V()}setProps(t){Object.assign(this.#c,t),this.isConnected&&this.#V()}#V(){const t=this.#c;if(!this.#b){if(this.#b=!0,this.#wt=document.createElement("aside"),this.#wt.className="controls-wrapper",this.#wt.addEventListener("click",t=>t.stopPropagation()),this.#wt.addEventListener("keydown",t=>t.stopPropagation()),this.appendChild(this.#wt),this.#yt=document.createElement("micrio-button"),this.#wt.appendChild(this.#yt),t.hasAudio){const t=document.createElement("micrio-button");t.className="ctrl-mute",this.#wt.appendChild(t)}if(t.subtitles){const t=document.createElement("micrio-button");t.className="ctrl-subtitles",this.#wt.appendChild(t)}if(t.fullscreenEl){const t=document.createElement("micrio-fullscreen");t.className="ctrl-fullscreen",this.#wt.appendChild(t)}const e=document.createElement("div");e.className="container";const s=document.createElement("div");s.className="bars",this.#xt=document.createElement("div"),this.#xt.className="bar",s.appendChild(this.#xt);const r=t=>{0==t.button&&(window.addEventListener("mousemove",a),window.addEventListener("mouseup",n),a(t))},a=t=>{const i=s.getClientRects()[0];if(!i)return;const e=Math.min(1,Math.max(0,(t.clientX-i.left)/i.width));this.#c.onseek?.(e*this.#c.duration)},n=()=>{window.removeEventListener("mousemove",a),window.removeEventListener("mouseup",n)};if(s.addEventListener("mousedown",r),e.appendChild(s),this.#kt=document.createElement("span"),this.#kt.className="time",e.appendChild(this.#kt),this.#wt.appendChild(e),t.onclose){const e=document.createElement("micrio-button");e.className="ctrl-close",e.setProps({type:"close",title:i(rt).close,onclick:t.onclose}),this.#wt.appendChild(e)}}this.#B()}#B(){const t=this.#c,e=i(rt),s=i(Ht);t.paused===this.#Et&&t.seeking===this.#Tt&&void 0!==this.#Et||(this.#Et=t.paused,this.#Tt=!!t.seeking,this.#yt.setProps({type:t.paused?"play":"pause",title:t.paused?e.play:e.pause,disabled:!!t.seeking,onclick:t.onplaypause}));const r=this.#wt.querySelector(".ctrl-mute");r&&t.muted!==this.#Mt&&(this.#Mt=!!t.muted,r.setProps({type:t.muted?"volume-off":"volume-up",title:t.muted?e.audioUnmute:e.audioMute,disabled:t.seeking,onclick:t.onmute}));const a=this.#wt.querySelector(".ctrl-subtitles");a&&a.setProps({type:s?"subtitles":"subtitles-off",active:s,title:e.subtitlesToggle,onclick:()=>Ht.set(!s)});const n=this.#wt.querySelector(".ctrl-fullscreen");if(n&&n.setProps({el:t.fullscreenEl}),t.duration&&!isNaN(t.duration)){const i=(t.currentTime??0)/t.duration*100;(Math.abs(i-this.#Ct)>.5||0===i)&&(this.#Ct=i,this.#xt.style.width=`${i}%`);const e=t.duration-(t.currentTime??0),s=(e>=0?"-":"")+function(t){return`${Math.floor(t/60)}:${Math.floor(t%60).toString().padStart(2,"0")}`}(Math.abs(e));s!==this.#St&&(this.#St=s,this.#kt.textContent=s)}else"0:00"===this.#St&&0===this.#Ct||(this.#St="0:00",this.#Ct=0,this.#kt.textContent="0:00",this.#xt.style.width="0%")}};customElements.define(Ut.tag,Ut);var Wt=/((?:https?:)?\/\/)?((?:www|m)\.)?((?:youtube\.com|youtu.be|youtube-nocookie\.com))(\/(?:[\w\-]+\?v=|embed\/|v\/)?)([\w\-]+)(\S+)?/,Gt=/vimeo\.com/,jt=class extends n{static{this.tag="micrio-media"}static{this.styles="micrio-media{display:block}\nmicrio-media figure{position:relative;margin:0;padding:0}\nmicrio-media figure video,micrio-media figure audio{width:100%;display:block}\nmicrio-media figure figcaption{padding:5px 10px;font-size:.85em;opacity:.7;text-align:center;background:var(--micrio-background)}\nmicrio-media figure iframe{width:100%;border:none;display:block}\nmicrio-media figure:has(video){width:auto}\nmicrio-media figure.videotour{position:fixed;bottom:var(--micrio-border-margin);left:50%;transform:translateX(-50%);width:500px;max-width:90vw;display:flex;flex-direction:column;background:var(--micrio-button-background,var(--micrio-background,none));border-radius:var(--micrio-border-radius);box-shadow:var(--micrio-button-shadow);backdrop-filter:var(--micrio-background-filter);margin:0;padding:0;z-index:5}\nmicrio-media figure.hidden{display:none!important}\nmicrio-media figure .overlay{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:1;background:rgba(0,0,0,.3);transition:opacity .3s ease}\nmicrio-media figure .overlay.hidden{opacity:0;pointer-events:none}\nmicrio-media figure .overlay micrio-button{--micrio-button-size:80px;--micrio-icon-size:40px;--micrio-border-radius:100%;--micrio-button-background:rgba(0,0,0,.6);--micrio-button-shadow:none;--micrio-background-filter:none;pointer-events:none}"}#c={};#u=[];#At;#Lt;#Pt;#It;#_t;#zt;#Dt=!0;#Rt=!1;#Ot=0;#Xt=0;#Yt=!1;#$t=!1;onMount(){this.#a()}setProps(t){Object.assign(this.#c,t),this.isConnected&&this.#a()}#a(){const t=this.#c,i=t.src;if(!i&&!t.tour)return void(this.innerHTML="");const e=!!i&&Wt.test(i),s=!!i&&Gt.test(i),r=!!i&&i.startsWith("cfvid://"),a=!!i&&(i.includes(".mp3")||i.includes(".ogg")||i.includes(".wav")||i.includes("audio/")),n=!i&&!!t.tour&&!!t.image;this.replaceChildren();const o=document.createElement("figure");if(o.className=t.className??"",t.className?.includes("hidden")&&o.classList.add("hidden"),n&&o.classList.add("videotour"),t.is360&&o.style.setProperty("--micrio-background","transparent"),e){const e=i.match(Wt)?.[5];if(e){const i=document.createElement("iframe");i.src=`https://www.youtube-nocookie.com/embed/${e}?autoplay=${t.autoplay?1:0}&playsinline=1&enablejsapi=1`,i.width=String(t.width??400),i.height=String(t.height??240),i.setAttribute("allow","autoplay; encrypted-media"),i.setAttribute("allowfullscreen",""),o.appendChild(i),this.#Pt=i}}else if(s){const e=i.match(/\/(\d+)/);if(e?.[1]){const s=e[1],r=i.slice(i.indexOf(s)+s.length+1).replace(/\?.*$/,"")||void 0,a=`https://player.vimeo.com/video/${s}?${r?`h=${r}&`:""}title=0&portrait=0&sidedock=0&byline=0&controls=0`,n=document.createElement("iframe");n.src=a,n.width=String(t.width??400),n.height=String(t.height??240),n.setAttribute("allow","autoplay; fullscreen"),n.setAttribute("allowfullscreen",""),o.appendChild(n),this.#Pt=n}}else if(r){const e=`https://videodelivery.net/${i.slice(8)}/manifest/video.m3u8`,s=document.createElement("video");s.src=e,s.width=t.width??400,s.height=t.height??240,s.controls=!1,s.preload="metadata",s.playsInline=!0,s.crossOrigin="anonymous",t.autoplay&&(s.autoplay=!0),t.muted&&(s.muted=!0),o.appendChild(s),this.#At=s,this.#Ft(s),this.#It=e}else if(!n&&a){const e=document.createElement("audio");e.src=i,e.controls=!1,e.preload="metadata",e.style.display="none",t.autoplay&&(e.autoplay=!0),t.muted&&(e.muted=!0),o.appendChild(e),this.#At=e,this.#Ft(e)}else if(!n){const e=document.createElement("video");e.src=i,e.width=t.width??400,e.height=t.height??240,e.controls=!1,e.preload="metadata",e.playsInline=!0,e.crossOrigin="anonymous",t.autoplay&&(e.autoplay=!0),t.muted&&(e.muted=!0),o.appendChild(e),this.#At=e,this.#Ft(e)}if(t.figcaption){const i=document.createElement("figcaption");i.textContent=t.figcaption,o.appendChild(i)}if(this.appendChild(o),this.#Pt){const i=t.width??400,r=t.height??240;e?(this.#_t=new $t(this.#Pt,{width:i,height:r},{onPlay:()=>{this.#Dt=!1,this.#Bt(),this.#Vt()},onPause:()=>{this.#Dt=!0,this.#Nt(),this.#Vt()},onEnded:()=>{this.#Rt=!0,this.#Dt=!0,this.#Nt(),this.#Vt(),t.onended?.()},onSeeking:()=>{this.#Yt=!0},onSeeked:()=>{this.#Yt=!1,this.#Vt()}}),this.#_t.initialize().then(()=>{t.autoplay&&this.#_t.play()}).catch(()=>{})):s&&(this.#_t=new Ft(this.#Pt,{width:i,height:r},{onPlay:()=>{this.#Dt=!1,this.#Vt()},onPause:()=>{this.#Dt=!0,this.#Vt()},onEnded:()=>{this.#Rt=!0,this.#Dt=!0,this.#Vt(),t.onended?.()},onTimeUpdate:t=>{this.#Xt=t,this.#Vt()},onDurationChange:t=>{this.#Ot=t}}),this.#_t.initialize().then(()=>{t.autoplay&&this.#_t.play()}).catch(()=>{}))}if(r&&this.#It&&this.#At&&("MediaSource"in window||"ManagedMediaSource"in window)&&(this.#_t=new Vt(this.#At,this.#It,{onReady:()=>{this.#Vt()},onEnded:()=>{this.#Rt=!0,this.#Dt=!0,this.#Vt(),t.onended?.()}}),this.#_t.initialize().catch(()=>{})),t.tour&&t.image&&(this.#At||n))if(this.#Lt=new Rt(t.image,t.tour),n){this.#Ot=this.#Lt.duration;const i=setInterval(()=>{this.#Xt=this.#Lt.currentTime,this.#Ot=this.#Lt.duration,this.#Dt=this.#Lt.paused,this.#Rt=this.#Lt.ended,this.#Vt(),this.#Rt&&t.onended?.()},250);this.#u.push(()=>clearInterval(i)),t.autoplay&&this.#Lt.play()}else{const t=()=>this.#Lt?.play();this.#At?.addEventListener("play",t,{once:!0}),this.#At?.paused||t()}if(!1!==t.controls){const i=document.createElement("micrio-media-controls"),e=()=>{const t=this.#At;t?t.paused?t.play().catch(()=>{}):t.pause():this.#Lt?this.#Lt.paused?this.#Lt.play():this.#Lt.pause():this.#_t&&this.#_t.isPaused().then(t=>{t?this.#_t.play():this.#_t.pause()})},s=()=>{const t=this.#At;t?(this.#$t=!this.#$t,t.muted=this.#$t,this.#Vt()):this.#_t&&(this.#$t=!this.#$t,this.#_t.setMuted(this.#$t),this.#Vt())},r=t=>{const i=this.#At;i?i.currentTime=t:this.#Lt?this.#Lt.currentTime=t:this.#_t&&this.#_t.setCurrentTime(t)},n=()=>{const n=this.#At;if(!n)return this.#Lt?void 0:void this.#_t;this.#Xt=n.currentTime,this.#Ot=n.duration||0,this.#Dt=n.paused,this.#Rt=n.ended||!1,this.#Yt=n.seeking,this.#$t=n.muted,i.setProps({currentTime:this.#Xt,duration:this.#Ot,paused:this.#Dt,ended:this.#Rt,seeking:this.#Yt,muted:this.#$t,hasAudio:!!t.src&&!a,minimal:!1,fullscreenEl:a?void 0:o,onplaypause:e,onmute:s,onseek:r,onclose:t.onclose})};i.setProps({minimal:!1,paused:!0,ended:!1,hasAudio:!!t.src&&!a,fullscreenEl:a?void 0:o,onplaypause:e,onmute:s,onseek:r,onclose:t.onclose}),o.appendChild(i),this.#At&&(this.#At instanceof HTMLVideoElement||this.#At instanceof HTMLAudioElement)&&(this.#At.addEventListener("timeupdate",n),this.#At.addEventListener("loadedmetadata",n),this.#At.addEventListener("play",n),this.#At.addEventListener("pause",n),this.#At.addEventListener("ended",()=>{n(),t.onended?.()}),this.#At.addEventListener("seeking",()=>{this.#Yt=!0,n()}),this.#At.addEventListener("seeked",()=>{this.#Yt=!1,n()}))}if(t.is360&&!t.noPlayOverlay&&!n){const i=document.createElement("div");i.className="overlay",t.autoplay&&!t.paused||i.classList.add("hidden");const e=document.createElement("micrio-button");e.setProps({type:"play",noClick:!0}),i.appendChild(e),i.addEventListener("click",()=>{const t=this.#At;t?(t.play().catch(()=>{}),i.classList.add("hidden")):this.#_t&&(this.#_t.play(),i.classList.add("hidden"))}),o.appendChild(i)}}#Ft(t){const i=this.inject("volume");i&&this.#u.push(i.subscribe(i=>{t.volume=i}))}#Bt(){null==this.#zt&&(this.#zt=setInterval(async()=>{this.#_t&&(this.#Xt=await this.#_t.getCurrentTime(),this.#Ot=await this.#_t.getDuration(),this.#Vt())},250))}#Nt(){null!=this.#zt&&(clearInterval(this.#zt),this.#zt=void 0)}#Vt(){const t=this.querySelector("micrio-media-controls");t&&t.setProps({currentTime:this.#Xt,duration:this.#Ot,paused:this.#Dt,ended:this.#Rt,seeking:this.#Yt,muted:this.#$t})}onDestroy(){this.#Lt?.destroy(),this.#_t?.destroy(),this.#Nt();for(const t of this.#u)t();this.#u=[]}};customElements.define(jt.tag,jt);var qt=class extends n{static{this.tag="micrio-marker-popup"}static{this.styles="micrio-marker-popup{display:block;cursor:auto;pointer-events:all;position:absolute;top:var(--micrio-border-margin);left:var(--micrio-border-margin)}\nmicrio-marker-popup.destroying{pointer-events:none}\nmicrio-marker-popup>main{max-height:80vh;max-height:80cqh}\nmicrio-marker-popup>aside{padding:var(--micrio-border-margin)}\nmicrio-marker-popup>aside progress{display:none}\n@media(min-width:501px){micrio-marker-popup{width:440px;min-width:20%}micrio-marker-popup>aside{position:absolute;left:100%;top:0;padding-top:0}\nmicrio-marker-popup>aside>.micrio-button{padding:0;margin:0 0 8px 0;display:block}\n}\n@media(max-width:500px){micrio-marker-popup>aside{position:relative;padding:0;display:flex;flex-direction:row-reverse;margin-bottom:var(--micrio-border-margin);align-items:center}\nmicrio-marker-popup>aside progress{display:block;flex:1;opacity:0;pointer-events:none}\nmicrio-marker-popup>aside .micrio-tour-controls{margin-bottom:0!important;display:flex}\nmicrio-marker-popup>aside .micrio-button{display:block!important;height:var(--micrio-button-size);padding:0!important;margin:0 0 0 8px}\nmicrio-marker-popup{width:auto;right:var(--micrio-border-margin);display:flex;bottom:calc(var(--micrio-button-size) + 2 * var(--micrio-border-margin));flex-direction:column;justify-content:space-between}\nmicrio-marker-popup>main{max-height:40vh}\n}\nbutton.tour-step{height:auto;line-height:normal;vertical-align:middle;cursor:default}"}#c={marker:null};#u=[];#Ht;#Ut;#Wt=!1;#Gt=!1;#jt=!1;#qt=new WeakMap;onMount(){const{marker:t}=this.#c,i=this.inject("micrio");i&&t&&(t.tags?.forEach(t=>this.classList.add(t)),setTimeout(()=>this.querySelector("button")?.focus(),500),this.#u.push(i.state.popup.subscribe(i=>{this.#Gt=!i||i!=t,this.classList.toggle("destroying",this.#Gt)})),this.#a())}setProps(t){void 0!==t.marker&&(this.#c.marker=t.marker)}#a(){const{marker:t}=this.#c,e=this.inject("micrio");if(!e||!t)return;const s=n.markerImages,r=t.id?s.get(t.id):void 0;if(!r)return;const a=i(e.state.tour),o=i(e.current),h=i(rt),c=r.$settings._markers??{},l=t.data||{},d=c.canMinimizePopup,m=a&&"steps"in a?a:void 0,u=m?e.canvases.find(t=>t.$data?.markerTours?.find(t=>t.id===m.id)):void 0,p=m&&m.steps?.findIndex(i=>i.startsWith(t.id))>=0,g=p&&!m?.isSerialTour&&(u?.$settings._markers?.tourControlsInPopup??c.tourControlsInPopup),f=p&&!m?.isSerialTour&&(u?.$settings._markers?.tourStepCounterInPopup??c.tourStepCounterInPopup),v=m?.currentStep??-1,b=g||(m?m.currentStep==m.steps.length-1:void 0),w=!!m&&m.currentStep==m.steps.length-1,y=t=>{a&&p&&"steps"in a?t instanceof Event&&b?e.state.tour.set(void 0):a.next?.():o&&!r.opts.secondaryTo&&o.id!=r.id&&l.micrioLink?.id==o.id?(e.open(r.id),r.state.marker.set(void 0),e.state.popup.set(void 0)):r.state.marker.set(void 0)},x=(t=!1)=>{m&&(t?m.prev?.():m.next?.(),this.#jt=!0,setTimeout(()=>this.#jt=!1,200))},k=()=>{if(this.#Wt=!this.#Wt,this.classList.toggle("minimized",this.#Wt),this.#Ht)for(let t=0;t<this.#Ht.children.length;t++){const i=this.#Ht.children[t];i&&i!==this.#Ut&&(this.#qt.has(i)||(this.#qt.set(i,i.offsetHeight),i.style.height=i.offsetHeight+"px"),setTimeout(()=>{i.style.height=this.#Wt?"0px":this.#qt.get(i)+"px"},100))}};this.replaceChildren();const E=document.createElement("aside");if(!l.alwaysOpen){const t=document.createElement("micrio-button");t.setProps({type:!p||b?"close":"arrow-right",title:!p||b?h.closeMarker:h.tourStepNext,disabled:this.#jt,onclick:y}),E.appendChild(t)}if(d){const t=document.createElement("micrio-button");t.setProps({type:this.#Wt?"arrow-up":"arrow-down",title:h.minimize,onclick:k}),E.appendChild(t)}if(g&&a&&"steps"in a){const t=document.createElement("progress");t.setAttribute("aria-hidden","true"),t.value=(v+1)/a.steps.length,t.className="progress",E.appendChild(t);const i=document.createElement("micrio-button-group");i.setProps?.({className:"micrio-tour-controls"});const e=document.createElement("micrio-button");if(e.setProps({type:"arrow-left",disabled:this.#jt||0==v,title:h.tourStepPrev,onclick:()=>x(!0)}),i.appendChild(e),f){const t=document.createElement("button");t.className="micrio-button tour-step",t.disabled=!0,t.textContent=`${v+1} / ${a.steps.length}`,i.appendChild(t)}const s=document.createElement("micrio-button");s.setProps({type:"arrow-right",disabled:this.#jt||w,title:h.tourStepNext,onclick:()=>x()}),i.appendChild(s),E.appendChild(i)}this.appendChild(E);const T=document.createElement("micrio-marker-content");T.setProps({marker:t,onclose:y}),this.appendChild(T)}onDestroy(){for(const t of this.#u)t();this.#u=[]}};customElements.define(qt.tag,qt);var Zt=class extends n{static{this.tag="micrio-marker"}static{this.styles="micrio-marker{position:absolute;display:block;transform:translate3d(var(--x,0),var(--y,0),0) translate(-50%,-50%) scale3d(var(--scale,1),var(--scale,1),1);top:0;left:0;will-change:transform}\nmicrio-marker:not(.cluster):not(.no-fade){animation:micrio-marker-fade .25s forwards}\nmicrio-marker.overlapped{display:none}\n@keyframes micrio-marker-fade{from{opacity:0}to{opacity:1}}\nmicrio-marker.behind{pointer-events:none;opacity:0!important}\nmicrio-marker.mat3d{transform:var(--mat);top:50%;left:50%;transform-style:preserve-3d}\nmicrio-marker.mat3d button{position:absolute;transform:translate3d(-50%,-50%,0)}\nmicrio-marker button{display:block;width:var(--micrio-marker-size);height:var(--micrio-marker-size);color:var(--micrio-marker-text-color);position:relative;cursor:pointer;font:inherit;padding:0;margin:0;background:transparent none center center no-repeat;background-image:var(--micrio-marker-icon);background-size:contain;border:none}\nmicrio-marker label{position:absolute;top:50%;left:100%;text-align:var(--micrio-text-align);cursor:pointer;transform:translate(0,-50%);padding-left:10px;max-width:170px;width:max-content;white-space:pre-wrap;font-size:90%;font-weight:600;line-height:1em;text-shadow:var(--micrio-marker-text-shadow);opacity:0;pointer-events:none;transition:opacity .1s ease}\nmicrio-marker:hover{z-index:2}\nmicrio-marker:hover label,.show-titles micrio-marker label{opacity:1}\n@media(max-width:640px){micrio-marker label{font-size:12px}}\n.show-titles micrio-marker label{pointer-events:all}\nmicrio-marker label.static{transform:translate(-50%,4px) scale3d(calc(1/var(--scale,1)),calc(1/var(--scale,1)),1)}\nmicrio-marker.default button{box-sizing:content-box;background-clip:content-box;border-radius:var(--micrio-marker-border-radius);border:var(--micrio-marker-border-size) solid var(--micrio-marker-border-color);transition:var(--micrio-marker-transition);background-color:var(--micrio-marker-color)}\nmicrio-marker.default:hover,micrio-marker.default.hovered,micrio-marker.default.opened{z-index:1}\nmicrio-marker.default:hover button,micrio-marker.default.hovered button,micrio-marker.default.opened button{background-color:var(--micrio-marker-highlight);border-width:0;width:calc(var(--micrio-marker-size,25px) + var(--micrio-marker-border-size,3px)*2);height:calc(var(--micrio-marker-size,25px) + var(--micrio-marker-border-size,3px)*2)}\nmicrio-marker.has-icon{--micrio-marker-icon:none}\nmicrio-marker.has-custom-icon{--micrio-marker-size:32px}\nmicrio-marker.default.has-icon button{color:#fff;width:calc(var(--micrio-marker-size)+24px);height:calc(var(--micrio-marker-size)+24px);background-color:var(--micrio-marker-border-color);border:none}\nmicrio-marker.default.has-icon.opened button svg,micrio-marker.default.has-icon.hovered button svg,micrio-marker.default.has-icon:hover button svg{color:var(--micrio-marker-highlight)}\nmicrio-marker.default.has-custom-icon button{background-color:transparent}\nmicrio-marker.default.has-custom-icon.opened button,micrio-marker.default.has-custom-icon.hovered button,micrio-marker.default.has-custom-icon:hover button{background-color:var(--micrio-marker-highlight,var(--micrio-marker-color))}\nmicrio-marker.cluster button{border:2px solid var(--micrio-marker-color);background:var(--micrio-cluster-marker-background,#fff);color:var(--micrio-cluster-marker-color,#000);width:calc(var(--micrio-marker-size)+12px);height:calc(var(--micrio-marker-size)+12px);border-radius:100%;box-sizing:content-box}\nmicrio-marker.cluster:hover button{background:var(--micrio-marker-highlight,#fff);border-color:var(--micrio-marker-highlight,#fff)}\nmicrio-marker.cluster label{pointer-events:none;display:none}\nmicrio-marker img{max-width:100%;max-height:100%;display:block;margin:auto}"}#c={marker:null};#u=[];#Zt=!1;#Kt=!1;#Qt=0;#Jt=0;#ti=1;#ii=0;#ei="";#it;#si;onMount(){const{marker:t,image:s,forceHidden:r=!1}=this.#c,a=this.inject("micrio");if(!a||!s||!t)return;const o=n.markerImages;!o.has(t.id)&&s&&o.set(t.id,s);const h=a.events,c=i(a._lang),l=s.$settings._markers??{},d=t.i18n?.[c],m=t.data??{},u=!1===t.data?.showTitle||!!l.noTitles||!!s.$settings.omni?.sideLabels,p=/[?&]micrioNoTooltips/.test(location.search)||!!s.$settings.omni?.sideLabels;if(t.videoTour){const i=t.videoTour.i18n?.[c]?.timeline;i?.length&&(t.view=i[0].rect)}const g=d&&!u&&(d.label||d.title),f="cluster"==t.type,v=f||"link"!=t.type?"media"==t.type?"play":void 0:"link",b=null!=t.data?.customIconIdx?s.$settings._markers?.customIcons?.[t.data.customIconIdx]:t.data?.icon||l.markerIcon,w=!!v||!!b,y=w||"default"==t.type;const x=()=>{if(s.is360)this.#ei=s.camera.getMatrix(t.x,t.y,1,1,0,0,0).join(","),this.style.setProperty("--mat",`matrix3d(${this.#ei})`);else{const i=s.camera.getXYDirect(t.x,t.y,{radius:t.radius,rotation:t.rotation});[this.#Qt,this.#Jt,this.#ti,this.#ii]=i,s.is360&&(this.#Kt=this.#ii>0),this.style.setProperty("--x",`${this.#Qt}px`),this.style.setProperty("--y",`${this.#Jt}px`),(s.$settings.markersScale||t.data?.scales)&&this.style.setProperty("--scale",`${this.#ti}`),this.classList.toggle("behind",this.#Kt)}},k=()=>{if(t.onclick)return t.onclick(t);l.noMarkerActions||("cluster"==t.type?t.view&&a.$current?.$info&&s.camera.flyToView(t.view,{area:s.opts?.area,limitZoom:!0}):s.state.marker.set(t))},E=()=>{l.noMarkerActions||(this.parentNode?.scrollTo(0,0),clearTimeout(this.#it),this.#it=setTimeout(()=>{const i=s.camera.getXY(t.x,t.y);!this.#Zt&&(i[0]<0||i[0]>=a.offsetWidth||i[1]<0||i[1]>=a.offsetHeight||s.is360&&i[3]>4)&&s.camera.flyToCoo([t.x,t.y],{speed:2,limit:!0}).catch(()=>{})},150))},T=async()=>{if(this.#Zt)return;if(this.#Zt=!0,clearTimeout(this.#it),l.noMarkerActions)return;h.dispatch("marker-open",t);const r=i(a.state.tour);!r||"steps"in r&&r.steps?.includes?.(t.id)||a.state.tour.set(void 0),await e(),!t.view||m.noAnimate||t.videoTour?M():s.camera.flyToView(t.view,{area:s.opts?.area}).then(M).catch(()=>{s.openedView=void 0,s.state.marker.set(void 0)})},M=async()=>{if(f)return;if(s.state.$marker!=t)return s.state.marker.set(t);if(l.noMarkerActions)return;const r=i(a.state.tour);var n;h.dispatch("marker-opened",t),"popup"==t.popupType&&(d?.title||d?.body||d?.bodySecondary||d?.embedUrl||t.images?.length||t.videoTour)?e().then(()=>a.state.popup.set(t)):"popover"==t.popupType?a.state.popover.set({marker:t,image:s,markerTour:r&&"steps"in r?r:void 0}):t.videoTour&&!r&&(a.state.tour.set(t.videoTour),(n=a.state.tour,new Promise(t=>{let i;i=n.subscribe(s=>{null==s&&(i?i():e().then(()=>i()),t(s))})})).then(()=>s.state.marker.set(void 0)));const o=m.micrioLink?.id;o&&e().then(()=>{s.camera.stop(),a.open(o,{vector:vt(a,o)?.vector})})},C=()=>{clearTimeout(this.#si),h.dispatch("marker-closed",t),a.state.popover.set(void 0),a.state.popup.set(void 0)};if(this.#u.push(s.state.marker.subscribe(i=>{"string"==typeof i&&i==t.id?s.state.marker.set(t):i==t?T():m.alwaysOpen||(this.#Zt&&C(),this.#Zt=!1)})),t.noMarker||this.#u.push(s.state.view.subscribe(()=>{x()})),r||e().then(()=>{const e=i(a.state.popup),r=i(a.state.tour);this.#Zt&&!t.noMarker&&e&&e!=t&&!r?s.state.marker.set(void 0):m.alwaysOpen&&M()}),this.classList.toggle("cluster",f),this.classList.toggle("default",!!y),this.classList.toggle("has-icon",w),this.classList.toggle("has-custom-icon",!!b),this.#ei&&this.classList.add("mat3d"),!t.htmlElement){const i=document.createElement("button");if(p||f||(i.title=d?.label||d?.title||""),i.id=t.id,i.addEventListener("click",k),i.addEventListener("focus",E),i.addEventListener("blur",()=>clearTimeout(this.#it)),i.addEventListener("mouseenter",()=>a.state.markerHoverId.set(t.id)),i.addEventListener("mouseleave",()=>a.state.markerHoverId.set(void 0)),i.setAttribute("data-scroll-through",""),b){const t=document.createElement("img");t.src="string"==typeof b?b:b.src,t.alt="",i.appendChild(t)}else if(v){const t=document.createElement("micrio-icon");t.setAttribute("name",v),i.appendChild(t)}if(g){const e=document.createElement("label");e.textContent=d?.label||d?.title||"",e.setAttribute("for",t.id),e.setAttribute("data-scroll-through",""),i.appendChild(e)}this.appendChild(i)}t.noMarker||x(),t.tags&&t.tags.forEach(t=>this.classList.add(t))}setProps(t){Object.assign(this.#c,t)}onDestroy(){clearTimeout(this.#it),clearTimeout(this.#si);for(const t of this.#u)t();this.#u=[]}};customElements.define(Zt.tag,Zt);var Kt=class extends n{static{this.tag="micrio-markers"}static{this.styles="micrio-markers{pointer-events:none;position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;will-change:width,height,top,left,opacity;perspective:inherit}\nmicrio-markers:empty{display:none}\nmicrio-markers>*{pointer-events:all}\nmicrio-markers.inactive>*{pointer-events:none}\nmicrio-markers.is360{transition:opacity .25s}\nmicrio-markers.is360.inactive{opacity:0}"}#c={image:null};#u=[];onMount(){const{image:t}=this.#c,e=this.inject("micrio");if(!e||!t)return;const{switching:s,state:r}=e,a=e.canvases[0]?.grid,n=a?.focussed,o=a?.markersShown;this.#u.push(t.viewport.subscribe(t=>{t=t?.map(t=>Math.round(100*t)/100),this.style.cssText=[...t[0]?[`left: ${t[0]}px`]:[],...t[1]?[`top: ${t[1]}px`]:[],`width: ${t[2]}px`,`height: ${t[3]}px`].join(";")+";"}));const h=()=>{const r=t.$data?.markers,h=n?i(n):void 0,c=o?i(o):void 0,l=a&&h!=t&&c&&c.indexOf(t)<0,d=!!t.$settings._markers?.showTitles;if(this.classList.toggle("inactive",!!l),this.classList.toggle("show-titles",d),!i(s)&&e.spaceData){const i=e.spaceData.links.filter(i=>i[0]==t.id||i[1]==t.id),s=new Set(i.map(i=>i[0]==t.id?i[1]:i[0]));for(const t of this.querySelectorAll(":scope > micrio-waypoint"))s.has(t.getAttribute("data-target-id"))||t.remove();for(const e of i){const i=e[0]==t.id?e[1]:e[0];let s=this.querySelector(`:scope > micrio-waypoint[data-target-id="${i}"]`);s||(s=document.createElement("micrio-waypoint"),s.setAttribute("data-target-id",i),s.setProps({targetId:i,settings:e[2]?.[t.id],image:t}),this.appendChild(s))}}else for(const t of this.querySelectorAll(":scope > micrio-waypoint"))t.remove();if(r){const s=i(e._lang),a=r.filter(t=>!(t.noMarker||t.i18n&&!t.i18n[s])),n=new Set(a.map(t=>t.id));for(const t of this.querySelectorAll(":scope > micrio-marker"))n.has(t.getAttribute("data-marker-id")??"")||t.remove();for(const i of a){let e=this.querySelector(`:scope > micrio-marker[data-marker-id="${i.id}"]`);e||(e=document.createElement("micrio-marker"),e.setAttribute("data-marker-id",i.id),e.setProps({marker:i,image:t}),this.appendChild(e))}}else for(const t of this.querySelectorAll(":scope > micrio-marker"))t.remove();if(l)for(const t of this.querySelectorAll(":scope > micrio-marker, :scope > micrio-waypoint"))t.remove()};if(this.watchLater(t.data,h),this.watchLater(s,h),r.tour&&this.watchLater(r.tour,h),this.watchLazy(e._lang,h),t.is360&&this.classList.add("is360"),!t.grid&&t.$settings._markers?.zoomOutAfterClose){let s=!1;this.#u.push(t.state.marker.subscribe(r=>{r&&"string"!=typeof r&&!t.openedView&&!r.noMarker&&r.view?(t.openedView=i(e.state.tour)&&!("steps"in i(e.state.tour))?void 0:p(t.state.$view??t.camera?.getView()),s=!!r.videoTour):r||!t.openedView||i(e.state.tour)||setTimeout(()=>{if(t.openedView){const i=t.openedView,e=Math.min(1,i[2]),s=Math.min(1,i[3]),r=e/2,a=s/2,n=Math.max(r,Math.min(1-r,i[0]+r)),o=Math.max(a,Math.min(1-a,i[1]+a));t.camera.flyToView([n-r,o-a,e,s],{speed:t.$settings._markers?.zoomOutAfterCloseSpeed}).catch(()=>{})}t.openedView=void 0,s=!1},s?250:10)}))}h()}setProps(t){void 0!==t.image&&(this.#c.image=t.image)}onDestroy(){for(const t of this.#u)t();this.#u=[]}};customElements.define(Kt.tag,Kt);var Qt=class extends n{static{this.tag="micrio-dial"}static{this.styles="micrio-dial{position:absolute;bottom:var(--micrio-border-margin);width:320px;max-width:calc(100vw - calc(2 * (var(--micrio-button-size) + 4 * var(--micrio-border-margin))));max-width:calc(100cqw - calc(2 * (var(--micrio-button-size) + 4 * var(--micrio-border-margin))));left:50%;transform:translateX(-50%);height:calc(var(--micrio-button-size)*0.6);touch-action:none;background-color:transparent;cursor:w-resize;overflow:hidden}\nmicrio-dial::before,micrio-dial::after{content:'';display:block;width:100%;position:absolute;background-position:var(--micrio-dial-offset,0px)}\nmicrio-dial::before{height:50%;top:25%;background-image:repeating-linear-gradient(to right,#8888 0%,#8888 0.5%,transparent 1%,transparent 2.5%)}\nmicrio-dial::after{height:100%;background-image:repeating-linear-gradient(to right,#fff8 0%,#fff8 0.5%,transparent 1%,transparent 20%)}\nmicrio-dial span{position:absolute;display:block;bottom:0;line-height:calc(var(--micrio-button-size)*0.6);left:50%;transform:translateX(calc(-50% + 5px));color:var(--micrio-color);opacity:.85;pointer-events:none;text-shadow:1px 1px 3px #000,-1px -1px 3px #000;font-size:smaller}"}#c={currentRotation:0,frames:1};#ri;onMount(){const t=this.inject("micrio");if(!t)return;const i=t.$current?.camera;if(!i)return;let e,s=0,r=0;const a=e=>{const a=Math.max(1,(i.getXY(1,.5)[0]-i.getXY(0,.5)[0])/t.offsetWidth),n=(r/360+(s-e.clientX)/(this.#ri.offsetWidth*a))*this.#c.frames;this.#c.onturn?.(n)},n=()=>{e&&t.releasePointerCapture(e),t.removeAttribute("data-panning"),t.removeEventListener("pointermove",a),t.removeEventListener("pointerup",n)};this.#ri=this,this.addEventListener("pointerdown",i=>{i.stopPropagation(),i.preventDefault(),0==i.button&&(t.addEventListener("pointermove",a),t.addEventListener("pointerup",n),t.setAttribute("data-panning",""),t.setPointerCapture(e=i.pointerId),r=this.#c.currentRotation,s=i.clientX)})}setProps(t){if(Object.assign(this.#c,t),this.isConnected){const t=-this.#c.currentRotation/360*(this.#ri?.offsetWidth??0);this.style.setProperty("--micrio-dial-offset",`${t}px`)}}};customElements.define(Qt.tag,Qt);var Jt=class extends n{static{this.tag="micrio-minimap"}static{this.styles="micrio-minimap canvas{position:absolute;bottom:var(--micrio-border-margin);right:5px;transform-origin:right bottom;display:block;background-size:100%;transition:opacity .2s ease;cursor:grab;-ms-content-zooming:none;-ms-touch-action:none;touch-action:none;border-radius:var(--micrio-border-radius)}\nmicrio-minimap canvas:not(:hover).hidden{opacity:0;pointer-events:none}\nmicrio-minimap canvas.dragging{cursor:grabbing}\nmicrio-minimap canvas.controls{right:calc(var(--micrio-border-margin) + var(--micrio-button-size) + 8px)}\n@media(max-width:800px){micrio-minimap canvas{transform:scale3d(.5,.5,1);pointer-events:none;right:65px}}"}#c={image:null};#u=[];#ai;#ni=null;#K=!1;#oi;#hi;#ci;onMount(){const{image:t}=this.#c,e=this.inject("micrio");if(!e||!t)return;const s=t.$info;if(!s)return;const r=t.camera,a=t.$settings,n=a.minimapWidth??200,o=a.minimapHeight??160,h=!a.alwaysShowMinimap,c=!!a.noControls,l=s.width/s.height,d=n/l>o?Math.round(o*l):n,m=n/l<=o?Math.round(n/l):o,u=-r.rotationY/(2*Math.PI),p=self.crossOriginIsolated;let g=p?void 0:t.thumbSrc;const f=i=>{if(!i||!this.#ni)return;this.#li();const e=ft(i);if(this.#ni.clearRect(0,0,d,m),t.thumbSrc||g?(this.#ni.globalCompositeOperation="source-over",this.#ni.fillStyle="rgba(0,0,0,.5)",this.#ni.fillRect(0,0,d,m),this.#ni.globalAlpha=1,this.#ni.globalCompositeOperation="destination-out"):(this.#ni.fillStyle="rgba(0,0,0,.5)",this.#ni.fillRect(0,0,d,m)),this.#ni.beginPath(),this.#ni.fillStyle="white",s.is360){const t=this.#di(i,d,m);for(const i of t)this.#ni.rect(Math.floor(i.x),Math.floor(i.y),Math.ceil(i.w),Math.ceil(i.h))}else this.#ni.rect(Math.floor((e.centerX-e.width/2)*d),Math.floor((e.centerY-e.height/2)*m),Math.ceil(e.width*d),Math.ceil(e.height*m));(t.thumbSrc||g)&&(this.#ni.fill(),this.#ni.globalCompositeOperation="source-over"),this.#ni.stroke()},v=t=>{if(!this.#ci)return;const i=Math.max(0,Math.min(1,(t.clientX-this.#ci.left)/this.#ci.width)),e=Math.max(0,Math.min(1,(t.clientY-this.#ci.top)/this.#ci.height));this.#hi?r.setView([i-this.#hi.width/2,e-this.#hi.height/2,this.#hi.width,this.#hi.height]):r.setCoo(i,e)},b=()=>{window.removeEventListener("mousemove",v),window.removeEventListener("mouseup",b),this.#hi=void 0};this.#ai=document.createElement("canvas"),this.#ai.width=d,this.#ai.height=m,this.#ai.className=c?"":"controls",g&&(this.#ai.style.backgroundImage=`url('${g}')`,0!=u&&(this.#ai.style.backgroundPositionX=d*u+"px")),this.#ai.addEventListener("wheel",t=>{const i=-1!=navigator.userAgent.indexOf("Firefox");r.zoom(t.deltaY*(i?50:1))},{passive:!0}),this.#ai.addEventListener("mousedown",t=>{if(0!=t.button)return;window.addEventListener("mousemove",v),window.addEventListener("mouseup",b),this.#ci=this.#ai.getClientRects()[0];const i=r.getView();i&&(this.#hi={width:i[2],height:i[3]}),v(t)}),this.appendChild(this.#ai),this.#ni=this.#ai.getContext("2d"),this.#ni&&(this.#ni.lineWidth=1,this.#ni.strokeStyle="white"),p&&t.thumbSrc&&fetch(t.thumbSrc).then(t=>t.blob()).then(e=>{g=URL.createObjectURL(e),this.#ai.style.backgroundImage=`url('${g}')`,f(i(t.state.view))}),this.#u.push(t.state.view.subscribe(f));const w={passive:!0};e.canvas.element.addEventListener("mousemove",()=>this.#li(),w),this.#u.push(()=>e.canvas.element.removeEventListener("mousemove",()=>this.#li(),w)),setTimeout(()=>{const a=i(e.current)==t,n=!s.is360&&r.isZoomedOut();this.#ai.classList.toggle("hidden",!a||h&&(n||this.#K))},10)}#li(){this.#K=!1,clearTimeout(this.#oi),this.#oi=setTimeout(()=>{this.#K=!0},2500)}#di(t,i,e){const s=[],{centerX:r,centerY:a,width:n,height:o}=ft(t),h=(r%1+1)%1;let c=h-n/2,l=h+n/2;const d=Math.max(0,a-o/2),m=Math.min(1,a+o/2);return c<0?(s.push({x:Math.floor((c+1)*i),y:Math.floor(d*e),w:Math.ceil((1-(c+1))*i),h:Math.ceil((m-d)*e)}),s.push({x:Math.floor(0),y:Math.floor(d*e),w:Math.ceil(l*i),h:Math.ceil((m-d)*e)})):l>1?(s.push({x:Math.floor(c*i),y:Math.floor(d*e),w:Math.ceil((1-c)*i),h:Math.ceil((m-d)*e)}),s.push({x:Math.floor(0),y:Math.floor(d*e),w:Math.ceil((l-1)*i),h:Math.ceil((m-d)*e)})):s.push({x:Math.floor(c*i),y:Math.floor(d*e),w:Math.ceil((l-c)*i),h:Math.ceil((m-d)*e)}),s}setProps(t){void 0!==t.image&&(this.#c.image=t.image)}onDestroy(){clearTimeout(this.#oi);for(const t of this.#u)t();this.#u=[]}};customElements.define(Jt.tag,Jt);var ti=class extends n{static{this.tag="micrio-audio-location"}static{this.styles=""}#c={marker:null,ctx:null,is360:!1};#u=[];#mi;#ui;#pi;#oi;#gi(){this.#pi&&this.#pi.disconnect(),clearTimeout(this.#oi),this.#ui.disconnect(),this.#mi.disconnect()}onMount(){const{marker:t,ctx:i,is360:e}=this.#c,s=this.inject("micrio");if(!s||!t||!i)return;const r=s.$current.$info;if(!r)return;const a=r.width,n=r.height,o=t.positionalAudio;if(!o)return;this.#mi=i.createGain(),this.#ui=i.createPanner(),this.#ui.panningModel="equalpower",this.#ui.rolloffFactor=1,this.#ui.coneOuterGain=0;const h=()=>{if(this.#mi.gain.value=o.volume??1,e){this.#ui.refDistance=2.75*o.radius,this.#ui.maxDistance=o.radius*(11/3);const i=t.x*-Math.PI*2,e=(t.y-.5)*-Math.PI,s=Math.cos(e)*Math.sin(i)*11,r=11*Math.sin(e),a=Math.cos(e)*Math.cos(i)*11;this.#ui.positionX.value=s,this.#ui.positionY.value=r,this.#ui.positionZ.value=a;let n=s*s+r*r+a*a;n>0&&(n=1/Math.sqrt(n)),this.#ui.orientationX.value=s*n,this.#ui.orientationY.value=r*n,this.#ui.orientationZ.value=a*n}else this.#ui.distanceModel="linear",this.#ui.positionX.value=2*(t.x-.5),this.#ui.positionY.value=2*(.5-t.y)*(n/a),this.#ui.positionZ.value=-.2,this.#ui.rolloffFactor=2,this.#ui.refDistance=o.radius*o.radius*10,this.#ui.maxDistance=5*o.radius},c=()=>{this.#pi&&this.#pi.disconnect(),this.#pi=i.createBufferSource(),o.loop&&(o.repeatAfter>0?this.#pi.onended=()=>{this.#oi=setTimeout(c,1e3*o.repeatAfter)}:this.#pi.loop=!0),this.#mi.gain.value=o.volume??1,this.#pi.buffer=window.__micrioAudioBuffers?.[o.src],this.#pi.buffer&&(this.#pi.connect(this.#ui),this.#pi.start())};h(),this.#ui.connect(this.#mi),(async()=>{if(!o.src)return;const t=window.__micrioAudioBuffers||{};t[o.src]||(t[o.src]=await fetch(o.src).then(t=>t.arrayBuffer()).then(t=>i.decodeAudioData(t)),window.__micrioAudioBuffers=t),o.alwaysPlay&&o.repeatAfter>0?this.#oi=setTimeout(c,1e3*o.repeatAfter):c()})(),s.addEventListener("audio-update",h),this.#u.push(()=>s.removeEventListener("audio-update",h))}setProps(t){Object.assign(this.#c,t)}onDestroy(){this.#gi();for(const t of this.#u)t();this.#u=[]}};customElements.define(ti.tag,ti);var ii=class extends n{static{this.tag="micrio-events"}static{this.styles=""}#c={events:[],duration:0};onMount(){const t=this.inject("micrio");if(!t)return;const i=this.#c.events,e=this.#c.duration;i.forEach(t=>{t.start=Number(t.start||0),t.end=Math.min(Number(t.end||0),e)}),this.update=i=>{for(const e of this.#c.events){const s=e.start<=i&&e.end>=i;s!=!!e.active&&(e.active=s,t.events.dispatch("tour-event",{...e}))}}}setProps(t){Object.assign(this.#c,t)}onDestroy(){const t=this.inject("micrio");t&&this.#c.events.forEach(i=>{i.active&&(i.active=!1,t.events.dispatch("tour-event",{...i}))})}};customElements.define(ii.tag,ii);var ei=class extends n{static{this.tag="micrio-embed"}static{this.styles=""}#c={embed:null,image:null};#u=[];onMount(){const{embed:t,image:i}=this.#c;this.inject("micrio")&&t&&i&&(t.area&&i.addEmbed({id:t.micrioId,settings:t.settings},t.area,{opacity:t.opacity,fit:t.fit,asImage:t.asImage}),this.#u.push(i.state.view.subscribe(()=>{})))}setProps(t){Object.assign(this.#c,t)}onDestroy(){for(const t of this.#u)t();this.#u=[]}};customElements.define(ei.tag,ei);var si=class extends n{static{this.tag="micrio-image-embeds"}static{this.styles=""}#c={image:null};#u=[];onMount(){const{image:t}=this.#c,e=i(t.data);if(e?.embeds)for(const i of e.embeds){const e=document.createElement("micrio-embed");e.setProps({embed:i,image:t}),this.appendChild(e)}this.#u.push(t.data.subscribe(i=>{if(this.innerHTML="",i?.embeds)for(const e of i.embeds){const i=document.createElement("micrio-embed");i.setProps({embed:e,image:t}),this.appendChild(i)}}))}setProps(t){void 0!==t.image&&(this.#c.image=t.image)}onDestroy(){for(const t of this.#u)t();this.#u=[]}};customElements.define(si.tag,si);var ri=class extends n{static{this.tag="micrio-tour"}static{this.styles="micrio-tour{display:contents}\nmicrio-tour .controls{position:absolute;bottom:var(--micrio-border-margin);left:50%;max-width:calc(100% - var(--micrio-border-margin) * 2);transform:translateX(-50%);box-sizing:border-box;display:flex;border-radius:var(--micrio-border-radius);box-shadow:var(--micrio-button-shadow);backdrop-filter:var(--micrio-background-filter);background-color:var(--micrio-button-background,var(--micrio-background,none));padding:0;transition:transform .2s ease;z-index:5}\nmicrio-tour .controls>micrio-button{--micrio-button-background:none;--micrio-background-filter:none;--micrio-button-shadow:none;margin:0;border:none;border-radius:0}\nmicrio-tour .controls .step-counter{height:var(--micrio-button-size);line-height:var(--micrio-button-size);padding:0 12px;font-size:90%;cursor:default;font-family:inherit;background:transparent;border:none;color:var(--micrio-color);display:flex;align-items:center}"}#c={tour:null};#u=[];#fi=0;onMount(){const{tour:t}=this.#c,e=this.inject("micrio");if(!e||!t)return;const s="steps"in t;if(!("steps"in t)){const s=t,r=e.$current;if(r){const t=s.i18n?.[i(e._lang)]?.audio,a=document.createElement("micrio-media");a.setProps({src:t?.src,image:r,tour:s,controls:!0,autoplay:!0,onclose:()=>e.state.tour.set(void 0)}),this.appendChild(a)}e.setAttribute("data-tour-active","")}if(s){const s=t;s.currentStep??=s.initialStep??0,this.#fi=s.currentStep;const r=n.markerImages,a=t=>{const i=s.steps[t],e=r.get(i);e&&e.state.marker.set(i)},o=()=>{this.replaceChildren();const t=document.createElement("div");t.className="controls";const r=document.createElement("micrio-button");r.setProps({type:"arrow-left",title:i(rt).tourStepPrev,disabled:0===this.#fi,onclick:()=>{this.#fi>0&&(this.#fi--,s.currentStep=this.#fi,a(this.#fi),o())}}),t.appendChild(r);const n=document.createElement("span");n.className="step-counter",n.textContent=`${this.#fi+1} / ${s.steps.length}`,t.appendChild(n);const h=document.createElement("micrio-button");if(h.setProps({type:"arrow-right",title:i(rt).tourStepNext,disabled:this.#fi>=s.steps.length-1,onclick:()=>{this.#fi<s.steps.length-1&&(this.#fi++,s.currentStep=this.#fi,a(this.#fi),o())}}),t.appendChild(h),!s.cannotClose){const s=document.createElement("micrio-button");s.setProps({type:"close",title:i(rt).close,onclick:()=>e.state.tour.set(void 0)}),t.appendChild(s)}this.appendChild(t)};this.#u.push(e.state.marker.subscribe(t=>{if(!t)return;const i="string"==typeof t?t:t.id,e=s.steps.findIndex(t=>t.startsWith(i));e>=0&&e!==this.#fi&&(this.#fi=e,s.currentStep=e,o())})),a(this.#fi),o()}this.#u.push(e.state.tour.subscribe(i=>{if(!i&&(e.removeAttribute("data-tour-active"),s)){const i=n.markerImages,e=t.steps[this.#fi],s=i.get(e);s&&s.state.marker.set(void 0)}}))}setProps(t){Object.assign(this.#c,t)}onDestroy(){for(const t of this.#u)t();this.#u=[]}};customElements.define(ri.tag,ri);var ai=class extends n{static{this.tag="micrio-popover"}static{this.styles="micrio-popover{display:contents}\ndialog::backdrop{color:#fff;animation:micrio-popover-bg .2s forwards;backdrop-filter:blur(8px)}\n@keyframes micrio-popover-bg{from{background:#0000}to{background:var(--micrio-popover-background)}}\ndialog{position:relative;animation:micrio-popover-fade .5s forwards;background:transparent;border:none;overflow:visible;padding:0;pointer-events:all;max-width:90vw;max-height:90vh}\n@keyframes micrio-popover-fade{from{opacity:0}to{opacity:1}}\ndialog>aside{--micrio-background-filter:none;position:absolute;z-index:1}\ndialog:not(.article){display:flex}\n@media(min-width:640px){\ndialog:not(.article){width:calc(85vw - 56px);height:calc(9/16*85vw);width:calc(85cqw - 56px);height:calc(9/16*85cqw)}\ndialog>aside{display:block;left:100%;margin-left:var(--micrio-border-margin);top:0}\n}\n@media(max-width:639px){\ndialog:not(.article){width:100%;height:100%;flex-direction:column}\ndialog>aside{position:fixed;top:var(--micrio-border-margin);right:var(--micrio-border-margin)}\ndialog :global(div.micrio-media>*:first-child){border-radius:0}\n}\n@media(min-aspect-ratio:16/9){dialog:not(.article){height:75vh;width:calc(16/9*75vh);height:75cqh;width:calc(16/9*75cqh)}}\ndialog:not(.article)>micrio-media{flex:1}\ndialog:not(.article)>micrio-media>figure{height:100%}\ndialog:not(.article)>micrio-media>figure iframe,\ndialog:not(.article)>micrio-media>figure video{height:calc(100% - var(--micrio-button-size))}\ndialog>micrio-marker-content{width:25vw;width:25cqw;min-width:unset;max-width:320px}\ndialog.article{width:540px}\ndialog.article article{text-shadow:none;color:var(--micrio-color);background:var(--micrio-background);padding:20px;box-sizing:border-box;max-height:calc(90cqh - 48px);max-height:calc(90vh - 48px);overflow-x:hidden;overflow-y:auto;border-radius:var(--micrio-border-radius)}\ndialog.article h2{text-align:center}"}#c={popover:null};#u=[];#vi;onMount(){const t=this.inject("micrio");t&&(this.#vi=document.createElement("dialog"),this.#vi.addEventListener("close",()=>t.state.popover.set(void 0)),this.#vi.addEventListener("click",i=>{i.target===this.#vi&&t.state.popover.set(void 0)}),this.appendChild(this.#vi),this.#a())}setProps(t){void 0!==t.popover&&(this.#c.popover=t.popover),this.isConnected&&this.#a()}#a(){const t=this.#c.popover,e=this.inject("micrio");if(!e||!t)return;const s=i(e._lang),r=i(rt),a="contentPage"in t?t.contentPage?.id:"",n="marker"in t?t.marker?.id:"",o=`${t?.constructor?.name??typeof t}::${a}::${n}::${s}`;if(!this.checkRenderKey(o))return;this.#vi.replaceChildren(),this.#vi.classList.remove("article","page","has-media","gallery");const h=document.createElement("aside"),c=document.createElement("micrio-button");if(c.setProps({type:"close",title:r.close,className:"close-popover",onclick:()=>{this.#vi?.open&&this.#vi.close()}}),h.appendChild(c),this.#vi.appendChild(h),"contentPage"in t&&t.contentPage){const i=t.contentPage,e=i.i18n?.[s];this.#vi.classList.add("page");const r=e?.embed&&(!e.content||e.content.length<250)&&!i.image&&!i.buttons?.length;if((e?.embed||i.image)&&this.#vi.classList.add("has-media"),r){if(e.embed){const t=document.createElement("micrio-media");t.setProps({src:e.embed,figcaption:e.content,controls:!0,autoplay:!0}),this.#vi.appendChild(t)}}else{this.#vi.classList.add("article");const t=document.createElement("article");if(e?.title){const i=document.createElement("h2");i.textContent=e.title,t.appendChild(i)}if(e?.embed){const i=document.createElement("micrio-media");i.setProps({src:e.embed,controls:!0}),t.appendChild(i)}if(e?.content){const i=document.createElement("div");i.innerHTML=e.content,t.appendChild(i)}this.#vi.appendChild(t)}}if("marker"in t&&t.marker){const i=t.marker,e=i.i18n?.[s],r=!!i.images?.length,a=!(!e||!e.body)||r&&!!t.contentPage?.i18n?.[s]?.embed;if(e?.embedUrl){const t=document.createElement("micrio-media");t.setProps({src:e.embedUrl,uuid:i.id,figcaption:e.embedDescription,controls:!0,autoplay:i.embedAutoPlay}),this.#vi.appendChild(t)}if(a){const t=document.createElement("micrio-marker-content");t.setProps({marker:i,noEmbed:!0,noGallery:!0,noImages:!e||!e.embedUrl,onclose:()=>{this.#vi?.open&&this.#vi.close()}}),this.#vi.appendChild(t)}}this.#vi.open||this.#vi.showModal()}onDestroy(){this.#vi?.open&&this.#vi.close();for(const t of this.#u)t();this.#u=[]}};customElements.define(ai.tag,ai);var ni=class extends n{static{this.tag="micrio-gallery"}static{this.styles="micrio-gallery{position:absolute;bottom:0;left:0;width:100%;z-index:2;pointer-events:none}\nmicrio-gallery>*{pointer-events:all}"}#c={};#u=[];onMount(){const t=this.inject("micrio");t&&this.#c.controller&&t.$current?.$settings?.omni&&this.#bi(t)}setProps(t){void 0!==t.controller&&(this.#c.controller=t.controller)}#bi(t){const i=t.$current;if(!i)return;const e=i.$settings.omni;if(!e)return;const s=e.frames,r=document.createElement("micrio-dial");r.setProps({currentRotation:0,frames:s,degrees:!0,onturn:t=>{const e=Math.round(t)%s;i.swiper&&i.swiper.goto(e)}}),this.appendChild(r),this.#u.push(i.state.layer.subscribe(t=>{r.setProps({currentRotation:t/s*360})}))}onDestroy(){for(const t of this.#u)t();this.#u=[]}};customElements.define(ni.tag,ni);var oi=class extends n{static{this.tag="micrio-serial-tour"}static{this.styles="micrio-serial-tour{position:absolute;bottom:0;left:0;right:0;z-index:5;background:var(--micrio-background);backdrop-filter:var(--micrio-background-filter);padding:8px var(--micrio-border-margin);display:flex;align-items:center;gap:8px;direction:ltr;box-shadow:0 -2px 10px rgba(0,0,0,.3)}\nmicrio-serial-tour micrio-button{--micrio-button-shadow:none;--micrio-background-filter:none;--micrio-button-background:none}"}#c={tour:null};#u=[];#Dt=!1;#Rt=!1;#Xt=0;#Ot=0;#$t=!1;#wi=0;#yi;#b=!1;#yt;#xi;#ki=[];async#Ei(){if(this.#Dt)return;const t=this.inject("micrio");if(!t)return;const i=this.#ki[this.#wi];if(!i)return this.#Rt=!0,void this.#B();"string"==typeof i.micrioId&&t.$current?.id!=i.micrioId&&await t.open(i.micrioId),i.markerId&&t.$current?.state.marker.set(i.markerId),this.#wi++,this.#B()}#Ti=()=>{this.#Dt=!this.#Dt,this.#B()};#A=()=>{this.#$t=!this.#$t,this.#B()};onMount(){const{tour:t}=this.#c;if(!this.inject("micrio")||!t)return;this.#ki=t.stepInfo||[];const i=this.#ki.reduce((t,i)=>t+(i.duration||0),0);this.#V(),this.#B(),this.#yi=setInterval(()=>{this.#Dt||this.#Rt||(this.#Xt=this.#ki.slice(0,this.#wi).reduce((t,i)=>t+(i.duration||0),0),this.#Ot=i,this.#Xt>=this.#Ot&&(this.#Rt=!0,clearInterval(this.#yi),this.#c.onended?.()),this.#B())},250),this.#Ei()}#V(){if(this.#b)return;this.#b=!0;const t=document.createElement("div");t.style.cssText="display:flex;align-items:center;gap:8px;width:100%",this.#yt=document.createElement("micrio-button"),t.appendChild(this.#yt);const e=document.createElement("micrio-button");e.setProps({type:"volume-up",title:i(rt).audioMute,onclick:this.#A}),t.appendChild(e),this.#xi=document.createElement("micrio-progress-bar"),t.appendChild(this.#xi),this.appendChild(t)}#B(){if(this.#Rt)return void(this.innerHTML&&(this.innerHTML=""));if(!this.#b)return;const t=i(rt);this.#yt.setProps({type:this.#Dt?"play":"pause",title:this.#Dt?t.play:t.pause,onclick:this.#Ti}),this.#xi.setProps({currentTime:this.#Xt,duration:this.#Ot||1,ended:this.#Rt})}setProps(t){void 0!==t.tour&&(this.#c.tour=t.tour),void 0!==t.onended&&(this.#c.onended=t.onended)}onDestroy(){clearInterval(this.#yi);for(const t of this.#u)t();this.#u=[]}};customElements.define(oi.tag,oi);var hi=class extends n{static{this.tag="micrio-gallery-item"}static{this.styles="micrio-gallery-item{display:block;width:100%;height:300px;position:relative;overflow:hidden;border-radius:var(--micrio-border-radius)}\nmicrio-gallery-item img{width:100%;height:100%;object-fit:contain;cursor:pointer;transition:opacity .25s}\nmicrio-gallery-item .nav{position:absolute;top:50%;transform:translateY(-50%);z-index:2;background:rgba(0,0,0,.5);color:#fff;border:none;padding:8px 12px;cursor:pointer;font-size:1.2em;border-radius:var(--micrio-border-radius)}\nmicrio-gallery-item .nav.prev{left:8px}\nmicrio-gallery-item .nav.next{right:8px}\nmicrio-gallery-item .caption{padding:8px;text-align:center;font-size:.85em;opacity:.7}\nmicrio-gallery-item .counter{position:absolute;bottom:8px;right:8px;background:rgba(0,0,0,.5);color:#fff;padding:2px 8px;border-radius:4px;font-size:.75em}"}#c={gallery:[]};#u=[];#Mi=0;onMount(){this.#a()}setProps(t){if(void 0!==t.gallery&&(this.#c.gallery=t.gallery),void 0!==t.startId){const i=this.#c.gallery.findIndex(i=>i.micrioId==t.startId);i>=0&&(this.#Mi=i)}this.isConnected&&this.#a()}#a(){const{gallery:t}=this.#c;if(!t?.length)return void(this.innerHTML="");const i=t[this.#Mi],e=i.i18n?.[Object.keys(i.i18n)[0]]?.description||"";this.replaceChildren();const s=document.createElement("img");if(s.src=i.micrioId?`https://iiif.micr.io/${i.micrioId}/full/^,640/0/default.webp`:i.src||"",s.alt=e||"",this.#Mi>0){const t=document.createElement("button");t.className="nav prev",t.textContent="‹",t.addEventListener("click",()=>{this.#Mi--,this.#a()}),this.appendChild(t)}if(this.#Mi<t.length-1){const t=document.createElement("button");t.className="nav next",t.textContent="›",t.addEventListener("click",()=>{this.#Mi++,this.#a()}),this.appendChild(t)}if(e){const t=document.createElement("div");t.className="caption",t.textContent=e,this.appendChild(t)}const r=document.createElement("div");r.className="counter",r.textContent=`${this.#Mi+1} / ${t.length}`,this.appendChild(r),this.prepend(s)}onDestroy(){for(const t of this.#u)t();this.#u=[]}};function ci(t,i){if(i)for(let e,s=0;s<i.length;s++)if(i[s].id==t||(e=ci(t,i[s].children)))return e??i[s]}customElements.define(hi.tag,hi);var li=class extends n{static{this.tag="micrio-main"}static{this.styles="micrio-main{display:contents}"}#c={micrio:null};#u=[];#Ci;#lt;#Si;#Ai=!1;#Li;#Pi="";#Ii=["audio","media","logo","orgLogo","toolbar","controls","markers","details","popup","tour","popover","subtitles","error","progress"];#_i=new Map;#zi(t){for(let i=this.#Ii.indexOf(t)+1;i<this.#Ii.length;i++){const t=this.#_i.get(this.#Ii[i]);if(t?.isConnected)return t}return null}#Di(t,i){if(i.isConnected)return;const e=this.#zi(t);e?this.insertBefore(i,e):this.appendChild(i)}#Ri(t,i,e){const s=this.#_i.get(t);if(i){if(s?.isConnected)return;s?.remove();const i=e();this.#_i.set(t,i),this.#Di(t,i),i.children.length||(i.remove(),this.#_i.set(t,null))}else s?.isConnected&&(s.remove(),this.#_i.set(t,null))}onMount(){const s=this.#c.micrio;if(!s)return;this.provide("micrio",s),this.provide("markerImages",new Map);const r=t(i(s.isMuted)?0:1);this.provide("volume",r),this.#u.push(s.isMuted.subscribe(t=>r.set(t?0:1))),this.provide("mediaPaused",t(!1));const a=t("");this.provide("srt",a);const n=new Map;this.provide("markerImages",n),"markers"==s.getAttribute("data-ui")&&(this.#c.noHTML=!0);const h=[];this.#u.push(s.current.subscribe(t=>{t&&(this.#Ci=t.info,this.#Si=void 0,this.#Ci&&(this.#u.push(this.#Ci.subscribe(()=>this.#Oi())),o(this.#Ci).then(i=>{i&&(this.#Ai=!0,this.#Si=t.settings,this.#Si&&this.#u.push(this.#Si.subscribe(()=>this.#Oi())),!this.#Li&&W.getOrganisation()?.logo&&(this.#Li=W.getOrganisation()),this.#Oi())})),(this.#lt=t.data)&&h.indexOf(t.id)<0&&(this.#u.push(this.#lt.subscribe(()=>this.#Oi())),o(this.#lt).then(async r=>{if(!r)return;if(h.push(t.id),await e().then(e),i(s.state.popover)||i(s.state.marker)||i(s.state.tour))return;const a=t.$settings.start;if(a)switch(a.type){case"marker":t.state.marker.set(a.id);break;case"markerTour":{const t=r.markerTours?.find(t=>t.id==a.id);t&&s.state.tour.set(t);break}case"tour":{const t=r.tours?.find(t=>t.id==a.id);t&&s.state.tour.set(t);break}case"page":{const t=ci(a.id,r.pages);t&&s.state.popover.set({contentPage:t,showLangSelect:!0});break}}})),this.#Oi())})),a.subscribe(t=>setTimeout(()=>{const i=this.#_i.get("subtitles");if(t){i?.remove();const e=document.createElement("micrio-subtitles");e.setProps({src:t,raised:!1}),this.#_i.set("subtitles",e),this.#Di("subtitles",e)}else i?.remove(),this.#_i.set("subtitles",null)},20));for(const t of[s.visible,s.gallery,s.state.popup,s.state.popover,s.state.tour,s.state.marker,s.loading,s.switching])this.#u.push(t.subscribe(()=>this.#Oi()));this.#u.push(s._lang.subscribe(()=>this.#Oi())),this.#Oi()}setProps(t){Object.assign(this.#c,t)}#Xi=!1;#Oi(){this.#Xi||(this.#Xi=!0,requestAnimationFrame(()=>{this.#Xi=!1,this.isConnected&&this.#B()}))}#B(){const t=this.#c.micrio;if(!t)return;const e=i(t.state.tour),s=i(t.state.marker),r=i(t.state.popup),a=i(t.state.popover),n=this.#Ci?i(this.#Ci):void 0,o=this.#Si?i(this.#Si):void 0,h=this.#lt?i(this.#lt):void 0,c=this.#c.error,l=this.#c.loadingProgress??1,d=this.#c.noHTML??!1,m=this.#c.noLogo??d,u=o?._360?.video,p=u?.src,g=h?.markers?.filter(t=>!!t.positionalAudio),f=!!h?.music?.items.length||!!g?.length,v=e||s,b=!d||"markers"==t.getAttribute("data-ui"),w=!(m||n&&d||o?.noLogo||e||s||r),y=!d&&w&&!o?.noOrgLogo&&!!this.#Li&&!a,x=!d&&!!n,k=!d&&!v&&!!o?.showInfo,E=!d&&this.#Ai&&!o?.noToolbar;this.#Ri("audio",f&&!!h&&!!n,()=>document.createElement("micrio-audio-controller")),this.#Ri("media",!!p&&!!n,()=>document.createElement("div")),this.#Ri("logo",w,()=>document.createElement("micrio-logo")),this.#Ri("toolbar",E,()=>document.createElement("micrio-toolbar"));{const e=i(t.visible),s=e.map(t=>t.id).join(",");if(b&&s!==this.#Pi){for(const t of this.querySelectorAll(":scope > micrio-markers"))t.remove();this.#_i.set("markers",null),this.#Pi=s;for(const t of e){const i=document.createElement("micrio-markers");i.setProps({image:t});const e=this.#zi("markers");e?this.insertBefore(i,e):this.appendChild(i),this.#_i.get("markers")||this.#_i.set("markers",i)}}else if(!b){for(const t of this.querySelectorAll(":scope > micrio-markers"))t.remove();this.#_i.set("markers",null),this.#Pi=""}}this.#Ri("controls",x,()=>{const t=document.createElement("micrio-controls");return t.setProps({hasAudio:f||!(!p||!u||u.muted)}),t}),this.#Ri("orgLogo",y&&!!this.#Li,()=>{const t=document.createElement("micrio-logo-org");return t.setProps({organisation:this.#Li}),t}),this.#Ri("details",k&&!!this.#Ci&&!!this.#lt,()=>{const t=document.createElement("micrio-details");return t.setProps({info:i(this.#Ci),data:i(this.#lt)}),t}),this.#Ri("popup",!!r,()=>{const t=document.createElement("micrio-marker-popup");return t.setProps({marker:r}),t}),this.#Ri("tour",!!e,()=>{const t=document.createElement("micrio-tour");return t.setProps({tour:e,noHTML:d}),t}),this.#Ri("popover",!!a,()=>{const t=document.createElement("micrio-popover");return t.setProps({popover:a}),t}),this.#Ri("error",!!c,()=>{const t=document.createElement("micrio-error");return t.setProps({message:c}),t}),this.#Ri("progress",l<1,()=>{const t=document.createElement("micrio-progress-circle");return t.setProgress(l),t})}onDestroy(){for(const t of this.#u)t();this.#u=[]}};customElements.define(li.tag,li);var di,mi=t=>{let i=t.charCodeAt(0),e=i<91;return(i-=e?65:97)-(i>7?1:0)+(e?24:i>10?-1:0)},ui=t=>6==t.length||7==t.length;!function(t){let i;let e;(i||(i=t.Grid||(t.Grid={}))).GridActionType=function(t){return t[t.focus=0]="focus",t[t.flyTo=1]="flyTo",t[t.focusWithTagged=2]="focusWithTagged",t[t.focusTagged=3]="focusTagged",t[t.reset=4]="reset",t[t.back=5]="back",t[t.switchToGrid=6]="switchToGrid",t[t.filterTourImages=7]="filterTourImages",t[t.nextFadeDuration=8]="nextFadeDuration",t}({}),(e||(e=t.Camera||(t.Camera={}))).TimingFunction=function(t){return t[t.ease=0]="ease",t[t["ease-in"]=1]="ease-in",t[t["ease-out"]=2]="ease-out",t[t.linear=3]="linear",t}({})}(di||(di={}));var pi,gi=class{constructor(t){if(this.image=t,this.center=[0,0,1],this.view=[0,0,1,1],this.rotationY=0,this.aniDoneAdd=[],this.cooToArea=(t,i,e)=>({x:e[0]+t*e[2],y:e[1]+i*e[3]}),this.getView=()=>this.view,this.getViewRaw=()=>this._view,this.getCoo=(t,i,e=!1,s=!1)=>this.getCooDirect(t,i,e,s).slice(0).map(t=>Math.round(1e6*t)/1e6),this.getXY=(t,i,e=!1,s,r,a)=>this.getXYDirect(t,i,{abs:e,radius:s,rotation:r,noTrueNorth:a}).slice(0),this.getScale=()=>this.center[2]??1,this.setScale=t=>this.setCoo(this.center[0],this.center[1],t),this.getCoverScale=()=>this._engineCanvas?.camera.coverScale??1,this.getMinScale=()=>this._engineCanvas?.camera.minScale??.1,this.isZoomedIn=()=>!!this._engineCanvas?.isZoomedIn(),this.isZoomedOut=(t=!1)=>!!this._engineCanvas?.isZoomedOut(t),this.getCoverLimit=()=>!!this._engineCanvas?.coverLimit,this.flyToView=(t,i={})=>new Promise((e,s)=>{if(!this._engineCanvas)return s(new Error("engine not ready"));let{centerX:r,centerY:a,width:n,height:o}=ft(t);if(2==i.margin?.length&&(r+=i.margin[0],a+=i.margin[1],n-=2*i.margin[0],o-=2*i.margin[1]),i.area){const t=this.cooToArea(r,a,i.area);r=t.x,a=t.y,n*=i.area[2],o*=i.area[3]}if(i.prevView){const t=ft(i.prevView);this._c.ani.setStartView(t.centerX,t.centerY,t.width,t.height,!1)}if(this.image.$settings.omni?.frames){const e=this.image.$settings.omni.layers?.length??1,s=this.image.$settings.omni.frames/e;if(null==i.omniIndex){const e=t[4]?t[4]:Array.isArray(t)&&void 0!==t[5]?t[5]:void 0;void 0!==e&&(i.omniIndex=Math.round(gt(e/(2*Math.PI))*s))}null!=i.omniIndex&&(i.omniIndex=gt(i.omniIndex,s))}const h=this._c.camera.flyTo(r,a,n,o,i.duration??-1,i.speed??-1,i.progress??0,!!i.isJump,!!i.limit,!!i.limitZoom,i.omniIndex??0,di.Camera.TimingFunction[i.timingFunction??"ease"],performance.now());this.image.engine.render(),0==h?e():this.setAniPromises(e,s)}),this.flyToFullView=(t={})=>this.flyToCoo([.5,.5,this.getMinScale()],t),this.flyToCoverView=(t={})=>{const i=this.image.$settings.focus??[.5,.5];return i[2]=this.getCoverScale(),this.flyToCoo(i,t)},this.flyToCoo=(t,i={})=>new Promise((e,s)=>{if(!this._engineCanvas)return s(new Error("engine not ready"));const r=di.Camera.TimingFunction[i.timingFunction??"ease"];i.duration=this._c.camera.setCoo(t[0],t[1],t[2]||this.center[2],i.duration??-1,i.speed??-1,i.limit??!1,r,performance.now()),this.image.engine.render(),0==i.duration?e():this.setAniPromises(e,s)}),this.zoom=(t,i=0,e=void 0,s=void 0,r=1,a=!1)=>new Promise((r,n)=>{if(!this._engineCanvas)return n(new Error("engine not ready"));const o=this.getXY(this.center[0],this.center[1]);if(null==e&&(e=o[0]),null==s&&(s=o[1]),this.image.album&&!this.image.album.hooked)return r();i=this._c.camera.zoom(t,e,s,i,a,performance.now()),this.image.engine.render(),0==i?r():this.setAniPromises(r,n)}),this.zoomIn=(t=1,i=250,e=1)=>this.zoom(200*-t,i,void 0,void 0,e).catch(()=>{}),this.zoomOut=(t=1,i=250,e=1)=>{const s=this.image.engine.micrio.canvas.viewport,r=s.width/s.height,a=this.image.$info.width/this.image.$info.height;return this.zoom(t*(400/Math.max(1,r/a/2)),i,void 0,void 0,e).catch(()=>{})},this.getDirection=()=>this._engineCanvas?this._c.webgl.yaw:0,this.getPitch=()=>this._engineCanvas?this._c.webgl.pitch:0,!t.is360){const i=t.state.$view;i&&t.$info?.width&&e().then(()=>this.setView(i))}}bindEngineCanvas(t){this._engineCanvas=t}assign(t,i,e,s){this._view=t,this._xy=i,this._coo=e,this._mat=s}get _c(){return this._engineCanvas}_getXY(t,i,e,s,r){const a=this._c;a.is360?a.webgl.getXYZ(t,i):void 0===r||isNaN(r)?a.camera.getXY(t,i,!!e):a.camera.getXYOmni(t,i,s??0,r,!!e)}_getCoo(t,i,e,s){const r=this._c;r.is360?r.webgl.getCoo(t,i):r.camera.getCoo(t,i,!!e,!!s)}_setMinScale(t){const i=this._c;i.camera.minScale=t,i.camera.correctMinMax(),i.camera.setView(),i.webgl.update()}viewChanged(){const t=this._view,i=this.center.join(","),e=this.getCoo(0,0);this.view[0]=t[0]-t[2]/2,this.view[1]=t[1]-t[3]/2,this.view[2]=t[2],this.view[3]=t[3],this.center[0]=t[0],this.center[1]=t[1],this.center[2]=e[2],this.image.is360&&(this.center[3]=e[3],this.center[4]=e[4]),this.image.isOmni&&(this.center[5]=this.image.swiper?.currentIndex),(this.center.join(",")!=i||this.image.engine.micrio.canvas.resizing||this._engineCanvas?.areaAnimating())&&this.image.state.view.set(this.view)}getXYDirect(t,i,e={}){const s=this.image.is360&&!e.noTrueNorth?-this.rotationY/(2*Math.PI):0;return this._getXY(t-s,i,!0===e.abs,e.radius,e.rotation),this._xy}getCooDirect(t,i,e=!1,s=!1){if(e){const e=this.image.engine.micrio.getBoundingClientRect();t-=e.left,i-=e.top}return this._getCoo(t,i,!0===e,!0===s),this._coo}setView(t,i={}){if(!this._engineCanvas)return;let{centerX:e,centerY:s,width:r,height:a}=ft(t);if(i.area){const t=this.cooToArea(e,s,i.area);e=t.x,s=t.y,r*=i.area[2],a*=i.area[3]}this._c.setView(e,s,r,a,!!i.noLimit,!1,i.correctNorth),i.noRender||this.image.engine.render()}setCoo(t,i,e=this.center[2]??1){this._engineCanvas&&(this._c.camera.setCoo(t,i,e,0,0,!1,0,performance.now()),this.image.engine.render())}getMatrix(t,i,e,s,r,a,n,o,h,c,l){return this._engineCanvas?(this._c.getMatrix(t,i,e??1,s??10,r||0,a||0,n||0,o||0,h??1,c??1,!!l),this._mat):new Float32Array(16)}setMinScale(t){this._engineCanvas&&this._setMinScale(t)}setMinScreenSize(t){!this.image.album&&this._engineCanvas&&(this._c.camera.minSize=Math.max(0,Math.min(1,t??1)))}setLimit(t){if(!this._engineCanvas)return;const i=ft(t);this._c.view.setLimit(i.centerX,i.centerY,i.width,i.height),this.image.engine.render()}setCoverLimit(t){this._engineCanvas&&(this._c.coverLimit=!!t,this._c.camera.correctMinMax())}stop(){this._engineCanvas?.aniStop()}pause(){this._engineCanvas?.aniPause(performance.now())}resume(){this._engineCanvas?.aniResume(performance.now()),this.image.engine.render()}set360RangeLimit(t=0,i=0){this._engineCanvas&&(this._c.webgl.setLimits(t,i),this.image.engine.render())}aniIsKinetic(){return!!this._engineCanvas?.kinetic.started}setAniPromises(t,i){this.aniDone=t,this.aniAbort=i}pan(t,i,e=0,s={}){this._engineCanvas&&(this._c.camera.pan(t,i,e,!!s.noLimit,performance.now()),(e>0||s.render)&&this.image.engine.render())}setDirection(t,i){this._engineCanvas&&(this._c.setDirection(t,i??this._c.webgl.pitch,!1),this.image.engine.render())}setArea(t,i={}){if(this._engineCanvas){if(this.image.opts.area=t,this.image.opts.isEmbed){if(this.image.ptr>0)for(const i of this._c.images)if(i.localIdx>0)return void i.setArea(t[0],t[1],t[0]+t[2],t[1]+t[3])}else this._c.setArea(t[0],t[1],t[0]+t[2],t[1]+t[3],!!i.direct,!!i.noDispatch);i.noRender||this.image.engine.render()}}setRotation(t=0,i=0,e=0){if(this.image.opts.isEmbed&&this._engineCanvas&&this.image.engine.ready){for(const s of this._c.images)if(s.localIdx>0){s.rotX=t,s.rotY=i,s.rotZ=e;break}this.image.engine.render()}}getOmniRotation(){const t=this.image.$settings.omni;return t&&this._engineCanvas?(this.image.swiper?.currentIndex??0)/((t?.frames??1)/(t?.layers?.length??1))*Math.PI*2:0}getOmniFrame(t){const i=this.image.$settings.omni;if(!i||null==t)return;const e=i.frames/(i.layers?.length??1);return Math.floor(t/(2*Math.PI)*e)}getOmniXY(t,i,e){return this._engineCanvas?(this._c.camera.getXYOmniCoo(t,i,e,0,!1),this._xy):new Float64Array(5)}setOmniSettings(){const t=this.image.$settings.omni;if(!t||!this._engineCanvas)return;const i=this._c;i.omniDistance=-t.distance||0,i.omniFieldOfView=t.fieldOfView??0,i.omniVerticalAngle=t.verticalAngle??0,i.omniOffsetX=t.offsetX??0,this.image.state.view.set(this.view)}};!function(i){i.Main=class{get $tour(){return this._tour}get $marker(){return this._marker}constructor(){this.tour=t(),this.marker=t(),this.markerHoverId=t(),this.popup=t(),this.popover=t(),this.ui={controls:t(!0),zoom:t(!0),hidden:t(!1),hover:t(!1)},this.mediaState=new Map,this.tour.subscribe(t=>{"string"!=typeof t&&(this._tour=t)}),this.marker.subscribe(t=>{"string"!=typeof t&&(this._marker=t)})}};i.Image=class{get $view(){return this._view}get $marker(){return this._marker}constructor(i){this.image=i,this.view=t(void 0),this.marker=t(void 0),this.layer=t(0);const e=i.engine.micrio;let s,r,a;this.view.subscribe(t=>{this._view=t;const n=t?.toString();if(t&&n&&s!=n){const o={image:i,view:t};s=n;const h=t[2],c=t[3];(!r||!a||Math.abs(h-r+(c-a))>1e-5)&&(e.events.dispatch("zoom",o),r=h,a=c),e.events.dispatch("move",o)}}),this.marker.subscribe(t=>{const i=this._marker;this._marker=t&&"string"!=typeof t?t:void 0,this._marker?e.state.marker.set(this._marker):t||e.state.$marker!=i||e.state.marker.set(void 0)})}hookOmni(){const t=this.image;this.layer.subscribe(i=>{t.ptr<0||!t.engine.ready||(t.engine.setActiveLayer(t.ptr,i),t.engine.render())})}}}(pi||(pi={}));var fi=new class{constructor(){this.data=new Map,this.db=new Map,this.images=[],this.get=t=>new Promise((i,e)=>{const s=this.db.get(t);if(!s||!this.data.has(s[0]))return e(new Error("Could not get blob: "+t));const r=new FileReader;r.onload=()=>i(JSON.parse(r.result)),r.readAsText(new Blob([new Uint8Array(this.data.get(s[0]),s[1],s[2])]))}),this.getImage=async t=>new Promise((i,e)=>{const s=this.db.get(t);if(!s||!this.data.has(s[0]))return e(new Error("Could not get blob: "+t));const r=new Blob([new Uint8Array(this.data.get(s[0]),s[1],s[2])]);if("createImageBitmap"in self)i(self.createImageBitmap(r));else{let t=this.images.find(t=>!t.src);t||this.images.push(t=new Image),t.onload=()=>{t&&(i(t),requestAnimationFrame(()=>{t&&(URL.revokeObjectURL(t.src),t.src="")}))},t.src=URL.createObjectURL(r)}})}async load(t,i,e){if(this.data.has(i))return;const s=i.replace(/^.*\//,"").split(".")[0],r=/\/base$/.test(i),a=r||ui(s),n=new XMLHttpRequest,o=await new Promise((s,r)=>{let o=0;n.responseType="arraybuffer",n.onprogress=t=>{o||(o=Number(n.getResponseHeader("Content-Length"))),e?.(Math.min(1,t.loaded/o))},n.onload=()=>{4===n.readyState&&200===n.status?(e?.(1),s(n.response)):r()},n.onerror=r,n.open("GET",t+i+(a?".bin":".mdp")),n.send()});if(!o)return;this.data.set(i,o);const h=r?i.split("/")[0]+"/":"";let c=0;for(;c<o.byteLength&&!(c+32>o.byteLength);){const e=this.parseHeader(new Uint8Array(o,c,32));if(e.name&&e.size>0)this.db.set(t+h+e.name.replace("./",""),[i,c+32,e.size]);else if(0===e.size&&!e.name)break;c+=32+e.size}}parseHeader(t){const i=(new TextDecoder).decode(t),e=t=>i.slice(s,s+=t).replace(/\x00/g,"").trim();let s=0;return{name:e(20),size:parseInt(e(12),8)}}},vi=[],bi=class e{get $info(){return this.__info}get $settings(){return i(this.settings)}get $data(){return i(this.data)}constructor(e,s,r={}){if(this.engine=e,this.attr=s,this.opts=r,this.uuid=crypto.randomUUID(),this.__info=p(m),this.settings=t({}),this.data=t(void 0),this.video=t(void 0),this.visible=t(!1),this.ptr=-1,this.baseTileIdx=-1,this.is360=!1,this.isVideo=!1,this.isOmni=!1,this.levels=1,this.dzLevels=0,this.noImage=!1,this.opacity=1,this.viewport=t(),this.embeds=[],this.embedElements=new Map,this.state=new pi.Image(this),r.useParentCamera||(this.camera=new gi(this)),this.id=(s.id??"").replace(l,""),this.id.startsWith("external/")){const t=this.id.indexOf("/",this.id.indexOf("/")+1);-1!==t&&(this.id=this.id.substring(0,t+1)+encodeURIComponent(this.id.substring(t+1)))}this.dataPath=s.path||this.__info.path||"https://r2.micr.io/",r.secondaryTo?(this.opacity=0,r.area=this.engine.micrio.canvas.viewport.portrait?[0,1,1,0]:[1,0,0,1],void 0===r.isPassive&&(r.isPassive=!0)):r.area||(r.area=[0,0,1,1]);let a=!1;this.info=function(t,i){let e;const s=new Set;return{subscribe:(r,a)=>(s.add(r),void 0!==t&&r(t),1===s.size&&(e=i?.(i=>{t=i,s.forEach(t=>t(i))})),()=>{s.delete(r),0===s.size&&e&&(e(),e=void 0)})}}(void 0,t=>{a?t(this.__info):this.load().then(t),a=!0});const n=this.engine.micrio;let o,h=i(this.visible);this.visible.subscribe(t=>{t!=h&&(h=t,r.secondaryTo&&(r.isPassive&&(o?(o(),o=null):t&&(o=r.secondaryTo.state.view.subscribe(t=>{t&&!this.camera.aniDone&&this.camera.setView(t,{noLimit:!0})}))),t?n.events.dispatch("splitscreen-start",this):n.events.dispatch("splitscreen-stop",this)),n.visible.update(i=>(t?i.push(this):i.splice(i.indexOf(this),1),i)),t&&n.$current==this&&n.switching.set(!1))}),this.video.subscribe(t=>this._video=t)}setError(t,i){const e=t instanceof O?t.displayMessage:i??(t instanceof Error?t.message:t)??"An unknown error has occurred";throw this.error=e,this.engine.micrio.printError(t instanceof O?t:e),this.engine.micrio.loading.set(!1),t instanceof Error?t:new Error(e)}async load(){let t=this.__info;const e=this.attr,s=this.engine.micrio;let r;if(e.id&&e.width&&(e.settings&&g(m.settings,e.settings,{noOverwrite:!0}),this.__info=t=e),t.isIIIF=t.isIIIF||this.id.startsWith("http")||"iiif"==t.format,this.id&&(!e.width||!e.height)){const i=t=>this.setError(t,"string"==typeof t?t:'Image with id "'+this.id+'" not found, published, or embeddable.');g(await W.getInfo(this.id).then(i=>(i?.id&&!t.isIIIF&&this.id.split("/").length>=3&&this.id.startsWith("external/")&&(r=i.id.split("/").reverse()[0],this.dataPath=i.path||"https://r2.micr.io/"),i)).catch(i),t)}const{isV5Imported:a}=((t,i)=>{if(t.settings?._meta?.noLogo&&(t.settings.noLogo=!0),t.settings?._meta?.noSmoothing&&(t.settings.noSmoothing=!0),!t.isIIIF&&7==i.length){const e=mi(i[1+mi(i)%6]);t.is360=!!(e>>4&1)||!!t.is360,t.isWebP=!(3&e),t.isPng=2==(3&e),e>>3&1&&ui(t.tilesId??i)&&(t.format="dz"),t.path||(t.path=`https://${e>>2&1?"eu":"r2"}.micr.io/`)}const e=i.startsWith("i")&&!i.includes("/");return e&&!t.tilesId&&(t.tilesId=i.slice(1)),{isV5Imported:e}})(t,this.id);g(e,t),r&&(this.id=t.id=r),this.tileBase=a&&!t.tileBasePath?.includes("micr.io")?t.tileBasePath??"https://b.micr.io/":a?c:t.tileBasePath??t.path??"https://r2.micr.io/";const n=W.getOrganisation();if(n?.baseUrl&&!e.path?(this.dataPath=t.path=n.baseUrl,a||(this.tileBase=this.dataPath)):("https://eu.micr.io/"==t.path||t.path)&&(this.dataPath=t.path),t.settings?.omni&&(this.isOmni=!0,parseFloat(t.version)>=5)){await fi.load(this.tileBase??this.dataPath,(t.tilesId??t.id)+"/base",t=>s._ui?.setProps?.({loadingProgress:t})).catch(t=>this.setError(t,"Could not find object base package."));const i=t.settings.gallery=t.settings.gallery??{};i.type="switch",i.archive=t.id}if(!n?.branding||t.settings&&t.settings.noUI||this.loadStyle(this.dataPath+"style/"+n.slug+".css").then(()=>{const t=getComputedStyle(this.engine.micrio).getPropertyValue("--micrio-font-family")?.replace(/^'([^']+)'.*$/,"$1");t&&document.fonts.ready.then(()=>{document.fonts.check("16px "+t)||this.loadStyle(`https://fonts.googleapis.com/css2?family=${t}:ital,wght@0,300;0,400;0,500;0,600;0,800;1,300;1,400;1,500;1,600;1,800&display=swap`)})}),t.isIIIF&&t.id.includes("/")&&(t.id=("@id"in t?t["@id"]:t.id).replace(/^.*\//,"")),t.spacesId&&!s.spaceData&&(s.spaceData=W.getSpaceData(t.spacesId),1==s.spaceData?.images.length&&delete s.spaceData),t.is360&&this.camera){const i=s.spaceData?.images.find(t=>t.id==this.id)?.rotationY;null!=i?this.camera.rotationY=i:null!=t.settings?._360?.trueNorth&&(this.camera.rotationY=(t.settings._360.trueNorth-.5)*Math.PI*2)}this.noImage=this.noImage||this.isOmni||!t.id&&!t.tilesId,this.extension=t.tileExtension||t.isPng&&"png"||t.isWebP&&"webp"||"jpg","dz"==t.format&&(t.isDeepZoom=!0),this.is360=!!t.is360,this.isVideo=!!t.isVideo;let o=i(s._lang);if(t.revision){const i=Object.keys(t.revision);i.length&&!i.includes(o)&&(s.lang=i[0])}const h=t.settings;h&&!h?.noExternals&&await Promise.all([h.css?this.loadStyle(h.css.href):null,h.js?this.loadScript(h.js.href,o):null].filter(t=>!!t));for(let i=t.tileSize;i<Math.max(t.width,t.height);i*=2,this.levels++);let l=Math.max(t.width,t.height);do{this.dzLevels++}while((l/=2)>1);return h?.gallery?.archive&&(this.levels-=1-(h.gallery.archiveLayerOffset??0)),this.noImage||(this.thumbSrc=this.getTileSrc(this.levels,0,0)),s.events.dispatch("pre-info",t),this.noImage&&!this.isOmni||this.loadBundleData(),t.settings?.micrioSplitLink&&!this.opts.secondaryTo&&s.open({id:t.settings.micrioSplitLink,settings:{hookEvents:!1!==t.settings.secondaryInteractive}},{splitScreen:!0,isPassive:!t.settings.noFollow}),t.settings&&this.settings.set(t.settings),t.watermark&&this.engine.micrio.webgl.loadWatermark(t.watermark,t.settings?.watermarkOpacity),delete t.settings,this.isOmni&&this.state.hookOmni(),t}getTileSrc(t,i,e,s){const r=this.__info;if(r){if(r.isDeepZoom&&(t=this.dzLevels-t),r.isIIIF){const s=r.tileSize,a=Math.pow(2,t)*s,n=Math.min(r.width,i*a),o=Math.min(r.height,e*a),h=Math.min(r.width-n,a),c=Math.min(r.height-o,a),l=Math.round(Math.min(s,h/a*s)),d=Math.round(Math.min(s,c/a*s));return`${r.path}/${r.id}/${[n,o,h,c].join(",")}/${[l,d].join(",")}/0/default.jpg`}if(r.settings?._360?.video?.src)throw"Video thumb";return`${this.tileBase}${r.tilesId||r.id}/${void 0!==s?s+"/":""}${t}/${i}${r.isDeepZoom?"_":"-"}${e}.${this.extension}`}}loadScript(t,i=""){return new Promise(e=>{if(vi.includes(t)||document.querySelector('script[src="'+t+'"]'))e();else{vi.push(t);const s=document.createElement("script");s.type="text/javascript",s.async=!0,s.defer=!0,s.micrioElement=this.engine.micrio,s.src=t.replace("$lang",i),s.onload=e,document.head.appendChild(s)}})}loadStyle(t){return new Promise(i=>{if(vi.includes(t)||document.head.querySelector('link[href="'+t+'"]'))i();else{vi.push(t);const e=document.createElement("link");e.setAttribute("type","text/css"),e.setAttribute("rel","stylesheet"),e.setAttribute("href",t),e.onload=i,document.head.appendChild(e)}})}addEmbed(t,i,s={}){const r=i.slice(0),a=new e(this.engine,t,{area:r,isEmbed:!0,useParentCamera:s.asImage});return a.camera||(a.camera=this.camera),this.embeds.push(a),void 0===s.opacity&&(s.opacity=1),o(a.info).then(t=>{if(t){if("cover"==s.fit||"contain"==s.fit){const i=this.is360?2:1,e="cover"==s.fit,a=r[2],n=r[3],o=r[0]+a/2,h=r[1]+n/2,c=a/n*i,l=t.width/t.height;if(e&&l<c||!e&&l>=c){const t=a/l*i;r[1]=h-t/2,r[3]=t}else{const t=n*l/i;r[0]=o-t/2,r[2]=t}}this.engine.addEmbed(a,this,s),this.engine.render()}}),a}setEmbedMediaElement(t,i){i?this.embedElements.set(t,i):this.embedElements.delete(t)}getEmbedMediaElement(t){return this.embedElements.get(t)}splitStart(){const t=this.engine.micrio.canvas.viewport.portrait;this.opts.secondaryTo?.camera.setArea(t?[0,0,1,.5]:[0,0,.5,1],{noRender:!0}),this.camera.setArea(t?[0,.5,1,.5]:[.5,0,.5,1],{noRender:!0}),this.camera.setView(this.__info?.settings?.view??[0,0,1,1]),this.engine.render()}splitEnd(){const t=this.opts.area;if(!t)return;const i=t[2],e=t[3];if(Math.round(1e3*i)/1e3==0||Math.round(1e3*e)/1e3==0)return;const s=i>e;this.camera.setArea(s?[0,1,1,0]:[1,0,0,1],{noRender:!0}),this.opts.secondaryTo?.grid&&this.opts.secondaryTo.camera.aniDone||this.opts.secondaryTo?.camera.setArea([0,0,1,1],{noRender:!0}),this.engine.render()}fadeIn(t=!1){this.engine.fadeImage(this.ptr,1,t),this.engine.render()}fadeOut(t=!1){this.engine.fadeImage(this.ptr,0,t),this.engine.render()}loadBundleData(){const t=W.getBundleImageSync(this.id);t?.data&&(t.info?.revision&&!this.__info.revision&&(this.__info.revision=t.info.revision),this.engine.micrio.events.dispatch("pre-data",{[this.id]:t.data}),this.data.set(t.data))}},wi=!self.createImageBitmap,yi=URL.createObjectURL(new Blob(["let controller = null, prevUri = null;\nself.addEventListener('message', e => {\n\t// Handle abort message\n\tif(e.data == 'abort') return controller && controller.abort();\n\t// Create new AbortController for this fetch\n\tcontroller = new AbortController();\n\t// Fetch the image blob\n\tfetch(e.data.src, { signal: controller.signal })\n\t\t.then(r => r.blob())"+(wi?"\n\t\t// Fallback for older Safari: create Object URL\n\t\t.then(blob => {\n\t\t\t// Revoke previous Object URL to free memory\n\t\t\tURL.revokeObjectURL(prevUri);\n\t\t\t// Post Object URL back\n\t\t\tself.postMessage({src: (prevUri = URL.createObjectURL(blob, {type: e.data.type}))})\n\t\t})":"\n\t\t// If createImageBitmap is supported, use it (preferred)\n\t\t.then(blob => self.createImageBitmap(blob))\n\t\t// Post ImageBitmap back, transferring ownership\n\t\t.then(data => self.postMessage({data:data, src:e.data.src}, [data]))")+"\n\t\t// Handle fetch errors (including abort)\n\t\t.catch(err => self.postMessage({error: e.data.src+': '+err.message, type: err.name}))\n})"],{type:"text/javascript"})),xi=Math.max(2,Math.min(6,(navigator.hardwareConcurrency||2)-1)),ki=[],Ei=new Map,Ti=new Map,Mi=[],Ci=new Map;for(let _e=0;_e<xi;_e++){const t=new Worker(yi);t.onmessage=t=>Ai(_e,t.data.src,t.data.data,t.data.error,t.data.type),Ei.set(_e,t),wi&&Ti.set(_e,new Image)}var Si=t=>new Promise((i,e)=>{Mi.push([t,i,e]),function(){if(!Mi.length)return;let t=0;for(;t<xi&&ki.includes(t);t++);if(t>=xi)return;ki.push(t);const i=Mi.shift();if(!i)return void ki.splice(ki.indexOf(t),1);Ci.set(t,i);const e=Ei.get(t);if(!e)return console.error(`[Micrio Texture] Worker ${t} not found!`),i[2]("Internal error: Worker not found"),void ki.splice(ki.indexOf(t),1);e.postMessage({src:i[0],type:"image/"+i[0].split(".").pop()})}()});function Ai(t,i,e,s,r){const a=Ci.get(t);if(null!=a)if(Ci.delete(t),setTimeout(()=>{ki.splice(ki.indexOf(t),1)},50),s)a[2](s),"AbortError"!=r&&console.error(`[Micrio Texture] Error loading ${a[0]}: ${r} - ${s}`);else if(e)a[1](e);else if(i&&wi){const e=Ti.get(t);if(!e)return void a[2]("Internal error: Image element fallback not found");e.onload=()=>{a[1](e)},e.onerror=()=>{a[2](`Failed to load image from Object URL: ${i}`)},e.src=i}else a[2](`Worker ${t} sent invalid message.`),console.error(`[Micrio Texture] Worker ${t} sent invalid message for ${a[0]}`);else console.warn(`[Micrio Texture] Received message from worker ${t} but no matching promise found.`)}function Li(){return ki.length}function Pi(t){const i=[...Ci.entries()].find(i=>i[1][0]==t);if(null==i)return;const e=Ei.get(i[0]);e&&e.postMessage("abort")}var Ii=Math.PI,_i=Ii/2,zi=2*Ii;function Di(t){return 1<<t}var Ri=t=>function(t,i=1){return(t%i+i)%i}(t,1);function Oi(t){return(t%zi+zi)%zi}function Xi(t,i){const e=Ri(t),s=Ri(i)-e,r=s>0?s-1:s+1;return Math.abs(s)<=Math.abs(r)?s:r}var Yi=class{constructor(t,i,e,s){this.isLinear=t===i&&e===s&&0===t&&1===e;const r=3*t,a=3*(e-t)-r;this.Cx=r,this.Bx=a,this.Ax=1-r-a;const n=3*i,o=3*(s-i)-n;this.Cy=n,this.By=o,this.Ay=1-n-o}bezier_x(t){return t*(this.Cx+t*(this.Bx+t*this.Ax))}bezier_y(t){return t*(this.Cy+t*(this.By+t*this.Ay))}bezier_x_der(t){return this.Cx+t*(2*this.Bx+3*this.Ax*t)}find_x_for(t){let i=t,e=0,s=0,r=0;for(;e<5&&(s=this.bezier_x(i)-t,r=this.bezier_x_der(i),0!==r);)i-=s/r,e++;return i}get(t){return this.isLinear?t:this.bezier_y(this.find_x_for(t))}},$i=new Yi(.42,0,.58,1),Fi=new Yi(.42,0,1,1),Bi=new Yi(0,0,.58,1),Vi=new Yi(0,0,1,1),Ni=class{constructor(t=0,i=0,e=0,s=0,r=0,a=0,n=0){this.x0=t,this.y0=i,this.x1=e,this.y1=s,this.layer=r,this.x=a,this.y=n}},Hi=class{constructor(t,i=.5,e=.5,s=1,r=1,a=.5,n=.5,o=1,h=1){this.canvas=t,this.centerX=i,this.centerY=e,this.width=s,this.height=r,this.lCenterX=a,this.lCenterY=n,this.lWidth=o,this.lHeight=h,this.arr=new Float64Array(4),this.changed=!1,this.limitChanged=!1,this.toArray()}get x0(){let t=this.centerX;return this.canvas.is360&&(t=Ri(t)),this.canvas.is360?Ri(t-this.width/2):t-this.width/2}get y0(){return this.centerY-this.height/2}get x1(){let t=this.centerX;return this.canvas.is360&&(t=Ri(t)),this.canvas.is360?Ri(t+this.width/2):t+this.width/2}get y1(){return this.centerY+this.height/2}get lX0(){return this.lCenterX-this.lWidth/2}get lY0(){return this.lCenterY-this.lHeight/2}get lX1(){return this.lCenterX+this.lWidth/2}get lY1(){return this.lCenterY+this.lHeight/2}get yaw(){return(this.centerX-.5)*Ii*2}get pitch(){return(this.centerY-.5)*Ii}get aspect(){return this.width/this.height}get size(){return Math.sqrt(this.width*this.width+this.height*this.height)*(1/Math.sqrt(2))}set(t,i,e,s,r=!1){if(r){const t=Math.min(1,this.width)/Math.min(1,this.height);e/s>1.5*t&&e<this.width&&(s=e/t)}this.centerX=t,this.centerY=i,this.width=e,this.height=s,this.toArray(),this.changed=!0}setArea(t,i,e,s){this.centerX=(t+e)/2,this.centerY=(i+s)/2,this.width=e-t,this.height=s-i,this.toArray()}setLimit(t,i,e,s){this.lCenterX=t,this.lCenterY=i,this.lWidth=e,this.lHeight=s,this.changed=!0,this.limitChanged=!0}copy(t,i=!1){this.centerX=t.centerX,this.centerY=t.centerY,this.width=t.width,this.height=t.height,i||(this.lCenterX=t.lCenterX,this.lCenterY=t.lCenterY,this.lWidth=t.lWidth,this.lHeight=t.lHeight),this.changed=!0,this.toArray()}getPerspective(){const t=this.canvas,i=t.webgl;return i.maxPerspective-.5/(this.height*t.height/t.el.height)*Ii/i.scaleY}getScale(){const t=this.canvas;return 1/Math.max(this.width*t.width/t.el.width,this.height*t.height/t.el.height)}getDistance(t,i){i&&this.canvas.currentArea.isFull()&&(t.correctAspectRatio(),this.correctAspectRatio());return(Math.abs(this.centerX-t.centerX)+Math.abs(this.centerY-t.centerY)+Math.abs(this.width-t.width)+Math.abs(this.height-t.height))/4}limit(t,i=!1,e=!1){const s=this.canvas,r=s.camera.minSize,a=this.getScale();if(r<1&&a<s.camera.minScale&&!i){const t=1/r,i=Math.min(t,this.width),e=Math.min(t,this.height);return this.centerX=.5,this.centerY=.5,this.width=i,this.height=e,void this.toArray()}const n=t?Math.max(1,a/Math.max(s.camera.minScale,s.maxScale/s.el.scale)):1,o=this.lWidth,h=this.lHeight,c=Math.min(o,this.width*n),l=Math.min(h,this.height*n);if(t&&(n>1||i&&a<s.camera.minScale)&&(this.width=c,this.height=l),(o<1||h<1)&&(this.width=Math.min(this.width,o),this.height=Math.min(this.height,h)),i)return void this.toArray();const d=Math.min(1,this.width)/2,m=this.lWidth/2;this.canvas.is360?this.centerX=Ri(this.centerX):e||(this.centerX=Math.max(this.lCenterX-m+d,Math.min(this.centerX,this.lCenterX+m-d)));const u=Math.min(1,this.height)/2,p=this.lHeight/2;e||(this.centerY=Math.max(this.lCenterY-p+u,Math.min(this.centerY,this.lCenterY+p-u))),this.toArray()}correctAspectRatio(){const t=this.canvas;if(t.is360)return;const i=t.camera.cpw/t.camera.cph;this.width/this.height>i?this.height=this.width/i:this.width=this.height*i,this.toArray()}toArray(){return this.arr[0]=this.centerX,this.arr[1]=this.centerY,this.arr[2]=this.width,this.arr[3]=this.height,this.arr}equals(t,i,e,s){return this.centerX===t&&this.centerY===i&&this.width===e&&this.height===s}isFull(){return 1===this.width&&1===this.height&&.5===this.centerX&&.5===this.centerY}},Ui=class{constructor(t=.5,i=.5,e=1,s=0,r=0){this.x=t,this.y=i,this.scale=e,this.w=s,this.direction=r,this.arr=new Float64Array(5)}inView(t){return this.w<-1||this.w<3&&!(this.x<0||this.x>t.width||this.y<0||this.y>t.height)}toArray(){return this.arr[0]=this.x,this.arr[1]=this.y,this.arr[2]=this.scale,this.arr[3]=this.w,this.arr[4]=this.direction,this.arr}},Wi=class{constructor(t=0,i=0,e=0,s=0,r=0,a=0,n=1,o=1,h=!1){this.width=t,this.height=i,this.left=e,this.top=s,this.areaWidth=r,this.areaHeight=a,this.ratio=n,this.scale=o,this.isPortrait=h,this.arr=new Int32Array(4)}get centerX(){return this.left+this.width/2}get centerY(){return this.top+this.height/2}get aspect(){return 0===this.width||0===this.height?1:this.width/this.height}toArray(){return this.arr[0]=this.width,this.arr[1]=this.height,this.arr[2]=this.left,this.arr[3]=this.top,this.arr}set(t,i,e,s,r,a,n){return(this.width!==t*r||this.height!==i*r||this.left!==e||this.top!==s||this.ratio!==r||this.scale!==a||this.isPortrait!==n)&&(this.width=t*r,this.height=i*r,this.left=e*r,this.top=s*r,this.ratio=r,this.scale=a,this.isPortrait=n,!0)}copy(t){this.width=t.width,this.height=t.height,this.left=t.left,this.top=t.top,this.ratio=t.ratio,this.scale=t.scale,this.isPortrait=t.isPortrait}},Gi=class{constructor(t){this.el=new Wi,this.vertexBuffer=new Float32Array(18),this.vertexBuffer360=new Float32Array(4608),this.canvases=[],this.numTiles=0,this.numImages=0,this.now=0,this.animating=!1,this.progress=0,this.toDrawTotal=0,this.doneTotal=0,this.crossfadeDuration=.25,this.gridTransitionDuration=.5,this.gridTransitionTimingFunction=$i,this.spacesTransitionDuration=.5,this.embedFadeDuration=.5,this.dragElasticity=1,this.hasArchive=!1,this.archiveLayerOffset=0,this.underzoomLevels=4,this.skipBaseLevels=0,this.bareBone=!1,this.isSwipe=!1,this.noPinchPan=!1,this.direction=0,this.distanceX=0,this.distanceY=0,this.frameTime=1/60,this._host=t}get drawTile(){return this._host.drawTile}get drawQuad(){return this._host.drawQuad}get getTileOpacity(){return this._host.getTileOpacity}get setTileOpacity(){return this._host.setTileOpacity}get setMatrix(){return this._host.setMatrix}get setViewport(){return this._host.setViewport}get aniDone(){return this._host.aniDone}get aniAbort(){return this._host.aniAbort}get viewSet(){return this._host.viewSet}get viewportSet(){return this._host.viewportSet}get setCanvasVisible(){return this._host.setCanvasVisible}get setImageVisible(){return this._host.setImageVisible}shouldDraw(t){this.frameTime=1e3/Math.min(33,t-this.now),this.now=t,this.doneTotal=0,this.toDrawTotal=0,this.animating=!1;for(let i=0;i<this.canvases.length;i++)this.canvases[i].shouldDraw();return this.animating||this.progress<1}draw(){for(let t=0;t<this.canvases.length;t++)this.canvases[t].draw()}reset(){for(let t=0;t<this.canvases.length;t++)this.canvases[t].reset()}aniStop(){for(let t=0;t<this.canvases.length;t++)this.canvases[t].aniStop()}resize(t,i,e,s,r,a,n){this.el.set(t,i,e,s,r,a,n);for(let o=0;o<this.canvases.length;o++)this.canvases[o].resize()}remove(t){for(let i=0;i<this.canvases.length;i++)if(this.canvases[i]===t)return void this.canvases.splice(i,1)}},ji=class{constructor(t){this.canvas=t,this.dX=0,this.dY=0,this.startTime=0,this.prevTime=0,this.endTime=0,this.lastInteraction=0,this.velocityX=0,this.velocityY=0,this.started=!1}addStep(t,i,e){if(this.endTime)return;0===this.startTime&&(this.startTime=e);const s=this.prevTime>0?16.67/(e-this.prevTime):1;Math.sqrt(t*t+i*i)*s>20&&(this.lastInteraction=e);const r=this.canvas.main.dragElasticity;this.dX+=t*r,this.dY+=i*r,this.prevTime=e}start(){this.canvas.camera.isUnderZoom()||(this.started=!0)}stop(){this.started=!1,this.endTime=0,this.startTime=0,this.prevTime=0,this.lastInteraction=0,this.dX=0,this.dY=0,this.velocityX=0,this.velocityY=0}step(t){const i=this.canvas.webgl,e=this.canvas.camera;if(!this.started||0===this.startTime)return 1;if(0===this.endTime){this.endTime=t;const i=1-Math.min(1,(this.endTime-this.lastInteraction)/250),e=this.endTime-this.startTime;this.velocityX=this.dX/(e/4)*i,this.velocityY=this.dY/(e/4)*i}else this.velocityX*=.94,this.velocityY*=.94;let s=Math.sqrt(this.velocityX*this.velocityX+this.velocityY*this.velocityY);return this.canvas.is360?i.rotate(this.velocityX,this.velocityY,0,t):e.pan(this.velocityX,this.velocityY,0,!1,t,!1,!0),s<=.01&&(s=0,this.stop()),1-s}},qi=class{constructor(t){this.canvas=t,this.isView=!1,this.isZoom=!1,this.isJump=!1,this.zFrom=0,this.zTo=0,this.zNoLimit=!1,this.fn=$i,this.started=0,this.duration=0,this.isRunning=!1,this.limit=!0,this.zoomingOut=!1,this.flying=!1,this.correcting=!1,this.pausedAt=0,this.fL=0,this.fT=0,this.fR=0,this.fB=0,this.mI=0,this.mO=0,this.omniStartIdx=-1,this.omniDelta=0,this.vFrom=new Hi(t),this.vTo=new Hi(t),this.lastView=new Hi(t)}pause(t){this.pausedAt>0||(this.isRunning=!1,this.pausedAt=t)}resume(t){0!==this.pausedAt&&0!==this.started&&(this.started+=t-this.pausedAt,this.pausedAt=0,this.isRunning=!0)}stop(){this.isRunning&&this.canvas.aniAbort(),this.started=0,this.limit=!0,this.flying=!1,this.isRunning=!1,this.isView=!1,this.isZoom=!1,this.correcting=!1,this.pausedAt=0}isStarted(){return this.isRunning&&this.isView}toView(t,i,e,s,r,a,n,o,h,c,l,d,m=!1){if(m&&this.correcting)return this.updateTarget(t,i,e,s,!0),r;this.lastView.set(t,i,e,s),this.vTo.set(t,i,e,s);const u=this.canvas,p=u.view,g=this.vTo,f=this.vFrom;this.isJump=o,this.fn=3===l?Vi:2===l?Bi:1===l?Fi:$i;const v=u.main.el;if(0!==v.areaHeight){const t=s/(1-v.areaHeight/v.height);t>0?s+=t:s-=t,v.areaHeight=0}if(0!==v.areaWidth){const t=e*(v.areaWidth/v.width);t>0?e+=t:e-=t,v.areaWidth=0}const b=p.centerX,w=p.centerY,y=p.width,x=p.height;f.set(b,w,y,x),u.is360&&(t=b+Xi(b,t),g.set(t,i,e,s)),h&&(g.correctAspectRatio(),g.limit(!1)),this.fL=0,this.fR=0,this.fT=0,this.fB=0;let k=1;if(this.isJump){if(!u.is360){const t=g.centerX,i=g.centerY;if(g.aspect>f.aspect){const e=g.width/f.aspect;g.set(t,i,g.width,e)}else{const e=g.height*f.aspect;g.set(t,i,e,g.height)}}const r=f.centerX-f.width/2,a=f.centerX+f.width/2,n=f.centerY-f.height/2,o=f.centerY+f.height/2,h=g.centerX-g.width/2,c=g.centerX+g.width/2,l=g.centerY-g.height/2,d=g.centerY+g.height/2,m=h<r,p=l<n,v=c>a,b=d>o;!(m||p||v||b)||m&&p&&v&&b?g.set(t,i,e,s):(this.fL=m?1:h>r?2:0,this.fR=v?1:c<a?2:0,this.fT=p?1:l>n?2:0,this.fB=b?1:d<o?2:0,k=1.5)}m&&g.limit(!0,!h);const E=Math.max(1e4,Math.min(15e3,Math.sqrt(u.width*u.width+u.height*u.height)/2));let T=Math.abs(b-t);u.is360&&(T=Math.min(T,1-T));const M=e<y&&s<x?.125:.25,C=(T+Math.abs(w-i)+Math.abs(y-e)*M+Math.abs(x-s)*M)/3;this.mI=Math.max(.5,.8-C*(u.is360?1:2)),this.mO=Math.max(.05,Math.min(.9,C-(u.is360?.2:.1))),this.duration=r<0?C*E/u.camSpeed*k/(a<=0?1:a):r;const S=this.canvas.images.length/this.canvas.omniNumLayers;return this.omniStartIdx=this.canvas.activeImageIdx,this.omniDelta=0,!isNaN(c)&&c>0&&c!==this.omniStartIdx&&(this.omniDelta=c-this.omniStartIdx,this.omniDelta<-S/2&&(this.omniDelta+=S),this.omniDelta>S/2&&(this.omniDelta-=S),this.duration+=Math.abs(this.omniDelta)/this.canvas.images.length*6e3),this.stop(),0===this.duration?(u.setView(g.centerX,g.centerY,g.width,g.height,!1,!0),this.canvas.aniDone(),this.duration):(this.isView=!0,this.limit=!1,this.flying=!0,this.isZoom=!1,m&&(this.correcting=!0),this.started=d-n*this.duration,this.isRunning=!0,this.duration*(1-n))}updateTarget(t,i,e,s,r=!1){this.vTo.set(t,i,e,s),r&&this.vTo.limit(!0)}zoom(t,i,e,s,r){this.stop(),this.isView=!1,this.flying=!1,this.isZoom=!0,this.zNoLimit=s;const a=this.canvas,n=a.webgl;return this.zFrom=n.perspective,this.zTo=this.zFrom+t/(n.scale*Math.sqrt(a.width*a.width+a.height*a.height)/20),s||(this.zTo=Math.min(n.maxPerspective,Math.max(n.minPerspective,this.zTo))),this.started=r,this.isRunning=!0,this.duration=i>=0?i:1e3*Math.abs(this.zFrom-this.zTo)/e,i}setStartView(t,i,e,s,r){this.vFrom.set(t,i,e,s,r),this.vTo.set(t,i,e,s,r)}step(t){const i=0===this.started?1:Math.min(1,Math.max(0,(t-this.started)/this.duration)),e=this.fn.get(i),s=this.canvas.getScale();if(this.isRunning){if(this.isView){const t=this.vFrom,s=this.vTo,r=this.mO,a=this.fn.get(Math.min(1,i/this.mI)),n=this.fn.get(Math.max(0,(i-r)/(1-r)));let o=0,h=t.centerX+(s.centerX-t.centerX)*((o=this.fL||this.fR)?1===o?a:n:e),c=t.centerY+(s.centerY-t.centerY)*((o=this.fT||this.fB)?1===o?a:n:e);const l=t.width+(s.width-t.width)*e,d=t.height+(s.height-t.height)*e;if(this.canvas.is360){const i=Xi(t.centerX,s.centerX);h=t.centerX+i*e}if(this.canvas.setView(h,c,l,d,!1,!0),this.omniDelta){let t=this.omniStartIdx+Math.trunc(this.omniDelta*this.fn.get(Math.min(1,1.5*i)));const e=this.canvas.images.length/this.canvas.omniNumLayers;t<0&&(t+=e),t>=e&&(t-=e),this.canvas.setActiveImage(t,0)}}this.isZoom&&this.canvas.webgl.setPerspective(this.zFrom*(1-e)+this.zTo*e,this.zNoLimit),i>=1&&(this.lastView.copy(this.canvas.view),this.canvas.aniDone(),this.stop())}return this.zoomingOut=this.isRunning&&this.canvas.getScale()<s,i}},Zi=class{constructor(t){this.canvas=t,this.scale=1,this.minScale=1,this.minSize=1,this.maxScale=1,this.fullScale=1,this.coverScale=1,this.xy=new Ui,this.coo=new Ui,this.startCoo=new Ui,this.pinching=!1,this.inited=!1,this.hasStartCoo=!1,this.cpw=-1,this.cph=-1,this.wasCoverLimit=!0,this.prevSize=-1,this.prevCenterX=-1,this.prevCenterY=-1,t.is360&&(this.inited=!0)}getCoo(t,i,e,s){const r=this.canvas;(r.noImage||r.freeMove)&&(s=!0);const a=r.el,n=r.hasParent?r.parent.el.ratio:a.ratio;e&&(t-=a.left,i-=a.top);const o=t/this.scale*n/r.width+r.view.x0,h=i/this.scale*n/r.height+r.view.y0;return this.coo.x=s?o:Math.max(r.view.lX0,Math.min(r.view.lX1,o)),this.coo.y=s?h:Math.max(r.view.lY0,Math.min(r.view.lY1,h)),this.coo.scale=this.scale,this.coo.toArray(),this.coo}getXY(t,i,e){const s=this.canvas,r=s.el,a=s.hasParent?s.parent.el.ratio:r.ratio;return this.xy.x=(t-s.view.x0)*s.width*this.scale/a+(e?r.left:0),this.xy.y=(i-s.view.y0)*s.height*this.scale/a+(e?r.top:0),this.xy.scale=this.scale/a,this.xy.toArray(),this.xy}getXYOmni(t,i,e,s,r){return this.getXYOmniCoo(t-.5,i-.5,e,s,r)}getXYOmniCoo(t,i,e,s,r){const a=this.canvas,n=a.el,o=a.webgl.pMatrix,h=a.webgl.vec4,c=a.hasParent?a.parent.el.ratio:n.ratio;h.x=t,h.y=i,h.z=e,h.w=1,o.identity(),!r&&a.omniFieldOfView&&o.perspective(a.omniFieldOfView,a.aspect,1e-4,100),a.omniDistance&&o.translate(0,0,a.omniDistance),a.omniOffsetX&&o.translate(a.omniOffsetX,0,0),!r&&a.omniVerticalAngle&&o.rotateX(a.omniVerticalAngle);const l=a.images.length/a.omniNumLayers,d=a.layer*l,m=a.images.length>0?-(a.activeImageIdx+1-d)/l*2*Ii:0;return o.rotateY(s+m),h.transformMat4(o),this.xy.x=(.5+h.x-a.view.x0)*a.width*this.scale/c+(r?n.left:0),this.xy.y=(.5+h.y-a.view.y0)*a.height*this.scale/c+(r?n.top:0),this.xy.w=-h.w-a.omniDistance,this.xy.toArray(),this.xy}setCanvas(){const t=this.canvas,i=t.el,e=i.width/t.width,s=i.height/t.height;if(!t.view.limitChanged&&this.cpw===e&&this.cph===s)return void(t.coverLimit!==this.wasCoverLimit&&this.correctMinMax());this.cpw=e,this.cph=s,this.fullScale=Math.min(e,s),this.coverScale=Math.max(e,s);const r=t.view.lWidth/t.view.lHeight;if(t.view.limitChanged=!1,t.view.lWidth<1||t.view.lHeight<1){const i=e/s;this.coverScale/=r<i?t.view.lWidth/i:t.view.lHeight*i}if(this.correctMinMax(),i.width&&i.height&&!this.canvas.ani.isStarted()&&(t.view.copy(t.ani.lastView,!0),!t.is360)){const i=t.ani.limit;t.ani.limit=!1,this.setView(),t.ani.limit=i}}correctMinMax(t=!1){const i=this.canvas;if(this.minScale=i.coverLimit?this.coverScale:this.fullScale,!t&&!i.main.isSwipe&&(0===i.activeImageIdx&&!i.coverLimit||i.activeImageIdx>0)){const t=i.focus.width*i.width,e=i.focus.height*i.height,s=i.el.width,r=i.el.height;this.minScale=s/r>t/e?r/e:s/t}this.maxScale=this.minScale>1&&i.maxScale<this.minScale?this.minScale:Math.max(this.minScale,i.maxScale*i.scaleMultiplier/i.el.scale),this.wasCoverLimit=i.coverLimit}isUnderZoom(){return this.minSize<1&&this.scale<this.minScale}isZoomedOut(t=!1){return Math.trunc(1e6*(this.scale-this.minScale*(t?this.minSize:1)))/1e6<=0}isZoomedIn(){return Math.trunc(1e6*(this.scale-this.maxScale))/1e6>=0}setView(){if(-1===this.cpw)return!1;const t=this.canvas,i=this.canvas.view,e=!t.freeMove&&t.ani.limit;!t.ani.correcting&&(e||!t.ani.flying&&t.coverLimit)&&i.limit(!1);const s=i.width,r=i.height,a=this.cpw,n=this.cph;this.scale=Math.min(a/s,n/r),e&&!this.pinching&&this.scale>=this.maxScale&&t.ani.flying&&(this.scale=this.maxScale),(!t.ani.correcting&&!this.pinching||t.coverLimit)&&(this.scale=Math.max(this.minScale*this.minSize,this.scale)),!this.inited&&t.coverStart&&(this.scale=this.coverScale);const o=a/this.scale-s,h=n/this.scale-r;return i.set(i.centerX,i.centerY,i.width+o,i.height+h),!this.inited&&t.coverStart&&this.canvas.ani.lastView.copy(i),!t.ani.correcting&&t.coverLimit&&i.limit(!1),this.inited=this.cpw>0,i.toArray(),!this.hasStartCoo||(this.hasStartCoo=!1,this.setCoo(this.startCoo.x,this.startCoo.y,this.startCoo.scale,0,0,!1,0,0),!1)}isOutsideLimit(){const t=this.canvas.view;return!this.canvas.freeMove&&(Math.trunc(1e6*(t.x0-t.lX0))/1e6<0!=Math.trunc(1e6*(t.x1-t.lX1))/1e6>0||Math.trunc(1e6*(t.y0-t.lY0))/1e6<0!=Math.trunc(1e6*(t.y1-t.lY1))/1e6>0||Math.trunc(1e6*(this.scale-this.maxScale))/1e6>0)}pan(t,i,e,s,r,a=!1,n=!1){const o=this.canvas;if(o.is360)return void o.webgl.rotate(t,i,e,r);if((this.isUnderZoom()||this.pinching)&&!a)return;this.canvas.freeMove&&(s=!0);const h=o.hasParent?o.parent.el.ratio:o.el.ratio,c=o.view,l=t/o.width/this.scale*h,d=i/o.height/this.scale*h,m=c.centerX+l,u=c.centerY+d,p=c.width,g=c.height;this.pinching?(o.view.set(m,u,p,g),o.setView(m,u,p,g,s,!1,!1,!1)):a||!this.isOutsideLimit()||n?(o.ani.stop(),0===e?(n||o.kinetic.addStep(4*t,4*i,r),o.view.set(m,u,p,g),s||o.view.limit(!1,!1,o.freeMove),o.setView(m,u,p,g,s,!1,!1,n),o.view.changed=!0):o.ani.toView(m,u,p,g,e,0,0,!1,!1,-1,0,r)):o.ani.isStarted()?o.ani.updateTarget(m,u,c.width,c.height,!0):o.ani.toView(m,u,p,g,150,0,0,!1,!s&&!this.pinching,-1,0,r,!s)}zoom(t,i,e,s,r,a){const n=this.canvas;if(n.is360)return n.webgl.zoom(t,s,0,r,a,i,e);if(n.kinetic.stop(),!this.pinching&&this.isZoomedIn()&&t<0)return 0;if(this.canvas.freeMove&&(r=!0),t>0&&this.isZoomedOut()&&this.minSize>=1&&(!this.pinching||n.coverLimit))return 0;const o=n.el,h=n.view,c=this.cpw/this.cph;let l=t*(o.width/512)/n.width/this.scale,d=l/c;t<0&&l<-1&&(l=-.9999),t<0&&d<-1&&(d=-.9999);const m=!r&&!n.freeMove&&n.ani.limit&&0===s,u=n.hasParent?n.parent.el.ratio:o.ratio;i-=o.left,e-=o.top;const p=this.isUnderZoom(),g=i>0&&!p?i/o.width*u:.5,f=e>0&&!p?e/o.height*u:.5,v=h.centerX+l*(.5-g),b=h.centerY+d*(.5-f),w=h.width+l,y=h.height+d;return n.ani.limit=m,s=n.ani.toView(v,b,w,y,s,0,0,!1,!r&&!this.pinching,-1,0,a,m),n.ani.lastView.copy(n.view),n.ani.limit=!r,s}pinch(t,i,e,s){const r=this.canvas,a=r.main.el,n=(Math.min(t,e)-a.left)/a.scale,o=(Math.min(i,s)-a.top)/a.scale,h=(Math.max(t,e)-a.left)/a.scale,c=(Math.max(i,s)-a.top)/a.scale,l=n+(h-n)/2,d=o+(c-o)/2,m=Math.max(h-n,c-o),u=this.prevSize-m;if(r.kinetic.stop(),this.prevCenterX>0){const t=this.prevCenterX-l,i=this.prevCenterY-d;r.is360?(r.webgl.zoom(2*u,0,0,!1,1),r.webgl.rotate(t,i,0,0)):(!this.canvas.main.noPinchPan&&this.scale>this.minScale&&this.pan(t,i,0,!1,0,!0),this.zoom(2*u*a.scale,l,d,0,!this.canvas.pinchZoomOutLimit,0),r.ani.limit=!!this.canvas.pinchZoomOutLimit)}else r.ani.stop();this.prevCenterX=l,this.prevCenterY=d,this.prevSize=m}pinchStart(){this.pinching=!0}pinchStop(t){this.canvas.is360||this.snapToBounds(t),this.prevSize=-1,this.prevCenterX=-1,this.prevCenterY=-1,this.pinching=!1}snapToBounds(t){if(this.canvas.freeMove)return;const i=this.canvas.view,e=this.scale>this.maxScale,s=e?this.cpw/this.maxScale:i.width,r=e?this.cph/this.maxScale:i.height,a=s/2,n=r/2,o=i.lWidth/2,h=i.lHeight/2,c=a>=o?i.lCenterX:Math.max(i.lX0+a,Math.min(i.centerX,i.lX1-a)),l=n>=h?i.lCenterY:Math.max(i.lY0+n,Math.min(i.centerY,i.lY1-n));this.canvas.ani.toView(c,l,s,r,150,0,0,!1,!1,-1,0,t,!0)}flyTo(t,i,e,s,r,a,n,o,h,c,l,d,m){const u=this.canvas,p=u.ani;u.kinetic.stop();let g=t;if(u.is360){const i=u.view.centerX;g=i+Xi(i,t)}return p.limit=!1,r=p.toView(g,i,e,s,r,a,n,o,h,l,d,m,c),p.limit=!1,p.flying=!0,r}setCoo(t,i,e,s,r,a,n,o){if(!this.inited)return this.hasStartCoo=!0,this.startCoo.x=t,this.startCoo.y=i,this.startCoo.scale=e,this.setView(),0;const h=this.canvas,c=h.is360;(0===e||!c&&isNaN(e))&&(e=h.getScale()),c||(e=Math.max(this.minScale,e)),h.kinetic.stop();const l=isNaN(e)&&c?h.view.width:1/e*this.cpw,d=isNaN(e)&&c?h.view.height:1/e*this.cph;return 0!==s||c||(t+l/2>1&&(t=1-l/2),t-l/2<0&&(t=l/2),i+d/2>1&&(i=1-d/2),i-d/2<0&&(i=d/2)),s=h.ani.toView(t,i,l,d,s,r,0,!1,!1,-1,n,o),h.ani.limit=0===s||a,h.ani.flying=s>0,s}},Ki=class{constructor(t=1,i=0,e=0,s=0,r=0,a=1,n=0,o=0,h=0,c=0,l=1,d=0,m=0,u=0,p=0,g=1){this.a0=t,this.a1=i,this.a2=e,this.a3=s,this.a4=r,this.a5=a,this.a6=n,this.a7=o,this.a8=h,this.a9=c,this.a10=l,this.a11=d,this.a12=m,this.a13=u,this.a14=p,this.a15=g,this.arr=new Float32Array(16)}toArray(){return this.arr[0]=this.a0,this.arr[1]=this.a1,this.arr[2]=this.a2,this.arr[3]=this.a3,this.arr[4]=this.a4,this.arr[5]=this.a5,this.arr[6]=this.a6,this.arr[7]=this.a7,this.arr[8]=this.a8,this.arr[9]=this.a9,this.arr[10]=this.a10,this.arr[11]=this.a11,this.arr[12]=this.a12,this.arr[13]=this.a13,this.arr[14]=this.a14,this.arr[15]=this.a15,this.arr}identity(){this.a0=1,this.a1=0,this.a2=0,this.a3=0,this.a4=0,this.a5=1,this.a6=0,this.a7=0,this.a8=0,this.a9=0,this.a10=1,this.a11=0,this.a12=0,this.a13=0,this.a14=0,this.a15=1}copy(t){this.a0=t.a0,this.a1=t.a1,this.a2=t.a2,this.a3=t.a3,this.a4=t.a4,this.a5=t.a5,this.a6=t.a6,this.a7=t.a7,this.a8=t.a8,this.a9=t.a9,this.a10=t.a10,this.a11=t.a11,this.a12=t.a12,this.a13=t.a13,this.a14=t.a14,this.a15=t.a15}rotateX(t){const i=Math.sin(t),e=Math.cos(t),s=this.a4,r=this.a5,a=this.a6,n=this.a7,o=this.a8,h=this.a9,c=this.a10,l=this.a11;this.a4=s*e+o*i,this.a5=r*e+h*i,this.a6=a*e+c*i,this.a7=n*e+l*i,this.a8=o*e-s*i,this.a9=h*e-r*i,this.a10=c*e-a*i,this.a11=l*e-n*i}rotateY(t){const i=Math.sin(t),e=Math.cos(t),s=this.a0,r=this.a1,a=this.a2,n=this.a3,o=this.a8,h=this.a9,c=this.a10,l=this.a11;this.a0=s*e-o*i,this.a1=r*e-h*i,this.a2=a*e-c*i,this.a3=n*e-l*i,this.a8=s*i+o*e,this.a9=r*i+h*e,this.a10=a*i+c*e,this.a11=n*i+l*e}rotateZ(t){const i=Math.sin(t),e=Math.cos(t),s=this.a0,r=this.a1,a=this.a2,n=this.a3,o=this.a4,h=this.a5,c=this.a6,l=this.a7;this.a0=s*e+o*i,this.a1=r*e+h*i,this.a2=a*e+c*i,this.a3=n*e+l*i,this.a4=o*e-s*i,this.a5=h*e-r*i,this.a6=c*e-a*i,this.a7=l*e-n*i}scaleFlat(t){this.a0*=t,this.a1*=t,this.a2*=t,this.a3*=t,this.a4*=t,this.a5*=t,this.a6*=t,this.a7*=t}translate(t,i,e){this.a12+=this.a0*t+this.a4*i+this.a8*e,this.a13+=this.a1*t+this.a5*i+this.a9*e,this.a14+=this.a2*t+this.a6*i+this.a10*e,this.a15+=this.a3*t+this.a7*i+this.a11*e}perspective(t,i,e,s){this.identity();const r=1/Math.tan(t/2),a=1/(e-s);this.a0=r/i,this.a5=r,this.a10=(s+e)*a,this.a11=-1,this.a14=2*s*e*a,this.a15=0}perspectiveCss(t){this.identity();const i=1/Math.tan(t/2);this.a0=i,this.a5=i}invert(){const t=this.a0,i=this.a1,e=this.a2,s=this.a3,r=this.a4,a=this.a5,n=this.a6,o=this.a7,h=this.a8,c=this.a9,l=this.a10,d=this.a11,m=this.a12,u=this.a13,p=this.a14,g=this.a15,f=t*a-i*r,v=t*n-e*r,b=t*o-s*r,w=i*n-e*a,y=i*o-s*a,x=e*o-s*n,k=h*u-c*m,E=h*p-l*m,T=h*g-d*m,M=c*p-l*u,C=c*g-d*u,S=l*g-d*p;let A=f*S-v*C+b*M+w*T-y*E+x*k;A&&(A=1/A,this.a0=(a*S-n*C+o*M)*A,this.a1=(e*C-i*S-s*M)*A,this.a2=(u*x-p*y+g*w)*A,this.a3=(l*y-c*x-d*w)*A,this.a4=(n*T-r*S-o*E)*A,this.a5=(t*S-e*T+s*E)*A,this.a6=(p*b-m*x-g*v)*A,this.a7=(h*x-l*b+d*v)*A,this.a8=(r*C-a*T+o*k)*A,this.a9=(i*T-t*C-s*k)*A,this.a10=(m*y-u*b+g*f)*A,this.a11=(c*b-h*y-d*f)*A,this.a12=(a*E-r*M-n*k)*A,this.a13=(t*M-i*E+e*k)*A,this.a14=(u*v-m*w-p*f)*A,this.a15=(h*w-c*v+l*f)*A)}multiply(t){let i=this.a0,e=this.a1,s=this.a2,r=this.a3;this.a0=i*t.a0+e*t.a4+s*t.a8+r*t.a12,this.a1=i*t.a1+e*t.a5+s*t.a9+r*t.a13,this.a2=i*t.a2+e*t.a6+s*t.a10+r*t.a14,this.a3=i*t.a3+e*t.a7+s*t.a11+r*t.a15,i=this.a4,e=this.a5,s=this.a6,r=this.a7,this.a4=i*t.a0+e*t.a4+s*t.a8+r*t.a12,this.a5=i*t.a1+e*t.a5+s*t.a9+r*t.a13,this.a6=i*t.a2+e*t.a6+s*t.a10+r*t.a14,this.a7=i*t.a3+e*t.a7+s*t.a11+r*t.a15,i=this.a8,e=this.a9,s=this.a10,r=this.a11,this.a8=i*t.a0+e*t.a4+s*t.a8+r*t.a12,this.a9=i*t.a1+e*t.a5+s*t.a9+r*t.a13,this.a10=i*t.a2+e*t.a6+s*t.a10+r*t.a14,this.a11=i*t.a3+e*t.a7+s*t.a11+r*t.a15,i=this.a12,e=this.a13,s=this.a14,r=this.a15,this.a12=i*t.a0+e*t.a4+s*t.a8+r*t.a12,this.a13=i*t.a1+e*t.a5+s*t.a9+r*t.a13,this.a14=i*t.a2+e*t.a6+s*t.a10+r*t.a14,this.a15=i*t.a3+e*t.a7+s*t.a11+r*t.a15}scaleXY(t,i,e=1){this.a0*=t,this.a1*=t,this.a2*=t,this.a3*=t,this.a4*=i,this.a5*=i,this.a6*=i,this.a7*=i,this.a8*=e,this.a9*=e,this.a10*=e,this.a11*=e}},Qi=class{constructor(t=0,i=0,e=0,s=1){this.x=t,this.y=i,this.z=e,this.w=s}copy(t){this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w}transformMat4(t){const i=this.x,e=this.y,s=this.z,r=t.a3*i+t.a7*e+t.a11*s+t.a15||1;this.x=(t.a0*i+t.a4*e+t.a8*s+t.a12)/r,this.y=(t.a1*i+t.a5*e+t.a9*s+t.a13)/r,this.z=(t.a2*i+t.a6*e+t.a10*s+t.a14)/r,this.w=r}normalize(){let t=this.x*this.x+this.y*this.y+this.z*this.z;t>0&&(t=1/Math.sqrt(t)),this.x*=t,this.y*=t,this.z*=t}},Ji=class{constructor(t,i,e,s,r,a,n){this.image=t,this.index=i,this.start=e,this.end=s,this.tileSize=r,this.cols=a,this.rows=n,this.tileWidth=r/t.width,this.tileHeight=r/t.height}getTileRect(t,i){const e=t-this.start,s=e%this.cols,r=Math.floor(e/this.cols),a=this.image;return i.x0=a.x0+s*this.tileSize/a.width*a.rWidth,i.y0=a.y0+r*this.tileSize/a.height*a.rHeight,i.x1=a.x0+Math.min((s+1)*this.tileSize/a.width,1)*a.rWidth,i.y1=a.y0+Math.min((r+1)*this.tileSize/a.height,1)*a.rHeight,i.image=a,i.layer=this.index,i.x=s,i.y=r,i}},te=class t{static{this.toDraw=[]}static{this.toDrawSeen=new Uint8Array(0)}static{this.toDrawSeenBase=0}static{this.sampledXs=new Float64Array(200)}static{this.sampledYs=new Float64Array(200)}static{this.uniqueXs=new Float64Array(200)}static{this.sampledLength=0}static{this.uniqueLength=0}constructor(t,i,e,s,r,a,n,o,h,c,l,d,m,u,p,g,f){this.canvas=t,this.index=i,this.localIdx=e,this.width=s,this.height=r,this.tileSize=a,this.isSingle=n,this.isDeepZoom=o,this.isVideo=h,this.startOffset=c,this.opacity=l,this.tOpacity=d,this.rotX=m,this.rotY=u,this.rotZ=p,this.scale=g,this.fromScale=f,this.vec=new Qi,this.mat=new Ki,this.rScale=0,this.layers=[],this.numLayers=0,this.targetLayer=0,this.x0=0,this.y0=0,this.x1=1,this.y1=1,this.rWidth=1,this.rHeight=1,this.areaCenterX=.5,this.areaCenterY=.5,this.areaWidth=1,this.areaHeight=1,this.sphere3DX=0,this.sphere3DY=0,this.sphere3DZ=-1,this.angularWidth=0,this.angularHeight=0,this.gotBase=0,this.aspect=0,this.doneTotal=0,this.doRender=!1,this.is360Embed=!1,this.isVideoPlaying=!1;const v=s>r?s:r;this.is360Embed=this.canvas.is360&&this.localIdx>0,this.numLayers=o&&!n?2:1;for(let w=a;w<v*t.main.underzoomLevels;w*=2)this.numLayers++;(t.main.hasArchive||this.fromScale>0)&&(this.numLayers-=3-t.main.archiveLayerOffset),this.fromScale>0&&this.numLayers--,this.numLayers=Math.max(1,this.numLayers);let b=c;for(let w=0;w<this.numLayers;w++){const t=Di(w)*this.tileSize,i=Math.ceil(s/t),e=Math.ceil(r/t);this.layers.push(new Ji(this,this.layers.length,b,this.endOffset=b+=i*e,t,i,e))}}setArea(t,i,e,s){this.x0=t,this.y0=i,this.x1=e,this.y1=s,this.areaWidth=e+(e<t?1:0)-t,this.areaHeight=s-i,this.areaCenterX=t+this.areaWidth/2,this.areaCenterY=i+this.areaHeight/2,this.canvas.is360&&(this.areaCenterX=Ri(this.areaCenterX)),this.rWidth=this.areaWidth,this.rHeight=this.areaHeight,this.aspect=this.width/this.height,this.rScale=this.aspect>this.canvas.aspect?this.canvas.width/this.width*this.rWidth:this.canvas.height/this.height*this.rHeight,this.canvas.is360&&this.calculate3DSpherePosition()}calculate3DSpherePosition(){let t=2*(this.areaCenterX-.5)*Ii;const i=(this.areaCenterY-.5)*Ii;t+=this.canvas.webgl.baseYaw,this.sphere3DX=Math.cos(i)*Math.sin(t),this.sphere3DY=Math.sin(i),this.sphere3DZ=Math.cos(i)*Math.cos(t),this.angularWidth=2*this.areaWidth*Ii,this.angularHeight=this.areaHeight*Ii}sphere3DOverlap(){if(!this.canvas.is360)return!1;const t=this.sphere3DX*this.canvas.webgl.cameraForwardX+this.sphere3DY*this.canvas.webgl.cameraForwardY+this.sphere3DZ*this.canvas.webgl.cameraForwardZ,i=Math.acos(Math.max(-1,Math.min(1,t))),e=Math.max(this.angularWidth,this.angularHeight)/2;return i<this.canvas.webgl.fieldOfView+e}outsideView(){if(this.is360Embed)return!this.sphere3DOverlap();{const t=this.canvas.view;return this.x1<=t.x0||this.x0>=t.x1||this.y1<=t.y0||this.y0>=t.y1}}shouldRender(){return!(this.fromScale>0&&this.fromScale>this.canvas.camera.scale)&&((!(this.isVideo||this.localIdx>0)||0!==this.opacity||0!==this.tOpacity)&&(!!(this.index===this.canvas.activeImageIdx||this.canvas.is360&&0===this.localIdx)||!this.outsideView()))}opacityTick(t){const i=this.tOpacity;if(this.opacity===i)return!1;const e=1/(this.canvas.main.frameTime*this.canvas.main.embedFadeDuration);return this.opacity=Math.min(1,Math.max(0,t?i:i>this.opacity?Math.min(i,this.opacity+e):Math.max(i,this.opacity-e))),this.opacity!==i}getTiles(i){if(this.opacity<=0)return 0;if(this.doneTotal=0,this.is360Embed){if(i=this.getEmbeddedScale(i),!(this.doRender=i>0))return 0}else{const t=this.canvas.camera;i=Math.max(i,t.minScale)*this.rScale}const e=this.endOffset-this.startOffset;if(t.toDrawSeen.length<e)t.toDrawSeen=new Uint8Array(e);else for(let n=0;n<e;n++)t.toDrawSeen[n]=0;t.toDrawSeenBase=this.startOffset,0===this.gotBase?(t.toDraw.push(this.endOffset-1),t.toDrawSeen[this.endOffset-1-this.startOffset]=1,this.canvas.main.setTileOpacity(this.endOffset-1,!0,1)):this.is360Embed&&(t.toDraw.push(this.endOffset-1),t.toDrawSeen[this.endOffset-1-this.startOffset]=1,this.doneTotal++);const s=this.getTargetLayer(i),r=this.canvas,a=r.view;0===this.localIdx&&r.is360?this.get360Tiles(this.layers[s]):(this.is360Embed?this.getTilesViewport(s):r.is360?this.getTilesRect(s,a.x0,a.y0,a.x1,a.y1):r.visible.x0<r.visible.x1&&r.visible.y0<r.visible.y1&&this.getTilesRect(s,Math.max(r.visible.x0,a.x0),Math.max(r.visible.y0,a.y0),Math.min(r.visible.x1,a.x1),Math.min(r.visible.y1,a.y1)),this.is360Embed&&this.doneTotal++),t.toDraw.sort((t,i)=>t>i?-1:t<i?1:0);for(let n=0;n<t.toDraw.length;n++)r.toDraw.push(t.toDraw[n]);return t.toDraw.length=0,this.doneTotal}getTargetLayer(t){let i=this.isSingle||this.canvas.limited?this.numLayers:1+this.canvas.main.skipBaseLevels;if(!this.isSingle&&!this.canvas.limited)for(;i<this.numLayers&&!(Di(i)*t>=1);i++);return this.targetLayer=i-1}getTilesRect(t,i,e,s,r){if(this.outsideView())return;const a=this.layers[t],n=a.tileWidth,o=a.tileHeight,h=this.rWidth,c=this.rHeight,l=Math.min(a.cols-1,Math.floor(Math.max(0,s-this.x0)/h/n)),d=Math.floor(Math.max(0,r-this.y0)/c/o),m=Math.floor(Math.max(0,i-this.x0)/h/n);let u=Math.floor(Math.max(0,e-this.y0)/c/o);for(;u<=d;u++)if(!(u>=a.rows))for(let t=m;t<=l;t++)this.setToDraw(a,t,u)}getTilesViewport(t){if(this.outsideView())return;const i=this.layers[t],e=this.canvas,s=Ri(e.view.centerX+e.webgl.offX),r=e.view.centerY,a=e.view.width+.1,n=e.view.height+.1,o=this.areaCenterX,h=this.areaCenterY,c=this.areaWidth,l=this.areaHeight,d=r-n/2,m=r+n/2,u=h-l/2,p=h+l/2,g=Math.max(d,u),f=Math.min(m,p);if(g>=f)return;let v=0,b=0,w=!1;if(e.is360){const t=Ri(s-a/2),i=Ri(s+a/2),e=Ri(o-c/2),r=Ri(o+c/2);i>t&&r>e?(v=Math.max(t,e),b=Math.min(i,r),w=v<b):i<t&&r>e?(e<=i||r>=t)&&(v=e,b=r,w=!0):i>t&&r<e?(t<=r||i>=e)&&(v=t,b=i,w=!0):i<t&&r<e&&(v=Math.max(t,e),b=Math.min(i,r),w=!0)}else{const t=s-a/2,i=s+a/2,e=o-c/2,r=o+c/2;v=Math.max(t,e),b=Math.min(i,r),w=v<b}if(!w)return;let y=o-c/2,x=o+c/2;e.is360&&(x>1?(v<y&&(v+=1),b<y&&(b+=1)):v>o+.5?v-=1:b>o+.5&&(b-=1));const k=(v-y)/c,E=(b-y)/c,T=(g-(h-l/2))/l,M=(f-(h-l/2))/l,C=i.tileWidth,S=i.tileHeight,A=Math.floor(Math.max(0,Math.min(1,k))/C),L=Math.min(i.cols-1,Math.floor(Math.max(0,Math.min(1,E))/C)),P=Math.floor(Math.max(0,Math.min(1,T))/S),I=Math.min(i.rows-1,Math.floor(Math.max(0,Math.min(1,M))/S));for(let _=P;_<=I;_++)for(let t=A;t<=L;t++)this.setToDraw(i,t,_)}setToDraw(i,e,s){const r=Math.min(this.endOffset-1,i.start+s*i.cols+e),a=r-t.toDrawSeenBase;if(!(a<t.toDrawSeen.length&&t.toDrawSeen[a]))if(a<t.toDrawSeen.length&&(t.toDrawSeen[a]=1),t.toDraw.push(r),this.canvas.main.setTileOpacity(r,r===this.endOffset-1,this.canvas.opacity)>=1)this.doneTotal++;else if(!this.isSingle&&!this.canvas.limited&&i.index<this.numLayers-1){const t=this.layers[i.index+1],r=e>>1,a=s>>1;this.setToDraw(t,r,a)}}setDrawRect(t){const i=this.canvas.main.vertexBuffer,e=this.canvas.webgl.radius,s=2*Ii*e,r=this.vec,a=this.mat,n=this.x0+this.rWidth/2,o=this.y0+this.rHeight/2,h=this.canvas.webgl.getVec3(n-this.canvas.webgl.offX,o,!0,5);a.identity(),a.translate(h.x,h.y,h.z),a.rotateY(Math.atan2(h.x,h.z)+Ii+this.rotY),a.rotateX(-Math.sin((o-.5)*Ii)-this.rotX),a.rotateZ(-this.rotZ),a.scaleFlat(.5*this.scale);let c=(t.x0-n)*s,l=.5*-(t.y0-o)*s;r.x=0,r.y=0,r.z=0,a.translate(c,l,0),r.transformMat4(a),a.translate(-c,-l,0),i[0]=r.x,i[1]=r.y,i[2]=r.z,r.x=0,r.y=0,r.z=0,a.translate(c=(t.x0-n)*s,l=.5*-(t.y1-o)*s,0),r.transformMat4(a),a.translate(-c,-l,0),i[3]=i[9]=r.x,i[4]=i[10]=r.y,i[5]=i[11]=r.z,r.x=0,r.y=0,r.z=0,a.translate(c=(t.x1-n)*s,l=.5*-(t.y0-o)*s,0),r.transformMat4(a),a.translate(-c,-l,0),i[6]=i[15]=r.x,i[7]=i[16]=r.y,i[8]=i[17]=r.z,r.x=0,r.y=0,r.z=0,a.translate(c=(t.x1-n)*s,l=.5*-(t.y1-o)*s,0),r.transformMat4(a),a.translate(-c,-l,0),i[12]=r.x,i[13]=r.y,i[14]=r.z}getEmbeddedScale(t){if(this.is360Embed){return t*Math.max(2*this.areaWidth,this.areaHeight)*(this.canvas.width/this.width)}const i=this.areaWidth,e=this.areaHeight,s=this.areaCenterX-i/2,r=this.areaCenterX+i/2,a=this.areaCenterY,n=e/2.5,o=this.canvas.el,h=this.canvas.webgl,c=this.canvas.el.width;let l=h.getXYZ(s,a-n),d=l.w>0||l.x<0?0:Math.min(c,l.x),m=0;l.inView(o)&&m++,h.getXYZ(r,a-n).inView(o)&&m++;const u=(l.w>0||l.x>c?c:Math.max(0,l.x))-d;if(h.getXYZ(s,a+n).inView(o)&&m++,d=l.w>0||l.x<0?0:Math.min(c,l.x),h.getXYZ(r,a+n).inView(o)&&m++,0===m)return 0;const p=(l.w>0||l.x>c?c:Math.max(0,l.x))-d;return Math.min(1,Math.max(p,u)/this.width)}get360Tiles(i){const e=this.canvas,s=e.el,r=s.width,a=s.height;t.sampledLength=0,t.uniqueLength=0;const n=e.webgl.fieldOfView>Ii/2?20:12;for(let v=0;v<=n;v++){const i=v/n;let s=e.webgl.getCoo(i*r,0);t.sampledXs[t.sampledLength]=s.x,t.sampledYs[t.sampledLength]=s.y,t.sampledLength++,s=e.webgl.getCoo((1-i)*r,a),t.sampledXs[t.sampledLength]=s.x,t.sampledYs[t.sampledLength]=s.y,t.sampledLength++,s=e.webgl.getCoo(r,i*a),t.sampledXs[t.sampledLength]=s.x,t.sampledYs[t.sampledLength]=s.y,t.sampledLength++,s=e.webgl.getCoo(0,(1-i)*a),t.sampledXs[t.sampledLength]=s.x,t.sampledYs[t.sampledLength]=s.y,t.sampledLength++}let o;for(let v=1;v<=3;v++){const i=a*v/4;for(let s=1;s<=3;s++)o=e.webgl.getCoo(r*s/4,i),t.sampledXs[t.sampledLength]=o.x,t.sampledYs[t.sampledLength]=o.y,t.sampledLength++;o=e.webgl.getCoo(r*v/4,a-1),t.sampledXs[t.sampledLength]=o.x,t.sampledYs[t.sampledLength]=o.y,t.sampledLength++}let h=1/0,c=-1/0;for(let v=0;v<t.sampledLength;v++){const i=t.sampledYs[v];i<h&&(h=i),i>c&&(c=i)}h=Math.max(0,h),c=Math.min(1,c),h-=.001,c+=.05,h=Math.max(0,h),c=Math.min(1,c);const l=e.webgl.offX;for(let v=0;v<t.sampledLength;v++)t.sampledXs[v]=Ri(t.sampledXs[v]-l);t.uniqueLength=0;for(let v=0;v<t.sampledLength;v++){const i=t.sampledXs[v];let e=!1;for(let s=0;s<t.uniqueLength;s++)if(Math.abs(t.uniqueXs[s]-i)<1e-8){e=!0;break}e||(t.uniqueXs[t.uniqueLength]=i,t.uniqueLength++)}for(let v=1;v<t.uniqueLength;v++){const i=t.uniqueXs[v];let e=v-1;for(;e>=0&&t.uniqueXs[e]>i;)t.uniqueXs[e+1]=t.uniqueXs[e],e--;t.uniqueXs[e+1]=i}const d=t.uniqueLength;if(d<2)h=0,c=1,t.uniqueLength=0,t.uniqueXs[0]=0,t.uniqueXs[1]=1,t.uniqueLength=2;else{let i=0,e=-1;for(let h=0;h<d-1;h++){const s=t.uniqueXs[h+1]-t.uniqueXs[h];s>i&&(i=s,e=h)}const s=t.uniqueXs[0]+1-t.uniqueXs[d-1];let r=s>i;r&&(i=s,e=d-1);const a=1-i;let n=0,o=0;r?(n=t.uniqueXs[0],o=t.uniqueXs[d-1]):(n=t.uniqueXs[(e+1)%d],o=t.uniqueXs[e]+1),a>=.999999&&(n=0,o=1),t.uniqueLength=0,t.uniqueXs[0]=n,t.uniqueXs[1]=o,t.uniqueLength=2}let m=t.uniqueXs[1]-t.uniqueXs[0]>=.999999;(h<.05||c>.95)&&(m=!0);let u=Math.max(0,Math.max(0,Math.floor((h-.001)/i.tileHeight))),p=Math.min(i.rows-1,Math.max(0,Math.floor((c+i.tileHeight-1e-10)/i.tileHeight)));h<1e-5&&(u=0),c>.99999&&(p=i.rows-1);const g=i.tileWidth,f=t.uniqueXs[1]>1;for(let v=u;v<=p;v++)if(m)for(let t=0;t<i.cols;t++)this.setToDraw(i,t,v);else if(f){for(let s=Math.max(0,Math.max(0,Math.floor((t.uniqueXs[0]-.001)/g)-1));s<i.cols;s++)this.setToDraw(i,s,v);const e=Math.min(i.cols-1,Math.ceil(Ri(t.uniqueXs[1]+.001)/g));for(let t=0;t<=e;t++)this.setToDraw(i,t,v)}else{const e=Math.max(0,Math.max(0,Math.floor((t.uniqueXs[0]-.001)/g)-1)),s=Math.min(i.cols-1,Math.ceil((t.uniqueXs[1]+.001)/g));for(let t=e;t<=s;t++)this.setToDraw(i,t,v)}}},ie=class{constructor(t){this.canvas=t,this.pMatrix=new Ki,this.iMatrix=new Ki,this.cachedInverse=new Ki,this.inverseDirty=!0,this.rMatrix=new Ki,this.position=new Qi,this.radius=10,this.scale=0,this.scaleY=1,this.offY=0,this.dofY=1,this.limitX=0,this.limitY=0,this.baseYaw=0,this.yaw=0,this.pitch=0,this.defaultPerspective=_i,this.perspective=_i,this.maxPerspective=_i,this.minPerspective=_i,this.cameraForwardX=0,this.cameraForwardY=0,this.cameraForwardZ=-1,this.cameraUpX=0,this.cameraUpY=1,this.cameraUpZ=0,this.cameraRightX=1,this.cameraRightY=0,this.cameraRightZ=0,this.fieldOfView=0,this.aspectRatio=1,this.vec4=new Qi,this.coo=new Ui,this.offX=0,this.baseYaw=-this.canvas.rotationY,this.offX=this.baseYaw/zi,this.canvas.is360&&(this.scaleY=this.canvas.height/(this.canvas.width/2),this.offY=(1-this.scaleY)/4),this.yaw=this.baseYaw,this.update()}setLimits(t,i){this.limitX=t,this.limitY=i,this.maxPerspective=_i,i>0&&(this.maxPerspective=Math.min(this.maxPerspective,this.maxPerspective*i*1.5)),this.setPerspective(this.perspective,!0)}update(t=!1){const i=this.canvas,e=i.el;if(t||this.pMatrix.perspective(this.perspective,e.aspect,1e-4,i.is360?20:100),this.inverseDirty=!0,i.is360){const t=this.pMatrix;this.pitch=Math.min(Ii/2,Math.max(-Ii/2,this.pitch)),t.rotateX(this.pitch),t.rotateY(this.yaw),t.translate(this.position.x,this.position.y,this.position.z);const i=this.rMatrix;i.perspectiveCss(this.perspective),i.translate(0,0,e.height/e.ratio/2),i.rotateX(-this.pitch),i.rotateY(this.yaw),this.coo.direction=this.yaw/Ii*180%360}else{const t=i.view;this.pMatrix.translate(-(t.centerX-.5)*i.aspect,t.centerY-.5,-t.height/2)}this.pMatrix.toArray()}rotate(t,i,e,s){const r=this.canvas,a=r.el;this.yaw+=t*a.ratio/a.width*this.perspective*a.aspect,this.pitch+=i*a.ratio/a.height*this.perspective*this.scaleY,this.yaw=Oi(this.yaw),(r.coverLimit||this.limitY>0)&&this.limitPitch(),this.limitX>0&&this.limitYaw(),0===e&&r.kinetic.addStep(2*t,2*i,s),this.update(),this.calculate3DFrustum(),this.syncLogicalView()}limitPitch(){const t=this.perspective/2,i=Ii*this.scaleY/2*(this.limitY>0?this.limitY:1);this.pitch=this.pitch>0?Math.min(i,this.pitch+t)-t:Math.max(-i,this.pitch-t)+t}limitYaw(){const t=this.perspective/2*this.canvas.el.aspect,i=Ii*(this.limitX>0?this.limitX:1);let e=this.yaw;for(;e>=Ii;)e-=2*Ii;for(;e<-Ii;)e+=2*Ii;this.yaw=Oi(Math.min(Math.max(i,t)-t,Math.max(Math.min(-i,-t)+t,e)))}zoom(t,i,e,s,r,a=0,n=0){const o=this.canvas;if(t/=2,0!==i)i=o.ani.zoom(t,i,e,s,r);else{t/=this.scale*Math.sqrt(o.width*o.width+o.height*o.height)/20;const i=a>0&&n>0;let e=0,r=0;if(i){const t=this.getCoo(a,n);e=t.x,r=t.y}if(this.setPerspective(this.perspective+t,s),i){const t=this.getCoo(a,n);let i=e-t.x;i>.5&&(i-=1),i<-.5&&(i+=1);const s=r-t.y;this.yaw+=i*Ii*2,this.pitch+=s*Ii*this.scaleY,this.yaw=Oi(this.yaw),(o.coverLimit||this.limitY>0)&&this.limitPitch(),this.limitX>0&&this.limitYaw(),this.update(),this.readScale(),this.calculate3DFrustum(),this.syncLogicalView()}}return i}setPerspective(t,i){const e=this.canvas;this.perspective=t,i&&!e.is360||(this.perspective=Math.min(this.maxPerspective,Math.max(this.minPerspective,this.perspective))),(e.coverLimit||this.limitY>0)&&this.limitPitch(),this.limitX>0&&this.limitYaw(),this.pMatrix.perspective(this.perspective,e.el.aspect,1e-4,e.is360?20:100),this.readScale(),this.update(!0),this.calculate3DFrustum(),this.syncLogicalView()}readScale(){const t=this.canvas.el,i=t.width/2,e=t.height/2,s=this.getCoo(i,e).x,r=this.getCoo(i+1,e+1).x;this.scale=1/(r+(r<s?1:0)-s)/this.canvas.width}setDirection(t,i,e){this.yaw=Oi(t-this.baseYaw),this.pitch=i,0!==e?this.setPerspective(e,!1):this.update(),this.calculate3DFrustum(),this.syncLogicalView()}setView(t,i,e,s,r=!1,a=!1){this.yaw=((a?t+this.offX:t)-.5)*Ii*2,this.pitch=(i-.5)*Ii*this.scaleY,this.setPerspective(Math.min(this.maxPerspective,s*Ii*this.scaleY),r),this.calculate3DFrustum(),this.syncLogicalView()}syncLogicalView(){const t=this.canvas;if(!t.is360)return;const i=Ri(this.yaw/(2*Ii)+.5),e=this.pitch/this.scaleY/Ii+.5,s=this.perspective/Ii/this.scaleY,r=s*(0===t.el.width?1:.5*Math.sqrt(t.el.aspect))/(t.aspect/2);t.view.set(i,e,r,s),t.view.changed=!0}calculate3DFrustum(){if(!this.canvas.is360)return;const t=this.yaw,i=this.pitch;this.cameraForwardX=Math.cos(i)*Math.sin(t),this.cameraForwardY=Math.sin(i),this.cameraForwardZ=Math.cos(i)*Math.cos(t),this.cameraUpX=-Math.sin(i)*Math.sin(t),this.cameraUpY=Math.cos(i),this.cameraUpZ=-Math.sin(i)*Math.cos(t),this.cameraRightX=Math.cos(t),this.cameraRightY=0,this.cameraRightZ=-Math.sin(t);const e=2*Math.atan(1/this.perspective);this.aspectRatio=this.canvas.el.width/this.canvas.el.height;const s=e/2;this.fieldOfView=2*Math.atan(Math.tan(s)*this.aspectRatio)}moveTo(t,i,e,s){const r=e*Ii*2+s;this.position.x=-t*Math.sin(r),this.position.y=i,this.position.z=t*Math.cos(r),this.canvas.view.changed=!0,this.update()}resize(){const t=this.canvas,i=t.el;t.camera.setCanvas(),this.minPerspective=Math.min(.5,i.height/t.height)/t.maxScale*this.scaleY*Ii/i.ratio*i.scale,this.setPerspective(this.perspective,!0)}ensureInverse(){this.inverseDirty&&(this.cachedInverse.copy(this.pMatrix),this.cachedInverse.invert(),this.inverseDirty=!1)}getCoo(t,i){const e=this.canvas.el;return this.vec4.x=t*e.ratio/e.width*2-1,this.vec4.y=-(i*e.ratio/e.height*2-1),this.vec4.z=1,this.vec4.w=1,this.ensureInverse(),this.vec4.transformMat4(this.cachedInverse),this.vec4.normalize(),this.coo.x=Math.atan2(this.vec4.x,-this.vec4.z)/Ii/2+.5,this.coo.y=.5-Math.asin(this.vec4.y)/Ii/this.scaleY,this.coo.scale=this.scale,this.coo.w=this.position.x+this.position.z,this.coo.direction=this.yaw+this.baseYaw,this.coo.toArray(),this.coo}getXYZ(t,i){const e=this.canvas.el;return this.getVec3(t+this.offX,i),this.coo.x=(this.vec4.x+1)/2*e.width/e.ratio,this.coo.y=(1-this.vec4.y)/2*e.height/e.ratio,this.coo.scale=this.scale,this.coo.w=-this.vec4.w,this.coo.toArray(),this.coo}getVec3(t,i,e=!1,s=this.radius){t*=2*-Ii,i-=.5,i*=-Ii,i*=this.scaleY;const r=Math.cos(i);return this.vec4.x=r*Math.sin(t)*s,this.vec4.y=Math.sin(i)*s,this.vec4.z=r*Math.cos(t)*s,this.vec4.w=1,e||this.vec4.transformMat4(this.pMatrix),this.vec4}getMatrix(t,i,e,s,r,a,n,o,h=1,c=1,l=!1){isNaN(s)&&(s=this.radius),this.iMatrix.identity(),s*=this.radius*(100/zi),t*=2*-Ii,i-=.5,i*=Ii*this.scaleY;const d=Math.cos(i);return this.vec4.x=d*Math.sin(t),this.vec4.y=Math.sin(i),this.vec4.z=d*Math.cos(t),this.iMatrix.translate(this.position.x*s/this.radius,-this.position.y*s/this.radius+o*this.radius,this.position.z*s/this.radius),this.iMatrix.translate(this.vec4.x*s,this.vec4.y*s,this.vec4.z*s),this.iMatrix.rotateY(Math.atan2(this.vec4.x,this.vec4.z)+Ii+a),this.iMatrix.rotateX(this.vec4.y+r),this.iMatrix.rotateZ(n),this.iMatrix.scaleXY(h,c),this.iMatrix.scaleFlat(e/Ii/this.radius),this.iMatrix.multiply(this.rMatrix),this.iMatrix}setTile360(t,i,e,s){i*=this.scaleY,i/=2,i-=.25,i+=this.offY,s*=this.scaleY,s/=2;const r=this.canvas.main.vertexBuffer360,a=this.radius,n=e/16,o=s/16,h=2*Ii;for(let c=0;c<16;c++)for(let e=0;e<16;e++){const s=6*(16*c+e)*3,l=-Ri(t+n*e+this.offX)*h,d=-(i+o*c)*h,m=-Ri(t+n*(e+1)+this.offX)*h,u=-(i+o*(c+1))*h;let p=Math.cos(l)*a;isNaN(p)&&(p=0);let g=Math.sin(l)*a;isNaN(g)&&(g=0);let f=Math.cos(m)*a;isNaN(f)&&(f=0);let v=Math.sin(m)*a;isNaN(v)&&(v=0);const b=Math.cos(d),w=Math.cos(u),y=Math.sin(d)*a,x=Math.sin(u)*a;r[s+0]=b*g,r[s+1]=y,r[s+2]=b*p,r[s+3]=r[s+9]=w*g,r[s+4]=r[s+10]=x,r[s+5]=r[s+11]=w*p,r[s+6]=r[s+15]=b*v,r[s+7]=r[s+16]=y,r[s+8]=r[s+17]=b*f,r[s+12]=w*v,r[s+13]=x,r[s+14]=w*f}}},ee=class t{get zIndex(){return this._zIndex}set zIndex(t){this._zIndex!==t&&(this._zIndex=t,this.parent&&(this.parent.childrenDirty=!0))}constructor(t,i,e,s,r,a,n=!1){this.main=t,this.width=i,this.height=e,this.targetOpacity=s,this.coverLimit=r,this.hasParent=n,this.rect=new Ni,this.el=new Wi,this.images=[],this.children=[],this.areaAniPerc=1,this.areaAniPaused=!1,this._zIndex=0,this.childrenDirty=!1,this.toDraw=[],this.index=0,this.isVisible=!1,this.opacity=0,this.bOpacity=0,this.isReady=!1,this.activeImageIdx=-1,this.omniFieldOfView=0,this.omniVerticalAngle=0,this.omniDistance=0,this.omniOffsetX=0,this.limited=!1,this.layer=0,this.tileSize=a.tileSize,this.is360=a.is360,this.noImage=a.noImage,this.isSingle=a.isSingle,this.freeMove=a.freeMove,this.coverStart=!!r||a.coverStart,this.maxScale=a.maxScale,this.scaleMultiplier=a.scaleMultiplier,this.camSpeed=a.camSpeed,this.rotationY=a.rotationY,this.isGallerySwitch=a.isGallerySwitch,this.pagesHaveBackground=a.pagesHaveBackground,this.isOmni=a.isOmni,this.pinchZoomOutLimit=a.pinchZoomOutLimit,this.omniNumLayers=a.omniNumLayers,this.omniStartLayer=a.omniStartLayer,this.index=t.canvases.length,n||t.canvases.push(this),this.aspect=i/e,this.view=new Hi(this),this.focus=new Hi(this),this.ani=new qi(this),this.kinetic=new ji(this),this.camera=new Zi(this),this.webgl=new ie(this),this.area=new Hi(this),this.currentArea=new Hi(this),this.targetArea=new Hi(this),this.visible=new Hi(this),this.full=new Hi(this),a.is360&&this.view.set(.5,.5,1,.5),n||(this.el.copy(t.el),this.setView(this.view.centerX,this.view.centerY,this.view.width,this.view.height,!1,!1),this.resize()),a.noImage?(this.main.numImages++,this.bOpacity=1,this.opacity=1,this.isReady=!0,a.omniStartLayer>0&&this.setActiveLayer(a.omniStartLayer)):this.addImage(0,0,1,1,i,e,a.tileSize,a.isSingle,a.isDeepZoom,!1,s,0,0,0,1,0)}setParent(t){this.parent=t,this.index+=t.children.length}addImage(t,i,e,s,r,a,n,o,h,c,l,d,m,u,p,g){const f=new te(this,this.main.numImages++,this.images.length,r,a,n,o,h,c,this.main.numTiles,l,l,d,m,u,p,g);return f.setArea(t,i,e,s),this.images.push(f),this.main.numTiles=f.endOffset,1===this.images.length&&this.setActiveImage(0,0),f}addChild(i,e,s,r,a,n,o={}){const h=o.coverLimit??!0,c=o.coverStart??!0,l=new t(this.main,a,n,1,h,{tileSize:this.tileSize,is360:!1,noImage:!1,isSingle:!1,isDeepZoom:!1,freeMove:!1,coverStart:c,maxScale:1,scaleMultiplier:1,camSpeed:this.camSpeed,rotationY:0,isGallerySwitch:!1,pagesHaveBackground:!1,isOmni:!1,pinchZoomOutLimit:this.pinchZoomOutLimit,omniNumLayers:1,omniStartLayer:0},!0);return l.setParent(this),l.setArea(i,e,s,r,!0,!0),this.children.push(l),l}stepOpacity(){const t=1/(0!==this.main.distanceX||0!==this.main.distanceY?this.main.spacesTransitionDuration:1===this.main.canvases.length?.25:this.main.crossfadeDuration)/this.main.frameTime,i=this.targetOpacity>0&&this.targetOpacity>=this.opacity;if(this.opacity=i?Math.min(1,this.opacity+t):Math.max(0,this.opacity-t),this.bOpacity=$i.get(this.opacity),0!==this.main.distanceX||0!==this.main.distanceY){const t=0===this.opacity?0:$i.get(1-this.opacity)*(i?1:-1);this.webgl.moveTo(this.main.distanceX*t*8,this.main.distanceY*t*8,this.main.direction,0)}}setCanvasVisible(t){this.main.setCanvasVisible(this,t),this.isVisible=t}fadeOut(){this.targetOpacity=0,this.zIndex=0}fadeIn(){if(this.isReady=!0,!this.hasParent&&1===this.currentArea.width&&1===this.currentArea.height)for(let t=0;t<this.main.canvases.length;t++)this.main.canvases[t]!==this&&this.main.canvases[t].fadeOut();this.targetOpacity=1}areaAnimating(){return!this.areaAniPaused&&this.areaAniPerc<1}isHidden(){return 0===this.targetOpacity&&0===this.opacity||0===this.currentArea.width||0===this.currentArea.height}shouldDraw(){if(!this.areaAnimating()&&this.isHidden())return void(this.isVisible&&this.setCanvasVisible(!1));let t=this.ani.step(this.main.now)<1||this.kinetic.step(this.main.now)<1||!this.isReady;if(this.toDraw.length=0,this.partialView(!1)&&(t=!0),!this.is360&&!this.areaAnimating()&&(this.visible.width<=0||this.visible.height<=0))return void(this.isVisible&&this.setCanvasVisible(!1));!this.isVisible&&this.opacity>=1&&this.setCanvasVisible(!0),this.webgl.calculate3DFrustum(),this.isReady&&this.opacity!==this.targetOpacity&&(this.stepOpacity(),t=!0);const i=(this.is360?this.webgl.scale:this.camera.scale)*this.el.scale;for(let e=0;e<this.images.length;e++){const s=this.images[e];s.shouldRender()?(e>0&&!s.doRender&&this.main.setImageVisible(s,s.doRender=!0),s.isVideo&&s.isVideoPlaying&&(t=!0),s.opacityTick(this.isGallerySwitch||this.opacity<1)&&(t=!0),s.opacity>0&&(this.main.doneTotal+=s.getTiles(i))):s.doRender&&this.main.setImageVisible(s,s.doRender=!1)}this.main.toDrawTotal+=this.toDraw.length,this.main.progress=0===this.main.toDrawTotal?1:this.main.doneTotal/this.main.toDrawTotal,this.view.toArray();for(let e=0;e<this.children.length;e++)this.children[e].shouldDraw();t&&(this.main.animating=!0)}draw(){if(0===this.targetOpacity&&0===this.opacity)return;const t=this.ani.isStarted();if(this.main.setViewport(this.el.left,this.main.el.height-this.el.height-this.el.top,this.el.width,this.el.height),this.main.setMatrix(this.webgl.pMatrix.arr),this.pagesHaveBackground)for(let e=0;e<this.images.length;e++){const t=this.images[e];t.x1<=this.view.x0||t.x0>=this.view.x1||t.y1<=this.view.y0||t.y0>=this.view.y1||(this.setTile(t.endOffset-1),this.main.drawQuad(t.tOpacity))}const i=this.rect;for(let e=0;e<this.toDraw.length;e++){const s=this.toDraw[e];this.setTile(s);const r=i.layer===i.image.targetLayer-1||!this.main.bareBone&&i.layer===i.image.targetLayer,a=s===i.image.endOffset-1,n=this.main.getTileOpacity(s);(r||1===n||a)&&this.main.drawTile(i.image.index,s,i.layer,i.x,i.y,n*this.bOpacity*i.image.opacity,t,i.layer===i.image.targetLayer-1)&&a&&(i.image.gotBase=this.main.now,this.isReady||this.fadeIn())}this.childrenDirty&&(this.children.sort((t,i)=>t.zIndex>i.zIndex?1:t.zIndex<i.zIndex?-1:0),this.childrenDirty=!1);for(let e=0;e<this.children.length;e++)this.children[e].draw();this.view.changed&&this.main.viewSet(this),this.view.changed=!1}partialView(t){const i=this.main.el,e=this.hasParent,s=e?this.parent.getScale():1/i.ratio,r=e?this.parent.width:i.width,a=e?this.parent.height:i.height,n=e?this.parent.view:this.full,o=this.view,h=this.currentArea,c=this.area,l=this.targetArea,d=this.areaAnimating();if(d){const t=1/this.main.gridTransitionDuration/this.main.frameTime;this.areaAniPerc=Math.min(1,this.areaAniPerc+t);const i=this.main.gridTransitionTimingFunction.get(this.areaAniPerc),e=c.centerX+(l.centerX-c.centerX)*i,s=c.centerY+(l.centerY-c.centerY)*i,r=c.width+(l.width-c.width)*i,a=c.height+(l.height-c.height)*i;h.set(e,s,r,a),1===this.areaAniPerc&&(1===this.zIndex&&(this.zIndex=0),c.copy(l)),this.view.changed=!0}let m=Math.max(o.x0,o.x0+(n.x0-h.x0)/h.width*o.width),u=Math.min(o.x1,o.x0+(1-(h.x1-Math.min(h.x1,n.x1))/h.width)*o.width);this.is360||(m=Math.max(0,m),u=Math.min(1,u));let p=Math.max(Math.max(0,o.y0),o.y0+(n.y0-h.y0)/h.height*o.height),g=Math.min(Math.min(1,o.y1),o.y0+(1-(h.y1-Math.min(h.y1,n.y1))/h.height)*o.height);p=Math.max(p,0),g=Math.min(g,1);const f=(m+u)/2,v=(p+g)/2,b=u-m,w=g-p;this.visible.set(f,v,b,w);const y=e?1:i.ratio;return this.targetOpacity<this.opacity||!this.el.set(h.width*s*r,h.height*s*a,(h.x0-n.x0)*r*s,(h.y0-n.y0)*a*s,y,e?1:i.scale,!e&&i.isPortrait)||(t||this.sendViewport(),this.view.changed=!0,this.resize(),this.camera.setCanvas(),this.webgl.update()),d}setArea(t,i,e,s,r,a){this.areaAniPaused=!1,r?(this.area.setArea(t,i,e,s),this.currentArea.setArea(t,i,e,s)):(this.area.copy(this.currentArea),this.areaAniPerc=0,0===this.zIndex&&(this.zIndex=1),this.ani.limit=!1),this.targetArea.setArea(t,i,e,s),this.partialView(a),this.sendViewport()}setTile(t){const i=this.rect;if(this.findTileRect(t),this.is360)0===i.image.localIdx?this.webgl.setTile360(i.x0,i.y0,i.x1-i.x0,i.y1-i.y0):i.image.setDrawRect(i);else{const t=this.main.vertexBuffer,e=this.aspect;t[0]=t[3]=t[9]=(i.x0-.5)*e,t[1]=t[7]=t[16]=.5-i.y0,t[4]=t[10]=t[13]=.5-i.y1,t[6]=t[12]=t[15]=(i.x1-.5)*e,t[2]=t[5]=t[8]=t[11]=t[14]=t[17]=0}}sendViewport(){const t=this.main.el;this.main.viewportSet(this,this.el.left/t.ratio,this.el.top/t.ratio,this.el.width/t.ratio,this.el.height/t.ratio)}findTileRect(t){let i=0;for(;t>=this.images[i].endOffset;)i++;const e=this.images[i];let s=0;for(;t>=e.layers[s].end;)s++;e.layers[s].getTileRect(t,this.rect)}resize(){if(this.children.length){const t=this.main.el;this.width=t.width,this.height=t.height}this.hasParent||(this.is360?this.webgl.resize():(this.camera.setCanvas(),this.webgl.update()))}reset(){if(this.kinetic.stop(),this.ani.stop(),this.images.length>0){const t=this.images[0];t.gotBase=0,t.opacity=0}}remove(){this.setCanvasVisible(!1),this.main.remove(this)}replace(){this.main.canvases.push(this)}setActiveLayer(t){this.layer=t,this.setActiveImage(this.activeImageIdx,0),this.view.changed=!0}setActiveImage(t,i){const e=this.layer*(this.images.length/this.omniNumLayers);for(let s=0;s<this.images.length;s++){const r=this.images[s],a=s-e-t;0!==a?r.tOpacity=a>=0&&a<=i?1:0:(r.tOpacity=1,this.activeImageIdx=t,this.view.changed=!0)}this.camera.correctMinMax()}setFocus(t,i,e,s,r){const a=(t+e)/2,n=(i+s)/2,o=e-t,h=s-i;if(!this.focus.equals(a,n,o,h)){this.activeImageIdx=-1;for(let r=0;r<this.images.length;r++){const a=this.images[r];a.x1<=t||a.x0>=e||a.y1<=i||a.y0>=s?a.tOpacity=0:(a.tOpacity=1,this.activeImageIdx=r)}this.focus.set(a,n,o,h),this.camera.correctMinMax(),r||(this.camera.setView(),this.webgl.update())}}getCoo(t,i,e,s){return(this.is360?this.webgl.getCoo(t,i):this.camera.getCoo(t,i,e,s)).toArray()}getXY(t,i,e,s,r){return(this.is360?this.webgl.getXYZ(t,i):isNaN(s)?this.camera.getXY(t,i,e):this.camera.getXYOmni(t,i,s,isNaN(r)?0:r,e)).toArray()}getView(){return this.view.arr}setView(t,i,e,s,r,a,n=!1,o=!1){const h=this.main.el;h.areaHeight>0&&(s+=s/(1-h.areaHeight/h.height),this.ani.limit=!1,h.areaHeight=0),h.areaWidth>0&&(e+=e*(h.areaWidth/h.width),this.ani.limit=!1,h.areaWidth=0),r&&(this.ani.limit=!1),this.view.set(t,i,e,s),o&&!r&&this.view.limit(!1,!1,this.freeMove),a||this.ani.lastView.copy(this.view),this.width>0&&(this.is360?(this.webgl.setView(t,i,e,s,r,n),this.view.set(t,i,e,s)):this.camera.setView()&&this.webgl.update())}getScale(){return this.is360?this.webgl.scale:this.camera.scale}isZoomedIn(){return this.is360?this.webgl.perspective<=this.webgl.minPerspective:this.camera.isZoomedIn()}isZoomedOut(t=!1){return this.is360?this.webgl.perspective>=this.webgl.maxPerspective:this.camera.isZoomedOut(t)}setDirection(t,i,e){isNaN(i)&&(i=this.webgl.pitch),this.webgl.setDirection(t,i,e?this.webgl.defaultPerspective:0)}getMatrix(t,i,e,s,r,a,n,o,h=1,c=1,l=!1){const d=2e4/this.width;return this.webgl.getMatrix(t,i,e*d,s,r,a,n,o,h,c,l).toArray()}aniPause(t){this.areaAniPaused=!0,this.ani.pause(t)}aniResume(t){this.areaAniPaused=!1,this.ani.resume(t)}aniStop(){this.ani.stop();for(let t=0;t<this.children.length;t++)this.children[t].aniStop()}aniDone(){this.main.aniDone(this)}aniAbort(){this.main.aniAbort(this)}},se=class t{static{this._textureBuffer=t.getTextureBuffer(1,1)}getCanvas(t){return this.canvasById.get(t.ptr)?.canvas}setEntry(t,i){this.canvasById.set(t,i),this.canvasToEntry.has(i.canvas)||this.canvasToEntry.set(i.canvas,i)}constructor(t){this.micrio=t,this.ready=!1,this.images=[],this.bareBone=!1,this.baseTiles=[],this.drawnSet=new Set,this.prevDrawnSet=new Set,this.tiles=new Map,this.requests=new Map,this.unsubscribe=[],this.cameras=new Map,this.ptrToImage=new Map,this.engImageToMicrio=new Map,this.micrioToEngImage=new Map,this.preventDirectionSet=!1,this.isGallery=!1,this.now=-1,this.raf=-1,this.drawing=!1,this.activeCanvasEntry=null,this.canvasById=new Map,this.canvasToEntry=new Map,this.nextPtr=1,this.addImage=async(t,i,e=!1,s=1)=>o(t.info).then(r=>{if(!r)return;this.images.push(t);const a=t.opts.area??[0,0,1,1],n=t.$settings._360??{},o=this.canvasById.get(i.ptr);if(!o)return;let h;if(e){const i=o.canvas.addImage(a[0],a[1],a[0]+a[2],a[1]+a[3],r.width,r.height,r.tileSize||1024,r.isSingle??!1,r.isDeepZoom??!1,r.isVideo??!1,s,n.rotX??0,n.rotY??0,n.rotZ??0,n.scale??1,0);this.engImageToMicrio.set(i,t),this.micrioToEngImage.set(t,i);const e=this.nextPtr++;return t.ptr=e,this.setEntry(e,{canvas:o.canvas,micrioImage:t}),this.ptrToImage.set(e,t),t.baseTileIdx=this.engine.numTiles-1,this.getTileEntry(t.baseTileIdx).opacity=1,void this.baseTiles.push(t.baseTileIdx)}{let i={};i=!(!t.$settings.gallery?.archive&&!t.$settings.gallery?.type)?{coverLimit:!1,coverStart:!1}:{coverLimit:!!t.$settings?.limitToCoverScale,coverStart:!(!t.$settings?.limitToCoverScale&&"cover"!=t.$settings?.initType)},h=o.canvas.addChild(a[0],a[1],a[0]+a[2],a[1]+a[3],r.width,r.height,i)}const c=this.nextPtr++;if(t.ptr=c,this.setEntry(c,{canvas:h,micrioImage:t}),this.ptrToImage.set(c,t),!e){this.bindCamera(t),t.$settings.focus&&h.camera.setCoo(t.$settings.focus[0],t.$settings.focus[1],0,0,0,!1,0,performance.now());const i=t.$info.view;i&&"0,0,1,1"!=i.toString()?h.setView(i[0],i[1],i[2],i[3],!1,!1,!1,!1):h.hasParent&&h.setView(h.view.centerX,h.view.centerY,h.view.width,h.view.height,!1,!1),h.sendViewport()}t.baseTileIdx=this.engine.numTiles-1,this.getTileEntry(t.baseTileIdx).opacity=1,this.baseTiles.push(t.baseTileIdx)}),this.addChild=(t,i)=>this.addImage(t,i),this.deleteAfterSeconds=St.iOS?5:i(this.micrio.canvas.isMobile)?30:90,this.render=this.render.bind(this),this.draw=this.draw.bind(this),this.unsubscribe.push(t.current.subscribe(this.setCanvas.bind(this)))}static getTextureBuffer(t,i){const e=new Float32Array(12*t*i),s=1/t,r=1/i;for(let a=0,n=0;n<i;n++)for(let i=0;i<t;i++,a+=12)e[a+3]=e[a+7]=e[a+9]=(e[a+1]=e[a+5]=e[a+11]=n*r)+r,e[a+4]=e[a+8]=e[a+10]=(e[a+0]=e[a+2]=e[a+6]=i*s)+s;return e}load(){if(this.engine)return;const i=new Gi({drawTile:this.drawTile.bind(this),drawQuad:this._hostDrawQuad.bind(this),getTileOpacity:this._hostGetTileOpacity.bind(this),setTileOpacity:this._hostSetTileOpacity.bind(this),setMatrix:this._hostSetMatrix.bind(this),setViewport:this._hostSetViewport.bind(this),aniDone:this._hostAniDone.bind(this),aniAbort:this._hostAniAbort.bind(this),viewSet:this._hostViewSet.bind(this),viewportSet:this._hostViewportSet.bind(this),setCanvasVisible:this._hostSetCanvasVisible.bind(this),setImageVisible:this._hostSetImageVisible.bind(this)});this._vertexBuffer=i.vertexBuffer,this._vertexBuffer360=i.vertexBuffer360,t._textureBuffer360=t.getTextureBuffer(16,16),this.engine=i,this.unsubscribe.push(this.micrio.barebone.subscribe(t=>{this.bareBone=t,this.engine.bareBone=t}))}findCamera(t){const i=this.canvasToEntry.get(t);return i?this.cameras.get(i.micrioImage.ptr):void 0}findEntry(t){if(t instanceof ee)return this.canvasToEntry.get(t)}_hostDrawQuad(t){this.micrio.webgl.drawTile(void 0,t)}_hostGetTileOpacity(t){return this.tiles.get(t)?.opacity||0}_hostSetTileOpacity(t,i=!1,e=1){const s=this.tiles.get(t);return s?(s.opacity<1&&(s.opacity=i?1:s.loadedAt&&s.loadedAt>0?Math.min(1,(this.now-s.loadedAt)/250)*e:0),s.opacity):0}_hostSetMatrix(t){this.micrio.webgl.gl.uniformMatrix4fv(this.micrio.webgl.pmLoc,!1,t)}_hostSetViewport(t,i,e,s){this.micrio.webgl.gl.viewport(Math.floor(t),Math.floor(i),Math.ceil(e),Math.ceil(s))}_hostAniDone(t){const i=this.findCamera(t);if(i){for(i.aniDone&&i.aniDone();i.aniDoneAdd.length;)i.aniDoneAdd.shift()?.();i.aniAbort=i.aniDone=void 0}}_hostAniAbort(t){const i=this.findCamera(t);i&&(i.aniAbort&&i.aniAbort(),i.aniDoneAdd.length=0,i.aniAbort=i.aniDone=void 0)}_hostViewSet(t){this.findCamera(t)?.viewChanged()}_hostViewportSet(t,i,e,s,r){const a=this.findEntry(t);a&&"viewport"in a.micrioImage&&a.micrioImage.viewport.set([i,e,s,r])}_hostSetCanvasVisible(t,i){this.findEntry(t)?.micrioImage?.visible?.set(i)}_hostSetImageVisible(t,i){const e=this.engImageToMicrio.get(t);e&&"visible"in e&&e.visible.set(i)}unbind(){for(this.stop();this.unsubscribe.length;)this.unsubscribe.shift()?.();this.requests.forEach(t=>Pi(t)),this.requests.clear();for(const[t,i]of this.tiles.entries())i.timeoutId&&clearTimeout(i.timeoutId),this.deleteTile(t);this.tiles.clear(),this.engine&&this.engine.reset()}addCanvas(t){const e=t.$info;if(!e)return;if(t.error)return void this.micrio.loading.set(!1);if(!(t.noImage||e.width&&e.height))throw"Invalid Micrio image size";const s=t.$settings;this.isGallery=!!i(this.micrio.gallery)||t.isOmni,s.gallery?.archive&&(this.engine.hasArchive=!0,this.engine.archiveLayerOffset=s.gallery.archiveLayerOffset??0),e.version&&parseFloat(e.version)<=3.1&&(this.engine.underzoomLevels=8),e.is360&&(s.limitToCoverScale=!1);const r=!!s.limitToCoverScale,a=r||"cover"==s.initType;t.noImage&&this.micrio.loading.set(!1);const n=[.5,.5],o=s.focus,h=!!e.spacesId;o&&(isNaN(o[0])||null===o[0]||(n[0]=o[0]),isNaN(o[1])||null===o[1]||(n[1]=o[1]));const c=s._360?.video,l=e.is360&&c&&(c.src||"video"in c&&c.video),d=!!this.isGallery&&"switch"==s.gallery?.type,m=s.omni?.layers?.length??1;s.omni&&(s.omni.layerStartIndex=Math.min(m-1,s.omni?.layerStartIndex??0));const u=new ee(this.engine,e.width,e.height,t.opacity,r,{tileSize:e.tileSize??1024,is360:e.is360??!1,noImage:t.noImage,isSingle:!(!e.isSingle&&!l),isDeepZoom:!!e.isDeepZoom,freeMove:s.freeMove??!1,coverStart:a,maxScale:s.zoomLimit||1,scaleMultiplier:!1!==s.zoomLimitDPRFix?this.micrio.canvas.getRatio(t.$settings):1,camSpeed:s.camspeed??1,rotationY:t.camera.rotationY,isGallerySwitch:d,pagesHaveBackground:!!s.gallery?.isSpreads&&"swipe"==s.gallery.type,isOmni:t.isOmni,pinchZoomOutLimit:s.pinchZoomOutLimit??!1,omniNumLayers:m,omniStartLayer:s.omni?.layerStartIndex??0},!1),p=this.nextPtr++;t.ptr=p,this.setEntry(p,{canvas:u,micrioImage:t}),this.images.push(t),this.ptrToImage.set(t.ptr,t),this.cameras.set(t.ptr,t.camera),this.bindCamera(t),t.opts.area&&t.camera.setArea(t.opts.area,{direct:!0,noDispatch:!0,noRender:!0}),s?.restrict&&t.camera.setLimit(s.restrict),s?.crossfadeDuration&&this.setCrossfadeDuration(s.crossfadeDuration),s?.embedFadeDuration&&(this.engine.embedFadeDuration=s.embedFadeDuration),void 0!==s?.dragElasticity&&(this.engine.dragElasticity=s.dragElasticity),s?.skipBaseLevels&&(this.engine.skipBaseLevels=s.skipBaseLevels),s?.omni&&t.camera.setOmniSettings(),this.micrio.hasAttribute("data-limited")&&this.setLimited(t.ptr,!0),u.sendViewport();const g=this.engine.numTiles;if(g>0){const t=g-1;this.getTileEntry(t).opacity=1,this.baseTiles.push(t)}const f=i(t.state.view)||s.view;!f||0==f[0]&&0==f[1]&&1==f[2]&&1==f[3]?!h&&e.is360||!n||"0.5,0.5"==n.toString()||(u.camera.setCoo(n[0],n[1],0,0,0,!1,0,performance.now()),s.focus=void 0):u.setView(f[0]+f[2]/2,f[1]+f[3]/2,f[2],f[3],!1,!1,!1,!1),t.video.subscribe(t=>t&&t.addEventListener("play",this.render)),t.noImage&&t.visible.set(!0),this.setCanvas(t)}bindCamera(t){const i=this.canvasById.get(t.ptr).canvas;this.cameras.set(t.ptr,t.camera),t.camera.bindEngineCanvas(i),i.is360?t.camera.assign(i.view.arr,i.webgl.coo.arr,i.webgl.coo.arr,i.webgl.iMatrix.arr):t.camera.assign(i.view.arr,i.camera.xy.arr,i.camera.coo.arr,i.webgl.pMatrix.arr)}setCanvas(t){if(t&&!(t.ptr>0&&t.ptr===this.activeCanvasEntry?.micrioImage.ptr))if(t.ptr<0)o(t.info).then(i=>{i&&this.micrio.$current&&(i.isIIIF||t.opts.secondaryTo||i.id==this.micrio.$current.id)&&(this.addCanvas(t),t.embeds.length&&t.embeds.forEach(i=>this.addEmbed(i,t)))});else if(t.ptr!==this.activeCanvasEntry?.micrioImage.ptr){const i=this.canvasById.get(t.ptr);if(!i)return;if(i.canvas.hasParent)return;const e=t.is360&&this.activeCanvasEntry?this.activeCanvasEntry.canvas.webgl.pitch:0;if(this.activeCanvasEntry=i,t.is360&&!this.preventDirectionSet){const s=(this.engine.direction+.5)%1*Math.PI*2;i.canvas.setDirection(s-t.camera.rotationY,e,!0)}0===i.canvas.targetOpacity&&i.canvas.fadeIn(),t.$settings.omni?.layerStartIndex&&t.state.layer.set(t.$settings.omni.layerStartIndex),this.preventDirectionSet=!1,this.ready=!0,this.render()}}removeCanvas(t){if(t.ptr<0)throw"Canvas is not placed yet";const i=this.canvasById.get(t.ptr);i&&(i.canvas.remove(),this.canvasById.delete(t.ptr),this.render())}render(){this.raf<0&&(this.raf=this.micrio.webgl.display.requestAnimationFrame(this.draw))}draw(t=performance.now()){this.micrio.isConnected&&this.micrio.$current&&(this.raf=-1,this.drawing=!1,this.now=t,(this.engine.shouldDraw(t)||this.micrio.keepRendering||this.micrio.events.isNavigating||!1===this.micrio._current?._video?.paused)&&this.render(),this.isGallery&&this.drawStart(),this.drawnSet.clear(),this.engine.draw(),this.micrio.events.dispatch("draw"),this.cleanup(),this.micrio.webgl.drawEnd())}stop(){this.raf<0||(this.micrio.webgl.display.cancelAnimationFrame(this.raf),this.raf=-1)}getTileEntry(t){let i=this.tiles.get(t);return i||(i={loadState:0,opacity:0},this.tiles.set(t,i)),i}drawTile(t,i,e,s,r,a,n,o){this.drawnSet.add(i);const h=this.getTileEntry(i);h.deleteAt=void 0;const c=Li(),l=this.images[t],d="camera"in l&&l.isVideo,m="camera"in l&&l.is360,u="camera"in l?l:l.image,p="frame"in l?l.frame:void 0;if(0===h.loadState&&c<xi){if(this.bareBone?c>2&&n:o&&n&&c>0)return!1;if(d&&!m)h.loadState=2,h.texture=this.micrio.webgl.getTexture();else{h.loadState=1;const t=u.getTileSrc(e,s,r,p);if(!t)return h.loadState=0,!1;this.getTexture(i,t,n,{noSmoothing:"$info"in l&&l.$settings.noSmoothing})}}else if(h.loadState>=2){if(this.drawing||this.drawStart(),h.texture){if(d){if(!u._video||!u._video.dataset.playing)return!1;this.micrio.webgl.updateTexture(h.texture,u._video)}this.micrio.webgl.drawTile(h.texture,a,m)}return 2===h.loadState&&(h.loadState=3,h.loadedAt=this.now),!0}return!1}drawStart(){this.drawing||(this.micrio.webgl.drawStart(),this.drawing=!0)}getTexture(t,i,e,s={}){if(this.tiles.get(t)?.texture||this.requests.has(t)||!s.force&&Li()>=xi)return;const r=fi.db.has(i);r||this.micrio.loading.set(!0),this.requests.set(t,i),(r?fi.getImage(i):Si(i)).then(i=>this.gotTexture(t,i,e,s.noSmoothing)).catch(()=>this.deleteRequest(t))}gotTexture(t,i,e,s){const r=this.getTileEntry(t);r.texture=this.micrio.webgl.getTexture(i,r.texture,s),void 0!==self.ImageBitmap&&i instanceof ImageBitmap&&i.close instanceof Function&&i.close(),r.loadState=2,r.timeoutId=setTimeout(()=>{this.deleteRequest(t)},e?150:50)}deleteRequest(t){this.requests.delete(t);const i=this.tiles.get(t);i?.timeoutId&&(clearTimeout(i.timeoutId),i.timeoutId=void 0),this.requests.size||this.micrio.loading.set(!1)}deleteTile(t){const i=this.tiles.get(t);i&&(i.texture&&this.micrio.webgl.gl.deleteTexture(i.texture),i.timeoutId&&clearTimeout(i.timeoutId),this.tiles.delete(t))}cleanup(){const t=performance.now();for(const i of this.prevDrawnSet){if(this.drawnSet.has(i))continue;if(this.baseTiles.includes(i))continue;const e=this.tiles.get(i);if(e&&0!==e.loadState)switch(e.opacity=0,e.loadState){case 1:const s=this.requests.get(i);s&&Pi(s),e.loadState=0;break;case 2:this.requests.has(i)&&this.deleteRequest(i),this.deleteTile(i);break;case 3:e.deleteAt||(e.deleteAt=t)}}this.prevDrawnSet=new Set(this.drawnSet);for(const[i,e]of this.tiles.entries())e.deleteAt&&(t-e.deleteAt)/1e3>this.deleteAfterSeconds&&this.deleteTile(i)}resize(t){this.engine.resize(t.width,t.height,t.left,t.top,t.ratio,t.scale,t.portrait),this.ready&&(this.stop(),this.draw())}addEmbed(t,i,e={}){if("camera"in t&&e.asImage)return this.addImage(t,i,!0,e.opacity??1);{const s="$info"in t?t.$info:i.$info;if(!s)return;if(t.ptr>=0)return;this.images.push(t);const r=t.opts.area??[0,0,1,1],a=t instanceof bi?t.$settings._360??{}:{},n=this.canvasById.get(i.ptr);if(!n)return;const o=n.canvas.addImage(r[0],r[1],r[0]+r[2],r[1]+r[3],s.width,s.height,s.tileSize||1024,s.isSingle??!1,s.isDeepZoom??!1,s.isVideo??!1,e.opacity??1,a.rotX??0,a.rotY??0,a.rotZ??0,a.scale??1,e.fromScale??0);this.engImageToMicrio.set(o,t),this.micrioToEngImage.set(t,o);const h=this.nextPtr++;t.ptr=h,this.setEntry(h,{canvas:n.canvas,micrioImage:t}),this.ptrToImage.set(h,t),t.baseTileIdx=this.engine.numTiles-1,this.getTileEntry(t.baseTileIdx).opacity=1,this.baseTiles.push(t.baseTileIdx)}}setActiveImage(t,i,e){this.getCanvas(this.ptrToImage.get(t))?.setActiveImage(i,e??0)}setActiveLayer(t,i){this.getCanvas(this.ptrToImage.get(t))?.setActiveLayer(i)}fadeImage(t,i,e=!1){const s=this.getCanvas(this.ptrToImage.get(t));if(s){if(this.cameras.has(t))s.targetOpacity=i;else{const t=s.images;for(let s=0;s<t.length;s++){const r=t[s];r.localIdx>0&&(r.tOpacity=i,e&&(r.opacity=i))}}this.render()}}setFocus(t,i,e=!1){this.getCanvas(this.ptrToImage.get(t))?.setFocus(i[0],i[1],i[2],i[3],e)}setZIndex(t,i){const e=this.getCanvas(this.ptrToImage.get(t));e&&(e.zIndex=i)}setGridTransitionDuration(t){this.engine.gridTransitionDuration=t}setGridTransitionTimingFunction(t){this.engine.gridTransitionTimingFunction=0===t?$i:1===t?Fi:2===t?Bi:3===t?Vi:$i}setCrossfadeDuration(t){this.engine.crossfadeDuration=t}fadeTo(t,i,e){const s=this.getCanvas(this.ptrToImage.get(t));s&&(s.targetOpacity=i,e&&(s.opacity=i))}fadeIn(t){this.getCanvas(this.ptrToImage.get(t))?.fadeIn()}fadeOut(t){this.getCanvas(this.ptrToImage.get(t))?.fadeOut()}areaAnimating(t){return this.getCanvas(this.ptrToImage.get(t))?.areaAnimating()??!1}getActiveImageIdx(t){return this.getCanvas(this.ptrToImage.get(t))?.activeImageIdx??-1}setNoPinchPan(t){this.engine.noPinchPan=t}setIsSwipe(t){this.engine.isSwipe=t}ease(t){return $i.get(t)}panStart(t){this.getCanvas(this.ptrToImage.get(t))?.kinetic.stop()}panStop(t){this.getCanvas(this.ptrToImage.get(t))?.kinetic.start()}pinchStart(t){this.getCanvas(this.ptrToImage.get(t))?.camera.pinchStart()}pinch(t,i,e,s,r){this.getCanvas(this.ptrToImage.get(t))?.camera.pinch(i,e,s,r)}pinchStop(t,i){this.getCanvas(this.ptrToImage.get(t))?.camera.pinchStop(i)}setLimited(t,i){const e=this.getCanvas(this.ptrToImage.get(t));e&&(e.limited=i)}set360Orientation(t,i,e){this.engine.direction=t,this.engine.distanceX=i,this.engine.distanceY=e}setCanvasArea(t,i){this.engine.el.areaWidth=t,this.engine.el.areaHeight=i}setImageVideoPlaying(t,i){const e=this.ptrToImage.get(t);if(!e)return;const s=this.micrioToEngImage.get(e);s&&(s.isVideoPlaying=i)}},re=new Float32Array([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]),ae=class{constructor(t,i,e){if(this.gl=t,this.program=t.createProgram(),i.webgl.getShader(this.program,t.VERTEX_SHADER,"\nattribute vec2 a_position; // Vertex position (-1 to 1)\nattribute vec2 a_texCoord; // Texture coordinate (0 to 1)\n\nvarying vec2 v_texCoord; // Pass texCoord to fragment shader\n\nvoid main() {\n\tv_texCoord = a_texCoord; // Pass through texture coordinate\n\tgl_Position = vec4(a_position, 0.0, 1.0); // Set clip space position\n}"),i.webgl.getShader(this.program,t.FRAGMENT_SHADER,e),t.linkProgram(this.program),t.getProgramParameter(this.program,t.LINK_STATUS)||console.error("Postprocess shader link error:",t.getProgramInfoLog(this.program)),t.useProgram(this.program),this.ppPositionLoc=t.getAttribLocation(this.program,"a_position"),this.ppTexCoordLoc=t.getAttribLocation(this.program,"a_texCoord"),this.ppTimeLoc=t.getUniformLocation(this.program,"u_time"),this.texture=t.createTexture(),t.bindTexture(t.TEXTURE_2D,this.texture),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,this.gl.drawingBufferWidth,this.gl.drawingBufferHeight,0,t.RGBA,t.UNSIGNED_BYTE,null),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),this.frameBuffer=t.createFramebuffer(),t.bindFramebuffer(t.FRAMEBUFFER,this.frameBuffer),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,this.texture,0),t.checkFramebufferStatus(t.FRAMEBUFFER)!==t.FRAMEBUFFER_COMPLETE)throw new Error("Framebuffer not complete");t.bindFramebuffer(t.FRAMEBUFFER,null),this.quad=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.quad),t.bufferData(t.ARRAY_BUFFER,re,t.STATIC_DRAW)}render(){const t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,null),t.useProgram(this.program),t.bindBuffer(t.ARRAY_BUFFER,this.quad),t.enableVertexAttribArray(this.ppPositionLoc),t.vertexAttribPointer(this.ppPositionLoc,2,t.FLOAT,!1,4*Float32Array.BYTES_PER_ELEMENT,0),t.enableVertexAttribArray(this.ppTexCoordLoc),t.vertexAttribPointer(this.ppTexCoordLoc,2,t.FLOAT,!1,4*Float32Array.BYTES_PER_ELEMENT,2*Float32Array.BYTES_PER_ELEMENT),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,this.texture),t.uniform1f(this.ppTimeLoc,performance.now()/1e3),t.drawArrays(t.TRIANGLE_STRIP,0,4)}resize(){const t=this.gl;t.bindTexture(t.TEXTURE_2D,this.texture),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,this.gl.drawingBufferWidth,this.gl.drawingBufferHeight,0,t.RGBA,t.UNSIGNED_BYTE,null),t.bindTexture(t.TEXTURE_2D,null)}dispose(){const t=this.gl;t.deleteFramebuffer(this.frameBuffer),t.deleteTexture(this.texture),t.deleteBuffer(this.quad),t.deleteProgram(this.program)}},ne=St.firefox,oe=`\nprecision mediump float; // Use medium precision for fragment calculations\n\nvarying highp vec2 vTextureCoord; // Received texture coordinate from vertex shader\n\nuniform sampler2D uSampler; // The tile texture\nuniform float opacity; // Tile opacity (for fading)\nuniform int noTexture; // Flag indicating if texture is missing/not loaded\n\nvoid main() {\n\tif(noTexture==1) { // If texture is missing\n\t\tgl_FragColor = vec4(.1,.1,.1,.1); // Draw a placeholder color (dark semi-transparent gray)\n\t} else {\n\t${ne?"\n\t\t// Firefox premultiplied alpha workaround\n\t\tvec4 textureColor = texture2D(uSampler, vTextureCoord);\n\t\t// Manually apply opacity to RGB based on new alpha\n\t\tfloat newAlpha = min(1., textureColor.a * opacity);\n\t\tgl_FragColor = vec4(textureColor.rgb * newAlpha, newAlpha);":"\n\t\t// Standard alpha blending (premultiplied alpha assumed in blendFunc)\n\t\tgl_FragColor = texture2D(uSampler, vTextureCoord) * opacity;"}\n\t\t// Debug: Draw red instead of texture\n\t\t//gl_FragColor = vec4(1.,0.,0.,1.);\n\t}\n}`,he=256,ce=class{constructor(t){this.micrio=t,this.display=self,this.txtAttr=-1,this.wmTexture=null,this.wmUrl=null,this.wmVerts=new Float32Array([-1,-1,0,1,-1,0,-1,1,0,-1,1,0,1,-1,0,1,1,0]),this.wmUvs=new Float32Array([0,0,0,0,0,0,0,0,0,0,0,0]),this.wmMatrix=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),this.wmOpacity=.075,this.posAttr=-1,this.was360=!1}init(){const t="WebGL2RenderingContext"in window,i=this.micrio.canvas.element.getContext(t?"webgl2":"webgl",{alpha:!0,preserveDrawingBuffer:this.micrio.hasAttribute("data-preserve-drawing-buffer"),stencil:!1,antialias:!1,depth:!1,desynchronized:!1});if(t?!(i instanceof window.WebGL2RenderingContext):!(i instanceof window.WebGLRenderingContext))throw new O("WebGL context creation failed",{code:k,displayMessage:"Your browser does not support WebGL, which is required to view this content. Please try a different browser."});this.gl=i;const e=this.micrio.$current?.$settings.postProcessingFragmentShader;e&&(this.postpocessor=new ae(i,this.micrio,e),this.micrio.keepRendering=!0);const s=i.createProgram();if(!(s instanceof WebGLProgram))throw new O("Failed to create WebGL program",{code:T,displayMessage:"There was a problem initializing the graphics. Please try refreshing the page."});this.program=s,this.getShader(this.program,i.VERTEX_SHADER,"\nuniform mat4 GLMatrix; // Combined ModelViewProjection matrix from Engine\n\nattribute vec3 pos; // Vertex position (from Engine buffer)\nattribute vec2 aTextureCoord; // Texture coordinate (from static buffer)\n\nvarying highp vec2 vTextureCoord; // Pass texture coordinate to fragment shader\n\nvoid main()\n{\n\tgl_Position = GLMatrix * vec4(pos, 1.0); // Calculate clip space position\n\tvTextureCoord = aTextureCoord; // Pass through texture coordinate\n}"),this.getShader(this.program,i.FRAGMENT_SHADER,oe),i.linkProgram(this.program),i.getProgramParameter(this.program,i.LINK_STATUS)||console.error("Main shader link error:",i.getProgramInfoLog(this.program)),i.useProgram(this.program),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.enable(i.BLEND),i.disable(i.DEPTH_TEST),i.clearColor(0,0,0,0);const r=i.getUniformLocation(this.program,"opacity");if(!r)throw new O("Failed to bind WebGL opacity uniform",{code:T});this.opaLoc=r;const a=i.getUniformLocation(this.program,"GLMatrix");if(!a)throw new O("Failed to bind WebGL matrix uniform",{code:T});this.pmLoc=a;const n=i.getUniformLocation(this.program,"noTexture");if(!n)throw new O("Failed to bind WebGL texture uniform",{code:T});this.noTxtLoc=n,this.txtAttr=i.getAttribLocation(this.program,"aTextureCoord");const o=i.createBuffer();if(!o)throw new O("Failed to create WebGL texture buffer",{code:M,displayMessage:"Your device is low on memory. Try closing other browser tabs or applications."});this.txtBuffer=o,i.bindBuffer(i.ARRAY_BUFFER,this.txtBuffer),i.bufferData(i.ARRAY_BUFFER,se._textureBuffer,i.STATIC_DRAW);const h=i.createBuffer();if(!h)throw new O("Failed to create WebGL watermark buffer",{code:M,displayMessage:"Your device is low on memory. Try closing other browser tabs or applications."});this.wmTxtBuffer=h;const c=i.createBuffer();if(!c)throw new O("Failed to create WebGL geometry buffer",{code:M,displayMessage:"Your device is low on memory. Try closing other browser tabs or applications."});this.geomBuffer=c,this.posAttr=i.getAttribLocation(this.program,"pos"),this.linkBuffers(),i.viewport(0,0,this.gl.drawingBufferWidth,this.gl.drawingBufferHeight)}linkBuffers(){const t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.geomBuffer),t.bufferData(t.ARRAY_BUFFER,this.micrio.engine._vertexBuffer,t.DYNAMIC_DRAW),t.enableVertexAttribArray(this.txtAttr),t.bindBuffer(t.ARRAY_BUFFER,this.txtBuffer),t.vertexAttribPointer(this.txtAttr,2,t.FLOAT,!1,0,0),t.enableVertexAttribArray(this.posAttr),t.bindBuffer(t.ARRAY_BUFFER,this.geomBuffer),t.vertexAttribPointer(this.posAttr,3,t.FLOAT,!1,0,0)}dispose(t=!1){const i=this.gl;if(i){if(i.bindBuffer(i.ARRAY_BUFFER,null),i.bindTexture(i.TEXTURE_2D,null),i.deleteBuffer(this.txtBuffer),i.deleteBuffer(this.geomBuffer),i.deleteBuffer(this.wmTxtBuffer),i.deleteProgram(this.program),this.postpocessor?.dispose(),this.wmTexture&&i.deleteTexture(this.wmTexture),t){const t=i.getExtension("WEBGL_lose_context");t instanceof Object&&t.loseContext instanceof Function&&t.loseContext()}this.gl=null}}getShader(t,i,e){const s=this.gl.createShader(i);if(!s)throw new Error(`Could not create WebGL shader (type: ${i})`);if(this.gl.shaderSource(s,e),this.gl.compileShader(s),!this.gl.getShaderParameter(s,this.gl.COMPILE_STATUS))throw console.error("Error compiling shader",this.gl.getShaderInfoLog(s)),this.gl.deleteProgram(t),new Error(`Shader compilation failed: ${this.gl.getShaderInfoLog(s)}`);this.gl.attachShader(t,s),this.gl.deleteShader(s)}getTexture(t,i,e){const s=this.gl,r=i??s.createTexture();if(!r)throw new Error("Could not create WebGL texture");return s.bindTexture(s.TEXTURE_2D,r),t&&s.texImage2D(s.TEXTURE_2D,0,s.RGBA,s.RGBA,s.UNSIGNED_BYTE,t),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,e?s.NEAREST:s.LINEAR),r}updateTexture(t,i){const e=this.gl;e.bindTexture(e.TEXTURE_2D,t),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,i),e.bindTexture(e.TEXTURE_2D,null)}drawStart(){const t=this.gl;this.postpocessor&&t.bindFramebuffer(t.FRAMEBUFFER,this.postpocessor.frameBuffer),this.gl.clear(this.gl.COLOR_BUFFER_BIT)}drawEnd(){this.postpocessor&&(this.postpocessor.render(),this.gl.useProgram(this.program),this.linkBuffers()),this.wmTexture&&this.drawWatermark()}drawTile(t,i=1,e=!1){this.gl.uniform1i(this.noTxtLoc,t?0:1),this.gl.uniform1f(this.opaLoc,i),t&&(this.gl.activeTexture(this.gl.TEXTURE0),this.gl.bindTexture(this.gl.TEXTURE_2D,t));const s=e?1536:6;e!=this.was360&&(this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.txtBuffer),this.gl.bufferData(this.gl.ARRAY_BUFFER,e?se._textureBuffer360:se._textureBuffer,this.gl.STATIC_DRAW),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.geomBuffer),this.was360=e),this.gl.bufferData(this.gl.ARRAY_BUFFER,e?this.micrio.engine._vertexBuffer360:this.micrio.engine._vertexBuffer,this.gl.STATIC_DRAW),this.gl.drawArrays(this.gl.TRIANGLES,0,s)}loadWatermark(t,i){if(t===this.wmUrl)return;this.wmUrl=t;const e=new Image;i&&(this.wmOpacity=i),e.crossOrigin="anonymous",e.src=t,e.onload=()=>{const t=document.createElement("canvas");t.width=he,t.height=he;const i=t.getContext("2d");if(!i)return;const s=Math.min(96/e.width,64/e.height),r=e.width*s,a=e.height*s;i.drawImage(e,(he-r)/2,(he-a)/2,r,a),this.wmTexture&&this.gl.deleteTexture(this.wmTexture),this.wmTexture=this.getTexture(t);const n=this.gl;n.bindTexture(n.TEXTURE_2D,this.wmTexture),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.REPEAT),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.REPEAT),n.bindTexture(n.TEXTURE_2D,null),this.micrio.engine.render()}}drawWatermark(){const t=this.gl;if(!this.wmTexture)return;t.useProgram(this.program),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA),t.uniformMatrix4fv(this.pmLoc,!1,this.wmMatrix),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,this.wmTexture),t.uniform1i(this.noTxtLoc,0),t.uniform1f(this.opaLoc,this.wmOpacity);const i=t.drawingBufferWidth/he,e=t.drawingBufferHeight/he,s=this.wmUvs;s[1]=e,s[2]=i,s[3]=e,s[8]=i,s[9]=e,s[10]=i,t.bindBuffer(t.ARRAY_BUFFER,this.geomBuffer),t.bufferData(t.ARRAY_BUFFER,this.wmVerts,t.DYNAMIC_DRAW),t.vertexAttribPointer(this.posAttr,3,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this.wmTxtBuffer),t.bufferData(t.ARRAY_BUFFER,this.wmUvs,t.DYNAMIC_DRAW),t.vertexAttribPointer(this.txtAttr,2,t.FLOAT,!1,0,0),t.drawArrays(t.TRIANGLES,0,6),t.blendFunc(t.ONE,t.ONE_MINUS_SRC_ALPHA),this.linkBuffers(),this.was360=!1}},le=class{get $isMobile(){return i(this.isMobile)}constructor(i){this.micrio=i,this.element=document.createElement("canvas"),this.resizing=!1,this.hasPerspective=!1,this.viewport={width:0,height:0,left:0,top:0,ratio:0,scale:0,portrait:!1},this.isMobile=t(!1),this.getRatio=(t=this.micrio.$current?.$settings??{})=>!St.iOS&&!t?.noRetina&&self.devicePixelRatio&&Math.max(1,Math.min(2,self.devicePixelRatio))||1,this.onresize=this.onresize.bind(this),self.ResizeObserver&&(this.resizeObserver=new self.ResizeObserver(this.onresize)),this.element.className="micrio"}place(){if(this.element.parentNode)return;const t=this.micrio.querySelector("img.preview");this.micrio.insertBefore(this.element,t?t.nextSibling:this.micrio.firstChild)}hook(){this.onresize(),this.resizeObserver?this.resizeObserver.observe(this.element):window.addEventListener("resize",this.onresize)}unhook(){this.resizeObserver?this.resizeObserver.unobserve(this.element):window.removeEventListener("resize",this.onresize)}onresize(){const t=this.element.getBoundingClientRect();this.micrio.$current?.is360&&(this.hasPerspective=!0);let i=t.width,e=t.height;if(!i||!e)return;const s=self.getComputedStyle(this.element),r=parseFloat(s.width);isNaN(r)||(e=parseFloat(s.height)*i/Math.max(1,r));const a=this.micrio.hasAttribute("data-static")?1:Math.floor(i)/this.micrio.offsetWidth;i/=a,e/=a;const n=1!=a?1:this.getRatio(),o=this.viewport;o.width==i&&o.height==e&&o.ratio==n&&o.scale==a||(this.hasPerspective&&(this.micrio.style.perspective=e/2+"px"),o.width=i,o.height=e,o.ratio=n,o.scale=a,o.top=t.top,o.left=t.left,o.portrait=window.matchMedia("(orientation: portrait)")?.matches??e>i,this.resizing=!0,this.element.width=i*n,this.element.height=e*n,this.micrio.webgl.gl.viewport(0,0,o.width*o.ratio,o.height*o.ratio),this.micrio.webgl.postpocessor?.resize(),this.micrio.engine.resize(o),this.resizing=!1,this.micrio.events.dispatch("resize",t),this.isMobile.set(/mobile/i.test(navigator.userAgent)))}setMargins(t,i){this.micrio.engine.ready&&this.micrio.engine.setCanvasArea(t,i)}},de={passive:!0},me={passive:!0,capture:!0},ue={passive:!1};function pe(t){t.stopPropagation(),t.preventDefault()}var ge=class{constructor(t){this.ctx=t,this.hooked=!1,this.start=this.start.bind(this),this.move=this.move.bind(this),this.stop=this.stop.bind(this),this.cancel=this.cancel.bind(this)}hook(){this.hooked||(this.hooked=!0,this.ctx.micrio.addEventListener("dragstart",pe),this.ctx.micrio.addEventListener("pointerdown",this.start,de),self.addEventListener("pointercancel",this.cancel,de),this.ctx.micrio.setAttribute("data-hooked",""))}unhook(){this.hooked&&(this.hooked=!1,this.ctx.micrio.removeEventListener("pointerdown",this.start,de),this.ctx.micrio.removeEventListener("dragstart",pe),self.removeEventListener("pointercancel",this.cancel,de),this.ctx.micrio.removeAttribute("data-hooked"))}start(t,i=!1){if(0!=t.button||"touch"==t.pointerType&&this.ctx.isTwoFingerPan())return;if(!(i||t.target==this.ctx.el||t.target instanceof Element&&t.target.closest("[data-scroll-through]")))return;if(this.ctx.micrio.$current?.isOmni&&t.shiftKey)return;if(this.ctx.isPinching())return;if(this.ctx.isPanning())return void(t instanceof TouchEvent&&t.touches.length>1&&this.stop());const e=this.ctx.getImage({x:t.clientX,y:t.clientY});e&&(this.ctx.setPanning(!0),this.ctx.vars.drag.start=[t.clientX,t.clientY,performance.now()],this.ctx.vars.drag.image=e,this.ctx.micrio.addEventListener("pointermove",this.move,de),this.ctx.micrio.addEventListener("pointerup",this.stop,de),this.ctx.micrio.setAttribute("data-panning",""),this.ctx.micrio.engine.panStart(e.ptr),this.ctx.micrio.engine.render(),this.ctx.dispatch("panstart"))}move(t){const i=t.clientX,e=t.clientY,s=Math.hypot(this.ctx.vars.drag.start[0]-t.clientX,this.ctx.vars.drag.start[1]-t.clientY);!this.ctx.capturedPointerId&&s>10&&(this.ctx.setCapturedPointerId(t.pointerId),this.ctx.micrio.setPointerCapture(t.pointerId)),this.ctx.vars.drag.prev&&this.ctx.vars.drag.image?.camera.pan(this.ctx.vars.drag.prev[0]-i,this.ctx.vars.drag.prev[1]-e),this.ctx.vars.drag.prev=[i,e]}stop(t,i=!1,e=!1){if(this.ctx.isPanning()){if(this.ctx.setPanning(!1),this.ctx.vars.drag.prev=void 0,this.ctx.micrio.removeEventListener("pointermove",this.move,de),this.ctx.micrio.removeEventListener("pointerup",this.stop,de),this.ctx.capturedPointerId&&this.ctx.micrio.releasePointerCapture(this.ctx.capturedPointerId),this.ctx.setCapturedPointerId(void 0),this.ctx.micrio.removeAttribute("data-panning"),t&&0==i){const i=this.ctx.vars.drag.image??this.ctx.getImage({x:t.clientX,y:t.clientY});i&&(this.ctx.micrio.engine.panStop(i.ptr),this.ctx.micrio.engine.render())}this.ctx.vars.drag.image=void 0,e||this.ctx.dispatch("panend",t?{duration:performance.now()-this.ctx.vars.drag.start[2],movedX:t.clientX-this.ctx.vars.drag.start[0],movedY:t.clientY-this.ctx.vars.drag.start[1]}:void 0)}}cancel(t){this.ctx.isPanning()&&(void 0!==this.ctx.capturedPointerId&&t.pointerId!==this.ctx.capturedPointerId||this.stop(void 0,!0,!0))}},fe=class{constructor(t,i){this.ctx=t,this.dragHandler=i,this.start=this.start.bind(this),this.move=this.move.bind(this),this.stop=this.stop.bind(this)}hook(){St.iOS&&this.ctx.hasTouch&&this.ctx.micrio.addEventListener("touchstart",this.start,de)}unhook(){St.iOS&&this.ctx.hasTouch&&this.ctx.micrio.removeEventListener("touchstart",this.start,de),self.removeEventListener("touchmove",this.move,me),self.removeEventListener("touchend",this.stop,me)}start(t){if(!(St.hasTouch&&t instanceof TouchEvent))return;if(this.ctx.isTwoFingerPan()&&t.touches.length<2)return;if(this.ctx.isPinching()||2!=t.touches.length)return void this.stop(t);t.stopPropagation(),this.ctx.vars.pinch.wasPanning=this.ctx.isPanning(),this.dragHandler.stop(void 0,!1,!0);const i=t.touches;this.ctx.setPinching(!0),self.addEventListener("touchmove",this.move,me),self.addEventListener("touchend",this.stop,me),this.ctx.micrio.setAttribute("data-pinching",""),this.ctx.vars.pinch.image=this.ctx.getImage({x:i[0].clientX,y:i[0].clientY}),this.ctx.vars.pinch.sDst=Math.hypot(i[0].clientX-i[1].clientX,i[0].clientY-i[1].clientY),this.ctx.setPinchFactor(void 0),this.ctx.vars.pinch.image&&this.ctx.micrio.engine.pinchStart(this.ctx.vars.pinch.image.ptr),this.ctx.micrio.engine.render(),this.ctx.dispatch("pinchstart"),this.ctx.isTwoFingerPan()&&this.ctx.dispatch("panstart")}move(t){if(!(St.hasTouch&&t instanceof TouchEvent))return;const i=t.touches;if(i?.length<2)return;const e={x:i[0].clientX,y:i[0].clientY},s={x:i[1].clientX,y:i[1].clientY},r=this.ctx.vars.pinch,a=r.image;if(a){if(a?.opts.secondaryTo&&a.opts.isPassive&&a.opts.area){const t=a.opts.area[0]*this.ctx.micrio.offsetWidth,i=a.opts.area[1]*this.ctx.micrio.offsetHeight;e.x-=t,s.x-=t,e.y-=i,s.y-=i}this.ctx.setPinchFactor(Math.hypot(i[0].clientX-i[1].clientX,i[0].clientY-i[1].clientY)/r.sDst),this.ctx.micrio.engine.pinch(a.ptr,e.x,e.y,s.x,s.y)}}stop(t){if(!this.ctx.isPinching())return;this.ctx.setPinching(!1),self.removeEventListener("touchmove",this.move,me),self.removeEventListener("touchend",this.stop,me),this.ctx.micrio.removeAttribute("data-pinching");const i=this.ctx.vars.pinch.image;i&&(this.ctx.micrio.engine.pinchStop(i.ptr,performance.now()),this.ctx.micrio.engine.render()),this.ctx.vars.pinch.image=void 0,this.ctx.setPinchFactor(void 0),this.ctx.dispatch("pinchend"),this.ctx.isTwoFingerPan()&&!this.ctx.vars.pinch.wasPanning&&this.ctx.dispatch("panend"),t instanceof TouchEvent&&1==t.touches.length&&this.dragHandler.start(t,!0)}},ve=class{constructor(t,i){this.ctx=t,this.dragHandler=i,this.start=this.start.bind(this),this.move=this.move.bind(this),this.end=this.end.bind(this)}hook(){this.ctx.micrio.addEventListener("pointerdown",this.start,de),self.addEventListener("pointerup",this.end,de),self.addEventListener("pointercancel",this.end,de)}unhook(){this.ctx.micrio.removeEventListener("pointerdown",this.start,de),self.removeEventListener("pointerup",this.end,de),self.removeEventListener("pointercancel",this.end,de),self.removeEventListener("pointermove",this.move,me),this.ctx.activePointers.clear()}start(t){if("touch"===t.pointerType&&(this.ctx.activePointers.set(t.pointerId,{x:t.clientX,y:t.clientY}),2===this.ctx.activePointers.size&&!this.ctx.isPinching())){this.ctx.vars.pinch.wasPanning=this.ctx.isPanning(),this.dragHandler.stop(void 0,!1,!0),this.ctx.setPinching(!0),self.addEventListener("pointermove",this.move,me),this.ctx.micrio.setAttribute("data-pinching","");const t=Array.from(this.ctx.activePointers.values()),i=t[0],e=t[1];this.ctx.vars.pinch.image=this.ctx.getImage({x:i.x,y:i.y}),this.ctx.vars.pinch.sDst=Math.hypot(i.x-e.x,i.y-e.y),this.ctx.setPinchFactor(void 0),this.ctx.vars.pinch.image&&this.ctx.micrio.engine.pinchStart(this.ctx.vars.pinch.image.ptr),this.ctx.micrio.engine.render(),this.ctx.dispatch("pinchstart"),this.ctx.isTwoFingerPan()&&this.ctx.dispatch("panstart")}}move(t){if("touch"!==t.pointerType)return;if(!this.ctx.activePointers.has(t.pointerId))return;if(this.ctx.activePointers.set(t.pointerId,{x:t.clientX,y:t.clientY}),!this.ctx.isPinching()||2!==this.ctx.activePointers.size)return;const i=Array.from(this.ctx.activePointers.values()),e=i[0],s=i[1],r=this.ctx.vars.pinch,a=r.image;if(!a)return;const n={x:e.x,y:e.y},o={x:s.x,y:s.y};if(a?.opts.secondaryTo&&a.opts.isPassive&&a.opts.area){const t=a.opts.area[0]*this.ctx.micrio.offsetWidth,i=a.opts.area[1]*this.ctx.micrio.offsetHeight;n.x-=t,o.x-=t,n.y-=i,o.y-=i}this.ctx.setPinchFactor(Math.hypot(e.x-s.x,e.y-s.y)/r.sDst),this.ctx.micrio.engine.pinch(a.ptr,n.x,n.y,o.x,o.y)}end(t){if("touch"===t.pointerType&&(this.ctx.activePointers.delete(t.pointerId),this.ctx.isPinching()&&this.ctx.activePointers.size<2)){this.ctx.setPinching(!1),self.removeEventListener("pointermove",this.move,me),this.ctx.micrio.removeAttribute("data-pinching");const t=this.ctx.vars.pinch.image;if(t&&(this.ctx.micrio.engine.pinchStop(t.ptr,performance.now()),this.ctx.micrio.engine.render()),this.ctx.vars.pinch.image=void 0,this.ctx.setPinchFactor(void 0),this.ctx.dispatch("pinchend"),this.ctx.isTwoFingerPan()&&!this.ctx.vars.pinch.wasPanning&&this.ctx.dispatch("panend"),1===this.ctx.activePointers.size){const t=Array.from(this.ctx.activePointers.entries())[0],i={button:0,pointerType:"touch",target:this.ctx.el,clientX:t[1].x,clientY:t[1].y,pointerId:t[0]};this.dragHandler.start(i,!0)}}}},be=class{constructor(t){this.ctx=t,this.handle=this.handle.bind(this)}hook(){St.OSX&&(this.ctx.micrio.addEventListener("gesturestart",this.handle,ue),this.ctx.micrio.addEventListener("gesturechange",this.handle,ue),this.ctx.micrio.addEventListener("gestureend",this.handle,ue))}unhook(){St.OSX&&(this.ctx.micrio.removeEventListener("gesturestart",this.handle,ue),this.ctx.micrio.removeEventListener("gesturechange",this.handle,ue),this.ctx.micrio.removeEventListener("gestureend",this.handle,ue))}getGestureEvent(t){if("scale"in t&&"number"==typeof t.scale){const i=t;return{scale:i.scale,clientX:i.clientX,clientY:i.clientY}}return null}handle(t){const i=this.getGestureEvent(t);if(!i||1===i.scale)return;const e=this.ctx.pScale-i.scale;this.ctx.setPScale(i.scale),t.stopPropagation(),t.preventDefault(),"gesturechange"==t.type&&this.ctx.getImage({x:i.clientX,y:i.clientY})?.camera.zoom(e*this.ctx.micrio.canvas.viewport.height,0,i.clientX,i.clientY)}},we=class{constructor(t){this.ctx=t,this.hooked=!1,this.wheelEndTo=-1,this.handle=this.handle.bind(this),this.end=this.end.bind(this)}hook(){this.hooked||(this.ctx.micrio.addEventListener("wheel",this.handle,ue),this.hooked=!0)}unhook(){this.ctx.micrio.removeEventListener("wheel",this.handle,ue),this.hooked=!1}handle(t,i=!1,e=0){if(!(t instanceof WheelEvent))return;if(this.ctx.isControlZoom()&&!t.ctrlKey)return;if(!i&&t.target instanceof Element&&t.target!=this.ctx.el&&!t.target.classList.contains("marker")&&!t.target.closest("[data-scroll-through]"))return;let s=t.deltaY;t.ctrlKey&&this.ctx.setHasUsedCtrl(!0);const r=this.ctx.isControlZoom()&&10*s%1==0,a=this.ctx.hasUsedCtrl&&!r,n=St.firefox||t.ctrlKey||!a;if(this.ctx.isTwoFingerPan()&&this.ctx.micrio.$current?.camera.isZoomedOut())return;t.stopPropagation(),t.preventDefault(),(St.OSX||a)&&t.ctrlKey&&(s*=10);const o={x:t.clientX,y:t.clientY},h=this.ctx.getImage(o);if(h){if(n){const t=this.ctx.micrio.canvas.viewport;let i=0;const r=this.ctx.micrio.getBoundingClientRect();h.camera.zoom(1*s/Math.sqrt(t.scale),0,o.x-e-r.left,o.y-r.top-i)}else h.camera.pan(t.deltaX,t.deltaY);this.ctx.setWheeling(!0),clearTimeout(this.wheelEndTo),this.wheelEndTo=setTimeout(this.end,50)}}end(){this.ctx.setWheeling(!1)}},ye=t=>new Promise(i=>t?setTimeout(i,t):i()),xe={0:[0,-.5,1,.5],90:[1,0,.5,1],180:[0,1,1,.5],270:[-.5,0,.5,1]},ke={0:[0,-1,1,1],90:[1,0,1,1],180:[0,1,1,1],270:[-1,0,1,1]},Ee={0:[0,1,1,1],90:[-1,0,1,1],180:[0,-1,1,1],270:[1,0,1,1]},Te=t=>Math.round(1e5*t)/1e5,Me=class s{static{this.getString=(t,i)=>[t.id,t.width,t.height,t.isDeepZoom?"d":"",t.isPng?"p":t.isWebP?"w":"",i.view?.map(Te).join("/"),i.area?.map(Te).join("/"),t.settings?.focus?.map(Te).join("-"),i.cultures].join(",").replace(/,+$/,"")+(i.size?`|${i.size.join(",")}`:"")}get $focussed(){return i(this.focussed)}static{this.handlingKeys=!1}constructor(i,e){this.micrio=i,this.image=e,this.images=[],this.imageMap=new Map,this.current=[],this._grid=document.createElement("div"),this._buttons=new Map,this.clickable=!1,this.panZoom="grid",this.focussed=t(),this.markersShown=t([]),this.history=[],this.depth=t(0),this.aniDurationIn=1,this.aniDurationOut=.5,this.transitionDelay=.5,this.isHorizontal=!1,this.cellSizes=new Map,this.nextSize=new Map,this.timingFunction="ease",this.getString=(t,i={})=>s.getString(t,{view:i.view,area:i.area,size:i.size??this.nextSize.get(t.id),cultures:("cultures"in t&&t.cultures?t.cultures:"")?.replace(/,/g,"-")}),this.actionHandlers={[di.Grid.GridActionType.focus]:(t,i)=>{const e=t?.split("|").map(t=>t.trim()),s=(e?.[0]??"").split(",").map(t=>this.imageMap.get(t.trim())).filter(t=>void 0!==t);1==s.length?this.focus(s[0],{duration:i}):s.length>0&&this.set(s.map(t=>this.getString(t.$info)).join(";"),{duration:i,horizontal:"h"==e?.[1]})},[di.Grid.GridActionType.flyTo]:(t,i)=>{const e=t?.split(",").map(t=>this.current.find(i=>i.id==t?.trim()));if(e?.length){const t=e.map(t=>t?.opts.area?.[0]??0),s=e.map(t=>t?.opts.area?.[1]??0),r=Math.max(...e.map(t=>(t?.opts.area?.[0]??0)+(t?.opts.area?.[2]??1))),a=Math.max(...e.map(t=>(t?.opts.area?.[1]??0)+(t?.opts.area?.[3]??1))),n=Math.min(...t),o=Math.min(...s);this.image.camera.flyToView([n,o,r-n,a-o],{duration:i?1e3*i:void 0}).catch(()=>{})}else console.warn("Given image IDs gave no current displayed images")},[di.Grid.GridActionType.focusTagged]:(t,i)=>{this.flyToMarkers(t,i)},[di.Grid.GridActionType.focusWithTagged]:(t,i)=>{this.flyToMarkers(t,i,!0)},[di.Grid.GridActionType.reset]:(t,i)=>{this.reset(i)},[di.Grid.GridActionType.back]:(t,i)=>{this.back(i)},[di.Grid.GridActionType.switchToGrid]:()=>{this.switchToGrid()},[di.Grid.GridActionType.nextFadeDuration]:t=>{this.nextCrossFadeDuration=Number(t)},[di.Grid.GridActionType.filterTourImages]:(t,i)=>{o(this.micrio.state.tour).then(e=>{if(!e)return;if(!("steps"in e)||!e.stepInfo)return;const s=e.stepInfo.map(t=>t.micrioId),r=s.filter((t,i)=>s.indexOf(t)==i).map(t=>this.imageMap.get(t)).filter(t=>!!t).map(t=>this.getString(t.$info)).join(";");r&&this.set(r,{duration:i,horizontal:"h"==t})})}},this.tourEvent=this.tourEvent.bind(this),this.updateGrid=this.updateGrid.bind(this);const r=e.$settings?.grid;this.clickable=("focus"==r?.clickable||"zoom"==r?.clickable)&&r.clickable,this.panZoom="cells"==r?.panZoom?"cells":"grid",this.clickable&&e.$settings.hookKeys&&this.hookGridKeys(),void 0!==r?.transitionDuration&&(this.aniDurationIn=this.aniDurationOut=r.transitionDuration),void 0!==r?.transitionDurationOut&&(this.aniDurationOut=r.transitionDurationOut),this._grid.className="micrio-grid",this.set(e.$info?.grid).then(()=>{this.hook(),i.events.dispatch("grid-load")}),i.events.dispatch("grid-init",this)}hook(){if(this.micrio.state.marker.subscribe(t=>{if(t&&"string"!=typeof t){const i=t.data?._meta;if(i?.gridSize){const e="number"==typeof i.gridSize?[i.gridSize,i.gridSize]:i.gridSize.split(",").map(Number),s=this.images.find(i=>i.$data?.markers?.find(i=>i==t))?.id;s&&this.nextSize.set(s,e)}e().then(()=>{const t=i?.gridAction?.split("|");t?.length&&"string"==typeof t[0]&&this.action(t.shift(),t.join("|"))})}}),this.clickable){this._grid.addEventListener("click",t=>{this.clickCell(t.target?.dataset.id)});const t=t=>{t?this.removeGrid():this.placeGrid()};this.micrio.state.tour.subscribe(t),this.micrio.state.marker.subscribe(t),this.focussed.subscribe(t)}this.micrio.addEventListener("tour-event",this.tourEvent),this.micrio.addEventListener("serialtour-pause",()=>this.images.forEach(t=>t.camera.pause())),this.micrio.addEventListener("serialtour-play",()=>this.images.forEach(t=>t.camera.resume()))}hookGridKeys(){s.handlingKeys=!0,document.addEventListener("keydown",this.gridKeyHandler=this.gridKeyHandler.bind(this)),"grid"==this.panZoom&&this.clickable&&(this._clickDown={x:0,y:0},this.micrio.addEventListener("pointerdown",this._clickStart=this._clickStart.bind(this)),this.micrio.addEventListener("pointerup",this._clickEnd=this._clickEnd.bind(this)))}_clickStart(t){this._clickDown={x:t.clientX,y:t.clientY}}_clickEnd(t){if(!this._clickDown)return;const i=Math.hypot(t.clientX-this._clickDown.x,t.clientY-this._clickDown.y);if(this._clickDown=void 0,i>10)return;const e=this.image.camera.getCoo(t.clientX,t.clientY,!0),s=e[0],r=e[1],a=this.current.find(t=>{const i=t.opts.area;return i&&s>=i[0]&&s<=i[0]+i[2]&&r>=i[1]&&r<=i[1]+i[3]});a&&this.clickCell(a)}gridAdjacent(t){const i=this.current.map((t,i)=>({img:t,i:i,cx:t.opts.area[0]+t.opts.area[2]/2,cy:t.opts.area[1]+t.opts.area[3]/2}));if(!i.length)return;let e=i.findIndex(t=>t.img.id==this._grid.querySelector(":focus")?.getAttribute("data-id"));e<0&&(e=0);const s=i[e],r=.05;let a;for(const n of i){if(n.i===e)continue;let i=n.cx-s.cx,o=n.cy-s.cy,h=!1;switch(t){case"left":h=i<0&&Math.abs(o)<r;break;case"right":h=i>0&&Math.abs(o)<r;break;case"up":h=o<0&&Math.abs(i)<r;break;case"down":h=o>0&&Math.abs(i)<r}if(!h)continue;const c=Math.abs(i)+Math.abs(o);(!a||c<a.dist)&&(a={img:n.img,dist:c})}return a?a.img:i["right"==t||"down"==t?0:i.length-1].img}gridKeyHandler(t){if(!this.current.length||!this.clickable)return;if("Escape"==t.key)return this._buttons.forEach(t=>t.classList.remove("focussed")),void(this.$focussed?(this.back(),t.preventDefault(),t.stopPropagation()):this.image.camera.isZoomedOut()||(this.reset(),t.preventDefault(),t.stopPropagation()));if(this.$focussed)return;let i;switch(t.key){case"ArrowLeft":i=this.gridAdjacent("left");break;case"ArrowRight":i=this.gridAdjacent("right");break;case"ArrowUp":i=this.gridAdjacent("up");break;case"ArrowDown":i=this.gridAdjacent("down");break;default:return}if(t.preventDefault(),t.stopPropagation(),i&&(this._buttons.forEach((t,e)=>{e===i.id?t.focus():t.blur()}),"zoom"==this.clickable&&(this._buttons.forEach((t,e)=>t.classList.toggle("focussed",e==i.id)),!this.image.camera.isZoomedOut()))){const t=i.opts.area??[0,0,1,1];this.image.camera.flyToView(t,{duration:1e3*this.aniDurationIn,limit:!1})}}clearTimeouts(){clearTimeout(this._to),clearTimeout(this._fadeTo)}trackImage(t){this.images.push(t),this.imageMap.set(t.id,t)}parseInput(t){return"string"!=typeof t&&(t=t.map(t=>t instanceof bi?{image:t}:t).filter(t=>!!t.image.$info).map(t=>this.getString(t.image.$info,t)).join(";")),t.split(";").filter(t=>!!t).map(t=>this.getImage(t))}setupBehindTransition(t,i,e){const s="behind-delayed"==i.transition,r=!0===i.coverLimit,{engine:a}=this.micrio;i.forceAni=!0,i.coverLimit=r,i.forceAreaAni=!0;const n=s?1/t.length:1;let o=0;this.images.forEach(i=>{i.camera.setCoverLimit(r),t.find(t=>t.id==i.id)&&(i.camera.setArea([0,0,e?.id==i.id?1:n,1],{noDispatch:!0,direct:!0}),i!=e&&i.camera.setView([0,0,1,1]),s&&a.setZIndex(i.ptr,t.length-o++))}),t.forEach(t=>t.view=[0,0,1,1])}savePreviousLayout(){this.depth.set(this.history.push({layout:this.current.map(t=>this.getString(t.$info,{view:t.state.$view,size:this.cellSizes.get(t.id)})).join(";"),horizontal:this.isHorizontal,view:this.image.camera.getView()}))}set(t="",i={}){return this.lastPromise=new Promise((e,s)=>{delete this.image.$info?.settings?.focus,this.lastAction=void 0,!1===i.cover&&i.coverLimit&&(i.coverLimit=!1),i.coverLimit&&null==i.cover&&(i.cover=i.coverLimit);const r=this.parseInput(t),a=this.$focussed,n=i.transition?.endsWith("-delayed"),o="behind-delayed"==i.transition,{engine:h}=this.micrio;"crossfade"==i.transition?i.duration=0:"behind"!=i.transition&&"behind-delayed"!=i.transition||this.setupBehindTransition(r,i,a);const c=this.image.ptr>=0,l=i.duration??(i.noHistory?this.aniDurationOut:this.aniDurationIn),d=this.nextCrossFadeDuration??this.image.$settings.crossfadeDuration??1,m=(l||this.aniDurationIn)/(o?2:1);this.nextCrossFadeDuration=void 0,c&&(h.setGridTransitionDuration(l),h.setCrossfadeDuration(m));const u=!i.noBlur&&a;u&&this.blur(),!i.noHistory&&this.current.length&&this.savePreviousLayout(),this.isHorizontal=!!i.horizontal,this.removeImages(this.images.filter(t=>!r.find(i=>i.id==t.id))),this.printGrid(r,{horizontal:i.horizontal,keepGrid:i.keepGrid,scale:i.scale,columns:i.columns}),this.clearTimeouts();let p=!1;const g=()=>{this.clearTimeouts(),p||s()};c&&!i.noCamAni&&(i.view?this.image.camera.flyToView(i.view,{duration:1e3*l}).catch(g):this.image.camera.flyToFullView({duration:1e3*l}).catch(g)),this.nextSize.clear(),null==i.coverLimit&&(i.coverLimit=!!this.image.$settings.limitToCoverScale),i.coverLimit?r.forEach(t=>this.imageMap.get(t.id)?.camera.setCoverLimit(!0)):r.forEach(t=>this.imageMap.get(t.id)?.camera.setCoverLimit(!1));const f="appear-delayed"==i.transition,v=t=>t*this.transitionDelay+(t>0&&f?l:0);this.current=r.map((t,e)=>this.placeImage(t,{duration:!i.forceAni&&u&&t.id!=a?.id?0:l,delay:n?v(e):0,noCamAni:!!(f&&e>0)||!!i.noCamAni,forceAreaAni:!(f&&e>0)&&i.forceAreaAni,cover:i.cover})),f&&this.current.slice(1).forEach(t=>h.fadeTo(t.ptr,.9999,!0));const b=()=>this.current.forEach((t,i)=>ye(n?1e3*(v(i)+(o?l/2:0)):0).then(()=>h.fadeIn(t.ptr))),w=()=>{this.clearTimeouts(),requestAnimationFrame(()=>h.setCrossfadeDuration(d)),n&&this.images.forEach(t=>h.setZIndex(t.ptr,0)),i.coverLimit&&r.forEach(t=>this.imageMap.get(t.id)?.camera.setCoverLimit(!0)),this.clickable&&this.placeGrid(),this.lastAction=void 0,p=!0,e(this.current)};l||m?(i.noFade||(this._fadeTo=setTimeout(b,Math.max(0,l/2*1e3))),this._to=setTimeout(w,1e3*(Math.max(m,l)+(n?(r.length-1)*this.transitionDelay:0)))):(i.noFade||b(),w())})}hasChanged(){return this.current.length!==this.images.length||this.current.some((t,i)=>t.id!==this.images[i].id)}getImage(t){const i=t.split("|"),e=i[0].split(","),s=i[1]?i[1].split(",").map(Number):[1];let r=0,a=0;return{path:this.image.$info?.path,id:e[0],width:r=Number(e[1])||r,height:a=Number(e[2])||a,isDeepZoom:"d"==e[3],isPng:"p"==e[4],isWebP:"w"==e[4],size:s,view:e[5]?e[5].split("/").map(Number):void 0,area:e[6]?e[6].split("/").map(Number):void 0,settings:(t=>(delete t.gallery,t))(g(this.image.$settings||{},{focus:e[7]?e[7].split("-").map(Number):void 0})),cultures:e[8]?.replace(/-/g,",")||void 0}}getCols(t,i){let e=Math.ceil(i/Math.ceil(Math.sqrt(i)));if(t==i){const i=Math.floor(Math.sqrt(t)),s=[];for(let r=i;r<e+i;r++)t%r||s.push(r);s.length&&(e=s[Math.floor(s.length/2)])}return e}printGrid(t,i){i.keepGrid||this.removeGrid();const e=t.reduce((t,i)=>t+i.size[0]*(i.size[1]??1),0),s=i.columns??(i.horizontal?t.length:this.getCols(t.length,e));this._grid.style.gridTemplateColumns=`repeat(${s}, auto)`,this._grid.textContent="",this._grid.style.removeProperty("--translate"),this._grid.style.removeProperty("--scale"),t.forEach(t=>{if(!t.id)return;this._buttons.has(t.id)||this._buttons.set(t.id,document.createElement("button"));const i=this._buttons.get(t.id);"1"!=t.size.toString()?(i.style.gridArea=`auto / auto / span ${t.size[1]} / span ${t.size[0]||t.size[1]}`,this.cellSizes.set(t.id,t.size)):(i.style.removeProperty("grid-area"),this.cellSizes.delete(t.id)),i.dataset.id=t.id,this._grid.appendChild(i)}),this._grid.classList.toggle("grid-pan-zoom","grid"==this.panZoom),i.keepGrid&&this._grid.parentNode||this.micrio.insertBefore(this._grid,this.micrio.firstChild?.nextSibling??null),this.micrio.events.dispatch("grid-layout-set",this);const r=this.micrio.offsetWidth,a=this.micrio.offsetHeight,n=Math.max(0,Math.min(1,1-(i.scale??1)));this._grid.style.transform="",this._grid.childNodes.forEach(i=>{if(!i)return;const e=i,s=e.dataset.id,o=e.getBoundingClientRect(),h=t.find(t=>t.id==s),c=[n/2*o.width,n/2*o.height];h&&!h.area&&(h.area=[(o.x+c[0])/r,(o.y+c[1])/a,(o.width-2*c[0])/r,(o.height-2*c[1])/a])}),i.keepGrid||this._grid.remove()}placeGrid(){!this.clickable||this.micrio.state.$tour||this.micrio.state.$marker||this._grid.parentNode||(this.micrio.insertBefore(this._grid,this.micrio.firstChild?.nextSibling??null),this.viewUnsub=this.image.state.view.subscribe(this.updateGrid))}removeGrid(){this._grid.parentNode&&(this.viewUnsub&&this.viewUnsub(),this._grid.remove())}updateGrid(){const t=this.image.camera.getXY(0,0,!0);this._grid.style.setProperty("--translate",`translate3d(${t[0]}px, ${t[1]}px, 0)`),this._grid.style.setProperty("--scale",this.image.camera.getScale().toString()),this._grid.dispatchEvent(new CustomEvent("update"))}placeImage(t,e){const{engine:s}=this.micrio;let r=this.imageMap.get(t.id);r&&t.area?ye(1e3*e.delay).then(()=>{r.camera.setArea(t.area,{direct:0==e.duration||!e.forceAreaAni&&!i(r.visible)}),e.delay&&s.render()}):(t.lang=this.micrio.lang,s.addChild(r=new bi(s,t,{area:t.area}),this.image),this.trackImage(r));const a={duration:1e3*e.duration,timingFunction:this.timingFunction,limit:!1};if(!e.noCamAni&&!r.camera.aniDone&&r.ptr>0){const i=!!e.cover||r.camera.getCoverLimit();if(t.view||!i)r.camera.flyToView(t.view??[0,0,1,1],a).catch(()=>{});else if(t.area&&t.width&&t.height){const i=t.area[2]*this.micrio.offsetWidth/(t.area[3]*this.micrio.offsetHeight);r.camera.flyToView(i<t.width/t.height?[.5,0,.5,1]:[0,.5,1,.5],a).catch(()=>{})}else r.camera.flyToCoverView(a).catch(()=>{})}return r}removeImages(t){const{engine:i}=this.micrio;t.forEach(t=>{t.ptr>=0&&i.fadeOut(t.ptr),this._buttons.delete(t.id)}),i.render()}insideGrid(){const t=this.micrio.$current;return t==this.image||!!t&&this.imageMap.has(t.id)}async reset(t,i,s){const r=this.history[0];return this.images.forEach(t=>t.camera.stop()),this.image.camera.stop(),this.markersShown.set([]),await e(),s||i||!this.micrio.camera?.isZoomedOut()||this.micrio.state.$tour||this.$focussed||this.hasChanged()||(t=0),this.set(r?.layout||this.image.$info?.grid,{noHistory:!0,duration:t,noCamAni:i,forceAni:s,horizontal:!!r&&r.horizontal}).then(t=>(this.depth.set(this.history.length=0),this.micrio.current.set(this.image),t))}switchToGrid(){const t=this.$focussed;if(!t)return;const i=t.camera.getView();i&&this.reset(0,!0).then(()=>{t.opts.area&&this.image.camera.setView(t.opts.area,{noLimit:!0}),t.camera.setView(i,{noLimit:!0}),this.micrio.current.set(this.image)})}async flyToMarkers(t,i,e){const s=t?.split("|").map(t=>t.trim()),r=s?.[0]??"",a=r?this.images.filter(t=>!!t.$data?.markers?.find(t=>t.tags?.includes(r))):this.images;return this.set(a.map(t=>{const i=t.$data?.markers?.find(t=>t.tags?.includes(r));return this.getString(t.$info,{view:e?void 0:i?.view})}).join(";"),{duration:i,horizontal:"h"==s?.[1]})}async back(t){const i=this.history.pop();i&&(this.depth.set(this.history.length),this.micrio.current.set(this.image),this.$focussed&&this.blur(),await this.set(i.layout,{duration:t,noHistory:!0,horizontal:i.horizontal,view:i.view}))}setTimingFunction(t){this.micrio.engine.setGridTransitionTimingFunction(di.Camera.TimingFunction[this.timingFunction=t])}clickCell(t){const i="string"==typeof t?this.images.find(t=>t.id==this.micrio.id):t;if(this.clickable&&i)if(this._buttons.forEach(t=>t.classList.remove("focussed")),this._buttons.get(i.id)?.classList.add("focussed"),"zoom"==this.clickable){const t=i.opts.area??[0,0,1,1];this.image.camera.flyToView(t,{duration:1e3*this.aniDurationIn,limit:!1})}else this.focus(i)}async focus(t,e={}){if(!t)return this.back();e.coverLimit&&(e.cover=!0);const s=this.micrio;i(s.visible).find(t=>t==this.image)||s.current.set(this.image);const r=this.$focussed;if(r==t)return;e.transition?.startsWith("slide-")||0!=e.duration&&(!r||s.engine.areaAnimating(r.ptr)||this.current.includes(t))||t.camera.setArea([0,0,1,1],{noDispatch:!0,direct:!0}),r&&this.blur(),t.camera.setCoverLimit(!!e.cover),this.setTimingFunction("ease");const a=await this.transition(t,r,this.getString(t.$info,{view:e.view}),e);return s.engine.setZIndex(t.ptr,3),this.focussed.set(t),i(t.visible)||"crossfade"!=e.transition&&e.transition||(e.duration=0),this.set(a,{noBlur:!0,duration:e.duration,forceAreaAni:"crossfade"!=e.transition,cover:!!e.cover,coverLimit:!!e.coverLimit}).then(()=>{s.events.dispatch("grid-focus",t),this.removeGrid(),s.$current!=t&&s.current.set(t),this.image.camera.setLimit([0,0,1,1])}).catch(()=>{})}async transition(t,i,e,{duration:s,view:r,transition:a,noViewAni:n,exitView:o,blur:h,cover:c}){if(!a)return e;const{engine:l}=this.micrio;if("crossfade"==a&&(t.camera.setArea([0,0,1,1]),n=!0),r&&n&&t.camera.setView(r,{noRender:!0,noLimit:!0}),!i||"crossfade"==a)return e;const d=a.startsWith("slide")||a.startsWith("swipe"),m=a.startsWith("behind"),u=d?a.endsWith("-up")?0:a.endsWith("-down")?180:a.endsWith("-left")?270:90:void 0;if((d||m)&&l.fadeTo(t.ptr,.9999,!0),a.startsWith("slide"))t.camera.setArea(xe[u],{noDispatch:!0,direct:!0});else if(a.startsWith("swipe"))t.camera.setArea(ke[u],{noDispatch:!0,direct:!0}),e=[this.getString(i.$info,{view:o??i.camera.getView(),area:Ee[u]}),this.getString(t.$info,{view:r,area:[0,0,1,1]})].join(";");else if(m){t.camera.setArea([0,0,1,1]),t.camera.setView([0,0,1,1]);const e=[this.getString(i.$info,{view:[0,0,1,1]}),this.getString(t.$info,{view:[0,0,1,1]})];"behind-left"==a&&e.reverse(),await this.set(e.join(";"),{noBlur:!0,horizontal:!0,coverLimit:c}).then(()=>ye(200))}if(h&&!isNaN(h)&&h>0){const t=(s=s??this.nextCrossFadeDuration??this.aniDurationIn)/2,i=this.micrio.canvas.element.style;i.transition=`filter ${t}s ease`,i.filter=`blur(${h}px)`,setTimeout(()=>{i.filter="",setTimeout(()=>i.transform="",1e3*t)},1e3*t)}return e}blur(){const t=this.$focussed;t&&(this.micrio.engine.setZIndex(t.ptr,2),this.micrio.events.dispatch("grid-blur"),this.focussed.set(void 0),this.image.camera.setLimit([0,0,1,1]),this.micrio.current.set(this.image))}tourEvent(t){const i=t.detail;i&&i.action?.startsWith("grid:")&&i.active&&this.action(i.action.slice(5),i.data,i.end-i.start)}action(t,i,e){"string"==typeof t&&(t=di.Grid.GridActionType[t]);const s=t+(i??"");if(this.lastAction==s)return;const r=this.actionHandlers[t];r?r(i,e):console.warn("Warning: unknown grid tour event",t),this.lastAction=s}async enlarge(t,i,e=i){return this.set((this.history[this.history.length-1]?.layout||this.image.$info.grid).split(";").map((s,r)=>`${s}|${r==t?`${i},${e}`:1}`).join(";"),{noHistory:!0,keepGrid:!0,duration:500})}getImageAt(t,i){const e=this.micrio.$current;if(e&&this.images.some(t=>t===e))return e;if("grid"==this.panZoom)return this.image;const s=this.image.camera.getCoo(t,i,!0),r=s[0],a=s[1];return this.current.find(t=>{const i=t.opts.area;return i&&r>=i[0]&&r<=i[0]+i[2]&&a>=i[1]&&a<=i[1]+i[3]})}getRelativeView(t,i){const e=t.opts.area??[0,0,1,1];return[e[0]+e[2]*i[0],e[1]+e[3]*i[1],e[2]*i[2],e[3]*i[3]]}},Ce=class{constructor(t){this.ctx=t,this.handle=this.handle.bind(this)}hook(){document.addEventListener("keydown",this.handle)}unhook(){document.removeEventListener("keydown",this.handle)}handle(t){if(this.ctx.isPanning()||this.ctx.isPinching()||!this.ctx.micrio.$current?.camera)return;if(Me.handlingKeys&&(t.key.startsWith("Arrow")||"Enter"==t.key||" "==t.key||"Escape"==t.key))return;const i=this.ctx.micrio.$current.camera,e=this.ctx.micrio.offsetWidth/2,s=this.ctx.micrio.offsetHeight/2;let r=0,a=0;switch(t.key){case"ArrowUp":a-=s;break;case"ArrowDown":a+=s;break;case"ArrowLeft":r-=e;break;case"ArrowRight":r+=e;break;case"+":case"=":i.zoom(-200,150).catch(()=>{});break;case"-":case"_":i.zoom(200,150).catch(()=>{});break;default:return}t.preventDefault(),t.stopPropagation(),0==r&&0==a||i.pan(r,a,150)}},Se=class{constructor(t){this.ctx=t,this.tap=this.tap.bind(this),this.click=this.click.bind(this)}hookTap(){this.ctx.el.addEventListener("touchstart",this.tap)}unhookTap(){this.ctx.el.removeEventListener("touchstart",this.tap)}hookClick(){this.ctx.el.addEventListener("dblclick",this.click)}unhookClick(){this.ctx.el.removeEventListener("dblclick",this.click)}tap(t){if(!(St.hasTouch&&t instanceof TouchEvent))return;const i=performance.now();1==t.touches.length&&i-this.ctx.vars.dbltap.lastTapped<250&&(t.stopPropagation(),t.preventDefault(),this.click(t)),this.ctx.vars.dbltap.lastTapped=i}click(t){const i=t instanceof TouchEvent?t.touches[0]:t;this.ctx.getImage({x:i.clientX,y:i.clientY})?.camera.zoom(-300,500,i.clientX,i.clientY,1,!this.ctx.micrio.$current?.album).catch(()=>{})}},Ae=class{get $enabled(){return i(this.enabled)}constructor(i){this.micrio=i,this.enabled=t(!1),this.hooked=!1,this.panning=!1,this.pinching=!1,this.clicked=!1,this.wheeling=!1,this.controlZoom=!1,this.twoFingerPan=!1,this.pScale=1,this.hasTouch=St.hasTouch&&"ontouchstart"in self,this.hasUsedCtrl=!1,this.vars={drag:{prev:void 0,start:[0,0,0],image:void 0},dbltap:{lastTapped:0},pinch:{image:void 0,sDst:0,wasPanning:!1}},this.activePointers=new Map,this.el=i.canvas.element,this.dragHandler=new ge(this),this.pinchHandler=new fe(this,this.dragHandler),this.pointerPinchHandler=new ve(this,this.dragHandler),this.gestureHandler=new be(this),this.wheelHandler=new we(this),this.keyboardHandler=new Ce(this),this.doubleTapHandler=new Se(this),this.enabled.subscribe(t=>{t?this.hook():this.unhook()}),i.visible.subscribe(t=>this.visible=t),i.current.subscribe(t=>{t&&!this.settings&&o(t.info).then(i=>{i&&(this.settings=t.$settings,!t.error&&this.settings.hookEvents&&this.enabled.set(!0))})})}isEnabled(){return this.$enabled}isPanning(){return this.panning}isPinching(){return this.pinching}setPanning(t){this.panning=t}setPinching(t){this.pinching=t}isWheeling(){return this.wheeling}setWheeling(t){this.wheeling=t}isControlZoom(){return this.controlZoom}isTwoFingerPan(){return this.twoFingerPan}getVisible(){return this.visible}setCapturedPointerId(t){this.capturedPointerId=t}setPinchFactor(t){this.pinchFactor=t}setPScale(t){this.pScale=t}setHasUsedCtrl(t){this.hasUsedCtrl=t}get isNavigating(){return this.panning||this.pinching||this.wheeling||this.clicked}dispatch(t,i){this.micrio.dispatchEvent(new CustomEvent(t,void 0!==i?{detail:i}:void 0))}getImage(t){if(!this.visible)return;const i=this.micrio.offsetWidth,e=this.micrio.offsetHeight,s=Math.max(0,Math.min(1,t.x/i)),r=Math.max(0,Math.min(1,t.y/e)),a=this.visible?.find(t=>!!t.opts.secondaryTo),n=this.visible.filter(t=>!t.noImage),o=this.micrio.canvases.find(t=>t.grid);if(o)return o.grid?.getImageAt(t.x,t.y)??this.micrio.$current;const h=1==n.length?n[0]:n.find(({grid:t,opts:{area:i}})=>(!a||!t)&&(!!i&&(s>=i[0]&&s<=i[0]+i[2]&&r>=i[1]&&r<=i[1]+i[3])));return h&&h.opts.secondaryTo&&h.opts.isPassive&&h.opts.area&&(t.x-=h.opts.area[0]*i,t.y-=h.opts.area[1]*e),!h||h.grid||h.opts.secondaryTo&&h.opts.isPassive?this.micrio.$current:h}hook(){if(this.hooked)return;this.hooked=!0;const t=this.settings;t&&(this.twoFingerPan=!!t.twoFingerPan,this.twoFingerPan?this.micrio.setAttribute("data-can-pan",""):this.micrio.removeAttribute("data-can-pan"),t?.hookKeys&&this.hookKeys(),t.hookDrag&&this.hookDrag(),t.noZoom||this.hookZoom())}unhook(){this.hooked&&(this.hooked=!1,this.activePointers.clear(),this.unhookDrag(),this.unhookZoom(),this.unhookKeys())}hookKeys(){this.keyboardHandler.hook()}unhookKeys(){this.keyboardHandler.unhook()}hookZoom(){const t=this.settings;this.controlZoom=!!t?.controlZoom,t&&!t.hookPinch||this.hookPinch(),(!t||t.hookScroll||this.controlZoom)&&this.hookScroll(),this.micrio.canvas.$isMobile?this.doubleTapHandler.hookTap():this.doubleTapHandler.hookClick()}unhookZoom(){this.unhookPinch(),this.unhookScroll(),this.micrio.canvas.$isMobile?this.doubleTapHandler.unhookTap():this.doubleTapHandler.unhookClick()}get scrollHooked(){return this.wheelHandler.hooked}hookScroll(){this.wheelHandler.hook()}unhookScroll(){this.wheelHandler.unhook()}hookPinch(){St.iOS&&this.hasTouch?this.pinchHandler.hook():this.pointerPinchHandler.hook(),this.gestureHandler.hook()}unhookPinch(){St.iOS&&this.hasTouch?this.pinchHandler.unhook():this.pointerPinchHandler.unhook(),this.gestureHandler.unhook()}hookDrag(){this.dragHandler.hook()}unhookDrag(){this.dragHandler.unhook()}},Le=class t{static{this.events=["load","show","hide","marker-open","marker-opened","marker-closed","tour-start","tour-stop","tour-step","tour-ended"]}constructor(t){this.micrio=t,this.gtag="gtag"in window?window.gtag:void 0,this.hooked=!1,this.tag=this.tag.bind(this)}hook(){!this.hooked&&this.gtag&&(this.hooked=!0,this.tag(new CustomEvent("init")),t.events.forEach(t=>this.micrio.addEventListener(t,this.tag)))}unhook(){this.hooked&&(this.hooked=!1,this.tag(new CustomEvent("hide")),t.events.forEach(t=>this.micrio.removeEventListener(t,this.tag)))}tag(t){if(!this.gtag)return;const i=t.detail,e=this.micrio.$current,s={event_category:"Micrio",event_action:t.type};this.micrio.lang&&(s.culture=this.micrio.lang),"init"==t.type&&(s.micrio_version=h),"load"==t.type&&e?.$info&&(s.image_version=e.$info.version);const r=null!==i&&"object"==typeof i&&"currentStep"in i?i.currentStep:null;null!=r&&(s.event_value=r);const a=i&&i.title?i.title:e&&e.$info&&e.$info.title;s.event_label=this.micrio.id+(a?" - "+a:""),this.gtag("event",t.type,s)}};var Pe=class e{get type(){return this.config.type}constructor(i,e,s,r){this.parent=null,this.swiper=null,this.grid=null,this.currentIndex=t(0),this.containerWidth=0,this.containerHeight=0,this.engine=e,this.micrio=s,this.config=r;const a="switch"==r.type,n=r.isSpreads,o=n?r.coverPages??0:0;a&&(this.containerHeight=Math.max(...i.map(t=>t.height)),this.containerWidth=Math.max(...i.map(t=>t.width*(n?2:1)))),this.images=i.map((t,s)=>{const h=r.revisions?.[t.id],c={skipMeta:!0,...r.settings};void 0!==r.archiveLayerOffset&&(c.gallery={...c.gallery||{},archive:!0,archiveLayerOffset:r.archiveLayerOffset});const l={};if(a){let e;l.isEmbed=!0,l.useParentCamera=!0,e=n?s-o<0||s==i.length-1&&(s-o)%2==0?[.25,0,.5,1]:(s-o)%2==0?[0,0,.5,1]:[.5,0,.5,1]:[0,0,1,1];let r=function(t,i,e,s,r){const[a,n,o,h]=t,c=o*i,l=h*e,d=Math.min(c/s,l/r),m=s*d/i,u=r*d/e;return[a+o/2-m/2,n+h/2-u/2,m,u]}(e,this.containerWidth,this.containerHeight,t.width,t.height);n&&(.5===e[0]?r[0]=.5:0===e[0]&&(r[0]=.5-r[2])),l.area=r}else l.area=[s,0,1,1];return new bi(e,{id:t.id,path:t.path,width:t.width,height:t.height,isDeepZoom:t.isDeepZoom,isPng:t.isPng,isWebP:t.isWebP,tileSize:t.tileSize??m.tileSize,revision:h,settings:c},l)}),queueMicrotask(()=>this.images.forEach(t=>t.loadBundleData()))}static fromIIIF(t,i,s){if("sc:Manifest"===t["@type"]||t.sequences)throw new O("IIIF_V2_UNSUPPORTED",{displayMessage:"Only IIIF Presentation API 3 manifests are supported"});if("Manifest"===t.type){const r=t.items?.flatMap(t=>t.items?.[0]?.items?.[0]?.body)?.filter(t=>t?.service?.[0]?.id)??[];if(!r.length)throw new O("NO_CANVASES",{displayMessage:"No valid IIIF canvases found in the manifest"});const a=r.map(t=>({id:t.service[0].id,width:t.width,height:t.height,isPng:"image/png"===t.format,path:t.service[0].id.replace(/\/[^/]*$/,""),tileSize:m.tileSize}));return 1===a.length?null:new e(a,i,s,{type:"swipe",settings:{}})}return null}static fromAssets(t,i,s,r){const a=r?.basePath??s.$current?.dataPath??"https://b.micr.io/";return new e(t.map(t=>({id:t.micrioId??t.id,path:a,width:t.width,height:t.height,isDeepZoom:t.isDeepZoom,isPng:t.isPng,isWebP:t.isWebP,tileSize:1024})),i,s,{type:"swipe",startId:r?.startId,settings:{}})}static async fromArchive(t,i,s,r,a){const n={type:"swipe",...a},o=await e.getArchiveIndex(t.split(".")[0],i,s,r);return n.archiveLayerOffset=o.delta,new e(o.images.sort(e.sortArchiveImages(n.sort)).map(t=>({id:t.id,path:i,width:t.width,height:t.height,isDeepZoom:t.isDeepZoom,isPng:t.isPng,isWebP:t.isWebP,tileSize:t.tileSize||1024})),s,r,n)}static async fromGrid(t,i,s,r){const a={type:"grid",...r};a.settings||(a.settings={}),a.settings.zoomLimit=15,a.settings.minimap=!1;const n=r?.path??"https://r2.micr.io/";if(a.archive&&a.archive==t){const r=await e.getArchiveIndex(t.split(".")[0],n,i,s),o=a.sort;o&&r?.images&&r.images.sort(e.sortArchiveImages(o)),t=r.images.map(t=>Me.getString(t,{cultures:"cultures"in t?t.cultures.join("-"):void 0})).join(";")}const o=new e(t.split(";").map(t=>t.trim()).map(t=>{const i=t.split(",").map(t=>isNaN(t)?t:Number(t));return{id:i[0],width:i[1]??0,height:i[2]??0,path:n}}),i,s,a);return o._gridString=t,o}static async fromAlbum(t,i,s,r){const a=W.getAlbum(t);if(!a)return null;const n=r?.path??W.getOrganisation()?.baseUrl??"https://r2.micr.io/";a.archive&&await fi.load(n,"g/"+a.archive,r?.onProgress);const o={...a,startId:r?.startId??a.startId};return a.settings&&(o.settings={...a.settings}),"grid"===a.type?e.fromGrid(a.archive,i,s,{...o,path:n}):e.fromArchive(a.archive,n,i,s,o)}static{this.getArchiveIndex=async(t,i,e,s)=>fi.get(`${i}${t}.json`).then(t=>(t.images.forEach(t=>X.set(`${i}${t.id}/info.json`,t)),t))}static sortArchiveImages(t){return"random"==t?()=>Math.random()-.5:"name"==t?(t,i)=>t.title&&i.title?t.title<i.title?-1:t.title>i.title?1:0:0:"-name"==t?(t,i)=>t.title&&i.title?t.title<i.title?1:t.title>i.title?-1:0:0:"-created"==t?(t,i)=>t.created&&i.created?t.created<i.created?1:t.created>i.created?-1:0:0:(t,i)=>t.created&&i.created?t.created<i.created?-1:t.created>i.created?1:0:0}getPageLayout(){const t="switch"==this.config.type,i=!!this.config.isSpreads,e=this.config.coverPages??0,s=[],r=[];if(t)for(let a=0;a<this.images.length;a++){const t=this.images[a].opts?.area;if(!t)continue;const n=[t[0],t[1],t[2],t[3]];if(r.push([a]),i&&a-e>=0&&(a-e)%2==0&&this.images[a+1]){const t=this.images[a+1].opts?.area;if(!t)continue;a++,r[r.length-1].push(a),n[2]=n[2]+t[2],n[3]=Math.max(n[3],t[3])}s.push(n)}else for(let a=0;a<this.images.length;a++)s.push([0,0,1,1]),r.push([a]);return{pages:s,pageIdxes:r}}attach(t){this.parent=t,t.__gallery=this}detach(){this.parent&&(delete this.parent.__gallery,this.parent=null)}destroy(){this.detach(),this.swiper&&(this.swiper.destroy(),this.swiper=null),this.grid=null}goto(t){this.currentIndex.set(t),this.parent&&this.engine.micrio.events.dispatch("gallery-show",t)}next(){const t=i(this.currentIndex);this.goto(Math.min(this.images.length-1,t+1))}prev(){const t=i(this.currentIndex);this.goto(Math.max(0,t-1))}},Ie=class extends HTMLElement{static get observedAttributes(){return["id","muted","data-limited","lang"]}static{this.jsonCache=X}get $current(){return this._current}get camera(){return this._current?.camera}constructor(){super(),this.printed=!1,this.canvases=[],this.current=t(),this.visible=t([]),this.canvas=new le(this),this.events=new Ae(this),this.state=new pi.Main,this.analytics=new Le(this),this.barebone=t(!1),this.webgl=new ce(this),this.engine=new se(this),this.defaultSettings=this.defaultSettings,this.loading=t(!0),this.switching=t(!1),this.isMuted=t("1"==localStorage.getItem(d)),this._lang=t(),this.gallery=t(),this.keepRendering=!1,this.initedFirst=!1,this.current.subscribe(t=>this._current=t);let i=!1;o(this.loading,{targetValue:!1}).then(()=>{this.setAttribute("data-loaded",""),this.switching.subscribe(t=>{t?this.setAttribute("data-switching",""):(i||e().then(()=>this.events.dispatch("show",this)),i=!0,this.removeAttribute("data-switching"))});const t=this.querySelector("img.preview");t&&setTimeout(()=>t.remove(),500)})}attributeChangedCallback(t,e,s){switch(t){case"id":if(!this.isConnected||!s)return;this.printed?this.open(s):this.print();break;case"muted":this.isMuted.set(this.hasAttribute("muted"));break;case"data-limited":this.engine?._vertexBuffer&&this.$current?.ptr&&this.engine.setLimited(this.$current.ptr,!!s);break;case"lang":{let t=i(this._lang);if(t!=s){this._lang.set(s);let i=s.split("-")[0];rt.set(st[s]??st[i]??st.en),s&&(lt.includes(s)?this.setAttribute("dir","rtl"):this.removeAttribute("dir")),t&&this.events.dispatch("lang-switch",s)}break}}}connectedCallback(){this.canvas.place(),this.id&&!this.printed&&this.print(),"muted"in this||(Object.defineProperty(this,"muted",{get(){return i(this.isMuted)},set(t){t?this.setAttribute("muted",""):this.removeAttribute("muted")}}),this.isMuted.subscribe(t=>{this.muted=t,t?(localStorage.setItem(d,"1"),this.events.dispatch("audio-mute")):(localStorage.removeItem(d),this.events.dispatch("audio-unmute"))}))}addEventListener(t,i,e){super.addEventListener(t,i,e)}removeEventListener(t,i,e){super.removeEventListener(t,i,e)}destroy(){this.current.set(void 0),this.events.enabled.set(!1),this.canvas.unhook(),this.analytics.unhook(),this.engine.unbind(),this._ui&&this._ui.remove(),delete this._ui,this.webgl.dispose(!0),this.printed=!1}async print(){if(this.printed)return;this.printed=!0,await e();const t=this.getOptions();if(t.settings||(t.settings={}),this.defaultSettings&&g(this.defaultSettings,t.settings),t.settings.noControls&&this.state.ui.controls.set(!1),t.id&&ui(t.id)&&!this.hasAttribute("width")&&!this.hasAttribute("height")){const i=await W.getInfo(t.id).catch(()=>{});if(i?.albumId){const e=await Pe.fromAlbum(i.albumId,this.engine,this,{startId:t.id,onProgress:t=>this._ui?.setProps?.({loadingProgress:t})}).catch(()=>null);if(e)return void this._openGalleryFromController(e,t)}}if(t.id&&t.id.startsWith("http")){const i=await F(t.id).catch(t=>{this.printError(t)});if(!i)return;let e;try{e=Pe.fromIIIF(i,this.engine,this)}catch(s){return void this.printError(s)}if(e)return void this._openGalleryFromController(e,t);const r=i["@id"]||i.id||t.id.replace(/info.json$/,"");t.id=r,t.width=i.width,t.height=i.height,t.isIIIF=!0,t.path=r.replace(/\/[^/]*$/,""),t.tileSize=i.tiles?.[0]?.width??m.tileSize}this.keepRendering=!!t.settings.keepRendering;const i=t.id||t.grid;if(this.events.dispatch("print",t),void 0!==t.settings.lazyload&&"IntersectionObserver"in window){const e=new IntersectionObserver(s=>{s[0]&&s[0].isIntersecting&&(e.unobserve(this),i&&this.open(t))},{rootMargin:100*t.settings.lazyload+"% 0px"});e.observe(this)}else i&&requestAnimationFrame(()=>this.open(t))}printUI(t,i){if(this._ui)this._ui.setProps?.({noHTML:t,noLogo:i});else{const e=document.createElement("micrio-main");this._ui=e,e.setProps({micrio:this,noHTML:t,noLogo:i}),this.appendChild(e)}}printError(t){const i=t instanceof O?t.displayMessage:(t instanceof Error?t.message:t)??"An unknown error has occurred";console.error("Error:",i+(t instanceof O?` (${t.code}: ${t.message})`:"")),this._ui||this.printUI(!1,!1),this._ui?.setProps?.({error:i}),this.loading.set(!1)}open(t,i={}){this.printed||this.print();const s="string"==typeof t,r=this.getOptions();let a=s?{...r,id:t}:t;if(a.settings||(a.settings={}),r.settings?.gallery?.archive&&(/\.\d+$/.test(r.settings.gallery.archive)||delete r.settings.gallery.archive),s||g(r.settings,a.settings),this.defaultSettings&&g(this.defaultSettings,a.settings),a.settings?.gallery?.settings&&g(a.settings.gallery.settings,a.settings),this.$current&&a.id==this.$current?.id)return this.$current;i.splitScreen||i.gridView||!this.$current||this.switching.set(!0),a.settings.noGTag||this.analytics.hook(),this.printed=!0,this.printUI(!!a.settings.noUI,!!a.settings.noLogo);let n=this.canvases.find(t=>a.id&&t.id==a.id),h=!1;const c=this.canvases[0]?.grid;if(!n&&c){const t=a.id?c.images.find(t=>t.id==a.id):void 0;h=!!t,n=a.id?t:this.canvases[0],h&&!c.insideGrid()&&this.current.set(this.canvases[0])}if(n||(this.canvases.length&&(a.path=this.canvases[0].dataPath,a.lang=this.lang),this.canvases.push(n=new bi(this.engine,a,i.splitScreen?{secondaryTo:i.splitTo??this._current,isPassive:i.isPassive}:void 0))),i.gallery&&(i.gallery.attach(n),this.gallery.set(i.gallery)),i.startView&&(n.state.view.set(a.settings.view=i.startView),n.ptr>0&&n.engine.ready&&n.camera.setView(a.settings.view,{noRender:!0})),this.lang||(this.lang="en"),this.engine.load(),!this.webgl.gl)try{this.webgl.init()}catch(l){return this.printError(l),n}return o(n.info).then(t=>{if(t&&n){if(!this.initedFirst){switch(this.canvas.hook(),this._current?.$settings?.theme){case"light":this.setAttribute("data-light-mode","");break;case"os":this.setAttribute("data-auto-scheme","")}this.initedFirst=!0}t.grid&&!n.grid&&(n.grid=new Me(this,n)),e().then(()=>this.dispatchEvent(new CustomEvent("load",{detail:n}))),i.splitScreen&&e().then(()=>{n&&(c?.image.camera.aniDoneAdd&&c.image.camera.aniDoneAdd.length>0?c.image.camera.aniDoneAdd.push(()=>n?.splitStart()):n.splitStart())})}}),this.engine.set360Orientation(i.vector?.direction??0,i.vector?.distanceX??0,i.vector?.distanceY??0),this.engine.preventDirectionSet=!i.vector,!h||i.gridView&&c?.current.find(t=>t.id==a.id)?i.splitScreen?this.engine.setCanvas(n):this.current.set(n):c?.focus(n,{view:a.settings?.view}).then(()=>this.current.set(n)),n.noImage&&this.loading.set(!1),n}close(t){t.opts.secondaryTo?t.splitEnd():this.engine.removeCanvas(t)}openGallery(t,i,e){this.printUI(!1,!0),this.engine.ready||this.engine.load(),this.webgl.gl||this.webgl.init();const s=Pe.fromAssets(t,this.engine,this,{startId:i,basePath:e});this._openGalleryFromController(s,{})}_openGalleryFromController(t,i){const e="switch"==t.type,s={};if(e?(s.width=t.containerWidth,s.height=t.containerHeight):(s.width=this.offsetWidth*this.canvas.getRatio(),s.height=this.offsetHeight*this.canvas.getRatio()),s.settings={view:[0,0,1,1],gallery:{...t.config},pinchZoomOutLimit:!!e||void 0},t.config.settings&&Object.assign(s.settings,t.config.settings),"grid"==t.type)return s.settings.zoomLimit=15,s.settings.minimap=!1,s.settings?.grid?.clickable&&void 0===s.settings?.hookKeys&&(s.settings.hookKeys=!0),s.grid=t._gridString,s.path=W.getOrganisation()?.baseUrl??"https://r2.micr.io/",void this.open(s,{...i});this.open(s,{...i,gallery:t})}getOptions(){const t={gallery:{}},i={settings:t,id:this.id},e=(t,i,e)=>{const s=i.split(".");for(let r=0;r<s.length-1;r++)t=t[s[r]];t[s[s.length-1]]=e};for(const s in u.STRINGS){const r=u.STRINGS[s],a=this.getAttribute(s),n=r.f||s.replace("data-","");a&&e(r.r?i:t,n,a)}for(const s in u.BOOLEANS){const r=u.BOOLEANS[s],a=this.getAttribute(s),n=r.f||s.replace("data-",""),o=null!=a&&""==a||"true"==a;(o||"false"==a)&&e(r.r?i:t,n,r.n?!o:!!o)}for(const s in u.NUMBERS){const r=u.NUMBERS[s],a=r.f||s.replace("data-","");let n=this.getAttribute(s);void 0!==r.dN&&null==n&&(n=r.dN),null==n||isNaN(Number(n))||e(r.r?i:t,a,Number(n))}for(const s in u.ARRAYS){const r=u.ARRAYS[s],a=this.getAttribute(s),n=r.f||s.replace("data-","");null!=a&&e(r.r?i:t,n,a.split(",").map(t=>Number(t)))}return t.static&&(t.noUI=t.skipMeta=!0,t.hookEvents=!1),i}get lang(){return i(this._lang)}set lang(t){this.setAttribute("lang",t)}};Ie.VERSION=h,customElements.define("micr-io",Ie),console.info("%c◈%c Micrio %cv"+h+" - https://micr.io/","color: #00d4ee","color: #c5ff5b","color: inherit")}();