@car-cutter/react-webplayer 3.1.1 → 3.1.2

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/dist/legacy.d.ts CHANGED
@@ -1,61 +1,59 @@
1
1
  import { FC } from 'react';
2
2
  import { PropsWithChildren } from 'react';
3
3
 
4
- export declare const ANALYTICS_EVENT_IDENTIFY = "analytics-identify";
4
+ export declare const ANALYTICS_EVENT_DISPLAY = "analytics-display";
5
5
 
6
- export declare const ANALYTICS_EVENT_PAGE = "analytics-page";
6
+ export declare const ANALYTICS_EVENT_ERROR = "analytics-error";
7
7
 
8
- export declare const ANALYTICS_EVENT_TRACK = "analytics-track";
8
+ export declare const ANALYTICS_EVENT_INTERACTION = "analytics-interaction";
9
9
 
10
- declare type AnalyticsEventBase = {
11
- type: AnalyticsEventType;
10
+ export declare const ANALYTICS_EVENT_LOAD = "analytics-load";
11
+
12
+ declare type AnalyticsDisplayEvent = {
13
+ type: "display";
12
14
  timestamp: string;
13
- instance_id: string;
15
+ instance: WebplayerInstance;
16
+ item: WebplayerDisplayedItem;
14
17
  };
15
18
 
16
- declare type AnalyticsEventType =
17
- | AnalyticsEventTypeIdentify
18
- | AnalyticsEventTypePage
19
- | AnalyticsEventTypeTrack;
20
-
21
- declare type AnalyticsEventTypeIdentify = "identify";
22
-
23
- declare type AnalyticsEventTypePage = "page";
19
+ declare type AnalyticsErrorEvent = {
20
+ type: "error";
21
+ timestamp: string;
22
+ instance: WebplayerInstance;
23
+ current?: WebplayerDisplayedItem;
24
+ action?: WebplayerAction;
25
+ error: WebplayerError;
26
+ };
24
27
 
25
- declare type AnalyticsEventTypeTrack = "track";
28
+ declare type AnalyticsInteractionEvent = {
29
+ type: "interaction";
30
+ timestamp: string;
31
+ instance: WebplayerInstance;
32
+ current: WebplayerDisplayedItem;
33
+ action: WebplayerAction;
34
+ };
26
35
 
27
- declare type AnalyticsIdentifyEvent = Omit<AnalyticsEventBase, "type"> &
28
- AnalyticsIdentifyEventProps;
36
+ declare type AnalyticsLoadEvent = {
37
+ type: "load";
38
+ timestamp: string;
39
+ instance: WebplayerInstance;
40
+ config: AnalyticsLoadEventProps["config"];
41
+ };
29
42
 
30
- declare type AnalyticsIdentifyEventProps = {
31
- type: AnalyticsEventTypeIdentify;
32
- browser_id: string;
33
- session_id: string;
34
- referrer: string;
35
- origin: string;
36
- page_url: string;
37
- user_agent: string;
38
- wp_properties: {
43
+ declare type AnalyticsLoadEventProps = {
44
+ type: "load";
45
+ config: {
39
46
  composition_url: string;
40
-
41
- // Integration mode
42
47
  integration: boolean;
43
48
  max_items_shown: number;
44
-
45
- // Layout
46
49
  hide_categories_nav: boolean;
47
50
  infinite_carrousel: boolean;
48
51
  permanent_gallery: boolean;
49
-
50
- // Medias loading
51
52
  media_load_strategy: string;
52
53
  min_media_width: number;
53
- max_media_width: number;
54
54
  preload_range: number;
55
55
  auto_load_360: boolean;
56
56
  auto_load_interior_360: boolean;
57
-
58
- // Miscellaneous
59
57
  categories_filter: string;
60
58
  extend_behavior: string;
61
59
  event_prefix: string;
@@ -64,44 +62,6 @@ declare type AnalyticsIdentifyEventProps = {
64
62
  };
65
63
  };
66
64
 
67
- declare type AnalyticsPageEvent = Omit<AnalyticsEventBase, "type"> &
68
- AnalyticsPageEventProps;
69
-
70
- declare type AnalyticsPageEventProps = {
71
- type: AnalyticsEventTypePage;
72
- category_id: string;
73
- category_name: string;
74
- items_count: number;
75
- page_properties: {
76
- item_type: string;
77
- item_position: number;
78
- };
79
- };
80
-
81
- declare type AnalyticsTrackEvent = Omit<AnalyticsEventBase, "type"> &
82
- AnalyticsTrackEventProps;
83
-
84
- declare type AnalyticsTrackEventProps = {
85
- type: AnalyticsEventTypeTrack;
86
- category_id: string;
87
- category_name: string;
88
- item_type: string;
89
- item_position: number;
90
- action_properties: {
91
- action_name: string;
92
- action_field: string;
93
- action_value:
94
- | bigint
95
- | boolean
96
- | null
97
- | number
98
- | string
99
- | symbol
100
- | undefined
101
- | object;
102
- };
103
- };
104
-
105
65
  declare type AspectRatio = `${number}:${number}`;
106
66
 
107
67
  declare type Category = {
@@ -215,6 +175,12 @@ export declare const WEB_PLAYER_WC_TAG = "cc-webplayer";
215
175
 
216
176
  export declare const WebPlayer: FC<WebPlayerProps>;
217
177
 
178
+ declare type WebplayerAction = {
179
+ name: string;
180
+ field: string;
181
+ value: unknown;
182
+ };
183
+
218
184
  export declare const WebPlayerCustomMedia: FC<PropsWithChildren<WebPlayerCustomMediaProps>>;
219
185
 
220
186
  export declare type WebPlayerCustomMediaProps = {
@@ -222,6 +188,20 @@ export declare type WebPlayerCustomMediaProps = {
222
188
  thumbnailSrc?: string;
223
189
  };
224
190
 
191
+ declare type WebplayerDisplayedItem = {
192
+ category_id: string;
193
+ category_name: string;
194
+ item_type: string;
195
+ item_position: number;
196
+ items_count?: number;
197
+ };
198
+
199
+ declare type WebplayerError = {
200
+ name: string;
201
+ message: string;
202
+ stack?: string;
203
+ };
204
+
225
205
  export declare const WebPlayerIcon: FC<PropsWithChildren<WebPlayerIconProps>>;
226
206
 
227
207
  declare type WebPlayerIconName =
@@ -252,6 +232,13 @@ export declare type WebPlayerIconProps = {
252
232
  name: WebPlayerIconName;
253
233
  };
254
234
 
235
+ declare type WebplayerInstance = {
236
+ instance_id: string;
237
+ browser_id?: string;
238
+ session_id?: string;
239
+ from_url?: string;
240
+ };
241
+
255
242
  export declare type WebPlayerProps = PropsWithChildren<WebPlayerProps_2> & {
256
243
  onCompositionLoading?: (url: string) => void;
257
244
  onCompositionLoaded?: (composition: Composition) => void;
@@ -266,9 +253,10 @@ export declare type WebPlayerProps = PropsWithChildren<WebPlayerProps_2> & {
266
253
  onHotspotsOff?: () => void;
267
254
  onGalleryOpen?: () => void;
268
255
  onGalleryClose?: () => void;
269
- onAnalyticsIdentify?: (event: AnalyticsIdentifyEvent) => void;
270
- onAnalyticsPage?: (event: AnalyticsPageEvent) => void;
271
- onAnalyticsTrack?: (event: AnalyticsTrackEvent) => void;
256
+ onAnalyticsLoad?: (event: AnalyticsLoadEvent) => void;
257
+ onAnalyticsDisplay?: (event: AnalyticsDisplayEvent) => void;
258
+ onAnalyticsInteraction?: (event: AnalyticsInteractionEvent) => void;
259
+ onAnalyticsError?: (event: AnalyticsErrorEvent) => void;
272
260
  } & Pick<React.HTMLAttributes<HTMLElement>, "className" | "style">;
273
261
 
274
262
  declare type WebPlayerProps_2 = {
@@ -301,11 +289,17 @@ declare type WebPlayerProps_2 = {
301
289
 
302
290
  // Analytics
303
291
  analyticsEventPrefix?: string;
292
+ /** @deprecated Prefer monitoring (enabled by default). When set, disables monitoring and sends analytics to this URL instead. */
304
293
  analyticsUrl?: string;
294
+ /** @deprecated Only used with analyticsUrl. Sets the Authorization bearer token for analytics requests. Ignored when analyticsSimpleRequestsOnly is true. */
305
295
  analyticsBearer?: string;
296
+ /** @deprecated Only used with analyticsUrl. When true, sends CORS simple requests only (disables custom headers including analyticsBearer). */
306
297
  analyticsSimpleRequestsOnly?: boolean;
307
298
  analyticsDryRun?: boolean;
308
299
  analyticsDebug?: boolean;
300
+
301
+ // Monitoring
302
+ monitoring?: boolean;
309
303
  };
310
304
 
311
305
  export { }
package/dist/legacy.js CHANGED
@@ -1,13 +1,13 @@
1
- import { W as w, a as I, b as D, c as R, d as V, e as M, f as j } from "./shared-DVyC4OMr.js";
2
- import { A as ce, g as le, h as ue, D as pe, E as fe, i as me, j as Ee, k as be, l as he, m as de, n as ye, o as ge, p as _e, q as Ce, r as Ae, s as Oe, t as Te, u as Ne } from "./shared-DVyC4OMr.js";
1
+ import { W, a as w, b as R, c as D, d as V, e as M, f as j } from "./shared-BpNLb25Y.js";
2
+ import { A as ce, g as le, h as ue, i as pe, D as fe, E as me, j as Ee, k as be, l as he, m as de, n as ye, o as _e, p as ge, q as Ae, r as Oe, s as Ce, t as Te, u as Ne, v as Se } from "./shared-BpNLb25Y.js";
3
3
  import "react/jsx-runtime";
4
- import v from "react";
5
- import A from "react-dom";
4
+ import P from "react";
5
+ import O from "react-dom";
6
6
  var k = Object.defineProperty, x = (e, t, n) => t in e ? k(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n, h = (e, t, n) => x(e, typeof t != "symbol" ? t + "" : t, n);
7
- const F = {
7
+ const Y = {
8
8
  stringify: (e) => e ? "true" : "false",
9
9
  parse: (e) => /^[ty1-9]/i.test(e)
10
- }, G = {
10
+ }, F = {
11
11
  stringify: (e) => e.name,
12
12
  parse: (e, t, n) => {
13
13
  const s = (() => {
@@ -18,7 +18,7 @@ const F = {
18
18
  })();
19
19
  return typeof s == "function" ? s.bind(n) : void 0;
20
20
  }
21
- }, Y = {
21
+ }, G = {
22
22
  stringify: (e) => JSON.stringify(e),
23
23
  parse: (e) => JSON.parse(e)
24
24
  };
@@ -28,14 +28,14 @@ function $(e) {
28
28
  (t, n, s) => `${n}-${s.toLowerCase()}`
29
29
  );
30
30
  }
31
- function L(e) {
31
+ function v(e) {
32
32
  return e.replace(/[-:]([a-z])/g, (t, n) => `${n.toUpperCase()}`);
33
33
  }
34
34
  const U = {
35
35
  stringify: (e) => e.name,
36
36
  parse: (e, t, n) => {
37
37
  const s = (() => {
38
- const m = L(t);
38
+ const m = v(t);
39
39
  if (typeof n < "u" && m in n.container)
40
40
  return n.container[m];
41
41
  })();
@@ -47,42 +47,42 @@ const U = {
47
47
  }, H = {
48
48
  stringify: (e) => e,
49
49
  parse: (e) => e
50
- }, C = {
50
+ }, A = {
51
51
  string: H,
52
52
  number: B,
53
- boolean: F,
54
- function: G,
53
+ boolean: Y,
54
+ function: F,
55
55
  method: U,
56
- json: Y
56
+ json: G
57
57
  }, b = Symbol.for("r2wc.render"), d = Symbol.for("r2wc.connected"), f = Symbol.for("r2wc.context"), i = Symbol.for("r2wc.props");
58
58
  function z(e, t, n) {
59
59
  var s, m, T;
60
60
  t.props || (t.props = e.propTypes ? Object.keys(e.propTypes) : []), t.events || (t.events = []);
61
- const y = Array.isArray(t.props) ? t.props.slice() : Object.keys(t.props), N = Array.isArray(t.events) ? t.events.slice() : Object.keys(t.events), E = {}, P = {}, g = {}, _ = {};
61
+ const y = Array.isArray(t.props) ? t.props.slice() : Object.keys(t.props), N = Array.isArray(t.events) ? t.events.slice() : Object.keys(t.events), E = {}, S = {}, _ = {}, g = {};
62
62
  for (const o of y) {
63
63
  E[o] = Array.isArray(t.props) ? "string" : t.props[o];
64
64
  const r = $(o);
65
- g[o] = r, _[r] = o;
65
+ _[o] = r, g[r] = o;
66
66
  }
67
67
  for (const o of N)
68
- P[o] = Array.isArray(t.events) ? {} : t.events[o];
69
- class S extends HTMLElement {
68
+ S[o] = Array.isArray(t.events) ? {} : t.events[o];
69
+ class L extends HTMLElement {
70
70
  constructor() {
71
71
  super(), h(this, T, !0), h(this, m), h(this, s, {}), h(this, "container"), t.shadow ? this.container = this.attachShadow({
72
72
  mode: t.shadow
73
73
  }) : this.container = this, this[i].container = this.container;
74
74
  for (const r of y) {
75
- const l = g[r], a = this.getAttribute(l), c = E[r], u = c ? C[c] : null;
75
+ const l = _[r], a = this.getAttribute(l), c = E[r], u = c ? A[c] : null;
76
76
  if (c === "method") {
77
- const p = L(l);
77
+ const p = v(l);
78
78
  Object.defineProperty(this[i].container, p, {
79
79
  enumerable: !0,
80
80
  configurable: !0,
81
81
  get() {
82
82
  return this[i][p];
83
83
  },
84
- set(W) {
85
- this[i][p] = W, this[b]();
84
+ set(I) {
85
+ this[i][p] = I, this[b]();
86
86
  }
87
87
  }), this[i][r] = u.parse(a, l, this);
88
88
  }
@@ -92,12 +92,12 @@ function z(e, t, n) {
92
92
  this[i][r] = (l) => {
93
93
  const a = r.replace(/^on/, "").toLowerCase();
94
94
  this.dispatchEvent(
95
- new CustomEvent(a, { detail: l, ...P[r] })
95
+ new CustomEvent(a, { detail: l, ...S[r] })
96
96
  );
97
97
  };
98
98
  }
99
99
  static get observedAttributes() {
100
- return Object.keys(_);
100
+ return Object.keys(g);
101
101
  }
102
102
  connectedCallback() {
103
103
  this[d] = !0, this[b]();
@@ -106,7 +106,7 @@ function z(e, t, n) {
106
106
  this[d] = !1, this[f] && n.unmount(this[f]), delete this[f];
107
107
  }
108
108
  attributeChangedCallback(r, l, a) {
109
- const c = _[r], u = E[c], p = u ? C[u] : null;
109
+ const c = g[r], u = E[c], p = u ? A[u] : null;
110
110
  c in E && p != null && p.parse && a && (this[i][c] = p.parse(a, r, this), this[b]());
111
111
  }
112
112
  [(T = d, m = f, s = i, b)]() {
@@ -118,8 +118,8 @@ function z(e, t, n) {
118
118
  }
119
119
  }
120
120
  for (const o of y) {
121
- const r = g[o], l = E[o];
122
- Object.defineProperty(S.prototype, o, {
121
+ const r = _[o], l = E[o];
122
+ Object.defineProperty(L.prototype, o, {
123
123
  enumerable: !0,
124
124
  configurable: !0,
125
125
  get() {
@@ -127,7 +127,7 @@ function z(e, t, n) {
127
127
  },
128
128
  set(a) {
129
129
  this[i][o] = a;
130
- const c = l ? C[l] : null;
130
+ const c = l ? A[l] : null;
131
131
  if (c != null && c.stringify) {
132
132
  const u = c.stringify(a, r, this);
133
133
  this.getAttribute(r) !== u && this.setAttribute(r, u);
@@ -136,26 +136,26 @@ function z(e, t, n) {
136
136
  }
137
137
  });
138
138
  }
139
- return S;
139
+ return L;
140
140
  }
141
141
  function J(e, t, n) {
142
- const s = v.createElement(t, n);
143
- return A.render(s, e), {
142
+ const s = P.createElement(t, n);
143
+ return O.render(s, e), {
144
144
  container: e,
145
145
  ReactComponent: t
146
146
  };
147
147
  }
148
148
  function X({ container: e, ReactComponent: t }, n) {
149
- const s = v.createElement(t, n);
150
- A.render(s, e);
149
+ const s = P.createElement(t, n);
150
+ O.render(s, e);
151
151
  }
152
152
  function q({ container: e }) {
153
- A.unmountComponentAtNode(e);
153
+ O.unmountComponentAtNode(e);
154
154
  }
155
- function O(e, t = {}) {
155
+ function C(e, t = {}) {
156
156
  return z(e, t, { mount: J, update: X, unmount: q });
157
157
  }
158
- const K = O(w, {
158
+ const Z = C(W, {
159
159
  shadow: "closed",
160
160
  props: {
161
161
  compositionUrl: "string",
@@ -183,49 +183,51 @@ const K = O(w, {
183
183
  analyticsBearer: "string",
184
184
  analyticsSimpleRequestsOnly: "boolean",
185
185
  analyticsDryRun: "boolean",
186
- analyticsDebug: "boolean"
186
+ analyticsDebug: "boolean",
187
+ monitoring: "boolean"
187
188
  }
188
- }), Z = O(I, {
189
+ }), K = C(w, {
189
190
  shadow: "closed",
190
191
  props: {
191
192
  index: "number",
192
193
  thumbnailSrc: "string"
193
194
  }
194
- }), Q = O(D, {
195
+ }), Q = C(R, {
195
196
  shadow: "closed",
196
197
  props: {
197
198
  name: "string"
198
199
  }
199
200
  });
200
201
  function ee() {
201
- customElements.define(V, K), customElements.define(
202
+ customElements.define(V, Z), customElements.define(
202
203
  M,
203
- Z
204
+ K
204
205
  ), customElements.define(j, Q);
205
206
  }
206
207
  function te() {
207
- R() || ee();
208
+ D() || ee();
208
209
  }
209
210
  te();
210
211
  export {
211
- ce as ANALYTICS_EVENT_IDENTIFY,
212
- le as ANALYTICS_EVENT_PAGE,
213
- ue as ANALYTICS_EVENT_TRACK,
214
- pe as DEFAULT_EVENT_PREFIX,
215
- fe as EVENT_COMPOSITION_LOADED,
216
- me as EVENT_COMPOSITION_LOADING,
217
- Ee as EVENT_COMPOSITION_LOAD_ERROR,
218
- be as EVENT_EXTEND_MODE_OFF,
219
- he as EVENT_EXTEND_MODE_ON,
220
- de as EVENT_GALLERY_CLOSE,
221
- ye as EVENT_GALLERY_OPEN,
212
+ ce as ANALYTICS_EVENT_DISPLAY,
213
+ le as ANALYTICS_EVENT_ERROR,
214
+ ue as ANALYTICS_EVENT_INTERACTION,
215
+ pe as ANALYTICS_EVENT_LOAD,
216
+ fe as DEFAULT_EVENT_PREFIX,
217
+ me as EVENT_COMPOSITION_LOADED,
218
+ Ee as EVENT_COMPOSITION_LOADING,
219
+ be as EVENT_COMPOSITION_LOAD_ERROR,
220
+ he as EVENT_EXTEND_MODE_OFF,
221
+ de as EVENT_EXTEND_MODE_ON,
222
+ ye as EVENT_GALLERY_CLOSE,
223
+ _e as EVENT_GALLERY_OPEN,
222
224
  ge as EVENT_HOTSPOTS_OFF,
223
- _e as EVENT_HOTSPOTS_ON,
224
- Ce as EVENT_ITEM_CHANGE,
225
+ Ae as EVENT_HOTSPOTS_ON,
226
+ Oe as EVENT_ITEM_CHANGE,
225
227
  j as WEB_PLAYER_ICON_WC_TAG,
226
228
  V as WEB_PLAYER_WC_TAG,
227
- Ae as WebPlayer,
228
- Oe as WebPlayerCustomMedia,
229
- Te as WebPlayerIcon,
230
- Ne as generateCompositionUrl
229
+ Ce as WebPlayer,
230
+ Te as WebPlayerCustomMedia,
231
+ Ne as WebPlayerIcon,
232
+ Se as generateCompositionUrl
231
233
  };
@@ -0,0 +1 @@
1
+ @tailwind base;@tailwind components;@tailwind utilities;.pnlm-load-button,.pnlm-load-box{display:none!important}.pnlm-container{background-image:none!important}.pnlm-about-msg{width:0;height:0;padding:0;visibility:hidden}.pnlm-about-msg a{display:none;visibility:hidden}.pnlm-container{margin:0;padding:0;overflow:hidden;position:relative;cursor:default;width:100%;height:100%;font-family:Helvetica,Nimbus Sans L,Liberation Sans,Arial,sans-serif;background:#f4f4f4 url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='67'%20height='100'%20viewBox='0%200%2067%20100'%3e%3cpath%20stroke='%23ccc'%20fill='none'%20d='M33.5,50,0,63,33.5,75,67,63,33.5,50m-33.5-50,67,25m-0.5,0,0,75m-66.5-75,67-25m-33.5,75,0,25m0-100,0,50'/%3e%3c/svg%3e") repeat;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;-ms-user-select:none;user-select:none;outline:0;line-height:1.4;contain:content;touch-action:none}.pnlm-container *{box-sizing:content-box}.pnlm-ui{position:absolute;width:100%;height:100%;z-index:1}.pnlm-grab{cursor:grab;cursor:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='26'%20width='26'%3e%3cpath%20stroke='%23000'%20stroke-width='1px'%20fill='%23fff'%20d='m15.3%2020.5s6.38-6.73%204.64-8.24-3.47%201.01-3.47%201.01%203.61-5.72%201.41-6.49c-2.2-0.769-3.33%204.36-3.33%204.36s0.873-5.76-1.06-5.76-1.58%205.39-1.58%205.39-0.574-4.59-2.18-4.12c-1.61%200.468-0.572%205.51-0.572%205.51s-1.58-4.89-2.93-3.79c-1.35%201.11%200.258%205.25%200.572%206.62%200.836%202.43%202.03%202.94%202.17%205.55'/%3e%3c/svg%3e") 12 8,default}.pnlm-grabbing{cursor:grabbing;cursor:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='26'%20width='26'%3e%3cpath%20stroke='%23000'%20stroke-width='1px'%20fill='%23fff'%20d='m15.3%2020.5s5.07-5.29%203.77-6.74c-1.31-1.45-2.53%200.14-2.53%200.14s2.74-3.29%200.535-4.06c-2.2-0.769-2.52%201.3-2.52%201.3s0.81-2.13-1.12-2.13-1.52%201.77-1.52%201.77-0.261-1.59-1.87-1.12c-1.61%200.468-0.874%202.17-0.874%202.17s-0.651-1.55-2-0.445c-1.35%201.11-0.68%202.25-0.365%203.62%200.836%202.43%202.03%202.94%202.17%205.55'/%3e%3c/svg%3e") 12 8,default}.pnlm-sprite{background-image:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='26'%20height='208'%3e%3ccircle%20fill-opacity='.78'%20cy='117'%20cx='13'%20r='11'%20fill='%23fff'/%3e%3ccircle%20fill-opacity='.78'%20cy='143'%20cx='13'%20r='11'%20fill='%23fff'/%3e%3ccircle%20cy='169'%20cx='13'%20r='7'%20fill='none'%20stroke='%23000'%20stroke-width='2'/%3e%3ccircle%20cy='195'%20cx='13'%20r='7'%20fill='none'%20stroke='%23000'%20stroke-width='2'/%3e%3ccircle%20cx='13'%20cy='195'%20r='2.5'/%3e%3cpath%20d='m5%2083v6h2v-4h4v-2zm10%200v2h4v4h2v-6zm-5%205v6h6v-6zm-5%205v6h6v-2h-4v-4zm14%200v4h-4v2h6v-6z'/%3e%3cpath%20d='m13%20110a7%207%200%200%200%20-7%207%207%207%200%200%200%207%207%207%207%200%200%200%207%20-7%207%207%200%200%200%20-7%20-7zm-1%203h2v2h-2zm0%203h2v5h-2z'/%3e%3cpath%20d='m5%2057v6h2v-4h4v-2zm10%200v2h4v4h2v-6zm-10%2010v6h6v-2h-4v-4zm14%200v4h-4v2h6v-6z'/%3e%3cpath%20d='m17%2038v2h-8v-2z'/%3e%3cpath%20d='m12%209v3h-3v2h3v3h2v-3h3v-2h-3v-3z'/%3e%3cpath%20d='m13%20136-6.125%206.125h4.375v7.875h3.5v-7.875h4.375z'/%3e%3cpath%20d='m10.428%20173.33v-5.77l5-2.89v5.77zm1-1.73%203-1.73-3.001-1.74z'/%3e%3c/svg%3e")}.pnlm-container:-moz-full-screen{height:100%!important;width:100%!important;position:static!important}.pnlm-container:-webkit-full-screen{height:100%!important;width:100%!important;position:static!important}.pnlm-container:-ms-fullscreen{height:100%!important;width:100%!important;position:static!important}.pnlm-container:fullscreen{height:100%!important;width:100%!important;position:static!important}.pnlm-render-container{cursor:inherit;position:absolute;height:100%;width:100%}.pnlm-controls{margin-top:4px;background-color:#fff;border:1px solid #999;border-color:#0006;border-radius:3px;cursor:pointer;z-index:2;-webkit-transform:translateZ(9999px);transform:translateZ(9999px)}.pnlm-control:hover{background-color:#f8f8f8}.pnlm-controls-container{position:absolute;top:0;left:4px;z-index:1}.pnlm-zoom-controls{width:26px;height:52px}.pnlm-zoom-in{width:100%;height:50%;position:absolute;top:0;border-radius:3px 3px 0 0}.pnlm-zoom-out{width:100%;height:50%;position:absolute;bottom:0;background-position:0 -26px;border-top:1px solid #ddd;border-top-color:#0000001a;border-radius:0 0 3px 3px}.pnlm-fullscreen-toggle-button,.pnlm-orientation-button,.pnlm-hot-spot-debug-indicator{width:26px;height:26px}.pnlm-hot-spot-debug-indicator{position:absolute;top:50%;left:50%;width:26px;height:26px;margin:-13px 0 0 -13px;background-color:#ffffff80;border-radius:13px;display:none}.pnlm-orientation-button-inactive{background-position:0 -156px}.pnlm-orientation-button-active{background-position:0 -182px}.pnlm-fullscreen-toggle-button-inactive{background-position:0 -52px}.pnlm-fullscreen-toggle-button-active{background-position:0 -78px}.pnlm-panorama-info{position:absolute;bottom:4px;background-color:#000000b3;border-radius:0 3px 3px 0;padding-right:10px;color:#fff;text-align:left;display:none;z-index:2;-webkit-transform:translateZ(9999px);transform:translateZ(9999px)}.pnlm-title-box{position:relative;font-size:20px;display:table;padding-left:5px;margin-bottom:3px}.pnlm-author-box{position:relative;font-size:12px;display:table;padding-left:5px}.pnlm-load-box{position:absolute;top:50%;left:50%;width:200px;height:150px;margin:-75px 0 0 -100px;background-color:#000000b3;border-radius:3px;text-align:center;font-size:20px;display:none;color:#fff}.pnlm-load-box p{margin:20px 0}.pnlm-lbox{position:absolute;top:50%;left:50%;width:20px;height:20px;margin:-10px 0 0 -10px;display:none}.pnlm-loading{animation-duration:1.5s;-webkit-animation-duration:1.5s;animation-name:pnlm-mv;-webkit-animation-name:pnlm-mv;animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;animation-timing-function:linear;-webkit-animation-timing-function:linear;height:10px;width:10px;background-color:#fff;position:relative}@keyframes pnlm-mv{0%{left:0;top:0}25%{left:10px;top:0}50%{left:10px;top:10px}75%{left:0;top:10px}to{left:0;top:0}}@-webkit-keyframes pnlm-mv{0%{left:0;top:0}25%{left:10px;top:0}50%{left:10px;top:10px}75%{left:0;top:10px}to{left:0;top:0}}.pnlm-load-button{position:absolute;top:50%;left:50%;width:200px;height:100px;margin:-50px 0 0 -100px;background-color:#000000b3;border-radius:3px;text-align:center;font-size:20px;display:table;color:#fff;cursor:pointer}.pnlm-load-button:hover{background-color:#000c}.pnlm-load-button p{display:table-cell;vertical-align:middle}.pnlm-info-box{font-size:15px;position:absolute;top:50%;left:50%;width:200px;height:150px;margin:-75px 0 0 -100px;background-color:#000;border-radius:3px;display:table;text-align:center;color:#fff;table-layout:fixed}.pnlm-info-box a{color:#fff;word-wrap:break-word;overflow-wrap:break-word}.pnlm-info-box p{display:table-cell;vertical-align:middle;padding:0 5px}.pnlm-error-msg{display:none}.pnlm-about-msg{font-size:11px;line-height:11px;color:#fff;padding:5px 8px;background:#000000b3;border-radius:3px;position:absolute;top:50px;left:50px;display:none;opacity:0;-moz-transition:opacity .3s ease-in-out;-webkit-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;z-index:1}.pnlm-about-msg a:link,.pnlm-about-msg a:visited{color:#fff}.pnlm-about-msg a:hover,.pnlm-about-msg a:active{color:#eee}.pnlm-hotspot-base{position:absolute;visibility:hidden;cursor:default;vertical-align:middle;top:0;z-index:1}.pnlm-hotspot{height:26px;width:26px;border-radius:13px}.pnlm-hotspot:hover{background-color:#fff3}.pnlm-hotspot.pnlm-info{background-position:0 -104px}.pnlm-hotspot.pnlm-scene{background-position:0 -130px}div.pnlm-tooltip span{visibility:hidden;position:absolute;border-radius:3px;background-color:#000000b3;color:#fff;text-align:center;max-width:200px;padding:5px 10px;margin-left:-220px;cursor:default}div.pnlm-tooltip:hover span{visibility:visible}div.pnlm-tooltip:hover span:after{content:"";position:absolute;width:0;height:0;border-width:10px;border-style:solid;border-color:rgba(0,0,0,.7) transparent transparent transparent;bottom:-20px;left:-10px;margin:0 50%}.pnlm-compass{position:absolute;width:50px;height:50px;right:4px;bottom:4px;border-radius:25px;background-image:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='50'%20width='50'%3e%3cpath%20d='m24.5078%206-3.2578%2018h7.5l-3.25781-18h-0.984376zm-3.2578%2020%203.2578%2018h0.9844l3.2578-18h-7.5zm1.19531%200.9941h5.10938l-2.5547%2014.1075-2.5547-14.1075z'/%3e%3c/svg%3e");cursor:default;display:none}.pnlm-world{position:absolute;left:50%;top:50%}.pnlm-face{position:absolute;-webkit-transform-origin:0 0 0;transform-origin:0 0 0}.pnlm-dragfix,.pnlm-preview-img{position:absolute;height:100%;width:100%}.pnlm-preview-img{background-size:cover;background-position:center}.pnlm-lbar{width:150px;margin:0 auto;border:#fff 1px solid;height:6px}.pnlm-lbar-fill{background:#fff;height:100%;width:0}.pnlm-lmsg{font-size:12px}.pnlm-fade-img{position:absolute;top:0;left:0}.pnlm-pointer{cursor:pointer}#textInfo .tooltip-content{font-size:1.6em;position:absolute;left:-70px;bottom:80px;width:200px;pointer-events:none;background-color:#333;color:#fff;line-height:1.2em;padding:.8em;opacity:0;-webkit-transform-origin:50% calc(100% + 6em);transform-origin:50% calc(100% + 6em);-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg);-webkit-transition:opacity .5s,-webkit-transform .5s;transition:opacity .5s,transform .5s;-webkit-transition-timing-function:ease,cubic-bezier(.17,.67,.4,1.39);transition-timing-function:ease,cubic-bezier(.17,.67,.4,1.39)}#textInfo:hover{z-index:3}#textInfo:hover .tooltip-content{opacity:1;pointer-events:all;-webkit-transform:translate3d(0,0,0) rotate3d(0,0,0,0);transform:translateZ(0) rotate3d(0,0,0,0)}#textInfo .hotspot{cursor:pointer;box-sizing:border-box}#textInfo .hotspot .out:before{speak:none;font-size:48px;line-height:90px;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;display:block;-webkit-font-smoothing:antialiased}#textInfo .hotspot .out{width:60px;height:60px;border-radius:50%;border:5px solid rgba(255,255,255,.8);-webkit-transition:-webkit-transform ease-out .1s,border .2s;-moz-transition:-moz-transform ease-out .1s,border .2s;transition:transform ease-out .1s,border .2s;box-sizing:border-box}#textInfo .hotspot .in{width:40px;height:40px;position:absolute;top:10px;left:10px;background-color:#fffc;border-radius:50%;-webkit-transition:-webkit-transform ease-out .1s,background .2s;-moz-transition:-moz-transform ease-out .1s,background .2s;transition:transform ease-out .1s,background .2s}#textInfo .hotspot .out:after{top:0;left:0;padding:0;z-index:-1;box-shadow:0 0 0 2px #ffffff1a;opacity:0;pointer-events:none;position:absolute;width:100%;height:100%;border-radius:50%;content:"";-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-transform:scale(.9);-moz-transform:scale(.9);-ms-transform:scale(.9);transform:scale(.9)}#textInfo .hotspot:hover .out{border:5px solid rgba(255,255,255,1);-webkit-transform:scale(.9);-moz-transform:scale(.9);-ms-transform:scale(.9);transform:scale(.9);color:#fff}#textInfo .hotspot:hover .in{background-color:#fff;-webkit-transform:scale(.8);-moz-transform:scale(.8);-ms-transform:scale(.8);transform:scale(.8)}#textInfo .hotspot:hover .out:after{-webkit-animation:sonarEffect 1.2s ease-out;-moz-animation:sonarEffect 1.2s ease-out;animation:sonarEffect 1.2s ease-out}@-webkit-keyframes sonarEffect{0%{opacity:.5}20%{opacity:.8;box-shadow:0 0 0 2px #ffffff1a,0 0 10px 10px #25aae1cc,0 0 0 10px #ffffff80}to{box-shadow:0 0 0 2px #ffffff1a,0 0 10px 10px #25aae1cc,0 0 0 10px #ffffff80;-webkit-transform:scale(1.5);opacity:0}}@-moz-keyframes sonarEffect{0%{opacity:.5}20%{opacity:.8;box-shadow:0 0 0 2px #ffffff1a,0 0 10px 10px #25aae1cc,0 0 0 10px #ffffff80}to{box-shadow:0 0 0 2px #ffffff1a,0 0 10px 10px #25aae1cc,0 0 0 10px #ffffff80;-moz-transform:scale(1.5);opacity:0}}@keyframes sonarEffect{0%{opacity:.5}20%{opacity:.8;box-shadow:0 0 0 2px #ffffff1a,0 0 10px 10px #25aae1cc,0 0 0 10px #ffffff80}to{box-shadow:0 0 0 2px #ffffff1a,0 0 10px 10px #25aae1cc,0 0 0 10px #ffffff80;transform:scale(1.5);opacity:0}}