@car-cutter/react-webplayer 3.1.0 → 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 = {
@@ -297,14 +285,21 @@ declare type WebPlayerProps_2 = {
297
285
  eventPrefix?: string;
298
286
  demoSpin?: boolean;
299
287
  reverse360?: boolean;
288
+ spinCursor?: string;
300
289
 
301
290
  // Analytics
302
291
  analyticsEventPrefix?: string;
292
+ /** @deprecated Prefer monitoring (enabled by default). When set, disables monitoring and sends analytics to this URL instead. */
303
293
  analyticsUrl?: string;
294
+ /** @deprecated Only used with analyticsUrl. Sets the Authorization bearer token for analytics requests. Ignored when analyticsSimpleRequestsOnly is true. */
304
295
  analyticsBearer?: string;
296
+ /** @deprecated Only used with analyticsUrl. When true, sends CORS simple requests only (disables custom headers including analyticsBearer). */
305
297
  analyticsSimpleRequestsOnly?: boolean;
306
298
  analyticsDryRun?: boolean;
307
299
  analyticsDebug?: boolean;
300
+
301
+ // Monitoring
302
+ monitoring?: boolean;
308
303
  };
309
304
 
310
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-D7cc889c.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 _e, p as ge, q as Ae, r as Ce, s as Oe, t as Te, u as Ne } from "./shared-D7cc889c.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 C 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
  })();
@@ -50,23 +50,23 @@ const U = {
50
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
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
@@ -74,15 +74,15 @@ function z(e, t, n) {
74
74
  for (const r of y) {
75
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,7 +92,7 @@ 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
  }
@@ -119,7 +119,7 @@ function z(e, t, n) {
119
119
  }
120
120
  for (const o of y) {
121
121
  const r = _[o], l = E[o];
122
- Object.defineProperty(S.prototype, o, {
122
+ Object.defineProperty(L.prototype, o, {
123
123
  enumerable: !0,
124
124
  configurable: !0,
125
125
  get() {
@@ -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 C.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
- C.render(s, e);
149
+ const s = P.createElement(t, n);
150
+ O.render(s, e);
151
151
  }
152
152
  function q({ container: e }) {
153
- C.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",
@@ -176,55 +176,58 @@ const K = O(w, {
176
176
  eventPrefix: "string",
177
177
  demoSpin: "boolean",
178
178
  reverse360: "boolean",
179
+ spinCursor: "string",
179
180
  // Analytics
180
181
  analyticsEventPrefix: "string",
181
182
  analyticsUrl: "string",
182
183
  analyticsBearer: "string",
183
184
  analyticsSimpleRequestsOnly: "boolean",
184
185
  analyticsDryRun: "boolean",
185
- analyticsDebug: "boolean"
186
+ analyticsDebug: "boolean",
187
+ monitoring: "boolean"
186
188
  }
187
- }), Z = O(I, {
189
+ }), K = C(w, {
188
190
  shadow: "closed",
189
191
  props: {
190
192
  index: "number",
191
193
  thumbnailSrc: "string"
192
194
  }
193
- }), Q = O(D, {
195
+ }), Q = C(R, {
194
196
  shadow: "closed",
195
197
  props: {
196
198
  name: "string"
197
199
  }
198
200
  });
199
201
  function ee() {
200
- customElements.define(V, K), customElements.define(
202
+ customElements.define(V, Z), customElements.define(
201
203
  M,
202
- Z
204
+ K
203
205
  ), customElements.define(j, Q);
204
206
  }
205
207
  function te() {
206
- R() || ee();
208
+ D() || ee();
207
209
  }
208
210
  te();
209
211
  export {
210
- ce as ANALYTICS_EVENT_IDENTIFY,
211
- le as ANALYTICS_EVENT_PAGE,
212
- ue as ANALYTICS_EVENT_TRACK,
213
- pe as DEFAULT_EVENT_PREFIX,
214
- fe as EVENT_COMPOSITION_LOADED,
215
- me as EVENT_COMPOSITION_LOADING,
216
- Ee as EVENT_COMPOSITION_LOAD_ERROR,
217
- be as EVENT_EXTEND_MODE_OFF,
218
- he as EVENT_EXTEND_MODE_ON,
219
- de as EVENT_GALLERY_CLOSE,
220
- ye as EVENT_GALLERY_OPEN,
221
- _e as EVENT_HOTSPOTS_OFF,
222
- ge as EVENT_HOTSPOTS_ON,
223
- Ae as EVENT_ITEM_CHANGE,
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,
224
+ ge as EVENT_HOTSPOTS_OFF,
225
+ Ae as EVENT_HOTSPOTS_ON,
226
+ Oe as EVENT_ITEM_CHANGE,
224
227
  j as WEB_PLAYER_ICON_WC_TAG,
225
228
  V as WEB_PLAYER_WC_TAG,
226
229
  Ce as WebPlayer,
227
- Oe as WebPlayerCustomMedia,
228
- Te as WebPlayerIcon,
229
- Ne as generateCompositionUrl
230
+ Te as WebPlayerCustomMedia,
231
+ Ne as WebPlayerIcon,
232
+ Se as generateCompositionUrl
230
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}}