@5even7/dlc-ui 0.2.17 → 0.2.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +147 -123
- package/LICENSE +21 -21
- package/README.md +338 -316
- package/THIRD_PARTY_NOTICES.md +57 -0
- package/dist/avatar-creator.cjs +7221 -0
- package/dist/avatar-creator.mjs +9278 -0
- package/dist/capsule.cjs +189 -68
- package/dist/capsule.mjs +1208 -1103
- package/dist/color.cjs +186 -67
- package/dist/color.mjs +1157 -1052
- package/dist/emo.cjs +1439 -410
- package/dist/emo.mjs +1405 -496
- package/dist/index.cjs +7808 -310
- package/dist/index.mjs +13435 -3802
- package/dist/index.umd.js +7786 -288
- package/dist/index.umd.min.js +1 -1
- package/dist/progress.cjs +195 -76
- package/dist/progress.mjs +2293 -2188
- package/dist/vue2.cjs +7827 -376
- package/dist/vue2.mjs +13841 -4267
- package/dist/vue3.cjs +7827 -376
- package/dist/vue3.mjs +13841 -4267
- package/package.json +146 -135
- package/styles/avatar-creator.css +13 -0
- package/styles/base.css +32 -32
- package/styles/color.css +18 -18
- package/styles/emo.css +89 -33
- package/styles/progress.css +96 -96
- package/styles/theme.css +1 -0
- package/types/avatar-creator.d.ts +124 -0
- package/types/capsule.d.ts +15 -15
- package/types/color.d.ts +15 -15
- package/types/emo.d.ts +37 -14
- package/types/index.d.ts +581 -417
- package/types/progress.d.ts +16 -16
- package/types/vue2.d.ts +11 -10
- package/types/vue3.d.ts +169 -144
package/dist/emo.cjs
CHANGED
|
@@ -161,9 +161,9 @@ function _unsupportedIterableToArray(r, a) {
|
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
163
|
|
|
164
|
-
/**
|
|
165
|
-
* Tiny event emitter. Accepts any event name so the API stays open for
|
|
166
|
-
* future events (hover, click, custom) without breaking changes.
|
|
164
|
+
/**
|
|
165
|
+
* Tiny event emitter. Accepts any event name so the API stays open for
|
|
166
|
+
* future events (hover, click, custom) without breaking changes.
|
|
167
167
|
*/
|
|
168
168
|
function createEmitter() {
|
|
169
169
|
// Plain object storage (no Map/Set) so the legacy build has no API
|
|
@@ -213,9 +213,9 @@ function createEmitter() {
|
|
|
213
213
|
|
|
214
214
|
var UNIT_PATTERN = /^[\d.]+(?:px|%|vw|vh|vmin|vmax|em|rem)$/;
|
|
215
215
|
|
|
216
|
-
/**
|
|
217
|
-
* Normalize a size option to a CSS length string.
|
|
218
|
-
* Accepts numbers (treated as px) or strings with px/%, vw/vh/vmin/vmax, em/rem.
|
|
216
|
+
/**
|
|
217
|
+
* Normalize a size option to a CSS length string.
|
|
218
|
+
* Accepts numbers (treated as px) or strings with px/%, vw/vh/vmin/vmax, em/rem.
|
|
219
219
|
*/
|
|
220
220
|
function parseSize(value) {
|
|
221
221
|
if (typeof value === 'number') {
|
|
@@ -232,217 +232,6 @@ function parseSize(value) {
|
|
|
232
232
|
return trimmed;
|
|
233
233
|
}
|
|
234
234
|
|
|
235
|
-
/**
|
|
236
|
-
* Color helpers. `normalizeColor` converts any supported CSS color
|
|
237
|
-
* (hex / named / rgb() / rgba()) into a 6-digit hex string, so renderers can
|
|
238
|
-
* keep working with #rrggbb only. rgba() alpha is intentionally dropped:
|
|
239
|
-
* the WebGL shader has no per-color alpha channel, and the component is
|
|
240
|
-
* opaque by design — use component-level `opacity` for transparency.
|
|
241
|
-
*/
|
|
242
|
-
|
|
243
|
-
var NAMED_COLORS = {
|
|
244
|
-
aliceblue: '#f0f8ff',
|
|
245
|
-
antiquewhite: '#faebd7',
|
|
246
|
-
aqua: '#00ffff',
|
|
247
|
-
aquamarine: '#7fffd4',
|
|
248
|
-
azure: '#f0ffff',
|
|
249
|
-
beige: '#f5f5dc',
|
|
250
|
-
bisque: '#ffe4c4',
|
|
251
|
-
black: '#000000',
|
|
252
|
-
blanchedalmond: '#ffebcd',
|
|
253
|
-
blue: '#0000ff',
|
|
254
|
-
blueviolet: '#8a2be2',
|
|
255
|
-
brown: '#a52a2a',
|
|
256
|
-
burlywood: '#deb887',
|
|
257
|
-
cadetblue: '#5f9ea0',
|
|
258
|
-
chartreuse: '#7fff00',
|
|
259
|
-
chocolate: '#d2691e',
|
|
260
|
-
coral: '#ff7f50',
|
|
261
|
-
cornflowerblue: '#6495ed',
|
|
262
|
-
cornsilk: '#fff8dc',
|
|
263
|
-
crimson: '#dc143c',
|
|
264
|
-
cyan: '#00ffff',
|
|
265
|
-
darkblue: '#00008b',
|
|
266
|
-
darkcyan: '#008b8b',
|
|
267
|
-
darkgoldenrod: '#b8860b',
|
|
268
|
-
darkgray: '#a9a9a9',
|
|
269
|
-
darkgreen: '#006400',
|
|
270
|
-
darkgrey: '#a9a9a9',
|
|
271
|
-
darkkhaki: '#bdb76b',
|
|
272
|
-
darkmagenta: '#8b008b',
|
|
273
|
-
darkolivegreen: '#556b2f',
|
|
274
|
-
darkorange: '#ff8c00',
|
|
275
|
-
darkorchid: '#9932cc',
|
|
276
|
-
darkred: '#8b0000',
|
|
277
|
-
darksalmon: '#e9967a',
|
|
278
|
-
darkseagreen: '#8fbc8f',
|
|
279
|
-
darkslateblue: '#483d8b',
|
|
280
|
-
darkslategray: '#2f4f4f',
|
|
281
|
-
darkslategrey: '#2f4f4f',
|
|
282
|
-
darkturquoise: '#00ced1',
|
|
283
|
-
darkviolet: '#9400d3',
|
|
284
|
-
deeppink: '#ff1493',
|
|
285
|
-
deepskyblue: '#00bfff',
|
|
286
|
-
dimgray: '#696969',
|
|
287
|
-
dimgrey: '#696969',
|
|
288
|
-
dodgerblue: '#1e90ff',
|
|
289
|
-
firebrick: '#b22222',
|
|
290
|
-
floralwhite: '#fffaf0',
|
|
291
|
-
forestgreen: '#228b22',
|
|
292
|
-
fuchsia: '#ff00ff',
|
|
293
|
-
gainsboro: '#dcdcdc',
|
|
294
|
-
ghostwhite: '#f8f8ff',
|
|
295
|
-
gold: '#ffd700',
|
|
296
|
-
goldenrod: '#daa520',
|
|
297
|
-
gray: '#808080',
|
|
298
|
-
green: '#008000',
|
|
299
|
-
greenyellow: '#adff2f',
|
|
300
|
-
grey: '#808080',
|
|
301
|
-
honeydew: '#f0fff0',
|
|
302
|
-
hotpink: '#ff69b4',
|
|
303
|
-
indianred: '#cd5c5c',
|
|
304
|
-
indigo: '#4b0082',
|
|
305
|
-
ivory: '#fffff0',
|
|
306
|
-
khaki: '#f0e68c',
|
|
307
|
-
lavender: '#e6e6fa',
|
|
308
|
-
lavenderblush: '#fff0f5',
|
|
309
|
-
lawngreen: '#7cfc00',
|
|
310
|
-
lemonchiffon: '#fffacd',
|
|
311
|
-
lightblue: '#add8e6',
|
|
312
|
-
lightcoral: '#f08080',
|
|
313
|
-
lightcyan: '#e0ffff',
|
|
314
|
-
lightgoldenrodyellow: '#fafad2',
|
|
315
|
-
lightgray: '#d3d3d3',
|
|
316
|
-
lightgreen: '#90ee90',
|
|
317
|
-
lightgrey: '#d3d3d3',
|
|
318
|
-
lightpink: '#ffb6c1',
|
|
319
|
-
lightsalmon: '#ffa07a',
|
|
320
|
-
lightseagreen: '#20b2aa',
|
|
321
|
-
lightskyblue: '#87cefa',
|
|
322
|
-
lightslategray: '#778899',
|
|
323
|
-
lightslategrey: '#778899',
|
|
324
|
-
lightsteelblue: '#b0c4de',
|
|
325
|
-
lightyellow: '#ffffe0',
|
|
326
|
-
lime: '#00ff00',
|
|
327
|
-
limegreen: '#32cd32',
|
|
328
|
-
linen: '#faf0e6',
|
|
329
|
-
magenta: '#ff00ff',
|
|
330
|
-
maroon: '#800000',
|
|
331
|
-
mediumaquamarine: '#66cdaa',
|
|
332
|
-
mediumblue: '#0000cd',
|
|
333
|
-
mediumorchid: '#ba55d3',
|
|
334
|
-
mediumpurple: '#9370db',
|
|
335
|
-
mediumseagreen: '#3cb371',
|
|
336
|
-
mediumslateblue: '#7b68ee',
|
|
337
|
-
mediumspringgreen: '#00fa9a',
|
|
338
|
-
mediumturquoise: '#48d1cc',
|
|
339
|
-
mediumvioletred: '#c71585',
|
|
340
|
-
midnightblue: '#191970',
|
|
341
|
-
mintcream: '#f5fffa',
|
|
342
|
-
mistyrose: '#ffe4e1',
|
|
343
|
-
moccasin: '#ffe4b5',
|
|
344
|
-
navajowhite: '#ffdead',
|
|
345
|
-
navy: '#000080',
|
|
346
|
-
oldlace: '#fdf5e6',
|
|
347
|
-
olive: '#808000',
|
|
348
|
-
olivedrab: '#6b8e23',
|
|
349
|
-
orange: '#ffa500',
|
|
350
|
-
orangered: '#ff4500',
|
|
351
|
-
orchid: '#da70d6',
|
|
352
|
-
palegoldenrod: '#eee8aa',
|
|
353
|
-
palegreen: '#98fb98',
|
|
354
|
-
paleturquoise: '#afeeee',
|
|
355
|
-
palevioletred: '#db7093',
|
|
356
|
-
papayawhip: '#ffefd5',
|
|
357
|
-
peachpuff: '#ffdab9',
|
|
358
|
-
peru: '#cd853f',
|
|
359
|
-
pink: '#ffc0cb',
|
|
360
|
-
plum: '#dda0dd',
|
|
361
|
-
powderblue: '#b0e0e6',
|
|
362
|
-
purple: '#800080',
|
|
363
|
-
rebeccapurple: '#663399',
|
|
364
|
-
red: '#ff0000',
|
|
365
|
-
rosybrown: '#bc8f8f',
|
|
366
|
-
royalblue: '#4169e1',
|
|
367
|
-
saddlebrown: '#8b4513',
|
|
368
|
-
salmon: '#fa8072',
|
|
369
|
-
sandybrown: '#f4a460',
|
|
370
|
-
seagreen: '#2e8b57',
|
|
371
|
-
seashell: '#fff5ee',
|
|
372
|
-
sienna: '#a0522d',
|
|
373
|
-
silver: '#c0c0c0',
|
|
374
|
-
skyblue: '#87ceeb',
|
|
375
|
-
slateblue: '#6a5acd',
|
|
376
|
-
slategray: '#708090',
|
|
377
|
-
slategrey: '#708090',
|
|
378
|
-
snow: '#fffafa',
|
|
379
|
-
springgreen: '#00ff7f',
|
|
380
|
-
steelblue: '#4682b4',
|
|
381
|
-
tan: '#d2b48c',
|
|
382
|
-
teal: '#008080',
|
|
383
|
-
thistle: '#d8bfd8',
|
|
384
|
-
tomato: '#ff6347',
|
|
385
|
-
turquoise: '#40e0d0',
|
|
386
|
-
violet: '#ee82ee',
|
|
387
|
-
wheat: '#f5deb3',
|
|
388
|
-
white: '#ffffff',
|
|
389
|
-
whitesmoke: '#f5f5f5',
|
|
390
|
-
yellow: '#ffff00',
|
|
391
|
-
yellowgreen: '#9acd32'
|
|
392
|
-
};
|
|
393
|
-
function clampChannel(value) {
|
|
394
|
-
return Math.min(255, Math.max(0, Math.round(value)));
|
|
395
|
-
}
|
|
396
|
-
function normalizeRgbArgs(args) {
|
|
397
|
-
var parts = args.split(/[,\s/]+/).filter(Boolean);
|
|
398
|
-
if (parts.length < 3) return null;
|
|
399
|
-
var to255 = function to255(value) {
|
|
400
|
-
if (typeof value !== 'string' || !value) return null;
|
|
401
|
-
if (value.charAt(value.length - 1) === '%') return clampChannel(parseFloat(value) / 100 * 255);
|
|
402
|
-
var number = Number(value);
|
|
403
|
-
return Number.isFinite(number) ? clampChannel(number) : null;
|
|
404
|
-
};
|
|
405
|
-
var red = to255(parts[0]);
|
|
406
|
-
var green = to255(parts[1]);
|
|
407
|
-
var blue = to255(parts[2]);
|
|
408
|
-
if (red === null || green === null || blue === null) return null;
|
|
409
|
-
var hex = function hex(n) {
|
|
410
|
-
var text = n.toString(16);
|
|
411
|
-
return text.length === 1 ? "0".concat(text) : text;
|
|
412
|
-
};
|
|
413
|
-
return "#".concat(hex(red)).concat(hex(green)).concat(hex(blue));
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
/**
|
|
417
|
-
* Convert any supported CSS color into `#rrggbb`. Returns null when the
|
|
418
|
-
* value cannot be parsed. Supports: #rgb / #rrggbb (case-insensitive),
|
|
419
|
-
* CSS named colors, rgb() / rgba() with comma or modern space syntax,
|
|
420
|
-
* including percentages. Alpha in rgba() is ignored.
|
|
421
|
-
*/
|
|
422
|
-
function normalizeColor(value) {
|
|
423
|
-
if (typeof value !== 'string') return null;
|
|
424
|
-
var input = value.trim();
|
|
425
|
-
if (!input) return null;
|
|
426
|
-
var lower = input.toLowerCase();
|
|
427
|
-
if (NAMED_COLORS[lower]) return NAMED_COLORS[lower];
|
|
428
|
-
if (/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(input)) {
|
|
429
|
-
var hex = input.slice(1).toLowerCase();
|
|
430
|
-
if (hex.length === 3) return "#".concat(hex.split('').map(function (c) {
|
|
431
|
-
return c + c;
|
|
432
|
-
}).join(''));
|
|
433
|
-
return "#".concat(hex);
|
|
434
|
-
}
|
|
435
|
-
var match = input.match(/^rgba?\((.*)\)$/i);
|
|
436
|
-
if (match) return normalizeRgbArgs(match[1]);
|
|
437
|
-
return null;
|
|
438
|
-
}
|
|
439
|
-
function hexToRgb01(color) {
|
|
440
|
-
var hex = normalizeColor(color);
|
|
441
|
-
if (!hex) return [0, 0, 0];
|
|
442
|
-
var value = Number.parseInt(hex.slice(1), 16);
|
|
443
|
-
return [(value >> 16 & 255) / 255, (value >> 8 & 255) / 255, (value & 255) / 255];
|
|
444
|
-
}
|
|
445
|
-
|
|
446
235
|
function createReducedMotionPreference(enabled, onChange) {
|
|
447
236
|
var query = enabled && typeof matchMedia !== 'undefined' ? matchMedia('(prefers-reduced-motion: reduce)') : null;
|
|
448
237
|
var notify = function notify() {
|
|
@@ -26572,6 +26361,240 @@ var MIAO_ANIMATIONS = {
|
|
|
26572
26361
|
}
|
|
26573
26362
|
};
|
|
26574
26363
|
|
|
26364
|
+
// Generated from zhulin025/LaoA-GrokBot (https://github.com/zhulin025/LaoA-GrokBot), MIT License.
|
|
26365
|
+
// See THIRD_PARTY_NOTICES.md. Do not edit by hand.
|
|
26366
|
+
|
|
26367
|
+
var GROK_EXPRESSIONS = [[[[130.36, 45.98], [132.71, 46.19], [134.98, 46.81], [137.11, 47.83], [138.97, 49.28], [140.47, 51.09], [141.68, 53.12], [142.73, 55.23], [143.76, 57.36], [144.78, 59.49], [145.79, 61.62], [146.79, 63.76], [147.76, 65.91], [148.71, 68.07], [149.63, 70.25], [150.52, 72.43], [151.37, 74.63], [151.99, 76.91], [152.1, 79.26], [151.64, 81.57], [150.59, 83.68], [149.04, 85.45], [147.1, 86.78], [144.9, 87.62], [142.56, 87.93], [140.22, 87.71], [137.98, 86.99], [135.93, 85.82], [134.17, 84.24], [132.78, 82.34], [131.69, 80.25], [130.77, 78.08], [129.87, 75.89], [128.94, 73.72], [128, 71.56], [127.03, 69.4], [126.05, 67.26], [125.05, 65.12], [124.03, 62.99], [122.93, 60.9], [121.87, 58.79], [121.03, 56.59], [120.72, 54.26], [121.1, 51.93], [122.15, 49.83], [123.75, 48.1], [125.76, 46.89], [128.01, 46.19]], [[176.61, 37.08], [178.72, 37.59], [180.7, 38.48], [182.52, 39.65], [184.2, 41.03], [185.71, 42.59], [187.03, 44.31], [188.2, 46.14], [189.26, 48.03], [190.27, 49.96], [191.26, 51.89], [192.23, 53.84], [193.16, 55.8], [194.05, 57.78], [194.92, 59.77], [195.74, 61.78], [196.53, 63.8], [197.27, 65.84], [197.97, 67.9], [198.47, 70.01], [198.63, 72.18], [198.4, 74.33], [197.58, 76.33], [195.95, 77.72], [193.83, 78.08], [191.71, 77.65], [189.76, 76.69], [188.03, 75.38], [186.53, 73.82], [185.28, 72.05], [184.25, 70.13], [183.4, 68.14], [182.63, 66.11], [181.87, 64.07], [181.07, 62.05], [180.25, 60.04], [179.39, 58.05], [178.49, 56.07], [177.57, 54.1], [176.61, 52.15], [175.62, 50.22], [174.59, 48.31], [173.53, 46.41], [172.54, 44.48], [171.86, 42.42], [171.76, 40.26], [172.62, 38.3], [174.45, 37.19]]], [[[86.14, 124.79], [89.16, 124.92], [92.06, 125.76], [94.68, 127.27], [96.86, 129.36], [98.48, 131.92], [99.51, 134.76], [100.12, 137.73], [100.56, 140.72], [101.01, 143.72], [101.52, 146.71], [102.06, 149.69], [102.62, 152.67], [103.2, 155.64], [103.81, 158.61], [104.44, 161.57], [105.11, 164.52], [105.81, 167.47], [106.49, 170.42], [106.72, 173.44], [106.01, 176.37], [104.37, 178.9], [102.03, 180.81], [99.26, 181.99], [96.27, 182.46], [93.25, 182.25], [90.34, 181.43], [87.65, 180.04], [85.32, 178.11], [83.51, 175.7], [82.37, 172.9], [81.66, 169.96], [80.98, 167], [80.32, 164.05], [79.69, 161.08], [79.08, 158.12], [78.5, 155.14], [77.94, 152.16], [77.4, 149.18], [76.89, 146.2], [76.4, 143.21], [75.93, 140.21], [75.56, 137.21], [75.7, 134.19], [76.6, 131.3], [78.22, 128.76], [80.47, 126.74], [83.18, 125.4]], [[147.23, 112.87], [150.24, 113.13], [153.07, 114.19], [155.53, 115.94], [157.46, 118.26], [158.73, 121.01], [159.53, 123.93], [160.21, 126.88], [160.88, 129.84], [161.52, 132.8], [162.15, 135.76], [162.74, 138.73], [163.32, 141.71], [163.87, 144.69], [164.39, 147.67], [164.9, 150.66], [165.39, 153.65], [165.8, 156.65], [165.76, 159.67], [164.98, 162.59], [163.56, 165.26], [161.61, 167.58], [159.23, 169.45], [156.52, 170.77], [153.57, 171.46], [150.55, 171.4], [147.67, 170.52], [145.19, 168.79], [143.45, 166.33], [142.57, 163.44], [142.08, 160.45], [141.61, 157.46], [141.11, 154.47], [140.59, 151.48], [140.04, 148.5], [139.47, 145.53], [138.87, 142.56], [138.25, 139.59], [137.6, 136.63], [136.94, 133.68], [136.25, 130.72], [135.59, 127.77], [135.47, 124.75], [136.07, 121.78], [137.34, 119.04], [139.19, 116.65], [141.53, 114.74], [144.26, 113.44]]], [[[104.84, 104.08], [109.39, 104.89], [113.63, 106.73], [117.32, 109.5], [120.25, 113.08], [122.22, 117.25], [123.15, 121.77], [122.92, 126.39], [121.86, 130.89], [120.61, 135.35], [119.37, 139.81], [118.15, 144.27], [116.94, 148.74], [115.74, 153.21], [114.56, 157.69], [113.39, 162.17], [112.24, 166.65], [111.13, 171.15], [110.04, 175.65], [108.89, 180.13], [106.98, 184.33], [103.8, 187.67], [99.75, 189.87], [95.25, 190.93], [90.63, 190.93], [86.11, 189.97], [81.86, 188.16], [78.05, 185.54], [74.89, 182.18], [72.62, 178.16], [71.54, 173.67], [71.94, 169.08], [73.01, 164.57], [74.13, 160.08], [75.26, 155.59], [76.42, 151.11], [77.59, 146.63], [78.77, 142.15], [79.97, 137.68], [81.18, 133.22], [82.41, 128.75], [83.65, 124.29], [84.87, 119.83], [86.33, 115.43], [88.67, 111.46], [91.9, 108.15], [95.83, 105.72], [100.23, 104.35]], [[174.26, 115.55], [178.59, 116.54], [182.37, 118.86], [185.31, 122.2], [187.23, 126.21], [188.12, 130.57], [188.06, 135.02], [187.52, 139.44], [186.86, 143.85], [186.11, 148.25], [185.25, 152.62], [184.3, 156.98], [183.24, 161.31], [182.07, 165.61], [180.79, 169.88], [179.39, 174.12], [177.89, 178.31], [176.27, 182.47], [174.47, 186.55], [172.17, 190.35], [169.21, 193.68], [165.73, 196.46], [161.84, 198.64], [157.66, 200.16], [153.27, 200.91], [148.83, 200.69], [144.65, 199.19], [141.47, 196.14], [140.18, 191.91], [140.82, 187.53], [142.46, 183.38], [144.16, 179.26], [145.73, 175.09], [147.18, 170.87], [148.51, 166.62], [149.73, 162.33], [150.84, 158.01], [151.84, 153.67], [152.74, 149.3], [153.54, 144.91], [154.24, 140.51], [154.85, 136.1], [155.58, 131.7], [156.93, 127.46], [159.15, 123.6], [162.12, 120.29], [165.73, 117.68], [169.84, 116]]], [[[44.72, 103.35], [47.95, 103.93], [51.04, 105.05], [53.93, 106.62], [56.58, 108.57], [58.97, 110.83], [61.09, 113.35], [62.93, 116.07], [64.5, 118.97], [65.79, 121.99], [66.8, 125.13], [67.52, 128.34], [67.94, 131.6], [68.08, 134.89], [67.9, 138.17], [67.4, 141.42], [66.56, 144.6], [65.33, 147.66], [63.71, 150.52], [61.69, 153.11], [59.3, 155.36], [56.54, 157.16], [53.51, 158.42], [50.29, 159.07], [47, 159.09], [43.76, 158.5], [40.67, 157.39], [37.78, 155.82], [35.13, 153.87], [32.75, 151.6], [30.63, 149.09], [28.78, 146.36], [27.21, 143.47], [25.92, 140.44], [24.92, 137.31], [24.2, 134.1], [23.77, 130.84], [23.64, 127.55], [23.81, 124.27], [24.31, 121.01], [25.16, 117.84], [26.38, 114.78], [28, 111.92], [30.02, 109.33], [32.42, 107.08], [35.17, 105.28], [38.21, 104.02], [41.43, 103.37]], [[114.62, 83.64], [118.31, 83.88], [121.94, 84.6], [125.44, 85.77], [128.77, 87.38], [131.86, 89.4], [134.67, 91.81], [137.13, 94.56], [139.2, 97.62], [140.85, 100.93], [142.05, 104.42], [142.79, 108.05], [143.05, 111.73], [142.83, 115.42], [142.13, 119.05], [140.95, 122.55], [139.34, 125.88], [137.3, 128.96], [134.88, 131.75], [132.11, 134.2], [129.05, 136.27], [125.75, 137.93], [122.25, 139.13], [118.63, 139.86], [114.94, 140.1], [111.25, 139.86], [107.63, 139.14], [104.12, 137.97], [100.8, 136.36], [97.7, 134.34], [94.9, 131.93], [92.44, 129.18], [90.36, 126.12], [88.72, 122.81], [87.51, 119.31], [86.78, 115.69], [86.52, 112.01], [86.74, 108.32], [87.44, 104.69], [88.61, 101.18], [90.23, 97.86], [92.27, 94.78], [94.69, 91.99], [97.45, 89.54], [100.51, 87.47], [103.82, 85.81], [107.31, 84.61], [110.94, 83.88]]], [[[90.44, 99.25], [93.11, 99.26], [95.74, 99.79], [98.37, 100.3], [101, 100.82], [103.64, 101.33], [106.27, 101.85], [108.9, 102.37], [111.53, 102.89], [114.16, 103.41], [116.79, 103.94], [119.42, 104.47], [122.06, 105], [124.69, 105.53], [127.32, 106.06], [129.94, 106.6], [132.57, 107.14], [135.2, 107.68], [137.65, 108.73], [139.5, 110.65], [140.44, 113.14], [140.36, 115.81], [139.35, 118.28], [137.48, 120.18], [135, 121.14], [132.32, 121.11], [129.7, 120.56], [127.08, 120], [124.45, 119.46], [121.82, 118.93], [119.19, 118.4], [116.56, 117.87], [113.93, 117.35], [111.29, 116.83], [108.66, 116.32], [106.02, 115.82], [103.39, 115.31], [100.76, 114.79], [98.12, 114.28], [95.49, 113.75], [92.86, 113.22], [90.23, 112.68], [87.77, 111.66], [85.93, 109.74], [85.01, 107.24], [85.06, 104.57], [86.07, 102.1], [87.96, 100.22]], [[156.6, 112.56], [158.91, 112.66], [161.18, 113.15], [163.45, 113.64], [165.72, 114.13], [167.99, 114.62], [170.26, 115.12], [172.53, 115.62], [174.8, 116.12], [177.07, 116.62], [179.34, 117.13], [181.6, 117.64], [183.87, 118.15], [186.14, 118.67], [188.4, 119.18], [190.67, 119.7], [192.94, 120.2], [195.12, 120.96], [196.7, 122.63], [197.45, 124.82], [197.53, 127.14], [197.07, 129.41], [196.08, 131.51], [194.49, 133.18], [192.33, 133.97], [190.04, 133.68], [187.79, 133.09], [185.52, 132.57], [183.26, 132.05], [180.99, 131.54], [178.72, 131.03], [176.45, 130.53], [174.18, 130.03], [171.91, 129.54], [169.64, 129.05], [167.37, 128.56], [165.1, 128.07], [162.83, 127.58], [160.56, 127.08], [158.29, 126.57], [156.02, 126.05], [153.9, 125.14], [152.26, 123.51], [151.32, 121.4], [151.08, 119.1], [151.53, 116.82], [152.65, 114.8], [154.41, 113.31]]], [[[79.94, 130.44], [83.08, 130.57], [86.11, 131.41], [88.89, 132.89], [91.27, 134.94], [93.15, 137.46], [94.39, 140.35], [95.11, 143.42], [95.65, 146.52], [96.2, 149.62], [96.78, 152.72], [97.39, 155.81], [98.04, 158.89], [98.72, 161.97], [99.43, 165.04], [100.18, 168.1], [100.97, 171.15], [101.81, 174.18], [102.64, 177.22], [103.01, 180.34], [102.35, 183.4], [100.66, 186.04], [98.19, 187.98], [95.28, 189.16], [92.17, 189.6], [89.03, 189.37], [85.99, 188.56], [83.16, 187.2], [80.63, 185.33], [78.55, 182.97], [77.05, 180.21], [76.1, 177.21], [75.28, 174.17], [74.5, 171.11], [73.74, 168.06], [73.02, 164.99], [72.33, 161.92], [71.68, 158.83], [71.06, 155.75], [70.47, 152.65], [69.91, 149.55], [69.37, 146.45], [68.97, 143.32], [69.12, 140.18], [70.04, 137.18], [71.7, 134.51], [74.03, 132.41], [76.86, 131.04]], [[168.95, 136.28], [171.31, 136.97], [172.99, 138.76], [173.66, 141.13], [173.36, 143.58], [172.24, 145.79], [170.45, 147.49], [168.22, 148.58], [165.89, 149.43], [163.57, 150.31], [161.24, 151.18], [158.9, 152.02], [156.56, 152.85], [154.21, 153.65], [151.85, 154.44], [149.48, 155.2], [147.11, 155.94], [144.73, 156.65], [142.34, 157.34], [139.95, 158.01], [137.55, 158.66], [135.14, 159.27], [132.73, 159.86], [130.31, 160.43], [127.84, 160.54], [125.53, 159.69], [123.77, 157.96], [122.89, 155.66], [123.09, 153.21], [124.36, 151.09], [126.34, 149.61], [128.69, 148.83], [131.1, 148.24], [133.51, 147.62], [135.91, 146.98], [138.31, 146.32], [140.7, 145.65], [143.08, 144.95], [145.46, 144.23], [147.83, 143.49], [150.2, 142.73], [152.56, 141.95], [154.91, 141.15], [157.25, 140.32], [159.59, 139.48], [161.92, 138.61], [164.24, 137.72], [166.54, 136.78]]], [[[119.79, 105.35], [121.94, 105.42], [124.03, 105.87], [126, 106.72], [127.77, 107.93], [129.27, 109.47], [130.45, 111.26], [131.29, 113.23], [131.73, 115.33], [131.79, 117.47], [131.53, 119.6], [131.11, 121.71], [130.66, 123.81], [130.27, 125.92], [129.88, 128.03], [129.49, 130.14], [129.07, 132.25], [128.62, 134.35], [127.96, 136.39], [126.96, 138.29], [125.62, 139.96], [123.99, 141.36], [122.13, 142.43], [120.11, 143.15], [118, 143.5], [115.85, 143.45], [113.75, 143], [111.79, 142.15], [110.03, 140.93], [108.54, 139.38], [107.36, 137.59], [106.53, 135.61], [106.1, 133.51], [106.07, 131.37], [106.35, 129.24], [106.77, 127.14], [107.22, 125.04], [107.64, 122.93], [108.05, 120.82], [108.45, 118.71], [108.84, 116.6], [109.25, 114.49], [109.86, 112.44], [110.83, 110.52], [112.16, 108.84], [113.78, 107.44], [115.65, 106.38], [117.67, 105.68]], [[174.73, 114.1], [176.71, 114.59], [178.5, 115.55], [180.04, 116.88], [181.27, 118.5], [182.17, 120.33], [182.71, 122.29], [182.9, 124.32], [182.82, 126.36], [182.56, 128.38], [182.23, 130.39], [181.89, 132.4], [181.53, 134.41], [181.16, 136.41], [180.75, 138.41], [180.3, 140.4], [179.82, 142.38], [179.18, 144.31], [178.28, 146.15], [177.14, 147.83], [175.74, 149.31], [174.11, 150.53], [172.29, 151.44], [170.32, 151.97], [168.29, 152.07], [166.29, 151.69], [164.45, 150.83], [162.87, 149.54], [161.66, 147.91], [160.83, 146.06], [160.38, 144.07], [160.29, 142.04], [160.53, 140.01], [160.98, 138.02], [161.43, 136.03], [161.84, 134.04], [162.24, 132.04], [162.62, 130.03], [162.93, 128.02], [163.24, 126], [163.6, 124], [164.11, 122.03], [164.91, 120.15], [165.99, 118.43], [167.35, 116.91], [168.94, 115.64], [170.74, 114.69], [172.7, 114.15]]], [[[105.72, 72.58], [108.82, 72.78], [111.75, 73.82], [114.27, 75.64], [116.39, 77.92], [118.42, 80.29], [120.45, 82.66], [122.47, 85.03], [124.48, 87.41], [126.49, 89.8], [128.48, 92.2], [130.47, 94.6], [132.45, 97.01], [134.43, 99.42], [136.4, 101.83], [138.37, 104.25], [140.3, 106.7], [141.85, 109.39], [142.65, 112.4], [142.63, 115.51], [141.8, 118.5], [140.21, 121.17], [137.95, 123.31], [135.17, 124.7], [132.11, 125.26], [129.02, 124.98], [126.12, 123.86], [123.67, 121.94], [121.61, 119.6], [119.66, 117.17], [117.69, 114.75], [115.73, 112.33], [113.75, 109.92], [111.77, 107.52], [109.77, 105.12], [107.77, 102.73], [105.76, 100.34], [103.75, 97.96], [101.72, 95.59], [99.68, 93.23], [97.63, 90.89], [95.91, 88.3], [94.95, 85.34], [94.92, 82.24], [95.84, 79.27], [97.56, 76.68], [99.9, 74.63], [102.67, 73.22]], [[176.73, 63.75], [179.52, 64.43], [182.02, 65.85], [184.15, 67.78], [185.85, 70.1], [187.08, 72.7], [187.76, 75.5], [187.76, 78.37], [187.23, 81.2], [186.58, 84.01], [185.89, 86.8], [185.16, 89.59], [184.39, 92.36], [183.59, 95.13], [182.76, 97.89], [181.88, 100.64], [180.98, 103.37], [180.02, 106.09], [179.03, 108.79], [177.99, 111.48], [176.9, 114.15], [175.5, 116.66], [173.51, 118.72], [171, 120.11], [168.18, 120.66], [165.34, 120.29], [162.75, 119.04], [160.62, 117.12], [159.02, 114.73], [158, 112.04], [157.63, 109.19], [157.98, 106.34], [158.83, 103.59], [159.86, 100.9], [160.87, 98.2], [161.85, 95.49], [162.79, 92.76], [163.7, 90.03], [164.57, 87.29], [165.41, 84.53], [166.21, 81.76], [166.98, 78.99], [167.7, 76.2], [168.38, 73.4], [169, 70.58], [169.79, 67.82], [171.41, 65.46], [173.88, 64.03]]], [[[64.12, 83.43], [66.69, 84.08], [68.9, 85.53], [70.57, 87.6], [71.56, 90.05], [71.86, 92.69], [71.53, 95.32], [70.55, 97.78], [69.06, 99.99], [67.36, 102.03], [65.64, 104.06], [63.95, 106.11], [62.28, 108.18], [60.63, 110.27], [59, 112.38], [57.41, 114.5], [55.84, 116.65], [54.29, 118.82], [52.78, 121], [51.31, 123.22], [49.86, 125.45], [48.42, 127.69], [46.67, 129.68], [44.36, 130.96], [41.73, 131.22], [39.22, 130.38], [37.16, 128.72], [35.64, 126.55], [34.65, 124.08], [34.2, 121.46], [34.29, 118.81], [34.94, 116.24], [36.12, 113.86], [37.54, 111.61], [39.04, 109.41], [40.54, 107.21], [42.06, 105.03], [43.61, 102.87], [45.18, 100.73], [46.79, 98.6], [48.41, 96.5], [50.07, 94.42], [51.74, 92.35], [53.45, 90.31], [55.17, 88.28], [56.94, 86.3], [59.04, 84.67], [61.48, 83.65]], [[104.23, 93.09], [106.97, 93.77], [109.4, 95.24], [111.32, 97.31], [112.59, 99.85], [113.4, 102.57], [114.13, 105.32], [114.87, 108.06], [115.62, 110.8], [116.37, 113.54], [117.14, 116.28], [117.9, 119.02], [118.67, 121.75], [119.45, 124.49], [120.23, 127.22], [121.03, 129.95], [121.83, 132.68], [122.6, 135.41], [122.98, 138.22], [122.57, 141.02], [121.34, 143.57], [119.44, 145.67], [117.05, 147.19], [114.34, 148.04], [111.51, 148.14], [108.77, 147.45], [106.33, 146.01], [104.38, 143.96], [103.07, 141.44], [102.21, 138.73], [101.43, 136], [100.65, 133.27], [99.87, 130.53], [99.09, 127.8], [98.32, 125.06], [97.55, 122.33], [96.79, 119.59], [96.04, 116.85], [95.28, 114.11], [94.53, 111.37], [93.79, 108.62], [93.05, 105.88], [92.73, 103.07], [93.18, 100.27], [94.42, 97.72], [96.32, 95.62], [98.7, 94.08], [101.4, 93.21]]], [[[108.14, 135.9], [111.13, 136.06], [114.08, 136.56], [116.95, 137.39], [119.71, 138.55], [122.31, 140.03], [124.71, 141.81], [126.86, 143.89], [128.73, 146.23], [130.27, 148.8], [131.44, 151.55], [132.22, 154.44], [132.56, 157.41], [132.47, 160.4], [131.93, 163.34], [130.96, 166.17], [129.6, 168.83], [127.87, 171.28], [125.83, 173.46], [123.51, 175.35], [120.96, 176.91], [118.23, 178.13], [115.36, 179], [112.42, 179.52], [109.43, 179.7], [106.44, 179.54], [103.49, 179.04], [100.62, 178.21], [97.86, 177.06], [95.26, 175.58], [92.86, 173.79], [90.71, 171.71], [88.84, 169.37], [87.3, 166.81], [86.13, 164.06], [85.35, 161.17], [85.01, 158.2], [85.11, 155.21], [85.64, 152.26], [86.61, 149.43], [87.97, 146.77], [89.7, 144.33], [91.74, 142.14], [94.06, 140.25], [96.61, 138.69], [99.34, 137.47], [102.21, 136.6], [105.15, 136.08]], [[175.67, 128.81], [177.16, 128.85], [178.62, 129.14], [180.01, 129.67], [181.28, 130.44], [182.41, 131.42], [183.36, 132.57], [184.12, 133.85], [184.68, 135.23], [185.05, 136.68], [185.24, 138.15], [185.27, 139.64], [185.13, 141.13], [184.85, 142.59], [184.42, 144.02], [183.85, 145.4], [183.15, 146.72], [182.33, 147.96], [181.38, 149.11], [180.32, 150.16], [179.15, 151.08], [177.88, 151.87], [176.53, 152.49], [175.1, 152.91], [173.62, 153.11], [172.13, 153.07], [170.67, 152.78], [169.28, 152.24], [168.01, 151.47], [166.88, 150.49], [165.93, 149.35], [165.18, 148.06], [164.61, 146.68], [164.24, 145.24], [164.05, 143.76], [164.02, 142.27], [164.16, 140.78], [164.44, 139.32], [164.87, 137.89], [165.44, 136.51], [166.14, 135.2], [166.96, 133.95], [167.91, 132.8], [168.97, 131.75], [170.14, 130.83], [171.4, 130.04], [172.76, 129.43], [174.19, 129.01]]], [[[103.39, 78.25], [106.56, 78.38], [109.59, 79.28], [112.29, 80.94], [114.43, 83.28], [115.86, 86.1], [116.52, 89.2], [116.32, 92.37], [115.62, 95.46], [114.86, 98.55], [114.1, 101.63], [113.36, 104.72], [112.63, 107.81], [111.91, 110.91], [111.2, 114.01], [110.51, 117.1], [109.82, 120.21], [109.16, 123.31], [108.52, 126.42], [107.84, 129.53], [106.8, 132.52], [105.04, 135.16], [102.66, 137.25], [99.81, 138.63], [96.7, 139.2], [93.54, 138.96], [90.53, 137.95], [87.87, 136.24], [85.71, 133.92], [84.21, 131.13], [83.48, 128.05], [83.5, 124.88], [84, 121.74], [84.7, 118.64], [85.4, 115.54], [86.08, 112.44], [86.77, 109.34], [87.48, 106.24], [88.19, 103.15], [88.92, 100.05], [89.66, 96.96], [90.41, 93.88], [91.18, 90.8], [91.95, 87.71], [93.1, 84.76], [94.95, 82.19], [97.4, 80.19], [100.28, 78.86]], [[161.99, 91.57], [165.07, 92], [167.9, 93.28], [170.32, 95.23], [172.22, 97.69], [173.49, 100.53], [174.05, 103.59], [173.93, 106.7], [173.45, 109.78], [172.9, 112.85], [172.33, 115.91], [171.71, 118.97], [171.06, 122.02], [170.38, 125.06], [169.66, 128.09], [168.91, 131.12], [168.13, 134.14], [167.33, 137.15], [166.5, 140.16], [165.58, 143.14], [164.33, 145.98], [162.5, 148.5], [160.15, 150.53], [157.38, 151.95], [154.34, 152.61], [151.24, 152.43], [148.32, 151.38], [145.83, 149.52], [143.99, 147.01], [142.95, 144.08], [142.73, 140.98], [143.25, 137.91], [144.09, 134.91], [144.94, 131.91], [145.76, 128.9], [146.54, 125.89], [147.29, 122.86], [148.01, 119.83], [148.69, 116.79], [149.34, 113.74], [149.95, 110.68], [150.54, 107.62], [151.09, 104.55], [151.6, 101.47], [152.44, 98.48], [154, 95.79], [156.21, 93.6], [158.94, 92.12]]], [[[47.23, 91.05], [51.61, 92.47], [55.26, 95.29], [57.96, 99.03], [59.7, 103.31], [60.56, 107.85], [61.28, 112.42], [62.11, 116.97], [63.06, 121.51], [64.11, 126.01], [65.28, 130.49], [66.56, 134.94], [67.95, 139.35], [69.44, 143.73], [71.05, 148.07], [72.77, 152.37], [74.62, 156.61], [76.52, 160.83], [78.06, 165.19], [78.52, 169.78], [77.62, 174.3], [75.2, 178.22], [71.44, 180.86], [66.96, 181.91], [62.36, 181.55], [57.99, 180.06], [54.03, 177.68], [50.59, 174.58], [47.77, 170.92], [45.62, 166.83], [43.74, 162.6], [41.96, 158.33], [40.29, 154.01], [38.72, 149.66], [37.27, 145.26], [35.93, 140.83], [34.69, 136.37], [33.56, 131.88], [32.55, 127.37], [31.65, 122.83], [30.85, 118.27], [30.2, 113.69], [30.08, 109.07], [30.85, 104.51], [32.49, 100.19], [35.01, 96.32], [38.44, 93.24], [42.64, 91.35]], [[108.93, 73.38], [113.76, 73.6], [118.38, 75.01], [122.49, 77.56], [125.82, 81.07], [128.1, 85.34], [129.65, 89.93], [131.04, 94.58], [132.43, 99.22], [133.82, 103.87], [135.22, 108.51], [136.6, 113.16], [137.99, 117.81], [139.36, 122.46], [140.73, 127.11], [142.13, 131.76], [143.51, 136.41], [144.82, 141.08], [145.51, 145.86], [144.91, 150.66], [143.09, 155.14], [140.17, 158.99], [136.38, 162.01], [132, 164.05], [127.26, 165.03], [122.42, 164.86], [117.79, 163.48], [113.67, 160.95], [110.36, 157.43], [108.17, 153.11], [106.72, 148.49], [105.36, 143.83], [103.99, 139.18], [102.62, 134.53], [101.24, 129.88], [99.87, 125.23], [98.48, 120.58], [97.09, 115.93], [95.7, 111.29], [94.29, 106.64], [92.89, 102], [91.49, 97.36], [90.81, 92.57], [91.38, 87.77], [93.14, 83.26], [96.02, 79.37], [99.79, 76.34], [104.18, 74.32]]], [[[102.86, 129.56], [106.39, 129.96], [109.85, 130.76], [113.21, 131.94], [116.4, 133.5], [119.39, 135.42], [122.13, 137.69], [124.56, 140.28], [126.64, 143.16], [128.33, 146.29], [129.59, 149.61], [130.37, 153.08], [130.66, 156.62], [130.43, 160.16], [129.68, 163.63], [128.42, 166.96], [126.7, 170.07], [124.54, 172.89], [122.02, 175.39], [119.18, 177.52], [116.07, 179.25], [112.76, 180.54], [109.31, 181.4], [105.78, 181.82], [102.23, 181.83], [98.7, 181.42], [95.24, 180.62], [91.88, 179.44], [88.69, 177.88], [85.7, 175.96], [82.96, 173.69], [80.53, 171.1], [78.45, 168.22], [76.76, 165.1], [75.5, 161.77], [74.72, 158.31], [74.44, 154.77], [74.67, 151.22], [75.41, 147.75], [76.67, 144.42], [78.39, 141.32], [80.55, 138.49], [83.07, 135.99], [85.91, 133.86], [89.02, 132.14], [92.33, 130.84], [95.78, 129.99], [99.31, 129.56]], [[180.44, 141.06], [183.61, 141.1], [186.72, 141.68], [189.66, 142.86], [192.28, 144.63], [194.43, 146.96], [196, 149.71], [197, 152.72], [197.48, 155.86], [197.51, 159.03], [197.15, 162.18], [196.43, 165.27], [195.38, 168.26], [194.07, 171.15], [192.52, 173.92], [190.74, 176.55], [188.77, 179.03], [186.6, 181.35], [184.25, 183.48], [181.74, 185.41], [179.06, 187.12], [176.23, 188.56], [173.28, 189.71], [170.21, 190.52], [167.07, 190.95], [163.9, 190.91], [160.78, 190.33], [157.84, 189.15], [155.22, 187.37], [153.08, 185.04], [151.51, 182.29], [150.51, 179.28], [150.03, 176.15], [150, 172.98], [150.36, 169.83], [151.07, 166.74], [152.12, 163.74], [153.43, 160.85], [154.99, 158.09], [156.76, 155.46], [158.74, 152.98], [160.91, 150.66], [163.25, 148.53], [165.77, 146.59], [168.45, 144.89], [171.27, 143.45], [174.23, 142.3], [177.29, 141.48]]], [[[86.02, 131.33], [88.42, 131.69], [90.54, 132.87], [92.12, 134.71], [93.03, 136.97], [93.17, 139.39], [92.41, 141.69], [90.78, 143.48], [88.59, 144.52], [86.19, 144.97], [83.78, 145.34], [81.37, 145.72], [78.96, 146.09], [76.54, 146.45], [74.13, 146.81], [71.72, 147.16], [69.3, 147.5], [66.88, 147.84], [64.47, 148.16], [62.05, 148.47], [59.62, 148.76], [57.2, 149.03], [54.77, 149.27], [52.34, 149.49], [49.91, 149.68], [47.53, 149.28], [45.52, 147.92], [44.04, 145.99], [43.12, 143.74], [42.85, 141.32], [43.44, 138.97], [45.04, 137.17], [47.33, 136.4], [49.76, 136.2], [52.19, 135.96], [54.62, 135.7], [57.04, 135.43], [59.46, 135.15], [61.89, 134.85], [64.31, 134.54], [66.72, 134.22], [69.14, 133.89], [71.56, 133.54], [73.97, 133.19], [76.38, 132.83], [78.79, 132.45], [81.2, 132.06], [83.61, 131.67]], [[153.42, 116.84], [155.92, 117.69], [157.78, 119.56], [158.72, 122.03], [158.73, 124.68], [157.84, 127.18], [156.08, 129.15], [153.71, 130.33], [151.13, 131], [148.55, 131.65], [145.98, 132.32], [143.4, 132.98], [140.82, 133.63], [138.23, 134.27], [135.65, 134.9], [133.06, 135.53], [130.47, 136.15], [127.88, 136.76], [125.29, 137.36], [122.69, 137.94], [120.09, 138.51], [117.49, 139.06], [114.88, 139.59], [112.27, 140.1], [109.62, 140.12], [107.17, 139.14], [105.28, 137.29], [104.18, 134.88], [104.06, 132.23], [105.03, 129.78], [106.92, 127.93], [109.35, 126.87], [111.96, 126.34], [114.57, 125.8], [117.17, 125.24], [119.77, 124.67], [122.37, 124.09], [124.96, 123.5], [127.56, 122.9], [130.15, 122.29], [132.74, 121.68], [135.32, 121.05], [137.91, 120.41], [140.49, 119.76], [143.07, 119.11], [145.65, 118.44], [148.22, 117.76], [150.78, 117.03]]], [[[83.36, 65.84], [86.61, 66.42], [89.57, 67.88], [92, 70.12], [93.67, 72.97], [94.46, 76.17], [94.31, 79.47], [93.61, 82.71], [92.8, 85.92], [92.02, 89.14], [91.27, 92.36], [90.56, 95.6], [89.88, 98.84], [89.23, 102.09], [88.62, 105.34], [88.03, 108.61], [87.51, 111.88], [87.01, 115.15], [86.5, 118.42], [85.65, 121.62], [84.11, 124.54], [81.9, 126.99], [79.13, 128.79], [75.98, 129.8], [72.68, 129.91], [69.47, 129.13], [66.6, 127.49], [64.24, 125.18], [62.49, 122.38], [61.42, 119.25], [61.08, 115.97], [61.36, 112.67], [61.87, 109.4], [62.45, 106.13], [63.01, 102.87], [63.61, 99.61], [64.24, 96.36], [64.9, 93.11], [65.6, 89.87], [66.33, 86.64], [67.09, 83.42], [67.89, 80.2], [68.73, 77], [69.89, 73.9], [71.7, 71.14], [74.1, 68.86], [76.93, 67.16], [80.07, 66.12]], [[119.49, 99.16], [121.99, 99.28], [124.44, 99.82], [126.9, 100.34], [129.36, 100.86], [131.81, 101.38], [134.27, 101.91], [136.72, 102.44], [139.17, 102.98], [141.62, 103.52], [144.08, 104.07], [146.52, 104.62], [148.97, 105.18], [151.42, 105.74], [153.86, 106.31], [156.31, 106.89], [158.75, 107.47], [161.2, 108.02], [163.49, 109.03], [165.16, 110.87], [165.95, 113.24], [165.87, 115.74], [164.94, 118.05], [163.17, 119.8], [160.79, 120.55], [158.31, 120.29], [155.88, 119.65], [153.44, 119.06], [150.99, 118.49], [148.55, 117.92], [146.1, 117.36], [143.65, 116.81], [141.2, 116.26], [138.75, 115.73], [136.29, 115.2], [133.84, 114.67], [131.38, 114.15], [128.93, 113.62], [126.47, 113.1], [124.02, 112.57], [121.56, 112.04], [119.11, 111.5], [116.81, 110.53], [115.08, 108.73], [114.22, 106.39], [114.29, 103.9], [115.28, 101.61], [117.12, 99.93]]], [[[168.71, 85.67], [170.73, 86], [172.64, 86.75], [174.37, 87.85], [175.88, 89.24], [177.11, 90.88], [178.04, 92.71], [178.71, 94.65], [179.21, 96.64], [179.64, 98.65], [180.05, 100.66], [180.45, 102.67], [180.83, 104.69], [181.18, 106.71], [181.5, 108.74], [181.77, 110.78], [181.88, 112.82], [181.71, 114.87], [181.22, 116.86], [180.41, 118.74], [179.27, 120.45], [177.83, 121.91], [176.12, 123.03], [174.2, 123.74], [172.16, 123.99], [170.13, 123.75], [168.21, 123.04], [166.49, 121.93], [165.03, 120.48], [163.88, 118.79], [163.02, 116.93], [162.49, 114.95], [162.17, 112.92], [161.85, 110.89], [161.51, 108.87], [161.14, 106.84], [160.77, 104.83], [160.37, 102.81], [159.96, 100.8], [159.52, 98.79], [159.24, 96.76], [159.3, 94.71], [159.71, 92.7], [160.48, 90.8], [161.58, 89.08], [163.01, 87.61], [164.73, 86.49], [166.67, 85.83]], [[206.57, 78.24], [208.3, 78.8], [209.77, 79.87], [210.99, 81.22], [212.01, 82.73], [212.85, 84.34], [213.53, 86.03], [214.08, 87.77], [214.54, 89.54], [214.95, 91.31], [215.34, 93.09], [215.7, 94.88], [216.04, 96.67], [216.36, 98.46], [216.64, 100.26], [216.89, 102.07], [217.11, 103.88], [217.25, 105.7], [217.26, 107.52], [217.1, 109.33], [216.75, 111.12], [216.16, 112.84], [215.3, 114.44], [214.04, 115.75], [212.34, 116.35], [210.58, 115.96], [209.11, 114.89], [207.97, 113.48], [207.1, 111.88], [206.44, 110.18], [205.97, 108.42], [205.62, 106.63], [205.35, 104.83], [205.11, 103.02], [204.85, 101.22], [204.55, 99.42], [204.22, 97.63], [203.87, 95.84], [203.49, 94.05], [203.09, 92.28], [202.67, 90.5], [202.32, 88.71], [202.1, 86.91], [202.1, 85.08], [202.32, 83.28], [202.77, 81.51], [203.54, 79.86], [204.82, 78.59]]], [[[39.78, 104.3], [42.64, 105.01], [45.03, 106.74], [46.73, 109.15], [47.75, 111.93], [48.35, 114.83], [48.81, 117.76], [49.31, 120.68], [49.87, 123.6], [50.48, 126.5], [51.15, 129.39], [51.86, 132.27], [52.63, 135.13], [53.44, 137.98], [54.3, 140.82], [55.19, 143.65], [56.13, 146.46], [57.1, 149.26], [58.1, 152.05], [58.86, 154.92], [58.96, 157.87], [58.18, 160.72], [56.43, 163.09], [53.84, 164.48], [50.9, 164.62], [48.08, 163.75], [45.58, 162.16], [43.51, 160.05], [41.89, 157.57], [40.67, 154.87], [39.67, 152.08], [38.73, 149.26], [37.81, 146.44], [36.94, 143.61], [36.11, 140.76], [35.34, 137.9], [34.61, 135.03], [33.92, 132.14], [33.28, 129.24], [32.7, 126.34], [32.16, 123.42], [31.67, 120.5], [31.23, 117.57], [31.14, 114.61], [31.65, 111.69], [32.74, 108.94], [34.47, 106.54], [36.89, 104.86]], [[108.97, 125.73], [111.9, 126.2], [114.63, 127.37], [117, 129.16], [118.84, 131.49], [119.99, 134.23], [120.32, 137.18], [119.85, 140.11], [118.59, 142.8], [116.78, 145.16], [114.84, 147.42], [112.89, 149.67], [110.93, 151.92], [108.97, 154.16], [107.01, 156.39], [105.03, 158.62], [103.05, 160.85], [101.07, 163.06], [99.07, 165.28], [97.09, 167.5], [95.09, 169.71], [93.05, 171.88], [90.69, 173.67], [87.89, 174.66], [84.93, 174.81], [82.02, 174.22], [79.31, 173], [76.92, 171.24], [74.99, 168.98], [73.7, 166.3], [73.26, 163.37], [73.74, 160.45], [75.2, 157.86], [77.17, 155.63], [79.18, 153.43], [81.18, 151.23], [83.17, 149.02], [85.16, 146.8], [87.14, 144.58], [89.11, 142.35], [91.08, 140.11], [93.04, 137.87], [95, 135.63], [96.95, 133.38], [98.89, 131.12], [100.87, 128.89], [103.25, 127.12], [106.02, 126.04]]], [[[115.43, 87.59], [118.19, 88.24], [120.69, 89.59], [122.69, 91.59], [124.03, 94.09], [124.63, 96.87], [124.41, 99.7], [123.7, 102.45], [122.9, 105.18], [122.12, 107.92], [121.34, 110.65], [120.57, 113.39], [119.79, 116.13], [119.02, 118.87], [118.25, 121.61], [117.48, 124.35], [116.72, 127.09], [115.97, 129.83], [115.23, 132.58], [114.45, 135.32], [113.3, 137.91], [111.49, 140.09], [109.13, 141.65], [106.41, 142.48], [103.58, 142.56], [100.82, 141.91], [98.33, 140.54], [96.33, 138.53], [94.99, 136.03], [94.38, 133.26], [94.57, 130.43], [95.25, 127.67], [96.02, 124.93], [96.79, 122.19], [97.55, 119.45], [98.31, 116.7], [99.08, 113.96], [99.85, 111.22], [100.62, 108.49], [101.4, 105.75], [102.18, 103.01], [102.95, 100.27], [103.74, 97.54], [104.51, 94.8], [105.68, 92.21], [107.5, 90.04], [109.88, 88.5], [112.59, 87.67]], [[155.37, 78.64], [158.04, 79.15], [160.48, 80.37], [162.53, 82.16], [164.33, 84.22], [166.1, 86.3], [167.85, 88.4], [169.58, 90.51], [171.29, 92.64], [172.98, 94.78], [174.65, 96.94], [176.3, 99.12], [177.92, 101.32], [179.51, 103.54], [181.06, 105.79], [182.57, 108.07], [184.03, 110.37], [185.2, 112.83], [185.77, 115.5], [185.73, 118.23], [185.07, 120.87], [183.8, 123.28], [181.94, 125.26], [179.57, 126.6], [176.89, 127.03], [174.24, 126.43], [171.99, 124.92], [170.26, 122.8], [168.75, 120.53], [167.22, 118.27], [165.66, 116.03], [164.07, 113.81], [162.45, 111.6], [160.82, 109.41], [159.16, 107.25], [157.47, 105.1], [155.76, 102.97], [154.03, 100.85], [152.28, 98.76], [150.51, 96.68], [148.74, 94.6], [147.29, 92.29], [146.49, 89.69], [146.36, 86.97], [146.94, 84.31], [148.23, 81.91], [150.19, 80.02], [152.66, 78.89]]], [[[92.71, 76.24], [95.76, 76.59], [98.73, 77.35], [101.56, 78.53], [104.21, 80.08], [106.63, 81.96], [108.78, 84.16], [110.61, 86.62], [112.09, 89.31], [113.19, 92.17], [113.91, 95.15], [114.24, 98.2], [114.18, 101.27], [113.73, 104.31], [112.9, 107.26], [111.7, 110.09], [110.15, 112.73], [108.28, 115.17], [106.12, 117.35], [103.71, 119.24], [101.08, 120.83], [98.27, 122.07], [95.33, 122.95], [92.3, 123.44], [89.23, 123.51], [86.18, 123.17], [83.21, 122.41], [80.38, 121.23], [77.73, 119.69], [75.31, 117.8], [73.16, 115.61], [71.33, 113.14], [69.86, 110.45], [68.75, 107.59], [68.02, 104.61], [67.7, 101.56], [67.76, 98.49], [68.22, 95.46], [69.05, 92.5], [70.25, 89.68], [71.8, 87.03], [73.67, 84.59], [75.83, 82.41], [78.24, 80.52], [80.87, 78.93], [83.67, 77.69], [86.61, 76.81], [89.64, 76.32]], [[157.73, 102.08], [159.31, 102.13], [160.86, 102.42], [162.35, 102.95], [163.74, 103.69], [165.01, 104.62], [166.15, 105.72], [167.13, 106.95], [167.96, 108.29], [168.63, 109.72], [169.13, 111.22], [169.45, 112.76], [169.59, 114.34], [169.55, 115.91], [169.31, 117.47], [168.88, 118.99], [168.28, 120.45], [167.52, 121.83], [166.58, 123.1], [165.48, 124.23], [164.25, 125.22], [162.89, 126.02], [161.43, 126.63], [159.91, 127.02], [158.34, 127.2], [156.76, 127.14], [155.21, 126.85], [153.73, 126.33], [152.33, 125.59], [151.06, 124.65], [149.93, 123.56], [148.94, 122.33], [148.11, 120.99], [147.44, 119.56], [146.95, 118.06], [146.62, 116.51], [146.48, 114.94], [146.52, 113.37], [146.76, 111.8], [147.18, 110.28], [147.78, 108.83], [148.56, 107.45], [149.5, 106.18], [150.59, 105.05], [151.83, 104.07], [153.18, 103.26], [154.64, 102.65], [156.17, 102.26]]], [[[57.98, 112.03], [61.01, 112.26], [63.82, 113.41], [66.22, 115.27], [68.09, 117.67], [69.36, 120.44], [70.14, 123.39], [70.64, 126.39], [71.07, 129.41], [71.58, 132.42], [72.15, 135.41], [72.76, 138.4], [73.4, 141.38], [74.09, 144.35], [74.82, 147.31], [75.59, 150.26], [76.42, 153.2], [77.3, 156.12], [78.16, 159.04], [78.68, 162.04], [78.42, 165.07], [77.28, 167.88], [75.25, 170.13], [72.54, 171.49], [69.52, 171.87], [66.51, 171.44], [63.69, 170.32], [61.16, 168.61], [59.03, 166.44], [57.38, 163.89], [56.23, 161.06], [55.34, 158.15], [54.53, 155.21], [53.73, 152.27], [52.97, 149.31], [52.25, 146.35], [51.57, 143.38], [50.93, 140.4], [50.34, 137.41], [49.78, 134.41], [49.26, 131.4], [48.78, 128.39], [48.37, 125.37], [48.37, 122.33], [49.06, 119.36], [50.44, 116.65], [52.47, 114.39], [55.04, 112.78]], [[117.45, 101.46], [120.57, 101.84], [123.48, 103.02], [125.99, 104.91], [127.97, 107.35], [129.25, 110.23], [130.05, 113.27], [130.76, 116.34], [131.46, 119.41], [132.15, 122.49], [132.85, 125.56], [133.55, 128.63], [134.24, 131.71], [134.93, 134.78], [135.61, 137.86], [136.32, 140.93], [137.01, 144], [137.66, 147.09], [137.87, 150.22], [137.25, 153.3], [135.83, 156.1], [133.73, 158.45], [131.15, 160.23], [128.22, 161.38], [125.11, 161.83], [121.98, 161.5], [119.05, 160.37], [116.52, 158.51], [114.57, 156.05], [113.37, 153.14], [112.64, 150.08], [111.95, 147], [111.27, 143.93], [110.58, 140.85], [109.89, 137.78], [109.2, 134.7], [108.51, 131.63], [107.81, 128.56], [107.12, 125.48], [106.42, 122.41], [105.71, 119.34], [105.02, 116.27], [104.83, 113.13], [105.42, 110.04], [106.79, 107.22], [108.84, 104.83], [111.41, 103.02], [114.33, 101.87]]], [[[113.75, 120.08], [118.16, 120.78], [122.31, 122.43], [125.98, 124.96], [128.94, 128.29], [131.02, 132.23], [132.12, 136.56], [132.1, 141.02], [131.16, 145.38], [129.94, 149.68], [128.69, 153.98], [127.44, 158.27], [126.19, 162.56], [124.92, 166.85], [123.64, 171.14], [122.35, 175.42], [121.05, 179.69], [119.76, 183.97], [118.46, 188.25], [117.05, 192.49], [114.84, 196.36], [111.47, 199.27], [107.42, 201.12], [103.04, 201.99], [98.58, 201.97], [94.18, 201.19], [89.97, 199.7], [86.1, 197.48], [82.8, 194.48], [80.41, 190.72], [79.31, 186.41], [79.87, 182], [81.24, 177.74], [82.57, 173.47], [83.88, 169.2], [85.19, 164.92], [86.48, 160.64], [87.75, 156.36], [89.02, 152.07], [90.28, 147.78], [91.53, 143.49], [92.77, 139.19], [93.97, 134.88], [95.5, 130.69], [97.93, 126.95], [101.16, 123.87], [105.02, 121.64], [109.3, 120.36]], [[181.19, 127.71], [185.4, 128.03], [189.23, 129.79], [192.19, 132.8], [194.06, 136.59], [194.87, 140.74], [194.76, 144.98], [194.21, 149.18], [193.55, 153.37], [192.79, 157.55], [191.91, 161.69], [190.91, 165.82], [189.8, 169.91], [188.57, 173.97], [187.22, 177.99], [185.72, 181.96], [184.07, 185.87], [182.26, 189.7], [180.26, 193.44], [177.85, 196.92], [174.93, 199.99], [171.62, 202.64], [168, 204.85], [164.13, 206.59], [160.07, 207.78], [155.86, 208.24], [151.69, 207.6], [148.31, 205.16], [147.33, 201.11], [148.48, 197.06], [150.4, 193.28], [152.24, 189.46], [153.93, 185.56], [155.48, 181.61], [156.89, 177.62], [158.17, 173.57], [159.32, 169.49], [160.35, 165.38], [161.26, 161.23], [162.06, 157.07], [162.7, 152.87], [163.29, 148.67], [164.12, 144.52], [165.46, 140.5], [167.49, 136.78], [170.16, 133.49], [173.37, 130.73], [177.08, 128.7]]], [[[52.43, 111.88], [55.76, 112.3], [59, 113.21], [62.08, 114.57], [64.96, 116.3], [67.61, 118.36], [70.01, 120.71], [72.16, 123.3], [74.02, 126.1], [75.61, 129.06], [76.9, 132.17], [77.89, 135.38], [78.56, 138.68], [78.89, 142.02], [78.86, 145.39], [78.45, 148.72], [77.63, 151.98], [76.39, 155.11], [74.74, 158.03], [72.67, 160.68], [70.2, 162.96], [67.38, 164.79], [64.28, 166.08], [61, 166.78], [57.64, 166.91], [54.3, 166.49], [51.07, 165.57], [47.99, 164.22], [45.11, 162.49], [42.46, 160.42], [40.05, 158.07], [37.91, 155.48], [36.04, 152.68], [34.46, 149.72], [33.16, 146.62], [32.17, 143.4], [31.51, 140.11], [31.18, 136.76], [31.21, 133.4], [31.62, 130.06], [32.44, 126.8], [33.67, 123.68], [35.33, 120.75], [37.4, 118.1], [39.86, 115.82], [42.68, 114], [45.79, 112.71], [49.07, 112.01]], [[126.89, 95.19], [130.56, 95.44], [134.16, 96.17], [137.64, 97.36], [140.94, 98.99], [143.98, 101.06], [146.73, 103.5], [149.13, 106.29], [151.14, 109.37], [152.72, 112.69], [153.86, 116.19], [154.54, 119.8], [154.74, 123.47], [154.45, 127.14], [153.67, 130.74], [152.43, 134.2], [150.76, 137.48], [148.69, 140.51], [146.25, 143.27], [143.48, 145.69], [140.43, 147.75], [137.14, 149.39], [133.66, 150.59], [130.06, 151.32], [126.39, 151.56], [122.72, 151.31], [119.11, 150.59], [115.63, 149.4], [112.34, 147.76], [109.29, 145.7], [106.54, 143.26], [104.14, 140.47], [102.13, 137.39], [100.55, 134.07], [99.41, 130.57], [98.73, 126.96], [98.53, 123.28], [98.83, 119.62], [99.6, 116.02], [100.84, 112.56], [102.51, 109.28], [104.59, 106.25], [107.03, 103.49], [109.79, 101.07], [112.84, 99.01], [116.13, 97.36], [119.61, 96.16], [123.22, 95.43]]], [[[72.34, 79.33], [74.93, 79.64], [77.52, 79.94], [80.12, 80.25], [82.71, 80.57], [85.3, 80.91], [87.88, 81.26], [90.47, 81.63], [93.05, 82], [95.63, 82.39], [98.21, 82.79], [100.79, 83.21], [103.37, 83.63], [105.94, 84.07], [108.51, 84.52], [111.09, 84.92], [113.65, 85.44], [115.99, 86.56], [117.75, 88.47], [118.68, 90.89], [118.57, 93.48], [117.47, 95.83], [115.57, 97.6], [113.16, 98.56], [110.56, 98.58], [108, 98.1], [105.43, 97.64], [102.85, 97.19], [100.28, 96.76], [97.7, 96.33], [95.12, 95.93], [92.54, 95.53], [89.96, 95.14], [87.38, 94.77], [84.79, 94.4], [82.2, 94.06], [79.62, 93.72], [77.02, 93.41], [74.43, 93.11], [71.84, 92.81], [69.24, 92.5], [66.78, 91.69], [64.99, 89.83], [64.25, 87.35], [64.5, 84.76], [65.58, 82.39], [67.38, 80.53], [69.74, 79.45]], [[136.83, 90.25], [139.33, 90.71], [141.8, 91.34], [144.28, 91.93], [146.75, 92.53], [149.22, 93.14], [151.69, 93.77], [154.15, 94.4], [156.62, 95.05], [159.08, 95.71], [161.53, 96.38], [163.98, 97.07], [166.43, 97.76], [168.88, 98.47], [171.32, 99.2], [173.75, 99.94], [176.19, 100.67], [178.49, 101.74], [180.18, 103.62], [181.12, 105.98], [181.31, 108.51], [180.69, 110.96], [179.21, 113.01], [176.98, 114.19], [174.46, 114.13], [172.02, 113.41], [169.58, 112.66], [167.14, 111.93], [164.7, 111.22], [162.25, 110.52], [159.8, 109.84], [157.34, 109.17], [154.88, 108.52], [152.42, 107.88], [149.95, 107.26], [147.48, 106.64], [145.01, 106.03], [142.54, 105.42], [140.06, 104.81], [137.59, 104.21], [135.12, 103.61], [132.78, 102.62], [130.96, 100.86], [129.93, 98.55], [129.77, 96.02], [130.49, 93.59], [132.06, 91.61], [134.31, 90.46]]], [[[107.05, 116.19], [110.26, 116.71], [113.26, 118], [115.85, 119.97], [117.92, 122.49], [119.29, 125.45], [120.04, 128.63], [120.54, 131.86], [121.04, 135.09], [121.54, 138.31], [122.06, 141.54], [122.59, 144.77], [123.12, 147.99], [123.67, 151.21], [124.22, 154.43], [124.8, 157.65], [125.4, 160.86], [125.95, 164.08], [126.04, 167.34], [125.2, 170.49], [123.53, 173.28], [121.14, 175.49], [118.26, 177.02], [115.11, 177.87], [111.85, 178.04], [108.63, 177.56], [105.58, 176.41], [102.87, 174.58], [100.72, 172.14], [99.35, 169.18], [98.61, 166], [98.04, 162.78], [97.47, 159.57], [96.91, 156.35], [96.36, 153.13], [95.83, 149.9], [95.3, 146.68], [94.78, 143.45], [94.27, 140.22], [93.76, 137], [93.26, 133.77], [92.82, 130.53], [92.96, 127.27], [93.87, 124.15], [95.55, 121.35], [97.88, 119.07], [100.68, 117.41], [103.79, 116.44]], [[189.21, 121.96], [191.36, 122.71], [192.8, 124.5], [193.41, 126.73], [193.32, 129.04], [192.59, 131.23], [191.22, 133.09], [189.28, 134.34], [187.12, 135.19], [184.95, 136], [182.78, 136.83], [180.61, 137.63], [178.43, 138.43], [176.24, 139.2], [174.05, 139.95], [171.85, 140.69], [169.64, 141.4], [167.43, 142.09], [165.21, 142.76], [162.98, 143.42], [160.75, 144.05], [158.51, 144.66], [156.27, 145.25], [154.02, 145.81], [151.72, 145.98], [149.57, 145.18], [148.01, 143.49], [147.25, 141.31], [147.31, 139], [148.16, 136.86], [149.7, 135.14], [151.74, 134.05], [153.97, 133.43], [156.21, 132.84], [158.45, 132.22], [160.68, 131.59], [162.91, 130.93], [165.13, 130.26], [167.34, 129.58], [169.55, 128.87], [171.76, 128.15], [173.95, 127.41], [176.15, 126.65], [178.33, 125.87], [180.51, 125.08], [182.68, 124.26], [184.84, 123.41], [186.98, 122.53]]], [[[98.62, 121.53], [100.72, 121.6], [102.78, 122.03], [104.72, 122.83], [106.49, 123.97], [108.01, 125.42], [109.24, 127.12], [110.15, 129.02], [110.66, 131.05], [110.78, 133.15], [110.62, 135.25], [110.34, 137.33], [110.04, 139.42], [109.76, 141.5], [109.49, 143.59], [109.21, 145.68], [108.92, 147.76], [108.6, 149.84], [108.08, 151.88], [107.18, 153.78], [105.92, 155.45], [104.34, 156.83], [102.51, 157.86], [100.51, 158.52], [98.43, 158.81], [96.33, 158.72], [94.28, 158.27], [92.33, 157.47], [90.57, 156.33], [89.03, 154.89], [87.78, 153.21], [86.85, 151.32], [86.29, 149.3], [86.13, 147.2], [86.28, 145.11], [86.57, 143.02], [86.9, 140.94], [87.2, 138.86], [87.49, 136.78], [87.79, 134.69], [88.08, 132.61], [88.4, 130.53], [88.96, 128.5], [89.88, 126.61], [91.15, 124.94], [92.73, 123.56], [94.56, 122.52], [96.54, 121.84]], [[155.31, 127.29], [157.36, 127.43], [159.33, 127.99], [161.14, 128.96], [162.7, 130.29], [163.95, 131.92], [164.84, 133.77], [165.35, 135.75], [165.49, 137.8], [165.35, 139.85], [165.07, 141.89], [164.79, 143.92], [164.53, 145.96], [164.26, 148], [163.97, 150.04], [163.65, 152.06], [163.27, 154.09], [162.7, 156.06], [161.83, 157.92], [160.68, 159.62], [159.29, 161.13], [157.69, 162.41], [155.9, 163.42], [153.97, 164.1], [151.94, 164.41], [149.89, 164.32], [147.9, 163.82], [146.06, 162.92], [144.47, 161.62], [143.24, 159.98], [142.41, 158.1], [142, 156.09], [142.01, 154.04], [142.32, 152.01], [142.64, 149.98], [142.96, 147.95], [143.25, 145.92], [143.51, 143.88], [143.73, 141.83], [143.97, 139.79], [144.27, 137.76], [144.74, 135.76], [145.53, 133.87], [146.62, 132.13], [147.98, 130.59], [149.57, 129.28], [151.35, 128.27], [153.28, 127.58]]]];
|
|
26368
|
+
var GROK_GROUPS = [{
|
|
26369
|
+
"key": "lifecycle",
|
|
26370
|
+
"label": "生命周期",
|
|
26371
|
+
"states": ["sleeping", "idle", "listening", "thinking", "searching", "working"]
|
|
26372
|
+
}, {
|
|
26373
|
+
"key": "emotion",
|
|
26374
|
+
"label": "情绪反应",
|
|
26375
|
+
"states": ["surprised", "angry", "happy", "confused", "sad"]
|
|
26376
|
+
}, {
|
|
26377
|
+
"key": "product",
|
|
26378
|
+
"label": "产品流程",
|
|
26379
|
+
"states": ["loading", "receiving"]
|
|
26380
|
+
}];
|
|
26381
|
+
var GROK_STATE_LABELS = {
|
|
26382
|
+
"sleeping": "睡觉",
|
|
26383
|
+
"idle": "平静",
|
|
26384
|
+
"listening": "聆听",
|
|
26385
|
+
"thinking": "思考",
|
|
26386
|
+
"searching": "寻找",
|
|
26387
|
+
"working": "专注",
|
|
26388
|
+
"surprised": "惊讶",
|
|
26389
|
+
"angry": "生气",
|
|
26390
|
+
"happy": "开心",
|
|
26391
|
+
"confused": "疑惑",
|
|
26392
|
+
"sad": "难过",
|
|
26393
|
+
"loading": "缓冲中",
|
|
26394
|
+
"receiving": "接收"
|
|
26395
|
+
};
|
|
26396
|
+
var GROK_POOLS = {
|
|
26397
|
+
"sleeping": [13, 22, 4],
|
|
26398
|
+
"idle": [0, 8],
|
|
26399
|
+
"listening": [10, 1, 19],
|
|
26400
|
+
"thinking": [8, 16, 14, 17, 5],
|
|
26401
|
+
"searching": [15, 9, 3, 20, 12, 18],
|
|
26402
|
+
"working": [7, 16, 11, 10],
|
|
26403
|
+
"surprised": [3, 21],
|
|
26404
|
+
"angry": [7, 16],
|
|
26405
|
+
"happy": [2, 11, 17, 19],
|
|
26406
|
+
"confused": [14, 5, 8],
|
|
26407
|
+
"sad": [4, 13, 22],
|
|
26408
|
+
"loading": [0, 8],
|
|
26409
|
+
"receiving": [19, 0, 8]
|
|
26410
|
+
};
|
|
26411
|
+
var GROK_EXPR_CADENCE = {
|
|
26412
|
+
"sleeping": [6000, 10000],
|
|
26413
|
+
"idle": [9000, 16000],
|
|
26414
|
+
"listening": [2800, 5000],
|
|
26415
|
+
"thinking": [2000, 3600],
|
|
26416
|
+
"searching": [1000, 1800],
|
|
26417
|
+
"working": [1800, 3200],
|
|
26418
|
+
"surprised": [2500, 4000],
|
|
26419
|
+
"angry": [2200, 3800],
|
|
26420
|
+
"happy": [2500, 4500],
|
|
26421
|
+
"confused": [2200, 3800],
|
|
26422
|
+
"sad": [4000, 7000],
|
|
26423
|
+
"loading": [6000, 10000],
|
|
26424
|
+
"receiving": [4000, 8000]
|
|
26425
|
+
};
|
|
26426
|
+
var GROK_BLINK = {
|
|
26427
|
+
"sleeping": null,
|
|
26428
|
+
"idle": [6000, 14000],
|
|
26429
|
+
"listening": [3000, 7000],
|
|
26430
|
+
"thinking": [3500, 7000],
|
|
26431
|
+
"searching": [1600, 4000],
|
|
26432
|
+
"working": [2800, 5500],
|
|
26433
|
+
"surprised": [1800, 3500],
|
|
26434
|
+
"angry": [3500, 7000],
|
|
26435
|
+
"happy": [2500, 5000],
|
|
26436
|
+
"confused": [2800, 5500],
|
|
26437
|
+
"sad": [4000, 8000],
|
|
26438
|
+
"loading": null,
|
|
26439
|
+
"receiving": null
|
|
26440
|
+
};
|
|
26441
|
+
var GROK_SHAPES = {
|
|
26442
|
+
"blob": {
|
|
26443
|
+
label: "原始形态",
|
|
26444
|
+
d: "M228.541 114.228C228.541 130.133 225.184 145.994 218.738 160.534C212.674 174.217 203.904 186.669 193.065 196.988C155.933 232.34 99.497 238.596 55.5255 212.24C45.097 205.99 35.6851 198.072 27.7451 188.866C19.1926 178.953 12.3686 167.569 7.65781 155.351C2.60712 142.264 0 128.257 0 114.228C0 98.3219 3.35751 82.4611 9.80315 67.9215C15.8672 54.2382 24.6377 41.7862 35.4767 31.4668C72.6081 -3.88483 129.044 -10.1413 173.016 16.2153C183.444 22.4653 192.856 30.3829 200.796 39.5896C209.349 49.5018 216.173 60.8859 220.883 73.1037C225.934 86.1906 228.541 100.198 228.541 114.228Z"
|
|
26445
|
+
},
|
|
26446
|
+
"pebble": {
|
|
26447
|
+
label: "鹅卵石",
|
|
26448
|
+
d: "M114 8C177 8 217 45 217 109C217 178 181 219 112 219C43 219 12 181 12 113C12 48 51 8 114 8Z"
|
|
26449
|
+
},
|
|
26450
|
+
"squircle": {
|
|
26451
|
+
label: "圆角方",
|
|
26452
|
+
d: "M55 10H174Q219 10 219 55V174Q219 219 174 219H55Q10 219 10 174V55Q10 10 55 10Z"
|
|
26453
|
+
},
|
|
26454
|
+
"capsule": {
|
|
26455
|
+
label: "胶囊",
|
|
26456
|
+
d: "M61 31H168C202 31 220 65 220 114C220 163 202 197 168 197H61C27 197 9 163 9 114C9 65 27 31 61 31Z"
|
|
26457
|
+
},
|
|
26458
|
+
"triangle": {
|
|
26459
|
+
label: "三角体",
|
|
26460
|
+
d: "M114 9Q122 9 128 21L220 194Q227 210 207 210H21Q1 210 9 194L101 21Q106 9 114 9Z"
|
|
26461
|
+
},
|
|
26462
|
+
"hex": {
|
|
26463
|
+
label: "六边体",
|
|
26464
|
+
d: "M114 5L207 58Q218 64 218 78V153Q218 167 207 173L128 218Q114 226 100 218L21 173Q10 167 10 153V78Q10 64 21 58L100 12Q114 5 114 5Z"
|
|
26465
|
+
},
|
|
26466
|
+
"cloud": {
|
|
26467
|
+
label: "云朵",
|
|
26468
|
+
d: "M55 188C21 188 6 169 12 142C-1 113 20 86 51 84C61 48 96 35 124 55C151 28 195 46 195 82C226 91 235 128 213 149C214 174 193 190 165 188Z"
|
|
26469
|
+
},
|
|
26470
|
+
"drop": {
|
|
26471
|
+
label: "水滴",
|
|
26472
|
+
d: "M114 5C137 42 202 103 202 151C202 196 165 222 114 222C63 222 26 196 26 151C26 103 91 42 114 5Z"
|
|
26473
|
+
}
|
|
26474
|
+
};
|
|
26475
|
+
|
|
26476
|
+
var GROK_CATEGORIES = [{
|
|
26477
|
+
key: 'emotion',
|
|
26478
|
+
label: '情绪'
|
|
26479
|
+
}, {
|
|
26480
|
+
key: 'agent',
|
|
26481
|
+
label: 'Agent 状态'
|
|
26482
|
+
}, {
|
|
26483
|
+
key: 'lifecycle',
|
|
26484
|
+
label: '生命周期'
|
|
26485
|
+
}];
|
|
26486
|
+
|
|
26487
|
+
/** All 13 public grok state names, in upstream group order. */
|
|
26488
|
+
var GROK_NAMES = GROK_GROUPS.flatMap(function (group) {
|
|
26489
|
+
return group.states;
|
|
26490
|
+
});
|
|
26491
|
+
var GROK_STATE_META = {
|
|
26492
|
+
// emotion
|
|
26493
|
+
idle: {
|
|
26494
|
+
category: 'emotion',
|
|
26495
|
+
description: '中性平和的眼神,自然眨眼,不抢戏的默认姿态',
|
|
26496
|
+
source: 'upstream'
|
|
26497
|
+
},
|
|
26498
|
+
surprised: {
|
|
26499
|
+
category: 'emotion',
|
|
26500
|
+
description: '眼睛瞪得又大又圆,猝不及防',
|
|
26501
|
+
source: 'upstream'
|
|
26502
|
+
},
|
|
26503
|
+
angry: {
|
|
26504
|
+
category: 'emotion',
|
|
26505
|
+
description: '眉头下压、眼神凌厉,一脸不爽',
|
|
26506
|
+
source: 'upstream'
|
|
26507
|
+
},
|
|
26508
|
+
happy: {
|
|
26509
|
+
category: 'emotion',
|
|
26510
|
+
description: '眼睛弯成月牙,眉开眼笑',
|
|
26511
|
+
source: 'upstream'
|
|
26512
|
+
},
|
|
26513
|
+
confused: {
|
|
26514
|
+
category: 'emotion',
|
|
26515
|
+
description: '一眯眼一瞪眼、眼神歪斜,满脸问号',
|
|
26516
|
+
source: 'upstream'
|
|
26517
|
+
},
|
|
26518
|
+
sad: {
|
|
26519
|
+
category: 'emotion',
|
|
26520
|
+
description: '双眼低垂闭合,垂头丧气',
|
|
26521
|
+
source: 'upstream'
|
|
26522
|
+
},
|
|
26523
|
+
// agent
|
|
26524
|
+
listening: {
|
|
26525
|
+
category: 'agent',
|
|
26526
|
+
description: '温和注视、微微凝神,认真听对方说话',
|
|
26527
|
+
source: 'upstream'
|
|
26528
|
+
},
|
|
26529
|
+
thinking: {
|
|
26530
|
+
category: 'agent',
|
|
26531
|
+
description: '眼神左顾右盼、时眯时睁,像在琢磨问题',
|
|
26532
|
+
source: 'upstream'
|
|
26533
|
+
},
|
|
26534
|
+
searching: {
|
|
26535
|
+
category: 'agent',
|
|
26536
|
+
description: '目光快速扫动、不时瞪圆,像在搜寻目标',
|
|
26537
|
+
source: 'upstream'
|
|
26538
|
+
},
|
|
26539
|
+
working: {
|
|
26540
|
+
category: 'agent',
|
|
26541
|
+
description: '时绷紧眼神、时睁大,全神贯注在做事',
|
|
26542
|
+
source: 'upstream'
|
|
26543
|
+
},
|
|
26544
|
+
loading: {
|
|
26545
|
+
category: 'agent',
|
|
26546
|
+
description: '平静眼神配缓慢起伏的节奏,等待加载完成',
|
|
26547
|
+
source: 'upstream'
|
|
26548
|
+
},
|
|
26549
|
+
receiving: {
|
|
26550
|
+
category: 'agent',
|
|
26551
|
+
description: '平和注视、安静等待,像在接收新内容',
|
|
26552
|
+
source: 'upstream'
|
|
26553
|
+
},
|
|
26554
|
+
// lifecycle
|
|
26555
|
+
sleeping: {
|
|
26556
|
+
category: 'lifecycle',
|
|
26557
|
+
description: '双眼紧闭、呼吸般一起一伏,睡得正香',
|
|
26558
|
+
source: 'upstream'
|
|
26559
|
+
}
|
|
26560
|
+
};
|
|
26561
|
+
var _iterator = _createForOfIteratorHelper(GROK_NAMES),
|
|
26562
|
+
_step;
|
|
26563
|
+
try {
|
|
26564
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
26565
|
+
var name = _step.value;
|
|
26566
|
+
GROK_STATE_META[name].label = GROK_STATE_LABELS[name] || name;
|
|
26567
|
+
}
|
|
26568
|
+
|
|
26569
|
+
/**
|
|
26570
|
+
* Resolve the display name list for a docs tab: category key | 'all'.
|
|
26571
|
+
* Unknown tabs fall back to the full list.
|
|
26572
|
+
*/
|
|
26573
|
+
} catch (err) {
|
|
26574
|
+
_iterator.e(err);
|
|
26575
|
+
} finally {
|
|
26576
|
+
_iterator.f();
|
|
26577
|
+
}
|
|
26578
|
+
function getGrokNamesFor(tab) {
|
|
26579
|
+
if (tab === 'all') return _toConsumableArray(GROK_NAMES);
|
|
26580
|
+
if (GROK_CATEGORIES.some(function (category) {
|
|
26581
|
+
return category.key === tab;
|
|
26582
|
+
})) {
|
|
26583
|
+
return GROK_NAMES.filter(function (name) {
|
|
26584
|
+
return GROK_STATE_META[name].category === tab;
|
|
26585
|
+
});
|
|
26586
|
+
}
|
|
26587
|
+
return _toConsumableArray(GROK_NAMES);
|
|
26588
|
+
}
|
|
26589
|
+
|
|
26590
|
+
/** Get a single state's metadata (label included). Throws on unknown names. */
|
|
26591
|
+
function getGrokStateMeta(name) {
|
|
26592
|
+
var normalized = String(name || '').trim().toLowerCase();
|
|
26593
|
+
var meta = GROK_STATE_META[normalized];
|
|
26594
|
+
if (!meta) throw new Error("Unknown grok state: ".concat(normalized));
|
|
26595
|
+
return _objectSpread2({}, meta);
|
|
26596
|
+
}
|
|
26597
|
+
|
|
26575
26598
|
var MIAO_META = [['angry', '生气', 'negative'], ['cry', '哭泣', 'negative'], ['sad', '难过', 'negative'], ['sigh', '叹气', 'negative'], ['investigate', '观察', 'thinking'], ['mute', '安静', 'thinking'], ['ponder', '沉思', 'thinking'], ['question', '疑问', 'thinking'], ['static', '平静', 'thinking'], ['asleep', '睡着', 'physical'], ['yawn', '哈欠', 'physical'], ['badminton', '羽毛球', 'positive'], ['confident', '自信', 'positive'], ['laugh', '大笑', 'positive'], ['leisure', '悠闲', 'positive'], ['music', '音乐', 'positive'], ['smile', '微笑', 'positive'], ['yummy', '好吃', 'positive'], ['mock', '调侃', 'social'], ['shy', '害羞', 'social'], ['snigger', '偷笑', 'social'], ['panic', '慌张', 'reaction'], ['shocked', '震惊', 'reaction']];
|
|
26576
26599
|
var EMO_CATEGORIES = {
|
|
26577
26600
|
negative: '负面情绪',
|
|
@@ -26579,9 +26602,20 @@ var EMO_CATEGORIES = {
|
|
|
26579
26602
|
physical: '身体与特殊状态',
|
|
26580
26603
|
positive: '正面情绪',
|
|
26581
26604
|
social: '社交情境',
|
|
26582
|
-
reaction: '惊讶与反应'
|
|
26605
|
+
reaction: '惊讶与反应',
|
|
26606
|
+
lifecycle: '生命周期',
|
|
26607
|
+
emotion: '情绪反应',
|
|
26608
|
+
agent: '代理形态',
|
|
26609
|
+
product: '产品流程'
|
|
26583
26610
|
};
|
|
26584
|
-
var
|
|
26611
|
+
var GROK_META = GROK_NAMES.map(function (name) {
|
|
26612
|
+
return {
|
|
26613
|
+
name: name,
|
|
26614
|
+
label: GROK_STATE_META[name].label,
|
|
26615
|
+
category: GROK_STATE_META[name].category
|
|
26616
|
+
};
|
|
26617
|
+
});
|
|
26618
|
+
var EMO_PRESETS = [].concat(_toConsumableArray(MIAO_META.map(function (_ref) {
|
|
26585
26619
|
var _ref2 = _slicedToArray(_ref, 3),
|
|
26586
26620
|
name = _ref2[0],
|
|
26587
26621
|
label = _ref2[1],
|
|
@@ -26593,10 +26627,24 @@ var EMO_PRESETS = MIAO_META.map(function (_ref) {
|
|
|
26593
26627
|
category: category,
|
|
26594
26628
|
width: MIAO_ANIMATIONS[name].w,
|
|
26595
26629
|
height: MIAO_ANIMATIONS[name].h,
|
|
26630
|
+
engine: 'lottie',
|
|
26596
26631
|
frames: MIAO_ANIMATIONS[name].op - MIAO_ANIMATIONS[name].ip,
|
|
26597
26632
|
fps: MIAO_ANIMATIONS[name].fr
|
|
26598
26633
|
};
|
|
26599
|
-
})
|
|
26634
|
+
})), _toConsumableArray(GROK_META.map(function (_ref3) {
|
|
26635
|
+
var name = _ref3.name,
|
|
26636
|
+
label = _ref3.label,
|
|
26637
|
+
category = _ref3.category;
|
|
26638
|
+
return {
|
|
26639
|
+
type: 'grok',
|
|
26640
|
+
name: name,
|
|
26641
|
+
label: label,
|
|
26642
|
+
category: category,
|
|
26643
|
+
width: 229,
|
|
26644
|
+
height: 229,
|
|
26645
|
+
engine: 'grok'
|
|
26646
|
+
};
|
|
26647
|
+
})));
|
|
26600
26648
|
var MIAO_PART_KEYS = Object.values(MIAO_ANIMATIONS).reduce(function (acc, data) {
|
|
26601
26649
|
var metadata = data.miao && data.miao.partColors;
|
|
26602
26650
|
if (metadata) for (var _i = 0, _Object$keys = Object.keys(metadata); _i < _Object$keys.length; _i++) {
|
|
@@ -26605,14 +26653,35 @@ var MIAO_PART_KEYS = Object.values(MIAO_ANIMATIONS).reduce(function (acc, data)
|
|
|
26605
26653
|
}
|
|
26606
26654
|
return acc;
|
|
26607
26655
|
}, new Set());
|
|
26656
|
+
var GROK_SHAPE_KEYS = ['blob', 'pebble', 'squircle', 'capsule', 'triangle', 'hex', 'cloud', 'drop'];
|
|
26608
26657
|
var EMO_TYPES = [{
|
|
26609
26658
|
type: 'miao',
|
|
26610
26659
|
label: '喵',
|
|
26611
|
-
|
|
26660
|
+
defaultName: 'smile',
|
|
26661
|
+
engine: 'lottie',
|
|
26662
|
+
names: EMO_PRESETS.filter(function (item) {
|
|
26663
|
+
return item.type === 'miao';
|
|
26664
|
+
}).map(function (item) {
|
|
26612
26665
|
return item.name;
|
|
26613
26666
|
}),
|
|
26614
26667
|
partColors: _toConsumableArray(MIAO_PART_KEYS).sort()
|
|
26668
|
+
}, {
|
|
26669
|
+
type: 'grok',
|
|
26670
|
+
label: 'Grok',
|
|
26671
|
+
defaultName: 'idle',
|
|
26672
|
+
engine: 'grok',
|
|
26673
|
+
names: GROK_NAMES,
|
|
26674
|
+
partColors: ['body', 'eyes'],
|
|
26675
|
+
shapes: GROK_SHAPE_KEYS
|
|
26615
26676
|
}];
|
|
26677
|
+
function getEmoType(type) {
|
|
26678
|
+
var normalizedType = String(type || '').trim().toLowerCase();
|
|
26679
|
+
var definition = EMO_TYPES.find(function (item) {
|
|
26680
|
+
return item.type === normalizedType;
|
|
26681
|
+
});
|
|
26682
|
+
if (!definition) throw new Error("Unknown emo type: ".concat(normalizedType));
|
|
26683
|
+
return definition;
|
|
26684
|
+
}
|
|
26616
26685
|
function getEmoPreset() {
|
|
26617
26686
|
var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'miao';
|
|
26618
26687
|
var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'smile';
|
|
@@ -26632,42 +26701,349 @@ function getEmoAnimation() {
|
|
|
26632
26701
|
throw new Error("Unsupported emo type: ".concat(preset.type));
|
|
26633
26702
|
}
|
|
26634
26703
|
|
|
26635
|
-
|
|
26636
|
-
|
|
26637
|
-
|
|
26638
|
-
|
|
26639
|
-
|
|
26640
|
-
|
|
26641
|
-
|
|
26642
|
-
|
|
26643
|
-
|
|
26644
|
-
|
|
26645
|
-
|
|
26646
|
-
|
|
26647
|
-
|
|
26648
|
-
|
|
26649
|
-
|
|
26650
|
-
|
|
26651
|
-
|
|
26652
|
-
|
|
26653
|
-
|
|
26654
|
-
|
|
26704
|
+
/**
|
|
26705
|
+
* Color helpers. `normalizeColor` converts any supported CSS color
|
|
26706
|
+
* (hex / named / rgb() / rgba() / hsl() / hsla()) into a 6-digit hex string,
|
|
26707
|
+
* so renderers can keep working with #rrggbb only. rgba()/hsla() alpha is
|
|
26708
|
+
* intentionally dropped: the WebGL shader has no per-color alpha channel, and
|
|
26709
|
+
* the component is opaque by design — use component-level `opacity` for
|
|
26710
|
+
* transparency.
|
|
26711
|
+
*
|
|
26712
|
+
* `normalizeColorWithAlpha` keeps the alpha channel: it returns a 6-digit hex
|
|
26713
|
+
* when alpha is 1, an 8-digit #rrggbbaa hex when alpha < 1, and the literal
|
|
26714
|
+
* string 'transparent' for `transparent`. Use it for renderers (e.g. SVG)
|
|
26715
|
+
* that can represent per-color transparency.
|
|
26716
|
+
*/
|
|
26717
|
+
|
|
26718
|
+
var NAMED_COLORS = {
|
|
26719
|
+
aliceblue: '#f0f8ff',
|
|
26720
|
+
antiquewhite: '#faebd7',
|
|
26721
|
+
aqua: '#00ffff',
|
|
26722
|
+
aquamarine: '#7fffd4',
|
|
26723
|
+
azure: '#f0ffff',
|
|
26724
|
+
beige: '#f5f5dc',
|
|
26725
|
+
bisque: '#ffe4c4',
|
|
26726
|
+
black: '#000000',
|
|
26727
|
+
blanchedalmond: '#ffebcd',
|
|
26728
|
+
blue: '#0000ff',
|
|
26729
|
+
blueviolet: '#8a2be2',
|
|
26730
|
+
brown: '#a52a2a',
|
|
26731
|
+
burlywood: '#deb887',
|
|
26732
|
+
cadetblue: '#5f9ea0',
|
|
26733
|
+
chartreuse: '#7fff00',
|
|
26734
|
+
chocolate: '#d2691e',
|
|
26735
|
+
coral: '#ff7f50',
|
|
26736
|
+
cornflowerblue: '#6495ed',
|
|
26737
|
+
cornsilk: '#fff8dc',
|
|
26738
|
+
crimson: '#dc143c',
|
|
26739
|
+
cyan: '#00ffff',
|
|
26740
|
+
darkblue: '#00008b',
|
|
26741
|
+
darkcyan: '#008b8b',
|
|
26742
|
+
darkgoldenrod: '#b8860b',
|
|
26743
|
+
darkgray: '#a9a9a9',
|
|
26744
|
+
darkgreen: '#006400',
|
|
26745
|
+
darkgrey: '#a9a9a9',
|
|
26746
|
+
darkkhaki: '#bdb76b',
|
|
26747
|
+
darkmagenta: '#8b008b',
|
|
26748
|
+
darkolivegreen: '#556b2f',
|
|
26749
|
+
darkorange: '#ff8c00',
|
|
26750
|
+
darkorchid: '#9932cc',
|
|
26751
|
+
darkred: '#8b0000',
|
|
26752
|
+
darksalmon: '#e9967a',
|
|
26753
|
+
darkseagreen: '#8fbc8f',
|
|
26754
|
+
darkslateblue: '#483d8b',
|
|
26755
|
+
darkslategray: '#2f4f4f',
|
|
26756
|
+
darkslategrey: '#2f4f4f',
|
|
26757
|
+
darkturquoise: '#00ced1',
|
|
26758
|
+
darkviolet: '#9400d3',
|
|
26759
|
+
deeppink: '#ff1493',
|
|
26760
|
+
deepskyblue: '#00bfff',
|
|
26761
|
+
dimgray: '#696969',
|
|
26762
|
+
dimgrey: '#696969',
|
|
26763
|
+
dodgerblue: '#1e90ff',
|
|
26764
|
+
firebrick: '#b22222',
|
|
26765
|
+
floralwhite: '#fffaf0',
|
|
26766
|
+
forestgreen: '#228b22',
|
|
26767
|
+
fuchsia: '#ff00ff',
|
|
26768
|
+
gainsboro: '#dcdcdc',
|
|
26769
|
+
ghostwhite: '#f8f8ff',
|
|
26770
|
+
gold: '#ffd700',
|
|
26771
|
+
goldenrod: '#daa520',
|
|
26772
|
+
gray: '#808080',
|
|
26773
|
+
green: '#008000',
|
|
26774
|
+
greenyellow: '#adff2f',
|
|
26775
|
+
grey: '#808080',
|
|
26776
|
+
honeydew: '#f0fff0',
|
|
26777
|
+
hotpink: '#ff69b4',
|
|
26778
|
+
indianred: '#cd5c5c',
|
|
26779
|
+
indigo: '#4b0082',
|
|
26780
|
+
ivory: '#fffff0',
|
|
26781
|
+
khaki: '#f0e68c',
|
|
26782
|
+
lavender: '#e6e6fa',
|
|
26783
|
+
lavenderblush: '#fff0f5',
|
|
26784
|
+
lawngreen: '#7cfc00',
|
|
26785
|
+
lemonchiffon: '#fffacd',
|
|
26786
|
+
lightblue: '#add8e6',
|
|
26787
|
+
lightcoral: '#f08080',
|
|
26788
|
+
lightcyan: '#e0ffff',
|
|
26789
|
+
lightgoldenrodyellow: '#fafad2',
|
|
26790
|
+
lightgray: '#d3d3d3',
|
|
26791
|
+
lightgreen: '#90ee90',
|
|
26792
|
+
lightgrey: '#d3d3d3',
|
|
26793
|
+
lightpink: '#ffb6c1',
|
|
26794
|
+
lightsalmon: '#ffa07a',
|
|
26795
|
+
lightseagreen: '#20b2aa',
|
|
26796
|
+
lightskyblue: '#87cefa',
|
|
26797
|
+
lightslategray: '#778899',
|
|
26798
|
+
lightslategrey: '#778899',
|
|
26799
|
+
lightsteelblue: '#b0c4de',
|
|
26800
|
+
lightyellow: '#ffffe0',
|
|
26801
|
+
lime: '#00ff00',
|
|
26802
|
+
limegreen: '#32cd32',
|
|
26803
|
+
linen: '#faf0e6',
|
|
26804
|
+
magenta: '#ff00ff',
|
|
26805
|
+
maroon: '#800000',
|
|
26806
|
+
mediumaquamarine: '#66cdaa',
|
|
26807
|
+
mediumblue: '#0000cd',
|
|
26808
|
+
mediumorchid: '#ba55d3',
|
|
26809
|
+
mediumpurple: '#9370db',
|
|
26810
|
+
mediumseagreen: '#3cb371',
|
|
26811
|
+
mediumslateblue: '#7b68ee',
|
|
26812
|
+
mediumspringgreen: '#00fa9a',
|
|
26813
|
+
mediumturquoise: '#48d1cc',
|
|
26814
|
+
mediumvioletred: '#c71585',
|
|
26815
|
+
midnightblue: '#191970',
|
|
26816
|
+
mintcream: '#f5fffa',
|
|
26817
|
+
mistyrose: '#ffe4e1',
|
|
26818
|
+
moccasin: '#ffe4b5',
|
|
26819
|
+
navajowhite: '#ffdead',
|
|
26820
|
+
navy: '#000080',
|
|
26821
|
+
oldlace: '#fdf5e6',
|
|
26822
|
+
olive: '#808000',
|
|
26823
|
+
olivedrab: '#6b8e23',
|
|
26824
|
+
orange: '#ffa500',
|
|
26825
|
+
orangered: '#ff4500',
|
|
26826
|
+
orchid: '#da70d6',
|
|
26827
|
+
palegoldenrod: '#eee8aa',
|
|
26828
|
+
palegreen: '#98fb98',
|
|
26829
|
+
paleturquoise: '#afeeee',
|
|
26830
|
+
palevioletred: '#db7093',
|
|
26831
|
+
papayawhip: '#ffefd5',
|
|
26832
|
+
peachpuff: '#ffdab9',
|
|
26833
|
+
peru: '#cd853f',
|
|
26834
|
+
pink: '#ffc0cb',
|
|
26835
|
+
plum: '#dda0dd',
|
|
26836
|
+
powderblue: '#b0e0e6',
|
|
26837
|
+
purple: '#800080',
|
|
26838
|
+
rebeccapurple: '#663399',
|
|
26839
|
+
red: '#ff0000',
|
|
26840
|
+
rosybrown: '#bc8f8f',
|
|
26841
|
+
royalblue: '#4169e1',
|
|
26842
|
+
saddlebrown: '#8b4513',
|
|
26843
|
+
salmon: '#fa8072',
|
|
26844
|
+
sandybrown: '#f4a460',
|
|
26845
|
+
seagreen: '#2e8b57',
|
|
26846
|
+
seashell: '#fff5ee',
|
|
26847
|
+
sienna: '#a0522d',
|
|
26848
|
+
silver: '#c0c0c0',
|
|
26849
|
+
skyblue: '#87ceeb',
|
|
26850
|
+
slateblue: '#6a5acd',
|
|
26851
|
+
slategray: '#708090',
|
|
26852
|
+
slategrey: '#708090',
|
|
26853
|
+
snow: '#fffafa',
|
|
26854
|
+
springgreen: '#00ff7f',
|
|
26855
|
+
steelblue: '#4682b4',
|
|
26856
|
+
tan: '#d2b48c',
|
|
26857
|
+
teal: '#008080',
|
|
26858
|
+
thistle: '#d8bfd8',
|
|
26859
|
+
tomato: '#ff6347',
|
|
26860
|
+
turquoise: '#40e0d0',
|
|
26861
|
+
violet: '#ee82ee',
|
|
26862
|
+
wheat: '#f5deb3',
|
|
26863
|
+
white: '#ffffff',
|
|
26864
|
+
whitesmoke: '#f5f5f5',
|
|
26865
|
+
yellow: '#ffff00',
|
|
26866
|
+
yellowgreen: '#9acd32'
|
|
26867
|
+
};
|
|
26868
|
+
function clampChannel(value) {
|
|
26869
|
+
return Math.min(255, Math.max(0, Math.round(value)));
|
|
26655
26870
|
}
|
|
26656
|
-
function
|
|
26657
|
-
|
|
26658
|
-
if (!Number.isFinite(number)) return 1;
|
|
26659
|
-
return Math.min(1, Math.max(0, number));
|
|
26871
|
+
function clampUnit(value) {
|
|
26872
|
+
return Math.min(1, Math.max(0, value));
|
|
26660
26873
|
}
|
|
26661
|
-
function
|
|
26662
|
-
|
|
26874
|
+
function hexPair(value) {
|
|
26875
|
+
var text = clampChannel(value).toString(16);
|
|
26876
|
+
return text.length === 1 ? "0".concat(text) : text;
|
|
26663
26877
|
}
|
|
26664
|
-
|
|
26665
|
-
|
|
26878
|
+
|
|
26879
|
+
/**
|
|
26880
|
+
* Parse the argument list of rgb()/rgba()/hsl()/hsla() (comma syntax or
|
|
26881
|
+
* modern space + slash syntax). Returns { parts, alpha } where alpha is 1 when
|
|
26882
|
+
* omitted. Returns null when the argument list cannot be parsed.
|
|
26883
|
+
*/
|
|
26884
|
+
function parseFunctionArgs(args) {
|
|
26885
|
+
var parts = args.split(/[,\s]+/).map(function (part) {
|
|
26886
|
+
return part.trim();
|
|
26887
|
+
}).filter(function (part) {
|
|
26888
|
+
return part !== '' && part !== '/';
|
|
26889
|
+
});
|
|
26890
|
+
if (parts.length < 3) return null;
|
|
26891
|
+
var alpha = 1;
|
|
26892
|
+
if (parts.length >= 4) {
|
|
26893
|
+
var alphaText = parts.pop().trim();
|
|
26894
|
+
if (alphaText.endsWith('%')) {
|
|
26895
|
+
var percent = parseFloat(alphaText);
|
|
26896
|
+
if (!Number.isFinite(percent)) return null;
|
|
26897
|
+
alpha = clampUnit(percent / 100);
|
|
26898
|
+
} else {
|
|
26899
|
+
var number = Number(alphaText);
|
|
26900
|
+
if (!Number.isFinite(number)) return null;
|
|
26901
|
+
alpha = clampUnit(number);
|
|
26902
|
+
}
|
|
26903
|
+
}
|
|
26904
|
+
return {
|
|
26905
|
+
parts: parts,
|
|
26906
|
+
alpha: alpha
|
|
26907
|
+
};
|
|
26666
26908
|
}
|
|
26667
|
-
function
|
|
26668
|
-
if (value === '
|
|
26669
|
-
|
|
26670
|
-
|
|
26909
|
+
function parseChannel(value) {
|
|
26910
|
+
if (typeof value !== 'string' || value === '') return null;
|
|
26911
|
+
var text = value.trim();
|
|
26912
|
+
if (text.endsWith('%')) return clampChannel(parseFloat(text) / 100 * 255);
|
|
26913
|
+
var number = Number(text);
|
|
26914
|
+
return Number.isFinite(number) ? clampChannel(number) : null;
|
|
26915
|
+
}
|
|
26916
|
+
function parsePercent(value) {
|
|
26917
|
+
if (typeof value !== 'string' || value === '') return null;
|
|
26918
|
+
var text = value.trim();
|
|
26919
|
+
if (!text.endsWith('%')) return null;
|
|
26920
|
+
var number = parseFloat(text);
|
|
26921
|
+
return Number.isFinite(number) ? Math.min(100, Math.max(0, number)) : null;
|
|
26922
|
+
}
|
|
26923
|
+
function parseHue(value) {
|
|
26924
|
+
if (typeof value !== 'string' || value === '') return null;
|
|
26925
|
+
var number = parseFloat(value);
|
|
26926
|
+
return Number.isFinite(number) ? number : null;
|
|
26927
|
+
}
|
|
26928
|
+
|
|
26929
|
+
/** Standard HSL -> RGB. h in degrees, s/l in 0..100, returns r/g/b in 0..255. */
|
|
26930
|
+
function hslToRgb(h, s, l) {
|
|
26931
|
+
var hue = (h % 360 + 360) % 360 / 360;
|
|
26932
|
+
var saturation = s / 100;
|
|
26933
|
+
var lightness = l / 100;
|
|
26934
|
+
var chroma = (1 - Math.abs(2 * lightness - 1)) * saturation;
|
|
26935
|
+
var section = hue * 6;
|
|
26936
|
+
var x = chroma * (1 - Math.abs(section % 2 - 1));
|
|
26937
|
+
var red = 0;
|
|
26938
|
+
var green = 0;
|
|
26939
|
+
var blue = 0;
|
|
26940
|
+
if (section < 1) {
|
|
26941
|
+
red = chroma;
|
|
26942
|
+
green = x;
|
|
26943
|
+
} else if (section < 2) {
|
|
26944
|
+
red = x;
|
|
26945
|
+
green = chroma;
|
|
26946
|
+
} else if (section < 3) {
|
|
26947
|
+
green = chroma;
|
|
26948
|
+
blue = x;
|
|
26949
|
+
} else if (section < 4) {
|
|
26950
|
+
green = x;
|
|
26951
|
+
blue = chroma;
|
|
26952
|
+
} else if (section < 5) {
|
|
26953
|
+
red = x;
|
|
26954
|
+
blue = chroma;
|
|
26955
|
+
} else {
|
|
26956
|
+
red = chroma;
|
|
26957
|
+
blue = x;
|
|
26958
|
+
}
|
|
26959
|
+
var match = lightness - chroma / 2;
|
|
26960
|
+
return [Math.round((red + match) * 255), Math.round((green + match) * 255), Math.round((blue + match) * 255)];
|
|
26961
|
+
}
|
|
26962
|
+
|
|
26963
|
+
/**
|
|
26964
|
+
* Parse any supported CSS color. When keepAlpha is true the alpha channel is
|
|
26965
|
+
* preserved (8-digit hex for alpha < 1); when false it is dropped. 'transparent'
|
|
26966
|
+
* is only preserved when keepAlpha is true.
|
|
26967
|
+
*/
|
|
26968
|
+
function parseColor(value, keepAlpha) {
|
|
26969
|
+
if (typeof value !== 'string') return null;
|
|
26970
|
+
var input = value.trim();
|
|
26971
|
+
if (!input) return null;
|
|
26972
|
+
var lower = input.toLowerCase();
|
|
26973
|
+
if (NAMED_COLORS[lower]) return NAMED_COLORS[lower];
|
|
26974
|
+
// #rgb / #rgba / #rrggbb / #rrggbbaa,以及无 # 前缀的 6/8 位 hex(dicebear 习惯)
|
|
26975
|
+
var hexMatch = input.match(/^#?([0-9a-f]{3,8})$/i);
|
|
26976
|
+
if (hexMatch) {
|
|
26977
|
+
var _hex = hexMatch[1].toLowerCase();
|
|
26978
|
+
if (_hex.length === 3 || _hex.length === 4) {
|
|
26979
|
+
_hex = _hex.split('').map(function (c) {
|
|
26980
|
+
return c + c;
|
|
26981
|
+
}).join('');
|
|
26982
|
+
}
|
|
26983
|
+
return "#".concat(_hex.slice(0, 6));
|
|
26984
|
+
}
|
|
26985
|
+
var funcMatch = input.match(/^(rgba?|hsla?)\(([^)]*)\)$/i);
|
|
26986
|
+
if (!funcMatch) return null;
|
|
26987
|
+
var kind = funcMatch[1].toLowerCase();
|
|
26988
|
+
var parsed = parseFunctionArgs(funcMatch[2]);
|
|
26989
|
+
if (!parsed) return null;
|
|
26990
|
+
var parts = parsed.parts;
|
|
26991
|
+
parsed.alpha;
|
|
26992
|
+
var red;
|
|
26993
|
+
var green;
|
|
26994
|
+
var blue;
|
|
26995
|
+
if (kind === 'rgb' || kind === 'rgba') {
|
|
26996
|
+
if (parts.length !== 3) return null;
|
|
26997
|
+
red = parseChannel(parts[0]);
|
|
26998
|
+
green = parseChannel(parts[1]);
|
|
26999
|
+
blue = parseChannel(parts[2]);
|
|
27000
|
+
if (red === null || green === null || blue === null) return null;
|
|
27001
|
+
} else {
|
|
27002
|
+
if (parts.length !== 3) return null;
|
|
27003
|
+
var hue = parseHue(parts[0]);
|
|
27004
|
+
var saturation = parsePercent(parts[1]);
|
|
27005
|
+
var lightness = parsePercent(parts[2]);
|
|
27006
|
+
if (hue === null || saturation === null || lightness === null) return null;
|
|
27007
|
+
var _hslToRgb = hslToRgb(hue, saturation, lightness);
|
|
27008
|
+
var _hslToRgb2 = _slicedToArray(_hslToRgb, 3);
|
|
27009
|
+
red = _hslToRgb2[0];
|
|
27010
|
+
green = _hslToRgb2[1];
|
|
27011
|
+
blue = _hslToRgb2[2];
|
|
27012
|
+
}
|
|
27013
|
+
var hex = "#".concat(hexPair(red)).concat(hexPair(green)).concat(hexPair(blue));
|
|
27014
|
+
return hex;
|
|
27015
|
+
}
|
|
27016
|
+
|
|
27017
|
+
/**
|
|
27018
|
+
* Convert any supported CSS color into `#rrggbb`. Returns null when the
|
|
27019
|
+
* value cannot be parsed. Supports: #rgb / #rgba / #rrggbb / #rrggbbaa
|
|
27020
|
+
* (case-insensitive), bare 6/8-digit hex, CSS named colors, rgb() / rgba() /
|
|
27021
|
+
* hsl() / hsla() with comma or modern space syntax, including percentages.
|
|
27022
|
+
* Alpha is ignored.
|
|
27023
|
+
*/
|
|
27024
|
+
function normalizeColor(value) {
|
|
27025
|
+
return parseColor(value);
|
|
27026
|
+
}
|
|
27027
|
+
function hexToRgb01(color) {
|
|
27028
|
+
var hex = normalizeColor(color);
|
|
27029
|
+
if (!hex) return [0, 0, 0];
|
|
27030
|
+
var value = Number.parseInt(hex.slice(1), 16);
|
|
27031
|
+
return [(value >> 16 & 255) / 255, (value >> 8 & 255) / 255, (value & 255) / 255];
|
|
27032
|
+
}
|
|
27033
|
+
|
|
27034
|
+
var defaultPlayerPromises = {};
|
|
27035
|
+
function loadDefaultPlayer(renderer) {
|
|
27036
|
+
var key = renderer === 'canvas' ? 'canvas' : 'svg';
|
|
27037
|
+
if (!defaultPlayerPromises[key]) {
|
|
27038
|
+
var loader = key === 'canvas' ? import('lottie-web/build/player/lottie_light_canvas.js') : import('lottie-web/build/player/lottie_light.js');
|
|
27039
|
+
defaultPlayerPromises[key] = loader.then(function (module) {
|
|
27040
|
+
return module.default || module;
|
|
27041
|
+
});
|
|
27042
|
+
}
|
|
27043
|
+
return defaultPlayerPromises[key];
|
|
27044
|
+
}
|
|
27045
|
+
function cloneAnimationData(data) {
|
|
27046
|
+
return JSON.parse(JSON.stringify(data));
|
|
26671
27047
|
}
|
|
26672
27048
|
function normalizeSegment(value, preset) {
|
|
26673
27049
|
if (!Array.isArray(value) || value.length !== 2) return null;
|
|
@@ -26681,10 +27057,10 @@ function normalizeSegment(value, preset) {
|
|
|
26681
27057
|
});
|
|
26682
27058
|
}
|
|
26683
27059
|
|
|
26684
|
-
/**
|
|
26685
|
-
* Build a map of `paint.*` layer names → replacement rgb(0..1) tuples from the
|
|
26686
|
-
* partColors option and the animation's embedded `miao.partColors` metadata.
|
|
26687
|
-
* Keys not supported by the current animation are ignored.
|
|
27060
|
+
/**
|
|
27061
|
+
* Build a map of `paint.*` layer names → replacement rgb(0..1) tuples from the
|
|
27062
|
+
* partColors option and the animation's embedded `miao.partColors` metadata.
|
|
27063
|
+
* Keys not supported by the current animation are ignored.
|
|
26688
27064
|
*/
|
|
26689
27065
|
function buildPaintReplacements(animationData, partColors) {
|
|
26690
27066
|
var replacements = {};
|
|
@@ -26726,9 +27102,9 @@ function replacePaintProperty(property, rgb) {
|
|
|
26726
27102
|
}
|
|
26727
27103
|
}
|
|
26728
27104
|
|
|
26729
|
-
/**
|
|
26730
|
-
* Recursively replace every fill/stroke named `paint.<part>` (top-level layers
|
|
26731
|
-
* and precomp assets alike). Nodes without a matching paint name are untouched.
|
|
27105
|
+
/**
|
|
27106
|
+
* Recursively replace every fill/stroke named `paint.<part>` (top-level layers
|
|
27107
|
+
* and precomp assets alike). Nodes without a matching paint name are untouched.
|
|
26732
27108
|
*/
|
|
26733
27109
|
function applyPartColors(node, replacements) {
|
|
26734
27110
|
if (!node || _typeof(node) !== 'object') return;
|
|
@@ -26744,61 +27120,18 @@ function applyPartColors(node, replacements) {
|
|
|
26744
27120
|
}
|
|
26745
27121
|
}
|
|
26746
27122
|
|
|
26747
|
-
/**
|
|
26748
|
-
|
|
26749
|
-
|
|
26750
|
-
|
|
26751
|
-
|
|
26752
|
-
|
|
26753
|
-
|
|
26754
|
-
var
|
|
26755
|
-
|
|
26756
|
-
|
|
26757
|
-
var height = options.height === undefined ? 160 : options.height;
|
|
26758
|
-
var speed = normalizeSpeed(options.speed);
|
|
26759
|
-
var loop = options.loop !== false;
|
|
26760
|
-
var autoplay = options.autoplay !== false;
|
|
26761
|
-
var direction = normalizeDirection(options.direction);
|
|
26762
|
-
var opacity = normalizeOpacity(options.opacity);
|
|
26763
|
-
var fit = normalizeFit(options.fit);
|
|
26764
|
-
var renderer = normalizeRenderer(options.renderer);
|
|
26765
|
-
var paused = options.paused === true;
|
|
26766
|
-
var reducedMotion = false;
|
|
26767
|
-
var segment = normalizeSegment(options.segment, preset);
|
|
26768
|
-
var partColors = options.partColors && _typeof(options.partColors) === 'object' ? _objectSpread2({}, options.partColors) : {};
|
|
26769
|
-
var background = options.background == null ? 'transparent' : String(options.background);
|
|
26770
|
-
var label = typeof options.label === 'string' && options.label ? options.label : null;
|
|
26771
|
-
var disposed = false;
|
|
27123
|
+
/**
|
|
27124
|
+
* @param {object} env
|
|
27125
|
+
* @param {HTMLElement} env.stage lottie container
|
|
27126
|
+
* @param {object} env.s live facade state (preset/speed/loop/autoplay/...)
|
|
27127
|
+
* @param {object} env.emitter event bus
|
|
27128
|
+
*/
|
|
27129
|
+
function createMiaoRenderer(_ref) {
|
|
27130
|
+
var stage = _ref.stage,
|
|
27131
|
+
s = _ref.s,
|
|
27132
|
+
emitter = _ref.emitter;
|
|
26772
27133
|
var animation = null;
|
|
26773
|
-
var
|
|
26774
|
-
var emitter = createEmitter();
|
|
26775
|
-
var motionPreference = createReducedMotionPreference(options.respectReducedMotion !== false, function (matches) {
|
|
26776
|
-
reducedMotion = matches;
|
|
26777
|
-
if (disposed) return;
|
|
26778
|
-
updateRoot();
|
|
26779
|
-
if (!animation) return;
|
|
26780
|
-
if (paused || reducedMotion || !autoplay) animation.pause();else animation.play();
|
|
26781
|
-
});
|
|
26782
|
-
reducedMotion = motionPreference.matches();
|
|
26783
|
-
var root = document.createElement('div');
|
|
26784
|
-
root.className = 'dlc-emo-root';
|
|
26785
|
-
root.setAttribute('role', 'img');
|
|
26786
|
-
var stage = document.createElement('div');
|
|
26787
|
-
stage.className = 'dlc-emo-stage';
|
|
26788
|
-
root.appendChild(stage);
|
|
26789
|
-
container.appendChild(root);
|
|
26790
|
-
var updateRoot = function updateRoot() {
|
|
26791
|
-
root.style.width = parseSize(width);
|
|
26792
|
-
root.style.height = parseSize(height);
|
|
26793
|
-
root.style.setProperty('--dlc-emo-opacity', String(opacity));
|
|
26794
|
-
root.style.setProperty('--dlc-emo-background', background);
|
|
26795
|
-
root.dataset.type = preset.type;
|
|
26796
|
-
root.dataset.name = preset.name;
|
|
26797
|
-
root.dataset.fit = fit;
|
|
26798
|
-
root.dataset.renderer = renderer;
|
|
26799
|
-
root.dataset.paused = String(paused || reducedMotion);
|
|
26800
|
-
root.setAttribute('aria-label', label || "".concat(preset.label, "\u8868\u60C5\u52A8\u753B"));
|
|
26801
|
-
};
|
|
27134
|
+
var disposed = false;
|
|
26802
27135
|
var removeAnimationEvents = function removeAnimationEvents() {
|
|
26803
27136
|
if (!animation || !animation.__dlcHandlers) return;
|
|
26804
27137
|
var _iterator2 = _createForOfIteratorHelper(animation.__dlcHandlers),
|
|
@@ -26817,15 +27150,14 @@ function createEmo(container) {
|
|
|
26817
27150
|
}
|
|
26818
27151
|
animation.__dlcHandlers = null;
|
|
26819
27152
|
};
|
|
26820
|
-
var
|
|
27153
|
+
var destroy = function destroy() {
|
|
26821
27154
|
if (!animation) return;
|
|
26822
27155
|
removeAnimationEvents();
|
|
26823
27156
|
animation.destroy();
|
|
26824
27157
|
animation = null;
|
|
26825
|
-
stage.innerHTML = '';
|
|
26826
27158
|
};
|
|
26827
|
-
var attachAnimation = function attachAnimation(player, animationData
|
|
26828
|
-
if (disposed
|
|
27159
|
+
var attachAnimation = function attachAnimation(player, animationData) {
|
|
27160
|
+
if (disposed) return;
|
|
26829
27161
|
if (!player || typeof player.loadAnimation !== 'function') {
|
|
26830
27162
|
emitter.emit('error', {
|
|
26831
27163
|
message: 'createEmo: lottie-web player is unavailable'
|
|
@@ -26835,49 +27167,49 @@ function createEmo(container) {
|
|
|
26835
27167
|
try {
|
|
26836
27168
|
animation = player.loadAnimation({
|
|
26837
27169
|
container: stage,
|
|
26838
|
-
renderer: renderer,
|
|
26839
|
-
loop: loop,
|
|
27170
|
+
renderer: s.renderer,
|
|
27171
|
+
loop: s.loop,
|
|
26840
27172
|
autoplay: false,
|
|
26841
|
-
name:
|
|
27173
|
+
name: s.instanceName || "dlc-emo-".concat(s.preset.type, "-").concat(s.preset.name),
|
|
26842
27174
|
animationData: animationData,
|
|
26843
27175
|
rendererSettings: {
|
|
26844
|
-
preserveAspectRatio: fit === 'cover' ? 'xMidYMid slice' : fit === 'fill' ? 'none' : 'xMidYMid meet',
|
|
27176
|
+
preserveAspectRatio: s.fit === 'cover' ? 'xMidYMid slice' : s.fit === 'fill' ? 'none' : 'xMidYMid meet',
|
|
26845
27177
|
progressiveLoad: false,
|
|
26846
27178
|
runExpressions: false,
|
|
26847
|
-
title: label || "".concat(preset.label, "\u8868\u60C5\u52A8\u753B"),
|
|
26848
|
-
description: "".concat(preset.type, "/").concat(preset.name)
|
|
27179
|
+
title: s.label || "".concat(s.preset.label, "\u8868\u60C5\u52A8\u753B"),
|
|
27180
|
+
description: "".concat(s.preset.type, "/").concat(s.preset.name)
|
|
26849
27181
|
}
|
|
26850
27182
|
});
|
|
26851
27183
|
var handlers = [['DOMLoaded', function () {
|
|
26852
|
-
if (disposed
|
|
27184
|
+
if (disposed) return;
|
|
26853
27185
|
applyPlayback();
|
|
26854
27186
|
emitter.emit('ready', {
|
|
26855
|
-
preset: _objectSpread2({}, preset),
|
|
27187
|
+
preset: _objectSpread2({}, s.preset),
|
|
26856
27188
|
duration: animation.getDuration(false),
|
|
26857
|
-
frames: preset.frames
|
|
27189
|
+
frames: s.preset.frames
|
|
26858
27190
|
});
|
|
26859
27191
|
}], ['complete', function () {
|
|
26860
27192
|
return emitter.emit('complete', {
|
|
26861
|
-
preset: _objectSpread2({}, preset)
|
|
27193
|
+
preset: _objectSpread2({}, s.preset)
|
|
26862
27194
|
});
|
|
26863
27195
|
}], ['loopComplete', function () {
|
|
26864
27196
|
return emitter.emit('loopComplete', {
|
|
26865
|
-
preset: _objectSpread2({}, preset)
|
|
27197
|
+
preset: _objectSpread2({}, s.preset)
|
|
26866
27198
|
});
|
|
26867
27199
|
}], ['segmentStart', function () {
|
|
26868
27200
|
return emitter.emit('segmentStart', {
|
|
26869
|
-
segment: segment ? _toConsumableArray(segment) : null
|
|
27201
|
+
segment: s.segment ? _toConsumableArray(s.segment) : null
|
|
26870
27202
|
});
|
|
26871
27203
|
}], ['data_failed', function () {
|
|
26872
27204
|
return emitter.emit('error', {
|
|
26873
|
-
message: "Failed to load emo: ".concat(preset.type, "/").concat(preset.name)
|
|
27205
|
+
message: "Failed to load emo: ".concat(s.preset.type, "/").concat(s.preset.name)
|
|
26874
27206
|
});
|
|
26875
27207
|
}]];
|
|
26876
27208
|
animation.__dlcHandlers = handlers;
|
|
26877
|
-
handlers.forEach(function (
|
|
26878
|
-
var
|
|
26879
|
-
event =
|
|
26880
|
-
handler =
|
|
27209
|
+
handlers.forEach(function (_ref2) {
|
|
27210
|
+
var _ref3 = _slicedToArray(_ref2, 2),
|
|
27211
|
+
event = _ref3[0],
|
|
27212
|
+
handler = _ref3[1];
|
|
26881
27213
|
return animation.addEventListener(event, handler);
|
|
26882
27214
|
});
|
|
26883
27215
|
} catch (error) {
|
|
@@ -26888,191 +27220,881 @@ function createEmo(container) {
|
|
|
26888
27220
|
};
|
|
26889
27221
|
var applyPlayback = function applyPlayback() {
|
|
26890
27222
|
if (!animation) return;
|
|
26891
|
-
animation.setSpeed(speed);
|
|
26892
|
-
animation.setDirection(direction);
|
|
26893
|
-
if (segment) {
|
|
26894
|
-
animation.playSegments(segment, true);
|
|
26895
|
-
if (direction < 0) animation.goToAndStop(segment[1], true);else animation.goToAndStop(segment[0], true);
|
|
26896
|
-
} else if (direction < 0) {
|
|
26897
|
-
animation.goToAndStop(Math.max(0, preset.frames - 1), true);
|
|
27223
|
+
animation.setSpeed(s.speed);
|
|
27224
|
+
animation.setDirection(s.direction);
|
|
27225
|
+
if (s.segment) {
|
|
27226
|
+
animation.playSegments(s.segment, true);
|
|
27227
|
+
if (s.direction < 0) animation.goToAndStop(s.segment[1], true);else animation.goToAndStop(s.segment[0], true);
|
|
27228
|
+
} else if (s.direction < 0) {
|
|
27229
|
+
animation.goToAndStop(Math.max(0, s.preset.frames - 1), true);
|
|
26898
27230
|
}
|
|
26899
|
-
if (paused || reducedMotion || !autoplay) animation.pause();else animation.play();
|
|
27231
|
+
if (s.paused || s.reducedMotion || !s.autoplay) animation.pause();else animation.play();
|
|
26900
27232
|
};
|
|
26901
|
-
|
|
26902
|
-
|
|
26903
|
-
|
|
26904
|
-
|
|
26905
|
-
|
|
26906
|
-
|
|
26907
|
-
|
|
26908
|
-
|
|
26909
|
-
|
|
26910
|
-
|
|
26911
|
-
|
|
26912
|
-
|
|
26913
|
-
|
|
26914
|
-
|
|
27233
|
+
return {
|
|
27234
|
+
get animation() {
|
|
27235
|
+
return animation;
|
|
27236
|
+
},
|
|
27237
|
+
mount: function mount() {
|
|
27238
|
+
var animationData = cloneAnimationData(getEmoAnimation(s.preset.type, s.preset.name));
|
|
27239
|
+
applyPartColors(animationData, buildPaintReplacements(animationData, s.partColors));
|
|
27240
|
+
if (s.player) attachAnimation(s.player, animationData);else loadDefaultPlayer(s.renderer).then(function (player) {
|
|
27241
|
+
return attachAnimation(player, animationData);
|
|
27242
|
+
}).catch(function (error) {
|
|
27243
|
+
return emitter.emit('error', {
|
|
27244
|
+
message: String(error && error.message ? error.message : error)
|
|
27245
|
+
});
|
|
27246
|
+
});
|
|
27247
|
+
},
|
|
27248
|
+
play: function play() {
|
|
27249
|
+
if (animation && !s.reducedMotion) animation.play();
|
|
27250
|
+
},
|
|
27251
|
+
pause: function pause() {
|
|
27252
|
+
if (animation) animation.pause();
|
|
27253
|
+
},
|
|
27254
|
+
stop: function stop() {
|
|
27255
|
+
if (animation) animation.stop();
|
|
27256
|
+
},
|
|
27257
|
+
setPaused: function setPaused(value) {
|
|
27258
|
+
return value ? this.pause() : this.play();
|
|
27259
|
+
},
|
|
27260
|
+
setSpeed: function setSpeed(value) {
|
|
27261
|
+
if (animation) animation.setSpeed(value);
|
|
27262
|
+
},
|
|
27263
|
+
setDirection: function setDirection(value) {
|
|
27264
|
+
if (!animation) return;
|
|
27265
|
+
animation.setDirection(value);
|
|
27266
|
+
if (value < 0 && animation.currentFrame <= 0) {
|
|
27267
|
+
animation.goToAndStop(s.segment ? s.segment[1] : s.preset.frames - 1, true);
|
|
27268
|
+
}
|
|
27269
|
+
},
|
|
27270
|
+
setSegment: function setSegment(value) {
|
|
27271
|
+
applyPlayback();
|
|
27272
|
+
},
|
|
27273
|
+
setShape: function setShape() {},
|
|
27274
|
+
setInteractive: function setInteractive() {},
|
|
27275
|
+
dispose: function dispose() {
|
|
27276
|
+
if (disposed) return;
|
|
27277
|
+
disposed = true;
|
|
27278
|
+
destroy();
|
|
27279
|
+
stage.innerHTML = '';
|
|
27280
|
+
}
|
|
27281
|
+
};
|
|
27282
|
+
}
|
|
27283
|
+
|
|
27284
|
+
/**
|
|
27285
|
+
* Document-level shared rAF scheduler. Every component instance subscribes
|
|
27286
|
+
* its own frame callback; the whole page runs ONE animation loop (like the
|
|
27287
|
+
* original demo), which avoids jank from many competing rAF loops.
|
|
27288
|
+
*/
|
|
27289
|
+
var subscribers = [];
|
|
27290
|
+
var running = false;
|
|
27291
|
+
var rafId = 0;
|
|
27292
|
+
var last = 0;
|
|
27293
|
+
function tick(now) {
|
|
27294
|
+
if (!running) return;
|
|
27295
|
+
var activeItems = [];
|
|
27296
|
+
{
|
|
27297
|
+
var _iterator = _createForOfIteratorHelper(subscribers.slice()),
|
|
27298
|
+
_step;
|
|
27299
|
+
try {
|
|
27300
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
27301
|
+
var item = _step.value;
|
|
27302
|
+
try {
|
|
27303
|
+
if (!item.isPaused()) activeItems.push(item);
|
|
27304
|
+
} catch (_unused) {}
|
|
27305
|
+
}
|
|
27306
|
+
} catch (err) {
|
|
27307
|
+
_iterator.e(err);
|
|
27308
|
+
} finally {
|
|
27309
|
+
_iterator.f();
|
|
27310
|
+
}
|
|
27311
|
+
}
|
|
27312
|
+
if (activeItems.length === 0) {
|
|
27313
|
+
running = false;
|
|
27314
|
+
rafId = 0;
|
|
27315
|
+
last = 0;
|
|
27316
|
+
return;
|
|
27317
|
+
}
|
|
27318
|
+
var delta = last ? Math.min((now - last) / 1000, 0.05) : 0;
|
|
27319
|
+
last = now;
|
|
27320
|
+
// Schedule the next frame BEFORE running callbacks so one throwing
|
|
27321
|
+
// subscriber can never kill the whole animation loop.
|
|
27322
|
+
rafId = requestAnimationFrame(tick);
|
|
27323
|
+
for (var _i = 0, _activeItems = activeItems; _i < _activeItems.length; _i++) {
|
|
27324
|
+
var _item = _activeItems[_i];
|
|
27325
|
+
try {
|
|
27326
|
+
_item.onFrame(delta, now);
|
|
27327
|
+
} catch (error) {
|
|
27328
|
+
console.warn('[dlc-ui] frame error:', error);
|
|
27329
|
+
}
|
|
27330
|
+
}
|
|
27331
|
+
if (subscribers.length === 0) {
|
|
27332
|
+
cancelAnimationFrame(rafId);
|
|
27333
|
+
running = false;
|
|
27334
|
+
rafId = 0;
|
|
27335
|
+
}
|
|
27336
|
+
}
|
|
27337
|
+
function start() {
|
|
27338
|
+
if (running) return;
|
|
27339
|
+
running = true;
|
|
27340
|
+
last = 0;
|
|
27341
|
+
rafId = requestAnimationFrame(tick);
|
|
27342
|
+
}
|
|
27343
|
+
function wakeScheduler() {
|
|
27344
|
+
start();
|
|
27345
|
+
}
|
|
27346
|
+
function subscribeScheduler(onFrame, isPaused) {
|
|
27347
|
+
var item = {
|
|
27348
|
+
onFrame: onFrame,
|
|
27349
|
+
isPaused: isPaused
|
|
27350
|
+
};
|
|
27351
|
+
subscribers.push(item);
|
|
27352
|
+
start();
|
|
27353
|
+
return function () {
|
|
27354
|
+
var index = subscribers.indexOf(item);
|
|
27355
|
+
if (index !== -1) subscribers.splice(index, 1);
|
|
27356
|
+
if (subscribers.length === 0 && rafId) {
|
|
27357
|
+
cancelAnimationFrame(rafId);
|
|
27358
|
+
running = false;
|
|
27359
|
+
rafId = 0;
|
|
27360
|
+
}
|
|
27361
|
+
};
|
|
27362
|
+
}
|
|
27363
|
+
|
|
27364
|
+
/**
|
|
27365
|
+
* Gates drawing on "element intersects viewport AND the page tab is visible".
|
|
27366
|
+
* Falls back to always-visible when IntersectionObserver is unavailable.
|
|
27367
|
+
*/
|
|
27368
|
+
function createVisibilityGuard(element) {
|
|
27369
|
+
var onChange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
27370
|
+
var intersecting = true;
|
|
27371
|
+
var pageVisible = typeof document === 'undefined' || !document.hidden;
|
|
27372
|
+
var disposed = false;
|
|
27373
|
+
var observer = null;
|
|
27374
|
+
if (typeof IntersectionObserver !== 'undefined') {
|
|
27375
|
+
observer = new IntersectionObserver(function (entries) {
|
|
27376
|
+
intersecting = entries.some(function (entry) {
|
|
27377
|
+
return entry.isIntersecting;
|
|
27378
|
+
});
|
|
27379
|
+
if (typeof onChange === 'function') onChange();
|
|
27380
|
+
}, {
|
|
27381
|
+
rootMargin: '180px'
|
|
27382
|
+
});
|
|
27383
|
+
observer.observe(element);
|
|
27384
|
+
}
|
|
27385
|
+
var onVisibilityChange = function onVisibilityChange() {
|
|
27386
|
+
pageVisible = typeof document !== 'undefined' && !document.hidden;
|
|
27387
|
+
if (typeof onChange === 'function') onChange();
|
|
27388
|
+
};
|
|
27389
|
+
if (typeof document !== 'undefined') {
|
|
27390
|
+
document.addEventListener('visibilitychange', onVisibilityChange);
|
|
27391
|
+
}
|
|
27392
|
+
return {
|
|
27393
|
+
isVisible: function isVisible() {
|
|
27394
|
+
return intersecting && pageVisible;
|
|
27395
|
+
},
|
|
27396
|
+
dispose: function dispose() {
|
|
27397
|
+
if (disposed) return;
|
|
27398
|
+
disposed = true;
|
|
27399
|
+
if (observer) observer.disconnect();
|
|
27400
|
+
if (typeof document !== 'undefined') {
|
|
27401
|
+
document.removeEventListener('visibilitychange', onVisibilityChange);
|
|
27402
|
+
}
|
|
27403
|
+
}
|
|
27404
|
+
};
|
|
27405
|
+
}
|
|
27406
|
+
|
|
27407
|
+
var SVG_NS = 'http://www.w3.org/2000/svg';
|
|
27408
|
+
var EYE_CX = 114.2705;
|
|
27409
|
+
var EYE_R = 105;
|
|
27410
|
+
var BLINK_MS = 320;
|
|
27411
|
+
var MOTION_MS = 1100;
|
|
27412
|
+
var SPRING_STIFFNESS = 49;
|
|
27413
|
+
var DEFAULT_BODY = '#2f86ed';
|
|
27414
|
+
var DEFAULT_EYES = '#fffdf7';
|
|
27415
|
+
var clipCounter = 0;
|
|
27416
|
+
var MOTION_GROUPS = {
|
|
27417
|
+
bounce: ['happy'],
|
|
27418
|
+
tilt: ['listening', 'thinking', 'confused'],
|
|
27419
|
+
scan: ['searching', 'working'],
|
|
27420
|
+
turn: ['receiving'],
|
|
27421
|
+
pulse: ['sleeping', 'loading']
|
|
27422
|
+
};
|
|
27423
|
+
var MOTION_DURATIONS = {
|
|
27424
|
+
bounce: 0.85,
|
|
27425
|
+
tilt: 0.8,
|
|
27426
|
+
scan: 0.8,
|
|
27427
|
+
turn: 0.9,
|
|
27428
|
+
pulse: 0.9,
|
|
27429
|
+
glitch: 0.55
|
|
27430
|
+
};
|
|
27431
|
+
var MOTION_CLASSES = [].concat(_toConsumableArray(Object.keys(MOTION_GROUPS)), ['glitch']).map(function (name) {
|
|
27432
|
+
return "act-".concat(name);
|
|
27433
|
+
});
|
|
27434
|
+
function clamp(value, min, max) {
|
|
27435
|
+
return Math.max(min, Math.min(max, value));
|
|
27436
|
+
}
|
|
27437
|
+
function pathFromRing(ring) {
|
|
27438
|
+
return 'M' + ring.map(function (point) {
|
|
27439
|
+
return "".concat(point[0].toFixed(2), " ").concat(point[1].toFixed(2));
|
|
27440
|
+
}).join('L') + 'Z';
|
|
27441
|
+
}
|
|
27442
|
+
function ringCentroid(ring) {
|
|
27443
|
+
return ring.reduce(function (acc, point) {
|
|
27444
|
+
return [acc[0] + point[0] / ring.length, acc[1] + point[1] / ring.length];
|
|
27445
|
+
}, [0, 0]);
|
|
27446
|
+
}
|
|
27447
|
+
function randomBetween(range) {
|
|
27448
|
+
return range[0] + Math.random() * (range[1] - range[0]);
|
|
27449
|
+
}
|
|
27450
|
+
|
|
27451
|
+
/**
|
|
27452
|
+
* @param {object} env
|
|
27453
|
+
* @param {HTMLElement} env.stage SVG container
|
|
27454
|
+
* @param {object} env.s live facade state (preset/name/shape/interactive/speed/...)
|
|
27455
|
+
* @param {object} env.emitter event bus
|
|
27456
|
+
*/
|
|
27457
|
+
function createGrokRenderer(_ref) {
|
|
27458
|
+
var stage = _ref.stage,
|
|
27459
|
+
s = _ref.s,
|
|
27460
|
+
emitter = _ref.emitter;
|
|
27461
|
+
var disposed = false;
|
|
27462
|
+
var unsubscribe = null;
|
|
27463
|
+
var visibility = null;
|
|
27464
|
+
var _detachPointer = null;
|
|
27465
|
+
var svg = document.createElementNS(SVG_NS, 'svg');
|
|
27466
|
+
svg.setAttribute('class', 'dlc-grok');
|
|
27467
|
+
svg.setAttribute('viewBox', '-28 -28 285 285');
|
|
27468
|
+
svg.setAttribute('role', 'img');
|
|
27469
|
+
svg.setAttribute('preserveAspectRatio', s.fit === 'cover' ? 'xMidYMid slice' : s.fit === 'fill' ? 'none' : 'xMidYMid meet');
|
|
27470
|
+
var body = document.createElementNS(SVG_NS, 'path');
|
|
27471
|
+
body.setAttribute('class', 'dlc-grok__body');
|
|
27472
|
+
var defs = document.createElementNS(SVG_NS, 'defs');
|
|
27473
|
+
var clipPath = document.createElementNS(SVG_NS, 'clipPath');
|
|
27474
|
+
var clipId = "dlc-grok-clip-".concat(clipCounter++);
|
|
27475
|
+
clipPath.setAttribute('id', clipId);
|
|
27476
|
+
var clipShape = document.createElementNS(SVG_NS, 'path');
|
|
27477
|
+
clipPath.appendChild(clipShape);
|
|
27478
|
+
defs.appendChild(clipPath);
|
|
27479
|
+
var eyesGroup = document.createElementNS(SVG_NS, 'g');
|
|
27480
|
+
eyesGroup.setAttribute('class', 'dlc-grok__eyes');
|
|
27481
|
+
eyesGroup.setAttribute('clip-path', "url(#".concat(clipId, ")"));
|
|
27482
|
+
var eyes = [0, 1].map(function () {
|
|
27483
|
+
var path = document.createElementNS(SVG_NS, 'path');
|
|
27484
|
+
path.setAttribute('class', 'dlc-grok__eye');
|
|
27485
|
+
eyesGroup.appendChild(path);
|
|
27486
|
+
return path;
|
|
27487
|
+
});
|
|
27488
|
+
svg.appendChild(defs);
|
|
27489
|
+
svg.appendChild(body);
|
|
27490
|
+
svg.appendChild(eyesGroup);
|
|
27491
|
+
stage.appendChild(svg);
|
|
27492
|
+
var current = GROK_EXPRESSIONS[0].map(function (ring) {
|
|
27493
|
+
return ring.map(function (point) {
|
|
27494
|
+
return _toConsumableArray(point);
|
|
27495
|
+
});
|
|
27496
|
+
});
|
|
27497
|
+
var target = GROK_EXPRESSIONS[0];
|
|
27498
|
+
var expression = 0;
|
|
27499
|
+
var morph = 1;
|
|
27500
|
+
var velocity = 0;
|
|
27501
|
+
var blinkStart = 0;
|
|
27502
|
+
var blinkTimer = 0;
|
|
27503
|
+
var exprTimer = 0;
|
|
27504
|
+
var gazeX = 0;
|
|
27505
|
+
var gazeY = 0;
|
|
27506
|
+
var motionUntil = 0;
|
|
27507
|
+
var motionClass = null;
|
|
27508
|
+
var applyBodyShape = function applyBodyShape() {
|
|
27509
|
+
var shape = GROK_SHAPES[s.shape] || GROK_SHAPES.blob;
|
|
27510
|
+
body.setAttribute('d', shape.d);
|
|
27511
|
+
clipShape.setAttribute('d', shape.d);
|
|
27512
|
+
};
|
|
27513
|
+
var applyColors = function applyColors() {
|
|
27514
|
+
var resolve = function resolve(value, fallback) {
|
|
27515
|
+
var hex = normalizeColor(value);
|
|
27516
|
+
return hex || fallback;
|
|
27517
|
+
};
|
|
27518
|
+
// 用 inline style 而不是 presentation attribute:emo.css 里
|
|
27519
|
+
// .dlc-grok__body / .dlc-grok__eye 的 fill 规则优先级更高,attribute 会被覆盖。
|
|
27520
|
+
body.style.fill = resolve(s.partColors.body, DEFAULT_BODY);
|
|
27521
|
+
eyes.forEach(function (path) {
|
|
27522
|
+
path.style.fill = resolve(s.partColors.eyes, DEFAULT_EYES);
|
|
27523
|
+
});
|
|
27524
|
+
};
|
|
27525
|
+
var rings = function rings() {
|
|
27526
|
+
return current.map(function (ring, eye) {
|
|
27527
|
+
return ring.map(function (point, i) {
|
|
27528
|
+
return [point[0] + (target[eye][i][0] - point[0]) * clamp(morph, 0, 1), point[1] + (target[eye][i][1] - point[1]) * clamp(morph, 0, 1)];
|
|
27529
|
+
});
|
|
27530
|
+
});
|
|
27531
|
+
};
|
|
27532
|
+
var chooseExpression = function chooseExpression(index) {
|
|
27533
|
+
current = rings();
|
|
27534
|
+
target = GROK_EXPRESSIONS[index];
|
|
27535
|
+
expression = index;
|
|
27536
|
+
morph = 0;
|
|
27537
|
+
velocity = 0;
|
|
27538
|
+
};
|
|
27539
|
+
var setExpression = function setExpression(index) {
|
|
27540
|
+
current = GROK_EXPRESSIONS[index].map(function (ring) {
|
|
27541
|
+
return ring.map(function (point) {
|
|
27542
|
+
return _toConsumableArray(point);
|
|
26915
27543
|
});
|
|
26916
27544
|
});
|
|
27545
|
+
target = GROK_EXPRESSIONS[index];
|
|
27546
|
+
expression = index;
|
|
27547
|
+
morph = 1;
|
|
27548
|
+
velocity = 0;
|
|
27549
|
+
};
|
|
27550
|
+
var blinkScale = function blinkScale(now) {
|
|
27551
|
+
if (!blinkStart) return 1;
|
|
27552
|
+
var t = (now - blinkStart) / (BLINK_MS / s.speed);
|
|
27553
|
+
if (t >= 1) {
|
|
27554
|
+
blinkStart = 0;
|
|
27555
|
+
return 1;
|
|
27556
|
+
}
|
|
27557
|
+
return Math.max(t < 0.42 ? 1 - t / 0.42 : (t - 0.42) / 0.58, 0.04);
|
|
27558
|
+
};
|
|
27559
|
+
var renderEyes = function renderEyes(now) {
|
|
27560
|
+
var shown = rings();
|
|
27561
|
+
var blink = blinkScale(now);
|
|
27562
|
+
shown.forEach(function (ring, i) {
|
|
27563
|
+
var center = ringCentroid(ring);
|
|
27564
|
+
var base = Math.asin(clamp((center[0] - EYE_CX) / EYE_R, -1, 1));
|
|
27565
|
+
var depth = Math.cos(base);
|
|
27566
|
+
var perspective = Math.max(depth, 0.02) / Math.max(Math.cos(base), 0.02);
|
|
27567
|
+
var x = EYE_CX + EYE_R * Math.sin(base) + gazeX;
|
|
27568
|
+
var y = center[1] + gazeY;
|
|
27569
|
+
eyes[i].setAttribute('d', pathFromRing(ring));
|
|
27570
|
+
eyes[i].setAttribute('transform', "translate(".concat(x, " ").concat(y, ") scale(").concat(clamp(perspective, 0.02, 2.4), " ").concat(blink, ") translate(").concat(-center[0], " ").concat(-center[1], ")"));
|
|
27571
|
+
eyes[i].style.opacity = depth > 0.02 ? '1' : '0';
|
|
27572
|
+
});
|
|
26917
27573
|
};
|
|
27574
|
+
var motionClassFor = function motionClassFor(name) {
|
|
27575
|
+
for (var _i = 0, _Object$entries = Object.entries(MOTION_GROUPS); _i < _Object$entries.length; _i++) {
|
|
27576
|
+
var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
|
|
27577
|
+
className = _Object$entries$_i[0],
|
|
27578
|
+
states = _Object$entries$_i[1];
|
|
27579
|
+
if (states.includes(name)) return className;
|
|
27580
|
+
}
|
|
27581
|
+
return 'glitch';
|
|
27582
|
+
};
|
|
27583
|
+
var applyBodyMotion = function applyBodyMotion() {
|
|
27584
|
+
var _svg$classList;
|
|
27585
|
+
var className = motionClassFor(s.preset.name);
|
|
27586
|
+
(_svg$classList = svg.classList).remove.apply(_svg$classList, _toConsumableArray(MOTION_CLASSES));
|
|
27587
|
+
svg.classList.add("act-".concat(className));
|
|
27588
|
+
svg.style.animationDuration = "".concat(MOTION_DURATIONS[className] / s.speed, "s");
|
|
27589
|
+
svg.style.animationPlayState = s.paused || s.reducedMotion || !s.autoplay ? 'paused' : 'running';
|
|
27590
|
+
motionClass = className;
|
|
27591
|
+
motionUntil = 0;
|
|
27592
|
+
};
|
|
27593
|
+
var scheduleExpression = function scheduleExpression() {
|
|
27594
|
+
var cadence = GROK_EXPR_CADENCE[s.preset.name];
|
|
27595
|
+
exprTimer = cadence && s.loop ? randomBetween(cadence) : 0;
|
|
27596
|
+
};
|
|
27597
|
+
var scheduleBlink = function scheduleBlink() {
|
|
27598
|
+
var cadence = GROK_BLINK[s.preset.name];
|
|
27599
|
+
blinkTimer = cadence ? randomBetween(cadence) : 0;
|
|
27600
|
+
};
|
|
27601
|
+
var onFrame = function onFrame(delta, now) {
|
|
27602
|
+
if (disposed || s.paused || s.reducedMotion || !s.autoplay) return;
|
|
27603
|
+
if (exprTimer > 0) {
|
|
27604
|
+
exprTimer -= delta * 1000 * s.speed;
|
|
27605
|
+
if (exprTimer <= 0) {
|
|
27606
|
+
var pool = GROK_POOLS[s.preset.name] || [expression];
|
|
27607
|
+
chooseExpression(pool[Math.floor(Math.random() * pool.length)]);
|
|
27608
|
+
scheduleExpression();
|
|
27609
|
+
}
|
|
27610
|
+
}
|
|
27611
|
+
if (blinkTimer > 0) {
|
|
27612
|
+
blinkTimer -= delta * 1000 * s.speed;
|
|
27613
|
+
if (blinkTimer <= 0) {
|
|
27614
|
+
blinkStart = now;
|
|
27615
|
+
scheduleBlink();
|
|
27616
|
+
}
|
|
27617
|
+
}
|
|
27618
|
+
if (motionClass) {
|
|
27619
|
+
if (motionUntil === 0) motionUntil = now + MOTION_MS / s.speed;else if (now >= motionUntil) {
|
|
27620
|
+
svg.classList.remove("act-".concat(motionClass));
|
|
27621
|
+
motionClass = null;
|
|
27622
|
+
}
|
|
27623
|
+
}
|
|
27624
|
+
var step = Math.min(delta * s.speed, 0.1);
|
|
27625
|
+
velocity += (-14 * velocity - SPRING_STIFFNESS * (morph - 1)) * step;
|
|
27626
|
+
morph += velocity * step;
|
|
27627
|
+
if (!Number.isFinite(morph)) {
|
|
27628
|
+
morph = 1;
|
|
27629
|
+
velocity = 0;
|
|
27630
|
+
}
|
|
27631
|
+
renderEyes(now);
|
|
27632
|
+
};
|
|
27633
|
+
var renderInitial = function renderInitial() {
|
|
27634
|
+
var pool = GROK_POOLS[s.preset.name] || [0];
|
|
27635
|
+
setExpression(pool[0]);
|
|
27636
|
+
renderEyes(0);
|
|
27637
|
+
};
|
|
27638
|
+
var onPointerMove = function onPointerMove(event) {
|
|
27639
|
+
var rect = stage.getBoundingClientRect();
|
|
27640
|
+
gazeX = clamp((event.clientX - rect.left) / rect.width * 2 - 1, -0.6, 0.6) * 22;
|
|
27641
|
+
gazeY = clamp((event.clientY - rect.top) / rect.height * 2 - 1, -0.6, 0.6) * 14;
|
|
27642
|
+
};
|
|
27643
|
+
var onPointerLeave = function onPointerLeave() {
|
|
27644
|
+
gazeX = 0;
|
|
27645
|
+
gazeY = 0;
|
|
27646
|
+
};
|
|
27647
|
+
var onPointerDown = function onPointerDown() {
|
|
27648
|
+
blinkStart = performance.now();
|
|
27649
|
+
};
|
|
27650
|
+
var attachPointer = function attachPointer() {
|
|
27651
|
+
if (!s.interactive || disposed) return;
|
|
27652
|
+
stage.addEventListener('pointermove', onPointerMove);
|
|
27653
|
+
stage.addEventListener('pointerleave', onPointerLeave);
|
|
27654
|
+
stage.addEventListener('pointerdown', onPointerDown);
|
|
27655
|
+
_detachPointer = function detachPointer() {
|
|
27656
|
+
stage.removeEventListener('pointermove', onPointerMove);
|
|
27657
|
+
stage.removeEventListener('pointerleave', onPointerLeave);
|
|
27658
|
+
stage.removeEventListener('pointerdown', onPointerDown);
|
|
27659
|
+
_detachPointer = null;
|
|
27660
|
+
};
|
|
27661
|
+
};
|
|
27662
|
+
var setPointerAttached = function setPointerAttached(enabled) {
|
|
27663
|
+
if (enabled && !_detachPointer) attachPointer();else if (!enabled && _detachPointer) _detachPointer();
|
|
27664
|
+
if (!enabled) {
|
|
27665
|
+
gazeX = 0;
|
|
27666
|
+
gazeY = 0;
|
|
27667
|
+
}
|
|
27668
|
+
};
|
|
27669
|
+
return {
|
|
27670
|
+
get animation() {
|
|
27671
|
+
return svg;
|
|
27672
|
+
},
|
|
27673
|
+
mount: function mount() {
|
|
27674
|
+
applyBodyShape();
|
|
27675
|
+
applyColors();
|
|
27676
|
+
renderInitial();
|
|
27677
|
+
applyBodyMotion();
|
|
27678
|
+
scheduleExpression();
|
|
27679
|
+
scheduleBlink();
|
|
27680
|
+
visibility = createVisibilityGuard(stage, wakeScheduler);
|
|
27681
|
+
unsubscribe = subscribeScheduler(onFrame, function () {
|
|
27682
|
+
return s.paused || s.reducedMotion || !s.autoplay || !visibility.isVisible();
|
|
27683
|
+
});
|
|
27684
|
+
setPointerAttached(s.interactive);
|
|
27685
|
+
emitter.emit('ready', {
|
|
27686
|
+
preset: _objectSpread2({}, s.preset),
|
|
27687
|
+
duration: null
|
|
27688
|
+
});
|
|
27689
|
+
},
|
|
27690
|
+
play: function play() {
|
|
27691
|
+
svg.style.animationPlayState = s.reducedMotion ? 'paused' : 'running';
|
|
27692
|
+
wakeScheduler();
|
|
27693
|
+
},
|
|
27694
|
+
pause: function pause() {
|
|
27695
|
+
svg.style.animationPlayState = 'paused';
|
|
27696
|
+
},
|
|
27697
|
+
stop: function stop() {
|
|
27698
|
+
renderInitial();
|
|
27699
|
+
this.pause();
|
|
27700
|
+
},
|
|
27701
|
+
setPaused: function setPaused(value) {
|
|
27702
|
+
return value ? this.pause() : this.play();
|
|
27703
|
+
},
|
|
27704
|
+
setSpeed: function setSpeed() {
|
|
27705
|
+
var className = motionClassFor(s.preset.name);
|
|
27706
|
+
svg.style.animationDuration = "".concat(MOTION_DURATIONS[className] / s.speed, "s");
|
|
27707
|
+
motionUntil = 0;
|
|
27708
|
+
},
|
|
27709
|
+
setDirection: function setDirection() {},
|
|
27710
|
+
setSegment: function setSegment() {},
|
|
27711
|
+
setShape: function setShape() {
|
|
27712
|
+
applyBodyShape();
|
|
27713
|
+
},
|
|
27714
|
+
setInteractive: function setInteractive(value) {
|
|
27715
|
+
setPointerAttached(value === true);
|
|
27716
|
+
},
|
|
27717
|
+
dispose: function dispose() {
|
|
27718
|
+
var _svg$classList2;
|
|
27719
|
+
if (disposed) return;
|
|
27720
|
+
disposed = true;
|
|
27721
|
+
if (unsubscribe) {
|
|
27722
|
+
unsubscribe();
|
|
27723
|
+
unsubscribe = null;
|
|
27724
|
+
}
|
|
27725
|
+
if (visibility) {
|
|
27726
|
+
visibility.dispose();
|
|
27727
|
+
visibility = null;
|
|
27728
|
+
}
|
|
27729
|
+
if (_detachPointer) _detachPointer();
|
|
27730
|
+
(_svg$classList2 = svg.classList).remove.apply(_svg$classList2, _toConsumableArray(MOTION_CLASSES));
|
|
27731
|
+
svg.remove();
|
|
27732
|
+
}
|
|
27733
|
+
};
|
|
27734
|
+
}
|
|
27735
|
+
|
|
27736
|
+
var SPEED_MIN = 0.1;
|
|
27737
|
+
var SPEED_MAX = 4;
|
|
27738
|
+
var RENDERER_FACTORIES = {
|
|
27739
|
+
miao: createMiaoRenderer,
|
|
27740
|
+
grok: createGrokRenderer
|
|
27741
|
+
};
|
|
27742
|
+
function normalizeSpeed(value) {
|
|
27743
|
+
var number = Number(value);
|
|
27744
|
+
if (!Number.isFinite(number)) return 1;
|
|
27745
|
+
return Math.min(SPEED_MAX, Math.max(SPEED_MIN, number));
|
|
27746
|
+
}
|
|
27747
|
+
function normalizeOpacity(value) {
|
|
27748
|
+
var number = Number(value);
|
|
27749
|
+
if (!Number.isFinite(number)) return 1;
|
|
27750
|
+
return Math.min(1, Math.max(0, number));
|
|
27751
|
+
}
|
|
27752
|
+
function normalizeDirection(value) {
|
|
27753
|
+
return value === -1 || value === 'reverse' ? -1 : 1;
|
|
27754
|
+
}
|
|
27755
|
+
function normalizeRenderer(value) {
|
|
27756
|
+
return value === 'canvas' ? 'canvas' : 'svg';
|
|
27757
|
+
}
|
|
27758
|
+
function normalizeFit(value) {
|
|
27759
|
+
if (value === 'cover') return 'cover';
|
|
27760
|
+
if (value === 'fill' || value === 'stretch' || value === 'none') return 'fill';
|
|
27761
|
+
return 'contain';
|
|
27762
|
+
}
|
|
27763
|
+
function normalizeShape(value) {
|
|
27764
|
+
var shapes = getEmoType('grok').shapes;
|
|
27765
|
+
return shapes.includes(value) ? value : 'blob';
|
|
27766
|
+
}
|
|
27767
|
+
|
|
27768
|
+
/** Mount an emo of the given type (miao | grok) into a container. */
|
|
27769
|
+
function createEmo(container) {
|
|
27770
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
27771
|
+
if (!container || typeof container.appendChild !== 'function') {
|
|
27772
|
+
throw new Error('createEmo: container element is required');
|
|
27773
|
+
}
|
|
27774
|
+
var type = getEmoType(options.type || 'miao').type;
|
|
27775
|
+
var name = options.name || getEmoType(type).defaultName;
|
|
27776
|
+
var s = {
|
|
27777
|
+
type: type,
|
|
27778
|
+
name: name,
|
|
27779
|
+
preset: getEmoPreset(type, name),
|
|
27780
|
+
width: options.width === undefined ? 160 : options.width,
|
|
27781
|
+
height: options.height === undefined ? 160 : options.height,
|
|
27782
|
+
speed: normalizeSpeed(options.speed),
|
|
27783
|
+
loop: options.loop !== false,
|
|
27784
|
+
autoplay: options.autoplay !== false,
|
|
27785
|
+
direction: normalizeDirection(options.direction),
|
|
27786
|
+
opacity: normalizeOpacity(options.opacity),
|
|
27787
|
+
fit: normalizeFit(options.fit),
|
|
27788
|
+
renderer: normalizeRenderer(options.renderer),
|
|
27789
|
+
paused: options.paused === true,
|
|
27790
|
+
segment: null,
|
|
27791
|
+
partColors: options.partColors && _typeof(options.partColors) === 'object' ? _objectSpread2({}, options.partColors) : {},
|
|
27792
|
+
shape: normalizeShape(options.shape),
|
|
27793
|
+
interactive: options.interactive === true,
|
|
27794
|
+
background: options.background == null ? 'transparent' : String(options.background),
|
|
27795
|
+
label: typeof options.label === 'string' && options.label ? options.label : null,
|
|
27796
|
+
reducedMotion: false,
|
|
27797
|
+
player: options.player,
|
|
27798
|
+
instanceName: options.instanceName,
|
|
27799
|
+
disposed: false
|
|
27800
|
+
};
|
|
27801
|
+
if (type === 'miao') s.segment = normalizeSegment(options.segment, s.preset);
|
|
27802
|
+
var rendererImpl = null;
|
|
27803
|
+
var emitter = createEmitter();
|
|
27804
|
+
var root = document.createElement('div');
|
|
27805
|
+
root.className = 'dlc-emo-root';
|
|
27806
|
+
root.setAttribute('role', 'img');
|
|
27807
|
+
var stage = document.createElement('div');
|
|
27808
|
+
stage.className = 'dlc-emo-stage';
|
|
27809
|
+
root.appendChild(stage);
|
|
27810
|
+
container.appendChild(root);
|
|
27811
|
+
var updateRoot = function updateRoot() {
|
|
27812
|
+
var effectiveRenderer = s.type === 'grok' ? 'svg' : s.renderer;
|
|
27813
|
+
root.style.width = parseSize(s.width);
|
|
27814
|
+
root.style.height = parseSize(s.height);
|
|
27815
|
+
root.style.setProperty('--dlc-emo-opacity', String(s.opacity));
|
|
27816
|
+
root.style.setProperty('--dlc-emo-background', s.background);
|
|
27817
|
+
root.dataset.type = s.preset.type;
|
|
27818
|
+
root.dataset.name = s.preset.name;
|
|
27819
|
+
root.dataset.fit = s.fit;
|
|
27820
|
+
root.dataset.renderer = effectiveRenderer;
|
|
27821
|
+
root.dataset.paused = String(s.paused || s.reducedMotion);
|
|
27822
|
+
root.setAttribute('aria-label', s.label || "".concat(s.preset.label, "\u8868\u60C5\u52A8\u753B"));
|
|
27823
|
+
};
|
|
27824
|
+
var destroyCurrent = function destroyCurrent() {
|
|
27825
|
+
if (rendererImpl) {
|
|
27826
|
+
rendererImpl.dispose();
|
|
27827
|
+
rendererImpl = null;
|
|
27828
|
+
}
|
|
27829
|
+
};
|
|
27830
|
+
var mount = function mount() {
|
|
27831
|
+
destroyCurrent();
|
|
27832
|
+
if (s.disposed) return;
|
|
27833
|
+
s.preset = getEmoPreset(s.type, s.name);
|
|
27834
|
+
if (s.type === 'miao' && s.segment) s.segment = normalizeSegment(s.segment, s.preset);
|
|
27835
|
+
updateRoot();
|
|
27836
|
+
rendererImpl = RENDERER_FACTORIES[s.type]({
|
|
27837
|
+
stage: stage,
|
|
27838
|
+
s: s,
|
|
27839
|
+
emitter: emitter
|
|
27840
|
+
});
|
|
27841
|
+
rendererImpl.mount();
|
|
27842
|
+
};
|
|
27843
|
+
var motionPreference = createReducedMotionPreference(options.respectReducedMotion !== false, function (matches) {
|
|
27844
|
+
s.reducedMotion = matches;
|
|
27845
|
+
if (s.disposed) return;
|
|
27846
|
+
updateRoot();
|
|
27847
|
+
if (!rendererImpl) return;
|
|
27848
|
+
if (s.paused || s.reducedMotion || !s.autoplay) rendererImpl.pause();else rendererImpl.play();
|
|
27849
|
+
});
|
|
27850
|
+
s.reducedMotion = motionPreference.matches();
|
|
26918
27851
|
updateRoot();
|
|
26919
|
-
|
|
27852
|
+
mount();
|
|
26920
27853
|
return {
|
|
26921
27854
|
element: root,
|
|
26922
27855
|
get animation() {
|
|
26923
|
-
return animation;
|
|
27856
|
+
return rendererImpl ? rendererImpl.animation : null;
|
|
26924
27857
|
},
|
|
26925
27858
|
get preset() {
|
|
26926
|
-
return _objectSpread2({}, preset);
|
|
27859
|
+
return _objectSpread2({}, s.preset);
|
|
26927
27860
|
},
|
|
26928
27861
|
on: emitter.on,
|
|
26929
27862
|
off: emitter.off,
|
|
26930
27863
|
play: function play() {
|
|
26931
|
-
paused = false;
|
|
27864
|
+
s.paused = false;
|
|
26932
27865
|
updateRoot();
|
|
26933
|
-
if (
|
|
27866
|
+
if (rendererImpl && !s.reducedMotion) rendererImpl.play();
|
|
26934
27867
|
return this;
|
|
26935
27868
|
},
|
|
26936
27869
|
pause: function pause() {
|
|
26937
|
-
paused = true;
|
|
27870
|
+
s.paused = true;
|
|
26938
27871
|
root.dataset.paused = 'true';
|
|
26939
|
-
if (
|
|
27872
|
+
if (rendererImpl) rendererImpl.pause();
|
|
26940
27873
|
return this;
|
|
26941
27874
|
},
|
|
26942
27875
|
stop: function stop() {
|
|
26943
|
-
paused = true;
|
|
27876
|
+
s.paused = true;
|
|
26944
27877
|
root.dataset.paused = 'true';
|
|
26945
|
-
if (
|
|
27878
|
+
if (rendererImpl) rendererImpl.stop();
|
|
26946
27879
|
return this;
|
|
26947
27880
|
},
|
|
26948
27881
|
setPaused: function setPaused(value) {
|
|
26949
27882
|
return value ? this.pause() : this.play();
|
|
26950
27883
|
},
|
|
26951
27884
|
setSpeed: function setSpeed(value) {
|
|
26952
|
-
speed = normalizeSpeed(value);
|
|
26953
|
-
if (
|
|
27885
|
+
s.speed = normalizeSpeed(value);
|
|
27886
|
+
if (rendererImpl) rendererImpl.setSpeed(s.speed);
|
|
26954
27887
|
return this;
|
|
26955
27888
|
},
|
|
26956
27889
|
setDirection: function setDirection(value) {
|
|
26957
|
-
direction = normalizeDirection(value);
|
|
26958
|
-
if (
|
|
26959
|
-
animation.setDirection(direction);
|
|
26960
|
-
if (direction < 0 && animation.currentFrame <= 0) animation.goToAndStop(segment ? segment[1] : preset.frames - 1, true);
|
|
26961
|
-
}
|
|
27890
|
+
s.direction = normalizeDirection(value);
|
|
27891
|
+
if (rendererImpl) rendererImpl.setDirection(s.direction);
|
|
26962
27892
|
return this;
|
|
26963
27893
|
},
|
|
26964
27894
|
setSegment: function setSegment(value) {
|
|
26965
|
-
|
|
26966
|
-
|
|
27895
|
+
if (s.type !== 'miao') return this;
|
|
27896
|
+
s.segment = normalizeSegment(value, s.preset);
|
|
27897
|
+
if (rendererImpl) rendererImpl.setSegment(s.segment);
|
|
26967
27898
|
return this;
|
|
26968
27899
|
},
|
|
26969
27900
|
setName: function setName(value) {
|
|
26970
|
-
|
|
26971
|
-
|
|
27901
|
+
var nextName = String(value || '').trim().toLowerCase();
|
|
27902
|
+
getEmoPreset(s.type, nextName);
|
|
27903
|
+
s.name = nextName;
|
|
27904
|
+
mount();
|
|
26972
27905
|
emitter.emit('namechange', {
|
|
26973
|
-
preset: _objectSpread2({}, preset)
|
|
27906
|
+
preset: _objectSpread2({}, s.preset)
|
|
26974
27907
|
});
|
|
26975
27908
|
return this;
|
|
26976
27909
|
},
|
|
26977
27910
|
setType: function setType(value) {
|
|
26978
|
-
|
|
26979
|
-
|
|
27911
|
+
var nextType = getEmoType(value).type;
|
|
27912
|
+
s.type = nextType;
|
|
27913
|
+
if (!getEmoType(s.type).names.includes(s.name)) s.name = getEmoType(s.type).defaultName;
|
|
27914
|
+
mount();
|
|
26980
27915
|
emitter.emit('typechange', {
|
|
26981
|
-
preset: _objectSpread2({}, preset)
|
|
27916
|
+
preset: _objectSpread2({}, s.preset)
|
|
26982
27917
|
});
|
|
26983
27918
|
return this;
|
|
26984
27919
|
},
|
|
26985
27920
|
setPartColors: function setPartColors(next) {
|
|
26986
|
-
partColors = next && _typeof(next) === 'object' ? _objectSpread2({}, next) : {};
|
|
26987
|
-
|
|
27921
|
+
s.partColors = next && _typeof(next) === 'object' ? _objectSpread2({}, next) : {};
|
|
27922
|
+
mount();
|
|
26988
27923
|
return this;
|
|
26989
27924
|
},
|
|
26990
27925
|
setOpacity: function setOpacity(value) {
|
|
26991
|
-
opacity = normalizeOpacity(value);
|
|
27926
|
+
s.opacity = normalizeOpacity(value);
|
|
26992
27927
|
updateRoot();
|
|
26993
27928
|
return this;
|
|
26994
27929
|
},
|
|
26995
27930
|
setBackground: function setBackground(value) {
|
|
26996
|
-
background = value == null ? 'transparent' : String(value);
|
|
27931
|
+
s.background = value == null ? 'transparent' : String(value);
|
|
26997
27932
|
updateRoot();
|
|
26998
27933
|
return this;
|
|
26999
27934
|
},
|
|
27000
27935
|
setSize: function setSize(nextWidth, nextHeight) {
|
|
27001
27936
|
if (nextWidth !== undefined) {
|
|
27002
27937
|
parseSize(nextWidth);
|
|
27003
|
-
width = nextWidth;
|
|
27938
|
+
s.width = nextWidth;
|
|
27004
27939
|
}
|
|
27005
27940
|
if (nextHeight !== undefined) {
|
|
27006
27941
|
parseSize(nextHeight);
|
|
27007
|
-
height = nextHeight;
|
|
27942
|
+
s.height = nextHeight;
|
|
27008
27943
|
}
|
|
27009
27944
|
updateRoot();
|
|
27010
27945
|
return this;
|
|
27011
27946
|
},
|
|
27012
27947
|
setFit: function setFit(value) {
|
|
27013
|
-
fit = normalizeFit(value);
|
|
27014
|
-
|
|
27948
|
+
s.fit = normalizeFit(value);
|
|
27949
|
+
mount();
|
|
27015
27950
|
return this;
|
|
27016
27951
|
},
|
|
27017
27952
|
setRenderer: function setRenderer(value) {
|
|
27018
|
-
renderer = normalizeRenderer(value);
|
|
27019
|
-
|
|
27953
|
+
s.renderer = normalizeRenderer(value);
|
|
27954
|
+
if (s.type === 'miao') mount();else updateRoot();
|
|
27020
27955
|
return this;
|
|
27021
27956
|
},
|
|
27022
27957
|
setLoop: function setLoop(value) {
|
|
27023
|
-
loop = value !== false;
|
|
27024
|
-
|
|
27958
|
+
s.loop = value !== false;
|
|
27959
|
+
mount();
|
|
27025
27960
|
return this;
|
|
27026
27961
|
},
|
|
27027
27962
|
setAutoplay: function setAutoplay(value) {
|
|
27028
|
-
autoplay = value !== false;
|
|
27029
|
-
if (autoplay && !paused && !reducedMotion) this.play();else if (
|
|
27963
|
+
s.autoplay = value !== false;
|
|
27964
|
+
if (s.autoplay && !s.paused && !s.reducedMotion) this.play();else if (rendererImpl) rendererImpl.pause();
|
|
27965
|
+
return this;
|
|
27966
|
+
},
|
|
27967
|
+
setShape: function setShape(value) {
|
|
27968
|
+
s.shape = normalizeShape(value);
|
|
27969
|
+
if (rendererImpl) rendererImpl.setShape(s.shape);
|
|
27970
|
+
return this;
|
|
27971
|
+
},
|
|
27972
|
+
setInteractive: function setInteractive(value) {
|
|
27973
|
+
s.interactive = value === true;
|
|
27974
|
+
if (rendererImpl) rendererImpl.setInteractive(s.interactive);
|
|
27030
27975
|
return this;
|
|
27031
27976
|
},
|
|
27032
27977
|
setLabel: function setLabel(value) {
|
|
27033
|
-
label = typeof value === 'string' && value ? value : null;
|
|
27978
|
+
s.label = typeof value === 'string' && value ? value : null;
|
|
27034
27979
|
updateRoot();
|
|
27035
27980
|
return this;
|
|
27036
27981
|
},
|
|
27037
27982
|
dispose: function dispose() {
|
|
27038
|
-
disposed = true;
|
|
27039
|
-
loadToken += 1;
|
|
27983
|
+
s.disposed = true;
|
|
27040
27984
|
motionPreference.dispose();
|
|
27041
|
-
|
|
27985
|
+
destroyCurrent();
|
|
27042
27986
|
root.remove();
|
|
27043
27987
|
},
|
|
27044
27988
|
get speed() {
|
|
27045
|
-
return speed;
|
|
27989
|
+
return s.speed;
|
|
27046
27990
|
},
|
|
27047
27991
|
get loop() {
|
|
27048
|
-
return loop;
|
|
27992
|
+
return s.loop;
|
|
27049
27993
|
},
|
|
27050
27994
|
get autoplay() {
|
|
27051
|
-
return autoplay;
|
|
27995
|
+
return s.autoplay;
|
|
27052
27996
|
},
|
|
27053
27997
|
get direction() {
|
|
27054
|
-
return direction;
|
|
27998
|
+
return s.direction;
|
|
27055
27999
|
},
|
|
27056
28000
|
get opacity() {
|
|
27057
|
-
return opacity;
|
|
28001
|
+
return s.opacity;
|
|
27058
28002
|
},
|
|
27059
28003
|
get fit() {
|
|
27060
|
-
return fit;
|
|
28004
|
+
return s.fit;
|
|
27061
28005
|
},
|
|
27062
28006
|
get renderer() {
|
|
27063
|
-
return renderer;
|
|
28007
|
+
return s.type === 'grok' ? 'svg' : s.renderer;
|
|
27064
28008
|
},
|
|
27065
28009
|
get paused() {
|
|
27066
|
-
return paused;
|
|
28010
|
+
return s.paused;
|
|
27067
28011
|
},
|
|
27068
28012
|
get segment() {
|
|
27069
|
-
return segment ? _toConsumableArray(segment) : null;
|
|
28013
|
+
return s.segment ? _toConsumableArray(s.segment) : null;
|
|
27070
28014
|
},
|
|
27071
28015
|
get partColors() {
|
|
27072
|
-
return _objectSpread2({}, partColors);
|
|
28016
|
+
return _objectSpread2({}, s.partColors);
|
|
28017
|
+
},
|
|
28018
|
+
get shape() {
|
|
28019
|
+
return s.shape;
|
|
28020
|
+
},
|
|
28021
|
+
get interactive() {
|
|
28022
|
+
return s.interactive;
|
|
27073
28023
|
},
|
|
27074
28024
|
get background() {
|
|
27075
|
-
return background;
|
|
28025
|
+
return s.background;
|
|
28026
|
+
}
|
|
28027
|
+
};
|
|
28028
|
+
}
|
|
28029
|
+
|
|
28030
|
+
function createEmoPreviewCard(_ref) {
|
|
28031
|
+
var container = _ref.container,
|
|
28032
|
+
options = _ref.options,
|
|
28033
|
+
_ref$playFor = _ref.playFor,
|
|
28034
|
+
playFor = _ref$playFor === void 0 ? 2800 : _ref$playFor,
|
|
28035
|
+
_ref$respectReducedMo = _ref.respectReducedMotion,
|
|
28036
|
+
respectReducedMotion = _ref$respectReducedMo === void 0 ? true : _ref$respectReducedMo,
|
|
28037
|
+
_ref$trackViewport = _ref.trackViewport,
|
|
28038
|
+
trackViewport = _ref$trackViewport === void 0 ? false : _ref$trackViewport;
|
|
28039
|
+
var controller = createEmo(container, _objectSpread2(_objectSpread2({}, options), {}, {
|
|
28040
|
+
autoplay: false,
|
|
28041
|
+
paused: true
|
|
28042
|
+
}));
|
|
28043
|
+
var motionPreference = createReducedMotionPreference(respectReducedMotion !== false, function (matches) {
|
|
28044
|
+
reduced = matches;
|
|
28045
|
+
if (reduced) stop();
|
|
28046
|
+
});
|
|
28047
|
+
var reduced = motionPreference.matches();
|
|
28048
|
+
var timer = null;
|
|
28049
|
+
var offscreen = false;
|
|
28050
|
+
var observer = null;
|
|
28051
|
+
var stop = function stop() {
|
|
28052
|
+
if (timer) {
|
|
28053
|
+
clearTimeout(timer);
|
|
28054
|
+
timer = null;
|
|
28055
|
+
}
|
|
28056
|
+
controller.pause();
|
|
28057
|
+
};
|
|
28058
|
+
var start = function start() {
|
|
28059
|
+
if (timer) {
|
|
28060
|
+
clearTimeout(timer);
|
|
28061
|
+
timer = null;
|
|
28062
|
+
}
|
|
28063
|
+
if (reduced || offscreen) return;
|
|
28064
|
+
controller.play();
|
|
28065
|
+
timer = setTimeout(function () {
|
|
28066
|
+
return stop();
|
|
28067
|
+
}, playFor);
|
|
28068
|
+
};
|
|
28069
|
+
if (trackViewport && typeof IntersectionObserver !== 'undefined') {
|
|
28070
|
+
observer = new IntersectionObserver(function (entries) {
|
|
28071
|
+
var visible = entries.some(function (entry) {
|
|
28072
|
+
return entry.isIntersecting;
|
|
28073
|
+
});
|
|
28074
|
+
offscreen = !visible;
|
|
28075
|
+
if (offscreen) stop();
|
|
28076
|
+
}, {
|
|
28077
|
+
threshold: 0
|
|
28078
|
+
});
|
|
28079
|
+
observer.observe(container);
|
|
28080
|
+
}
|
|
28081
|
+
return {
|
|
28082
|
+
element: controller.element,
|
|
28083
|
+
controller: controller,
|
|
28084
|
+
start: start,
|
|
28085
|
+
stop: stop,
|
|
28086
|
+
setViewportVisible: function setViewportVisible(visible) {
|
|
28087
|
+
offscreen = !visible;
|
|
28088
|
+
if (offscreen) stop();
|
|
28089
|
+
},
|
|
28090
|
+
dispose: function dispose() {
|
|
28091
|
+
stop();
|
|
28092
|
+
motionPreference.dispose();
|
|
28093
|
+
if (observer) {
|
|
28094
|
+
observer.disconnect();
|
|
28095
|
+
observer = null;
|
|
28096
|
+
}
|
|
28097
|
+
controller.dispose();
|
|
27076
28098
|
}
|
|
27077
28099
|
};
|
|
27078
28100
|
}
|
|
@@ -27080,6 +28102,13 @@ function createEmo(container) {
|
|
|
27080
28102
|
exports.EMO_CATEGORIES = EMO_CATEGORIES;
|
|
27081
28103
|
exports.EMO_PRESETS = EMO_PRESETS;
|
|
27082
28104
|
exports.EMO_TYPES = EMO_TYPES;
|
|
28105
|
+
exports.GROK_CATEGORIES = GROK_CATEGORIES;
|
|
28106
|
+
exports.GROK_NAMES = GROK_NAMES;
|
|
28107
|
+
exports.GROK_STATE_META = GROK_STATE_META;
|
|
27083
28108
|
exports.createEmo = createEmo;
|
|
28109
|
+
exports.createEmoPreviewCard = createEmoPreviewCard;
|
|
27084
28110
|
exports.getEmoAnimation = getEmoAnimation;
|
|
27085
28111
|
exports.getEmoPreset = getEmoPreset;
|
|
28112
|
+
exports.getEmoType = getEmoType;
|
|
28113
|
+
exports.getGrokNamesFor = getGrokNamesFor;
|
|
28114
|
+
exports.getGrokStateMeta = getGrokStateMeta;
|