@vouchfor/embeds 0.0.0-experiment.8c5a3f8 → 0.0.0-experiment.8cafed9
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/es/browser-DfO9Pnu7.js +921 -0
- package/dist/es/browser-DfO9Pnu7.js.map +1 -0
- package/dist/es/embeds.js +1 -1599
- package/dist/es/embeds.js.map +1 -1
- package/dist/es/index-5G8orrrP.js +2609 -0
- package/dist/es/index-5G8orrrP.js.map +1 -0
- package/dist/es/src/components/DialogEmbed/DialogOverlay.d.ts +20 -0
- package/dist/es/src/components/DialogEmbed/DialogPortal.d.ts +36 -0
- package/dist/es/src/components/DialogEmbed/index.d.ts +38 -0
- package/dist/es/src/components/PlayerEmbed/controllers/event-forwarder.d.ts +15 -0
- package/dist/es/src/components/{Embed → PlayerEmbed}/controllers/fetcher.d.ts +5 -4
- package/dist/es/src/components/{Embed/controllers/tracking.d.ts → PlayerEmbed/controllers/tracking/index.d.ts} +14 -11
- package/dist/es/src/components/PlayerEmbed/controllers/tracking/utils.d.ts +17 -0
- package/dist/es/src/components/{Embed → PlayerEmbed}/index.d.ts +28 -21
- package/dist/es/src/components/PlayerEmbed/tests/data.d.ts +3 -0
- package/dist/es/src/index.d.ts +2 -1
- package/dist/iife/dialog-embed/browser-DCzTItVw.js +429 -0
- package/dist/iife/dialog-embed/browser-DCzTItVw.js.map +1 -0
- package/dist/iife/dialog-embed/embed.iife.js +1750 -0
- package/dist/iife/dialog-embed/embed.iife.js.map +1 -0
- package/dist/iife/dialog-embed/embed.js +5 -0
- package/dist/iife/dialog-embed/embed.js.map +1 -0
- package/dist/iife/dialog-embed/index-CgdXxP5z.js +27698 -0
- package/dist/iife/dialog-embed/index-CgdXxP5z.js.map +1 -0
- package/dist/iife/dialog-embed/src/components/DialogEmbed/DialogOverlay.d.ts +20 -0
- package/dist/iife/dialog-embed/src/components/DialogEmbed/DialogPortal.d.ts +36 -0
- package/dist/iife/dialog-embed/src/components/DialogEmbed/index.d.ts +38 -0
- package/dist/iife/dialog-embed/src/components/PlayerEmbed/controllers/event-forwarder.d.ts +15 -0
- package/dist/iife/dialog-embed/src/components/PlayerEmbed/controllers/fetcher.d.ts +14 -0
- package/dist/iife/dialog-embed/src/components/PlayerEmbed/controllers/tracking/index.d.ts +36 -0
- package/dist/iife/dialog-embed/src/components/PlayerEmbed/controllers/tracking/utils.d.ts +17 -0
- package/dist/iife/dialog-embed/src/components/PlayerEmbed/index.d.ts +74 -0
- package/dist/iife/dialog-embed/src/components/PlayerEmbed/tests/data.d.ts +3 -0
- package/dist/iife/dialog-embed/src/index.d.ts +2 -0
- package/dist/iife/dialog-embed/src/utils/env.d.ts +12 -0
- package/dist/iife/dialog-embed/src/utils/events.d.ts +2 -0
- package/dist/iife/embeds.iife.js +661 -456
- package/dist/iife/embeds.iife.js.map +1 -1
- package/dist/iife/player-embed/browser-BBSMddCs.js +429 -0
- package/dist/iife/player-embed/browser-BBSMddCs.js.map +1 -0
- package/dist/iife/player-embed/embed.iife.js +1612 -0
- package/dist/iife/player-embed/embed.iife.js.map +1 -0
- package/dist/iife/player-embed/embed.js +5 -0
- package/dist/iife/player-embed/embed.js.map +1 -0
- package/dist/iife/player-embed/index-BGZl_iqR.js +27255 -0
- package/dist/iife/player-embed/index-BGZl_iqR.js.map +1 -0
- package/dist/iife/player-embed/src/components/DialogEmbed/DialogOverlay.d.ts +20 -0
- package/dist/iife/player-embed/src/components/DialogEmbed/DialogPortal.d.ts +36 -0
- package/dist/iife/player-embed/src/components/DialogEmbed/index.d.ts +38 -0
- package/dist/iife/player-embed/src/components/PlayerEmbed/controllers/event-forwarder.d.ts +15 -0
- package/dist/iife/player-embed/src/components/PlayerEmbed/controllers/fetcher.d.ts +14 -0
- package/dist/iife/player-embed/src/components/PlayerEmbed/controllers/tracking/index.d.ts +36 -0
- package/dist/iife/player-embed/src/components/PlayerEmbed/controllers/tracking/utils.d.ts +17 -0
- package/dist/iife/player-embed/src/components/PlayerEmbed/index.d.ts +74 -0
- package/dist/iife/player-embed/src/components/PlayerEmbed/tests/data.d.ts +3 -0
- package/dist/iife/player-embed/src/index.d.ts +2 -0
- package/dist/iife/player-embed/src/utils/env.d.ts +12 -0
- package/dist/iife/player-embed/src/utils/events.d.ts +2 -0
- package/package.json +43 -31
- package/src/components/DialogEmbed/Dialog.stories.ts +91 -0
- package/src/components/DialogEmbed/DialogOverlay.ts +131 -0
- package/src/components/DialogEmbed/DialogPortal.ts +126 -0
- package/src/components/DialogEmbed/index.ts +97 -0
- package/src/components/{Embed/Embed.stories.ts → PlayerEmbed/PlayerEmbed.stories.ts} +26 -14
- package/src/components/{Embed → PlayerEmbed}/controllers/event-forwarder.ts +6 -5
- package/src/components/{Embed → PlayerEmbed}/controllers/fetcher.ts +33 -14
- package/src/components/{Embed/controllers/tracking.ts → PlayerEmbed/controllers/tracking/index.ts} +47 -115
- package/src/components/PlayerEmbed/controllers/tracking/utils.ts +95 -0
- package/src/components/{Embed → PlayerEmbed}/index.ts +71 -27
- package/src/components/PlayerEmbed/tests/PlayerEmbed.spec.ts +80 -0
- package/src/components/PlayerEmbed/tests/data.ts +183 -0
- package/src/index.ts +2 -1
@@ -0,0 +1,2609 @@
|
|
1
|
+
import { css, LitElement, html } from 'lit';
|
2
|
+
import { property, state, customElement } from 'lit/decorators.js';
|
3
|
+
import { ifDefined } from 'lit/directives/if-defined.js';
|
4
|
+
import { createRef, ref } from 'lit/directives/ref.js';
|
5
|
+
import { Task } from '@lit/task';
|
6
|
+
import { v4 } from 'uuid';
|
7
|
+
import '@vouchfor/media-player';
|
8
|
+
import { styleMap } from 'lit/directives/style-map.js';
|
9
|
+
import { classMap } from 'lit/directives/class-map.js';
|
10
|
+
import '@a11y/focus-trap';
|
11
|
+
|
12
|
+
function forwardEvent(type, fromElement, toElement) {
|
13
|
+
function forwarder(event) {
|
14
|
+
toElement.dispatchEvent(new CustomEvent(event.type, event));
|
15
|
+
}
|
16
|
+
fromElement.addEventListener(type, forwarder);
|
17
|
+
return () => {
|
18
|
+
fromElement.removeEventListener(type, forwarder);
|
19
|
+
};
|
20
|
+
}
|
21
|
+
|
22
|
+
class EventForwardController {
|
23
|
+
constructor(host, events) {
|
24
|
+
this._events = [];
|
25
|
+
this._cleanup = [];
|
26
|
+
this._forwardElementRef = createRef();
|
27
|
+
this.host = host;
|
28
|
+
this._events = events;
|
29
|
+
host.addController(this);
|
30
|
+
}
|
31
|
+
register() {
|
32
|
+
return ref(this._forwardElementRef);
|
33
|
+
}
|
34
|
+
hostConnected() {
|
35
|
+
requestAnimationFrame(() => {
|
36
|
+
this._events.forEach((event) => {
|
37
|
+
if (this._forwardElementRef.value) {
|
38
|
+
this._cleanup.push(forwardEvent(event, this._forwardElementRef.value, this.host));
|
39
|
+
}
|
40
|
+
});
|
41
|
+
});
|
42
|
+
}
|
43
|
+
hostDisconnected() {
|
44
|
+
this._cleanup.forEach((fn) => {
|
45
|
+
fn();
|
46
|
+
});
|
47
|
+
this._cleanup = [];
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
const devVideoUrl = "https://d2rxhdlm2q91uk.cloudfront.net";
|
52
|
+
const stagingVideoUrl = "https://d1ix11aj5kfygl.cloudfront.net";
|
53
|
+
const prodVideoUrl = "https://d157jlwnudd93d.cloudfront.net";
|
54
|
+
const devPublicApiUrl = "https://bshyfw4h5a.execute-api.ap-southeast-2.amazonaws.com/dev";
|
55
|
+
const stagingPublicApiUrl = "https://gyzw7rpbq3.execute-api.ap-southeast-2.amazonaws.com/staging";
|
56
|
+
const prodPublicApiUrl = "https://vfcjuim1l3.execute-api.ap-southeast-2.amazonaws.com/prod";
|
57
|
+
const localEmbedApiUrl = "http://localhost:6060/v2";
|
58
|
+
const devEmbedApiUrl = "https://embed-dev.vouchfor.com/v2";
|
59
|
+
const stagingEmbedApiUrl = "https://embed-staging.vouchfor.com/v2";
|
60
|
+
const prodEmbedApiUrl = "https://embed.vouchfor.com/v2";
|
61
|
+
function getEnvUrls(env) {
|
62
|
+
if (!["local", "dev", "staging", "prod"].includes(env)) {
|
63
|
+
throw new Error(`Unknown environment: ${env}`);
|
64
|
+
}
|
65
|
+
if (env === "local") {
|
66
|
+
return {
|
67
|
+
videoUrl: devVideoUrl,
|
68
|
+
publicApiUrl: devPublicApiUrl,
|
69
|
+
embedApiUrl: localEmbedApiUrl
|
70
|
+
};
|
71
|
+
}
|
72
|
+
if (env === "dev") {
|
73
|
+
return {
|
74
|
+
videoUrl: devVideoUrl,
|
75
|
+
publicApiUrl: devPublicApiUrl,
|
76
|
+
embedApiUrl: devEmbedApiUrl
|
77
|
+
};
|
78
|
+
}
|
79
|
+
if (env === "staging") {
|
80
|
+
return {
|
81
|
+
videoUrl: stagingVideoUrl,
|
82
|
+
publicApiUrl: stagingPublicApiUrl,
|
83
|
+
embedApiUrl: stagingEmbedApiUrl
|
84
|
+
};
|
85
|
+
}
|
86
|
+
if (env === "prod") {
|
87
|
+
return {
|
88
|
+
videoUrl: prodVideoUrl,
|
89
|
+
publicApiUrl: prodPublicApiUrl,
|
90
|
+
embedApiUrl: prodEmbedApiUrl
|
91
|
+
};
|
92
|
+
}
|
93
|
+
}
|
94
|
+
|
95
|
+
class FetcherController {
|
96
|
+
constructor(host) {
|
97
|
+
this._fetching = false;
|
98
|
+
this.getVouch = async (env, apiKey, vouchId) => {
|
99
|
+
const { embedApiUrl } = getEnvUrls(env);
|
100
|
+
const cacheCheck = v4();
|
101
|
+
const res = await fetch(`${embedApiUrl}/vouches/${vouchId}`, {
|
102
|
+
method: "GET",
|
103
|
+
headers: [
|
104
|
+
["X-Api-Key", apiKey],
|
105
|
+
["X-Cache-Check", cacheCheck]
|
106
|
+
]
|
107
|
+
});
|
108
|
+
const vouch = await res.json();
|
109
|
+
this.host.dispatchEvent(new CustomEvent("vouch:loaded", { detail: vouch?.id }));
|
110
|
+
const resCacheCheck = res?.headers?.get("X-Cache-Check");
|
111
|
+
if (resCacheCheck !== cacheCheck) {
|
112
|
+
fetch(`${embedApiUrl}/vouches/${vouchId}`, {
|
113
|
+
method: "GET",
|
114
|
+
headers: [
|
115
|
+
["X-Api-Key", apiKey],
|
116
|
+
["Cache-Control", "max-age=0"]
|
117
|
+
]
|
118
|
+
});
|
119
|
+
}
|
120
|
+
return vouch;
|
121
|
+
};
|
122
|
+
this.getTemplate = async (env, apiKey, templateId) => {
|
123
|
+
const { embedApiUrl } = getEnvUrls(env);
|
124
|
+
const cacheCheck = v4();
|
125
|
+
const res = await fetch(`${embedApiUrl}/templates/${templateId}`, {
|
126
|
+
method: "GET",
|
127
|
+
headers: [
|
128
|
+
["X-Api-Key", apiKey],
|
129
|
+
["X-Cache-Check", cacheCheck]
|
130
|
+
]
|
131
|
+
});
|
132
|
+
const template = await res.json();
|
133
|
+
const resCacheCheck = res?.headers?.get("X-Cache-Check");
|
134
|
+
if (resCacheCheck !== cacheCheck) {
|
135
|
+
fetch(`${embedApiUrl}/templates/${templateId}`, {
|
136
|
+
method: "GET",
|
137
|
+
headers: [
|
138
|
+
["X-Api-Key", apiKey],
|
139
|
+
["Cache-Control", "max-age=0"]
|
140
|
+
]
|
141
|
+
});
|
142
|
+
}
|
143
|
+
return template;
|
144
|
+
};
|
145
|
+
this.host = host;
|
146
|
+
new Task(
|
147
|
+
this.host,
|
148
|
+
async ([env, apiKey, data, vouchId, templateId]) => {
|
149
|
+
try {
|
150
|
+
host.vouch = void 0;
|
151
|
+
host.template = void 0;
|
152
|
+
if (data) {
|
153
|
+
let template;
|
154
|
+
if (templateId) {
|
155
|
+
this.fetching = true;
|
156
|
+
template = await this.getTemplate(env, apiKey, templateId);
|
157
|
+
}
|
158
|
+
this._vouch = data;
|
159
|
+
host.template = template ?? data?.settings?.template?.instance;
|
160
|
+
} else if (vouchId) {
|
161
|
+
this.fetching = true;
|
162
|
+
const [vouch, template] = await Promise.all([
|
163
|
+
this.getVouch(env, apiKey, vouchId),
|
164
|
+
templateId ? this.getTemplate(env, apiKey, templateId) : null
|
165
|
+
]);
|
166
|
+
this._vouch = vouch;
|
167
|
+
host.template = template ?? vouch?.settings?.template?.instance;
|
168
|
+
}
|
169
|
+
} finally {
|
170
|
+
this.fetching = false;
|
171
|
+
}
|
172
|
+
},
|
173
|
+
() => [host.env, host.apiKey, host.data, host.vouchId, host.templateId]
|
174
|
+
);
|
175
|
+
new Task(
|
176
|
+
this.host,
|
177
|
+
([vouch, questions]) => {
|
178
|
+
host.vouch = vouch ? {
|
179
|
+
...vouch,
|
180
|
+
questions: {
|
181
|
+
items: vouch?.questions.items.filter((_, index) => !questions?.length || questions?.includes(index + 1))
|
182
|
+
}
|
183
|
+
} : void 0;
|
184
|
+
},
|
185
|
+
() => [this._vouch, host.questions]
|
186
|
+
);
|
187
|
+
}
|
188
|
+
set fetching(value) {
|
189
|
+
if (this._fetching !== value) {
|
190
|
+
this._fetching = value;
|
191
|
+
this.host.requestUpdate();
|
192
|
+
}
|
193
|
+
}
|
194
|
+
get fetching() {
|
195
|
+
return this._fetching;
|
196
|
+
}
|
197
|
+
}
|
198
|
+
|
199
|
+
const copyProperty$1 = (to, from, property, ignoreNonConfigurable) => {
|
200
|
+
// `Function#length` should reflect the parameters of `to` not `from` since we keep its body.
|
201
|
+
// `Function#prototype` is non-writable and non-configurable so can never be modified.
|
202
|
+
if (property === 'length' || property === 'prototype') {
|
203
|
+
return;
|
204
|
+
}
|
205
|
+
|
206
|
+
// `Function#arguments` and `Function#caller` should not be copied. They were reported to be present in `Reflect.ownKeys` for some devices in React Native (#41), so we explicitly ignore them here.
|
207
|
+
if (property === 'arguments' || property === 'caller') {
|
208
|
+
return;
|
209
|
+
}
|
210
|
+
|
211
|
+
const toDescriptor = Object.getOwnPropertyDescriptor(to, property);
|
212
|
+
const fromDescriptor = Object.getOwnPropertyDescriptor(from, property);
|
213
|
+
|
214
|
+
if (!canCopyProperty$1(toDescriptor, fromDescriptor) && ignoreNonConfigurable) {
|
215
|
+
return;
|
216
|
+
}
|
217
|
+
|
218
|
+
Object.defineProperty(to, property, fromDescriptor);
|
219
|
+
};
|
220
|
+
|
221
|
+
// `Object.defineProperty()` throws if the property exists, is not configurable and either:
|
222
|
+
// - one its descriptors is changed
|
223
|
+
// - it is non-writable and its value is changed
|
224
|
+
const canCopyProperty$1 = function (toDescriptor, fromDescriptor) {
|
225
|
+
return toDescriptor === undefined || toDescriptor.configurable || (
|
226
|
+
toDescriptor.writable === fromDescriptor.writable
|
227
|
+
&& toDescriptor.enumerable === fromDescriptor.enumerable
|
228
|
+
&& toDescriptor.configurable === fromDescriptor.configurable
|
229
|
+
&& (toDescriptor.writable || toDescriptor.value === fromDescriptor.value)
|
230
|
+
);
|
231
|
+
};
|
232
|
+
|
233
|
+
const changePrototype$1 = (to, from) => {
|
234
|
+
const fromPrototype = Object.getPrototypeOf(from);
|
235
|
+
if (fromPrototype === Object.getPrototypeOf(to)) {
|
236
|
+
return;
|
237
|
+
}
|
238
|
+
|
239
|
+
Object.setPrototypeOf(to, fromPrototype);
|
240
|
+
};
|
241
|
+
|
242
|
+
const wrappedToString$1 = (withName, fromBody) => `/* Wrapped ${withName}*/\n${fromBody}`;
|
243
|
+
|
244
|
+
const toStringDescriptor$1 = Object.getOwnPropertyDescriptor(Function.prototype, 'toString');
|
245
|
+
const toStringName$1 = Object.getOwnPropertyDescriptor(Function.prototype.toString, 'name');
|
246
|
+
|
247
|
+
// We call `from.toString()` early (not lazily) to ensure `from` can be garbage collected.
|
248
|
+
// We use `bind()` instead of a closure for the same reason.
|
249
|
+
// Calling `from.toString()` early also allows caching it in case `to.toString()` is called several times.
|
250
|
+
const changeToString$1 = (to, from, name) => {
|
251
|
+
const withName = name === '' ? '' : `with ${name.trim()}() `;
|
252
|
+
const newToString = wrappedToString$1.bind(null, withName, from.toString());
|
253
|
+
// Ensure `to.toString.toString` is non-enumerable and has the same `same`
|
254
|
+
Object.defineProperty(newToString, 'name', toStringName$1);
|
255
|
+
const {writable, enumerable, configurable} = toStringDescriptor$1; // We destructue to avoid a potential `get` descriptor.
|
256
|
+
Object.defineProperty(to, 'toString', {value: newToString, writable, enumerable, configurable});
|
257
|
+
};
|
258
|
+
|
259
|
+
function mimicFunction$1(to, from, {ignoreNonConfigurable = false} = {}) {
|
260
|
+
const {name} = to;
|
261
|
+
|
262
|
+
for (const property of Reflect.ownKeys(from)) {
|
263
|
+
copyProperty$1(to, from, property, ignoreNonConfigurable);
|
264
|
+
}
|
265
|
+
|
266
|
+
changePrototype$1(to, from);
|
267
|
+
changeToString$1(to, from, name);
|
268
|
+
|
269
|
+
return to;
|
270
|
+
}
|
271
|
+
|
272
|
+
const cacheStore$1 = new WeakMap();
|
273
|
+
const cacheTimerStore = new WeakMap();
|
274
|
+
/**
|
275
|
+
[Memoize](https://en.wikipedia.org/wiki/Memoization) functions - An optimization used to speed up consecutive function calls by caching the result of calls with identical input.
|
276
|
+
|
277
|
+
@param fn - The function to be memoized.
|
278
|
+
|
279
|
+
@example
|
280
|
+
```
|
281
|
+
import memoize from 'memoize';
|
282
|
+
|
283
|
+
let index = 0;
|
284
|
+
const counter = () => ++index;
|
285
|
+
const memoized = memoize(counter);
|
286
|
+
|
287
|
+
memoized('foo');
|
288
|
+
//=> 1
|
289
|
+
|
290
|
+
// Cached as it's the same argument
|
291
|
+
memoized('foo');
|
292
|
+
//=> 1
|
293
|
+
|
294
|
+
// Not cached anymore as the arguments changed
|
295
|
+
memoized('bar');
|
296
|
+
//=> 2
|
297
|
+
|
298
|
+
memoized('bar');
|
299
|
+
//=> 2
|
300
|
+
```
|
301
|
+
*/
|
302
|
+
function memoize(fn, { cacheKey, cache = new Map(), maxAge, } = {}) {
|
303
|
+
if (maxAge === 0) {
|
304
|
+
return fn;
|
305
|
+
}
|
306
|
+
if (typeof maxAge === 'number') {
|
307
|
+
const maxSetIntervalValue = 2147483647;
|
308
|
+
if (maxAge > maxSetIntervalValue) {
|
309
|
+
throw new TypeError(`The \`maxAge\` option cannot exceed ${maxSetIntervalValue}.`);
|
310
|
+
}
|
311
|
+
if (maxAge < 0) {
|
312
|
+
throw new TypeError('The `maxAge` option should not be a negative number.');
|
313
|
+
}
|
314
|
+
}
|
315
|
+
const memoized = function (...arguments_) {
|
316
|
+
const key = cacheKey ? cacheKey(arguments_) : arguments_[0];
|
317
|
+
const cacheItem = cache.get(key);
|
318
|
+
if (cacheItem) {
|
319
|
+
return cacheItem.data;
|
320
|
+
}
|
321
|
+
const result = fn.apply(this, arguments_);
|
322
|
+
cache.set(key, {
|
323
|
+
data: result,
|
324
|
+
maxAge: maxAge ? Date.now() + maxAge : Number.POSITIVE_INFINITY,
|
325
|
+
});
|
326
|
+
if (typeof maxAge === 'number' && maxAge !== Number.POSITIVE_INFINITY) {
|
327
|
+
const timer = setTimeout(() => {
|
328
|
+
cache.delete(key);
|
329
|
+
}, maxAge);
|
330
|
+
timer.unref?.();
|
331
|
+
const timers = cacheTimerStore.get(fn) ?? new Set();
|
332
|
+
timers.add(timer);
|
333
|
+
cacheTimerStore.set(fn, timers);
|
334
|
+
}
|
335
|
+
return result;
|
336
|
+
};
|
337
|
+
mimicFunction$1(memoized, fn, {
|
338
|
+
ignoreNonConfigurable: true,
|
339
|
+
});
|
340
|
+
cacheStore$1.set(memoized, cache);
|
341
|
+
return memoized;
|
342
|
+
}
|
343
|
+
|
344
|
+
var loadYoga = (() => {
|
345
|
+
var _scriptDir = import.meta.url;
|
346
|
+
|
347
|
+
return (
|
348
|
+
function(loadYoga) {
|
349
|
+
loadYoga = loadYoga || {};
|
350
|
+
|
351
|
+
|
352
|
+
var h;h||(h=typeof loadYoga !== 'undefined' ? loadYoga : {});var aa,ca;h.ready=new Promise(function(a,b){aa=a;ca=b;});var da=Object.assign({},h),q="";"undefined"!=typeof document&&document.currentScript&&(q=document.currentScript.src);_scriptDir&&(q=_scriptDir);0!==q.indexOf("blob:")?q=q.substr(0,q.replace(/[?#].*/,"").lastIndexOf("/")+1):q="";var ea=h.print||console.log.bind(console),v=h.printErr||console.warn.bind(console);Object.assign(h,da);da=null;var w;h.wasmBinary&&(w=h.wasmBinary);
|
353
|
+
h.noExitRuntime||!0;"object"!=typeof WebAssembly&&x("no native wasm support detected");var fa,ha=!1;function z(a,b,c){c=b+c;for(var d="";!(b>=c);){var e=a[b++];if(!e)break;if(e&128){var f=a[b++]&63;if(192==(e&224))d+=String.fromCharCode((e&31)<<6|f);else {var g=a[b++]&63;e=224==(e&240)?(e&15)<<12|f<<6|g:(e&7)<<18|f<<12|g<<6|a[b++]&63;65536>e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023));}}else d+=String.fromCharCode(e);}return d}
|
354
|
+
var ia,ja,A,C,ka,D,E,la,ma;function na(){var a=fa.buffer;ia=a;h.HEAP8=ja=new Int8Array(a);h.HEAP16=C=new Int16Array(a);h.HEAP32=D=new Int32Array(a);h.HEAPU8=A=new Uint8Array(a);h.HEAPU16=ka=new Uint16Array(a);h.HEAPU32=E=new Uint32Array(a);h.HEAPF32=la=new Float32Array(a);h.HEAPF64=ma=new Float64Array(a);}var oa,pa=[],qa=[],ra=[];function sa(){var a=h.preRun.shift();pa.unshift(a);}var F=0,G=null;
|
355
|
+
function x(a){if(h.onAbort)h.onAbort(a);a="Aborted("+a+")";v(a);ha=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");ca(a);throw a;}function ua(a){return a.startsWith("data:application/octet-stream;base64,")}var H;H="data:application/octet-stream;base64,AGFzbQEAAAABrAM2YAF/AGABfwF/YAJ/fwBgA39/fwBgAn98AGACf38Bf2ADf39/AX9gBH9/f30BfWAAAGADf398AGAEf39/fwBgAX8BfGACf38BfGAFf39/f38Bf2AAAX9gA39/fwF9YAZ/f31/fX8AYAJ/fwF9YAV/f39/fwBgAX8BfWADf35/AX5gB39/f39/f38AYAZ/f39/f38AYAR/f39/AX9gBH9/fX8AYAZ/fH9/f38Bf2ACf30AYAR/fHx/AGAIf39/f39/f38AYA1/f39/f39/f39/f39/AGAKf39/f39/f39/fwBgBX9/f39/AXxgBH9/fX0BfWAEfHx/fwF9YA1/fX1/f399fX9/f39/AX9gBn9/fX1/fwBgAn5/AX9gA399fQF9YAN/f30BfWABfAF8YAN/fHwAYAV/f319fQBgBX9/fX19AX1gDX99f31/fX99fX19fX8Bf2ALf39/f39/f319fX0AYAh/f39/f399fQBgBH9/fn4AYAd/f39/f39/AX9gAnx/AXxgBX9/fHx/AGADf39/AXxgBH9/f3wAYAN/f30AYAZ/f31/fX8BfwK1AR4BYQFhABwBYQFiAAMBYQFjAAgBYQFkABUBYQFlABIBYQFmAB0BYQFnAAABYQFoAB4BYQFpAAMBYQFqAAABYQFrABYBYQFsAAoBYQFtAAUBYQFuAAMBYQFvAAIBYQFwABYBYQFxAAYBYQFyAAABYQFzAB8BYQF0AAoBYQF1AA0BYQF2ABUBYQF3AAEBYQF4AAMBYQF5ABcBYQF6AAEBYQFBAAIBYQFCABIBYQFDAAIBYQFEAAADiwKJAgEDEQ8PBwcHBwgAAwoSBiAKBgIGIQcYDwMTIgUGIxMHBwMkAhcDAwoKGBETCg8KAwMBCAEAAAUmAQEGBwEDAgIJDAAAJwgABQAHBQAoKQAAASoHACsBLAcHLQMuCAUKAS8NMAMBCAEAAQIGCgIBAgEFAgAFCAICAgIAAQ4BAQUCAhoDDg0NBhQBAhkUBgEIARAAAAAFMQ8yDAUGCTMFAQMFDg4ONAEDAQEBAwYBATUBAgwMDAILCwsLCwsbAQAAAAIAEAIFAQECAwERAwwLAgICAgICCwsCAQEDAQEBAQEBAwEJAgkJCQQEBAQEBAQEBAAEBAAEBAQEAAQEBAICAgkJAgICAgICCQkEBwFwAcwB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AkACQCAELQAMQQFrDgIAAQILIAQqAgghBQwBCyAEKgIIIAOUQwrXIzyUIQULIARBEGokACAFQwAAAAAgBSAFWxsLcAIBfwF9IwBBEGsiBCQAIARBCGogACABQQJ0QaAkaigCACACEC5DAADAfyEFAkACQAJAIAQtAAxBAWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwvOAQIDfwJ9IwBBEGsiAyQAQQEhBCADQQhqIABB/ABqIgUgACABQQF0akHuAGoiAS8BABAfAkACQCADKgIIIgcgAioCACIGXARAIAcgB1sEQCACLQAEIQIMAgsgBiAGXCEECyACLQAEIQIgBEUNACADLQAMIAJB/wFxRg0BCyAFIAEgBiACEDQDQCAALQAAIgFBBHENASAAIAFBBHI6AAAgACgCECIBBEAgACABEQAACyAAQYCAgP4HNgKcASAAKALcAyIADQALCyADQRBqJAALhQECA38BfgJAIABCgICAgBBUBEAgACEFDAELA0AgAUEBayIBIABCCoAiBUL2AX4gAHynQTByOgAAIABC/////58BViECIAUhACACDQALCyAFpyICBEADQCABQQFrIgEgAkEKbiIDQfYBbCACakEwcjoAACACQQlLIQQgAyECIAQNAAsLIAELNwECf0EEEB4iAiABNgIAQQQQHiIDIAE2AgBB/TkgAEGeOkG6J0G3ASACQZ46Qb4nQbgBIAMQBwteAQF/IABBADYCDCAAIAM2AhACQCABBEAgAUGAgICABE8NASABQQJ0EB4hBAsgACAENgIAIAAgBCACQQJ0aiICNgIIIAAgBCABQQJ0ajYCDCAAIAI2AgQgAA8LEFAAC0cBAX8gAi8ABiIDQQdxBEAgACABQegAaiADEB8PCyABQegAaiEBIAIvAA4iA0EHcQRAIAAgASADEB8PCyAAIAEgAi8AEBAfC0cBAX8gAi8AAiIDQQdxBEAgACABQegAaiADEB8PCyABQegAaiEBIAIvAA4iA0EHcQRAIAAgASADEB8PCyAAIAEgAi8AEBAfC3sAAkACQAJAAkAgA0EBaw4CAAECCyACLwAKIgNBB3FFDQEMAgsgAi8ACCIDQQdxRQ0ADAELIAIvAAQiA0EHcQRADAELIAFB6ABqIQEgAi8ADCID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BQUgAC0AFUEEdgtBBUYEQCAALQAUQQhxDQULIAEtAABBAnENBCACIAEgAhshAgsgBEEBaiIEIAdHDQELCyACDQILIAAqApQDIQgMAgsgASECCyACEEkgAioCnAOSIQgLIANBEGokACAIC1AAAkACQAJAAkACQCACDgQEAAECAwsgACABIAFBMGoQRA8LIAAgASABQTBqIAMQRQ8LIAAgASABQTBqEEMPCxAnAAsgACABIAFBMGogAxBGC3kCAX8BfSMAQRBrIgMkACADQQhqIAAgAUECdEGwJGooAgAgAhBMQwAAwH8hBAJAAkACQCADLQAMQQFrDgIAAQILIAMqAgghBAwBCyADKgIIQwAAAACUQwrXIzyUIQQLIANBEGokACAEQwAAAACXQwAAAAAgBCAEWxsLVAACQAJAAkACQAJAIAIOBAQAAQIDCyAAIAEgAUHCAGoQRA8LIAAgASABQcIAaiADEEUPCyAAIAEgAUHCAGoQQw8LECcACyAAIAEgAUHCAGogAxBGC84BAgN/An0jAEEQayIDJABBASEEIANBCGogAEH8AGoiBSAAIAFBAXRqQfYAaiIBLwEAEB8CQAJAIAMqAggiByACKgIAIgZcBEAgByAHWwRAIAItAAQhAgwCCyAGIAZcIQQLIAItAAQhAiAERQ0AIAMtAAwgAkH/AXFGDQELIAUgASAGIAIQNANAIAAtAAAiAUEEcQ0BIAAgAUEEcjoAACAAKAIQIgEEQCAAIAERAAALIABBgICA/gc2ApwBIAAoAtwDIgANAAsLIANBEGokAAvOAQIDfwJ9IwBBEGsiAyQAQQEhBCADQQhqIABB/ABqIgUgACABQQF0akHyAGoiAS8BABAfAkACQCADKgIIIgcgAioCACIGXARAIAcgB1sEQCACLQAEIQIMAgsgBiAGXCEECyACLQAEIQIgBEUNACADLQAMIAJB/wFxRg0BCyAFIAEgBiACEDQDQCAALQAAIgFBBHENASAAIAFBBHI6AAAgACgCECIBBEAgACABEQAACyAAQYCAgP4HNgKcASAAKALcAyIADQALCyADQRBqJAALCgAgAEEwa0EKSQsFABACAAsEACAACxQAIAAEQCAAIAAoAgAoAgQRAAALCysBAX8gACgCDCIBBEAgARAoCyAAKAIAIgEEQCAAIAE2AgQgARAoCyAAECgL8QMB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OgAAQQELC8QCAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAFBCWsOEgAKCwwKCwIDBAUMCwwMCgsHCAkLIAIgAigCACIBQQRqNgIAIAAgASgCADYCAA8LAAsgAiACKAIAIgFBBGo2AgAgACABMgEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMwEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMAAANwMADwsgAiACKAIAIgFBBGo2AgAgACABMQAANwMADwsACyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAErAwA5AwAPCyAAIAIgAxECAAsPCyACIAIoAgAiAUEEajYCACAAIAE0AgA3AwAPCyACIAIoAgAiAUEEajYCACAAIAE1AgA3AwAPCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAEpAwA3AwALXQEEfyAAKAIAIQIDQCACLAAAIgMQTwRAQX8hBCAAIAJBAWoiAjYCACABQcyZs+YATQR/QX8gA0EwayIDIAFBCmwiBGogAyAEQf////8Hc0obBSAECyEBDAELCyABC6gUAhJ/AX4jAEHQAGsiCCQAIAggATYCTCAIQTdqIRcgCEE4aiEUAkACQAJAAkADQCABIQ0gByAOQf////8Hc0oNASAHIA5qIQ4CQAJAAkAgDSIHLQAAIgkEQANAAkACQCAJQf8BcSIBRQRAIAchAQwBCyABQSVHDQEgByEJA0AgCS0AAUElRwRAIAkhAQwCCyAHQQFqIQcgCS0AAiEKIAlBAmoiASEJIApBJUYNAAsLIAcgDWsiByAOQf////8HcyIYSg0HIAAEQCAAIA0gBxApCyAHDQYgCCABNgJMIAFBAWohB0F/IRICQCABLAABIgoQT0UNACABLQACQSRHDQAgAUEDaiEHIApBMGshEkEBIRULIAggBzYCTEEAIQwCQCAHLAAAIglBIGsiAUEfSwRAIAchCgwBCyAHIQpBASABdCIBQYnRBHFFDQADQCAIIAdBAWoiCjYCTCABIAxyIQwgBywAASIJQSBrIgFBIE8NASAKIQdBASABdCIBQYnRBHENAAsLAkAgCUEqRgRAAn8CQCAKLAABIgEQT0UNACAKLQACQSRHDQAgAUECdCAEakHAAWtBCjYCACAKQQNqIQlBASEVIAosAAFBA3QgA2pBgANrKAIADAEL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4AMiAwRAIAAgAzYC5AMgAxAoCyAAIAEoAuADNgLgAyAAIAEoAuQDNgLkAyAAIAEoAugDNgLoAyABQQA2AugDIAFCADcC4AMgACABKQL0AzcC9AMgACABKQLsAzcC7AMgACABKAL8AzYC/AMgASgClAEhACABQQA2ApQBIAAEQCAAEFMLIAJBoARqJAAPCyACQYIcNgIQIAAgAkEQahAwECcACyACQcsRNgIAIAAgAhAwECcACwoAQQwQHiAAEGULCgBBDBAeQQAQZQsNACAAKAIALQAIQQFxCwoAIAAoAgAoAhALGQAgAUH/AXEEQBACAAsgACgCACgCDEEBcQsYACAAKAIAIgAgAC0ACEH+AXEgAXI6AAgLDAAgACgCACABNgIQC3oBAn8jAEEQayICJAAgACgCACEAIAFDAAAAAGBFBEAgAkHdEzYCACMAQRBrIgMkACADIAI2AgwCQCAARQRAQfguQZwkIAIQOhoMAQsgAEEAQQVBnCQgAiAAKAIEEQ0AGgsgA0EQaiQAECcACyAAIAE4AhQgAkEQaiQACyMAIAFB/wFxBEAQAgALIAAoAgAiACAAKAIMQX5xIAJyNgIMCz4BAn9BBBAeIQFBHBAeIgBCgICA/AM3AhQgAEIANwIMIABBADoACCAAQQA2AgAgAEEDNgIEIAEgADYCACABCyMAIAJBBUdBACACG0UEQEH4LiADIAQQOg8LQYgwIAMgBBA6CyIBAX4gASACrSADrUIghoQgBCAAERQAIgVCIIinJAEgBacLqAEBBX8gACgCVCIDKAIAIQUgAygCBCIEIAAoAhQgACgCHCIHayIGIAQgBkkbIgYEQCAFIAcgBhAsGiADIAMoAgAgBmoiBTYCACADIAMoAgQgBmsiBDYCBAsgBCACIAIgBEsbIgQEQCAFIAEgBBAsGiADIAMoAgAgBGoiBTYCACADIAMoAgQgBGs2AgQLIAVBADoAACAAIAAoAiwiATYCHCAAIAE2AhQgAgsEAEIACwQAQQALigUCBn4CfyABIAEoAgBBB2pBeHEiAUEQajYCACAAIQkgASkDACEDIAEpAwghBiMAQSBrIggkAAJAIAZC////////////AIMiBEKAgICAgIDAgDx9IARCgICAgICAwP/DAH1UBEAgBkIEhiADQjyIhCEEIANC//////////8PgyIDQoGAgICA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AAAAAPBBYyAIRAAAAAAAAAAAZnEEQCAIqwwBC0EACyEBIAYoAgwhAyAAIAEpAwA3AwAgACABKQMINwMIIAMQESAGQTBqJAALCQAgABCEARAoCwwAIAAoAghB+hsQXAsJACAAEIYBECgLVQECfyMAQTBrIgIkACABIAAoAgQiA0EBdWohASAAKAIAIQAgAiABIANBAXEEfyABKAIAIABqKAIABSAACxECAEEwEB4gAkEwECwhACACQTBqJAAgAAs7AQF/IAEgACgCBCIFQQF1aiEBIAAoAgAhACABIAIgAyAEIAVBAXEEfyABKAIAIABqKAIABSAACxEbAAs3AQF/IAEgACgCBCIDQQF1aiEBIAAoAgAhACABIAIgA0EBcQR/IAEoAgAgAGooAgAFIAALEREACzcBAX8gASAAKAIEIgNBAXVqIQEgACgCACEAIAEgAiADQQFxBH8gASgCACAAaigCAAUgAAsRDAALNQEBfyABIAAoAgQiAkEBdWohASAAKAIAIQAgASACQQFxBH8gASgCACAAaigCAAUgAAsRCwALYQECfyMAQRBrIgIkACABIAAoAgQiA0EBdWohASAAKAIAIQAgAiABIANBAXEEfyABKAIAIABqKAIABSAACxECAEEQEB4iACACKQMINwMIIAAgAikDADcDACACQRBqJAAgAAtjAQJ/IwBBEGsiAyQAIAEgACgCBCIEQQF1aiEBIAAoAgAhACADIAEgAiAEQQFxBH8gASgCACAAaigCAAUgAAsRAwBBEBAeIgAgAykDCDcDCCAAIAMpAwA3AwAgA0EQaiQAIAALNwEBfyABIAAoAgQiA0EBdWohASAAKAIAIQAgASACIANBAXEEfyABKAIAIABqKAIABSAACxEEAAs5AQF/IAEgACgCBCIEQQF1aiEBIAAoAgAhACABIAIgAyAEQQFxBH8gASgCACAAaigCAAUgAAsRCQALCQAgASAAEQEACwUAQf85Cw8AIAEgACgCAGogAjYCAAsNACABIAAoAgBqKAIACxgBAX9BEBAeIgBCADcDCCAAQQA2AgAgAAsYAQF/QRAQHiIAQgA3AwAgAEIANwMIIAALDABBMBAeQQBBMBAvCzcBAX8gASAAKAIEIgNBAXVqIQEgACgCACEAIAEgAiADQQFxBH8gASgCACAAaigCAAUgAAsRGgALBQBB+jkL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QRhqIgEgBUcNAAsgAkKAgID8i4CAwL9/NwLkASACQoGAgIAQNwLcASACQoCAgPyLgIDAv383AtQBIAJCgICA/oeAgOD/ADcD+AEgAkKAgID+h4CA4P8ANwPwASACIAItAOwBQfgBcToA7AEgAkGAAmpBAEHAABAvGiADQZgBaiACQcACECwaIANBADYC3AMLA0AgAC0AACIBQQRxDQEgACABQQRyOgAAIAAoAhAiAQRAIAAgAREAAAsgAEGAgID+BzYCnAEgACgC3AMiAA0ACwsgBEHAAmokAAuyBwEIfyMAQdAAayIHJAAgACgCACEAAkACQCABKAIAIggoAtwDRQRAIAAoAggNASAAKALgAyIBIAJBAnRqIQYCQCAAKALkAyIEIABB6ANqIgMoAgAiBUkEQCAEIAZGBEAgBiAINgIAIAAgBkEEajYC5AMMAgsgBCAEIgJBBGsiAUsEQANAIAIgASgCADYCACACQQRqIQIgAUEEaiIBIARJDQALCyAAIAI2AuQDIAZBBGoiASAERwRAIAQgBCABayIBQXxxayAGIAEQMRoLIAYgCDYCAAwBCyAEIAFrQQJ1QQFqIgRBgICAgARPDQMCQCAHQSBqQf////8DIAUgAWsiAUEBdSIFIAQgBCAFSRsgAUH8////B08bIAIgAxBCIgMoAggiAiADKAIMRw0AIAMoAgQiASADKAIAIgRLBEAgAyABIAEgBGtBAnVBAWpBfm1BAnQiBGogASACIAFrIgEQMSABaiICNgIIIAMgAygCBCAEajYCBAwBCyAHQThqQQEgAiAEa0EBdSACIARGGyIBIAFBAnYgAygCEBBCIgUoAgghBAJ/IAMoAggiAiADKAIEIgFGBEAgBCECIAEMAQsgBCACIAFraiECA0AgBCABKAIANgIAIAFBBGohASAEQQRqIgQgAkcNAAsgAygCCCEBIAMoAgQLIQQgAygCACEJIAMgBSgCADYCACAFIAk2AgAgAyAFKAIENgIEIAUgBDYCBCADIAI2AgggBSABNgIIIAMoAgwhCiADIAUoAgw2AgwgBSAKNgIMIAEgBEcEQCAFIAEgBCABa0EDakF8cWo2AggLIAlFDQAgCRAoIAMoAgghAgsgAiAINgIAIAMgAygCCEEEajYCCCADIAMoAgQgBiAAKALgAyIBayICayABIAIQMTYCBCADKAII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CwsLgQECA38BfSMAQRBrIgMkACAAKAIAIQQCfSACtiIGIAZcBEBBACEAQwAAwH8MAQtBAEECIAZDAACAf1sgBkMAAID/W3IiBRshAEMAAMB/IAYgBRsLIQYgAyAAOgAMIAMgBjgCCCADIAMpAwg3AwAgBCABQf8BcSADEIEBIANBEGokAAt5AgF9An8jAEEQayIEJAAgACgCACEFIAQCfyACtiIDIANcBEBDAADAfyEDQQAMAQtDAADAfyADIANDAACAf1sgA0MAAID/W3IiABshAyAARQs6AAwgBCADOAIIIAQgBCkDCDcDACAFIAFB/wFxIAQQgQEgBEEQaiQACwukJSMAQYAIC8UcT25seSBsZWFmIG5vZGVzIHdpdGggY3VzdG9tIG1lYXN1cmUgZnVuY3Rpb25zIHNob3VsZCBtYW51YWxseSBtYXJrIHRoZW1zZWx2ZXMgYXMgZGlydHkAaXNEaXJ0eQBtYXJrRGlydHkAZGVzdHJveQBzZXREaXNwbGF5AGdldERpc3BsYXkAc2V0RmxleAAtKyAgIDBYMHgALTBYKzBYIDBYLTB4KzB4IDB4AHNldEZsZXhHcm93AGdldEZsZXhHcm93AHNldE92ZXJmbG93AGdldE92ZXJmbG93AGNhbGN1bGF0ZUxheW91dABnZXRDb21wdXRlZExheW91dAB1bnNpZ25lZCBzaG9ydABnZXRDaGlsZENvdW50AHVuc2lnbmVkIGludABzZXRKdXN0aWZ5Q29udGVudABnZXRKdXN0aWZ5Q29udGVudABhdmFpbGFibGVIZWlnaHQgaXMgaW5kZWZpbml0ZSBzbyBoZWlnaHRTaXppbmdNb2RlIG11c3QgYmUgU2l6aW5nTW9kZTo6TWF4Q29udGVudABhdmFpbGFibGVXaWR0aCBpcyBpbmRlZmluaXRlIHNvIHdpZHRoU2l6aW5nTW9kZSBtdXN0IGJlIFNpemluZ01vZGU6Ok1heENvbnRlbnQAc2V0QWxpZ25Db250ZW50AGdldEFsaWduQ29udGVudABnZXRQYXJlbnQAaW1wbGVtZW50AHNldE1heEhlaWdodFBlcmNlbnQAc2V0SGVpZ2h0UGVyY2VudABzZXRNaW5IZWlnaHRQZXJjZW50AHNldEZsZXhCYXNpc1BlcmNlbnQAc2V0UG9zaXRpb25QZXJjZW50AHNldE1hcmdpblBlcmNlbnQAc2V0TWF4V2lkdGhQZXJjZW50AHNldFdpZHRoUGVyY2VudABzZXRNaW5XaWR0aFBlcmNlbnQAc2V0UGFkZGluZ1BlcmNlbnQAaGFuZGxlLnR5cGUoKSA9PSBTdHlsZVZhbHVlSGFuZGxlOjpUeXBlOjpQb2ludCB8fCBoYW5kbGUudHlwZSgpID09IFN0eWxlVmFsdWVIYW5kbGU6OlR5cGU6OlBlcmNlbnQAY3JlYXRlRGVmYXVsdAB1bml0AHJpZ2h0AGhlaWdodABzZXRNYXhIZWlnaHQAZ2V0TWF4SGVpZ2h0AHNldEhlaWdodABnZXRIZWlnaHQAc2V0TWluSGVpZ2h0AGdldE1pbkhlaWdodABnZXRDb21wdXRlZEhlaWdodABnZXRDb21wdXRlZFJpZ2h0AGxlZnQAZ2V0Q29tcHV0ZWRMZWZ0AHJlc2V0AF9fZGVzdHJ1Y3QAZmxvYXQAdWludDY0X3QAdXNlV2ViRGVmYXVsdHMAc2V0VXNlV2ViRGVmYXVsdHMAc2V0QWxpZ25JdGVtcwBnZXRBbGlnbkl0ZW1zAHNldEZsZXhCYXNpcwBnZXRGbGV4QmFzaXMAQ2Fubm90IGdldCBsYXlvdXQgcHJvcGVydGllcyBvZiBtdWx0aS1lZGdlIHNob3J0aGFuZHMAc2V0UG9pbnRTY2FsZUZhY3RvcgBNZWFzdXJlQ2FsbGJhY2tXcmFwcGVyAERpcnRpZWRDYWxsYmFja1dyYXBwZXIAQ2Fubm90IHJlc2V0IGEgbm9kZSBzdGlsbCBhdHRhY2hlZCB0byBhIG93bmVyAHNldEJvcmRlcgBnZXRCb3JkZXIAZ2V0Q29tcHV0ZWRCb3JkZXIAZ2V0TnVtYmVyAGhhbmRsZS50eXBlKCkgPT0gU3R5bGVWYWx1ZUhhbmRsZTo6VHlwZTo6TnVtYmVyAHVuc2lnbmVkIGNoYXIAdG9wAGdldENvbXB1dGVkVG9wAHNldEZsZXhXcmFwAGdldEZsZXhXcmFwAHNldEdhcABnZXRHYXAAJXAAc2V0SGVpZ2h0QXV0bwBzZXRGbGV4QmFzaXNBdXRvAHNldE1hcmdpbkF1dG8Ac2V0V2lkdGhBdXRvAFNjYWxlIGZhY3RvciBzaG91bGQgbm90IGJlIGxlc3MgdGhhbiB6ZXJvAHNldEFzcGVjdFJhdGlvAGdldEFzcGVjdFJhdGlvAHNldFBvc2l0aW9uAGdldFBvc2l0aW9uAG5vdGlmeU9uRGVzdHJ1Y3Rpb24Ac2V0RmxleERpcmVjdGlvbgBnZXRGbGV4RGlyZWN0aW9uAHNldE1hcmdpbgBnZXRNYXJnaW4AZ2V0Q29tcHV0ZWRNYXJnaW4AbmFuAGJvdHRvbQBnZXRDb21wdXRlZEJvdHRvbQBib29sAGVtc2NyaXB0ZW46OnZhbABzZXRGbGV4U2hyaW5rAGdldEZsZXhTaHJpbmsAc2V0QWx3YXlzRm9ybXNDb250YWluaW5nQmxvY2sATWVhc3VyZUNhbGxiYWNrAERpcnRpZWRDYWxsYmFjawBnZXRMZW5ndGgAd2lkdGgAc2V0TWF4V2lkdGgAZ2V0TWF4V2lkdGgAc2V0V2lkdGgAZ2V0V2lkdGgAc2V0TWluV2lkdGgAZ2V0TWluV2lkdGgAZ2V0Q29tcHV0ZWRXaWR0aABwdXNoAC9ob21lL3J1bm5lci93b3JrL3lvZ2EveW9nYS9qYXZhc2NyaXB0Ly4uL3lvZ2Evc3R5bGUvU21hbGxWYWx1ZUJ1ZmZlci5oAC9ob21lL3J1bm5lci93b3JrL3lvZ2EveW9nYS9qYXZhc2NyaXB0Ly4uL3lvZ2Evc3R5bGUvU3R5bGVWYWx1ZVBvb2wuaAB1bnNpZ25lZCBsb25nAHN0ZDo6d3N0cmluZwBzdGQ6OnN0cmluZwBzdGQ6OnUxNnN0cmluZwBzdGQ6OnUzMnN0cmluZwBzZXRQYWRkaW5nAGdldFBhZGRpbmcAZ2V0Q29tcHV0ZWRQYWRkaW5nAFRyaWVkIHRvIGNvbnN0cnVjdCBZR05vZGUgd2l0aCBudWxsIGNvbmZpZwBBdHRlbXB0aW5nIHRvIGNvbnN0cnVjdCBOb2RlIHdpdGggbnVsbCBjb25maWcAY3JlYXRlV2l0aENvbmZpZwBpbmYAc2V0QWxpZ25TZWxmAGdldEFsaWduU2VsZgBTaXplAHZhbHVlAFZhbHVlAGNyZWF0ZQBtZWFzdXJlAHNldFBvc2l0aW9uVHlwZQBnZXRQb3NpdGlvblR5cGUAaXNSZWZlcmVuY2VCYXNlbGluZQBzZXRJc1JlZmVyZW5jZUJhc2VsaW5lAGNvcHlTdHlsZQBkb3VibGUATm9kZQBleHRlbmQAaW5zZXJ0Q2hpbGQAZ2V0Q2hpbGQAcmVtb3ZlQ2hpbGQAdm9pZABzZXRFeHBlcmltZW50YWxGZWF0dXJlRW5hYmxlZABpc0V4cGVyaW1lbnRhbEZlYXR1cmVFbmFibGVkAGRpcnRpZWQAQ2Fubm90IHJlc2V0IGEgbm9kZSB3aGljaCBzdGlsbCBoYXMgY2hpbGRyZW4gYXR0YWNoZWQAdW5zZXRNZWFzdXJlRnVuYwB1bnNldERpcnRpZWRGdW5jAHNldEVycmF0YQBnZXRFcnJhdGEARXhwZWN0IGN1c3RvbSBiYXNlbGluZSBmdW5jdGlvbiB0byBub3QgcmV0dXJuIE5hTgBOQU4ASU5GAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8Y2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgY2hhcj4Ac3RkOjpiYXNpY19zdHJpbmc8dW5zaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8c2lnbmVkIGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGxvbmc+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGRvdWJsZT4AQ2hpbGQgYWxyZWFkeSBoYXMgYSBvd25lciwgaXQgbXVzdCBiZSByZW1vdmVkIGZpcnN0LgBDYW5ub3Qgc2V0IG1lYXN1cmUgZnVuY3Rpb246IE5vZGVzIHdpdGggbWVhc3VyZSBmdW5jdGlvbnMgY2Fubm90IGhhdmUgY2hpbGRyZW4uAENhbm5vdCBhZGQgY2hpbGQ6IE5vZGVzIHdpdGggbWVhc3VyZSBmdW5jdGlvbnMgY2Fubm90IGhhdmUgY2hpbGRyZW4uAChudWxsKQBpbmRleCA8IDQwOTYgJiYgIlNtYWxsVmFsdWVCdWZmZXIgY2FuIG9ubHkgaG9sZCB1cCB0byA0MDk2IGNodW5rcyIAJXMKAAEAAAADAAAAAAAAAAIAAAADAAAAAQAAAAIAAAAAAAAAAQAAAAEAQdAkCwdpaQB2AHZpAEHgJAs33xwAAN0cAAAdHQAAFx0AAB0dAAAXHQAAaWlpZmlmaQAQHQAA4BwAAHZpaQDhHAAAJB0AAGlpaQBBoCULCbwAAAC9AAAAvgBBtCULDrwAAAC/AAAAwAAAABAdAEHQJQs+3xwAAB0dAAAXHQAAHR0AABcdAAAkHQAAHx0AACQdAABpaWlpAAAAABAdAAD1HAAAEB0AAPccAAD4HAAAJB0AQZgmCwnBAAAAwgAAAMMAQawmCxbBAAAAxAAAAMAAAAD7HAAAEB0AAPscAEHQJguiAxAdAAD7HAAAFx0AABEdAAB2aWlpaQAAABAdAAD7HAAAHR0AAHZpaWYAAAAAEB0AAPscAAAXHQAAdmlpaQAAAAAQHQAA+xwAABEdAAARHQAA/BwAABcdAAAXHQAA/BwAABEdAAD8HAAAaQBkaWkAdmlpZAAAAB0AAAAdAAD7HAAAEB0AAAAdAAAQHQAAAB0AAP8cAAAQHQAAAB0AABcdAAAQHQAAAB0AABcdAAAeHQAAdmlpaWQAAAAQHQAAAB0AAB4dAAAXHQAAAR0AAP4cAAABHQAAFx0AAP4cAAABHQAAHh0AAAEdAAAeHQAAAR0AABcdAABkaWlpAAAAAB0dAAAAHQAAFx0AAGZpaWkAAAAAEB0AAAAdAAAAHQAAGB0AABAdAAAAHQAAAB0AABgdAAABHQAAAB0AAAAdAAAAHQAAAB0AABgdAAAQHQAAAB0AABEdAAARHQAAAB0AABAdAAAAHQAA3RwAABAdAAAAHQAA9RwAABEdAAABHQAAAAAAABAdAAAAHQAAHh0AAB4dAAAXHQAAdmlpZGRpAAD9HAAAAR0AQYAqC0EZAAoAGRkZAAAAAAUAAAAAAAAJAAAAAAsAAAAAAAAAABkAEQoZGRkDCgcAAQAJCxgAAAkGCwAACwAGGQAAABkZGQBB0SoLIQ4AAAAAAAAAABkACg0ZGRkADQAAAgAJDgAAAAkADgAADgBBiysLAQwAQZcrCxUTAAAAABMAAAAACQwAAAAAAAwAAAwAQcUrCwEQAEHRKwsVDwAAAAQPAAAAAAkQAAAAAAAQAAAQAEH/KwsBEgBBiywLHhEAAAAAEQAAAAAJEgAAAAAAEgAAEgAAGgAAABoaGgBBwiwLDhoAAAAaGhoAAAAAAAAJAEHzLAsBFABB/ywLFRcAAAAAFwAAAAAJFAAAAAAAFAAAFABBrS0LARYAQbktCycVAAAAABUAAAAACRYAAAAAABYAABYAADAxMjM0NTY3ODlBQkNERUYAQYQuCwHKAEGsLgsI//////////8AQfAuCwlQIQEAAAAAAAUAQYQvCwHFAEGcLwsKxgAAAMcAAAA4HQBBtC8LAQIAQcQvCwj//////////wBBiDALAQUAQZQwCwHIAEGsMAsOxgAAAMkAAABIHQAAAAQAQcQwCwEBAEHUMAsF/////woAQZgxCwHL";if(!ua(H)){var va=H;H=h.locateFile?h.locateFile(va,q):q+va;}
|
356
|
+
function wa(){var a=H;try{if(a==H&&w)return new Uint8Array(w);if(ua(a))try{var b=xa(a.slice(37)),c=new Uint8Array(b.length);for(a=0;a<b.length;++a)c[a]=b.charCodeAt(a);var d=c;}catch(f){throw Error("Converting base64 string to bytes failed.");}else d=void 0;var e=d;if(e)return e;throw "both async and sync fetching of the wasm failed";}catch(f){x(f);}}
|
357
|
+
function ya(){return w||"function"!=typeof fetch?Promise.resolve().then(function(){return wa()}):fetch(H,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw "failed to load wasm binary file at '"+H+"'";return a.arrayBuffer()}).catch(function(){return wa()})}function za(a){for(;0<a.length;)a.shift()(h);}function Aa(a){if(void 0===a)return "_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}
|
358
|
+
function Ba(a,b){a=Aa(a);return function(){return b.apply(this,arguments)}}var J=[{},{value:void 0},{value:null},{value:!0},{value:!1}],Ca=[];function Da(a){var b=Error,c=Ba(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""));});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c}var K=void 0;
|
359
|
+
function L(a){throw new K(a);}var M=a=>{a||L("Cannot use deleted val. handle = "+a);return J[a].value},Ea=a=>{switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=Ca.length?Ca.pop():J.length;J[b]={ga:1,value:a};return b}},Fa=void 0,Ga=void 0;function N(a){for(var b="";A[a];)b+=Ga[A[a++]];return b}var O=[];function Ha(){for(;O.length;){var a=O.pop();a.M.$=!1;a["delete"]();}}var P=void 0,Q={};
|
360
|
+
function Ia(a,b){for(void 0===b&&L("ptr should not be undefined");a.R;)b=a.ba(b),a=a.R;return b}var R={};function Ja(a){a=Ka(a);var b=N(a);S(a);return b}function La(a,b){var c=R[a];void 0===c&&L(b+" has unknown type "+Ja(a));return c}function Ma(){}var Na=!1;function Oa(a){--a.count.value;0===a.count.value&&(a.T?a.U.W(a.T):a.P.N.W(a.O));}function Pa(a,b,c){if(b===c)return a;if(void 0===c.R)return null;a=Pa(a,b,c.R);return null===a?null:c.na(a)}var Qa={};function Ra(a,b){b=Ia(a,b);return Q[b]}
|
361
|
+
var Sa=void 0;function Ta(a){throw new Sa(a);}function Ua(a,b){b.P&&b.O||Ta("makeClassHandle requires ptr and ptrType");!!b.U!==!!b.T&&Ta("Both smartPtrType and smartPtr must be specified");b.count={value:1};return T(Object.create(a,{M:{value:b}}))}function T(a){if("undefined"===typeof FinalizationRegistry)return T=b=>b,a;Na=new FinalizationRegistry(b=>{Oa(b.M);});T=b=>{var c=b.M;c.T&&Na.register(b,{M:c},b);return b};Ma=b=>{Na.unregister(b);};return T(a)}var Va={};
|
362
|
+
function Wa(a){for(;a.length;){var b=a.pop();a.pop()(b);}}function Xa(a){return this.fromWireType(D[a>>2])}var U={},Ya={};function V(a,b,c){function d(k){k=c(k);k.length!==a.length&&Ta("Mismatched type converter count");for(var m=0;m<a.length;++m)W(a[m],k[m]);}a.forEach(function(k){Ya[k]=b;});var e=Array(b.length),f=[],g=0;b.forEach((k,m)=>{R.hasOwnProperty(k)?e[m]=R[k]:(f.push(k),U.hasOwnProperty(k)||(U[k]=[]),U[k].push(()=>{e[m]=R[k];++g;g===f.length&&d(e);}));});0===f.length&&d(e);}
|
363
|
+
function Za(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+a);}}
|
364
|
+
function W(a,b,c={}){if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");var d=b.name;a||L('type "'+d+'" must have a positive integer typeid pointer');if(R.hasOwnProperty(a)){if(c.ua)return;L("Cannot register type '"+d+"' twice");}R[a]=b;delete Ya[a];U.hasOwnProperty(a)&&(b=U[a],delete U[a],b.forEach(e=>e()));}function $a(a){L(a.M.P.N.name+" instance already deleted");}function X(){}
|
365
|
+
function ab(a,b,c){if(void 0===a[b].S){var d=a[b];a[b]=function(){a[b].S.hasOwnProperty(arguments.length)||L("Function '"+c+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+a[b].S+")!");return a[b].S[arguments.length].apply(this,arguments)};a[b].S=[];a[b].S[d.Z]=d;}}
|
366
|
+
function bb(a,b){h.hasOwnProperty(a)?(L("Cannot register public name '"+a+"' twice"),ab(h,a,a),h.hasOwnProperty(void 0)&&L("Cannot register multiple overloads of a function with the same number of arguments (undefined)!"),h[a].S[void 0]=b):h[a]=b;}function cb(a,b,c,d,e,f,g,k){this.name=a;this.constructor=b;this.X=c;this.W=d;this.R=e;this.pa=f;this.ba=g;this.na=k;this.ja=[];}
|
367
|
+
function db(a,b,c){for(;b!==c;)b.ba||L("Expected null or instance of "+c.name+", got an instance of "+b.name),a=b.ba(a),b=b.R;return a}function eb(a,b){if(null===b)return this.ea&&L("null is not a valid "+this.name),0;b.M||L('Cannot pass "'+fb(b)+'" as a '+this.name);b.M.O||L("Cannot pass deleted object as a pointer of type "+this.name);return db(b.M.O,b.M.P.N,this.N)}
|
368
|
+
function gb(a,b){if(null===b){this.ea&&L("null is not a valid "+this.name);if(this.da){var c=this.fa();null!==a&&a.push(this.W,c);return c}return 0}b.M||L('Cannot pass "'+fb(b)+'" as a '+this.name);b.M.O||L("Cannot pass deleted object as a pointer of type "+this.name);!this.ca&&b.M.P.ca&&L("Cannot convert argument of type "+(b.M.U?b.M.U.name:b.M.P.name)+" to parameter type "+this.name);c=db(b.M.O,b.M.P.N,this.N);if(this.da)switch(void 0===b.M.T&&L("Passing raw pointer to smart pointer is illegal"),
|
369
|
+
this.Ba){case 0:b.M.U===this?c=b.M.T:L("Cannot convert argument of type "+(b.M.U?b.M.U.name:b.M.P.name)+" to parameter type "+this.name);break;case 1:c=b.M.T;break;case 2:if(b.M.U===this)c=b.M.T;else {var d=b.clone();c=this.xa(c,Ea(function(){d["delete"]();}));null!==a&&a.push(this.W,c);}break;default:L("Unsupporting sharing policy");}return c}
|
370
|
+
function hb(a,b){if(null===b)return this.ea&&L("null is not a valid "+this.name),0;b.M||L('Cannot pass "'+fb(b)+'" as a '+this.name);b.M.O||L("Cannot pass deleted object as a pointer of type "+this.name);b.M.P.ca&&L("Cannot convert argument of type "+b.M.P.name+" to parameter type "+this.name);return db(b.M.O,b.M.P.N,this.N)}
|
371
|
+
function Y(a,b,c,d){this.name=a;this.N=b;this.ea=c;this.ca=d;this.da=!1;this.W=this.xa=this.fa=this.ka=this.Ba=this.wa=void 0;void 0!==b.R?this.toWireType=gb:(this.toWireType=d?eb:hb,this.V=null);}function ib(a,b){h.hasOwnProperty(a)||Ta("Replacing nonexistant public symbol");h[a]=b;h[a].Z=void 0;}
|
372
|
+
function jb(a,b){var c=[];return function(){c.length=0;Object.assign(c,arguments);if(a.includes("j")){var d=h["dynCall_"+a];d=c&&c.length?d.apply(null,[b].concat(c)):d.call(null,b);}else d=oa.get(b).apply(null,c);return d}}function Z(a,b){a=N(a);var c=a.includes("j")?jb(a,b):oa.get(b);"function"!=typeof c&&L("unknown function pointer with signature "+a+": "+b);return c}var mb=void 0;
|
373
|
+
function nb(a,b){function c(f){e[f]||R[f]||(Ya[f]?Ya[f].forEach(c):(d.push(f),e[f]=!0));}var d=[],e={};b.forEach(c);throw new mb(a+": "+d.map(Ja).join([", "]));}
|
374
|
+
function ob(a,b,c,d,e){var f=b.length;2>f&&L("argTypes array size mismatch! Must at least get return value and 'this' types!");var g=null!==b[1]&&null!==c,k=!1;for(c=1;c<b.length;++c)if(null!==b[c]&&void 0===b[c].V){k=!0;break}var m="void"!==b[0].name,l=f-2,n=Array(l),p=[],r=[];return function(){arguments.length!==l&&L("function "+a+" called with "+arguments.length+" arguments, expected "+l+" args!");r.length=0;p.length=g?2:1;p[0]=e;if(g){var u=b[1].toWireType(r,this);p[1]=u;}for(var t=0;t<l;++t)n[t]=
|
375
|
+
b[t+2].toWireType(r,arguments[t]),p.push(n[t]);t=d.apply(null,p);if(k)Wa(r);else for(var y=g?1:2;y<b.length;y++){var B=1===y?u:n[y-2];null!==b[y].V&&b[y].V(B);}u=m?b[0].fromWireType(t):void 0;return u}}function pb(a,b){for(var c=[],d=0;d<a;d++)c.push(E[b+4*d>>2]);return c}function qb(a){4<a&&0===--J[a].ga&&(J[a]=void 0,Ca.push(a));}function fb(a){if(null===a)return "null";var b=typeof a;return "object"===b||"array"===b||"function"===b?a.toString():""+a}
|
376
|
+
function rb(a,b){switch(b){case 2:return function(c){return this.fromWireType(la[c>>2])};case 3:return function(c){return this.fromWireType(ma[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}
|
377
|
+
function sb(a,b,c){switch(b){case 0:return c?function(d){return ja[d]}:function(d){return A[d]};case 1:return c?function(d){return C[d>>1]}:function(d){return ka[d>>1]};case 2:return c?function(d){return D[d>>2]}:function(d){return E[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}}function tb(a,b){for(var c="",d=0;!(d>=b/2);++d){var e=C[a+2*d>>1];if(0==e)break;c+=String.fromCharCode(e);}return c}
|
378
|
+
function ub(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e<c;++e)C[b>>1]=a.charCodeAt(e),b+=2;C[b>>1]=0;return b-d}function vb(a){return 2*a.length}function wb(a,b){for(var c=0,d="";!(c>=b/4);){var e=D[a+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e);}return d}
|
379
|
+
function xb(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e<a.length;++e){var f=a.charCodeAt(e);if(55296<=f&&57343>=f){var g=a.charCodeAt(++e);f=65536+((f&1023)<<10)|g&1023;}D[b>>2]=f;b+=4;if(b+4>c)break}D[b>>2]=0;return b-d}function yb(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4;}return b}var zb={};function Ab(a){var b=zb[a];return void 0===b?N(a):b}var Bb=[];function Cb(a){var b=Bb.length;Bb.push(a);return b}
|
380
|
+
function Db(a,b){for(var c=Array(a),d=0;d<a;++d)c[d]=La(E[b+4*d>>2],"parameter "+d);return c}var Eb=[],Fb=[null,[],[]];K=h.BindingError=Da("BindingError");h.count_emval_handles=function(){for(var a=0,b=5;b<J.length;++b)void 0!==J[b]&&++a;return a};h.get_first_emval=function(){for(var a=5;a<J.length;++a)if(void 0!==J[a])return J[a];return null};Fa=h.PureVirtualError=Da("PureVirtualError");for(var Gb=Array(256),Hb=0;256>Hb;++Hb)Gb[Hb]=String.fromCharCode(Hb);Ga=Gb;h.getInheritedInstanceCount=function(){return Object.keys(Q).length};
|
381
|
+
h.getLiveInheritedInstances=function(){var a=[],b;for(b in Q)Q.hasOwnProperty(b)&&a.push(Q[b]);return a};h.flushPendingDeletes=Ha;h.setDelayFunction=function(a){P=a;O.length&&P&&P(Ha);};Sa=h.InternalError=Da("InternalError");X.prototype.isAliasOf=function(a){if(!(this instanceof X&&a instanceof X))return !1;var b=this.M.P.N,c=this.M.O,d=a.M.P.N;for(a=a.M.O;b.R;)c=b.ba(c),b=b.R;for(;d.R;)a=d.ba(a),d=d.R;return b===d&&c===a};
|
382
|
+
X.prototype.clone=function(){this.M.O||$a(this);if(this.M.aa)return this.M.count.value+=1,this;var a=T,b=Object,c=b.create,d=Object.getPrototypeOf(this),e=this.M;a=a(c.call(b,d,{M:{value:{count:e.count,$:e.$,aa:e.aa,O:e.O,P:e.P,T:e.T,U:e.U}}}));a.M.count.value+=1;a.M.$=!1;return a};X.prototype["delete"]=function(){this.M.O||$a(this);this.M.$&&!this.M.aa&&L("Object already scheduled for deletion");Ma(this);Oa(this.M);this.M.aa||(this.M.T=void 0,this.M.O=void 0);};X.prototype.isDeleted=function(){return !this.M.O};
|
383
|
+
X.prototype.deleteLater=function(){this.M.O||$a(this);this.M.$&&!this.M.aa&&L("Object already scheduled for deletion");O.push(this);1===O.length&&P&&P(Ha);this.M.$=!0;return this};Y.prototype.qa=function(a){this.ka&&(a=this.ka(a));return a};Y.prototype.ha=function(a){this.W&&this.W(a);};Y.prototype.argPackAdvance=8;Y.prototype.readValueFromPointer=Xa;Y.prototype.deleteObject=function(a){if(null!==a)a["delete"]();};
|
384
|
+
Y.prototype.fromWireType=function(a){function b(){return this.da?Ua(this.N.X,{P:this.wa,O:c,U:this,T:a}):Ua(this.N.X,{P:this,O:a})}var c=this.qa(a);if(!c)return this.ha(a),null;var d=Ra(this.N,c);if(void 0!==d){if(0===d.M.count.value)return d.M.O=c,d.M.T=a,d.clone();d=d.clone();this.ha(a);return d}d=this.N.pa(c);d=Qa[d];if(!d)return b.call(this);d=this.ca?d.la:d.pointerType;var e=Pa(c,this.N,d.N);return null===e?b.call(this):this.da?Ua(d.N.X,{P:d,O:e,U:this,T:a}):Ua(d.N.X,{P:d,O:e})};
|
385
|
+
mb=h.UnboundTypeError=Da("UnboundTypeError");
|
386
|
+
var xa="function"==typeof atob?atob:function(a){var b="",c=0;a=a.replace(/[^A-Za-z0-9\+\/=]/g,"");do{var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(c++));var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(c++));var f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(c++));var g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(c++));d=d<<2|e>>4;
|
387
|
+
e=(e&15)<<4|f>>2;var k=(f&3)<<6|g;b+=String.fromCharCode(d);64!==f&&(b+=String.fromCharCode(e));64!==g&&(b+=String.fromCharCode(k));}while(c<a.length);return b},Jb={l:function(a,b,c,d){x("Assertion failed: "+(a?z(A,a):"")+", at: "+[b?b?z(A,b):"":"unknown filename",c,d?d?z(A,d):"":"unknown function"]);},q:function(a,b,c){a=N(a);b=La(b,"wrapper");c=M(c);var d=[].slice,e=b.N,f=e.X,g=e.R.X,k=e.R.constructor;a=Ba(a,function(){e.R.ja.forEach(function(l){if(this[l]===g[l])throw new Fa("Pure virtual function "+
|
388
|
+
l+" must be implemented in JavaScript");}.bind(this));Object.defineProperty(this,"__parent",{value:f});this.__construct.apply(this,d.call(arguments));});f.__construct=function(){this===f&&L("Pass correct 'this' to __construct");var l=k.implement.apply(void 0,[this].concat(d.call(arguments)));Ma(l);var n=l.M;l.notifyOnDestruction();n.aa=!0;Object.defineProperties(this,{M:{value:n}});T(this);l=n.O;l=Ia(e,l);Q.hasOwnProperty(l)?L("Tried to register registered instance: "+l):Q[l]=this;};f.__destruct=function(){this===
|
389
|
+
f&&L("Pass correct 'this' to __destruct");Ma(this);var l=this.M.O;l=Ia(e,l);Q.hasOwnProperty(l)?delete Q[l]:L("Tried to unregister unregistered instance: "+l);};a.prototype=Object.create(f);for(var m in c)a.prototype[m]=c[m];return Ea(a)},j:function(a){var b=Va[a];delete Va[a];var c=b.fa,d=b.W,e=b.ia,f=e.map(g=>g.ta).concat(e.map(g=>g.za));V([a],f,g=>{var k={};e.forEach((m,l)=>{var n=g[l],p=m.ra,r=m.sa,u=g[l+e.length],t=m.ya,y=m.Aa;k[m.oa]={read:B=>n.fromWireType(p(r,B)),write:(B,ba)=>{var I=[];t(y,
|
390
|
+
B,u.toWireType(I,ba));Wa(I);}};});return [{name:b.name,fromWireType:function(m){var l={},n;for(n in k)l[n]=k[n].read(m);d(m);return l},toWireType:function(m,l){for(var n in k)if(!(n in l))throw new TypeError('Missing field: "'+n+'"');var p=c();for(n in k)k[n].write(p,l[n]);null!==m&&m.push(d,p);return p},argPackAdvance:8,readValueFromPointer:Xa,V:d}]});},v:function(){},B:function(a,b,c,d,e){var f=Za(c);b=N(b);W(a,{name:b,fromWireType:function(g){return !!g},toWireType:function(g,k){return k?d:e},argPackAdvance:8,
|
391
|
+
readValueFromPointer:function(g){if(1===c)var k=ja;else if(2===c)k=C;else if(4===c)k=D;else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(k[g>>f])},V:null});},f:function(a,b,c,d,e,f,g,k,m,l,n,p,r){n=N(n);f=Z(e,f);k&&(k=Z(g,k));l&&(l=Z(m,l));r=Z(p,r);var u=Aa(n);bb(u,function(){nb("Cannot construct "+n+" due to unbound types",[d]);});V([a,b,c],d?[d]:[],function(t){t=t[0];if(d){var y=t.N;var B=y.X;}else B=X.prototype;t=Ba(u,function(){if(Object.getPrototypeOf(this)!==ba)throw new K("Use 'new' to construct "+
|
392
|
+
n);if(void 0===I.Y)throw new K(n+" has no accessible constructor");var kb=I.Y[arguments.length];if(void 0===kb)throw new K("Tried to invoke ctor of "+n+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(I.Y).toString()+") parameters instead!");return kb.apply(this,arguments)});var ba=Object.create(B,{constructor:{value:t}});t.prototype=ba;var I=new cb(n,t,ba,r,y,f,k,l);y=new Y(n,I,!0,!1);B=new Y(n+"*",I,!1,!1);var lb=new Y(n+" const*",I,!1,!0);Qa[a]={pointerType:B,
|
393
|
+
la:lb};ib(u,t);return [y,B,lb]});},d:function(a,b,c,d,e,f,g){var k=pb(c,d);b=N(b);f=Z(e,f);V([],[a],function(m){function l(){nb("Cannot call "+n+" due to unbound types",k);}m=m[0];var n=m.name+"."+b;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);var p=m.N.constructor;void 0===p[b]?(l.Z=c-1,p[b]=l):(ab(p,b,n),p[b].S[c-1]=l);V([],k,function(r){r=ob(n,[r[0],null].concat(r.slice(1)),null,f,g);void 0===p[b].S?(r.Z=c-1,p[b]=r):p[b].S[c-1]=r;return []});return []});},p:function(a,b,c,d,e,f){0<b||x();var g=pb(b,
|
394
|
+
c);e=Z(d,e);V([],[a],function(k){k=k[0];var m="constructor "+k.name;void 0===k.N.Y&&(k.N.Y=[]);if(void 0!==k.N.Y[b-1])throw new K("Cannot register multiple constructors with identical number of parameters ("+(b-1)+") for class '"+k.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!");k.N.Y[b-1]=()=>{nb("Cannot construct "+k.name+" due to unbound types",g);};V([],g,function(l){l.splice(1,0,null);k.N.Y[b-1]=ob(m,l,null,e,f);return []});return []});},
|
395
|
+
a:function(a,b,c,d,e,f,g,k){var m=pb(c,d);b=N(b);f=Z(e,f);V([],[a],function(l){function n(){nb("Cannot call "+p+" due to unbound types",m);}l=l[0];var p=l.name+"."+b;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);k&&l.N.ja.push(b);var r=l.N.X,u=r[b];void 0===u||void 0===u.S&&u.className!==l.name&&u.Z===c-2?(n.Z=c-2,n.className=l.name,r[b]=n):(ab(r,b,p),r[b].S[c-2]=n);V([],m,function(t){t=ob(p,t,l,f,g);void 0===r[b].S?(t.Z=c-2,r[b]=t):r[b].S[c-2]=t;return []});return []});},A:function(a,b){b=N(b);W(a,
|
396
|
+
{name:b,fromWireType:function(c){var d=M(c);qb(c);return d},toWireType:function(c,d){return Ea(d)},argPackAdvance:8,readValueFromPointer:Xa,V:null});},n:function(a,b,c){c=Za(c);b=N(b);W(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,e){return e},argPackAdvance:8,readValueFromPointer:rb(b,c),V:null});},e:function(a,b,c,d,e){b=N(b);-1===e&&(e=4294967295);e=Za(c);var f=k=>k;if(0===d){var g=32-8*c;f=k=>k<<g>>>g;}c=b.includes("unsigned")?function(k,m){return m>>>0}:function(k,m){return m};
|
397
|
+
W(a,{name:b,fromWireType:f,toWireType:c,argPackAdvance:8,readValueFromPointer:sb(b,e,0!==d),V:null});},b:function(a,b,c){function d(f){f>>=2;var g=E;return new e(ia,g[f+1],g[f])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=N(c);W(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{ua:!0});},o:function(a,b){b=N(b);var c="std::string"===b;W(a,{name:b,fromWireType:function(d){var e=E[d>>2],f=d+4;if(c)for(var g=f,k=0;k<=e;++k){var m=
|
398
|
+
f+k;if(k==e||0==A[m]){g=g?z(A,g,m-g):"";if(void 0===l)var l=g;else l+=String.fromCharCode(0),l+=g;g=m+1;}}else {l=Array(e);for(k=0;k<e;++k)l[k]=String.fromCharCode(A[f+k]);l=l.join("");}S(d);return l},toWireType:function(d,e){e instanceof ArrayBuffer&&(e=new Uint8Array(e));var f,g="string"==typeof e;g||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Int8Array||L("Cannot pass non-string to std::string");if(c&&g){var k=0;for(f=0;f<e.length;++f){var m=e.charCodeAt(f);127>=m?k++:2047>=
|
399
|
+
m?k+=2:55296<=m&&57343>=m?(k+=4,++f):k+=3;}f=k;}else f=e.length;k=Ib(4+f+1);m=k+4;E[k>>2]=f;if(c&&g){if(g=m,m=f+1,f=A,0<m){m=g+m-1;for(var l=0;l<e.length;++l){var n=e.charCodeAt(l);if(55296<=n&&57343>=n){var p=e.charCodeAt(++l);n=65536+((n&1023)<<10)|p&1023;}if(127>=n){if(g>=m)break;f[g++]=n;}else {if(2047>=n){if(g+1>=m)break;f[g++]=192|n>>6;}else {if(65535>=n){if(g+2>=m)break;f[g++]=224|n>>12;}else {if(g+3>=m)break;f[g++]=240|n>>18;f[g++]=128|n>>12&63;}f[g++]=128|n>>6&63;}f[g++]=128|n&63;}}f[g]=0;}}else if(g)for(g=
|
400
|
+
0;g<f;++g)l=e.charCodeAt(g),255<l&&(S(m),L("String has UTF-16 code units that do not fit in 8 bits")),A[m+g]=l;else for(g=0;g<f;++g)A[m+g]=e[g];null!==d&&d.push(S,k);return k},argPackAdvance:8,readValueFromPointer:Xa,V:function(d){S(d);}});},i:function(a,b,c){c=N(c);if(2===b){var d=tb;var e=ub;var f=vb;var g=()=>ka;var k=1;}else 4===b&&(d=wb,e=xb,f=yb,g=()=>E,k=2);W(a,{name:c,fromWireType:function(m){for(var l=E[m>>2],n=g(),p,r=m+4,u=0;u<=l;++u){var t=m+4+u*b;if(u==l||0==n[t>>k])r=d(r,t-r),void 0===
|
401
|
+
p?p=r:(p+=String.fromCharCode(0),p+=r),r=t+b;}S(m);return p},toWireType:function(m,l){"string"!=typeof l&&L("Cannot pass non-string to C++ string type "+c);var n=f(l),p=Ib(4+n+b);E[p>>2]=n>>k;e(l,p+4,n+b);null!==m&&m.push(S,p);return p},argPackAdvance:8,readValueFromPointer:Xa,V:function(m){S(m);}});},k:function(a,b,c,d,e,f){Va[a]={name:N(b),fa:Z(c,d),W:Z(e,f),ia:[]};},h:function(a,b,c,d,e,f,g,k,m,l){Va[a].ia.push({oa:N(b),ta:c,ra:Z(d,e),sa:f,za:g,ya:Z(k,m),Aa:l});},C:function(a,b){b=N(b);W(a,{va:!0,name:b,
|
402
|
+
argPackAdvance:0,fromWireType:function(){},toWireType:function(){}});},s:function(a,b,c,d,e){a=Bb[a];b=M(b);c=Ab(c);var f=[];E[d>>2]=Ea(f);return a(b,c,f,e)},t:function(a,b,c,d){a=Bb[a];b=M(b);c=Ab(c);a(b,c,null,d);},g:qb,m:function(a,b){var c=Db(a,b),d=c[0];b=d.name+"_$"+c.slice(1).map(function(g){return g.name}).join("_")+"$";var e=Eb[b];if(void 0!==e)return e;var f=Array(a-1);e=Cb((g,k,m,l)=>{for(var n=0,p=0;p<a-1;++p)f[p]=c[p+1].readValueFromPointer(l+n),n+=c[p+1].argPackAdvance;g=g[k].apply(g,
|
403
|
+
f);for(p=0;p<a-1;++p)c[p+1].ma&&c[p+1].ma(f[p]);if(!d.va)return d.toWireType(m,g)});return Eb[b]=e},D:function(a){4<a&&(J[a].ga+=1);},r:function(a){var b=M(a);Wa(b);qb(a);},c:function(){x("");},x:function(a,b,c){A.copyWithin(a,b,b+c);},w:function(a){var b=A.length;a>>>=0;if(2147483648<a)return !1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);var e=Math;d=Math.max(a,d);e=e.min.call(e,2147483648,d+(65536-d%65536)%65536);a:{try{fa.grow(e-ia.byteLength+65535>>>16);na();var f=1;break a}catch(g){}f=
|
404
|
+
void 0;}if(f)return !0}return !1},z:function(){return 52},u:function(){return 70},y:function(a,b,c,d){for(var e=0,f=0;f<c;f++){var g=E[b>>2],k=E[b+4>>2];b+=8;for(var m=0;m<k;m++){var l=A[g+m],n=Fb[a];0===l||10===l?((1===a?ea:v)(z(n,0)),n.length=0):n.push(l);}e+=k;}E[d>>2]=e;return 0}};
|
405
|
+
(function(){function a(e){h.asm=e.exports;fa=h.asm.E;na();oa=h.asm.J;qa.unshift(h.asm.F);F--;h.monitorRunDependencies&&h.monitorRunDependencies(F);0==F&&(G&&(e=G,G=null,e()));}function b(e){a(e.instance);}function c(e){return ya().then(function(f){return WebAssembly.instantiate(f,d)}).then(function(f){return f}).then(e,function(f){v("failed to asynchronously prepare wasm: "+f);x(f);})}var d={a:Jb};F++;h.monitorRunDependencies&&h.monitorRunDependencies(F);if(h.instantiateWasm)try{return h.instantiateWasm(d,
|
406
|
+
a)}catch(e){v("Module.instantiateWasm callback failed with error: "+e),ca(e);}(function(){return w||"function"!=typeof WebAssembly.instantiateStreaming||ua(H)||"function"!=typeof fetch?c(b):fetch(H,{credentials:"same-origin"}).then(function(e){return WebAssembly.instantiateStreaming(e,d).then(b,function(f){v("wasm streaming compile failed: "+f);v("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(ca);return {}})();
|
407
|
+
h.___wasm_call_ctors=function(){return (h.___wasm_call_ctors=h.asm.F).apply(null,arguments)};var Ka=h.___getTypeName=function(){return (Ka=h.___getTypeName=h.asm.G).apply(null,arguments)};h.__embind_initialize_bindings=function(){return (h.__embind_initialize_bindings=h.asm.H).apply(null,arguments)};var Ib=h._malloc=function(){return (Ib=h._malloc=h.asm.I).apply(null,arguments)},S=h._free=function(){return (S=h._free=h.asm.K).apply(null,arguments)};
|
408
|
+
h.dynCall_jiji=function(){return (h.dynCall_jiji=h.asm.L).apply(null,arguments)};var Kb;G=function Lb(){Kb||Mb();Kb||(G=Lb);};
|
409
|
+
function Mb(){function a(){if(!Kb&&(Kb=!0,h.calledRun=!0,!ha)){za(qa);aa(h);if(h.onRuntimeInitialized)h.onRuntimeInitialized();if(h.postRun)for("function"==typeof h.postRun&&(h.postRun=[h.postRun]);h.postRun.length;){var b=h.postRun.shift();ra.unshift(b);}za(ra);}}if(!(0<F)){if(h.preRun)for("function"==typeof h.preRun&&(h.preRun=[h.preRun]);h.preRun.length;)sa();za(pa);0<F||(h.setStatus?(h.setStatus("Running..."),setTimeout(function(){setTimeout(function(){h.setStatus("");},1);a();},1)):a());}}
|
410
|
+
if(h.preInit)for("function"==typeof h.preInit&&(h.preInit=[h.preInit]);0<h.preInit.length;)h.preInit.pop()();Mb();
|
411
|
+
|
412
|
+
|
413
|
+
return loadYoga.ready
|
414
|
+
}
|
415
|
+
);
|
416
|
+
})();
|
417
|
+
|
418
|
+
/**
|
419
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
420
|
+
*
|
421
|
+
* This source code is licensed under the MIT license found in the
|
422
|
+
* LICENSE file in the root directory of this source tree.
|
423
|
+
*/
|
424
|
+
|
425
|
+
// @generated by enums.py
|
426
|
+
|
427
|
+
let Align = /*#__PURE__*/function (Align) {
|
428
|
+
Align[Align["Auto"] = 0] = "Auto";
|
429
|
+
Align[Align["FlexStart"] = 1] = "FlexStart";
|
430
|
+
Align[Align["Center"] = 2] = "Center";
|
431
|
+
Align[Align["FlexEnd"] = 3] = "FlexEnd";
|
432
|
+
Align[Align["Stretch"] = 4] = "Stretch";
|
433
|
+
Align[Align["Baseline"] = 5] = "Baseline";
|
434
|
+
Align[Align["SpaceBetween"] = 6] = "SpaceBetween";
|
435
|
+
Align[Align["SpaceAround"] = 7] = "SpaceAround";
|
436
|
+
Align[Align["SpaceEvenly"] = 8] = "SpaceEvenly";
|
437
|
+
return Align;
|
438
|
+
}({});
|
439
|
+
let Dimension = /*#__PURE__*/function (Dimension) {
|
440
|
+
Dimension[Dimension["Width"] = 0] = "Width";
|
441
|
+
Dimension[Dimension["Height"] = 1] = "Height";
|
442
|
+
return Dimension;
|
443
|
+
}({});
|
444
|
+
let Direction = /*#__PURE__*/function (Direction) {
|
445
|
+
Direction[Direction["Inherit"] = 0] = "Inherit";
|
446
|
+
Direction[Direction["LTR"] = 1] = "LTR";
|
447
|
+
Direction[Direction["RTL"] = 2] = "RTL";
|
448
|
+
return Direction;
|
449
|
+
}({});
|
450
|
+
let Display = /*#__PURE__*/function (Display) {
|
451
|
+
Display[Display["Flex"] = 0] = "Flex";
|
452
|
+
Display[Display["None"] = 1] = "None";
|
453
|
+
return Display;
|
454
|
+
}({});
|
455
|
+
let Edge = /*#__PURE__*/function (Edge) {
|
456
|
+
Edge[Edge["Left"] = 0] = "Left";
|
457
|
+
Edge[Edge["Top"] = 1] = "Top";
|
458
|
+
Edge[Edge["Right"] = 2] = "Right";
|
459
|
+
Edge[Edge["Bottom"] = 3] = "Bottom";
|
460
|
+
Edge[Edge["Start"] = 4] = "Start";
|
461
|
+
Edge[Edge["End"] = 5] = "End";
|
462
|
+
Edge[Edge["Horizontal"] = 6] = "Horizontal";
|
463
|
+
Edge[Edge["Vertical"] = 7] = "Vertical";
|
464
|
+
Edge[Edge["All"] = 8] = "All";
|
465
|
+
return Edge;
|
466
|
+
}({});
|
467
|
+
let Errata = /*#__PURE__*/function (Errata) {
|
468
|
+
Errata[Errata["None"] = 0] = "None";
|
469
|
+
Errata[Errata["StretchFlexBasis"] = 1] = "StretchFlexBasis";
|
470
|
+
Errata[Errata["AbsolutePositioningIncorrect"] = 2] = "AbsolutePositioningIncorrect";
|
471
|
+
Errata[Errata["AbsolutePercentAgainstInnerSize"] = 4] = "AbsolutePercentAgainstInnerSize";
|
472
|
+
Errata[Errata["All"] = 2147483647] = "All";
|
473
|
+
Errata[Errata["Classic"] = 2147483646] = "Classic";
|
474
|
+
return Errata;
|
475
|
+
}({});
|
476
|
+
let ExperimentalFeature = /*#__PURE__*/function (ExperimentalFeature) {
|
477
|
+
ExperimentalFeature[ExperimentalFeature["WebFlexBasis"] = 0] = "WebFlexBasis";
|
478
|
+
return ExperimentalFeature;
|
479
|
+
}({});
|
480
|
+
let FlexDirection = /*#__PURE__*/function (FlexDirection) {
|
481
|
+
FlexDirection[FlexDirection["Column"] = 0] = "Column";
|
482
|
+
FlexDirection[FlexDirection["ColumnReverse"] = 1] = "ColumnReverse";
|
483
|
+
FlexDirection[FlexDirection["Row"] = 2] = "Row";
|
484
|
+
FlexDirection[FlexDirection["RowReverse"] = 3] = "RowReverse";
|
485
|
+
return FlexDirection;
|
486
|
+
}({});
|
487
|
+
let Gutter = /*#__PURE__*/function (Gutter) {
|
488
|
+
Gutter[Gutter["Column"] = 0] = "Column";
|
489
|
+
Gutter[Gutter["Row"] = 1] = "Row";
|
490
|
+
Gutter[Gutter["All"] = 2] = "All";
|
491
|
+
return Gutter;
|
492
|
+
}({});
|
493
|
+
let Justify = /*#__PURE__*/function (Justify) {
|
494
|
+
Justify[Justify["FlexStart"] = 0] = "FlexStart";
|
495
|
+
Justify[Justify["Center"] = 1] = "Center";
|
496
|
+
Justify[Justify["FlexEnd"] = 2] = "FlexEnd";
|
497
|
+
Justify[Justify["SpaceBetween"] = 3] = "SpaceBetween";
|
498
|
+
Justify[Justify["SpaceAround"] = 4] = "SpaceAround";
|
499
|
+
Justify[Justify["SpaceEvenly"] = 5] = "SpaceEvenly";
|
500
|
+
return Justify;
|
501
|
+
}({});
|
502
|
+
let LogLevel = /*#__PURE__*/function (LogLevel) {
|
503
|
+
LogLevel[LogLevel["Error"] = 0] = "Error";
|
504
|
+
LogLevel[LogLevel["Warn"] = 1] = "Warn";
|
505
|
+
LogLevel[LogLevel["Info"] = 2] = "Info";
|
506
|
+
LogLevel[LogLevel["Debug"] = 3] = "Debug";
|
507
|
+
LogLevel[LogLevel["Verbose"] = 4] = "Verbose";
|
508
|
+
LogLevel[LogLevel["Fatal"] = 5] = "Fatal";
|
509
|
+
return LogLevel;
|
510
|
+
}({});
|
511
|
+
let MeasureMode = /*#__PURE__*/function (MeasureMode) {
|
512
|
+
MeasureMode[MeasureMode["Undefined"] = 0] = "Undefined";
|
513
|
+
MeasureMode[MeasureMode["Exactly"] = 1] = "Exactly";
|
514
|
+
MeasureMode[MeasureMode["AtMost"] = 2] = "AtMost";
|
515
|
+
return MeasureMode;
|
516
|
+
}({});
|
517
|
+
let NodeType = /*#__PURE__*/function (NodeType) {
|
518
|
+
NodeType[NodeType["Default"] = 0] = "Default";
|
519
|
+
NodeType[NodeType["Text"] = 1] = "Text";
|
520
|
+
return NodeType;
|
521
|
+
}({});
|
522
|
+
let Overflow = /*#__PURE__*/function (Overflow) {
|
523
|
+
Overflow[Overflow["Visible"] = 0] = "Visible";
|
524
|
+
Overflow[Overflow["Hidden"] = 1] = "Hidden";
|
525
|
+
Overflow[Overflow["Scroll"] = 2] = "Scroll";
|
526
|
+
return Overflow;
|
527
|
+
}({});
|
528
|
+
let PositionType = /*#__PURE__*/function (PositionType) {
|
529
|
+
PositionType[PositionType["Static"] = 0] = "Static";
|
530
|
+
PositionType[PositionType["Relative"] = 1] = "Relative";
|
531
|
+
PositionType[PositionType["Absolute"] = 2] = "Absolute";
|
532
|
+
return PositionType;
|
533
|
+
}({});
|
534
|
+
let Unit = /*#__PURE__*/function (Unit) {
|
535
|
+
Unit[Unit["Undefined"] = 0] = "Undefined";
|
536
|
+
Unit[Unit["Point"] = 1] = "Point";
|
537
|
+
Unit[Unit["Percent"] = 2] = "Percent";
|
538
|
+
Unit[Unit["Auto"] = 3] = "Auto";
|
539
|
+
return Unit;
|
540
|
+
}({});
|
541
|
+
let Wrap = /*#__PURE__*/function (Wrap) {
|
542
|
+
Wrap[Wrap["NoWrap"] = 0] = "NoWrap";
|
543
|
+
Wrap[Wrap["Wrap"] = 1] = "Wrap";
|
544
|
+
Wrap[Wrap["WrapReverse"] = 2] = "WrapReverse";
|
545
|
+
return Wrap;
|
546
|
+
}({});
|
547
|
+
const constants = {
|
548
|
+
ALIGN_AUTO: Align.Auto,
|
549
|
+
ALIGN_FLEX_START: Align.FlexStart,
|
550
|
+
ALIGN_CENTER: Align.Center,
|
551
|
+
ALIGN_FLEX_END: Align.FlexEnd,
|
552
|
+
ALIGN_STRETCH: Align.Stretch,
|
553
|
+
ALIGN_BASELINE: Align.Baseline,
|
554
|
+
ALIGN_SPACE_BETWEEN: Align.SpaceBetween,
|
555
|
+
ALIGN_SPACE_AROUND: Align.SpaceAround,
|
556
|
+
ALIGN_SPACE_EVENLY: Align.SpaceEvenly,
|
557
|
+
DIMENSION_WIDTH: Dimension.Width,
|
558
|
+
DIMENSION_HEIGHT: Dimension.Height,
|
559
|
+
DIRECTION_INHERIT: Direction.Inherit,
|
560
|
+
DIRECTION_LTR: Direction.LTR,
|
561
|
+
DIRECTION_RTL: Direction.RTL,
|
562
|
+
DISPLAY_FLEX: Display.Flex,
|
563
|
+
DISPLAY_NONE: Display.None,
|
564
|
+
EDGE_LEFT: Edge.Left,
|
565
|
+
EDGE_TOP: Edge.Top,
|
566
|
+
EDGE_RIGHT: Edge.Right,
|
567
|
+
EDGE_BOTTOM: Edge.Bottom,
|
568
|
+
EDGE_START: Edge.Start,
|
569
|
+
EDGE_END: Edge.End,
|
570
|
+
EDGE_HORIZONTAL: Edge.Horizontal,
|
571
|
+
EDGE_VERTICAL: Edge.Vertical,
|
572
|
+
EDGE_ALL: Edge.All,
|
573
|
+
ERRATA_NONE: Errata.None,
|
574
|
+
ERRATA_STRETCH_FLEX_BASIS: Errata.StretchFlexBasis,
|
575
|
+
ERRATA_ABSOLUTE_POSITIONING_INCORRECT: Errata.AbsolutePositioningIncorrect,
|
576
|
+
ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE: Errata.AbsolutePercentAgainstInnerSize,
|
577
|
+
ERRATA_ALL: Errata.All,
|
578
|
+
ERRATA_CLASSIC: Errata.Classic,
|
579
|
+
EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS: ExperimentalFeature.WebFlexBasis,
|
580
|
+
FLEX_DIRECTION_COLUMN: FlexDirection.Column,
|
581
|
+
FLEX_DIRECTION_COLUMN_REVERSE: FlexDirection.ColumnReverse,
|
582
|
+
FLEX_DIRECTION_ROW: FlexDirection.Row,
|
583
|
+
FLEX_DIRECTION_ROW_REVERSE: FlexDirection.RowReverse,
|
584
|
+
GUTTER_COLUMN: Gutter.Column,
|
585
|
+
GUTTER_ROW: Gutter.Row,
|
586
|
+
GUTTER_ALL: Gutter.All,
|
587
|
+
JUSTIFY_FLEX_START: Justify.FlexStart,
|
588
|
+
JUSTIFY_CENTER: Justify.Center,
|
589
|
+
JUSTIFY_FLEX_END: Justify.FlexEnd,
|
590
|
+
JUSTIFY_SPACE_BETWEEN: Justify.SpaceBetween,
|
591
|
+
JUSTIFY_SPACE_AROUND: Justify.SpaceAround,
|
592
|
+
JUSTIFY_SPACE_EVENLY: Justify.SpaceEvenly,
|
593
|
+
LOG_LEVEL_ERROR: LogLevel.Error,
|
594
|
+
LOG_LEVEL_WARN: LogLevel.Warn,
|
595
|
+
LOG_LEVEL_INFO: LogLevel.Info,
|
596
|
+
LOG_LEVEL_DEBUG: LogLevel.Debug,
|
597
|
+
LOG_LEVEL_VERBOSE: LogLevel.Verbose,
|
598
|
+
LOG_LEVEL_FATAL: LogLevel.Fatal,
|
599
|
+
MEASURE_MODE_UNDEFINED: MeasureMode.Undefined,
|
600
|
+
MEASURE_MODE_EXACTLY: MeasureMode.Exactly,
|
601
|
+
MEASURE_MODE_AT_MOST: MeasureMode.AtMost,
|
602
|
+
NODE_TYPE_DEFAULT: NodeType.Default,
|
603
|
+
NODE_TYPE_TEXT: NodeType.Text,
|
604
|
+
OVERFLOW_VISIBLE: Overflow.Visible,
|
605
|
+
OVERFLOW_HIDDEN: Overflow.Hidden,
|
606
|
+
OVERFLOW_SCROLL: Overflow.Scroll,
|
607
|
+
POSITION_TYPE_STATIC: PositionType.Static,
|
608
|
+
POSITION_TYPE_RELATIVE: PositionType.Relative,
|
609
|
+
POSITION_TYPE_ABSOLUTE: PositionType.Absolute,
|
610
|
+
UNIT_UNDEFINED: Unit.Undefined,
|
611
|
+
UNIT_POINT: Unit.Point,
|
612
|
+
UNIT_PERCENT: Unit.Percent,
|
613
|
+
UNIT_AUTO: Unit.Auto,
|
614
|
+
WRAP_NO_WRAP: Wrap.NoWrap,
|
615
|
+
WRAP_WRAP: Wrap.Wrap,
|
616
|
+
WRAP_WRAP_REVERSE: Wrap.WrapReverse
|
617
|
+
};
|
618
|
+
|
619
|
+
/**
|
620
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
621
|
+
*
|
622
|
+
* This source code is licensed under the MIT license found in the
|
623
|
+
* LICENSE file in the root directory of this source tree.
|
624
|
+
*
|
625
|
+
* @format
|
626
|
+
*/
|
627
|
+
|
628
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
629
|
+
function wrapAssembly(lib) {
|
630
|
+
function patch(prototype, name, fn) {
|
631
|
+
const original = prototype[name];
|
632
|
+
prototype[name] = function () {
|
633
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
634
|
+
args[_key] = arguments[_key];
|
635
|
+
}
|
636
|
+
return fn.call(this, original, ...args);
|
637
|
+
};
|
638
|
+
}
|
639
|
+
for (const fnName of ['setPosition', 'setMargin', 'setFlexBasis', 'setWidth', 'setHeight', 'setMinWidth', 'setMinHeight', 'setMaxWidth', 'setMaxHeight', 'setPadding']) {
|
640
|
+
const methods = {
|
641
|
+
[Unit.Point]: lib.Node.prototype[fnName],
|
642
|
+
[Unit.Percent]: lib.Node.prototype[`${fnName}Percent`],
|
643
|
+
[Unit.Auto]: lib.Node.prototype[`${fnName}Auto`]
|
644
|
+
};
|
645
|
+
patch(lib.Node.prototype, fnName, function (original) {
|
646
|
+
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
647
|
+
args[_key2 - 1] = arguments[_key2];
|
648
|
+
}
|
649
|
+
// We patch all these functions to add support for the following calls:
|
650
|
+
// .setWidth(100) / .setWidth("100%") / .setWidth(.getWidth()) / .setWidth("auto")
|
651
|
+
|
652
|
+
const value = args.pop();
|
653
|
+
let unit, asNumber;
|
654
|
+
if (value === 'auto') {
|
655
|
+
unit = Unit.Auto;
|
656
|
+
asNumber = undefined;
|
657
|
+
} else if (typeof value === 'object') {
|
658
|
+
unit = value.unit;
|
659
|
+
asNumber = value.valueOf();
|
660
|
+
} else {
|
661
|
+
unit = typeof value === 'string' && value.endsWith('%') ? Unit.Percent : Unit.Point;
|
662
|
+
asNumber = parseFloat(value);
|
663
|
+
if (value !== undefined && !Number.isNaN(value) && Number.isNaN(asNumber)) {
|
664
|
+
throw new Error(`Invalid value ${value} for ${fnName}`);
|
665
|
+
}
|
666
|
+
}
|
667
|
+
if (!methods[unit]) throw new Error(`Failed to execute "${fnName}": Unsupported unit '${value}'`);
|
668
|
+
if (asNumber !== undefined) {
|
669
|
+
return methods[unit].call(this, ...args, asNumber);
|
670
|
+
} else {
|
671
|
+
return methods[unit].call(this, ...args);
|
672
|
+
}
|
673
|
+
});
|
674
|
+
}
|
675
|
+
function wrapMeasureFunction(measureFunction) {
|
676
|
+
return lib.MeasureCallback.implement({
|
677
|
+
measure: function () {
|
678
|
+
const {
|
679
|
+
width,
|
680
|
+
height
|
681
|
+
} = measureFunction(...arguments);
|
682
|
+
return {
|
683
|
+
width: width ?? NaN,
|
684
|
+
height: height ?? NaN
|
685
|
+
};
|
686
|
+
}
|
687
|
+
});
|
688
|
+
}
|
689
|
+
patch(lib.Node.prototype, 'setMeasureFunc', function (original, measureFunc) {
|
690
|
+
// This patch is just a convenience patch, since it helps write more
|
691
|
+
// idiomatic source code (such as .setMeasureFunc(null))
|
692
|
+
if (measureFunc) {
|
693
|
+
return original.call(this, wrapMeasureFunction(measureFunc));
|
694
|
+
} else {
|
695
|
+
return this.unsetMeasureFunc();
|
696
|
+
}
|
697
|
+
});
|
698
|
+
function wrapDirtiedFunc(dirtiedFunction) {
|
699
|
+
return lib.DirtiedCallback.implement({
|
700
|
+
dirtied: dirtiedFunction
|
701
|
+
});
|
702
|
+
}
|
703
|
+
patch(lib.Node.prototype, 'setDirtiedFunc', function (original, dirtiedFunc) {
|
704
|
+
original.call(this, wrapDirtiedFunc(dirtiedFunc));
|
705
|
+
});
|
706
|
+
patch(lib.Config.prototype, 'free', function () {
|
707
|
+
// Since we handle the memory allocation ourselves (via lib.Config.create),
|
708
|
+
// we also need to handle the deallocation
|
709
|
+
lib.Config.destroy(this);
|
710
|
+
});
|
711
|
+
patch(lib.Node, 'create', (_, config) => {
|
712
|
+
// We decide the constructor we want to call depending on the parameters
|
713
|
+
return config ? lib.Node.createWithConfig(config) : lib.Node.createDefault();
|
714
|
+
});
|
715
|
+
patch(lib.Node.prototype, 'free', function () {
|
716
|
+
// Since we handle the memory allocation ourselves (via lib.Node.create),
|
717
|
+
// we also need to handle the deallocation
|
718
|
+
lib.Node.destroy(this);
|
719
|
+
});
|
720
|
+
patch(lib.Node.prototype, 'freeRecursive', function () {
|
721
|
+
for (let t = 0, T = this.getChildCount(); t < T; ++t) {
|
722
|
+
this.getChild(0).freeRecursive();
|
723
|
+
}
|
724
|
+
this.free();
|
725
|
+
});
|
726
|
+
patch(lib.Node.prototype, 'calculateLayout', function (original) {
|
727
|
+
let width = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : NaN;
|
728
|
+
let height = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : NaN;
|
729
|
+
let direction = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : Direction.LTR;
|
730
|
+
// Just a small patch to add support for the function default parameters
|
731
|
+
return original.call(this, width, height, direction);
|
732
|
+
});
|
733
|
+
return {
|
734
|
+
Config: lib.Config,
|
735
|
+
Node: lib.Node,
|
736
|
+
...constants
|
737
|
+
};
|
738
|
+
}
|
739
|
+
|
740
|
+
/**
|
741
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
742
|
+
*
|
743
|
+
* This source code is licensed under the MIT license found in the
|
744
|
+
* LICENSE file in the root directory of this source tree.
|
745
|
+
*
|
746
|
+
* @format
|
747
|
+
*/
|
748
|
+
|
749
|
+
wrapAssembly(await loadYoga());
|
750
|
+
|
751
|
+
var invariant = function() {
|
752
|
+
};
|
753
|
+
|
754
|
+
const clamp$1 = (min, max, v) => Math.min(Math.max(v, min), max);
|
755
|
+
|
756
|
+
const progress = (from, to, value) => {
|
757
|
+
const toFromDifference = to - from;
|
758
|
+
return toFromDifference === 0 ? 1 : (value - from) / toFromDifference;
|
759
|
+
};
|
760
|
+
|
761
|
+
const mix = (from, to, progress) => -progress * from + progress * to + from;
|
762
|
+
|
763
|
+
const clamp = (min, max) => (v) => Math.max(Math.min(v, max), min);
|
764
|
+
const sanitize = (v) => (v % 1 ? Number(v.toFixed(5)) : v);
|
765
|
+
const floatRegex = /(-)?([\d]*\.?[\d])+/g;
|
766
|
+
const colorRegex = /(#[0-9a-f]{6}|#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2}(-?[\d\.]+%?)\s*[\,\/]?\s*[\d\.]*%?\))/gi;
|
767
|
+
const singleColorRegex = /^(#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2}(-?[\d\.]+%?)\s*[\,\/]?\s*[\d\.]*%?\))$/i;
|
768
|
+
function isString(v) {
|
769
|
+
return typeof v === 'string';
|
770
|
+
}
|
771
|
+
|
772
|
+
const number = {
|
773
|
+
test: (v) => typeof v === 'number',
|
774
|
+
parse: parseFloat,
|
775
|
+
transform: (v) => v,
|
776
|
+
};
|
777
|
+
const alpha = Object.assign(Object.assign({}, number), { transform: clamp(0, 1) });
|
778
|
+
Object.assign(Object.assign({}, number), { default: 1 });
|
779
|
+
|
780
|
+
const createUnitType = (unit) => ({
|
781
|
+
test: (v) => isString(v) && v.endsWith(unit) && v.split(' ').length === 1,
|
782
|
+
parse: parseFloat,
|
783
|
+
transform: (v) => `${v}${unit}`,
|
784
|
+
});
|
785
|
+
const percent = createUnitType('%');
|
786
|
+
Object.assign(Object.assign({}, percent), { parse: (v) => percent.parse(v) / 100, transform: (v) => percent.transform(v * 100) });
|
787
|
+
|
788
|
+
const isColorString = (type, testProp) => (v) => {
|
789
|
+
return Boolean((isString(v) && singleColorRegex.test(v) && v.startsWith(type)) ||
|
790
|
+
(testProp && Object.prototype.hasOwnProperty.call(v, testProp)));
|
791
|
+
};
|
792
|
+
const splitColor = (aName, bName, cName) => (v) => {
|
793
|
+
if (!isString(v))
|
794
|
+
return v;
|
795
|
+
const [a, b, c, alpha] = v.match(floatRegex);
|
796
|
+
return {
|
797
|
+
[aName]: parseFloat(a),
|
798
|
+
[bName]: parseFloat(b),
|
799
|
+
[cName]: parseFloat(c),
|
800
|
+
alpha: alpha !== undefined ? parseFloat(alpha) : 1,
|
801
|
+
};
|
802
|
+
};
|
803
|
+
|
804
|
+
const hsla = {
|
805
|
+
test: isColorString('hsl', 'hue'),
|
806
|
+
parse: splitColor('hue', 'saturation', 'lightness'),
|
807
|
+
transform: ({ hue, saturation, lightness, alpha: alpha$1 = 1 }) => {
|
808
|
+
return ('hsla(' +
|
809
|
+
Math.round(hue) +
|
810
|
+
', ' +
|
811
|
+
percent.transform(sanitize(saturation)) +
|
812
|
+
', ' +
|
813
|
+
percent.transform(sanitize(lightness)) +
|
814
|
+
', ' +
|
815
|
+
sanitize(alpha.transform(alpha$1)) +
|
816
|
+
')');
|
817
|
+
},
|
818
|
+
};
|
819
|
+
|
820
|
+
const clampRgbUnit = clamp(0, 255);
|
821
|
+
const rgbUnit = Object.assign(Object.assign({}, number), { transform: (v) => Math.round(clampRgbUnit(v)) });
|
822
|
+
const rgba = {
|
823
|
+
test: isColorString('rgb', 'red'),
|
824
|
+
parse: splitColor('red', 'green', 'blue'),
|
825
|
+
transform: ({ red, green, blue, alpha: alpha$1 = 1 }) => 'rgba(' +
|
826
|
+
rgbUnit.transform(red) +
|
827
|
+
', ' +
|
828
|
+
rgbUnit.transform(green) +
|
829
|
+
', ' +
|
830
|
+
rgbUnit.transform(blue) +
|
831
|
+
', ' +
|
832
|
+
sanitize(alpha.transform(alpha$1)) +
|
833
|
+
')',
|
834
|
+
};
|
835
|
+
|
836
|
+
function parseHex(v) {
|
837
|
+
let r = '';
|
838
|
+
let g = '';
|
839
|
+
let b = '';
|
840
|
+
let a = '';
|
841
|
+
if (v.length > 5) {
|
842
|
+
r = v.substr(1, 2);
|
843
|
+
g = v.substr(3, 2);
|
844
|
+
b = v.substr(5, 2);
|
845
|
+
a = v.substr(7, 2);
|
846
|
+
}
|
847
|
+
else {
|
848
|
+
r = v.substr(1, 1);
|
849
|
+
g = v.substr(2, 1);
|
850
|
+
b = v.substr(3, 1);
|
851
|
+
a = v.substr(4, 1);
|
852
|
+
r += r;
|
853
|
+
g += g;
|
854
|
+
b += b;
|
855
|
+
a += a;
|
856
|
+
}
|
857
|
+
return {
|
858
|
+
red: parseInt(r, 16),
|
859
|
+
green: parseInt(g, 16),
|
860
|
+
blue: parseInt(b, 16),
|
861
|
+
alpha: a ? parseInt(a, 16) / 255 : 1,
|
862
|
+
};
|
863
|
+
}
|
864
|
+
const hex = {
|
865
|
+
test: isColorString('#'),
|
866
|
+
parse: parseHex,
|
867
|
+
transform: rgba.transform,
|
868
|
+
};
|
869
|
+
|
870
|
+
const color = {
|
871
|
+
test: (v) => rgba.test(v) || hex.test(v) || hsla.test(v),
|
872
|
+
parse: (v) => {
|
873
|
+
if (rgba.test(v)) {
|
874
|
+
return rgba.parse(v);
|
875
|
+
}
|
876
|
+
else if (hsla.test(v)) {
|
877
|
+
return hsla.parse(v);
|
878
|
+
}
|
879
|
+
else {
|
880
|
+
return hex.parse(v);
|
881
|
+
}
|
882
|
+
},
|
883
|
+
transform: (v) => {
|
884
|
+
return isString(v)
|
885
|
+
? v
|
886
|
+
: v.hasOwnProperty('red')
|
887
|
+
? rgba.transform(v)
|
888
|
+
: hsla.transform(v);
|
889
|
+
},
|
890
|
+
};
|
891
|
+
|
892
|
+
const colorToken = '${c}';
|
893
|
+
const numberToken = '${n}';
|
894
|
+
function test(v) {
|
895
|
+
var _a, _b, _c, _d;
|
896
|
+
return (isNaN(v) &&
|
897
|
+
isString(v) &&
|
898
|
+
((_b = (_a = v.match(floatRegex)) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) + ((_d = (_c = v.match(colorRegex)) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0) > 0);
|
899
|
+
}
|
900
|
+
function analyse$1(v) {
|
901
|
+
if (typeof v === 'number')
|
902
|
+
v = `${v}`;
|
903
|
+
const values = [];
|
904
|
+
let numColors = 0;
|
905
|
+
const colors = v.match(colorRegex);
|
906
|
+
if (colors) {
|
907
|
+
numColors = colors.length;
|
908
|
+
v = v.replace(colorRegex, colorToken);
|
909
|
+
values.push(...colors.map(color.parse));
|
910
|
+
}
|
911
|
+
const numbers = v.match(floatRegex);
|
912
|
+
if (numbers) {
|
913
|
+
v = v.replace(floatRegex, numberToken);
|
914
|
+
values.push(...numbers.map(number.parse));
|
915
|
+
}
|
916
|
+
return { values, numColors, tokenised: v };
|
917
|
+
}
|
918
|
+
function parse(v) {
|
919
|
+
return analyse$1(v).values;
|
920
|
+
}
|
921
|
+
function createTransformer(v) {
|
922
|
+
const { values, numColors, tokenised } = analyse$1(v);
|
923
|
+
const numValues = values.length;
|
924
|
+
return (v) => {
|
925
|
+
let output = tokenised;
|
926
|
+
for (let i = 0; i < numValues; i++) {
|
927
|
+
output = output.replace(i < numColors ? colorToken : numberToken, i < numColors ? color.transform(v[i]) : sanitize(v[i]));
|
928
|
+
}
|
929
|
+
return output;
|
930
|
+
};
|
931
|
+
}
|
932
|
+
const convertNumbersToZero = (v) => typeof v === 'number' ? 0 : v;
|
933
|
+
function getAnimatableNone(v) {
|
934
|
+
const parsed = parse(v);
|
935
|
+
const transformer = createTransformer(v);
|
936
|
+
return transformer(parsed.map(convertNumbersToZero));
|
937
|
+
}
|
938
|
+
const complex = { test, parse, createTransformer, getAnimatableNone };
|
939
|
+
|
940
|
+
function hueToRgb(p, q, t) {
|
941
|
+
if (t < 0)
|
942
|
+
t += 1;
|
943
|
+
if (t > 1)
|
944
|
+
t -= 1;
|
945
|
+
if (t < 1 / 6)
|
946
|
+
return p + (q - p) * 6 * t;
|
947
|
+
if (t < 1 / 2)
|
948
|
+
return q;
|
949
|
+
if (t < 2 / 3)
|
950
|
+
return p + (q - p) * (2 / 3 - t) * 6;
|
951
|
+
return p;
|
952
|
+
}
|
953
|
+
function hslaToRgba({ hue, saturation, lightness, alpha }) {
|
954
|
+
hue /= 360;
|
955
|
+
saturation /= 100;
|
956
|
+
lightness /= 100;
|
957
|
+
let red = 0;
|
958
|
+
let green = 0;
|
959
|
+
let blue = 0;
|
960
|
+
if (!saturation) {
|
961
|
+
red = green = blue = lightness;
|
962
|
+
}
|
963
|
+
else {
|
964
|
+
const q = lightness < 0.5
|
965
|
+
? lightness * (1 + saturation)
|
966
|
+
: lightness + saturation - lightness * saturation;
|
967
|
+
const p = 2 * lightness - q;
|
968
|
+
red = hueToRgb(p, q, hue + 1 / 3);
|
969
|
+
green = hueToRgb(p, q, hue);
|
970
|
+
blue = hueToRgb(p, q, hue - 1 / 3);
|
971
|
+
}
|
972
|
+
return {
|
973
|
+
red: Math.round(red * 255),
|
974
|
+
green: Math.round(green * 255),
|
975
|
+
blue: Math.round(blue * 255),
|
976
|
+
alpha,
|
977
|
+
};
|
978
|
+
}
|
979
|
+
|
980
|
+
const mixLinearColor = (from, to, v) => {
|
981
|
+
const fromExpo = from * from;
|
982
|
+
const toExpo = to * to;
|
983
|
+
return Math.sqrt(Math.max(0, v * (toExpo - fromExpo) + fromExpo));
|
984
|
+
};
|
985
|
+
const colorTypes = [hex, rgba, hsla];
|
986
|
+
const getColorType = (v) => colorTypes.find((type) => type.test(v));
|
987
|
+
const mixColor = (from, to) => {
|
988
|
+
let fromColorType = getColorType(from);
|
989
|
+
let toColorType = getColorType(to);
|
990
|
+
let fromColor = fromColorType.parse(from);
|
991
|
+
let toColor = toColorType.parse(to);
|
992
|
+
if (fromColorType === hsla) {
|
993
|
+
fromColor = hslaToRgba(fromColor);
|
994
|
+
fromColorType = rgba;
|
995
|
+
}
|
996
|
+
if (toColorType === hsla) {
|
997
|
+
toColor = hslaToRgba(toColor);
|
998
|
+
toColorType = rgba;
|
999
|
+
}
|
1000
|
+
const blended = Object.assign({}, fromColor);
|
1001
|
+
return (v) => {
|
1002
|
+
for (const key in blended) {
|
1003
|
+
if (key !== "alpha") {
|
1004
|
+
blended[key] = mixLinearColor(fromColor[key], toColor[key], v);
|
1005
|
+
}
|
1006
|
+
}
|
1007
|
+
blended.alpha = mix(fromColor.alpha, toColor.alpha, v);
|
1008
|
+
return fromColorType.transform(blended);
|
1009
|
+
};
|
1010
|
+
};
|
1011
|
+
|
1012
|
+
const isNum = (v) => typeof v === 'number';
|
1013
|
+
|
1014
|
+
const combineFunctions = (a, b) => (v) => b(a(v));
|
1015
|
+
const pipe = (...transformers) => transformers.reduce(combineFunctions);
|
1016
|
+
|
1017
|
+
function getMixer(origin, target) {
|
1018
|
+
if (isNum(origin)) {
|
1019
|
+
return (v) => mix(origin, target, v);
|
1020
|
+
}
|
1021
|
+
else if (color.test(origin)) {
|
1022
|
+
return mixColor(origin, target);
|
1023
|
+
}
|
1024
|
+
else {
|
1025
|
+
return mixComplex(origin, target);
|
1026
|
+
}
|
1027
|
+
}
|
1028
|
+
const mixArray = (from, to) => {
|
1029
|
+
const output = [...from];
|
1030
|
+
const numValues = output.length;
|
1031
|
+
const blendValue = from.map((fromThis, i) => getMixer(fromThis, to[i]));
|
1032
|
+
return (v) => {
|
1033
|
+
for (let i = 0; i < numValues; i++) {
|
1034
|
+
output[i] = blendValue[i](v);
|
1035
|
+
}
|
1036
|
+
return output;
|
1037
|
+
};
|
1038
|
+
};
|
1039
|
+
const mixObject = (origin, target) => {
|
1040
|
+
const output = Object.assign(Object.assign({}, origin), target);
|
1041
|
+
const blendValue = {};
|
1042
|
+
for (const key in output) {
|
1043
|
+
if (origin[key] !== undefined && target[key] !== undefined) {
|
1044
|
+
blendValue[key] = getMixer(origin[key], target[key]);
|
1045
|
+
}
|
1046
|
+
}
|
1047
|
+
return (v) => {
|
1048
|
+
for (const key in blendValue) {
|
1049
|
+
output[key] = blendValue[key](v);
|
1050
|
+
}
|
1051
|
+
return output;
|
1052
|
+
};
|
1053
|
+
};
|
1054
|
+
function analyse(value) {
|
1055
|
+
const parsed = complex.parse(value);
|
1056
|
+
const numValues = parsed.length;
|
1057
|
+
let numNumbers = 0;
|
1058
|
+
let numRGB = 0;
|
1059
|
+
let numHSL = 0;
|
1060
|
+
for (let i = 0; i < numValues; i++) {
|
1061
|
+
if (numNumbers || typeof parsed[i] === "number") {
|
1062
|
+
numNumbers++;
|
1063
|
+
}
|
1064
|
+
else {
|
1065
|
+
if (parsed[i].hue !== undefined) {
|
1066
|
+
numHSL++;
|
1067
|
+
}
|
1068
|
+
else {
|
1069
|
+
numRGB++;
|
1070
|
+
}
|
1071
|
+
}
|
1072
|
+
}
|
1073
|
+
return { parsed, numNumbers, numRGB, numHSL };
|
1074
|
+
}
|
1075
|
+
const mixComplex = (origin, target) => {
|
1076
|
+
const template = complex.createTransformer(target);
|
1077
|
+
const originStats = analyse(origin);
|
1078
|
+
const targetStats = analyse(target);
|
1079
|
+
const canInterpolate = originStats.numHSL === targetStats.numHSL &&
|
1080
|
+
originStats.numRGB === targetStats.numRGB &&
|
1081
|
+
originStats.numNumbers >= targetStats.numNumbers;
|
1082
|
+
if (canInterpolate) {
|
1083
|
+
return pipe(mixArray(originStats.parsed, targetStats.parsed), template);
|
1084
|
+
}
|
1085
|
+
else {
|
1086
|
+
return (p) => `${p > 0 ? target : origin}`;
|
1087
|
+
}
|
1088
|
+
};
|
1089
|
+
|
1090
|
+
const mixNumber = (from, to) => (p) => mix(from, to, p);
|
1091
|
+
function detectMixerFactory(v) {
|
1092
|
+
if (typeof v === 'number') {
|
1093
|
+
return mixNumber;
|
1094
|
+
}
|
1095
|
+
else if (typeof v === 'string') {
|
1096
|
+
if (color.test(v)) {
|
1097
|
+
return mixColor;
|
1098
|
+
}
|
1099
|
+
else {
|
1100
|
+
return mixComplex;
|
1101
|
+
}
|
1102
|
+
}
|
1103
|
+
else if (Array.isArray(v)) {
|
1104
|
+
return mixArray;
|
1105
|
+
}
|
1106
|
+
else if (typeof v === 'object') {
|
1107
|
+
return mixObject;
|
1108
|
+
}
|
1109
|
+
}
|
1110
|
+
function createMixers(output, ease, customMixer) {
|
1111
|
+
const mixers = [];
|
1112
|
+
const mixerFactory = customMixer || detectMixerFactory(output[0]);
|
1113
|
+
const numMixers = output.length - 1;
|
1114
|
+
for (let i = 0; i < numMixers; i++) {
|
1115
|
+
let mixer = mixerFactory(output[i], output[i + 1]);
|
1116
|
+
if (ease) {
|
1117
|
+
const easingFunction = Array.isArray(ease) ? ease[i] : ease;
|
1118
|
+
mixer = pipe(easingFunction, mixer);
|
1119
|
+
}
|
1120
|
+
mixers.push(mixer);
|
1121
|
+
}
|
1122
|
+
return mixers;
|
1123
|
+
}
|
1124
|
+
function fastInterpolate([from, to], [mixer]) {
|
1125
|
+
return (v) => mixer(progress(from, to, v));
|
1126
|
+
}
|
1127
|
+
function slowInterpolate(input, mixers) {
|
1128
|
+
const inputLength = input.length;
|
1129
|
+
const lastInputIndex = inputLength - 1;
|
1130
|
+
return (v) => {
|
1131
|
+
let mixerIndex = 0;
|
1132
|
+
let foundMixerIndex = false;
|
1133
|
+
if (v <= input[0]) {
|
1134
|
+
foundMixerIndex = true;
|
1135
|
+
}
|
1136
|
+
else if (v >= input[lastInputIndex]) {
|
1137
|
+
mixerIndex = lastInputIndex - 1;
|
1138
|
+
foundMixerIndex = true;
|
1139
|
+
}
|
1140
|
+
if (!foundMixerIndex) {
|
1141
|
+
let i = 1;
|
1142
|
+
for (; i < inputLength; i++) {
|
1143
|
+
if (input[i] > v || i === lastInputIndex) {
|
1144
|
+
break;
|
1145
|
+
}
|
1146
|
+
}
|
1147
|
+
mixerIndex = i - 1;
|
1148
|
+
}
|
1149
|
+
const progressInRange = progress(input[mixerIndex], input[mixerIndex + 1], v);
|
1150
|
+
return mixers[mixerIndex](progressInRange);
|
1151
|
+
};
|
1152
|
+
}
|
1153
|
+
function interpolate(input, output, { clamp: isClamp = true, ease, mixer } = {}) {
|
1154
|
+
const inputLength = input.length;
|
1155
|
+
invariant(inputLength === output.length);
|
1156
|
+
invariant(!ease || !Array.isArray(ease) || ease.length === inputLength - 1);
|
1157
|
+
if (input[0] > input[inputLength - 1]) {
|
1158
|
+
input = [].concat(input);
|
1159
|
+
output = [].concat(output);
|
1160
|
+
input.reverse();
|
1161
|
+
output.reverse();
|
1162
|
+
}
|
1163
|
+
const mixers = createMixers(output, ease, mixer);
|
1164
|
+
const interpolator = inputLength === 2
|
1165
|
+
? fastInterpolate(input, mixers)
|
1166
|
+
: slowInterpolate(input, mixers);
|
1167
|
+
return isClamp
|
1168
|
+
? (v) => interpolator(clamp$1(input[0], input[inputLength - 1], v))
|
1169
|
+
: interpolator;
|
1170
|
+
}
|
1171
|
+
|
1172
|
+
const reverseEasing = easing => p => 1 - easing(1 - p);
|
1173
|
+
const mirrorEasing = easing => p => p <= 0.5 ? easing(2 * p) / 2 : (2 - easing(2 * (1 - p))) / 2;
|
1174
|
+
const createExpoIn = (power) => p => Math.pow(p, power);
|
1175
|
+
const createBackIn = (power) => p => p * p * ((power + 1) * p - power);
|
1176
|
+
const createAnticipate = (power) => {
|
1177
|
+
const backEasing = createBackIn(power);
|
1178
|
+
return p => (p *= 2) < 1
|
1179
|
+
? 0.5 * backEasing(p)
|
1180
|
+
: 0.5 * (2 - Math.pow(2, -10 * (p - 1)));
|
1181
|
+
};
|
1182
|
+
|
1183
|
+
const DEFAULT_OVERSHOOT_STRENGTH = 1.525;
|
1184
|
+
const BOUNCE_FIRST_THRESHOLD = 4.0 / 11.0;
|
1185
|
+
const BOUNCE_SECOND_THRESHOLD = 8.0 / 11.0;
|
1186
|
+
const BOUNCE_THIRD_THRESHOLD = 9.0 / 10.0;
|
1187
|
+
const linear = p => p;
|
1188
|
+
const easeIn = createExpoIn(2);
|
1189
|
+
const easeOut = reverseEasing(easeIn);
|
1190
|
+
const easeInOut = mirrorEasing(easeIn);
|
1191
|
+
const circIn = p => 1 - Math.sin(Math.acos(p));
|
1192
|
+
const circOut = reverseEasing(circIn);
|
1193
|
+
const circInOut = mirrorEasing(circOut);
|
1194
|
+
const backIn = createBackIn(DEFAULT_OVERSHOOT_STRENGTH);
|
1195
|
+
const backOut = reverseEasing(backIn);
|
1196
|
+
const backInOut = mirrorEasing(backIn);
|
1197
|
+
const anticipate = createAnticipate(DEFAULT_OVERSHOOT_STRENGTH);
|
1198
|
+
const ca = 4356.0 / 361.0;
|
1199
|
+
const cb = 35442.0 / 1805.0;
|
1200
|
+
const cc = 16061.0 / 1805.0;
|
1201
|
+
const bounceOut = (p) => {
|
1202
|
+
if (p === 1 || p === 0)
|
1203
|
+
return p;
|
1204
|
+
const p2 = p * p;
|
1205
|
+
return p < BOUNCE_FIRST_THRESHOLD
|
1206
|
+
? 7.5625 * p2
|
1207
|
+
: p < BOUNCE_SECOND_THRESHOLD
|
1208
|
+
? 9.075 * p2 - 9.9 * p + 3.4
|
1209
|
+
: p < BOUNCE_THIRD_THRESHOLD
|
1210
|
+
? ca * p2 - cb * p + cc
|
1211
|
+
: 10.8 * p * p - 20.52 * p + 10.72;
|
1212
|
+
};
|
1213
|
+
const bounceIn = reverseEasing(bounceOut);
|
1214
|
+
const bounceInOut = (p) => p < 0.5
|
1215
|
+
? 0.5 * (1.0 - bounceOut(1.0 - p * 2.0))
|
1216
|
+
: 0.5 * bounceOut(p * 2.0 - 1.0) + 0.5;
|
1217
|
+
|
1218
|
+
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
1219
|
+
|
1220
|
+
function getDefaultExportFromCjs (x) {
|
1221
|
+
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
|
1222
|
+
}
|
1223
|
+
|
1224
|
+
var squirrelly_min = {exports: {}};
|
1225
|
+
|
1226
|
+
(function (module, exports) {
|
1227
|
+
!function(e,t){t(exports);}(commonjsGlobal,(function(e){function t(e){var n,r,a=new Error(e);return n=a,r=t.prototype,Object.setPrototypeOf?Object.setPrototypeOf(n,r):n.__proto__=r,a}function n(e,n,r){var a=n.slice(0,r).split(/\n/),i=a.length,s=a[i-1].length+1;throw t(e+=" at line "+i+" col "+s+":\n\n "+n.split(/\n/)[i-1]+"\n "+Array(s).join(" ")+"^")}t.prototype=Object.create(Error.prototype,{name:{value:"Squirrelly Error",enumerable:!1}});var r=new Function("return this")().Promise,a=!1;try{a=new Function("return (async function(){}).constructor")();}catch(e){if(!(e instanceof SyntaxError))throw e}function i(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function s(e,t,n){for(var r in t)i(t,r)&&(null==t[r]||"object"!=typeof t[r]||"storage"!==r&&"prefixes"!==r||n?e[r]=t[r]:e[r]=s({},t[r]));return e}var c=/^async +/,o=/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})*}|(?!\${)[^\\`])*`/g,l=/'(?:\\[\s\w"'\\`]|[^\n\r'\\])*?'/g,f=/"(?:\\[\s\w"'\\`]|[^\n\r"\\])*?"/g,u=/[.*+\-?^${}()|[\]\\]/g;function p(e){return u.test(e)?e.replace(u,"\\$&"):e}function h(e,r){r.rmWhitespace&&(e=e.replace(/[\r\n]+/g,"\n").replace(/^\s+|\s+$/gm,"")),o.lastIndex=0,l.lastIndex=0,f.lastIndex=0;var a=r.prefixes,i=[a.h,a.b,a.i,a.r,a.c,a.e].reduce((function(e,t){return e&&t?e+"|"+p(t):t?p(t):e}),""),s=new RegExp("([|()]|=>)|('|\"|`|\\/\\*)|\\s*((\\/)?(-|_)?"+p(r.tags[1])+")","g"),u=new RegExp("([^]*?)"+p(r.tags[0])+"(-|_)?\\s*("+i+")?\\s*","g"),h=0,d=!1;function g(t,a){var i,p={f:[]},g=0,v="c";function m(t){var a=e.slice(h,t),i=a.trim();if("f"===v)"safe"===i?p.raw=!0:r.async&&c.test(i)?(i=i.replace(c,""),p.f.push([i,"",!0])):p.f.push([i,""]);else if("fp"===v)p.f[p.f.length-1][1]+=i;else if("err"===v){if(i){var s=a.search(/\S/);n("invalid syntax",e,h+s);}}else p[v]=i;h=t+1;}for("h"===a||"b"===a||"c"===a?v="n":"r"===a&&(p.raw=!0,a="i"),s.lastIndex=h;null!==(i=s.exec(e));){var y=i[1],x=i[2],b=i[3],w=i[4],F=i[5],S=i.index;if(y)"("===y?(0===g&&("n"===v?(m(S),v="p"):"f"===v&&(m(S),v="fp")),g++):")"===y?0===--g&&"c"!==v&&(m(S),v="err"):0===g&&"|"===y?(m(S),v="f"):"=>"===y&&(m(S),h+=1,v="res");else if(x){if("/*"===x){var I=e.indexOf("*/",s.lastIndex);-1===I&&n("unclosed comment",e,i.index),s.lastIndex=I+2;}else if("'"===x){l.lastIndex=i.index,l.exec(e)?s.lastIndex=l.lastIndex:n("unclosed string",e,i.index);}else if('"'===x){f.lastIndex=i.index,f.exec(e)?s.lastIndex=f.lastIndex:n("unclosed string",e,i.index);}else if("`"===x){o.lastIndex=i.index,o.exec(e)?s.lastIndex=o.lastIndex:n("unclosed string",e,i.index);}}else if(b)return m(S),h=S+i[0].length,u.lastIndex=h,d=F,w&&"h"===a&&(a="s"),p.t=a,p}return n("unclosed tag",e,t),p}var v=function i(s,o){s.b=[],s.d=[];var l,f=!1,p=[];function v(e,t){e&&(e=function(e,t,n,r){var a,i;return "string"==typeof t.autoTrim?a=i=t.autoTrim:Array.isArray(t.autoTrim)&&(a=t.autoTrim[1],i=t.autoTrim[0]),(n||!1===n)&&(a=n),(r||!1===r)&&(i=r),"slurp"===a&&"slurp"===i?e.trim():("_"===a||"slurp"===a?e=String.prototype.trimLeft?e.trimLeft():e.replace(/^[\s\uFEFF\xA0]+/,""):"-"!==a&&"nl"!==a||(e=e.replace(/^(?:\n|\r|\r\n)/,"")),"_"===i||"slurp"===i?e=String.prototype.trimRight?e.trimRight():e.replace(/[\s\uFEFF\xA0]+$/,""):"-"!==i&&"nl"!==i||(e=e.replace(/(?:\n|\r|\r\n)$/,"")),e)}(e,r,d,t))&&(e=e.replace(/\\|'/g,"\\$&").replace(/\r\n|\n|\r/g,"\\n"),p.push(e));}for(;null!==(l=u.exec(e));){var m,y=l[1],x=l[2],b=l[3]||"";for(var w in a)if(a[w]===b){m=w;break}v(y,x),h=l.index+l[0].length,m||n("unrecognized tag type: "+b,e,h);var F=g(l.index,m),S=F.t;if("h"===S){var I=F.n||"";r.async&&c.test(I)&&(F.a=!0,F.n=I.replace(c,"")),F=i(F),p.push(F);}else if("c"===S){if(s.n===F.n)return f?(f.d=p,s.b.push(f)):s.d=p,s;n("Helper start and end don't match",e,l.index+l[0].length);}else if("b"===S){f?(f.d=p,s.b.push(f)):s.d=p;var R=F.n||"";r.async&&c.test(R)&&(F.a=!0,F.n=R.replace(c,"")),f=F,p=[];}else if("s"===S){var T=F.n||"";r.async&&c.test(T)&&(F.a=!0,F.n=T.replace(c,"")),p.push(F);}else p.push(F);}if(!o)throw t('unclosed helper "'+s.n+'"');return v(e.slice(h,e.length),!1),s.d=p,s}({f:[]},!0);if(r.plugins)for(var m=0;m<r.plugins.length;m++){var y=r.plugins[m];y.processAST&&(v.d=y.processAST(v.d,r));}return v.d}function d(e,t){var n=h(e,t),r="var tR='';"+(t.useWith?"with("+t.varName+"||{}){":"")+x(n,t)+"if(cb){cb(null,tR)} return tR"+(t.useWith?"}":"");if(t.plugins)for(var a=0;a<t.plugins.length;a++){var i=t.plugins[a];i.processFnString&&(r=i.processFnString(r,t));}return r}function g(e,t){for(var n=0;n<t.length;n++){var r=t[n][0],a=t[n][1];e=(t[n][2]?"await ":"")+"c.l('F','"+r+"')("+e,a&&(e+=","+a),e+=")";}return e}function v(e,t,n,r,a,i){var s="{exec:"+(a?"async ":"")+y(n,t,e)+",params:["+r+"]";return i&&(s+=",name:'"+i+"'"),a&&(s+=",async:true"),s+="}"}function m(e,t){for(var n="[",r=0;r<e.length;r++){var a=e[r];n+=v(t,a.res||"",a.d,a.p||"",a.a,a.n),r<e.length&&(n+=",");}return n+="]"}function y(e,t,n){return "function("+t+"){var tR='';"+x(e,n)+"return tR}"}function x(e,t){for(var n=0,r=e.length,a="";n<r;n++){var i=e[n];if("string"==typeof i){a+="tR+='"+i+"';";}else {var s=i.t,c=i.c||"",o=i.f,l=i.n||"",f=i.p||"",u=i.res||"",p=i.b,h=!!i.a;if("i"===s){t.defaultFilter&&(c="c.l('F','"+t.defaultFilter+"')("+c+")");var d=g(c,o);!i.raw&&t.autoEscape&&(d="c.l('F','e')("+d+")"),a+="tR+="+d+";";}else if("h"===s)if(t.storage.nativeHelpers.get(l))a+=t.storage.nativeHelpers.get(l)(i,t);else {var y=(h?"await ":"")+"c.l('H','"+l+"')("+v(t,u,i.d,f,h);y+=p?","+m(p,t):",[]",a+="tR+="+g(y+=",c)",o)+";";}else "s"===s?a+="tR+="+g((h?"await ":"")+"c.l('H','"+l+"')({params:["+f+"]},[],c)",o)+";":"e"===s&&(a+=c+"\n");}}return a}var b=function(){function e(e){this.cache=e;}return e.prototype.define=function(e,t){this.cache[e]=t;},e.prototype.get=function(e){return this.cache[e]},e.prototype.remove=function(e){delete this.cache[e];},e.prototype.reset=function(){this.cache={};},e.prototype.load=function(e){s(this.cache,e,!0);},e}();function w(e,n,r,a){if(n&&n.length>0)throw t((a?"Native":"")+"Helper '"+e+"' doesn't accept blocks");if(r&&r.length>0)throw t((a?"Native":"")+"Helper '"+e+"' doesn't accept filters")}var F={"&":"&","<":"<",">":">",'"':""","'":"'"};function S(e){return F[e]}var I=new b({}),R=new b({each:function(e,t){var n="",r=e.params[0];if(w("each",t,!1),e.async)return new Promise((function(t){!function e(t,n,r,a,i){r(t[n],n).then((function(s){a+=s,n===t.length-1?i(a):e(t,n+1,r,a,i);}));}(r,0,e.exec,n,t);}));for(var a=0;a<r.length;a++)n+=e.exec(r[a],a);return n},foreach:function(e,t){var n=e.params[0];if(w("foreach",t,!1),e.async)return new Promise((function(t){!function e(t,n,r,a,i,s){a(n[r],t[n[r]]).then((function(c){i+=c,r===n.length-1?s(i):e(t,n,r+1,a,i,s);}));}(n,Object.keys(n),0,e.exec,"",t);}));var r="";for(var a in n)i(n,a)&&(r+=e.exec(a,n[a]));return r},include:function(e,n,r){w("include",n,!1);var a=r.storage.templates.get(e.params[0]);if(!a)throw t('Could not fetch template "'+e.params[0]+'"');return a(e.params[1],r)},extends:function(e,n,r){var a=e.params[1]||{};a.content=e.exec();for(var i=0;i<n.length;i++){var s=n[i];a[s.name]=s.exec();}var c=r.storage.templates.get(e.params[0]);if(!c)throw t('Could not fetch template "'+e.params[0]+'"');return c(a,r)},useScope:function(e,t){return w("useScope",t,!1),e.exec(e.params[0])}}),T=new b({if:function(e,t){w("if",!1,e.f,!0);var n="if("+e.p+"){"+x(e.d,t)+"}";if(e.b)for(var r=0;r<e.b.length;r++){var a=e.b[r];"else"===a.n?n+="else{"+x(a.d,t)+"}":"elif"===a.n&&(n+="else if("+a.p+"){"+x(a.d,t)+"}");}return n},try:function(e,n){if(w("try",!1,e.f,!0),!e.b||1!==e.b.length||"catch"!==e.b[0].n)throw t("native helper 'try' only accepts 1 block, 'catch'");var r="try{"+x(e.d,n)+"}",a=e.b[0];return r+="catch"+(a.res?"("+a.res+")":"")+"{"+x(a.d,n)+"}"},block:function(e,t){return w("block",e.b,e.f,!0),"if(!"+t.varName+"["+e.p+"]){tR+=("+y(e.d,"",t)+")()}else{tR+="+t.varName+"["+e.p+"]}"}}),E=new b({e:function(e){var t=String(e);return /[&<>"']/.test(t)?t.replace(/[&<>"']/g,S):t}}),j={varName:"it",autoTrim:[!1,"nl"],autoEscape:!0,defaultFilter:!1,tags:["{{","}}"],l:function(e,n){if("H"===e){var r=this.storage.helpers.get(n);if(r)return r;throw t("Can't find helper '"+n+"'")}if("F"===e){var a=this.storage.filters.get(n);if(a)return a;throw t("Can't find filter '"+n+"'")}},async:!1,storage:{helpers:R,nativeHelpers:T,filters:E,templates:I},prefixes:{h:"@",b:"#",i:"",r:"*",c:"/",e:"!"},cache:!1,plugins:[],useWith:!1};function H(e,t){var n={};return s(n,j),t&&s(n,t),e&&s(n,e),n.l.bind(n),n}function O(e,n){var r=H(n||{}),i=Function;if(r.async){if(!a)throw t("This environment doesn't support async/await");i=a;}try{return new i(r.varName,"c","cb",d(e,r))}catch(n){throw n instanceof SyntaxError?t("Bad template syntax\n\n"+n.message+"\n"+Array(n.message.length+1).join("=")+"\n"+d(e,r)):n}}function _(e,t){var n;return t.cache&&t.name&&t.storage.templates.get(t.name)?t.storage.templates.get(t.name):(n="function"==typeof e?e:O(e,t),t.cache&&t.name&&t.storage.templates.define(t.name,n),n)}j.l.bind(j),e.compile=O,e.compileScope=x,e.compileScopeIntoFunction=y,e.compileToString=d,e.defaultConfig=j,e.filters=E,e.getConfig=H,e.helpers=R,e.nativeHelpers=T,e.parse=h,e.render=function(e,n,a,i){var s=H(a||{});if(!s.async)return _(e,s)(n,s);if(!i){if("function"==typeof r)return new r((function(t,r){try{t(_(e,s)(n,s));}catch(e){r(e);}}));throw t("Please provide a callback function, this env doesn't support Promises")}try{_(e,s)(n,s,i);}catch(e){return i(e)}},e.templates=I,Object.defineProperty(e,"__esModule",{value:!0});}));
|
1228
|
+
|
1229
|
+
} (squirrelly_min, squirrelly_min.exports));
|
1230
|
+
|
1231
|
+
var squirrelly_minExports = squirrelly_min.exports;
|
1232
|
+
|
1233
|
+
const copyProperty = (to, from, property, ignoreNonConfigurable) => {
|
1234
|
+
// `Function#length` should reflect the parameters of `to` not `from` since we keep its body.
|
1235
|
+
// `Function#prototype` is non-writable and non-configurable so can never be modified.
|
1236
|
+
if (property === 'length' || property === 'prototype') {
|
1237
|
+
return;
|
1238
|
+
}
|
1239
|
+
|
1240
|
+
// `Function#arguments` and `Function#caller` should not be copied. They were reported to be present in `Reflect.ownKeys` for some devices in React Native (#41), so we explicitly ignore them here.
|
1241
|
+
if (property === 'arguments' || property === 'caller') {
|
1242
|
+
return;
|
1243
|
+
}
|
1244
|
+
|
1245
|
+
const toDescriptor = Object.getOwnPropertyDescriptor(to, property);
|
1246
|
+
const fromDescriptor = Object.getOwnPropertyDescriptor(from, property);
|
1247
|
+
|
1248
|
+
if (!canCopyProperty(toDescriptor, fromDescriptor) && ignoreNonConfigurable) {
|
1249
|
+
return;
|
1250
|
+
}
|
1251
|
+
|
1252
|
+
Object.defineProperty(to, property, fromDescriptor);
|
1253
|
+
};
|
1254
|
+
|
1255
|
+
// `Object.defineProperty()` throws if the property exists, is not configurable and either:
|
1256
|
+
// - one its descriptors is changed
|
1257
|
+
// - it is non-writable and its value is changed
|
1258
|
+
const canCopyProperty = function (toDescriptor, fromDescriptor) {
|
1259
|
+
return toDescriptor === undefined || toDescriptor.configurable || (
|
1260
|
+
toDescriptor.writable === fromDescriptor.writable &&
|
1261
|
+
toDescriptor.enumerable === fromDescriptor.enumerable &&
|
1262
|
+
toDescriptor.configurable === fromDescriptor.configurable &&
|
1263
|
+
(toDescriptor.writable || toDescriptor.value === fromDescriptor.value)
|
1264
|
+
);
|
1265
|
+
};
|
1266
|
+
|
1267
|
+
const changePrototype = (to, from) => {
|
1268
|
+
const fromPrototype = Object.getPrototypeOf(from);
|
1269
|
+
if (fromPrototype === Object.getPrototypeOf(to)) {
|
1270
|
+
return;
|
1271
|
+
}
|
1272
|
+
|
1273
|
+
Object.setPrototypeOf(to, fromPrototype);
|
1274
|
+
};
|
1275
|
+
|
1276
|
+
const wrappedToString = (withName, fromBody) => `/* Wrapped ${withName}*/\n${fromBody}`;
|
1277
|
+
|
1278
|
+
const toStringDescriptor = Object.getOwnPropertyDescriptor(Function.prototype, 'toString');
|
1279
|
+
const toStringName = Object.getOwnPropertyDescriptor(Function.prototype.toString, 'name');
|
1280
|
+
|
1281
|
+
// We call `from.toString()` early (not lazily) to ensure `from` can be garbage collected.
|
1282
|
+
// We use `bind()` instead of a closure for the same reason.
|
1283
|
+
// Calling `from.toString()` early also allows caching it in case `to.toString()` is called several times.
|
1284
|
+
const changeToString = (to, from, name) => {
|
1285
|
+
const withName = name === '' ? '' : `with ${name.trim()}() `;
|
1286
|
+
const newToString = wrappedToString.bind(null, withName, from.toString());
|
1287
|
+
// Ensure `to.toString.toString` is non-enumerable and has the same `same`
|
1288
|
+
Object.defineProperty(newToString, 'name', toStringName);
|
1289
|
+
Object.defineProperty(to, 'toString', {...toStringDescriptor, value: newToString});
|
1290
|
+
};
|
1291
|
+
|
1292
|
+
function mimicFunction(to, from, {ignoreNonConfigurable = false} = {}) {
|
1293
|
+
const {name} = to;
|
1294
|
+
|
1295
|
+
for (const property of Reflect.ownKeys(from)) {
|
1296
|
+
copyProperty(to, from, property, ignoreNonConfigurable);
|
1297
|
+
}
|
1298
|
+
|
1299
|
+
changePrototype(to, from);
|
1300
|
+
changeToString(to, from, name);
|
1301
|
+
|
1302
|
+
return to;
|
1303
|
+
}
|
1304
|
+
|
1305
|
+
const cacheStore = new WeakMap();
|
1306
|
+
/**
|
1307
|
+
[Memoize](https://en.wikipedia.org/wiki/Memoization) functions - An optimization used to speed up consecutive function calls by caching the result of calls with identical input.
|
1308
|
+
|
1309
|
+
@param fn - Function to be memoized.
|
1310
|
+
|
1311
|
+
@example
|
1312
|
+
```
|
1313
|
+
import {setTimeout as delay} from 'node:timer/promises';
|
1314
|
+
import pMemoize from 'p-memoize';
|
1315
|
+
import got from 'got';
|
1316
|
+
|
1317
|
+
const memoizedGot = pMemoize(got);
|
1318
|
+
|
1319
|
+
await memoizedGot('https://sindresorhus.com');
|
1320
|
+
|
1321
|
+
// This call is cached
|
1322
|
+
await memoizedGot('https://sindresorhus.com');
|
1323
|
+
|
1324
|
+
await delay(2000);
|
1325
|
+
|
1326
|
+
// This call is not cached as the cache has expired
|
1327
|
+
await memoizedGot('https://sindresorhus.com');
|
1328
|
+
```
|
1329
|
+
*/
|
1330
|
+
function pMemoize(fn, { cacheKey = ([firstArgument]) => firstArgument, cache = new Map(), } = {}) {
|
1331
|
+
// Promise objects can't be serialized so we keep track of them internally and only provide their resolved values to `cache`
|
1332
|
+
// `Promise<AsyncReturnType<FunctionToMemoize>>` is used instead of `ReturnType<FunctionToMemoize>` because promise properties are not kept
|
1333
|
+
const promiseCache = new Map();
|
1334
|
+
const memoized = function (...arguments_) {
|
1335
|
+
const key = cacheKey(arguments_);
|
1336
|
+
if (promiseCache.has(key)) {
|
1337
|
+
return promiseCache.get(key);
|
1338
|
+
}
|
1339
|
+
const promise = (async () => {
|
1340
|
+
try {
|
1341
|
+
if (cache && await cache.has(key)) {
|
1342
|
+
return (await cache.get(key));
|
1343
|
+
}
|
1344
|
+
const promise = fn.apply(this, arguments_);
|
1345
|
+
const result = await promise;
|
1346
|
+
try {
|
1347
|
+
return result;
|
1348
|
+
}
|
1349
|
+
finally {
|
1350
|
+
if (cache) {
|
1351
|
+
await cache.set(key, result);
|
1352
|
+
}
|
1353
|
+
}
|
1354
|
+
}
|
1355
|
+
finally {
|
1356
|
+
promiseCache.delete(key);
|
1357
|
+
}
|
1358
|
+
})();
|
1359
|
+
promiseCache.set(key, promise);
|
1360
|
+
return promise;
|
1361
|
+
};
|
1362
|
+
mimicFunction(memoized, fn, {
|
1363
|
+
ignoreNonConfigurable: true,
|
1364
|
+
});
|
1365
|
+
cacheStore.set(memoized, cache);
|
1366
|
+
return memoized;
|
1367
|
+
}
|
1368
|
+
|
1369
|
+
function breakWord({ context, word, maxW = Infinity }) {
|
1370
|
+
const lines = [];
|
1371
|
+
const fullWordMetrics = context.measureText(word);
|
1372
|
+
if (fullWordMetrics.width < maxW) {
|
1373
|
+
return [{ text: word, metrics: fullWordMetrics }];
|
1374
|
+
}
|
1375
|
+
for (let i = 0; i < word.length; i++) {
|
1376
|
+
const lastLine = lines[lines.length - 1];
|
1377
|
+
const newText = (lastLine?.text ?? "") + word[i];
|
1378
|
+
const newLineMetrics = context.measureText(newText);
|
1379
|
+
if (newLineMetrics.width < maxW) {
|
1380
|
+
lines[lastLine ? lines.length - 1 : 0] = {
|
1381
|
+
text: newText,
|
1382
|
+
metrics: newLineMetrics
|
1383
|
+
};
|
1384
|
+
} else {
|
1385
|
+
lines.push({ text: word[i], metrics: context.measureText(word[i]) });
|
1386
|
+
}
|
1387
|
+
}
|
1388
|
+
return lines;
|
1389
|
+
}
|
1390
|
+
|
1391
|
+
memoize(
|
1392
|
+
({ font, scale, context, maxW, maxH, text, minSize, maxSize }) => {
|
1393
|
+
let fontSize = 0;
|
1394
|
+
if (maxSize) {
|
1395
|
+
const multiplier = 1;
|
1396
|
+
fontSize = (minSize ?? 0) * scale;
|
1397
|
+
let widestLine = 0;
|
1398
|
+
while (maxSize * scale > fontSize + multiplier) {
|
1399
|
+
fontSize += multiplier;
|
1400
|
+
const lines = getLines({ context, font, fontSize, text, maxW });
|
1401
|
+
widestLine = lines.reduce((acc, line) => {
|
1402
|
+
if (line.metrics.width > acc) {
|
1403
|
+
acc = line.metrics.width;
|
1404
|
+
}
|
1405
|
+
return acc;
|
1406
|
+
}, 0);
|
1407
|
+
if (widestLine > maxW || lines.length * fontSize > maxH) {
|
1408
|
+
fontSize -= multiplier;
|
1409
|
+
break;
|
1410
|
+
}
|
1411
|
+
}
|
1412
|
+
} else {
|
1413
|
+
fontSize = parseFloat(font.match(fontSizeRegex)?.groups?.value ?? "0") * scale;
|
1414
|
+
}
|
1415
|
+
return fontSize;
|
1416
|
+
},
|
1417
|
+
{
|
1418
|
+
cacheKey: ([{ font, text, minSize, maxSize, scale, maxW, maxH }]) => `${font}_${text}_${minSize}_${maxSize}_${scale}_${maxW}_${maxH}`
|
1419
|
+
}
|
1420
|
+
);
|
1421
|
+
|
1422
|
+
const easingMap = {
|
1423
|
+
linear,
|
1424
|
+
easeIn,
|
1425
|
+
easeInOut,
|
1426
|
+
easeOut,
|
1427
|
+
circIn,
|
1428
|
+
circInOut,
|
1429
|
+
circOut,
|
1430
|
+
backIn,
|
1431
|
+
backInOut,
|
1432
|
+
backOut,
|
1433
|
+
anticipate,
|
1434
|
+
bounceIn,
|
1435
|
+
bounceInOut,
|
1436
|
+
bounceOut
|
1437
|
+
};
|
1438
|
+
memoize(
|
1439
|
+
(from, to, { clamp = true, ease = "easeIn", ...options } = {}) => {
|
1440
|
+
return interpolate(from, to, { ...options, clamp, ease: easingMap[ease] });
|
1441
|
+
},
|
1442
|
+
{
|
1443
|
+
cacheKey: ([from, to, options]) => JSON.stringify({ from, to, options })
|
1444
|
+
}
|
1445
|
+
);
|
1446
|
+
const fontSizeRegex = /(?<value>\d+\.?\d*)(?=px)/;
|
1447
|
+
|
1448
|
+
const getLines = memoize(
|
1449
|
+
({ context, font, fontSize, text, maxW = Infinity }) => {
|
1450
|
+
try {
|
1451
|
+
context.save();
|
1452
|
+
context.font = font.replace(fontSizeRegex, fontSize.toString());
|
1453
|
+
const newLines = text.split("\n");
|
1454
|
+
return newLines.flatMap((line) => {
|
1455
|
+
const words = line.split(" ").filter(Boolean);
|
1456
|
+
if (!words.length) {
|
1457
|
+
return { text: "", metrics: context.measureText("") };
|
1458
|
+
}
|
1459
|
+
return words.slice(1).reduce(
|
1460
|
+
(acc, word) => {
|
1461
|
+
const prevLine = acc[acc.length - 1].text;
|
1462
|
+
const newLine = `${prevLine} ${word}`.trim();
|
1463
|
+
const newMetrics = context.measureText(newLine);
|
1464
|
+
if (newMetrics.width > maxW) {
|
1465
|
+
acc = [...acc, ...breakWord({ context, word, maxW })];
|
1466
|
+
} else {
|
1467
|
+
acc[acc.length - 1] = {
|
1468
|
+
text: newLine,
|
1469
|
+
metrics: newMetrics
|
1470
|
+
};
|
1471
|
+
}
|
1472
|
+
return acc;
|
1473
|
+
},
|
1474
|
+
breakWord({ context, word: words[0], maxW })
|
1475
|
+
);
|
1476
|
+
});
|
1477
|
+
} finally {
|
1478
|
+
context.restore();
|
1479
|
+
}
|
1480
|
+
},
|
1481
|
+
{
|
1482
|
+
cacheKey: ([{ font, fontSize, text, maxW }]) => `${font}_${fontSize}_${text}_${maxW}`
|
1483
|
+
}
|
1484
|
+
);
|
1485
|
+
|
1486
|
+
const template = {
|
1487
|
+
id: "046f363c-960a-449c-ae5e-984ac6ab58c2",
|
1488
|
+
version: "3",
|
1489
|
+
name: "None",
|
1490
|
+
entityId: "none",
|
1491
|
+
templateId: "a95e537e-fb4d-4d2f-9c72-86c0925c7176",
|
1492
|
+
layouts: [
|
1493
|
+
{
|
1494
|
+
name: "none",
|
1495
|
+
tree: `[
|
1496
|
+
{
|
1497
|
+
"width": "100%",
|
1498
|
+
"height": "100%",
|
1499
|
+
"node": {
|
1500
|
+
"type": "video",
|
1501
|
+
"format": {{ it.videoFormat }},
|
1502
|
+
"value": {
|
1503
|
+
"id": {{ it.id }},
|
1504
|
+
"key": {{ it.key }},
|
1505
|
+
"src": {{ it.src }},
|
1506
|
+
"playlist": {{ it.playlist }},
|
1507
|
+
"poster": {{ it.poster }},
|
1508
|
+
"captions": {{ it.captions }},
|
1509
|
+
"duration": {{ it.duration }},
|
1510
|
+
"startOffset": {{ it.startOffset }},
|
1511
|
+
"endOffset": {{ it.endOffset }},
|
1512
|
+
"crop": {
|
1513
|
+
"x": {{ it.crop?.x }},
|
1514
|
+
"y": {{ it.crop?.y }},
|
1515
|
+
"width": {{ it.crop?.width }},
|
1516
|
+
"height": {{ it.crop?.height }}
|
1517
|
+
}
|
1518
|
+
}
|
1519
|
+
}
|
1520
|
+
}
|
1521
|
+
]`
|
1522
|
+
}
|
1523
|
+
],
|
1524
|
+
content: [
|
1525
|
+
{
|
1526
|
+
scenes: [
|
1527
|
+
{
|
1528
|
+
layout: "none",
|
1529
|
+
data: `{
|
1530
|
+
"id": {{ it._root?.answer?.id }},
|
1531
|
+
"key": {{ it._root?.answer?.id + '-intro' }},
|
1532
|
+
"poster": {{ it._root?.answer?.media?.thumbnail }},
|
1533
|
+
"duration": {{ it._root?.answer?.metadata?.duration }},
|
1534
|
+
"startOffset": {{ it._root?.answer?.settings?.startOffset }},
|
1535
|
+
"endOffset": {{ it._root?.answer?.settings?.endOffset }},
|
1536
|
+
"crop": {
|
1537
|
+
"x": {{ it._root?.answer?.settings?.crop?.x }},
|
1538
|
+
"y": {{ it._root?.answer?.settings?.crop?.y }},
|
1539
|
+
"width": {{ it._root?.answer?.settings?.crop?.width }},
|
1540
|
+
"height": {{ it._root?.answer?.settings?.crop?.height }}
|
1541
|
+
}
|
1542
|
+
}`,
|
1543
|
+
derived: `{
|
1544
|
+
"src": {{ it._derived?.src }},
|
1545
|
+
"playlist": {{ it._derived?.playlist }},
|
1546
|
+
"captions": {{ it._derived?.captions }}
|
1547
|
+
}`
|
1548
|
+
}
|
1549
|
+
],
|
1550
|
+
root: "{{ it.intro?.questions?.items }}"
|
1551
|
+
},
|
1552
|
+
{
|
1553
|
+
scenes: [
|
1554
|
+
{
|
1555
|
+
layout: "none",
|
1556
|
+
data: `{
|
1557
|
+
"id": {{ it._root?.answer?.id }},
|
1558
|
+
"key": {{ it._root?.answer?.id + '-' + it._index }},
|
1559
|
+
"poster": {{ it._root?.answer?.media?.thumbnail }},
|
1560
|
+
"duration": {{ it._root?.answer?.metadata?.duration }},
|
1561
|
+
"startOffset": {{ it._root?.answer?.settings?.startOffset }},
|
1562
|
+
"endOffset": {{ it._root?.answer?.settings?.endOffset }},
|
1563
|
+
"crop": {
|
1564
|
+
"x": {{ it._root?.answer?.settings?.crop?.x }},
|
1565
|
+
"y": {{ it._root?.answer?.settings?.crop?.y }},
|
1566
|
+
"width": {{ it._root?.answer?.settings?.crop?.width }},
|
1567
|
+
"height": {{ it._root?.answer?.settings?.crop?.height }}
|
1568
|
+
}
|
1569
|
+
}`,
|
1570
|
+
derived: `{
|
1571
|
+
"src": {{ it._derived?.src }},
|
1572
|
+
"playlist": {{ it._derived?.playlist }},
|
1573
|
+
"captions": {{ it._derived?.captions }}
|
1574
|
+
}`
|
1575
|
+
}
|
1576
|
+
],
|
1577
|
+
root: "{{ it.questions?.items }}"
|
1578
|
+
},
|
1579
|
+
{
|
1580
|
+
scenes: [
|
1581
|
+
{
|
1582
|
+
layout: "none",
|
1583
|
+
data: `{
|
1584
|
+
"id": {{ it._root?.answer?.id }},
|
1585
|
+
"key": {{ it._root?.answer?.id + '-outro' }},
|
1586
|
+
"poster": {{ it._root?.answer?.media?.thumbnail }},
|
1587
|
+
"duration": {{ it._root?.answer?.metadata?.duration }},
|
1588
|
+
"startOffset": {{ it._root?.answer?.settings?.startOffset }},
|
1589
|
+
"endOffset": {{ it._root?.answer?.settings?.endOffset }},
|
1590
|
+
"crop": {
|
1591
|
+
"x": {{ it._root?.answer?.settings?.crop?.x }},
|
1592
|
+
"y": {{ it._root?.answer?.settings?.crop?.y }},
|
1593
|
+
"width": {{ it._root?.answer?.settings?.crop?.width }},
|
1594
|
+
"height": {{ it._root?.answer?.settings?.crop?.height }}
|
1595
|
+
}
|
1596
|
+
}`,
|
1597
|
+
derived: `{
|
1598
|
+
"src": {{ it._derived?.src }},
|
1599
|
+
"playlist": {{ it._derived?.playlist }},
|
1600
|
+
"captions": {{ it._derived?.captions }}
|
1601
|
+
}`
|
1602
|
+
}
|
1603
|
+
],
|
1604
|
+
root: "{{ it.outro?.questions?.items }}"
|
1605
|
+
}
|
1606
|
+
],
|
1607
|
+
system: true,
|
1608
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
1609
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
1610
|
+
};
|
1611
|
+
({
|
1612
|
+
id: "073977ec-6384-4329-b7c5-8275fb513e74",
|
1613
|
+
name: "None",
|
1614
|
+
entityId: "none",
|
1615
|
+
templateId: "a95e537e-fb4d-4d2f-9c72-86c0925c7176",
|
1616
|
+
templates: [template],
|
1617
|
+
meta: {
|
1618
|
+
frameRate: 30,
|
1619
|
+
resolution: 720,
|
1620
|
+
transitionDuration: 1 / 3
|
1621
|
+
},
|
1622
|
+
system: true,
|
1623
|
+
default: 0,
|
1624
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
1625
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
1626
|
+
});
|
1627
|
+
|
1628
|
+
async function imageFactory() {
|
1629
|
+
if (typeof window === "undefined") {
|
1630
|
+
const skiaCanvas = await import('./browser-DfO9Pnu7.js').then(n => n.b);
|
1631
|
+
return new skiaCanvas.Image();
|
1632
|
+
}
|
1633
|
+
return new Image();
|
1634
|
+
}
|
1635
|
+
pMemoize(async function getImage2(src) {
|
1636
|
+
if (!src) {
|
1637
|
+
return null;
|
1638
|
+
}
|
1639
|
+
return new Promise((resolve, reject) => {
|
1640
|
+
imageFactory().then((image) => {
|
1641
|
+
image.onload = () => {
|
1642
|
+
resolve(image);
|
1643
|
+
};
|
1644
|
+
image.onerror = (e) => {
|
1645
|
+
reject(e);
|
1646
|
+
};
|
1647
|
+
image.src = src;
|
1648
|
+
});
|
1649
|
+
});
|
1650
|
+
});
|
1651
|
+
function isPlainObject(value) {
|
1652
|
+
if (value === null || typeof value !== "object") {
|
1653
|
+
return false;
|
1654
|
+
}
|
1655
|
+
if (Object.getPrototypeOf(value) === null) {
|
1656
|
+
return true;
|
1657
|
+
}
|
1658
|
+
let proto = value;
|
1659
|
+
while (Object.getPrototypeOf(proto) !== null) {
|
1660
|
+
proto = Object.getPrototypeOf(proto);
|
1661
|
+
}
|
1662
|
+
return Object.getPrototypeOf(value) === proto;
|
1663
|
+
}
|
1664
|
+
function sanitizeString(unsanitized) {
|
1665
|
+
return unsanitized.replace(/\\/g, "\\\\").replace(/\//g, "\\/").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\t/g, "\\t").replace(/\f/g, "\\f").replace(/"/g, '\\"');
|
1666
|
+
}
|
1667
|
+
|
1668
|
+
squirrelly_minExports.filters.define("parse", (data) => {
|
1669
|
+
if (typeof data === "undefined") {
|
1670
|
+
return null;
|
1671
|
+
}
|
1672
|
+
if (typeof data === "string") {
|
1673
|
+
return `"${sanitizeString(data)}"`;
|
1674
|
+
}
|
1675
|
+
if (isPlainObject(data) || Array.isArray(data)) {
|
1676
|
+
return JSON.stringify(data);
|
1677
|
+
}
|
1678
|
+
return data;
|
1679
|
+
});
|
1680
|
+
|
1681
|
+
const TEMPLATE_VERSION = "3";
|
1682
|
+
|
1683
|
+
const name = "@vouchfor/embeds";
|
1684
|
+
const version = "0.0.0-experiment.8cafed9";
|
1685
|
+
const license = "MIT";
|
1686
|
+
const author = "Aaron Williams";
|
1687
|
+
const main = "dist/es/embeds.js";
|
1688
|
+
const module = "dist/es/embeds.js";
|
1689
|
+
const type = "module";
|
1690
|
+
const types = "dist/es/src/index.d.ts";
|
1691
|
+
const exports = {
|
1692
|
+
".": "./dist/es/embeds.js"
|
1693
|
+
};
|
1694
|
+
const files = [
|
1695
|
+
"dist",
|
1696
|
+
"src"
|
1697
|
+
];
|
1698
|
+
const publishConfig = {
|
1699
|
+
tag: "experiment",
|
1700
|
+
access: "public"
|
1701
|
+
};
|
1702
|
+
const engines = {
|
1703
|
+
node: ">=18.18.0"
|
1704
|
+
};
|
1705
|
+
const scripts = {
|
1706
|
+
build: "rm -rf dist && tsc && yarn build:self",
|
1707
|
+
"build:deps": "yarn --cwd ../media-player build",
|
1708
|
+
"build:self": "vite build --mode iife && vite build --mode es && node scripts/build.cjs",
|
1709
|
+
"build:package": "yarn build",
|
1710
|
+
"build:storybook": "yarn prebuild && storybook build",
|
1711
|
+
"generate:manifest": "wca src --outFile custom-elements.json",
|
1712
|
+
lint: "eslint . --quiet",
|
1713
|
+
"lint:fix": "eslint . --fix",
|
1714
|
+
"lint:staged": "lint-staged",
|
1715
|
+
prepublishOnly: "yarn build",
|
1716
|
+
size: "size-limit",
|
1717
|
+
storybook: "yarn prebuild && storybook dev -p 6007",
|
1718
|
+
prebuild: "yarn build:deps && yarn generate:manifest",
|
1719
|
+
test: "rm -rf test/lib && yarn prebuild && vite build --mode test && web-test-runner",
|
1720
|
+
"test:ci": "yarn test --config web-test-runner.ci.config.js"
|
1721
|
+
};
|
1722
|
+
const dependencies = {
|
1723
|
+
"@a11y/focus-trap": "^1.0.5",
|
1724
|
+
"@lit/task": "^1.0.0",
|
1725
|
+
"@vouchfor/media-player": "0.0.0-experiment.8cafed9",
|
1726
|
+
uuid: "^9.0.1"
|
1727
|
+
};
|
1728
|
+
const peerDependencies = {
|
1729
|
+
lit: "^3.1.2"
|
1730
|
+
};
|
1731
|
+
const devDependencies = {
|
1732
|
+
"@esm-bundle/chai": "^4.3.4-fix.0",
|
1733
|
+
"@open-wc/testing": "^4.0.0",
|
1734
|
+
"@storybook/addon-essentials": "^8.0.2",
|
1735
|
+
"@storybook/addon-links": "^8.0.2",
|
1736
|
+
"@storybook/blocks": "^8.0.2",
|
1737
|
+
"@storybook/web-components": "^8.0.2",
|
1738
|
+
"@storybook/web-components-vite": "^8.0.2",
|
1739
|
+
"@svgr/core": "^8.1.0",
|
1740
|
+
"@types/flat": "^5.0.5",
|
1741
|
+
"@types/mocha": "^10.0.6",
|
1742
|
+
"@vouchfor/eslint-config": "^1.0.1",
|
1743
|
+
"@vouchfor/prettier-config": "^1.0.1",
|
1744
|
+
"@vouchfor/video-utils": "0.0.0-experiment.8cafed9",
|
1745
|
+
"@web/dev-server-esbuild": "^1.0.2",
|
1746
|
+
"@web/test-runner": "^0.18.1",
|
1747
|
+
"@web/test-runner-browserstack": "^0.7.1",
|
1748
|
+
"@web/test-runner-mocha": "^0.9.0",
|
1749
|
+
"@web/test-runner-playwright": "^0.11.0",
|
1750
|
+
glob: "^10.3.10",
|
1751
|
+
"lint-staged": "^15.2.2",
|
1752
|
+
lit: "^3.1.2",
|
1753
|
+
lodash: "^4.17.21",
|
1754
|
+
react: "^18.2.0",
|
1755
|
+
"react-dom": "^18.2.0",
|
1756
|
+
"rollup-plugin-internal": "^1.0.4",
|
1757
|
+
"rollup-plugin-tla": "^0.0.2",
|
1758
|
+
sinon: "^17.0.1",
|
1759
|
+
storybook: "^8.0.2",
|
1760
|
+
svgson: "^5.3.1",
|
1761
|
+
typescript: "^5.4.3",
|
1762
|
+
vite: "^5.2.2",
|
1763
|
+
"vite-plugin-commonjs": "^0.10.1",
|
1764
|
+
"vite-plugin-dts": "^3.7.3",
|
1765
|
+
"web-component-analyzer": "^2.0.0"
|
1766
|
+
};
|
1767
|
+
const packageJson = {
|
1768
|
+
name: name,
|
1769
|
+
version: version,
|
1770
|
+
license: license,
|
1771
|
+
author: author,
|
1772
|
+
main: main,
|
1773
|
+
module: module,
|
1774
|
+
type: type,
|
1775
|
+
types: types,
|
1776
|
+
exports: exports,
|
1777
|
+
files: files,
|
1778
|
+
publishConfig: publishConfig,
|
1779
|
+
engines: engines,
|
1780
|
+
scripts: scripts,
|
1781
|
+
"lint-staged": {
|
1782
|
+
"**/*.{ts,tsx,js}": "eslint --fix --quiet",
|
1783
|
+
"**/*.{md,json,yml}": "prettier --write"
|
1784
|
+
},
|
1785
|
+
dependencies: dependencies,
|
1786
|
+
peerDependencies: peerDependencies,
|
1787
|
+
devDependencies: devDependencies
|
1788
|
+
};
|
1789
|
+
|
1790
|
+
function createVisitor(env) {
|
1791
|
+
const { publicApiUrl } = getEnvUrls(env);
|
1792
|
+
const visitorId = v4();
|
1793
|
+
navigator.sendBeacon(`${publicApiUrl}/api/visitor`, JSON.stringify({ visitorId }));
|
1794
|
+
return visitorId;
|
1795
|
+
}
|
1796
|
+
function getUids(env) {
|
1797
|
+
if (typeof window === "undefined") {
|
1798
|
+
return {
|
1799
|
+
client: null,
|
1800
|
+
tab: null,
|
1801
|
+
request: v4()
|
1802
|
+
};
|
1803
|
+
}
|
1804
|
+
let visitorId = window.localStorage?.getItem?.("vouch-uid-visitor");
|
1805
|
+
let clientId = window.localStorage?.getItem?.("vouch-uid-client");
|
1806
|
+
let tabId = window.sessionStorage?.getItem?.("vouch-uid-tab");
|
1807
|
+
const requestId = v4();
|
1808
|
+
if (!visitorId) {
|
1809
|
+
visitorId = createVisitor(env);
|
1810
|
+
window.localStorage?.setItem?.("vouch-uid-visitor", visitorId);
|
1811
|
+
}
|
1812
|
+
if (!clientId) {
|
1813
|
+
clientId = v4();
|
1814
|
+
window.localStorage?.setItem?.("vouch-uid-client", clientId);
|
1815
|
+
}
|
1816
|
+
if (!tabId) {
|
1817
|
+
tabId = v4();
|
1818
|
+
window.sessionStorage?.setItem?.("vouch-uid-tab", tabId);
|
1819
|
+
}
|
1820
|
+
return {
|
1821
|
+
client: clientId,
|
1822
|
+
tab: tabId,
|
1823
|
+
request: requestId,
|
1824
|
+
visitor: visitorId
|
1825
|
+
};
|
1826
|
+
}
|
1827
|
+
function findVouchId(payload, vouch) {
|
1828
|
+
if (payload && "vouchId" in payload) {
|
1829
|
+
return payload.vouchId;
|
1830
|
+
}
|
1831
|
+
return vouch?.id ?? null;
|
1832
|
+
}
|
1833
|
+
function getReportingMetadata(source = "embedded_player") {
|
1834
|
+
const [country, region] = Intl.DateTimeFormat().resolvedOptions().timeZone?.split?.("/") ?? [];
|
1835
|
+
const utmParams = {};
|
1836
|
+
[...new URLSearchParams(location.search).entries()].forEach(([key, value]) => {
|
1837
|
+
if (/utm/.test(key)) {
|
1838
|
+
const param = key.toLowerCase().replace(/[-_][a-z0-9]/g, (group) => group.slice(-1).toUpperCase());
|
1839
|
+
utmParams[param] = value;
|
1840
|
+
}
|
1841
|
+
});
|
1842
|
+
return {
|
1843
|
+
source,
|
1844
|
+
time: /* @__PURE__ */ new Date(),
|
1845
|
+
region,
|
1846
|
+
country,
|
1847
|
+
screenHeight: window.screen.height,
|
1848
|
+
screenWidth: window.screen.width,
|
1849
|
+
referrer: document.referrer,
|
1850
|
+
currentUrl: location.href,
|
1851
|
+
embedType: "media-player-embed",
|
1852
|
+
embedVersion: packageJson.version,
|
1853
|
+
templateVersion: TEMPLATE_VERSION,
|
1854
|
+
...utmParams
|
1855
|
+
};
|
1856
|
+
}
|
1857
|
+
|
1858
|
+
const MINIMUM_SEND_THRESHOLD = 1;
|
1859
|
+
class TrackingController {
|
1860
|
+
constructor(host) {
|
1861
|
+
this._batchedEvents = [];
|
1862
|
+
this._hasPlayed = false;
|
1863
|
+
this._hasLoaded = {};
|
1864
|
+
this._answersViewed = {};
|
1865
|
+
this._streamStartTime = {};
|
1866
|
+
this._streamLatestTime = {};
|
1867
|
+
this._currentlyPlayingVideo = null;
|
1868
|
+
this._createTrackingEvent = (event, payload) => {
|
1869
|
+
const vouchId = findVouchId(payload, this.host.vouch);
|
1870
|
+
if (!vouchId || this.host.disableTracking) {
|
1871
|
+
return;
|
1872
|
+
}
|
1873
|
+
this._batchedEvents.push({
|
1874
|
+
event,
|
1875
|
+
payload: {
|
1876
|
+
...payload,
|
1877
|
+
vouchId,
|
1878
|
+
time: (/* @__PURE__ */ new Date()).toISOString()
|
1879
|
+
}
|
1880
|
+
});
|
1881
|
+
};
|
1882
|
+
this._sendTrackingEvent = () => {
|
1883
|
+
if (this._batchedEvents.length <= 0) {
|
1884
|
+
return;
|
1885
|
+
}
|
1886
|
+
const { publicApiUrl } = getEnvUrls(this.host.env);
|
1887
|
+
const { client, tab, request, visitor } = getUids(this.host.env);
|
1888
|
+
navigator.sendBeacon(
|
1889
|
+
`${publicApiUrl}/api/batchevents`,
|
1890
|
+
JSON.stringify({
|
1891
|
+
payload: {
|
1892
|
+
events: this._batchedEvents
|
1893
|
+
},
|
1894
|
+
context: {
|
1895
|
+
"x-uid-client": client,
|
1896
|
+
"x-uid-tab": tab,
|
1897
|
+
"x-uid-request": request,
|
1898
|
+
"x-uid-visitor": visitor,
|
1899
|
+
"x-reporting-metadata": getReportingMetadata(this.host.trackingSource)
|
1900
|
+
}
|
1901
|
+
})
|
1902
|
+
);
|
1903
|
+
this._batchedEvents = [];
|
1904
|
+
};
|
1905
|
+
this._streamEnded = () => {
|
1906
|
+
if (this._currentlyPlayingVideo) {
|
1907
|
+
const { id, key } = this._currentlyPlayingVideo;
|
1908
|
+
if (this._streamLatestTime[key] > this._streamStartTime[key] + MINIMUM_SEND_THRESHOLD) {
|
1909
|
+
this._createTrackingEvent("VIDEO_STREAMED", {
|
1910
|
+
answerId: id,
|
1911
|
+
streamStart: this._streamStartTime[key],
|
1912
|
+
streamEnd: this._streamLatestTime[key]
|
1913
|
+
});
|
1914
|
+
}
|
1915
|
+
delete this._streamStartTime[key];
|
1916
|
+
delete this._streamLatestTime[key];
|
1917
|
+
}
|
1918
|
+
};
|
1919
|
+
this._handleVouchLoaded = ({ detail: vouchId }) => {
|
1920
|
+
if (!vouchId) {
|
1921
|
+
return;
|
1922
|
+
}
|
1923
|
+
if (!this._hasLoaded[vouchId]) {
|
1924
|
+
this._createTrackingEvent("VOUCH_LOADED", { vouchId });
|
1925
|
+
this._hasLoaded[vouchId] = true;
|
1926
|
+
}
|
1927
|
+
};
|
1928
|
+
this._handlePlay = () => {
|
1929
|
+
if (!this._hasPlayed) {
|
1930
|
+
this._createTrackingEvent("VIDEO_PLAYED", {
|
1931
|
+
streamStart: this.host.currentTime
|
1932
|
+
});
|
1933
|
+
this._hasPlayed = true;
|
1934
|
+
}
|
1935
|
+
};
|
1936
|
+
this._handleVideoPlay = ({ detail: { id, key } }) => {
|
1937
|
+
if (!this._answersViewed[key]) {
|
1938
|
+
this._createTrackingEvent("VOUCH_RESPONSE_VIEWED", {
|
1939
|
+
answerId: id
|
1940
|
+
});
|
1941
|
+
this._answersViewed[key] = true;
|
1942
|
+
}
|
1943
|
+
};
|
1944
|
+
this._handleVideoTimeUpdate = ({ detail: { id, key, node } }) => {
|
1945
|
+
if (
|
1946
|
+
// We only want to count any time that the video is actually playing
|
1947
|
+
!this.host.paused && // Only update the latest time if this event fires for the currently active video
|
1948
|
+
id === this.host.scene?.video?.id
|
1949
|
+
) {
|
1950
|
+
this._currentlyPlayingVideo = { id, key, node };
|
1951
|
+
this._streamLatestTime[key] = node.currentTime;
|
1952
|
+
if (!this._streamStartTime[key]) {
|
1953
|
+
this._streamStartTime[key] = node.currentTime;
|
1954
|
+
this._streamLatestTime[key] = node.currentTime;
|
1955
|
+
}
|
1956
|
+
}
|
1957
|
+
};
|
1958
|
+
this._handleVideoPause = ({ detail: { id, key } }) => {
|
1959
|
+
if (this._streamLatestTime[key] > this._streamStartTime[key] + MINIMUM_SEND_THRESHOLD) {
|
1960
|
+
this._createTrackingEvent("VIDEO_STREAMED", {
|
1961
|
+
answerId: id,
|
1962
|
+
streamStart: this._streamStartTime[key],
|
1963
|
+
streamEnd: this._streamLatestTime[key]
|
1964
|
+
});
|
1965
|
+
}
|
1966
|
+
delete this._streamStartTime[key];
|
1967
|
+
delete this._streamLatestTime[key];
|
1968
|
+
};
|
1969
|
+
this._pageUnloading = () => {
|
1970
|
+
this._streamEnded();
|
1971
|
+
this._sendTrackingEvent();
|
1972
|
+
};
|
1973
|
+
this._handleVisibilityChange = () => {
|
1974
|
+
if (document.visibilityState === "hidden") {
|
1975
|
+
this._pageUnloading();
|
1976
|
+
}
|
1977
|
+
};
|
1978
|
+
this._handlePageHide = () => {
|
1979
|
+
this._pageUnloading();
|
1980
|
+
};
|
1981
|
+
this.host = host;
|
1982
|
+
host.addController(this);
|
1983
|
+
}
|
1984
|
+
hostConnected() {
|
1985
|
+
requestAnimationFrame(() => {
|
1986
|
+
if ("onvisibilitychange" in document) {
|
1987
|
+
document.addEventListener("visibilitychange", this._handleVisibilityChange);
|
1988
|
+
} else {
|
1989
|
+
window.addEventListener("pagehide", this._handlePageHide);
|
1990
|
+
}
|
1991
|
+
this.host.addEventListener("vouch:loaded", this._handleVouchLoaded);
|
1992
|
+
this.host.mediaPlayer?.addEventListener("play", this._handlePlay);
|
1993
|
+
this.host.mediaPlayer?.addEventListener("video:play", this._handleVideoPlay);
|
1994
|
+
this.host.mediaPlayer?.addEventListener("video:pause", this._handleVideoPause);
|
1995
|
+
this.host.mediaPlayer?.addEventListener("video:timeupdate", this._handleVideoTimeUpdate);
|
1996
|
+
});
|
1997
|
+
}
|
1998
|
+
hostDisconnected() {
|
1999
|
+
this._pageUnloading();
|
2000
|
+
if ("onvisibilitychange" in document) {
|
2001
|
+
document.removeEventListener("visibilitychange", this._handleVisibilityChange);
|
2002
|
+
} else {
|
2003
|
+
window.removeEventListener("pagehide", this._handlePageHide);
|
2004
|
+
}
|
2005
|
+
this.host.removeEventListener("vouch:loaded", this._handleVouchLoaded);
|
2006
|
+
this.host.mediaPlayer?.removeEventListener("play", this._handlePlay);
|
2007
|
+
this.host.mediaPlayer?.removeEventListener("video:play", this._handleVideoPlay);
|
2008
|
+
this.host.mediaPlayer?.removeEventListener("video:pause", this._handleVideoPause);
|
2009
|
+
this.host.mediaPlayer?.removeEventListener("video:timeupdate", this._handleVideoTimeUpdate);
|
2010
|
+
}
|
2011
|
+
}
|
2012
|
+
|
2013
|
+
var __defProp$3 = Object.defineProperty;
|
2014
|
+
var __getOwnPropDesc$3 = Object.getOwnPropertyDescriptor;
|
2015
|
+
var __decorateClass$3 = (decorators, target, key, kind) => {
|
2016
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$3(target, key) : target;
|
2017
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
2018
|
+
if (decorator = decorators[i])
|
2019
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
2020
|
+
if (kind && result)
|
2021
|
+
__defProp$3(target, key, result);
|
2022
|
+
return result;
|
2023
|
+
};
|
2024
|
+
let PlayerEmbed = class extends LitElement {
|
2025
|
+
constructor() {
|
2026
|
+
super(...arguments);
|
2027
|
+
this.env = "prod";
|
2028
|
+
this.apiKey = "";
|
2029
|
+
this.disableTracking = false;
|
2030
|
+
this.trackingSource = "embedded_player";
|
2031
|
+
this.preload = "auto";
|
2032
|
+
this.autoplay = false;
|
2033
|
+
this.aspectRatio = 0;
|
2034
|
+
this.eventController = new EventForwardController(this, [
|
2035
|
+
"durationchange",
|
2036
|
+
"ended",
|
2037
|
+
"error",
|
2038
|
+
"loadeddata",
|
2039
|
+
"pause",
|
2040
|
+
"stalled",
|
2041
|
+
"play",
|
2042
|
+
"playing",
|
2043
|
+
"ratechange",
|
2044
|
+
"scenechange",
|
2045
|
+
"seeking",
|
2046
|
+
"seeked",
|
2047
|
+
"timeupdate",
|
2048
|
+
"volumechange",
|
2049
|
+
"waiting",
|
2050
|
+
"video:loadeddata",
|
2051
|
+
"video:seeking",
|
2052
|
+
"video:seeked",
|
2053
|
+
"video:play",
|
2054
|
+
"video:playing",
|
2055
|
+
"video:pause",
|
2056
|
+
"video:stalled",
|
2057
|
+
"video:timeupdate",
|
2058
|
+
"video:ended",
|
2059
|
+
"video:error"
|
2060
|
+
]);
|
2061
|
+
this._fetcherController = new FetcherController(this);
|
2062
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
2063
|
+
// @ts-ignore
|
2064
|
+
this._trackingController = new TrackingController(this);
|
2065
|
+
this._mediaPlayerRef = createRef();
|
2066
|
+
}
|
2067
|
+
get fetching() {
|
2068
|
+
return this._fetcherController.fetching;
|
2069
|
+
}
|
2070
|
+
get waiting() {
|
2071
|
+
return this._mediaPlayerRef.value?.waiting;
|
2072
|
+
}
|
2073
|
+
get initialised() {
|
2074
|
+
return this._mediaPlayerRef.value?.initialised;
|
2075
|
+
}
|
2076
|
+
get seeking() {
|
2077
|
+
return this._mediaPlayerRef.value?.seeking;
|
2078
|
+
}
|
2079
|
+
get paused() {
|
2080
|
+
return this._mediaPlayerRef.value?.paused;
|
2081
|
+
}
|
2082
|
+
get captions() {
|
2083
|
+
return this._mediaPlayerRef.value?.captions;
|
2084
|
+
}
|
2085
|
+
get fullscreen() {
|
2086
|
+
return this._mediaPlayerRef.value?.fullscreen;
|
2087
|
+
}
|
2088
|
+
get duration() {
|
2089
|
+
return this._mediaPlayerRef.value?.duration;
|
2090
|
+
}
|
2091
|
+
set currentTime(value) {
|
2092
|
+
if (this._mediaPlayerRef.value) {
|
2093
|
+
this._mediaPlayerRef.value.currentTime = value;
|
2094
|
+
}
|
2095
|
+
}
|
2096
|
+
get currentTime() {
|
2097
|
+
return this._mediaPlayerRef.value?.currentTime ?? 0;
|
2098
|
+
}
|
2099
|
+
set playbackRate(value) {
|
2100
|
+
if (this._mediaPlayerRef.value) {
|
2101
|
+
this._mediaPlayerRef.value.playbackRate = value;
|
2102
|
+
}
|
2103
|
+
}
|
2104
|
+
get playbackRate() {
|
2105
|
+
return this._mediaPlayerRef.value?.playbackRate ?? 1;
|
2106
|
+
}
|
2107
|
+
set volume(value) {
|
2108
|
+
if (this._mediaPlayerRef.value) {
|
2109
|
+
this._mediaPlayerRef.value.volume = value;
|
2110
|
+
}
|
2111
|
+
}
|
2112
|
+
get volume() {
|
2113
|
+
return this._mediaPlayerRef.value?.volume ?? 1;
|
2114
|
+
}
|
2115
|
+
set muted(value) {
|
2116
|
+
if (this._mediaPlayerRef.value) {
|
2117
|
+
this._mediaPlayerRef.value.muted = value;
|
2118
|
+
}
|
2119
|
+
}
|
2120
|
+
get muted() {
|
2121
|
+
return this._mediaPlayerRef.value?.muted ?? false;
|
2122
|
+
}
|
2123
|
+
get scene() {
|
2124
|
+
return this._mediaPlayerRef.value?.scene ?? null;
|
2125
|
+
}
|
2126
|
+
get scenes() {
|
2127
|
+
return this._mediaPlayerRef.value?.scenes ?? [];
|
2128
|
+
}
|
2129
|
+
get sceneConfig() {
|
2130
|
+
return this._mediaPlayerRef.value?.sceneConfig ?? null;
|
2131
|
+
}
|
2132
|
+
get videoState() {
|
2133
|
+
return this._mediaPlayerRef.value?.videoState;
|
2134
|
+
}
|
2135
|
+
get mediaPlayer() {
|
2136
|
+
return this._mediaPlayerRef.value;
|
2137
|
+
}
|
2138
|
+
play() {
|
2139
|
+
this._mediaPlayerRef.value?.play();
|
2140
|
+
}
|
2141
|
+
pause() {
|
2142
|
+
this._mediaPlayerRef.value?.pause();
|
2143
|
+
}
|
2144
|
+
reset(time = 0, play = false) {
|
2145
|
+
this._mediaPlayerRef.value?.reset(time, play);
|
2146
|
+
}
|
2147
|
+
setScene(index) {
|
2148
|
+
this._mediaPlayerRef.value?.setScene(index);
|
2149
|
+
}
|
2150
|
+
_renderStyles() {
|
2151
|
+
if (!this.aspectRatio) {
|
2152
|
+
return html`
|
2153
|
+
<style>
|
2154
|
+
:host {
|
2155
|
+
width: 100%;
|
2156
|
+
height: 100%;
|
2157
|
+
}
|
2158
|
+
</style>
|
2159
|
+
`;
|
2160
|
+
}
|
2161
|
+
if (typeof this.aspectRatio === "number") {
|
2162
|
+
return html`
|
2163
|
+
<style>
|
2164
|
+
:host {
|
2165
|
+
aspect-ratio: ${this.aspectRatio};
|
2166
|
+
}
|
2167
|
+
</style>
|
2168
|
+
`;
|
2169
|
+
}
|
2170
|
+
return null;
|
2171
|
+
}
|
2172
|
+
render() {
|
2173
|
+
return html`
|
2174
|
+
${this._renderStyles()}
|
2175
|
+
<vmp-media-player
|
2176
|
+
${ref(this._mediaPlayerRef)}
|
2177
|
+
${this.eventController.register()}
|
2178
|
+
?autoplay=${this.autoplay}
|
2179
|
+
?loading=${this.fetching}
|
2180
|
+
.data=${this.vouch}
|
2181
|
+
.template=${this.template}
|
2182
|
+
aspectRatio=${ifDefined(this.aspectRatio)}
|
2183
|
+
preload=${ifDefined(this.preload)}
|
2184
|
+
.controls=${this.controls}
|
2185
|
+
></vmp-media-player>
|
2186
|
+
`;
|
2187
|
+
}
|
2188
|
+
};
|
2189
|
+
PlayerEmbed.styles = [
|
2190
|
+
css`
|
2191
|
+
:host {
|
2192
|
+
display: flex;
|
2193
|
+
}
|
2194
|
+
`
|
2195
|
+
];
|
2196
|
+
__decorateClass$3([
|
2197
|
+
property({ type: Object })
|
2198
|
+
], PlayerEmbed.prototype, "data", 2);
|
2199
|
+
__decorateClass$3([
|
2200
|
+
property({ type: String })
|
2201
|
+
], PlayerEmbed.prototype, "vouchId", 2);
|
2202
|
+
__decorateClass$3([
|
2203
|
+
property({ type: String })
|
2204
|
+
], PlayerEmbed.prototype, "templateId", 2);
|
2205
|
+
__decorateClass$3([
|
2206
|
+
property({ type: Array })
|
2207
|
+
], PlayerEmbed.prototype, "questions", 2);
|
2208
|
+
__decorateClass$3([
|
2209
|
+
property({ type: String })
|
2210
|
+
], PlayerEmbed.prototype, "env", 2);
|
2211
|
+
__decorateClass$3([
|
2212
|
+
property({ type: String })
|
2213
|
+
], PlayerEmbed.prototype, "apiKey", 2);
|
2214
|
+
__decorateClass$3([
|
2215
|
+
property({ type: Boolean })
|
2216
|
+
], PlayerEmbed.prototype, "disableTracking", 2);
|
2217
|
+
__decorateClass$3([
|
2218
|
+
property({ type: String })
|
2219
|
+
], PlayerEmbed.prototype, "trackingSource", 2);
|
2220
|
+
__decorateClass$3([
|
2221
|
+
property({ type: Array })
|
2222
|
+
], PlayerEmbed.prototype, "controls", 2);
|
2223
|
+
__decorateClass$3([
|
2224
|
+
property({ type: String })
|
2225
|
+
], PlayerEmbed.prototype, "preload", 2);
|
2226
|
+
__decorateClass$3([
|
2227
|
+
property({ type: Boolean })
|
2228
|
+
], PlayerEmbed.prototype, "autoplay", 2);
|
2229
|
+
__decorateClass$3([
|
2230
|
+
property({ type: Number })
|
2231
|
+
], PlayerEmbed.prototype, "aspectRatio", 2);
|
2232
|
+
__decorateClass$3([
|
2233
|
+
state()
|
2234
|
+
], PlayerEmbed.prototype, "vouch", 2);
|
2235
|
+
__decorateClass$3([
|
2236
|
+
state()
|
2237
|
+
], PlayerEmbed.prototype, "template", 2);
|
2238
|
+
PlayerEmbed = __decorateClass$3([
|
2239
|
+
customElement("vouch-embed-player")
|
2240
|
+
], PlayerEmbed);
|
2241
|
+
|
2242
|
+
var __defProp$2 = Object.defineProperty;
|
2243
|
+
var __getOwnPropDesc$2 = Object.getOwnPropertyDescriptor;
|
2244
|
+
var __decorateClass$2 = (decorators, target, key, kind) => {
|
2245
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$2(target, key) : target;
|
2246
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
2247
|
+
if (decorator = decorators[i])
|
2248
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
2249
|
+
if (kind && result)
|
2250
|
+
__defProp$2(target, key, result);
|
2251
|
+
return result;
|
2252
|
+
};
|
2253
|
+
let DialogOverlay = class extends LitElement {
|
2254
|
+
constructor() {
|
2255
|
+
super(...arguments);
|
2256
|
+
this.open = false;
|
2257
|
+
this.aspectRatio = 0;
|
2258
|
+
}
|
2259
|
+
render() {
|
2260
|
+
return html`
|
2261
|
+
<div
|
2262
|
+
class=${classMap({
|
2263
|
+
container: true,
|
2264
|
+
hidden: !this.open
|
2265
|
+
})}
|
2266
|
+
>
|
2267
|
+
<div
|
2268
|
+
class="background"
|
2269
|
+
@click=${() => this.dispatchEvent(new CustomEvent("overlay:click", { bubbles: true, composed: true }))}
|
2270
|
+
></div>
|
2271
|
+
<focus-trap>
|
2272
|
+
<div
|
2273
|
+
class=${classMap({
|
2274
|
+
"video-frame": true,
|
2275
|
+
grow: this.aspectRatio === 0
|
2276
|
+
})}
|
2277
|
+
style=${styleMap({
|
2278
|
+
aspectRatio: this.aspectRatio
|
2279
|
+
})}
|
2280
|
+
>
|
2281
|
+
<slot></slot>
|
2282
|
+
<vmp-icon-button
|
2283
|
+
icon="close"
|
2284
|
+
rounded="full"
|
2285
|
+
weight="heavy"
|
2286
|
+
@click=${() => this.dispatchEvent(new CustomEvent("close:click", { bubbles: true, composed: true }))}
|
2287
|
+
></vmp-icon-button>
|
2288
|
+
</div>
|
2289
|
+
</focus-trap>
|
2290
|
+
</div>
|
2291
|
+
`;
|
2292
|
+
}
|
2293
|
+
};
|
2294
|
+
DialogOverlay.styles = [
|
2295
|
+
css`
|
2296
|
+
:host {
|
2297
|
+
--vouch-media-player-border-radius: var(--vu-media-player-border-radius, 12px);
|
2298
|
+
--overlay-background-color: var(--vu-overlay-background-color, black);
|
2299
|
+
--overlay-background-opacity: var(--vu-overlay-background-opacity, 0.4);
|
2300
|
+
|
2301
|
+
--dialog-width: var(--vu-dialog-width, 890px);
|
2302
|
+
--dialog-height: var(--vu-dialog-height, 500px);
|
2303
|
+
}
|
2304
|
+
|
2305
|
+
.container {
|
2306
|
+
position: fixed;
|
2307
|
+
display: flex;
|
2308
|
+
inset: 0;
|
2309
|
+
opacity: 1;
|
2310
|
+
z-index: 2147483647;
|
2311
|
+
align-items: center;
|
2312
|
+
justify-content: center;
|
2313
|
+
transition: opacity 100ms ease-in;
|
2314
|
+
}
|
2315
|
+
|
2316
|
+
.hidden {
|
2317
|
+
opacity: 0;
|
2318
|
+
pointer-events: none;
|
2319
|
+
}
|
2320
|
+
|
2321
|
+
.background {
|
2322
|
+
position: absolute;
|
2323
|
+
inset: 0;
|
2324
|
+
opacity: var(--overlay-background-opacity);
|
2325
|
+
background-color: var(--overlay-background-color);
|
2326
|
+
}
|
2327
|
+
|
2328
|
+
focus-trap {
|
2329
|
+
display: flex;
|
2330
|
+
align-items: center;
|
2331
|
+
justify-content: center;
|
2332
|
+
margin: 40px;
|
2333
|
+
width: var(--dialog-width);
|
2334
|
+
height: var(--dialog-height);
|
2335
|
+
max-width: calc(100% - 80px);
|
2336
|
+
max-height: calc(100% - 80px);
|
2337
|
+
}
|
2338
|
+
|
2339
|
+
.video-frame {
|
2340
|
+
position: relative;
|
2341
|
+
display: flex;
|
2342
|
+
align-items: center;
|
2343
|
+
justify-content: center;
|
2344
|
+
max-width: 100%;
|
2345
|
+
max-height: 100%;
|
2346
|
+
}
|
2347
|
+
|
2348
|
+
.video-frame.grow {
|
2349
|
+
width: 100%;
|
2350
|
+
height: 100%;
|
2351
|
+
}
|
2352
|
+
|
2353
|
+
vmp-icon-button {
|
2354
|
+
position: absolute;
|
2355
|
+
top: 0;
|
2356
|
+
right: 0;
|
2357
|
+
margin: 10px;
|
2358
|
+
}
|
2359
|
+
`
|
2360
|
+
];
|
2361
|
+
__decorateClass$2([
|
2362
|
+
property({ type: Boolean })
|
2363
|
+
], DialogOverlay.prototype, "open", 2);
|
2364
|
+
__decorateClass$2([
|
2365
|
+
property({ type: Number })
|
2366
|
+
], DialogOverlay.prototype, "aspectRatio", 2);
|
2367
|
+
DialogOverlay = __decorateClass$2([
|
2368
|
+
customElement("vouch-embed-dialog-overlay")
|
2369
|
+
], DialogOverlay);
|
2370
|
+
|
2371
|
+
var __defProp$1 = Object.defineProperty;
|
2372
|
+
var __getOwnPropDesc$1 = Object.getOwnPropertyDescriptor;
|
2373
|
+
var __decorateClass$1 = (decorators, target, key, kind) => {
|
2374
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1(target, key) : target;
|
2375
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
2376
|
+
if (decorator = decorators[i])
|
2377
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
2378
|
+
if (kind && result)
|
2379
|
+
__defProp$1(target, key, result);
|
2380
|
+
return result;
|
2381
|
+
};
|
2382
|
+
let DialogPortal = class extends LitElement {
|
2383
|
+
constructor() {
|
2384
|
+
super(...arguments);
|
2385
|
+
this.env = "prod";
|
2386
|
+
this.apiKey = "";
|
2387
|
+
this.disableTracking = false;
|
2388
|
+
this.trackingSource = "embedded_player";
|
2389
|
+
this.preload = "none";
|
2390
|
+
this.disableAutoplay = false;
|
2391
|
+
this.aspectRatio = 0;
|
2392
|
+
this._mediaPlayerRef = createRef();
|
2393
|
+
this.open = false;
|
2394
|
+
this._handleToggle = ({ detail }) => {
|
2395
|
+
if (this.id === detail) {
|
2396
|
+
this.open = !this.open;
|
2397
|
+
if (this.open) {
|
2398
|
+
if (!this.disableAutoplay && this._mediaPlayerRef?.value) {
|
2399
|
+
this._mediaPlayerRef.value.muted = false;
|
2400
|
+
this._mediaPlayerRef.value.play();
|
2401
|
+
}
|
2402
|
+
} else {
|
2403
|
+
this._mediaPlayerRef?.value?.pause();
|
2404
|
+
}
|
2405
|
+
}
|
2406
|
+
};
|
2407
|
+
// We could do the same thing on close and check for the correct ID but it doesn't really matter
|
2408
|
+
this._handleClose = () => {
|
2409
|
+
this.open = false;
|
2410
|
+
this._mediaPlayerRef?.value?.pause();
|
2411
|
+
};
|
2412
|
+
this._handleDocumentKeyUp = (e) => {
|
2413
|
+
if (e.key === "Escape") {
|
2414
|
+
this._handleClose();
|
2415
|
+
}
|
2416
|
+
};
|
2417
|
+
}
|
2418
|
+
connectedCallback() {
|
2419
|
+
super.connectedCallback();
|
2420
|
+
document.addEventListener("dialogembed:click", this._handleToggle);
|
2421
|
+
document.addEventListener("keyup", this._handleDocumentKeyUp);
|
2422
|
+
document.addEventListener("close:click", this._handleClose);
|
2423
|
+
document.addEventListener("overlay:click", this._handleClose);
|
2424
|
+
}
|
2425
|
+
disconnectedCallback() {
|
2426
|
+
super.disconnectedCallback();
|
2427
|
+
document.removeEventListener("dialogembed:click", this._handleToggle);
|
2428
|
+
document.removeEventListener("keyup", this._handleDocumentKeyUp);
|
2429
|
+
document.removeEventListener("close:click", this._handleClose);
|
2430
|
+
document.removeEventListener("overlay:click", this._handleClose);
|
2431
|
+
}
|
2432
|
+
createRenderRoot() {
|
2433
|
+
const newNode = document.createElement("div");
|
2434
|
+
document.body.appendChild(newNode);
|
2435
|
+
return newNode;
|
2436
|
+
}
|
2437
|
+
render() {
|
2438
|
+
return html`
|
2439
|
+
<vouch-embed-dialog-overlay ?open=${this.open} aspectRatio=${this.aspectRatio}>
|
2440
|
+
<vouch-embed-player
|
2441
|
+
${ref(this._mediaPlayerRef)}
|
2442
|
+
style=${styleMap({
|
2443
|
+
maxWidth: "100%",
|
2444
|
+
maxHeight: "100%"
|
2445
|
+
})}
|
2446
|
+
?autoplay=${false}
|
2447
|
+
vouchId=${ifDefined(this.vouchId)}
|
2448
|
+
templateId=${ifDefined(this.templateId)}
|
2449
|
+
.questions=${this.questions}
|
2450
|
+
.controls=${this.controls}
|
2451
|
+
env=${ifDefined(this.env)}
|
2452
|
+
apiKey=${ifDefined(this.apiKey)}
|
2453
|
+
?disableTracking=${this.disableTracking}
|
2454
|
+
trackingSource=${ifDefined(this.trackingSource)}
|
2455
|
+
preload=${ifDefined(this.preload)}
|
2456
|
+
aspectRatio=${this.aspectRatio}
|
2457
|
+
></vouch-embed-player>
|
2458
|
+
</vouch-embed-dialog-overlay>
|
2459
|
+
`;
|
2460
|
+
}
|
2461
|
+
};
|
2462
|
+
__decorateClass$1([
|
2463
|
+
property({ type: String })
|
2464
|
+
], DialogPortal.prototype, "vouchId", 2);
|
2465
|
+
__decorateClass$1([
|
2466
|
+
property({ type: String })
|
2467
|
+
], DialogPortal.prototype, "templateId", 2);
|
2468
|
+
__decorateClass$1([
|
2469
|
+
property({ type: Array })
|
2470
|
+
], DialogPortal.prototype, "questions", 2);
|
2471
|
+
__decorateClass$1([
|
2472
|
+
property({ type: String })
|
2473
|
+
], DialogPortal.prototype, "env", 2);
|
2474
|
+
__decorateClass$1([
|
2475
|
+
property({ type: String })
|
2476
|
+
], DialogPortal.prototype, "apiKey", 2);
|
2477
|
+
__decorateClass$1([
|
2478
|
+
property({ type: Boolean })
|
2479
|
+
], DialogPortal.prototype, "disableTracking", 2);
|
2480
|
+
__decorateClass$1([
|
2481
|
+
property({ type: String })
|
2482
|
+
], DialogPortal.prototype, "trackingSource", 2);
|
2483
|
+
__decorateClass$1([
|
2484
|
+
property({ type: Array })
|
2485
|
+
], DialogPortal.prototype, "controls", 2);
|
2486
|
+
__decorateClass$1([
|
2487
|
+
property({ type: String })
|
2488
|
+
], DialogPortal.prototype, "preload", 2);
|
2489
|
+
__decorateClass$1([
|
2490
|
+
property({ type: Boolean })
|
2491
|
+
], DialogPortal.prototype, "disableAutoplay", 2);
|
2492
|
+
__decorateClass$1([
|
2493
|
+
property({ type: Number })
|
2494
|
+
], DialogPortal.prototype, "aspectRatio", 2);
|
2495
|
+
__decorateClass$1([
|
2496
|
+
state()
|
2497
|
+
], DialogPortal.prototype, "open", 2);
|
2498
|
+
DialogPortal = __decorateClass$1([
|
2499
|
+
customElement("vouch-embed-dialog-portal")
|
2500
|
+
], DialogPortal);
|
2501
|
+
|
2502
|
+
var __defProp = Object.defineProperty;
|
2503
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
2504
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
2505
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
2506
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
2507
|
+
if (decorator = decorators[i])
|
2508
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
2509
|
+
if (kind && result)
|
2510
|
+
__defProp(target, key, result);
|
2511
|
+
return result;
|
2512
|
+
};
|
2513
|
+
let DialogEmbed = class extends LitElement {
|
2514
|
+
constructor() {
|
2515
|
+
super(...arguments);
|
2516
|
+
this.env = "prod";
|
2517
|
+
this.apiKey = "";
|
2518
|
+
this.disableTracking = false;
|
2519
|
+
this.trackingSource = "embedded_player";
|
2520
|
+
this.preload = "none";
|
2521
|
+
this.disableAutoplay = false;
|
2522
|
+
this.aspectRatio = 0;
|
2523
|
+
this._id = v4();
|
2524
|
+
this._handleRootClick = () => {
|
2525
|
+
this.dispatchEvent(new CustomEvent("dialogembed:click", { detail: this._id, bubbles: true, composed: true }));
|
2526
|
+
};
|
2527
|
+
}
|
2528
|
+
connectedCallback() {
|
2529
|
+
super.connectedCallback();
|
2530
|
+
this.addEventListener("click", this._handleRootClick);
|
2531
|
+
}
|
2532
|
+
disconnectedCallback() {
|
2533
|
+
super.disconnectedCallback();
|
2534
|
+
this.removeEventListener("click", this._handleRootClick);
|
2535
|
+
}
|
2536
|
+
render() {
|
2537
|
+
return html`
|
2538
|
+
<slot>
|
2539
|
+
<vmp-button size="large">Play</vmp-button>
|
2540
|
+
</slot>
|
2541
|
+
<vouch-embed-dialog-portal
|
2542
|
+
id=${this._id}
|
2543
|
+
?autoplay=${false}
|
2544
|
+
vouchId=${ifDefined(this.vouchId)}
|
2545
|
+
templateId=${ifDefined(this.templateId)}
|
2546
|
+
.questions=${this.questions}
|
2547
|
+
.controls=${this.controls}
|
2548
|
+
env=${ifDefined(this.env)}
|
2549
|
+
apiKey=${ifDefined(this.apiKey)}
|
2550
|
+
?disableTracking=${this.disableTracking}
|
2551
|
+
trackingSource=${ifDefined(this.trackingSource)}
|
2552
|
+
preload=${ifDefined(this.preload)}
|
2553
|
+
aspectRatio=${this.aspectRatio}
|
2554
|
+
></vouch-embed-dialog-portal>
|
2555
|
+
`;
|
2556
|
+
}
|
2557
|
+
};
|
2558
|
+
DialogEmbed.styles = [
|
2559
|
+
css`
|
2560
|
+
:host {
|
2561
|
+
--vu-button-padding: 10px 20px;
|
2562
|
+
--vu-button-background: #287179;
|
2563
|
+
--vu-button-background-hover: #4faab2;
|
2564
|
+
|
2565
|
+
display: flex;
|
2566
|
+
width: fit-content;
|
2567
|
+
height: fit-content;
|
2568
|
+
}
|
2569
|
+
`
|
2570
|
+
];
|
2571
|
+
__decorateClass([
|
2572
|
+
property({ type: String })
|
2573
|
+
], DialogEmbed.prototype, "vouchId", 2);
|
2574
|
+
__decorateClass([
|
2575
|
+
property({ type: String })
|
2576
|
+
], DialogEmbed.prototype, "templateId", 2);
|
2577
|
+
__decorateClass([
|
2578
|
+
property({ type: Array })
|
2579
|
+
], DialogEmbed.prototype, "questions", 2);
|
2580
|
+
__decorateClass([
|
2581
|
+
property({ type: String })
|
2582
|
+
], DialogEmbed.prototype, "env", 2);
|
2583
|
+
__decorateClass([
|
2584
|
+
property({ type: String })
|
2585
|
+
], DialogEmbed.prototype, "apiKey", 2);
|
2586
|
+
__decorateClass([
|
2587
|
+
property({ type: Boolean })
|
2588
|
+
], DialogEmbed.prototype, "disableTracking", 2);
|
2589
|
+
__decorateClass([
|
2590
|
+
property({ type: String })
|
2591
|
+
], DialogEmbed.prototype, "trackingSource", 2);
|
2592
|
+
__decorateClass([
|
2593
|
+
property({ type: Array })
|
2594
|
+
], DialogEmbed.prototype, "controls", 2);
|
2595
|
+
__decorateClass([
|
2596
|
+
property({ type: String })
|
2597
|
+
], DialogEmbed.prototype, "preload", 2);
|
2598
|
+
__decorateClass([
|
2599
|
+
property({ type: Boolean })
|
2600
|
+
], DialogEmbed.prototype, "disableAutoplay", 2);
|
2601
|
+
__decorateClass([
|
2602
|
+
property({ type: Number })
|
2603
|
+
], DialogEmbed.prototype, "aspectRatio", 2);
|
2604
|
+
DialogEmbed = __decorateClass([
|
2605
|
+
customElement("vouch-embed-dialog")
|
2606
|
+
], DialogEmbed);
|
2607
|
+
|
2608
|
+
export { DialogEmbed as D, PlayerEmbed as P, commonjsGlobal as c, getDefaultExportFromCjs as g };
|
2609
|
+
//# sourceMappingURL=index-5G8orrrP.js.map
|