Premium Addons for Elementor - Version 4.8.3

Version Description

  • Tweak: Added Image Size option in Woo Products Listing widget.
  • Tweak: Make sure Elementor Usage Data Sharing option is enabled before showing elements usage.
  • Tweak: URL Parameter display condition not working with special characters.
  • Tweak: Actions added in Woo Products Listing widget to give the ability to insert custom content.
Download this release

Release Info

Developer leap13
Plugin Icon 128x128 Premium Addons for Elementor
Version 4.8.3
Comparing to
See all releases

Code changes from version 4.8.2 to 4.8.3

admin/assets/css/admin-rtl.css CHANGED
@@ -1,1913 +1,1913 @@
1
- .button.pa-btn {
2
- border: none;
3
- color: #fff;
4
- text-align: center;
5
- padding: 3px;
6
- max-width: 250px;
7
- height: auto;
8
- font-weight: 700;
9
- -webkit-box-shadow: none;
10
- box-shadow: none;
11
- }
12
-
13
- .button.pa-btn:hover,
14
- .button.pa-btn:focus,
15
- .button.pa-btn:active {
16
- outline: none;
17
- border: none;
18
- text-decoration: none;
19
- }
20
-
21
-
22
- .switch {
23
- position: relative;
24
- display: inline-block;
25
- width: 44px;
26
- height: 24px;
27
- -webkit-border-radius: 12px;
28
- border-radius: 12px;
29
- }
30
-
31
- .switch input {
32
- display: none;
33
- }
34
-
35
- .slider,
36
- .pro-slider {
37
- position: absolute;
38
- cursor: pointer;
39
- top: 0;
40
- right: 0;
41
- left: 0;
42
- bottom: 0;
43
- /* background-color: #f2f2f2;
44
- box-shadow: 0 0 2px 1px #ccc inset; */
45
- -webkit-transition: 0.4s;
46
- transition: 0.4s;
47
- }
48
-
49
- .slider:before,
50
- .pro-slider:before {
51
- position: absolute;
52
- content: "";
53
- right: 3px;
54
- top: 50%;
55
- -webkit-transform: translateY(-50%);
56
- -ms-transform: translateY(-50%);
57
- transform: translateY(-50%);
58
- /* background: radial-gradient(farthest-corner at 14px 0px, #f0f0f0 50%, #cacaca 100%); */
59
- -webkit-transition: all 0.4s ease-in-out;
60
- transition: all 0.4s ease-in-out;
61
- padding: 0;
62
- margin: 0;
63
- width: 15px;
64
- height: 15px;
65
- -webkit-border-radius: 8px;
66
- border-radius: 8px;
67
- -webkit-filter: drop-shadow(0px 5px 2.5px rgba(40, 40, 40, 0.35));
68
- filter: drop-shadow(0px 5px 2.5px rgba(40, 40, 40, 0.35));
69
- background-color: #f7f7f7;
70
- border: 1px solid #ffffff;
71
- /* box-shadow: 0 2.5px 5px #b8b8b9; */
72
- }
73
-
74
- input:checked+.slider {
75
- background: #8dc900;
76
- }
77
-
78
- input:focus+.slider {
79
- -webkit-box-shadow: 0 0 1px #18a4fd;
80
- box-shadow: 0 0 1px #18a4fd;
81
- }
82
-
83
- input:checked+.slider:before {
84
- -webkit-transform: translate3d(-20px, -50%, 0);
85
- transform: translate3d(-20px, -50%, 0);
86
- }
87
-
88
- .slider.round,
89
- .pro-slider.round {
90
- -webkit-border-radius: 34px;
91
- border-radius: 34px;
92
- background-image: -webkit-gradient(linear, right top, right bottom, from(#cfcfcf), to(#dbdbdb));
93
- background-image: -webkit-linear-gradient(top, #cfcfcf 0%, #dbdbdb 100%);
94
- background-image: linear-gradient(-180deg, #cfcfcf 0%, #dbdbdb 100%);
95
- }
96
-
97
- .slider.round:before,
98
- .pro-slider.round:before {
99
- -webkit-border-radius: 50%;
100
- border-radius: 50%;
101
- }
102
-
103
- .pa-switcher input:disabled+.pro-slider::after {
104
- position: absolute;
105
- font-family: "Dashicons";
106
- content: "\f160";
107
- color: #474747;
108
- left: 8px;
109
- top: 50%;
110
- -webkit-transform: translateY(-50%);
111
- -ms-transform: translateY(-50%);
112
- transform: translateY(-50%);
113
- }
114
-
115
- .pa-api-disable-title label,
116
- .pa-is-beta label {
117
- margin-left: 15px;
118
- }
119
-
120
- .pa-api-disable-title span,
121
- .pa-is-beta span {
122
- font-weight: 400;
123
- }
124
-
125
- .pa-maps-api-notice {
126
- margin: 0.5em 0;
127
- }
128
-
129
- .pa-api-title input {
130
- margin-top: 10px;
131
- font-size: normal;
132
- font-weight: 400;
133
- width: 400px;
134
- margin-right: 30px;
135
- }
136
-
137
- .pa-sys-info-tab {
138
- background: #f7f7f7;
139
- margin: 8px;
140
- border: 2px solid #ddd;
141
- -webkit-border-radius: 3px;
142
- border-radius: 3px;
143
- padding: 0;
144
- }
145
-
146
- .pa-system-info-container {
147
- padding: 10px;
148
- }
149
-
150
- .dialog-type-lightbox .dialog-widget-header {
151
- text-align: center;
152
- font-size: 15px;
153
- color: #495157;
154
- padding: 30px 0 10px;
155
- font-weight: 500;
156
- }
157
-
158
- .pa-swal.swal2-show {
159
- padding: 32px;
160
- padding-bottom: 50px;
161
- background-image: url("../../images/popup-pattern.jpg");
162
- background-repeat: no-repeat;
163
- -webkit-background-size: cover;
164
- background-size: cover;
165
- -webkit-border-radius: 0 50px;
166
- border-radius: 0 50px;
167
- }
168
-
169
- .pa-swal .swal2-close {
170
- color: #c2c4cf;
171
- }
172
-
173
- .pa-swal .swal2-close:hover {
174
- color: #00a5e5;
175
- }
176
-
177
- .pa-swal .swal2-title {
178
- margin: 0;
179
- }
180
-
181
- .pa-swal .swal2-content {
182
- font-size: 13px;
183
- color: #474747;
184
- font-family: "Poppins";
185
- text-align: center;
186
- margin: 0;
187
- margin-bottom: 0px;
188
- }
189
-
190
- .pa-swal .swal2-cancel.swal2-styled,
191
- .pa-swal .swal2-cancel.swal2-styled:hover,
192
- .pa-swal .swal2-confirm.swal2-styled {
193
- background-image: none !important;
194
- background-color: #ebebeb;
195
- color: #474747;
196
- border: none !important;
197
- -webkit-box-shadow: none !important;
198
- box-shadow: none !important;
199
- font-family: "Red Hat Display";
200
- font-size: 15px;
201
- font-weight: 700;
202
- }
203
-
204
- .pa-swal .swal2-confirm.swal2-styled,
205
- .pa-swal .swal2-confirm.swal2-styled:hover {
206
- min-width: 128px;
207
- color: #fff;
208
- background-image: none !important;
209
- background-color: #00a5e5;
210
- }
211
-
212
- /**
213
- * New Dashboard
214
- */
215
- .pa-settings-wrap {
216
- padding: 35px;
217
- padding-right: 15px;
218
- }
219
-
220
- .pa-settings-section {
221
- display: none;
222
- }
223
-
224
- .pa-settings-tabs {
225
- background-color: #fff;
226
- -webkit-border-radius: 15px;
227
- border-radius: 15px;
228
- padding: 36px;
229
- margin-bottom: 12px;
230
- }
231
-
232
- .pa-settings-tabs-list {
233
- clear: right;
234
- margin: 0;
235
- list-style-type: none;
236
- }
237
-
238
- .pa-settings-tabs .pa-settings-tabs-list li {
239
- display: inline-block;
240
- margin-bottom: 0;
241
- margin-left: 23px;
242
- }
243
-
244
- .pa-settings-section.active {
245
- display: block;
246
- }
247
-
248
- .papro-admin-notice a,
249
- .pa-settings-wrap .pa-settings-tabs a {
250
- -js-display: flex;
251
- display: -webkit-box;
252
- display: -webkit-flex;
253
- display: -moz-box;
254
- display: -ms-flexbox;
255
- display: flex;
256
- -webkit-box-pack: center;
257
- -webkit-justify-content: center;
258
- -moz-box-pack: center;
259
- -ms-flex-pack: center;
260
- justify-content: center;
261
- -webkit-box-align: center;
262
- -webkit-align-items: center;
263
- -moz-box-align: center;
264
- -ms-flex-align: center;
265
- align-items: center;
266
- font-size: 14px;
267
- line-height: 1.8em;
268
- position: relative;
269
- color: #252c59;
270
- text-decoration: none;
271
- -webkit-transition: all 0.3s ease;
272
- transition: all 0.3s ease;
273
- }
274
-
275
- .papro-admin-notice a.papro-notice-btn {
276
- width: 120px;
277
- /* height: 58px; */
278
- -webkit-border-radius: 15px;
279
- border-radius: 15px;
280
- -webkit-filter: drop-shadow(0px 5px 50px rgba(87, 0, 101, 0.7));
281
- filter: drop-shadow(0px 5px 50px rgba(87, 0, 101, 0.7));
282
- background-color: #ffffff;
283
- font-size: 18px;
284
- color: #fe6300;
285
- font-weight: 800;
286
- font-family: "Red Hat Display";
287
- text-align: center;
288
- padding: 10px 20px;
289
- }
290
-
291
- .pa-settings-wrap .pa-settings-tabs a:focus {
292
- outline: none;
293
- -webkit-box-shadow: none;
294
- box-shadow: none;
295
- }
296
-
297
- .pa-settings-wrap .pa-settings-tabs span {
298
- margin-right: 8px;
299
- font-family: "Poppins";
300
- font-weight: 500;
301
- }
302
-
303
- .pa-settings-wrap .pa-settings-tabs .pa-section-active {
304
- color: #00a5e5;
305
- }
306
-
307
- .pa-section {
308
- display: none;
309
- position: relative;
310
- background-color: #fff;
311
- -webkit-transition: opacity 0.2s;
312
- transition: opacity 0.2s;
313
- padding: 34px;
314
- -webkit-border-radius: 15px;
315
- border-radius: 15px;
316
- }
317
-
318
- /**
319
- * General Tab
320
- */
321
- #pa-general-settings {
322
- -js-display: flex;
323
- display: -webkit-box;
324
- display: -webkit-flex;
325
- display: -moz-box;
326
- display: -ms-flexbox;
327
- display: flex;
328
- -webkit-box-orient: horizontal;
329
- -webkit-box-direction: normal;
330
- -webkit-flex-flow: row wrap;
331
- -moz-box-orient: horizontal;
332
- -moz-box-direction: normal;
333
- -ms-flex-flow: row wrap;
334
- flex-flow: row wrap;
335
- -webkit-box-pack: justify;
336
- -webkit-justify-content: space-between;
337
- -moz-box-pack: justify;
338
- -ms-flex-pack: justify;
339
- justify-content: space-between;
340
- width: 100%;
341
- }
342
-
343
- #pa-general-settings .pa-dash-block {
344
- -webkit-box-flex: 1;
345
- -webkit-flex: 1 1 auto;
346
- -moz-box-flex: 1;
347
- -ms-flex: 1 1 auto;
348
- flex: 1 1 auto;
349
- min-width: 250px;
350
- margin: 0 5px 10px;
351
- -js-display: flex;
352
- display: -webkit-box;
353
- display: -webkit-flex;
354
- display: -moz-box;
355
- display: -ms-flexbox;
356
- display: flex;
357
- -webkit-box-orient: vertical;
358
- -webkit-box-direction: normal;
359
- -webkit-flex-direction: column;
360
- -moz-box-orient: vertical;
361
- -moz-box-direction: normal;
362
- -ms-flex-direction: column;
363
- flex-direction: column;
364
- }
365
-
366
- .pa-dash-block.col-3 {
367
- width: 31%;
368
- }
369
-
370
- .pa-dash-block.col-6 {
371
- width: 64%;
372
- }
373
-
374
- #pa-general-settings .pa-section-info h4 {
375
- font-size: 17px;
376
- }
377
-
378
- #pa-general-settings .pa-section-info:not(.pa-news-section):not(.pa-support-section) p {
379
- min-height: 80px;
380
- }
381
-
382
- #pa-general-settings .pa-section-info .pa-element-icon {
383
- margin-bottom: 12px;
384
- }
385
-
386
- #pa-general-settings .pa-element-icon.icon-inline {
387
- -js-display: inline-flex;
388
- display: -webkit-inline-box;
389
- display: -webkit-inline-flex;
390
- display: -moz-inline-box;
391
- display: -ms-inline-flexbox;
392
- display: inline-flex;
393
- margin-bottom: 0;
394
- vertical-align: middle;
395
- }
396
-
397
- #pa-general-settings .pa-section-info .pa-btn {
398
- display: inline-block;
399
- background-color: #252c59;
400
- color: #fff;
401
- /* margin-top: 12px; */
402
- padding: 12px 36px;
403
- }
404
-
405
- .pa-element-icon.dashicons-facebook-alt {
406
- color: #3b5998 !important
407
- }
408
-
409
- .pa-element-icon.dashicons-youtube {
410
- color: #ff0000 !important
411
- }
412
-
413
- .pa-newsletter-form {
414
- -js-display: flex;
415
- display: -webkit-box;
416
- display: -webkit-flex;
417
- display: -moz-box;
418
- display: -ms-flexbox;
419
- display: flex;
420
- -webkit-flex-wrap: wrap;
421
- -ms-flex-wrap: wrap;
422
- flex-wrap: wrap;
423
- -webkit-box-align: center;
424
- -webkit-align-items: center;
425
- -moz-box-align: center;
426
- -ms-flex-align: center;
427
- align-items: center;
428
- }
429
-
430
- .pa-newsletter-form input {
431
- width: 74%;
432
- padding: 0px 10px;
433
- height: 39px;
434
- font-family: "Poppins";
435
- border: 1px solid #dcdcdc;
436
- -webkit-border-radius: 0 10px 10px 0;
437
- border-radius: 0 10px 10px 0;
438
- direction: rtl;
439
- }
440
-
441
- #pa-general-settings .pa-newsletter-form button.pa-btn {
442
- width: 25%;
443
- padding: 0;
444
- height: 39px;
445
- margin-top: 0;
446
- margin-right: -1px;
447
- -webkit-border-radius: 10px 0 0 10px;
448
- border-radius: 10px 0 0 10px;
449
- }
450
-
451
- #pa-general-settings .pa-news-grid {
452
- -js-display: flex;
453
- display: -webkit-box;
454
- display: -webkit-flex;
455
- display: -moz-box;
456
- display: -ms-flexbox;
457
- display: flex;
458
- -webkit-box-pack: justify;
459
- -webkit-justify-content: space-between;
460
- -moz-box-pack: justify;
461
- -ms-flex-pack: justify;
462
- justify-content: space-between;
463
- margin-top: 12px;
464
- }
465
-
466
- .pa-news-grid .pa-news-post {
467
- position: relative;
468
- width: 33.33%;
469
- margin: 0 5px;
470
- }
471
-
472
- .pa-news-grid .pa-news-post p:nth-of-type(1) {
473
- font-family: "Red Hat Display";
474
- font-size: 15px;
475
- min-height: 60px;
476
- font-weight: 800;
477
- color: #252c59
478
- }
479
-
480
- .pa-news-grid .pa-news-post p:nth-of-type(2) {
481
- font-size: 12px;
482
- }
483
-
484
- .pa-post-img-container img {
485
- width: 100%;
486
- height: 145px;
487
- -o-object-fit: cover;
488
- object-fit: cover;
489
- -webkit-border-radius: 10px;
490
- border-radius: 10px;
491
- }
492
-
493
- .pa-news-grid .pa-news-post a {
494
- position: absolute;
495
- top: 0;
496
- right: 0;
497
- width: 100%;
498
- height: 100%;
499
- z-index: 2;
500
- }
501
-
502
- #pa-general-settings .pa-support-list {
503
- margin: 12px 0 0;
504
- padding: 0;
505
- }
506
-
507
- #pa-general-settings .pa-support-list li {
508
- margin-bottom: 10px;
509
- }
510
-
511
- .pa-support-list li a {
512
- font-size: 15px;
513
- color: #474747;
514
- font-family: "Poppins";
515
- text-decoration: none;
516
- }
517
-
518
- .pa-support-list li a:hover {
519
- color: #135e96;
520
- }
521
-
522
- #pa-general-settings input[type="email"],
523
- #pa-general-settings a:hover,
524
- #pa-general-settings a:focus,
525
- #pa-general-settings a:visited {
526
- border: none;
527
- -webkit-box-shadow: none;
528
- box-shadow: none;
529
- outline: none;
530
- }
531
-
532
-
533
- /**
534
- * Tab Info
535
- */
536
- .pa-section-info-wrap {
537
- padding: 34px;
538
- -webkit-border-radius: 15px;
539
- border-radius: 15px;
540
- background-color: #f7f7f7;
541
- -js-display: flex;
542
- display: -webkit-box;
543
- display: -webkit-flex;
544
- display: -moz-box;
545
- display: -ms-flexbox;
546
- display: flex;
547
- -webkit-box-pack: justify;
548
- -webkit-justify-content: space-between;
549
- -moz-box-pack: justify;
550
- -ms-flex-pack: justify;
551
- justify-content: space-between;
552
- -webkit-box-align: center;
553
- -webkit-align-items: center;
554
- -moz-box-align: center;
555
- -ms-flex-align: center;
556
- align-items: center;
557
- height: 100%;
558
- }
559
-
560
- #pa-general-settings .pa-section-info-wrap,
561
- #pa-ver-control-settings .pa-section-info-wrap {
562
- -webkit-box-orient: vertical;
563
- -webkit-box-direction: normal;
564
- -webkit-flex-direction: column;
565
- -moz-box-orient: vertical;
566
- -moz-box-direction: normal;
567
- -ms-flex-direction: column;
568
- flex-direction: column;
569
- -webkit-box-align: start;
570
- -webkit-align-items: flex-start;
571
- -moz-box-align: start;
572
- -ms-flex-align: start;
573
- align-items: flex-start;
574
- }
575
-
576
- #pa-features-settings .pa-section-info-wrap:nth-of-type(n + 2),
577
- #pa-ver-control-settings .pa-section-info-wrap:nth-of-type(n + 2) {
578
- margin-top: 36px;
579
- }
580
-
581
- .pa-section-info-wrap h4 {
582
- font-size: 20px;
583
- color: #252c59;
584
- font-weight: 900;
585
- font-family: "Red Hat Display";
586
- margin: 0;
587
- }
588
-
589
- .pa-section-info-wrap p {
590
- font-size: 14px;
591
- color: #474747;
592
- font-family: "Poppins";
593
- margin: 0;
594
- margin-top: 14px;
595
- }
596
-
597
- .pa-section-info-cta {
598
- -js-display: flex;
599
- display: -webkit-box;
600
- display: -webkit-flex;
601
- display: -moz-box;
602
- display: -ms-flexbox;
603
- display: flex;
604
- -webkit-box-align: center;
605
- -webkit-align-items: center;
606
- -moz-box-align: center;
607
- -ms-flex-align: center;
608
- align-items: center;
609
- margin-top: 25px;
610
- }
611
-
612
- .pa-section-info-cta .pa-btn {
613
- color: #474747;
614
- background-color: #ebebeb;
615
- padding: 8px 20px;
616
- -webkit-border-radius: 10px;
617
- border-radius: 10px;
618
- font-size: 15px;
619
- font-weight: 700;
620
- font-family: "Red Hat Display";
621
- -webkit-transition: all 0.2s ease-in-out;
622
- transition: all 0.2s ease-in-out;
623
- }
624
-
625
- .pa-section-info-cta .pa-btn:hover,
626
- .pa-section-info-cta .pa-btn:focus,
627
- .pa-section-info-cta .pa-btn:active {
628
- color: #fff;
629
- background-color: #00a5e5;
630
- }
631
-
632
- .pa-section-info-cta .pa-section-info-label {
633
- font-size: 13px;
634
- color: #474747;
635
- font-family: "Poppins";
636
- text-align: left;
637
- }
638
-
639
- .pa-section-info-cta .pa-section-info-warning {
640
- font-size: 13px;
641
- color: #cca329;
642
- font-weight: 300;
643
- font-family: "Poppins";
644
- margin-right: 20px;
645
- }
646
-
647
- .pa-section-info-cta .pa-section-info-warning i {
648
- font-weight: 300;
649
- vertical-align: bottom;
650
- }
651
-
652
- .pa-section-info-wrap .pa-btn,
653
- .pa-section-info-wrap .pa-btn-unused {
654
- font-family: "Red Hat Display";
655
- color: #8e8e8e;
656
- background-color: #ebebeb;
657
- border: 0px solid;
658
- padding: 16px 28px;
659
- -webkit-border-radius: 10px;
660
- border-radius: 10px;
661
- font-size: 15px;
662
- font-weight: 700;
663
- cursor: pointer;
664
- -webkit-transition: 300ms;
665
- transition: 300ms;
666
- display: block;
667
- text-decoration: none;
668
- }
669
-
670
- .pa-section-info-wrap .pa-btn-unused {
671
- width: 100%;
672
- clear: both;
673
- background: transparent;
674
- color: #252C59;
675
- padding-bottom: 0;
676
- text-decoration: underline;
677
- font-weight: normal;
678
- }
679
-
680
- .pa-section-info-wrap .pa-btn-unused.dimmed {
681
- cursor: no-drop;
682
- color: #C2C4CF;
683
- }
684
-
685
- .pa-element-name .pa-total-use {
686
- color: #252C59;
687
- }
688
-
689
- .pa-section-info-wrap button.pa-btn-enable {
690
- -webkit-border-top-left-radius: 0;
691
- border-top-left-radius: 0;
692
- -webkit-border-bottom-left-radius: 0;
693
- border-bottom-left-radius: 0;
694
- float: right;
695
- }
696
-
697
- .pa-section-info-wrap button.pa-btn-disable {
698
- -webkit-border-top-right-radius: 0;
699
- border-top-right-radius: 0;
700
- -webkit-border-bottom-right-radius: 0;
701
- border-bottom-right-radius: 0;
702
- float: left;
703
- }
704
-
705
- .pa-section-info-wrap .pa-btn-enable.active {
706
- color: #fff;
707
- -webkit-box-shadow: inset -3.5px 1.8px 7px 0px rgba(125, 125, 125, 0.5);
708
- box-shadow: inset -3.5px 1.8px 7px 0px rgba(125, 125, 125, 0.5);
709
- background-color: #8dc900;
710
- }
711
-
712
- .pa-section-info-wrap .pa-btn-disable.active {
713
- color: #fff;
714
- -webkit-box-shadow: inset -3.564px 1.816px 7px 0px rgba(81, 81, 81, 0.5);
715
- box-shadow: inset -3.564px 1.816px 7px 0px rgba(81, 81, 81, 0.5);
716
- background-color: #898989;
717
- }
718
-
719
- .pa-section-info-wrap .pa-btn-enable:not(.active):hover {
720
- color: #ffffff;
721
- background-color: #8dc900;
722
- }
723
-
724
- .pa-section-info-wrap .pa-btn-disable:not(.active):hover {
725
- color: #ffffff;
726
- background-color: #898989;
727
- }
728
-
729
- /*
730
- * Widgets & Addons Tab
731
- */
732
- .pa-elements-settings {
733
- position: relative;
734
- -js-display: flex;
735
- display: -webkit-box;
736
- display: -webkit-flex;
737
- display: -moz-box;
738
- display: -ms-flexbox;
739
- display: flex;
740
- margin-top: 16px;
741
- }
742
-
743
- .pa-elements-filter {
744
- position: absolute;
745
- top: 10px;
746
- left: 16px;
747
- }
748
-
749
- .pa-elements-filter label {
750
- font-size: 13px;
751
- color: #474747;
752
- font-family: "Poppins";
753
- margin-left: 10px;
754
- }
755
-
756
- .pa-elements-filter select {
757
- padding: 5px 15px 5px 35px;
758
- }
759
-
760
- .pa-elements-tabs {
761
- -webkit-border-radius: 10px;
762
- border-radius: 10px;
763
- background-color: #f7f7f7;
764
- padding: 20px;
765
- margin-left: 16px;
766
- }
767
-
768
- .pa-elements-tabs .pa-elements-tab {
769
- position: relative;
770
- padding: 0;
771
- margin-bottom: 12px;
772
- text-align: center;
773
- }
774
-
775
- .pa-elements-tab .pa-element-tab-tooltip {
776
- position: absolute;
777
- background-color: #3a3c40;
778
- display: block;
779
- position: absolute;
780
- top: 50%;
781
- right: 100%;
782
- padding: 10px 20px;
783
- -webkit-border-radius: 13px;
784
- border-radius: 13px;
785
- -webkit-filter: drop-shadow(0px 5px 27.5px rgba(104, 104, 104, 0.3));
786
- filter: drop-shadow(0px 5px 27.5px rgba(104, 104, 104, 0.3));
787
- background-color: #ffffff;
788
- font-size: 11px;
789
- color: #252c59;
790
- font-weight: 500;
791
- font-family: "Poppins";
792
- opacity: 0;
793
- pointer-events: none;
794
- text-transform: capitalize;
795
- -webkit-transform: translate(-30px, -50%);
796
- -ms-transform: translate(-30px, -50%);
797
- transform: translate(-30px, -50%);
798
- -webkit-transition: all 0.3s ease;
799
- transition: all 0.3s ease;
800
- z-index: 1;
801
- white-space: nowrap;
802
- }
803
-
804
- .pa-elements-tab .pa-element-tab-tooltip::before {
805
- display: block;
806
- position: absolute;
807
- top: 50%;
808
- right: -5px;
809
- width: 0;
810
- height: 0;
811
- content: "";
812
- border-top: 5px solid transparent;
813
- border-bottom: 5px solid transparent;
814
- border-left: 5px solid #ffffff;
815
- -webkit-transform: translateY(-50%);
816
- -ms-transform: translateY(-50%);
817
- transform: translateY(-50%);
818
- }
819
-
820
- .pa-elements-tab .pa-elements-tab-link {
821
- -js-display: flex;
822
- display: -webkit-box;
823
- display: -webkit-flex;
824
- display: -moz-box;
825
- display: -ms-flexbox;
826
- display: flex;
827
- -webkit-box-pack: center;
828
- -webkit-justify-content: center;
829
- -moz-box-pack: center;
830
- -ms-flex-pack: center;
831
- justify-content: center;
832
- -webkit-box-align: center;
833
- -webkit-align-items: center;
834
- -moz-box-align: center;
835
- -ms-flex-align: center;
836
- align-items: center;
837
- color: #c2c4cf;
838
- padding: 12px;
839
- text-decoration: none;
840
- -webkit-transition: all 0.3s ease-in-out;
841
- transition: all 0.3s ease-in-out;
842
- -webkit-border-radius: 13px;
843
- border-radius: 13px;
844
- }
845
-
846
- .pa-elements-tab .pa-elements-tab-link:hover,
847
- .pa-elements-tab .pa-elements-tab-link.active {
848
- -webkit-filter: drop-shadow(-4.243px -4.243px 3px rgba(255, 255, 255, 0.5)) drop-shadow(4.243px 4.243px 3px rgba(191, 201, 210, 0.6));
849
- filter: drop-shadow(-4.243px -4.243px 3px rgba(255, 255, 255, 0.5)) drop-shadow(4.243px 4.243px 3px rgba(191, 201, 210, 0.6));
850
- background-color: #ffffff;
851
- color: #00a5e5;
852
- outline: none;
853
- border: none;
854
- text-decoration: none;
855
- -webkit-box-shadow: none;
856
- box-shadow: none;
857
- }
858
-
859
- .pa-elements-tab .pa-elements-tab-link:hover+span {
860
- opacity: 1;
861
- -webkit-transform: translate(-20px, -50%);
862
- -ms-transform: translate(-20px, -50%);
863
- transform: translate(-20px, -50%);
864
- }
865
-
866
- .pa-switchers {
867
- -js-display: flex;
868
- display: -webkit-box;
869
- display: -webkit-flex;
870
- display: -moz-box;
871
- display: -ms-flexbox;
872
- display: flex;
873
- -webkit-flex-wrap: wrap;
874
- -ms-flex-wrap: wrap;
875
- flex-wrap: wrap;
876
- -webkit-align-content: flex-start;
877
- -ms-flex-line-pack: start;
878
- align-content: flex-start;
879
- }
880
-
881
- .pa-switchers-container {
882
- width: 100%;
883
- }
884
-
885
- .pa-switchers-container.hidden,
886
- .pa-switcher.hidden {
887
- display: none;
888
- }
889
-
890
- .pa-switchers-container .pa-elements-tab-title {
891
- font-size: 20px;
892
- color: #252c59;
893
- font-weight: 900;
894
- font-family: "Red Hat Display";
895
- margin: 16px 0;
896
- }
897
-
898
- .pa-switcher {
899
- -webkit-border-radius: 15px;
900
- border-radius: 15px;
901
- background-color: #f7f7f7;
902
- position: relative;
903
- -js-display: flex;
904
- display: -webkit-box;
905
- display: -webkit-flex;
906
- display: -moz-box;
907
- display: -ms-flexbox;
908
- display: flex;
909
- width: -webkit-calc(50% - 56px);
910
- width: calc(50% - 56px);
911
- -webkit-box-pack: justify;
912
- -webkit-justify-content: space-between;
913
- -moz-box-pack: justify;
914
- -ms-flex-pack: justify;
915
- justify-content: space-between;
916
- -webkit-box-align: center;
917
- -webkit-align-items: center;
918
- -moz-box-align: center;
919
- -ms-flex-align: center;
920
- align-items: center;
921
- padding: 20px;
922
- margin-top: 16px;
923
- margin-left: 16px;
924
- }
925
-
926
- .pa-element-info {
927
- -js-display: flex;
928
- display: -webkit-box;
929
- display: -webkit-flex;
930
- display: -moz-box;
931
- display: -ms-flexbox;
932
- display: flex;
933
- -webkit-box-align: center;
934
- -webkit-align-items: center;
935
- -moz-box-align: center;
936
- -ms-flex-align: center;
937
- align-items: center;
938
- }
939
-
940
- .pa-section .pa-element-icon {
941
- color: #252c59;
942
- background-color: #ebebeb;
943
- -webkit-border-radius: 15px;
944
- border-radius: 15px;
945
- /* padding: 12px; */
946
- min-width: 40px;
947
- min-height: 40px;
948
- margin-left: 8px;
949
- -js-display: flex;
950
- display: -webkit-box;
951
- display: -webkit-flex;
952
- display: -moz-box;
953
- display: -ms-flexbox;
954
- display: flex;
955
- -webkit-box-pack: center;
956
- -webkit-justify-content: center;
957
- -moz-box-pack: center;
958
- -ms-flex-pack: center;
959
- justify-content: center;
960
- -webkit-box-align: center;
961
- -webkit-align-items: center;
962
- -moz-box-align: center;
963
- -ms-flex-align: center;
964
- align-items: center;
965
- }
966
-
967
- .pa-element-name {
968
- font-size: 16px;
969
- color: #252c59;
970
- font-weight: 700;
971
- font-family: "Red Hat Display";
972
- margin: 0;
973
- -js-display: flex;
974
- display: -webkit-box;
975
- display: -webkit-flex;
976
- display: -moz-box;
977
- display: -ms-flexbox;
978
- display: flex;
979
- }
980
-
981
- .pa-element-name span {
982
- text-transform: uppercase;
983
- color: #fd9926;
984
- font-weight: 700;
985
- font-size: 11px;
986
- margin-right: 5px;
987
- }
988
-
989
- .pa-element-link {
990
- font-size: 13px;
991
- color: #252c59;
992
- font-family: "Poppins";
993
- text-decoration: none;
994
- -webkit-transition: all 0.2s ease-in-out;
995
- transition: all 0.2s ease-in-out;
996
- }
997
-
998
- .pa-element-link-separator {
999
- width: 3px;
1000
- height: 3px;
1001
- display: inline-block;
1002
- text-align: center;
1003
- color: #252c59;
1004
- background: #252c59;
1005
- -webkit-border-radius: 50%;
1006
- border-radius: 50%;
1007
- vertical-align: middle;
1008
- margin: 0 3px;
1009
- }
1010
-
1011
- .pa-element-link:hover,
1012
- .pa-element-link:focus {
1013
- color: #00a5e5;
1014
- text-decoration: none;
1015
- outline: none;
1016
- -webkit-box-shadow: none;
1017
- box-shadow: none;
1018
- border: none;
1019
- }
1020
-
1021
- /*
1022
- * Integrations
1023
- */
1024
- .pa-maps-table select {
1025
- width: 100%;
1026
- max-width: 100%;
1027
- padding: 8px;
1028
- }
1029
-
1030
- .pa-maps-table #premium-map-api,
1031
- .pa-maps-table #premium-youtube-api {
1032
- width: 100%;
1033
- }
1034
-
1035
- .pa-maps-table tr td {
1036
- padding-top: 30px;
1037
- }
1038
-
1039
- .pa-maps-table tr td:first-of-type {
1040
- padding-left: 30px;
1041
- }
1042
-
1043
- .pa-maps-table td h4 {
1044
- margin: 0;
1045
- font-size: 15px;
1046
- color: #252c59;
1047
- font-weight: 500;
1048
- font-family: "Poppins";
1049
- display: inline-block;
1050
- }
1051
-
1052
- .pa-maps-table td span {
1053
- font-size: 13px;
1054
- color: #474747;
1055
- font-family: "Poppins";
1056
- vertical-align: middle;
1057
- }
1058
-
1059
- .pa-maps-table td input[type="text"] {
1060
- -webkit-border-radius: 10px;
1061
- border-radius: 10px;
1062
- background-color: #ebebeb;
1063
- border: none;
1064
- padding: 8px 20px;
1065
- }
1066
-
1067
- .pa-section input[type="checkbox"] {
1068
- border: none;
1069
- display: none;
1070
- }
1071
-
1072
- .pa-section input[type="checkbox"]+label {
1073
- position: relative;
1074
- background: #ebebeb;
1075
- height: 16px;
1076
- width: 16px;
1077
- display: inline-block;
1078
- padding: 0;
1079
- margin-left: 5px;
1080
- -webkit-border-radius: 4px;
1081
- border-radius: 4px;
1082
- }
1083
-
1084
- .pa-section input[type="checkbox"]:checked+label {
1085
- background: #00a5e5;
1086
- height: 16px;
1087
- width: 16px;
1088
- display: inline-block;
1089
- padding: 0;
1090
- }
1091
-
1092
- .pa-section input[type="checkbox"]:checked+label:before {
1093
- position: absolute;
1094
- content: "✔";
1095
- color: #fff;
1096
- font-size: 12px;
1097
- top: 0;
1098
- right: 0;
1099
- width: 100%;
1100
- height: 100%;
1101
- text-align: center;
1102
- margin-top: -1px;
1103
- }
1104
-
1105
- .pa-maps-table td input:focus {
1106
- outline: none;
1107
- -webkit-box-shadow: none;
1108
- box-shadow: none;
1109
- border: none;
1110
- }
1111
-
1112
- .pa-elements-filter select,
1113
- .pa-maps-table td select {
1114
- border-color: #dcdcdc;
1115
- -webkit-border-radius: 10px;
1116
- border-radius: 10px;
1117
- -webkit-border-bottom-left-radius: 0;
1118
- border-bottom-left-radius: 0;
1119
- }
1120
-
1121
- .pa-maps-circle-icon {
1122
- width: 5px;
1123
- height: 5px;
1124
- background-color: #252c59;
1125
- -webkit-border-radius: 50%;
1126
- border-radius: 50%;
1127
- display: inline-block;
1128
- vertical-align: middle;
1129
- margin-left: 10px;
1130
- }
1131
-
1132
- .pa-maps-table td h4:before {
1133
- position: absolute;
1134
- content: "";
1135
- }
1136
-
1137
- /*
1138
- * White Labeling Tab
1139
- */
1140
- .pa-wht-lbl-settings .pa-wht-lbl-title {
1141
- font-size: 20px;
1142
- color: #252c59;
1143
- font-weight: 900;
1144
- font-family: "Red Hat Display";
1145
- margin: 0;
1146
- }
1147
-
1148
- .pa-wht-lbl-settings .pa-row {
1149
- width: 60%;
1150
- float: right;
1151
- }
1152
-
1153
- .pa-wht-lbl-settings .pa-wht-lbl-admin {
1154
- width: 30%;
1155
- float: right;
1156
- margin-right: 16px;
1157
- }
1158
-
1159
- .pa-wht-lbl-settings .pa-wht-lbl-head {
1160
- border-bottom: 1px solid #ddd;
1161
- background: #f7f7f7;
1162
- padding: 20px;
1163
- }
1164
-
1165
- .pa-wht-lbl-table {
1166
- text-align: right;
1167
- }
1168
-
1169
- .pa-wht-lbl-settings input {
1170
- font-weight: 400;
1171
- margin: 0;
1172
- margin-bottom: 12px;
1173
- -webkit-border-radius: 10px;
1174
- border-radius: 10px;
1175
- /* background-color: #ebebeb; */
1176
- border: 1px solid #dcdcdc;
1177
- padding: 8px 20px;
1178
- }
1179
-
1180
- /* .pa-wht-lbl-settings input + span {
1181
- margin-left: 0.3em;
1182
- } */
1183
-
1184
- .pa-wht-lbl-settings label+span {
1185
- font-family: "Poppins";
1186
- vertical-align: middle;
1187
- }
1188
-
1189
- .pa-wht-lbl-settings .pa-input-label {
1190
- display: block;
1191
- font-weight: 600;
1192
- margin: 10px 0 6px;
1193
- font-size: 14px;
1194
- color: #252c59;
1195
- font-family: "Red Hat Display";
1196
- }
1197
-
1198
- .pa-wht-lbl-settings input[type="text"] {
1199
- width: 550px;
1200
- }
1201
-
1202
- .pa-wht-lbl-settings input[type="text"]::-webkit-input-placeholder {
1203
- font-weight: 300;
1204
- font-family: "Poppins";
1205
- }
1206
-
1207
- .pa-wht-lbl-settings input[type="text"]:-moz-placeholder {
1208
- font-weight: 300;
1209
- font-family: "Poppins";
1210
- }
1211
-
1212
- .pa-wht-lbl-settings input[type="text"]::-moz-placeholder {
1213
- font-weight: 300;
1214
- font-family: "Poppins";
1215
- }
1216
-
1217
- .pa-wht-lbl-settings input[type="text"]:-ms-input-placeholder {
1218
- font-weight: 300;
1219
- font-family: "Poppins";
1220
- }
1221
-
1222
- .pa-wht-lbl-settings input[type="text"]::-ms-input-placeholder {
1223
- font-weight: 300;
1224
- font-family: "Poppins";
1225
- }
1226
-
1227
- .pa-wht-lbl-settings input[type="text"]::placeholder {
1228
- font-weight: 300;
1229
- font-family: "Poppins";
1230
- }
1231
-
1232
- .pa-wht-lbl-settings .pa-wht-lbl-settings-wrap {
1233
- background: #fff;
1234
- margin: 16px auto;
1235
- border: 1px solid #dcdcdc;
1236
- -webkit-border-radius: 10px;
1237
- border-radius: 10px;
1238
- overflow: hidden;
1239
- }
1240
-
1241
- .pa-wht-lbl-settings .clearfix {
1242
- clear: both;
1243
- }
1244
-
1245
- .pa-wht-lbl-group-wrap {
1246
- padding: 20px;
1247
- }
1248
-
1249
- .pa-section-white-label .pa-white-label-notice {
1250
- position: absolute;
1251
- top: 0;
1252
- right: 0;
1253
- width: 100%;
1254
- height: 100%;
1255
- background: rgba(200, 200, 200, 0.8);
1256
- -webkit-border-radius: 15px;
1257
- border-radius: 15px;
1258
- -js-display: flex;
1259
- display: -webkit-box;
1260
- display: -webkit-flex;
1261
- display: -moz-box;
1262
- display: -ms-flexbox;
1263
- display: flex;
1264
- -webkit-box-pack: center;
1265
- -webkit-justify-content: center;
1266
- -moz-box-pack: center;
1267
- -ms-flex-pack: center;
1268
- justify-content: center;
1269
- }
1270
-
1271
- .pa-white-label-notice-content {
1272
- position: absolute;
1273
- top: 200px;
1274
- right: 200;
1275
- width: 530px;
1276
- background-image: url("../../images/popup-pattern.jpg");
1277
- background-repeat: no-repeat;
1278
- -webkit-background-size: cover;
1279
- background-size: cover;
1280
- padding: 32px;
1281
- padding-bottom: 50px;
1282
- -webkit-border-radius: 0px 50px;
1283
- border-radius: 0px 50px;
1284
- text-align: center;
1285
- z-index: 2;
1286
- }
1287
-
1288
- .pa-white-label-notice-logo {
1289
- -webkit-transform: translateY(-32px);
1290
- -ms-transform: translateY(-32px);
1291
- transform: translateY(-32px);
1292
- margin-bottom: -18px;
1293
- }
1294
-
1295
- .pa-white-label-notice-logo img {
1296
- padding: 10px;
1297
- padding-top: 40px;
1298
- background-color: #ffffff;
1299
- border: 1px solid #e6e6e6;
1300
- -webkit-border-radius: 50px;
1301
- border-radius: 50px;
1302
- -webkit-border-top-right-radius: 50px;
1303
- border-top-right-radius: 50px;
1304
- -webkit-border-top-left-radius: 50px;
1305
- border-top-left-radius: 50px;
1306
- -webkit-border-top-right-radius: 0;
1307
- border-top-right-radius: 0;
1308
- -webkit-border-top-left-radius: 0;
1309
- border-top-left-radius: 0;
1310
- }
1311
-
1312
- .pa-white-label-notice-content h2,
1313
- .pa-swal-head {
1314
- display: inline-block;
1315
- font-size: 23px;
1316
- color: #252c59;
1317
- font-weight: 900;
1318
- font-family: "Red Hat Display";
1319
- text-align: center;
1320
- max-width: 350px;
1321
- line-height: 1;
1322
- margin: 0;
1323
- margin-bottom: 18px;
1324
- }
1325
-
1326
- .pa-white-label-notice-content h2 span {
1327
- color: #fd9926;
1328
- text-transform: uppercase;
1329
- font-family: "Red Hat Display";
1330
- }
1331
-
1332
- .pa-white-label-notice-content p {
1333
- font-size: 13px;
1334
- color: #474747;
1335
- font-family: "Poppins";
1336
- text-align: center;
1337
- margin: 0;
1338
- margin-bottom: 18px;
1339
- }
1340
-
1341
- .pa-white-label-notice-content a.pa-get-pro {
1342
- display: inline-block;
1343
- width: 117px;
1344
- padding: 12px 10px;
1345
- -webkit-border-radius: 10px;
1346
- border-radius: 10px;
1347
- color: #ffffff;
1348
- font-size: 15px;
1349
- font-weight: 900;
1350
- font-family: "Red Hat Display";
1351
- -webkit-filter: drop-shadow(0px 20px 17.5px rgba(254, 99, 0, 0.2));
1352
- filter: drop-shadow(0px 20px 17.5px rgba(254, 99, 0, 0.2));
1353
- text-decoration: none;
1354
- outline: none;
1355
- border: none;
1356
- background-image: -webkit-linear-gradient(-120deg, #fe6300 0%, #fe9f00 100%);
1357
- background-image: linear-gradient(30deg, #fe6300 0%, #fe9f00 100%);
1358
- -webkit-transition: all 0.2s ease-in-out;
1359
- transition: all 0.2s ease-in-out;
1360
- }
1361
-
1362
- .pa-white-label-notice-content a.pa-get-pro:hover {
1363
- background-image: -webkit-linear-gradient(-60deg, #fe6300 0%, #fe9f00 100%);
1364
- background-image: linear-gradient(-30deg, #fe6300 0%, #fe9f00 100%);
1365
- }
1366
-
1367
- /*
1368
- * System Info Tab
1369
- */
1370
- .pa-section-info table.widefat {
1371
- border: 0px;
1372
- -webkit-box-shadow: none;
1373
- box-shadow: none;
1374
- font-family: "Poppins";
1375
- }
1376
-
1377
- .pa-section-info .widefat td:first-child {
1378
- width: 30%;
1379
- }
1380
-
1381
- .pa-section-info table.widefat tr:nth-child(2n) {
1382
- background-color: #f7f7f7;
1383
- }
1384
-
1385
- /*
1386
- * License Tab
1387
- */
1388
- .pa-license-form span {
1389
- color: #474747;
1390
- font-family: "Poppins";
1391
- }
1392
-
1393
- .pa-license-form label {
1394
- display: block;
1395
- font-weight: 500;
1396
- margin: 2em 0 0.5em;
1397
- }
1398
-
1399
- .pa-license-form code {
1400
- padding: 3px 5px 2px;
1401
- margin: 0 1px;
1402
- background: #eaeaea;
1403
- background: rgba(0, 0, 0, 0.07);
1404
- font-size: 13px;
1405
- font-style: italic;
1406
- }
1407
-
1408
- .pa-license-form .button.button-primary {
1409
- width: 147px;
1410
- height: 43px;
1411
- /* -webkit-filter: drop-shadow(0px 10px 35px rgba(0, 165, 229, 0.3));
1412
- filter: drop-shadow(0px 10px 35px rgba(0, 165, 229, 0.3)); */
1413
- background-color: #00a5e5;
1414
- /* margin-top: 50px; */
1415
- margin-right: -3px;
1416
- -webkit-border-radius: 10px 0 0 10px;
1417
- border-radius: 10px 0 0 10px;
1418
- border: none;
1419
- }
1420
-
1421
- #papro-license-key:focus,
1422
- .pa-license-form .button.button-primary:focus {
1423
- outline: none;
1424
- -webkit-box-shadow: none;
1425
- box-shadow: none;
1426
- }
1427
-
1428
- #papro-license-key {
1429
- height: 43px;
1430
- line-height: 1;
1431
- margin: 0;
1432
- padding: 8px 20px;
1433
- -webkit-border-radius: 0 10px 10px 0;
1434
- border-radius: 0 10px 10px 0;
1435
- }
1436
-
1437
- .pa-license-form input+span {
1438
- margin-right: 10px;
1439
- font-weight: 600;
1440
- }
1441
-
1442
- .pa-license-cell span {
1443
- margin-right: 0.3em;
1444
- }
1445
-
1446
- @media(min-width: 1550px) {
1447
- #pa-general-settings .pa-section-info:not(.pa-news-section):not(.pa-support-section) p {
1448
- min-height: 65px;
1449
- }
1450
-
1451
- .pa-news-grid .pa-news-post p:nth-of-type(1) {
1452
- min-height: 40px;
1453
- }
1454
- }
1455
-
1456
- /*
1457
- * PAPRO Notice
1458
- */
1459
- .papro-admin-notice {
1460
- -webkit-display: flex;
1461
- display: -webkit-box;
1462
- display: -ms-flexbox;
1463
- -js-display: flex;
1464
- display: -moz-box;
1465
- display: flex;
1466
- -webkit-box-pack: end;
1467
- -ms-flex-pack: end;
1468
- -webkit-justify-content: flex-end;
1469
- -moz-box-pack: end;
1470
- justify-content: flex-end;
1471
- -webkit-box-align: center;
1472
- -ms-flex-align: center;
1473
- -webkit-align-items: center;
1474
- -moz-box-align: center;
1475
- align-items: center;
1476
- margin-bottom: 24px;
1477
- }
1478
-
1479
- .papro-admin-notice>div {
1480
- -webkit-box-flex: 1;
1481
- -webkit-flex-grow: 1;
1482
- -moz-box-flex: 1;
1483
- -ms-flex-positive: 1;
1484
- flex-grow: 1;
1485
- }
1486
-
1487
- .papro-admin-notice-left {
1488
- position: relative;
1489
- padding: 16px;
1490
- -webkit-border-radius: 15px;
1491
- border-radius: 15px;
1492
- background-color: #fff;
1493
- -webkit-flex-basis: 80%;
1494
- -ms-flex-preferred-size: 80%;
1495
- flex-basis: 80%;
1496
- }
1497
-
1498
- .papro-admin-notice-left a {
1499
- position: absolute;
1500
- top: 0;
1501
- right: 0;
1502
- width: 100%;
1503
- height: 100%;
1504
- }
1505
-
1506
- .papro-admin-notice-left a:hover,
1507
- .papro-admin-notice-left a:focus,
1508
- .papro-admin-notice-left a:visited {
1509
- outline: none;
1510
- border: none;
1511
- -webkit-box-shadow: none;
1512
- box-shadow: none;
1513
- text-decoration: none;
1514
- }
1515
-
1516
- .papro-admin-notice-logo {
1517
- -webkit-display: flex;
1518
- display: -webkit-box;
1519
- display: -ms-flexbox;
1520
- -js-display: flex;
1521
- display: -moz-box;
1522
- display: flex;
1523
- -webkit-box-pack: justify;
1524
- -webkit-justify-content: space-between;
1525
- -moz-box-pack: justify;
1526
- -ms-flex-pack: justify;
1527
- justify-content: space-between;
1528
- -webkit-box-align: center;
1529
- -webkit-align-items: center;
1530
- -moz-box-align: center;
1531
- -ms-flex-align: center;
1532
- align-items: center;
1533
- }
1534
-
1535
- .papro-admin-notice-logo label {
1536
- display: block;
1537
- font-weight: 600;
1538
- margin: 10px 0 6px;
1539
- font-size: 14px;
1540
- color: #252c59;
1541
- font-family: "Red Hat Display";
1542
- }
1543
-
1544
- .papro-admin-notice-right {
1545
- -webkit-display: flex;
1546
- display: -webkit-box;
1547
- display: -ms-flexbox;
1548
- -js-display: flex;
1549
- display: -moz-box;
1550
- display: flex;
1551
- -webkit-box-align: center;
1552
- -ms-flex-align: center;
1553
- -webkit-align-items: center;
1554
- -moz-box-align: center;
1555
- align-items: center;
1556
- background: url("../../images/papro-banner.png");
1557
- -webkit-background-size: cover;
1558
- background-size: cover;
1559
- background-repeat: no-repeat;
1560
- padding: 18px;
1561
- -webkit-border-radius: 15px;
1562
- border-radius: 15px;
1563
- overflow: hidden;
1564
- margin-right: 25px;
1565
- }
1566
-
1567
- .papro-admin-notice-right h4 {
1568
- font-size: 20px;
1569
- color: #fff;
1570
- font-weight: 900;
1571
- font-family: "Red Hat Display";
1572
- margin: 0;
1573
- margin-bottom: 8px;
1574
- }
1575
-
1576
- .papro-admin-notice-right p {
1577
- font-size: 14px;
1578
- color: #ffffff;
1579
- font-family: "Poppins";
1580
- margin: 0;
1581
- }
1582
-
1583
- .papro-admin-notice-right span {
1584
- font-weight: 700;
1585
- }
1586
-
1587
- /*
1588
- * Dashboard Tabs
1589
- */
1590
- .pa-dash-general:before {
1591
- content: "\e93e";
1592
- }
1593
-
1594
- .pa-dash-integrations:before {
1595
- content: "\e93f";
1596
- }
1597
-
1598
- .pa-dash-system-info:before {
1599
- content: "\e941";
1600
- }
1601
-
1602
- .pa-dash-vcontrol:before {
1603
- content: "\e942";
1604
- }
1605
-
1606
- .pa-dash-white-label:before {
1607
- content: "\e943";
1608
- }
1609
-
1610
- .pa-dash-elements:before {
1611
- content: "\e944";
1612
- }
1613
-
1614
- .pa-dash-license:before {
1615
- content: "\e940";
1616
- }
1617
-
1618
- .pa-dash-features:before {
1619
- content: "\e911";
1620
- }
1621
-
1622
- /*
1623
- * Elements Categories
1624
- */
1625
- .pa-dash-cat-all:before {
1626
- content: "\e945";
1627
- }
1628
-
1629
- .pa-dash-cat-blurbs:before {
1630
- content: "\e946";
1631
- }
1632
-
1633
- .pa-dash-cat-contact:before {
1634
- content: "\e94a";
1635
- }
1636
-
1637
- .pa-dash-cat-content:before {
1638
- content: "\e948";
1639
- }
1640
-
1641
- .pa-dash-cat-images:before {
1642
- content: "\e949";
1643
- }
1644
-
1645
- .pa-dash-cat-off-grid:before {
1646
- content: "\e94b";
1647
- }
1648
-
1649
- .pa-dash-cat-section:before {
1650
- content: "\e94c";
1651
- }
1652
-
1653
- .pa-dash-cat-feed:before {
1654
- content: "\e94d";
1655
- }
1656
-
1657
- .pa-dash-cat-data:before {
1658
- content: "\e94e";
1659
- }
1660
-
1661
- .pa-dash-cat-social:before {
1662
- content: "\e94f";
1663
- }
1664
-
1665
- /*
1666
- * Widgets Icons
1667
- */
1668
- .pa-dash-premium-notbar:before {
1669
- content: "\e902";
1670
- }
1671
-
1672
- .pa-dash-premium-gradient:before {
1673
- content: "\e903";
1674
- }
1675
-
1676
- .pa-dash-premium-color-transition:before {
1677
- content: "\e904";
1678
- }
1679
-
1680
- .pa-dash-premium-behance:before {
1681
- content: "\e905";
1682
- }
1683
-
1684
- .pa-dash-premium-charts:before {
1685
- content: "\e906";
1686
- }
1687
-
1688
- .pa-dash-premium-content-toggle:before {
1689
- content: "\e907";
1690
- }
1691
-
1692
- .pa-dash-premium-divider:before {
1693
- content: "\e908";
1694
- }
1695
-
1696
- .pa-dash-premium-facebook-feed:before {
1697
- content: "\e90a";
1698
- }
1699
-
1700
- .pa-dash-facebook-feed-2:before {
1701
- content: "\e91b";
1702
- }
1703
-
1704
- .pa-dash-premium-fb-chat:before {
1705
- content: "\e90b";
1706
- }
1707
-
1708
- .pa-dash-premium-facebook-reviews:before {
1709
- content: "\e90c";
1710
- }
1711
-
1712
- .pa-dash-premium-google-reviews:before {
1713
- content: "\e90d";
1714
- }
1715
-
1716
- .pa-dash-premium-hscroll:before {
1717
- content: "\e90e";
1718
- }
1719
-
1720
- .pa-dash-premium-flipbox:before {
1721
- content: "\e90f";
1722
- }
1723
-
1724
- .pa-dash-premium-iconbox:before {
1725
- content: "\e910";
1726
- }
1727
-
1728
- .pa-dash-premium-image-accordion:before {
1729
- content: "\e912";
1730
- }
1731
-
1732
- .pa-dash-premium-image-comparison:before {
1733
- content: "\e913";
1734
- }
1735
-
1736
- .pa-dash-premium-image-hotspots:before {
1737
- content: "\e914";
1738
- }
1739
-
1740
- .pa-dash-premium-img-layers:before {
1741
- content: "\e915";
1742
- }
1743
-
1744
- .pa-dash-premium-instagram-feed:before {
1745
- content: "\e916";
1746
- }
1747
-
1748
- .pa-dash-premium-kenburns:before {
1749
- content: "\e917";
1750
- }
1751
-
1752
- .pa-dash-premium-lottie:before {
1753
- content: "\e918";
1754
- }
1755
-
1756
- .pa-dash-premium-magic-section:before {
1757
- content: "\e919";
1758
- }
1759
-
1760
- .pa-dash-premium-multi-scroll:before {
1761
- content: "\e91a";
1762
- }
1763
-
1764
- .pa-dash-premium-ihover:before {
1765
- content: "\e911";
1766
- }
1767
-
1768
- .pa-dash-premium-parallax:before {
1769
- content: "\e91b";
1770
- }
1771
-
1772
- .pa-dash-premium-particles:before {
1773
- content: "\e91c";
1774
- }
1775
-
1776
- .pa-dash-premium-prev-img:before {
1777
- content: "\e91d";
1778
- }
1779
-
1780
- .pa-dash-premium-tabs:before {
1781
- content: "\e91f";
1782
- }
1783
-
1784
- .pa-dash-premium-tables:before {
1785
- content: "\e91e";
1786
- }
1787
-
1788
- .pa-dash-premium-twitter-feed:before {
1789
- content: "\e921";
1790
- }
1791
-
1792
- .pa-dash-premium-unfold:before {
1793
- content: "\e922";
1794
- }
1795
-
1796
- .pa-dash-premium-whatsapp-chat:before {
1797
- content: "\e923";
1798
- }
1799
-
1800
- .pa-dash-premium-yelp-reviews:before {
1801
- content: "\e924";
1802
- }
1803
-
1804
- .pa-dash-premium-trustpilot-reviews:before {
1805
- content: "\e920";
1806
- }
1807
-
1808
- .pa-dash-premium-banner:before {
1809
- content: "\e925";
1810
- }
1811
-
1812
- .pa-dash-premium-blog:before {
1813
- content: "\e926";
1814
- }
1815
-
1816
- .pa-dash-premium-button:before {
1817
- content: "\e927";
1818
- }
1819
-
1820
- .pa-dash-premium-carousel:before {
1821
- content: "\e928";
1822
- }
1823
-
1824
- .pa-dash-premium-contactform:before {
1825
- content: "\e929";
1826
- }
1827
-
1828
- .pa-dash-premium-countdown:before {
1829
- content: "\e92a";
1830
- }
1831
-
1832
- .pa-dash-premium-counter:before {
1833
- content: "\e92b";
1834
- }
1835
-
1836
- .pa-dash-premium-dual-header:before {
1837
- content: "\e92c";
1838
- }
1839
-
1840
- .pa-dash-premium-fancytext:before {
1841
- content: "\e92d";
1842
- }
1843
-
1844
- .pa-dash-premium-maps:before {
1845
- content: "\e92e";
1846
- }
1847
-
1848
- .pa-dash-premium-title:before {
1849
- content: "\e92f";
1850
- }
1851
-
1852
- .pa-dash-premium-icon-list:before {
1853
- content: "\e930";
1854
- }
1855
-
1856
- .pa-dash-premium-image-button:before {
1857
- content: "\e931";
1858
- }
1859
-
1860
- .pa-dash-premium-image-scroll:before {
1861
- content: "\e932";
1862
- }
1863
-
1864
- .pa-dash-premium-image-separator:before {
1865
- content: "\e933";
1866
- }
1867
-
1868
- /* .pa-dash-premium-lottie:before {
1869
- content: "\e944";
1870
- } */
1871
- .pa-dash-premium-lottie-widget:before {
1872
- content: "\e935";
1873
- }
1874
-
1875
- .pa-dash-premium-grid:before {
1876
- content: "\e946";
1877
- }
1878
-
1879
- .pa-dash-premium-modalbox:before {
1880
- content: "\e937";
1881
- }
1882
-
1883
- .pa-dash-premium-pricing-table:before {
1884
- content: "\e938";
1885
- }
1886
-
1887
- .pa-dash-premium-progressbar:before {
1888
- content: "\e939";
1889
- }
1890
-
1891
- .pa-dash-premium-person:before {
1892
- content: "\e93a";
1893
- }
1894
-
1895
- .pa-dash-premium-testimonials:before {
1896
- content: "\e93b";
1897
- }
1898
-
1899
- .pa-dash-premium-vscroll:before {
1900
- content: "\e93c";
1901
- }
1902
-
1903
- .pa-dash-premium-videobox:before {
1904
- content: "\e93d";
1905
- }
1906
-
1907
- .pa-dash-premium-blob:before {
1908
- content: "\e900";
1909
- }
1910
-
1911
- .pa-dash-woo-products:before {
1912
- content: "\e901";
1913
  }
1
+ .button.pa-btn {
2
+ border: none;
3
+ color: #fff;
4
+ text-align: center;
5
+ padding: 3px;
6
+ max-width: 250px;
7
+ height: auto;
8
+ font-weight: 700;
9
+ -webkit-box-shadow: none;
10
+ box-shadow: none;
11
+ }
12
+
13
+ .button.pa-btn:hover,
14
+ .button.pa-btn:focus,
15
+ .button.pa-btn:active {
16
+ outline: none;
17
+ border: none;
18
+ text-decoration: none;
19
+ }
20
+
21
+
22
+ .switch {
23
+ position: relative;
24
+ display: inline-block;
25
+ width: 44px;
26
+ height: 24px;
27
+ -webkit-border-radius: 12px;
28
+ border-radius: 12px;
29
+ }
30
+
31
+ .switch input {
32
+ display: none;
33
+ }
34
+
35
+ .slider,
36
+ .pro-slider {
37
+ position: absolute;
38
+ cursor: pointer;
39
+ top: 0;
40
+ right: 0;
41
+ left: 0;
42
+ bottom: 0;
43
+ /* background-color: #f2f2f2;
44
+ box-shadow: 0 0 2px 1px #ccc inset; */
45
+ -webkit-transition: 0.4s;
46
+ transition: 0.4s;
47
+ }
48
+
49
+ .slider:before,
50
+ .pro-slider:before {
51
+ position: absolute;
52
+ content: "";
53
+ right: 3px;
54
+ top: 50%;
55
+ -webkit-transform: translateY(-50%);
56
+ -ms-transform: translateY(-50%);
57
+ transform: translateY(-50%);
58
+ /* background: radial-gradient(farthest-corner at 14px 0px, #f0f0f0 50%, #cacaca 100%); */
59
+ -webkit-transition: all 0.4s ease-in-out;
60
+ transition: all 0.4s ease-in-out;
61
+ padding: 0;
62
+ margin: 0;
63
+ width: 15px;
64
+ height: 15px;
65
+ -webkit-border-radius: 8px;
66
+ border-radius: 8px;
67
+ -webkit-filter: drop-shadow(0px 5px 2.5px rgba(40, 40, 40, 0.35));
68
+ filter: drop-shadow(0px 5px 2.5px rgba(40, 40, 40, 0.35));
69
+ background-color: #f7f7f7;
70
+ border: 1px solid #ffffff;
71
+ /* box-shadow: 0 2.5px 5px #b8b8b9; */
72
+ }
73
+
74
+ input:checked+.slider {
75
+ background: #8dc900;
76
+ }
77
+
78
+ input:focus+.slider {
79
+ -webkit-box-shadow: 0 0 1px #18a4fd;
80
+ box-shadow: 0 0 1px #18a4fd;
81
+ }
82
+
83
+ input:checked+.slider:before {
84
+ -webkit-transform: translate3d(-20px, -50%, 0);
85
+ transform: translate3d(-20px, -50%, 0);
86
+ }
87
+
88
+ .slider.round,
89
+ .pro-slider.round {
90
+ -webkit-border-radius: 34px;
91
+ border-radius: 34px;
92
+ background-image: -webkit-gradient(linear, right top, right bottom, from(#cfcfcf), to(#dbdbdb));
93
+ background-image: -webkit-linear-gradient(top, #cfcfcf 0%, #dbdbdb 100%);
94
+ background-image: linear-gradient(-180deg, #cfcfcf 0%, #dbdbdb 100%);
95
+ }
96
+
97
+ .slider.round:before,
98
+ .pro-slider.round:before {
99
+ -webkit-border-radius: 50%;
100
+ border-radius: 50%;
101
+ }
102
+
103
+ .pa-switcher input:disabled+.pro-slider::after {
104
+ position: absolute;
105
+ font-family: "Dashicons";
106
+ content: "\f160";
107
+ color: #474747;
108
+ left: 8px;
109
+ top: 50%;
110
+ -webkit-transform: translateY(-50%);
111
+ -ms-transform: translateY(-50%);
112
+ transform: translateY(-50%);
113
+ }
114
+
115
+ .pa-api-disable-title label,
116
+ .pa-is-beta label {
117
+ margin-left: 15px;
118
+ }
119
+
120
+ .pa-api-disable-title span,
121
+ .pa-is-beta span {
122
+ font-weight: 400;
123
+ }
124
+
125
+ .pa-maps-api-notice {
126
+ margin: 0.5em 0;
127
+ }
128
+
129
+ .pa-api-title input {
130
+ margin-top: 10px;
131
+ font-size: normal;
132
+ font-weight: 400;
133
+ width: 400px;
134
+ margin-right: 30px;
135
+ }
136
+
137
+ .pa-sys-info-tab {
138
+ background: #f7f7f7;
139
+ margin: 8px;
140
+ border: 2px solid #ddd;
141
+ -webkit-border-radius: 3px;
142
+ border-radius: 3px;
143
+ padding: 0;
144
+ }
145
+
146
+ .pa-system-info-container {
147
+ padding: 10px;
148
+ }
149
+
150
+ .dialog-type-lightbox .dialog-widget-header {
151
+ text-align: center;
152
+ font-size: 15px;
153
+ color: #495157;
154
+ padding: 30px 0 10px;
155
+ font-weight: 500;
156
+ }
157
+
158
+ .pa-swal.swal2-show {
159
+ padding: 32px;
160
+ padding-bottom: 50px;
161
+ background-image: url("../../images/popup-pattern.jpg");
162
+ background-repeat: no-repeat;
163
+ -webkit-background-size: cover;
164
+ background-size: cover;
165
+ -webkit-border-radius: 0 50px;
166
+ border-radius: 0 50px;
167
+ }
168
+
169
+ .pa-swal .swal2-close {
170
+ color: #c2c4cf;
171
+ }
172
+
173
+ .pa-swal .swal2-close:hover {
174
+ color: #00a5e5;
175
+ }
176
+
177
+ .pa-swal .swal2-title {
178
+ margin: 0;
179
+ }
180
+
181
+ .pa-swal .swal2-content {
182
+ font-size: 13px;
183
+ color: #474747;
184
+ font-family: "Poppins";
185
+ text-align: center;
186
+ margin: 0;
187
+ margin-bottom: 0px;
188
+ }
189
+
190
+ .pa-swal .swal2-cancel.swal2-styled,
191
+ .pa-swal .swal2-cancel.swal2-styled:hover,
192
+ .pa-swal .swal2-confirm.swal2-styled {
193
+ background-image: none !important;
194
+ background-color: #ebebeb;
195
+ color: #474747;
196
+ border: none !important;
197
+ -webkit-box-shadow: none !important;
198
+ box-shadow: none !important;
199
+ font-family: "Red Hat Display";
200
+ font-size: 15px;
201
+ font-weight: 700;
202
+ }
203
+
204
+ .pa-swal .swal2-confirm.swal2-styled,
205
+ .pa-swal .swal2-confirm.swal2-styled:hover {
206
+ min-width: 128px;
207
+ color: #fff;
208
+ background-image: none !important;
209
+ background-color: #00a5e5;
210
+ }
211
+
212
+ /**
213
+ * New Dashboard
214
+ */
215
+ .pa-settings-wrap {
216
+ padding: 35px;
217
+ padding-right: 15px;
218
+ }
219
+
220
+ .pa-settings-section {
221
+ display: none;
222
+ }
223
+
224
+ .pa-settings-tabs {
225
+ background-color: #fff;
226
+ -webkit-border-radius: 15px;
227
+ border-radius: 15px;
228
+ padding: 36px;
229
+ margin-bottom: 12px;
230
+ }
231
+
232
+ .pa-settings-tabs-list {
233
+ clear: right;
234
+ margin: 0;
235
+ list-style-type: none;
236
+ }
237
+
238
+ .pa-settings-tabs .pa-settings-tabs-list li {
239
+ display: inline-block;
240
+ margin-bottom: 0;
241
+ margin-left: 23px;
242
+ }
243
+
244
+ .pa-settings-section.active {
245
+ display: block;
246
+ }
247
+
248
+ .papro-admin-notice a,
249
+ .pa-settings-wrap .pa-settings-tabs a {
250
+ -js-display: flex;
251
+ display: -webkit-box;
252
+ display: -webkit-flex;
253
+ display: -moz-box;
254
+ display: -ms-flexbox;
255
+ display: flex;
256
+ -webkit-box-pack: center;
257
+ -webkit-justify-content: center;
258
+ -moz-box-pack: center;
259
+ -ms-flex-pack: center;
260
+ justify-content: center;
261
+ -webkit-box-align: center;
262
+ -webkit-align-items: center;
263
+ -moz-box-align: center;
264
+ -ms-flex-align: center;
265
+ align-items: center;
266
+ font-size: 14px;
267
+ line-height: 1.8em;
268
+ position: relative;
269
+ color: #252c59;
270
+ text-decoration: none;
271
+ -webkit-transition: all 0.3s ease;
272
+ transition: all 0.3s ease;
273
+ }
274
+
275
+ .papro-admin-notice a.papro-notice-btn {
276
+ width: 120px;
277
+ /* height: 58px; */
278
+ -webkit-border-radius: 15px;
279
+ border-radius: 15px;
280
+ -webkit-filter: drop-shadow(0px 5px 50px rgba(87, 0, 101, 0.7));
281
+ filter: drop-shadow(0px 5px 50px rgba(87, 0, 101, 0.7));
282
+ background-color: #ffffff;
283
+ font-size: 18px;
284
+ color: #fe6300;
285
+ font-weight: 800;
286
+ font-family: "Red Hat Display";
287
+ text-align: center;
288
+ padding: 10px 20px;
289
+ }
290
+
291
+ .pa-settings-wrap .pa-settings-tabs a:focus {
292
+ outline: none;
293
+ -webkit-box-shadow: none;
294
+ box-shadow: none;
295
+ }
296
+
297
+ .pa-settings-wrap .pa-settings-tabs span {
298
+ margin-right: 8px;
299
+ font-family: "Poppins";
300
+ font-weight: 500;
301
+ }
302
+
303
+ .pa-settings-wrap .pa-settings-tabs .pa-section-active {
304
+ color: #00a5e5;
305
+ }
306
+
307
+ .pa-section {
308
+ display: none;
309
+ position: relative;
310
+ background-color: #fff;
311
+ -webkit-transition: opacity 0.2s;
312
+ transition: opacity 0.2s;
313
+ padding: 34px;
314
+ -webkit-border-radius: 15px;
315
+ border-radius: 15px;
316
+ }
317
+
318
+ /**
319
+ * General Tab
320
+ */
321
+ #pa-general-settings {
322
+ -js-display: flex;
323
+ display: -webkit-box;
324
+ display: -webkit-flex;
325
+ display: -moz-box;
326
+ display: -ms-flexbox;
327
+ display: flex;
328
+ -webkit-box-orient: horizontal;
329
+ -webkit-box-direction: normal;
330
+ -webkit-flex-flow: row wrap;
331
+ -moz-box-orient: horizontal;
332
+ -moz-box-direction: normal;
333
+ -ms-flex-flow: row wrap;
334
+ flex-flow: row wrap;
335
+ -webkit-box-pack: justify;
336
+ -webkit-justify-content: space-between;
337
+ -moz-box-pack: justify;
338
+ -ms-flex-pack: justify;
339
+ justify-content: space-between;
340
+ width: 100%;
341
+ }
342
+
343
+ #pa-general-settings .pa-dash-block {
344
+ -webkit-box-flex: 1;
345
+ -webkit-flex: 1 1 auto;
346
+ -moz-box-flex: 1;
347
+ -ms-flex: 1 1 auto;
348
+ flex: 1 1 auto;
349
+ min-width: 250px;
350
+ margin: 0 5px 10px;
351
+ -js-display: flex;
352
+ display: -webkit-box;
353
+ display: -webkit-flex;
354
+ display: -moz-box;
355
+ display: -ms-flexbox;
356
+ display: flex;
357
+ -webkit-box-orient: vertical;
358
+ -webkit-box-direction: normal;
359
+ -webkit-flex-direction: column;
360
+ -moz-box-orient: vertical;
361
+ -moz-box-direction: normal;
362
+ -ms-flex-direction: column;
363
+ flex-direction: column;
364
+ }
365
+
366
+ .pa-dash-block.col-3 {
367
+ width: 31%;
368
+ }
369
+
370
+ .pa-dash-block.col-6 {
371
+ width: 64%;
372
+ }
373
+
374
+ #pa-general-settings .pa-section-info h4 {
375
+ font-size: 17px;
376
+ }
377
+
378
+ #pa-general-settings .pa-section-info:not(.pa-news-section):not(.pa-support-section) p {
379
+ min-height: 80px;
380
+ }
381
+
382
+ #pa-general-settings .pa-section-info .pa-element-icon {
383
+ margin-bottom: 12px;
384
+ }
385
+
386
+ #pa-general-settings .pa-element-icon.icon-inline {
387
+ -js-display: inline-flex;
388
+ display: -webkit-inline-box;
389
+ display: -webkit-inline-flex;
390
+ display: -moz-inline-box;
391
+ display: -ms-inline-flexbox;
392
+ display: inline-flex;
393
+ margin-bottom: 0;
394
+ vertical-align: middle;
395
+ }
396
+
397
+ #pa-general-settings .pa-section-info .pa-btn {
398
+ display: inline-block;
399
+ background-color: #252c59;
400
+ color: #fff;
401
+ /* margin-top: 12px; */
402
+ padding: 12px 36px;
403
+ }
404
+
405
+ .pa-element-icon.dashicons-facebook-alt {
406
+ color: #3b5998 !important
407
+ }
408
+
409
+ .pa-element-icon.dashicons-youtube {
410
+ color: #ff0000 !important
411
+ }
412
+
413
+ .pa-newsletter-form {
414
+ -js-display: flex;
415
+ display: -webkit-box;
416
+ display: -webkit-flex;
417
+ display: -moz-box;
418
+ display: -ms-flexbox;
419
+ display: flex;
420
+ -webkit-flex-wrap: wrap;
421
+ -ms-flex-wrap: wrap;
422
+ flex-wrap: wrap;
423
+ -webkit-box-align: center;
424
+ -webkit-align-items: center;
425
+ -moz-box-align: center;
426
+ -ms-flex-align: center;
427
+ align-items: center;
428
+ }
429
+
430
+ .pa-newsletter-form input {
431
+ width: 74%;
432
+ padding: 0px 10px;
433
+ height: 39px;
434
+ font-family: "Poppins";
435
+ border: 1px solid #dcdcdc;
436
+ -webkit-border-radius: 0 10px 10px 0;
437
+ border-radius: 0 10px 10px 0;
438
+ direction: rtl;
439
+ }
440
+
441
+ #pa-general-settings .pa-newsletter-form button.pa-btn {
442
+ width: 25%;
443
+ padding: 0;
444
+ height: 39px;
445
+ margin-top: 0;
446
+ margin-right: -1px;
447
+ -webkit-border-radius: 10px 0 0 10px;
448
+ border-radius: 10px 0 0 10px;
449
+ }
450
+
451
+ #pa-general-settings .pa-news-grid {
452
+ -js-display: flex;
453
+ display: -webkit-box;
454
+ display: -webkit-flex;
455
+ display: -moz-box;
456
+ display: -ms-flexbox;
457
+ display: flex;
458
+ -webkit-box-pack: justify;
459
+ -webkit-justify-content: space-between;
460
+ -moz-box-pack: justify;
461
+ -ms-flex-pack: justify;
462
+ justify-content: space-between;
463
+ margin-top: 12px;
464
+ }
465
+
466
+ .pa-news-grid .pa-news-post {
467
+ position: relative;
468
+ width: 33.33%;
469
+ margin: 0 5px;
470
+ }
471
+
472
+ .pa-news-grid .pa-news-post p:nth-of-type(1) {
473
+ font-family: "Red Hat Display";
474
+ font-size: 15px;
475
+ min-height: 60px;
476
+ font-weight: 800;
477
+ color: #252c59
478
+ }
479
+
480
+ .pa-news-grid .pa-news-post p:nth-of-type(2) {
481
+ font-size: 12px;
482
+ }
483
+
484
+ .pa-post-img-container img {
485
+ width: 100%;
486
+ height: 145px;
487
+ -o-object-fit: cover;
488
+ object-fit: cover;
489
+ -webkit-border-radius: 10px;
490
+ border-radius: 10px;
491
+ }
492
+
493
+ .pa-news-grid .pa-news-post a {
494
+ position: absolute;
495
+ top: 0;
496
+ right: 0;
497
+ width: 100%;
498
+ height: 100%;
499
+ z-index: 2;
500
+ }
501
+
502
+ #pa-general-settings .pa-support-list {
503
+ margin: 12px 0 0;
504
+ padding: 0;
505
+ }
506
+
507
+ #pa-general-settings .pa-support-list li {
508
+ margin-bottom: 10px;
509
+ }
510
+
511
+ .pa-support-list li a {
512
+ font-size: 15px;
513
+ color: #474747;
514
+ font-family: "Poppins";
515
+ text-decoration: none;
516
+ }
517
+
518
+ .pa-support-list li a:hover {
519
+ color: #135e96;
520
+ }
521
+
522
+ #pa-general-settings input[type="email"],
523
+ #pa-general-settings a:hover,
524
+ #pa-general-settings a:focus,
525
+ #pa-general-settings a:visited {
526
+ border: none;
527
+ -webkit-box-shadow: none;
528
+ box-shadow: none;
529
+ outline: none;
530
+ }
531
+
532
+
533
+ /**
534
+ * Tab Info
535
+ */
536
+ .pa-section-info-wrap {
537
+ padding: 34px;
538
+ -webkit-border-radius: 15px;
539
+ border-radius: 15px;
540
+ background-color: #f7f7f7;
541
+ -js-display: flex;
542
+ display: -webkit-box;
543
+ display: -webkit-flex;
544
+ display: -moz-box;
545
+ display: -ms-flexbox;
546
+ display: flex;
547
+ -webkit-box-pack: justify;
548
+ -webkit-justify-content: space-between;
549
+ -moz-box-pack: justify;
550
+ -ms-flex-pack: justify;
551
+ justify-content: space-between;
552
+ -webkit-box-align: center;
553
+ -webkit-align-items: center;
554
+ -moz-box-align: center;
555
+ -ms-flex-align: center;
556
+ align-items: center;
557
+ height: 100%;
558
+ }
559
+
560
+ #pa-general-settings .pa-section-info-wrap,
561
+ #pa-ver-control-settings .pa-section-info-wrap {
562
+ -webkit-box-orient: vertical;
563
+ -webkit-box-direction: normal;
564
+ -webkit-flex-direction: column;
565
+ -moz-box-orient: vertical;
566
+ -moz-box-direction: normal;
567
+ -ms-flex-direction: column;
568
+ flex-direction: column;
569
+ -webkit-box-align: start;
570
+ -webkit-align-items: flex-start;
571
+ -moz-box-align: start;
572
+ -ms-flex-align: start;
573
+ align-items: flex-start;
574
+ }
575
+
576
+ #pa-features-settings .pa-section-info-wrap:nth-of-type(n + 2),
577
+ #pa-ver-control-settings .pa-section-info-wrap:nth-of-type(n + 2) {
578
+ margin-top: 36px;
579
+ }
580
+
581
+ .pa-section-info-wrap h4 {
582
+ font-size: 20px;
583
+ color: #252c59;
584
+ font-weight: 900;
585
+ font-family: "Red Hat Display";
586
+ margin: 0;
587
+ }
588
+
589
+ .pa-section-info-wrap p {
590
+ font-size: 14px;
591
+ color: #474747;
592
+ font-family: "Poppins";
593
+ margin: 0;
594
+ margin-top: 14px;
595
+ }
596
+
597
+ .pa-section-info-cta {
598
+ -js-display: flex;
599
+ display: -webkit-box;
600
+ display: -webkit-flex;
601
+ display: -moz-box;
602
+ display: -ms-flexbox;
603
+ display: flex;
604
+ -webkit-box-align: center;
605
+ -webkit-align-items: center;
606
+ -moz-box-align: center;
607
+ -ms-flex-align: center;
608
+ align-items: center;
609
+ margin-top: 25px;
610
+ }
611
+
612
+ .pa-section-info-cta .pa-btn {
613
+ color: #474747;
614
+ background-color: #ebebeb;
615
+ padding: 8px 20px;
616
+ -webkit-border-radius: 10px;
617
+ border-radius: 10px;
618
+ font-size: 15px;
619
+ font-weight: 700;
620
+ font-family: "Red Hat Display";
621
+ -webkit-transition: all 0.2s ease-in-out;
622
+ transition: all 0.2s ease-in-out;
623
+ }
624
+
625
+ .pa-section-info-cta .pa-btn:hover,
626
+ .pa-section-info-cta .pa-btn:focus,
627
+ .pa-section-info-cta .pa-btn:active {
628
+ color: #fff;
629
+ background-color: #00a5e5;
630
+ }
631
+
632
+ .pa-section-info-cta .pa-section-info-label {
633
+ font-size: 13px;
634
+ color: #474747;
635
+ font-family: "Poppins";
636
+ text-align: left;
637
+ }
638
+
639
+ .pa-section-info-cta .pa-section-info-warning {
640
+ font-size: 13px;
641
+ color: #cca329;
642
+ font-weight: 300;
643
+ font-family: "Poppins";
644
+ margin-right: 20px;
645
+ }
646
+
647
+ .pa-section-info-cta .pa-section-info-warning i {
648
+ font-weight: 300;
649
+ vertical-align: bottom;
650
+ }
651
+
652
+ .pa-section-info-wrap .pa-btn,
653
+ .pa-section-info-wrap .pa-btn-unused {
654
+ font-family: "Red Hat Display";
655
+ color: #8e8e8e;
656
+ background-color: #ebebeb;
657
+ border: 0px solid;
658
+ padding: 16px 28px;
659
+ -webkit-border-radius: 10px;
660
+ border-radius: 10px;
661
+ font-size: 15px;
662
+ font-weight: 700;
663
+ cursor: pointer;
664
+ -webkit-transition: 300ms;
665
+ transition: 300ms;
666
+ display: block;
667
+ text-decoration: none;
668
+ }
669
+
670
+ .pa-section-info-wrap .pa-btn-unused {
671
+ width: 100%;
672
+ clear: both;
673
+ background: transparent;
674
+ color: #252C59;
675
+ padding-bottom: 0;
676
+ text-decoration: underline;
677
+ font-weight: normal;
678
+ }
679
+
680
+ .pa-section-info-wrap .pa-btn-unused.dimmed {
681
+ cursor: no-drop;
682
+ color: #C2C4CF;
683
+ }
684
+
685
+ .pa-element-name .pa-total-use {
686
+ color: #252C59;
687
+ }
688
+
689
+ .pa-section-info-wrap button.pa-btn-enable {
690
+ -webkit-border-top-left-radius: 0;
691
+ border-top-left-radius: 0;
692
+ -webkit-border-bottom-left-radius: 0;
693
+ border-bottom-left-radius: 0;
694
+ float: right;
695
+ }
696
+
697
+ .pa-section-info-wrap button.pa-btn-disable {
698
+ -webkit-border-top-right-radius: 0;
699
+ border-top-right-radius: 0;
700
+ -webkit-border-bottom-right-radius: 0;
701
+ border-bottom-right-radius: 0;
702
+ float: left;
703
+ }
704
+
705
+ .pa-section-info-wrap .pa-btn-enable.active {
706
+ color: #fff;
707
+ -webkit-box-shadow: inset -3.5px 1.8px 7px 0px rgba(125, 125, 125, 0.5);
708
+ box-shadow: inset -3.5px 1.8px 7px 0px rgba(125, 125, 125, 0.5);
709
+ background-color: #8dc900;
710
+ }
711
+
712
+ .pa-section-info-wrap .pa-btn-disable.active {
713
+ color: #fff;
714
+ -webkit-box-shadow: inset -3.564px 1.816px 7px 0px rgba(81, 81, 81, 0.5);
715
+ box-shadow: inset -3.564px 1.816px 7px 0px rgba(81, 81, 81, 0.5);
716
+ background-color: #898989;
717
+ }
718
+
719
+ .pa-section-info-wrap .pa-btn-enable:not(.active):hover {
720
+ color: #ffffff;
721
+ background-color: #8dc900;
722
+ }
723
+
724
+ .pa-section-info-wrap .pa-btn-disable:not(.active):hover {
725
+ color: #ffffff;
726
+ background-color: #898989;
727
+ }
728
+
729
+ /*
730
+ * Widgets & Addons Tab
731
+ */
732
+ .pa-elements-settings {
733
+ position: relative;
734
+ -js-display: flex;
735
+ display: -webkit-box;
736
+ display: -webkit-flex;
737
+ display: -moz-box;
738
+ display: -ms-flexbox;
739
+ display: flex;
740
+ margin-top: 16px;
741
+ }
742
+
743
+ .pa-elements-filter {
744
+ position: absolute;
745
+ top: 10px;
746
+ left: 16px;
747
+ }
748
+
749
+ .pa-elements-filter label {
750
+ font-size: 13px;
751
+ color: #474747;
752
+ font-family: "Poppins";
753
+ margin-left: 10px;
754
+ }
755
+
756
+ .pa-elements-filter select {
757
+ padding: 5px 15px 5px 35px;
758
+ }
759
+
760
+ .pa-elements-tabs {
761
+ -webkit-border-radius: 10px;
762
+ border-radius: 10px;
763
+ background-color: #f7f7f7;
764
+ padding: 20px;
765
+ margin-left: 16px;
766
+ }
767
+
768
+ .pa-elements-tabs .pa-elements-tab {
769
+ position: relative;
770
+ padding: 0;
771
+ margin-bottom: 12px;
772
+ text-align: center;
773
+ }
774
+
775
+ .pa-elements-tab .pa-element-tab-tooltip {
776
+ position: absolute;
777
+ background-color: #3a3c40;
778
+ display: block;
779
+ position: absolute;
780
+ top: 50%;
781
+ right: 100%;
782
+ padding: 10px 20px;
783
+ -webkit-border-radius: 13px;
784
+ border-radius: 13px;
785
+ -webkit-filter: drop-shadow(0px 5px 27.5px rgba(104, 104, 104, 0.3));
786
+ filter: drop-shadow(0px 5px 27.5px rgba(104, 104, 104, 0.3));
787
+ background-color: #ffffff;
788
+ font-size: 11px;
789
+ color: #252c59;
790
+ font-weight: 500;
791
+ font-family: "Poppins";
792
+ opacity: 0;
793
+ pointer-events: none;
794
+ text-transform: capitalize;
795
+ -webkit-transform: translate(-30px, -50%);
796
+ -ms-transform: translate(-30px, -50%);
797
+ transform: translate(-30px, -50%);
798
+ -webkit-transition: all 0.3s ease;
799
+ transition: all 0.3s ease;
800
+ z-index: 1;
801
+ white-space: nowrap;
802
+ }
803
+
804
+ .pa-elements-tab .pa-element-tab-tooltip::before {
805
+ display: block;
806
+ position: absolute;
807
+ top: 50%;
808
+ right: -5px;
809
+ width: 0;
810
+ height: 0;
811
+ content: "";
812
+ border-top: 5px solid transparent;
813
+ border-bottom: 5px solid transparent;
814
+ border-left: 5px solid #ffffff;
815
+ -webkit-transform: translateY(-50%);
816
+ -ms-transform: translateY(-50%);
817
+ transform: translateY(-50%);
818
+ }
819
+
820
+ .pa-elements-tab .pa-elements-tab-link {
821
+ -js-display: flex;
822
+ display: -webkit-box;
823
+ display: -webkit-flex;
824
+ display: -moz-box;
825
+ display: -ms-flexbox;
826
+ display: flex;
827
+ -webkit-box-pack: center;
828
+ -webkit-justify-content: center;
829
+ -moz-box-pack: center;
830
+ -ms-flex-pack: center;
831
+ justify-content: center;
832
+ -webkit-box-align: center;
833
+ -webkit-align-items: center;
834
+ -moz-box-align: center;
835
+ -ms-flex-align: center;
836
+ align-items: center;
837
+ color: #c2c4cf;
838
+ padding: 12px;
839
+ text-decoration: none;
840
+ -webkit-transition: all 0.3s ease-in-out;
841
+ transition: all 0.3s ease-in-out;
842
+ -webkit-border-radius: 13px;
843
+ border-radius: 13px;
844
+ }
845
+
846
+ .pa-elements-tab .pa-elements-tab-link:hover,
847
+ .pa-elements-tab .pa-elements-tab-link.active {
848
+ -webkit-filter: drop-shadow(-4.243px -4.243px 3px rgba(255, 255, 255, 0.5)) drop-shadow(4.243px 4.243px 3px rgba(191, 201, 210, 0.6));
849
+ filter: drop-shadow(-4.243px -4.243px 3px rgba(255, 255, 255, 0.5)) drop-shadow(4.243px 4.243px 3px rgba(191, 201, 210, 0.6));
850
+ background-color: #ffffff;
851
+ color: #00a5e5;
852
+ outline: none;
853
+ border: none;
854
+ text-decoration: none;
855
+ -webkit-box-shadow: none;
856
+ box-shadow: none;
857
+ }
858
+
859
+ .pa-elements-tab .pa-elements-tab-link:hover+span {
860
+ opacity: 1;
861
+ -webkit-transform: translate(-20px, -50%);
862
+ -ms-transform: translate(-20px, -50%);
863
+ transform: translate(-20px, -50%);
864
+ }
865
+
866
+ .pa-switchers {
867
+ -js-display: flex;
868
+ display: -webkit-box;
869
+ display: -webkit-flex;
870
+ display: -moz-box;
871
+ display: -ms-flexbox;
872
+ display: flex;
873
+ -webkit-flex-wrap: wrap;
874
+ -ms-flex-wrap: wrap;
875
+ flex-wrap: wrap;
876
+ -webkit-align-content: flex-start;
877
+ -ms-flex-line-pack: start;
878
+ align-content: flex-start;
879
+ }
880
+
881
+ .pa-switchers-container {
882
+ width: 100%;
883
+ }
884
+
885
+ .pa-switchers-container.hidden,
886
+ .pa-switcher.hidden {
887
+ display: none;
888
+ }
889
+
890
+ .pa-switchers-container .pa-elements-tab-title {
891
+ font-size: 20px;
892
+ color: #252c59;
893
+ font-weight: 900;
894
+ font-family: "Red Hat Display";
895
+ margin: 16px 0;
896
+ }
897
+
898
+ .pa-switcher {
899
+ -webkit-border-radius: 15px;
900
+ border-radius: 15px;
901
+ background-color: #f7f7f7;
902
+ position: relative;
903
+ -js-display: flex;
904
+ display: -webkit-box;
905
+ display: -webkit-flex;
906
+ display: -moz-box;
907
+ display: -ms-flexbox;
908
+ display: flex;
909
+ width: -webkit-calc(50% - 56px);
910
+ width: calc(50% - 56px);
911
+ -webkit-box-pack: justify;
912
+ -webkit-justify-content: space-between;
913
+ -moz-box-pack: justify;
914
+ -ms-flex-pack: justify;
915
+ justify-content: space-between;
916
+ -webkit-box-align: center;
917
+ -webkit-align-items: center;
918
+ -moz-box-align: center;
919
+ -ms-flex-align: center;
920
+ align-items: center;
921
+ padding: 20px;
922
+ margin-top: 16px;
923
+ margin-left: 16px;
924
+ }
925
+
926
+ .pa-element-info {
927
+ -js-display: flex;
928
+ display: -webkit-box;
929
+ display: -webkit-flex;
930
+ display: -moz-box;
931
+ display: -ms-flexbox;
932
+ display: flex;
933
+ -webkit-box-align: center;
934
+ -webkit-align-items: center;
935
+ -moz-box-align: center;
936
+ -ms-flex-align: center;
937
+ align-items: center;
938
+ }
939
+
940
+ .pa-section .pa-element-icon {
941
+ color: #252c59;
942
+ background-color: #ebebeb;
943
+ -webkit-border-radius: 15px;
944
+ border-radius: 15px;
945
+ /* padding: 12px; */
946
+ min-width: 40px;
947
+ min-height: 40px;
948
+ margin-left: 8px;
949
+ -js-display: flex;
950
+ display: -webkit-box;
951
+ display: -webkit-flex;
952
+ display: -moz-box;
953
+ display: -ms-flexbox;
954
+ display: flex;
955
+ -webkit-box-pack: center;
956
+ -webkit-justify-content: center;
957
+ -moz-box-pack: center;
958
+ -ms-flex-pack: center;
959
+ justify-content: center;
960
+ -webkit-box-align: center;
961
+ -webkit-align-items: center;
962
+ -moz-box-align: center;
963
+ -ms-flex-align: center;
964
+ align-items: center;
965
+ }
966
+
967
+ .pa-element-name {
968
+ font-size: 16px;
969
+ color: #252c59;
970
+ font-weight: 700;
971
+ font-family: "Red Hat Display";
972
+ margin: 0;
973
+ -js-display: flex;
974
+ display: -webkit-box;
975
+ display: -webkit-flex;
976
+ display: -moz-box;
977
+ display: -ms-flexbox;
978
+ display: flex;
979
+ }
980
+
981
+ .pa-element-name span {
982
+ text-transform: uppercase;
983
+ color: #fd9926;
984
+ font-weight: 700;
985
+ font-size: 11px;
986
+ margin-right: 5px;
987
+ }
988
+
989
+ .pa-element-link {
990
+ font-size: 13px;
991
+ color: #252c59;
992
+ font-family: "Poppins";
993
+ text-decoration: none;
994
+ -webkit-transition: all 0.2s ease-in-out;
995
+ transition: all 0.2s ease-in-out;
996
+ }
997
+
998
+ .pa-element-link-separator {
999
+ width: 3px;
1000
+ height: 3px;
1001
+ display: inline-block;
1002
+ text-align: center;
1003
+ color: #252c59;
1004
+ background: #252c59;
1005
+ -webkit-border-radius: 50%;
1006
+ border-radius: 50%;
1007
+ vertical-align: middle;
1008
+ margin: 0 3px;
1009
+ }
1010
+
1011
+ .pa-element-link:hover,
1012
+ .pa-element-link:focus {
1013
+ color: #00a5e5;
1014
+ text-decoration: none;
1015
+ outline: none;
1016
+ -webkit-box-shadow: none;
1017
+ box-shadow: none;
1018
+ border: none;
1019
+ }
1020
+
1021
+ /*
1022
+ * Integrations
1023
+ */
1024
+ .pa-maps-table select {
1025
+ width: 100%;
1026
+ max-width: 100%;
1027
+ padding: 8px;
1028
+ }
1029
+
1030
+ .pa-maps-table #premium-map-api,
1031
+ .pa-maps-table #premium-youtube-api {
1032
+ width: 100%;
1033
+ }
1034
+
1035
+ .pa-maps-table tr td {
1036
+ padding-top: 30px;
1037
+ }
1038
+
1039
+ .pa-maps-table tr td:first-of-type {
1040
+ padding-left: 30px;
1041
+ }
1042
+
1043
+ .pa-maps-table td h4 {
1044
+ margin: 0;
1045
+ font-size: 15px;
1046
+ color: #252c59;
1047
+ font-weight: 500;
1048
+ font-family: "Poppins";
1049
+ display: inline-block;
1050
+ }
1051
+
1052
+ .pa-maps-table td span {
1053
+ font-size: 13px;
1054
+ color: #474747;
1055
+ font-family: "Poppins";
1056
+ vertical-align: middle;
1057
+ }
1058
+
1059
+ .pa-maps-table td input[type="text"] {
1060
+ -webkit-border-radius: 10px;
1061
+ border-radius: 10px;
1062
+ background-color: #ebebeb;
1063
+ border: none;
1064
+ padding: 8px 20px;
1065
+ }
1066
+
1067
+ .pa-section input[type="checkbox"] {
1068
+ border: none;
1069
+ display: none;
1070
+ }
1071
+
1072
+ .pa-section input[type="checkbox"]+label {
1073
+ position: relative;
1074
+ background: #ebebeb;
1075
+ height: 16px;
1076
+ width: 16px;
1077
+ display: inline-block;
1078
+ padding: 0;
1079
+ margin-left: 5px;
1080
+ -webkit-border-radius: 4px;
1081
+ border-radius: 4px;
1082
+ }
1083
+
1084
+ .pa-section input[type="checkbox"]:checked+label {
1085
+ background: #00a5e5;
1086
+ height: 16px;
1087
+ width: 16px;
1088
+ display: inline-block;
1089
+ padding: 0;
1090
+ }
1091
+
1092
+ .pa-section input[type="checkbox"]:checked+label:before {
1093
+ position: absolute;
1094
+ content: "✔";
1095
+ color: #fff;
1096
+ font-size: 12px;
1097
+ top: 0;
1098
+ right: 0;
1099
+ width: 100%;
1100
+ height: 100%;
1101
+ text-align: center;
1102
+ margin-top: -1px;
1103
+ }
1104
+
1105
+ .pa-maps-table td input:focus {
1106
+ outline: none;
1107
+ -webkit-box-shadow: none;
1108
+ box-shadow: none;
1109
+ border: none;
1110
+ }
1111
+
1112
+ .pa-elements-filter select,
1113
+ .pa-maps-table td select {
1114
+ border-color: #dcdcdc;
1115
+ -webkit-border-radius: 10px;
1116
+ border-radius: 10px;
1117
+ -webkit-border-bottom-left-radius: 0;
1118
+ border-bottom-left-radius: 0;
1119
+ }
1120
+
1121
+ .pa-maps-circle-icon {
1122
+ width: 5px;
1123
+ height: 5px;
1124
+ background-color: #252c59;
1125
+ -webkit-border-radius: 50%;
1126
+ border-radius: 50%;
1127
+ display: inline-block;
1128
+ vertical-align: middle;
1129
+ margin-left: 10px;
1130
+ }
1131
+
1132
+ .pa-maps-table td h4:before {
1133
+ position: absolute;
1134
+ content: "";
1135
+ }
1136
+
1137
+ /*
1138
+ * White Labeling Tab
1139
+ */
1140
+ .pa-wht-lbl-settings .pa-wht-lbl-title {
1141
+ font-size: 20px;
1142
+ color: #252c59;
1143
+ font-weight: 900;
1144
+ font-family: "Red Hat Display";
1145
+ margin: 0;
1146
+ }
1147
+
1148
+ .pa-wht-lbl-settings .pa-row {
1149
+ width: 60%;
1150
+ float: right;
1151
+ }
1152
+
1153
+ .pa-wht-lbl-settings .pa-wht-lbl-admin {
1154
+ width: 30%;
1155
+ float: right;
1156
+ margin-right: 16px;
1157
+ }
1158
+
1159
+ .pa-wht-lbl-settings .pa-wht-lbl-head {
1160
+ border-bottom: 1px solid #ddd;
1161
+ background: #f7f7f7;
1162
+ padding: 20px;
1163
+ }
1164
+
1165
+ .pa-wht-lbl-table {
1166
+ text-align: right;
1167
+ }
1168
+
1169
+ .pa-wht-lbl-settings input {
1170
+ font-weight: 400;
1171
+ margin: 0;
1172
+ margin-bottom: 12px;
1173
+ -webkit-border-radius: 10px;
1174
+ border-radius: 10px;
1175
+ /* background-color: #ebebeb; */
1176
+ border: 1px solid #dcdcdc;
1177
+ padding: 8px 20px;
1178
+ }
1179
+
1180
+ /* .pa-wht-lbl-settings input + span {
1181
+ margin-left: 0.3em;
1182
+ } */
1183
+
1184
+ .pa-wht-lbl-settings label+span {
1185
+ font-family: "Poppins";
1186
+ vertical-align: middle;
1187
+ }
1188
+
1189
+ .pa-wht-lbl-settings .pa-input-label {
1190
+ display: block;
1191
+ font-weight: 600;
1192
+ margin: 10px 0 6px;
1193
+ font-size: 14px;
1194
+ color: #252c59;
1195
+ font-family: "Red Hat Display";
1196
+ }
1197
+
1198
+ .pa-wht-lbl-settings input[type="text"] {
1199
+ width: 550px;
1200
+ }
1201
+
1202
+ .pa-wht-lbl-settings input[type="text"]::-webkit-input-placeholder {
1203
+ font-weight: 300;
1204
+ font-family: "Poppins";
1205
+ }
1206
+
1207
+ .pa-wht-lbl-settings input[type="text"]:-moz-placeholder {
1208
+ font-weight: 300;
1209
+ font-family: "Poppins";
1210
+ }
1211
+
1212
+ .pa-wht-lbl-settings input[type="text"]::-moz-placeholder {
1213
+ font-weight: 300;
1214
+ font-family: "Poppins";
1215
+ }
1216
+
1217
+ .pa-wht-lbl-settings input[type="text"]:-ms-input-placeholder {
1218
+ font-weight: 300;
1219
+ font-family: "Poppins";
1220
+ }
1221
+
1222
+ .pa-wht-lbl-settings input[type="text"]::-ms-input-placeholder {
1223
+ font-weight: 300;
1224
+ font-family: "Poppins";
1225
+ }
1226
+
1227
+ .pa-wht-lbl-settings input[type="text"]::placeholder {
1228
+ font-weight: 300;
1229
+ font-family: "Poppins";
1230
+ }
1231
+
1232
+ .pa-wht-lbl-settings .pa-wht-lbl-settings-wrap {
1233
+ background: #fff;
1234
+ margin: 16px auto;
1235
+ border: 1px solid #dcdcdc;
1236
+ -webkit-border-radius: 10px;
1237
+ border-radius: 10px;
1238
+ overflow: hidden;
1239
+ }
1240
+
1241
+ .pa-wht-lbl-settings .clearfix {
1242
+ clear: both;
1243
+ }
1244
+
1245
+ .pa-wht-lbl-group-wrap {
1246
+ padding: 20px;
1247
+ }
1248
+
1249
+ .pa-section-white-label .pa-white-label-notice {
1250
+ position: absolute;
1251
+ top: 0;
1252
+ right: 0;
1253
+ width: 100%;
1254
+ height: 100%;
1255
+ background: rgba(200, 200, 200, 0.8);
1256
+ -webkit-border-radius: 15px;
1257
+ border-radius: 15px;
1258
+ -js-display: flex;
1259
+ display: -webkit-box;
1260
+ display: -webkit-flex;
1261
+ display: -moz-box;
1262
+ display: -ms-flexbox;
1263
+ display: flex;
1264
+ -webkit-box-pack: center;
1265
+ -webkit-justify-content: center;
1266
+ -moz-box-pack: center;
1267
+ -ms-flex-pack: center;
1268
+ justify-content: center;
1269
+ }
1270
+
1271
+ .pa-white-label-notice-content {
1272
+ position: absolute;
1273
+ top: 200px;
1274
+ right: 200;
1275
+ width: 530px;
1276
+ background-image: url("../../images/popup-pattern.jpg");
1277
+ background-repeat: no-repeat;
1278
+ -webkit-background-size: cover;
1279
+ background-size: cover;
1280
+ padding: 32px;
1281
+ padding-bottom: 50px;
1282
+ -webkit-border-radius: 0px 50px;
1283
+ border-radius: 0px 50px;
1284
+ text-align: center;
1285
+ z-index: 2;
1286
+ }
1287
+
1288
+ .pa-white-label-notice-logo {
1289
+ -webkit-transform: translateY(-32px);
1290
+ -ms-transform: translateY(-32px);
1291
+ transform: translateY(-32px);
1292
+ margin-bottom: -18px;
1293
+ }
1294
+
1295
+ .pa-white-label-notice-logo img {
1296
+ padding: 10px;
1297
+ padding-top: 40px;
1298
+ background-color: #ffffff;
1299
+ border: 1px solid #e6e6e6;
1300
+ -webkit-border-radius: 50px;
1301
+ border-radius: 50px;
1302
+ -webkit-border-top-right-radius: 50px;
1303
+ border-top-right-radius: 50px;
1304
+ -webkit-border-top-left-radius: 50px;
1305
+ border-top-left-radius: 50px;
1306
+ -webkit-border-top-right-radius: 0;
1307
+ border-top-right-radius: 0;
1308
+ -webkit-border-top-left-radius: 0;
1309
+ border-top-left-radius: 0;
1310
+ }
1311
+
1312
+ .pa-white-label-notice-content h2,
1313
+ .pa-swal-head {
1314
+ display: inline-block;
1315
+ font-size: 23px;
1316
+ color: #252c59;
1317
+ font-weight: 900;
1318
+ font-family: "Red Hat Display";
1319
+ text-align: center;
1320
+ max-width: 350px;
1321
+ line-height: 1;
1322
+ margin: 0;
1323
+ margin-bottom: 18px;
1324
+ }
1325
+
1326
+ .pa-white-label-notice-content h2 span {
1327
+ color: #fd9926;
1328
+ text-transform: uppercase;
1329
+ font-family: "Red Hat Display";
1330
+ }
1331
+
1332
+ .pa-white-label-notice-content p {
1333
+ font-size: 13px;
1334
+ color: #474747;
1335
+ font-family: "Poppins";
1336
+ text-align: center;
1337
+ margin: 0;
1338
+ margin-bottom: 18px;
1339
+ }
1340
+
1341
+ .pa-white-label-notice-content a.pa-get-pro {
1342
+ display: inline-block;
1343
+ width: 117px;
1344
+ padding: 12px 10px;
1345
+ -webkit-border-radius: 10px;
1346
+ border-radius: 10px;
1347
+ color: #ffffff;
1348
+ font-size: 15px;
1349
+ font-weight: 900;
1350
+ font-family: "Red Hat Display";
1351
+ -webkit-filter: drop-shadow(0px 20px 17.5px rgba(254, 99, 0, 0.2));
1352
+ filter: drop-shadow(0px 20px 17.5px rgba(254, 99, 0, 0.2));
1353
+ text-decoration: none;
1354
+ outline: none;
1355
+ border: none;
1356
+ background-image: -webkit-linear-gradient(-120deg, #fe6300 0%, #fe9f00 100%);
1357
+ background-image: linear-gradient(30deg, #fe6300 0%, #fe9f00 100%);
1358
+ -webkit-transition: all 0.2s ease-in-out;
1359
+ transition: all 0.2s ease-in-out;
1360
+ }
1361
+
1362
+ .pa-white-label-notice-content a.pa-get-pro:hover {
1363
+ background-image: -webkit-linear-gradient(-60deg, #fe6300 0%, #fe9f00 100%);
1364
+ background-image: linear-gradient(-30deg, #fe6300 0%, #fe9f00 100%);
1365
+ }
1366
+
1367
+ /*
1368
+ * System Info Tab
1369
+ */
1370
+ .pa-section-info table.widefat {
1371
+ border: 0px;
1372
+ -webkit-box-shadow: none;
1373
+ box-shadow: none;
1374
+ font-family: "Poppins";
1375
+ }
1376
+
1377
+ .pa-section-info .widefat td:first-child {
1378
+ width: 30%;
1379
+ }
1380
+
1381
+ .pa-section-info table.widefat tr:nth-child(2n) {
1382
+ background-color: #f7f7f7;
1383
+ }
1384
+
1385
+ /*
1386
+ * License Tab
1387
+ */
1388
+ .pa-license-form span {
1389
+ color: #474747;
1390
+ font-family: "Poppins";
1391
+ }
1392
+
1393
+ .pa-license-form label {
1394
+ display: block;
1395
+ font-weight: 500;
1396
+ margin: 2em 0 0.5em;
1397
+ }
1398
+
1399
+ .pa-license-form code {
1400
+ padding: 3px 5px 2px;
1401
+ margin: 0 1px;
1402
+ background: #eaeaea;
1403
+ background: rgba(0, 0, 0, 0.07);
1404
+ font-size: 13px;
1405
+ font-style: italic;
1406
+ }
1407
+
1408
+ .pa-license-form .button.button-primary {
1409
+ width: 147px;
1410
+ height: 43px;
1411
+ /* -webkit-filter: drop-shadow(0px 10px 35px rgba(0, 165, 229, 0.3));
1412
+ filter: drop-shadow(0px 10px 35px rgba(0, 165, 229, 0.3)); */
1413
+ background-color: #00a5e5;
1414
+ /* margin-top: 50px; */
1415
+ margin-right: -3px;
1416
+ -webkit-border-radius: 10px 0 0 10px;
1417
+ border-radius: 10px 0 0 10px;
1418
+ border: none;
1419
+ }
1420
+
1421
+ #papro-license-key:focus,
1422
+ .pa-license-form .button.button-primary:focus {
1423
+ outline: none;
1424
+ -webkit-box-shadow: none;
1425
+ box-shadow: none;
1426
+ }
1427
+
1428
+ #papro-license-key {
1429
+ height: 43px;
1430
+ line-height: 1;
1431
+ margin: 0;
1432
+ padding: 8px 20px;
1433
+ -webkit-border-radius: 0 10px 10px 0;
1434
+ border-radius: 0 10px 10px 0;
1435
+ }
1436
+
1437
+ .pa-license-form input+span {
1438
+ margin-right: 10px;
1439
+ font-weight: 600;
1440
+ }
1441
+
1442
+ .pa-license-cell span {
1443
+ margin-right: 0.3em;
1444
+ }
1445
+
1446
+ @media(min-width: 1550px) {
1447
+ #pa-general-settings .pa-section-info:not(.pa-news-section):not(.pa-support-section) p {
1448
+ min-height: 65px;
1449
+ }
1450
+
1451
+ .pa-news-grid .pa-news-post p:nth-of-type(1) {
1452
+ min-height: 40px;
1453
+ }
1454
+ }
1455
+
1456
+ /*
1457
+ * PAPRO Notice
1458
+ */
1459
+ .papro-admin-notice {
1460
+ -webkit-display: flex;
1461
+ display: -webkit-box;
1462
+ display: -ms-flexbox;
1463
+ -js-display: flex;
1464
+ display: -moz-box;
1465
+ display: flex;
1466
+ -webkit-box-pack: end;
1467
+ -ms-flex-pack: end;
1468
+ -webkit-justify-content: flex-end;
1469
+ -moz-box-pack: end;
1470
+ justify-content: flex-end;
1471
+ -webkit-box-align: center;
1472
+ -ms-flex-align: center;
1473
+ -webkit-align-items: center;
1474
+ -moz-box-align: center;
1475
+ align-items: center;
1476
+ margin-bottom: 24px;
1477
+ }
1478
+
1479
+ .papro-admin-notice>div {
1480
+ -webkit-box-flex: 1;
1481
+ -webkit-flex-grow: 1;
1482
+ -moz-box-flex: 1;
1483
+ -ms-flex-positive: 1;
1484
+ flex-grow: 1;
1485
+ }
1486
+
1487
+ .papro-admin-notice-left {
1488
+ position: relative;
1489
+ padding: 16px;
1490
+ -webkit-border-radius: 15px;
1491
+ border-radius: 15px;
1492
+ background-color: #fff;
1493
+ -webkit-flex-basis: 80%;
1494
+ -ms-flex-preferred-size: 80%;
1495
+ flex-basis: 80%;
1496
+ }
1497
+
1498
+ .papro-admin-notice-left a {
1499
+ position: absolute;
1500
+ top: 0;
1501
+ right: 0;
1502
+ width: 100%;
1503
+ height: 100%;
1504
+ }
1505
+
1506
+ .papro-admin-notice-left a:hover,
1507
+ .papro-admin-notice-left a:focus,
1508
+ .papro-admin-notice-left a:visited {
1509
+ outline: none;
1510
+ border: none;
1511
+ -webkit-box-shadow: none;
1512
+ box-shadow: none;
1513
+ text-decoration: none;
1514
+ }
1515
+
1516
+ .papro-admin-notice-logo {
1517
+ -webkit-display: flex;
1518
+ display: -webkit-box;
1519
+ display: -ms-flexbox;
1520
+ -js-display: flex;
1521
+ display: -moz-box;
1522
+ display: flex;
1523
+ -webkit-box-pack: justify;
1524
+ -webkit-justify-content: space-between;
1525
+ -moz-box-pack: justify;
1526
+ -ms-flex-pack: justify;
1527
+ justify-content: space-between;
1528
+ -webkit-box-align: center;
1529
+ -webkit-align-items: center;
1530
+ -moz-box-align: center;
1531
+ -ms-flex-align: center;
1532
+ align-items: center;
1533
+ }
1534
+
1535
+ .papro-admin-notice-logo label {
1536
+ display: block;
1537
+ font-weight: 600;
1538
+ margin: 10px 0 6px;
1539
+ font-size: 14px;
1540
+ color: #252c59;
1541
+ font-family: "Red Hat Display";
1542
+ }
1543
+
1544
+ .papro-admin-notice-right {
1545
+ -webkit-display: flex;
1546
+ display: -webkit-box;
1547
+ display: -ms-flexbox;
1548
+ -js-display: flex;
1549
+ display: -moz-box;
1550
+ display: flex;
1551
+ -webkit-box-align: center;
1552
+ -ms-flex-align: center;
1553
+ -webkit-align-items: center;
1554
+ -moz-box-align: center;
1555
+ align-items: center;
1556
+ background: url("../../images/papro-banner.png");
1557
+ -webkit-background-size: cover;
1558
+ background-size: cover;
1559
+ background-repeat: no-repeat;
1560
+ padding: 18px;
1561
+ -webkit-border-radius: 15px;
1562
+ border-radius: 15px;
1563
+ overflow: hidden;
1564
+ margin-right: 25px;
1565
+ }
1566
+
1567
+ .papro-admin-notice-right h4 {
1568
+ font-size: 20px;
1569
+ color: #fff;
1570
+ font-weight: 900;
1571
+ font-family: "Red Hat Display";
1572
+ margin: 0;
1573
+ margin-bottom: 8px;
1574
+ }
1575
+
1576
+ .papro-admin-notice-right p {
1577
+ font-size: 14px;
1578
+ color: #ffffff;
1579
+ font-family: "Poppins";
1580
+ margin: 0;
1581
+ }
1582
+
1583
+ .papro-admin-notice-right span {
1584
+ font-weight: 700;
1585
+ }
1586
+
1587
+ /*
1588
+ * Dashboard Tabs
1589
+ */
1590
+ .pa-dash-general:before {
1591
+ content: "\e93e";
1592
+ }
1593
+
1594
+ .pa-dash-integrations:before {
1595
+ content: "\e93f";
1596
+ }
1597
+
1598
+ .pa-dash-system-info:before {
1599
+ content: "\e941";
1600
+ }
1601
+
1602
+ .pa-dash-vcontrol:before {
1603
+ content: "\e942";
1604
+ }
1605
+
1606
+ .pa-dash-white-label:before {
1607
+ content: "\e943";
1608
+ }
1609
+
1610
+ .pa-dash-elements:before {
1611
+ content: "\e944";
1612
+ }
1613
+
1614
+ .pa-dash-license:before {
1615
+ content: "\e940";
1616
+ }
1617
+
1618
+ .pa-dash-features:before {
1619
+ content: "\e911";
1620
+ }
1621
+
1622
+ /*
1623
+ * Elements Categories
1624
+ */
1625
+ .pa-dash-cat-all:before {
1626
+ content: "\e945";
1627
+ }
1628
+
1629
+ .pa-dash-cat-blurbs:before {
1630
+ content: "\e946";
1631
+ }
1632
+
1633
+ .pa-dash-cat-contact:before {
1634
+ content: "\e94a";
1635
+ }
1636
+
1637
+ .pa-dash-cat-content:before {
1638
+ content: "\e948";
1639
+ }
1640
+
1641
+ .pa-dash-cat-images:before {
1642
+ content: "\e949";
1643
+ }
1644
+
1645
+ .pa-dash-cat-off-grid:before {
1646
+ content: "\e94b";
1647
+ }
1648
+
1649
+ .pa-dash-cat-section:before {
1650
+ content: "\e94c";
1651
+ }
1652
+
1653
+ .pa-dash-cat-feed:before {
1654
+ content: "\e94d";
1655
+ }
1656
+
1657
+ .pa-dash-cat-data:before {
1658
+ content: "\e94e";
1659
+ }
1660
+
1661
+ .pa-dash-cat-social:before {
1662
+ content: "\e94f";
1663
+ }
1664
+
1665
+ /*
1666
+ * Widgets Icons
1667
+ */
1668
+ .pa-dash-premium-notbar:before {
1669
+ content: "\e902";
1670
+ }
1671
+
1672
+ .pa-dash-premium-gradient:before {
1673
+ content: "\e903";
1674
+ }
1675
+
1676
+ .pa-dash-premium-color-transition:before {
1677
+ content: "\e904";
1678
+ }
1679
+
1680
+ .pa-dash-premium-behance:before {
1681
+ content: "\e905";
1682
+ }
1683
+
1684
+ .pa-dash-premium-charts:before {
1685
+ content: "\e906";
1686
+ }
1687
+
1688
+ .pa-dash-premium-content-toggle:before {
1689
+ content: "\e907";
1690
+ }
1691
+
1692
+ .pa-dash-premium-divider:before {
1693
+ content: "\e908";
1694
+ }
1695
+
1696
+ .pa-dash-premium-facebook-feed:before {
1697
+ content: "\e90a";
1698
+ }
1699
+
1700
+ .pa-dash-facebook-feed-2:before {
1701
+ content: "\e91b";
1702
+ }
1703
+
1704
+ .pa-dash-premium-fb-chat:before {
1705
+ content: "\e90b";
1706
+ }
1707
+
1708
+ .pa-dash-premium-facebook-reviews:before {
1709
+ content: "\e90c";
1710
+ }
1711
+
1712
+ .pa-dash-premium-google-reviews:before {
1713
+ content: "\e90d";
1714
+ }
1715
+
1716
+ .pa-dash-premium-hscroll:before {
1717
+ content: "\e90e";
1718
+ }
1719
+
1720
+ .pa-dash-premium-flipbox:before {
1721
+ content: "\e90f";
1722
+ }
1723
+
1724
+ .pa-dash-premium-iconbox:before {
1725
+ content: "\e910";
1726
+ }
1727
+
1728
+ .pa-dash-premium-image-accordion:before {
1729
+ content: "\e912";
1730
+ }
1731
+
1732
+ .pa-dash-premium-image-comparison:before {
1733
+ content: "\e913";
1734
+ }
1735
+
1736
+ .pa-dash-premium-image-hotspots:before {
1737
+ content: "\e914";
1738
+ }
1739
+
1740
+ .pa-dash-premium-img-layers:before {
1741
+ content: "\e915";
1742
+ }
1743
+
1744
+ .pa-dash-premium-instagram-feed:before {
1745
+ content: "\e916";
1746
+ }
1747
+
1748
+ .pa-dash-premium-kenburns:before {
1749
+ content: "\e917";
1750
+ }
1751
+
1752
+ .pa-dash-premium-lottie:before {
1753
+ content: "\e918";
1754
+ }
1755
+
1756
+ .pa-dash-premium-magic-section:before {
1757
+ content: "\e919";
1758
+ }
1759
+
1760
+ .pa-dash-premium-multi-scroll:before {
1761
+ content: "\e91a";
1762
+ }
1763
+
1764
+ .pa-dash-premium-ihover:before {
1765
+ content: "\e911";
1766
+ }
1767
+
1768
+ .pa-dash-premium-parallax:before {
1769
+ content: "\e91b";
1770
+ }
1771
+
1772
+ .pa-dash-premium-particles:before {
1773
+ content: "\e91c";
1774
+ }
1775
+
1776
+ .pa-dash-premium-prev-img:before {
1777
+ content: "\e91d";
1778
+ }
1779
+
1780
+ .pa-dash-premium-tabs:before {
1781
+ content: "\e91f";
1782
+ }
1783
+
1784
+ .pa-dash-premium-tables:before {
1785
+ content: "\e91e";
1786
+ }
1787
+
1788
+ .pa-dash-premium-twitter-feed:before {
1789
+ content: "\e921";
1790
+ }
1791
+
1792
+ .pa-dash-premium-unfold:before {
1793
+ content: "\e922";
1794
+ }
1795
+
1796
+ .pa-dash-premium-whatsapp-chat:before {
1797
+ content: "\e923";
1798
+ }
1799
+
1800
+ .pa-dash-premium-yelp-reviews:before {
1801
+ content: "\e924";
1802
+ }
1803
+
1804
+ .pa-dash-premium-trustpilot-reviews:before {
1805
+ content: "\e920";
1806
+ }
1807
+
1808
+ .pa-dash-premium-banner:before {
1809
+ content: "\e925";
1810
+ }
1811
+
1812
+ .pa-dash-premium-blog:before {
1813
+ content: "\e926";
1814
+ }
1815
+
1816
+ .pa-dash-premium-button:before {
1817
+ content: "\e927";
1818
+ }
1819
+
1820
+ .pa-dash-premium-carousel:before {
1821
+ content: "\e928";
1822
+ }
1823
+
1824
+ .pa-dash-premium-contactform:before {
1825
+ content: "\e929";
1826
+ }
1827
+
1828
+ .pa-dash-premium-countdown:before {
1829
+ content: "\e92a";
1830
+ }
1831
+
1832
+ .pa-dash-premium-counter:before {
1833
+ content: "\e92b";
1834
+ }
1835
+
1836
+ .pa-dash-premium-dual-header:before {
1837
+ content: "\e92c";
1838
+ }
1839
+
1840
+ .pa-dash-premium-fancytext:before {
1841
+ content: "\e92d";
1842
+ }
1843
+
1844
+ .pa-dash-premium-maps:before {
1845
+ content: "\e92e";
1846
+ }
1847
+
1848
+ .pa-dash-premium-title:before {
1849
+ content: "\e92f";
1850
+ }
1851
+
1852
+ .pa-dash-premium-icon-list:before {
1853
+ content: "\e930";
1854
+ }
1855
+
1856
+ .pa-dash-premium-image-button:before {
1857
+ content: "\e931";
1858
+ }
1859
+
1860
+ .pa-dash-premium-image-scroll:before {
1861
+ content: "\e932";
1862
+ }
1863
+
1864
+ .pa-dash-premium-image-separator:before {
1865
+ content: "\e933";
1866
+ }
1867
+
1868
+ /* .pa-dash-premium-lottie:before {
1869
+ content: "\e944";
1870
+ } */
1871
+ .pa-dash-premium-lottie-widget:before {
1872
+ content: "\e935";
1873
+ }
1874
+
1875
+ .pa-dash-premium-grid:before {
1876
+ content: "\e946";
1877
+ }
1878
+
1879
+ .pa-dash-premium-modalbox:before {
1880
+ content: "\e937";
1881
+ }
1882
+
1883
+ .pa-dash-premium-pricing-table:before {
1884
+ content: "\e938";
1885
+ }
1886
+
1887
+ .pa-dash-premium-progressbar:before {
1888
+ content: "\e939";
1889
+ }
1890
+
1891
+ .pa-dash-premium-person:before {
1892
+ content: "\e93a";
1893
+ }
1894
+
1895
+ .pa-dash-premium-testimonials:before {
1896
+ content: "\e93b";
1897
+ }
1898
+
1899
+ .pa-dash-premium-vscroll:before {
1900
+ content: "\e93c";
1901
+ }
1902
+
1903
+ .pa-dash-premium-videobox:before {
1904
+ content: "\e93d";
1905
+ }
1906
+
1907
+ .pa-dash-premium-blob:before {
1908
+ content: "\e900";
1909
+ }
1910
+
1911
+ .pa-dash-woo-products:before {
1912
+ content: "\e901";
1913
  }
admin/assets/css/admin.css CHANGED
@@ -1,1913 +1,1913 @@
1
- .button.pa-btn {
2
- border: none;
3
- color: #fff;
4
- text-align: center;
5
- padding: 3px;
6
- max-width: 250px;
7
- height: auto;
8
- font-weight: 700;
9
- -webkit-box-shadow: none;
10
- box-shadow: none;
11
- }
12
-
13
- .button.pa-btn:hover,
14
- .button.pa-btn:focus,
15
- .button.pa-btn:active {
16
- outline: none;
17
- border: none;
18
- text-decoration: none;
19
- }
20
-
21
-
22
- .switch {
23
- position: relative;
24
- display: inline-block;
25
- width: 44px;
26
- height: 24px;
27
- -webkit-border-radius: 12px;
28
- border-radius: 12px;
29
- }
30
-
31
- .switch input {
32
- display: none;
33
- }
34
-
35
- .slider,
36
- .pro-slider {
37
- position: absolute;
38
- cursor: pointer;
39
- top: 0;
40
- left: 0;
41
- right: 0;
42
- bottom: 0;
43
- /* background-color: #f2f2f2;
44
- box-shadow: 0 0 2px 1px #ccc inset; */
45
- -webkit-transition: 0.4s;
46
- transition: 0.4s;
47
- }
48
-
49
- .slider:before,
50
- .pro-slider:before {
51
- position: absolute;
52
- content: "";
53
- left: 3px;
54
- top: 50%;
55
- -webkit-transform: translateY(-50%);
56
- -ms-transform: translateY(-50%);
57
- transform: translateY(-50%);
58
- /* background: radial-gradient(farthest-corner at 14px 0px, #f0f0f0 50%, #cacaca 100%); */
59
- -webkit-transition: all 0.4s ease-in-out;
60
- transition: all 0.4s ease-in-out;
61
- padding: 0;
62
- margin: 0;
63
- width: 15px;
64
- height: 15px;
65
- -webkit-border-radius: 8px;
66
- border-radius: 8px;
67
- -webkit-filter: drop-shadow(0px 5px 2.5px rgba(40, 40, 40, 0.35));
68
- filter: drop-shadow(0px 5px 2.5px rgba(40, 40, 40, 0.35));
69
- background-color: #f7f7f7;
70
- border: 1px solid #ffffff;
71
- /* box-shadow: 0 2.5px 5px #b8b8b9; */
72
- }
73
-
74
- input:checked+.slider {
75
- background: #8dc900;
76
- }
77
-
78
- input:focus+.slider {
79
- -webkit-box-shadow: 0 0 1px #18a4fd;
80
- box-shadow: 0 0 1px #18a4fd;
81
- }
82
-
83
- input:checked+.slider:before {
84
- -webkit-transform: translate3d(20px, -50%, 0);
85
- transform: translate3d(20px, -50%, 0);
86
- }
87
-
88
- .slider.round,
89
- .pro-slider.round {
90
- -webkit-border-radius: 34px;
91
- border-radius: 34px;
92
- background-image: -webkit-gradient(linear, left top, left bottom, from(#cfcfcf), to(#dbdbdb));
93
- background-image: -webkit-linear-gradient(top, #cfcfcf 0%, #dbdbdb 100%);
94
- background-image: linear-gradient(180deg, #cfcfcf 0%, #dbdbdb 100%);
95
- }
96
-
97
- .slider.round:before,
98
- .pro-slider.round:before {
99
- -webkit-border-radius: 50%;
100
- border-radius: 50%;
101
- }
102
-
103
- .pa-switcher input:disabled+.pro-slider::after {
104
- position: absolute;
105
- font-family: "Dashicons";
106
- content: "\f160";
107
- color: #474747;
108
- right: 8px;
109
- top: 50%;
110
- -webkit-transform: translateY(-50%);
111
- -ms-transform: translateY(-50%);
112
- transform: translateY(-50%);
113
- }
114
-
115
- .pa-api-disable-title label,
116
- .pa-is-beta label {
117
- margin-right: 15px;
118
- }
119
-
120
- .pa-api-disable-title span,
121
- .pa-is-beta span {
122
- font-weight: 400;
123
- }
124
-
125
- .pa-maps-api-notice {
126
- margin: 0.5em 0;
127
- }
128
-
129
- .pa-api-title input {
130
- margin-top: 10px;
131
- font-size: normal;
132
- font-weight: 400;
133
- width: 400px;
134
- margin-left: 30px;
135
- }
136
-
137
- .pa-sys-info-tab {
138
- background: #f7f7f7;
139
- margin: 8px;
140
- border: 2px solid #ddd;
141
- -webkit-border-radius: 3px;
142
- border-radius: 3px;
143
- padding: 0;
144
- }
145
-
146
- .pa-system-info-container {
147
- padding: 10px;
148
- }
149
-
150
- .dialog-type-lightbox .dialog-widget-header {
151
- text-align: center;
152
- font-size: 15px;
153
- color: #495157;
154
- padding: 30px 0 10px;
155
- font-weight: 500;
156
- }
157
-
158
- .pa-swal.swal2-show {
159
- padding: 32px;
160
- padding-bottom: 50px;
161
- background-image: url("../../images/popup-pattern.jpg");
162
- background-repeat: no-repeat;
163
- -webkit-background-size: cover;
164
- background-size: cover;
165
- -webkit-border-radius: 50px 0;
166
- border-radius: 50px 0;
167
- }
168
-
169
- .pa-swal .swal2-close {
170
- color: #c2c4cf;
171
- }
172
-
173
- .pa-swal .swal2-close:hover {
174
- color: #00a5e5;
175
- }
176
-
177
- .pa-swal .swal2-title {
178
- margin: 0;
179
- }
180
-
181
- .pa-swal .swal2-content {
182
- font-size: 13px;
183
- color: #474747;
184
- font-family: "Poppins";
185
- text-align: center;
186
- margin: 0;
187
- margin-bottom: 0px;
188
- }
189
-
190
- .pa-swal .swal2-cancel.swal2-styled,
191
- .pa-swal .swal2-cancel.swal2-styled:hover,
192
- .pa-swal .swal2-confirm.swal2-styled {
193
- background-image: none !important;
194
- background-color: #ebebeb;
195
- color: #474747;
196
- border: none !important;
197
- -webkit-box-shadow: none !important;
198
- box-shadow: none !important;
199
- font-family: "Red Hat Display";
200
- font-size: 15px;
201
- font-weight: 700;
202
- }
203
-
204
- .pa-swal .swal2-confirm.swal2-styled,
205
- .pa-swal .swal2-confirm.swal2-styled:hover {
206
- min-width: 128px;
207
- color: #fff;
208
- background-image: none !important;
209
- background-color: #00a5e5;
210
- }
211
-
212
- /**
213
- * New Dashboard
214
- */
215
- .pa-settings-wrap {
216
- padding: 35px;
217
- padding-left: 15px;
218
- }
219
-
220
- .pa-settings-section {
221
- display: none;
222
- }
223
-
224
- .pa-settings-tabs {
225
- background-color: #fff;
226
- -webkit-border-radius: 15px;
227
- border-radius: 15px;
228
- padding: 36px;
229
- margin-bottom: 12px;
230
- }
231
-
232
- .pa-settings-tabs-list {
233
- clear: left;
234
- margin: 0;
235
- list-style-type: none;
236
- }
237
-
238
- .pa-settings-tabs .pa-settings-tabs-list li {
239
- display: inline-block;
240
- margin-bottom: 0;
241
- margin-right: 23px;
242
- }
243
-
244
- .pa-settings-section.active {
245
- display: block;
246
- }
247
-
248
- .papro-admin-notice a,
249
- .pa-settings-wrap .pa-settings-tabs a {
250
- -js-display: flex;
251
- display: -webkit-box;
252
- display: -webkit-flex;
253
- display: -moz-box;
254
- display: -ms-flexbox;
255
- display: flex;
256
- -webkit-box-pack: center;
257
- -webkit-justify-content: center;
258
- -moz-box-pack: center;
259
- -ms-flex-pack: center;
260
- justify-content: center;
261
- -webkit-box-align: center;
262
- -webkit-align-items: center;
263
- -moz-box-align: center;
264
- -ms-flex-align: center;
265
- align-items: center;
266
- font-size: 14px;
267
- line-height: 1.8em;
268
- position: relative;
269
- color: #252c59;
270
- text-decoration: none;
271
- -webkit-transition: all 0.3s ease;
272
- transition: all 0.3s ease;
273
- }
274
-
275
- .papro-admin-notice a.papro-notice-btn {
276
- width: 120px;
277
- /* height: 58px; */
278
- -webkit-border-radius: 15px;
279
- border-radius: 15px;
280
- -webkit-filter: drop-shadow(0px 5px 50px rgba(87, 0, 101, 0.7));
281
- filter: drop-shadow(0px 5px 50px rgba(87, 0, 101, 0.7));
282
- background-color: #ffffff;
283
- font-size: 18px;
284
- color: #fe6300;
285
- font-weight: 800;
286
- font-family: "Red Hat Display";
287
- text-align: center;
288
- padding: 10px 20px;
289
- }
290
-
291
- .pa-settings-wrap .pa-settings-tabs a:focus {
292
- outline: none;
293
- -webkit-box-shadow: none;
294
- box-shadow: none;
295
- }
296
-
297
- .pa-settings-wrap .pa-settings-tabs span {
298
- margin-left: 8px;
299
- font-family: "Poppins";
300
- font-weight: 500;
301
- }
302
-
303
- .pa-settings-wrap .pa-settings-tabs .pa-section-active {
304
- color: #00a5e5;
305
- }
306
-
307
- .pa-section {
308
- display: none;
309
- position: relative;
310
- background-color: #fff;
311
- -webkit-transition: opacity 0.2s;
312
- transition: opacity 0.2s;
313
- padding: 34px;
314
- -webkit-border-radius: 15px;
315
- border-radius: 15px;
316
- }
317
-
318
- /**
319
- * General Tab
320
- */
321
- #pa-general-settings {
322
- -js-display: flex;
323
- display: -webkit-box;
324
- display: -webkit-flex;
325
- display: -moz-box;
326
- display: -ms-flexbox;
327
- display: flex;
328
- -webkit-box-orient: horizontal;
329
- -webkit-box-direction: normal;
330
- -webkit-flex-flow: row wrap;
331
- -moz-box-orient: horizontal;
332
- -moz-box-direction: normal;
333
- -ms-flex-flow: row wrap;
334
- flex-flow: row wrap;
335
- -webkit-box-pack: justify;
336
- -webkit-justify-content: space-between;
337
- -moz-box-pack: justify;
338
- -ms-flex-pack: justify;
339
- justify-content: space-between;
340
- width: 100%;
341
- }
342
-
343
- #pa-general-settings .pa-dash-block {
344
- -webkit-box-flex: 1;
345
- -webkit-flex: 1 1 auto;
346
- -moz-box-flex: 1;
347
- -ms-flex: 1 1 auto;
348
- flex: 1 1 auto;
349
- min-width: 250px;
350
- margin: 0 5px 10px;
351
- -js-display: flex;
352
- display: -webkit-box;
353
- display: -webkit-flex;
354
- display: -moz-box;
355
- display: -ms-flexbox;
356
- display: flex;
357
- -webkit-box-orient: vertical;
358
- -webkit-box-direction: normal;
359
- -webkit-flex-direction: column;
360
- -moz-box-orient: vertical;
361
- -moz-box-direction: normal;
362
- -ms-flex-direction: column;
363
- flex-direction: column;
364
- }
365
-
366
- .pa-dash-block.col-3 {
367
- width: 31%;
368
- }
369
-
370
- .pa-dash-block.col-6 {
371
- width: 64%;
372
- }
373
-
374
- #pa-general-settings .pa-section-info h4 {
375
- font-size: 17px;
376
- }
377
-
378
- #pa-general-settings .pa-section-info:not(.pa-news-section):not(.pa-support-section) p {
379
- min-height: 80px;
380
- }
381
-
382
- #pa-general-settings .pa-section-info .pa-element-icon {
383
- margin-bottom: 12px;
384
- }
385
-
386
- #pa-general-settings .pa-element-icon.icon-inline {
387
- -js-display: inline-flex;
388
- display: -webkit-inline-box;
389
- display: -webkit-inline-flex;
390
- display: -moz-inline-box;
391
- display: -ms-inline-flexbox;
392
- display: inline-flex;
393
- margin-bottom: 0;
394
- vertical-align: middle;
395
- }
396
-
397
- #pa-general-settings .pa-section-info .pa-btn {
398
- display: inline-block;
399
- background-color: #252c59;
400
- color: #fff;
401
- /* margin-top: 12px; */
402
- padding: 12px 36px;
403
- }
404
-
405
- .pa-element-icon.dashicons-facebook-alt {
406
- color: #3b5998 !important
407
- }
408
-
409
- .pa-element-icon.dashicons-youtube {
410
- color: #ff0000 !important
411
- }
412
-
413
- .pa-newsletter-form {
414
- -js-display: flex;
415
- display: -webkit-box;
416
- display: -webkit-flex;
417
- display: -moz-box;
418
- display: -ms-flexbox;
419
- display: flex;
420
- -webkit-flex-wrap: wrap;
421
- -ms-flex-wrap: wrap;
422
- flex-wrap: wrap;
423
- -webkit-box-align: center;
424
- -webkit-align-items: center;
425
- -moz-box-align: center;
426
- -ms-flex-align: center;
427
- align-items: center;
428
- }
429
-
430
- .pa-newsletter-form input {
431
- width: 74%;
432
- padding: 0px 10px;
433
- height: 39px;
434
- font-family: "Poppins";
435
- border: 1px solid #dcdcdc;
436
- -webkit-border-radius: 10px 0 0 10px;
437
- border-radius: 10px 0 0 10px;
438
- direction: ltr;
439
- }
440
-
441
- #pa-general-settings .pa-newsletter-form button.pa-btn {
442
- width: 25%;
443
- padding: 0;
444
- height: 39px;
445
- margin-top: 0;
446
- margin-left: -1px;
447
- -webkit-border-radius: 0 10px 10px 0;
448
- border-radius: 0 10px 10px 0;
449
- }
450
-
451
- #pa-general-settings .pa-news-grid {
452
- -js-display: flex;
453
- display: -webkit-box;
454
- display: -webkit-flex;
455
- display: -moz-box;
456
- display: -ms-flexbox;
457
- display: flex;
458
- -webkit-box-pack: justify;
459
- -webkit-justify-content: space-between;
460
- -moz-box-pack: justify;
461
- -ms-flex-pack: justify;
462
- justify-content: space-between;
463
- margin-top: 12px;
464
- }
465
-
466
- .pa-news-grid .pa-news-post {
467
- position: relative;
468
- width: 33.33%;
469
- margin: 0 5px;
470
- }
471
-
472
- .pa-news-grid .pa-news-post p:nth-of-type(1) {
473
- font-family: "Red Hat Display";
474
- font-size: 15px;
475
- min-height: 60px;
476
- font-weight: 800;
477
- color: #252c59
478
- }
479
-
480
- .pa-news-grid .pa-news-post p:nth-of-type(2) {
481
- font-size: 12px;
482
- }
483
-
484
- .pa-post-img-container img {
485
- width: 100%;
486
- height: 145px;
487
- -o-object-fit: cover;
488
- object-fit: cover;
489
- -webkit-border-radius: 10px;
490
- border-radius: 10px;
491
- }
492
-
493
- .pa-news-grid .pa-news-post a {
494
- position: absolute;
495
- top: 0;
496
- left: 0;
497
- width: 100%;
498
- height: 100%;
499
- z-index: 2;
500
- }
501
-
502
- #pa-general-settings .pa-support-list {
503
- margin: 12px 0 0;
504
- padding: 0;
505
- }
506
-
507
- #pa-general-settings .pa-support-list li {
508
- margin-bottom: 10px;
509
- }
510
-
511
- .pa-support-list li a {
512
- font-size: 15px;
513
- color: #474747;
514
- font-family: "Poppins";
515
- text-decoration: none;
516
- }
517
-
518
- .pa-support-list li a:hover {
519
- color: #135e96;
520
- }
521
-
522
- #pa-general-settings input[type="email"],
523
- #pa-general-settings a:hover,
524
- #pa-general-settings a:focus,
525
- #pa-general-settings a:visited {
526
- border: none;
527
- -webkit-box-shadow: none;
528
- box-shadow: none;
529
- outline: none;
530
- }
531
-
532
-
533
- /**
534
- * Tab Info
535
- */
536
- .pa-section-info-wrap {
537
- padding: 34px;
538
- -webkit-border-radius: 15px;
539
- border-radius: 15px;
540
- background-color: #f7f7f7;
541
- -js-display: flex;
542
- display: -webkit-box;
543
- display: -webkit-flex;
544
- display: -moz-box;
545
- display: -ms-flexbox;
546
- display: flex;
547
- -webkit-box-pack: justify;
548
- -webkit-justify-content: space-between;
549
- -moz-box-pack: justify;
550
- -ms-flex-pack: justify;
551
- justify-content: space-between;
552
- -webkit-box-align: center;
553
- -webkit-align-items: center;
554
- -moz-box-align: center;
555
- -ms-flex-align: center;
556
- align-items: center;
557
- height: 100%;
558
- }
559
-
560
- #pa-general-settings .pa-section-info-wrap,
561
- #pa-ver-control-settings .pa-section-info-wrap {
562
- -webkit-box-orient: vertical;
563
- -webkit-box-direction: normal;
564
- -webkit-flex-direction: column;
565
- -moz-box-orient: vertical;
566
- -moz-box-direction: normal;
567
- -ms-flex-direction: column;
568
- flex-direction: column;
569
- -webkit-box-align: start;
570
- -webkit-align-items: flex-start;
571
- -moz-box-align: start;
572
- -ms-flex-align: start;
573
- align-items: flex-start;
574
- }
575
-
576
- #pa-features-settings .pa-section-info-wrap:nth-of-type(n + 2),
577
- #pa-ver-control-settings .pa-section-info-wrap:nth-of-type(n + 2) {
578
- margin-top: 36px;
579
- }
580
-
581
- .pa-section-info-wrap h4 {
582
- font-size: 20px;
583
- color: #252c59;
584
- font-weight: 900;
585
- font-family: "Red Hat Display";
586
- margin: 0;
587
- }
588
-
589
- .pa-section-info-wrap p {
590
- font-size: 14px;
591
- color: #474747;
592
- font-family: "Poppins";
593
- margin: 0;
594
- margin-top: 14px;
595
- }
596
-
597
- .pa-section-info-cta {
598
- -js-display: flex;
599
- display: -webkit-box;
600
- display: -webkit-flex;
601
- display: -moz-box;
602
- display: -ms-flexbox;
603
- display: flex;
604
- -webkit-box-align: center;
605
- -webkit-align-items: center;
606
- -moz-box-align: center;
607
- -ms-flex-align: center;
608
- align-items: center;
609
- margin-top: 25px;
610
- }
611
-
612
- .pa-section-info-cta .pa-btn {
613
- color: #474747;
614
- background-color: #ebebeb;
615
- padding: 8px 20px;
616
- -webkit-border-radius: 10px;
617
- border-radius: 10px;
618
- font-size: 15px;
619
- font-weight: 700;
620
- font-family: "Red Hat Display";
621
- -webkit-transition: all 0.2s ease-in-out;
622
- transition: all 0.2s ease-in-out;
623
- }
624
-
625
- .pa-section-info-cta .pa-btn:hover,
626
- .pa-section-info-cta .pa-btn:focus,
627
- .pa-section-info-cta .pa-btn:active {
628
- color: #fff;
629
- background-color: #00a5e5;
630
- }
631
-
632
- .pa-section-info-cta .pa-section-info-label {
633
- font-size: 13px;
634
- color: #474747;
635
- font-family: "Poppins";
636
- text-align: right;
637
- }
638
-
639
- .pa-section-info-cta .pa-section-info-warning {
640
- font-size: 13px;
641
- color: #cca329;
642
- font-weight: 300;
643
- font-family: "Poppins";
644
- margin-left: 20px;
645
- }
646
-
647
- .pa-section-info-cta .pa-section-info-warning i {
648
- font-weight: 300;
649
- vertical-align: bottom;
650
- }
651
-
652
- .pa-section-info-wrap .pa-btn,
653
- .pa-section-info-wrap .pa-btn-unused {
654
- font-family: "Red Hat Display";
655
- color: #8e8e8e;
656
- background-color: #ebebeb;
657
- border: 0px solid;
658
- padding: 16px 28px;
659
- -webkit-border-radius: 10px;
660
- border-radius: 10px;
661
- font-size: 15px;
662
- font-weight: 700;
663
- cursor: pointer;
664
- -webkit-transition: 300ms;
665
- transition: 300ms;
666
- display: block;
667
- text-decoration: none;
668
- }
669
-
670
- .pa-section-info-wrap .pa-btn-unused {
671
- width: 100%;
672
- clear: both;
673
- background: transparent;
674
- color: #252C59;
675
- padding-bottom: 0;
676
- text-decoration: underline;
677
- font-weight: normal;
678
- }
679
-
680
- .pa-section-info-wrap .pa-btn-unused.dimmed {
681
- cursor: no-drop;
682
- color: #C2C4CF;
683
- }
684
-
685
- .pa-element-name .pa-total-use {
686
- color: #252C59;
687
- }
688
-
689
- .pa-section-info-wrap button.pa-btn-enable {
690
- -webkit-border-top-right-radius: 0;
691
- border-top-right-radius: 0;
692
- -webkit-border-bottom-right-radius: 0;
693
- border-bottom-right-radius: 0;
694
- float: left;
695
- }
696
-
697
- .pa-section-info-wrap button.pa-btn-disable {
698
- -webkit-border-top-left-radius: 0;
699
- border-top-left-radius: 0;
700
- -webkit-border-bottom-left-radius: 0;
701
- border-bottom-left-radius: 0;
702
- float: right;
703
- }
704
-
705
- .pa-section-info-wrap .pa-btn-enable.active {
706
- color: #fff;
707
- -webkit-box-shadow: inset 3.5px 1.8px 7px 0px rgba(125, 125, 125, 0.5);
708
- box-shadow: inset 3.5px 1.8px 7px 0px rgba(125, 125, 125, 0.5);
709
- background-color: #8dc900;
710
- }
711
-
712
- .pa-section-info-wrap .pa-btn-disable.active {
713
- color: #fff;
714
- -webkit-box-shadow: inset 3.564px 1.816px 7px 0px rgba(81, 81, 81, 0.5);
715
- box-shadow: inset 3.564px 1.816px 7px 0px rgba(81, 81, 81, 0.5);
716
- background-color: #898989;
717
- }
718
-
719
- .pa-section-info-wrap .pa-btn-enable:not(.active):hover {
720
- color: #ffffff;
721
- background-color: #8dc900;
722
- }
723
-
724
- .pa-section-info-wrap .pa-btn-disable:not(.active):hover {
725
- color: #ffffff;
726
- background-color: #898989;
727
- }
728
-
729
- /*
730
- * Widgets & Addons Tab
731
- */
732
- .pa-elements-settings {
733
- position: relative;
734
- -js-display: flex;
735
- display: -webkit-box;
736
- display: -webkit-flex;
737
- display: -moz-box;
738
- display: -ms-flexbox;
739
- display: flex;
740
- margin-top: 16px;
741
- }
742
-
743
- .pa-elements-filter {
744
- position: absolute;
745
- top: 10px;
746
- right: 16px;
747
- }
748
-
749
- .pa-elements-filter label {
750
- font-size: 13px;
751
- color: #474747;
752
- font-family: "Poppins";
753
- margin-right: 10px;
754
- }
755
-
756
- .pa-elements-filter select {
757
- padding: 5px 35px 5px 15px;
758
- }
759
-
760
- .pa-elements-tabs {
761
- -webkit-border-radius: 10px;
762
- border-radius: 10px;
763
- background-color: #f7f7f7;
764
- padding: 20px;
765
- margin-right: 16px;
766
- }
767
-
768
- .pa-elements-tabs .pa-elements-tab {
769
- position: relative;
770
- padding: 0;
771
- margin-bottom: 12px;
772
- text-align: center;
773
- }
774
-
775
- .pa-elements-tab .pa-element-tab-tooltip {
776
- position: absolute;
777
- background-color: #3a3c40;
778
- display: block;
779
- position: absolute;
780
- top: 50%;
781
- left: 100%;
782
- padding: 10px 20px;
783
- -webkit-border-radius: 13px;
784
- border-radius: 13px;
785
- -webkit-filter: drop-shadow(0px 5px 27.5px rgba(104, 104, 104, 0.3));
786
- filter: drop-shadow(0px 5px 27.5px rgba(104, 104, 104, 0.3));
787
- background-color: #ffffff;
788
- font-size: 11px;
789
- color: #252c59;
790
- font-weight: 500;
791
- font-family: "Poppins";
792
- opacity: 0;
793
- pointer-events: none;
794
- text-transform: capitalize;
795
- -webkit-transform: translate(30px, -50%);
796
- -ms-transform: translate(30px, -50%);
797
- transform: translate(30px, -50%);
798
- -webkit-transition: all 0.3s ease;
799
- transition: all 0.3s ease;
800
- z-index: 1;
801
- white-space: nowrap;
802
- }
803
-
804
- .pa-elements-tab .pa-element-tab-tooltip::before {
805
- display: block;
806
- position: absolute;
807
- top: 50%;
808
- left: -5px;
809
- width: 0;
810
- height: 0;
811
- content: "";
812
- border-top: 5px solid transparent;
813
- border-bottom: 5px solid transparent;
814
- border-right: 5px solid #ffffff;
815
- -webkit-transform: translateY(-50%);
816
- -ms-transform: translateY(-50%);
817
- transform: translateY(-50%);
818
- }
819
-
820
- .pa-elements-tab .pa-elements-tab-link {
821
- -js-display: flex;
822
- display: -webkit-box;
823
- display: -webkit-flex;
824
- display: -moz-box;
825
- display: -ms-flexbox;
826
- display: flex;
827
- -webkit-box-pack: center;
828
- -webkit-justify-content: center;
829
- -moz-box-pack: center;
830
- -ms-flex-pack: center;
831
- justify-content: center;
832
- -webkit-box-align: center;
833
- -webkit-align-items: center;
834
- -moz-box-align: center;
835
- -ms-flex-align: center;
836
- align-items: center;
837
- color: #c2c4cf;
838
- padding: 12px;
839
- text-decoration: none;
840
- -webkit-transition: all 0.3s ease-in-out;
841
- transition: all 0.3s ease-in-out;
842
- -webkit-border-radius: 13px;
843
- border-radius: 13px;
844
- }
845
-
846
- .pa-elements-tab .pa-elements-tab-link:hover,
847
- .pa-elements-tab .pa-elements-tab-link.active {
848
- -webkit-filter: drop-shadow(-4.243px -4.243px 3px rgba(255, 255, 255, 0.5)) drop-shadow(4.243px 4.243px 3px rgba(191, 201, 210, 0.6));
849
- filter: drop-shadow(-4.243px -4.243px 3px rgba(255, 255, 255, 0.5)) drop-shadow(4.243px 4.243px 3px rgba(191, 201, 210, 0.6));
850
- background-color: #ffffff;
851
- color: #00a5e5;
852
- outline: none;
853
- border: none;
854
- text-decoration: none;
855
- -webkit-box-shadow: none;
856
- box-shadow: none;
857
- }
858
-
859
- .pa-elements-tab .pa-elements-tab-link:hover+span {
860
- opacity: 1;
861
- -webkit-transform: translate(20px, -50%);
862
- -ms-transform: translate(20px, -50%);
863
- transform: translate(20px, -50%);
864
- }
865
-
866
- .pa-switchers {
867
- -js-display: flex;
868
- display: -webkit-box;
869
- display: -webkit-flex;
870
- display: -moz-box;
871
- display: -ms-flexbox;
872
- display: flex;
873
- -webkit-flex-wrap: wrap;
874
- -ms-flex-wrap: wrap;
875
- flex-wrap: wrap;
876
- -webkit-align-content: flex-start;
877
- -ms-flex-line-pack: start;
878
- align-content: flex-start;
879
- }
880
-
881
- .pa-switchers-container {
882
- width: 100%;
883
- }
884
-
885
- .pa-switchers-container.hidden,
886
- .pa-switcher.hidden {
887
- display: none;
888
- }
889
-
890
- .pa-switchers-container .pa-elements-tab-title {
891
- font-size: 20px;
892
- color: #252c59;
893
- font-weight: 900;
894
- font-family: "Red Hat Display";
895
- margin: 16px 0;
896
- }
897
-
898
- .pa-switcher {
899
- -webkit-border-radius: 15px;
900
- border-radius: 15px;
901
- background-color: #f7f7f7;
902
- position: relative;
903
- -js-display: flex;
904
- display: -webkit-box;
905
- display: -webkit-flex;
906
- display: -moz-box;
907
- display: -ms-flexbox;
908
- display: flex;
909
- width: -webkit-calc(50% - 56px);
910
- width: calc(50% - 56px);
911
- -webkit-box-pack: justify;
912
- -webkit-justify-content: space-between;
913
- -moz-box-pack: justify;
914
- -ms-flex-pack: justify;
915
- justify-content: space-between;
916
- -webkit-box-align: center;
917
- -webkit-align-items: center;
918
- -moz-box-align: center;
919
- -ms-flex-align: center;
920
- align-items: center;
921
- padding: 20px;
922
- margin-top: 16px;
923
- margin-right: 16px;
924
- }
925
-
926
- .pa-element-info {
927
- -js-display: flex;
928
- display: -webkit-box;
929
- display: -webkit-flex;
930
- display: -moz-box;
931
- display: -ms-flexbox;
932
- display: flex;
933
- -webkit-box-align: center;
934
- -webkit-align-items: center;
935
- -moz-box-align: center;
936
- -ms-flex-align: center;
937
- align-items: center;
938
- }
939
-
940
- .pa-section .pa-element-icon {
941
- color: #252c59;
942
- background-color: #ebebeb;
943
- -webkit-border-radius: 15px;
944
- border-radius: 15px;
945
- /* padding: 12px; */
946
- min-width: 40px;
947
- min-height: 40px;
948
- margin-right: 8px;
949
- -js-display: flex;
950
- display: -webkit-box;
951
- display: -webkit-flex;
952
- display: -moz-box;
953
- display: -ms-flexbox;
954
- display: flex;
955
- -webkit-box-pack: center;
956
- -webkit-justify-content: center;
957
- -moz-box-pack: center;
958
- -ms-flex-pack: center;
959
- justify-content: center;
960
- -webkit-box-align: center;
961
- -webkit-align-items: center;
962
- -moz-box-align: center;
963
- -ms-flex-align: center;
964
- align-items: center;
965
- }
966
-
967
- .pa-element-name {
968
- font-size: 16px;
969
- color: #252c59;
970
- font-weight: 700;
971
- font-family: "Red Hat Display";
972
- margin: 0;
973
- -js-display: flex;
974
- display: -webkit-box;
975
- display: -webkit-flex;
976
- display: -moz-box;
977
- display: -ms-flexbox;
978
- display: flex;
979
- }
980
-
981
- .pa-element-name span {
982
- text-transform: uppercase;
983
- color: #fd9926;
984
- font-weight: 700;
985
- font-size: 11px;
986
- margin-left: 5px;
987
- }
988
-
989
- .pa-element-link {
990
- font-size: 13px;
991
- color: #252c59;
992
- font-family: "Poppins";
993
- text-decoration: none;
994
- -webkit-transition: all 0.2s ease-in-out;
995
- transition: all 0.2s ease-in-out;
996
- }
997
-
998
- .pa-element-link-separator {
999
- width: 3px;
1000
- height: 3px;
1001
- display: inline-block;
1002
- text-align: center;
1003
- color: #252c59;
1004
- background: #252c59;
1005
- -webkit-border-radius: 50%;
1006
- border-radius: 50%;
1007
- vertical-align: middle;
1008
- margin: 0 3px;
1009
- }
1010
-
1011
- .pa-element-link:hover,
1012
- .pa-element-link:focus {
1013
- color: #00a5e5;
1014
- text-decoration: none;
1015
- outline: none;
1016
- -webkit-box-shadow: none;
1017
- box-shadow: none;
1018
- border: none;
1019
- }
1020
-
1021
- /*
1022
- * Integrations
1023
- */
1024
- .pa-maps-table select {
1025
- width: 100%;
1026
- max-width: 100%;
1027
- padding: 8px;
1028
- }
1029
-
1030
- .pa-maps-table #premium-map-api,
1031
- .pa-maps-table #premium-youtube-api {
1032
- width: 100%;
1033
- }
1034
-
1035
- .pa-maps-table tr td {
1036
- padding-top: 30px;
1037
- }
1038
-
1039
- .pa-maps-table tr td:first-of-type {
1040
- padding-right: 30px;
1041
- }
1042
-
1043
- .pa-maps-table td h4 {
1044
- margin: 0;
1045
- font-size: 15px;
1046
- color: #252c59;
1047
- font-weight: 500;
1048
- font-family: "Poppins";
1049
- display: inline-block;
1050
- }
1051
-
1052
- .pa-maps-table td span {
1053
- font-size: 13px;
1054
- color: #474747;
1055
- font-family: "Poppins";
1056
- vertical-align: middle;
1057
- }
1058
-
1059
- .pa-maps-table td input[type="text"] {
1060
- -webkit-border-radius: 10px;
1061
- border-radius: 10px;
1062
- background-color: #ebebeb;
1063
- border: none;
1064
- padding: 8px 20px;
1065
- }
1066
-
1067
- .pa-section input[type="checkbox"] {
1068
- border: none;
1069
- display: none;
1070
- }
1071
-
1072
- .pa-section input[type="checkbox"]+label {
1073
- position: relative;
1074
- background: #ebebeb;
1075
- height: 16px;
1076
- width: 16px;
1077
- display: inline-block;
1078
- padding: 0;
1079
- margin-right: 5px;
1080
- -webkit-border-radius: 4px;
1081
- border-radius: 4px;
1082
- }
1083
-
1084
- .pa-section input[type="checkbox"]:checked+label {
1085
- background: #00a5e5;
1086
- height: 16px;
1087
- width: 16px;
1088
- display: inline-block;
1089
- padding: 0;
1090
- }
1091
-
1092
- .pa-section input[type="checkbox"]:checked+label:before {
1093
- position: absolute;
1094
- content: "✔";
1095
- color: #fff;
1096
- font-size: 12px;
1097
- top: 0;
1098
- left: 0;
1099
- width: 100%;
1100
- height: 100%;
1101
- text-align: center;
1102
- margin-top: -1px;
1103
- }
1104
-
1105
- .pa-maps-table td input:focus {
1106
- outline: none;
1107
- -webkit-box-shadow: none;
1108
- box-shadow: none;
1109
- border: none;
1110
- }
1111
-
1112
- .pa-elements-filter select,
1113
- .pa-maps-table td select {
1114
- border-color: #dcdcdc;
1115
- -webkit-border-radius: 10px;
1116
- border-radius: 10px;
1117
- -webkit-border-bottom-right-radius: 0;
1118
- border-bottom-right-radius: 0;
1119
- }
1120
-
1121
- .pa-maps-circle-icon {
1122
- width: 5px;
1123
- height: 5px;
1124
- background-color: #252c59;
1125
- -webkit-border-radius: 50%;
1126
- border-radius: 50%;
1127
- display: inline-block;
1128
- vertical-align: middle;
1129
- margin-right: 10px;
1130
- }
1131
-
1132
- .pa-maps-table td h4:before {
1133
- position: absolute;
1134
- content: "";
1135
- }
1136
-
1137
- /*
1138
- * White Labeling Tab
1139
- */
1140
- .pa-wht-lbl-settings .pa-wht-lbl-title {
1141
- font-size: 20px;
1142
- color: #252c59;
1143
- font-weight: 900;
1144
- font-family: "Red Hat Display";
1145
- margin: 0;
1146
- }
1147
-
1148
- .pa-wht-lbl-settings .pa-row {
1149
- width: 60%;
1150
- float: left;
1151
- }
1152
-
1153
- .pa-wht-lbl-settings .pa-wht-lbl-admin {
1154
- width: 30%;
1155
- float: left;
1156
- margin-left: 16px;
1157
- }
1158
-
1159
- .pa-wht-lbl-settings .pa-wht-lbl-head {
1160
- border-bottom: 1px solid #ddd;
1161
- background: #f7f7f7;
1162
- padding: 20px;
1163
- }
1164
-
1165
- .pa-wht-lbl-table {
1166
- text-align: left;
1167
- }
1168
-
1169
- .pa-wht-lbl-settings input {
1170
- font-weight: 400;
1171
- margin: 0;
1172
- margin-bottom: 12px;
1173
- -webkit-border-radius: 10px;
1174
- border-radius: 10px;
1175
- /* background-color: #ebebeb; */
1176
- border: 1px solid #dcdcdc;
1177
- padding: 8px 20px;
1178
- }
1179
-
1180
- /* .pa-wht-lbl-settings input + span {
1181
- margin-left: 0.3em;
1182
- } */
1183
-
1184
- .pa-wht-lbl-settings label+span {
1185
- font-family: "Poppins";
1186
- vertical-align: middle;
1187
- }
1188
-
1189
- .pa-wht-lbl-settings .pa-input-label {
1190
- display: block;
1191
- font-weight: 600;
1192
- margin: 10px 0 6px;
1193
- font-size: 14px;
1194
- color: #252c59;
1195
- font-family: "Red Hat Display";
1196
- }
1197
-
1198
- .pa-wht-lbl-settings input[type="text"] {
1199
- width: 550px;
1200
- }
1201
-
1202
- .pa-wht-lbl-settings input[type="text"]::-webkit-input-placeholder {
1203
- font-weight: 300;
1204
- font-family: "Poppins";
1205
- }
1206
-
1207
- .pa-wht-lbl-settings input[type="text"]:-moz-placeholder {
1208
- font-weight: 300;
1209
- font-family: "Poppins";
1210
- }
1211
-
1212
- .pa-wht-lbl-settings input[type="text"]::-moz-placeholder {
1213
- font-weight: 300;
1214
- font-family: "Poppins";
1215
- }
1216
-
1217
- .pa-wht-lbl-settings input[type="text"]:-ms-input-placeholder {
1218
- font-weight: 300;
1219
- font-family: "Poppins";
1220
- }
1221
-
1222
- .pa-wht-lbl-settings input[type="text"]::-ms-input-placeholder {
1223
- font-weight: 300;
1224
- font-family: "Poppins";
1225
- }
1226
-
1227
- .pa-wht-lbl-settings input[type="text"]::placeholder {
1228
- font-weight: 300;
1229
- font-family: "Poppins";
1230
- }
1231
-
1232
- .pa-wht-lbl-settings .pa-wht-lbl-settings-wrap {
1233
- background: #fff;
1234
- margin: 16px auto;
1235
- border: 1px solid #dcdcdc;
1236
- -webkit-border-radius: 10px;
1237
- border-radius: 10px;
1238
- overflow: hidden;
1239
- }
1240
-
1241
- .pa-wht-lbl-settings .clearfix {
1242
- clear: both;
1243
- }
1244
-
1245
- .pa-wht-lbl-group-wrap {
1246
- padding: 20px;
1247
- }
1248
-
1249
- .pa-section-white-label .pa-white-label-notice {
1250
- position: absolute;
1251
- top: 0;
1252
- left: 0;
1253
- width: 100%;
1254
- height: 100%;
1255
- background: rgba(200, 200, 200, 0.8);
1256
- -webkit-border-radius: 15px;
1257
- border-radius: 15px;
1258
- -js-display: flex;
1259
- display: -webkit-box;
1260
- display: -webkit-flex;
1261
- display: -moz-box;
1262
- display: -ms-flexbox;
1263
- display: flex;
1264
- -webkit-box-pack: center;
1265
- -webkit-justify-content: center;
1266
- -moz-box-pack: center;
1267
- -ms-flex-pack: center;
1268
- justify-content: center;
1269
- }
1270
-
1271
- .pa-white-label-notice-content {
1272
- position: absolute;
1273
- top: 200px;
1274
- left: 200;
1275
- width: 530px;
1276
- background-image: url("../../images/popup-pattern.jpg");
1277
- background-repeat: no-repeat;
1278
- -webkit-background-size: cover;
1279
- background-size: cover;
1280
- padding: 32px;
1281
- padding-bottom: 50px;
1282
- -webkit-border-radius: 50px 0px;
1283
- border-radius: 50px 0px;
1284
- text-align: center;
1285
- z-index: 2;
1286
- }
1287
-
1288
- .pa-white-label-notice-logo {
1289
- -webkit-transform: translateY(-32px);
1290
- -ms-transform: translateY(-32px);
1291
- transform: translateY(-32px);
1292
- margin-bottom: -18px;
1293
- }
1294
-
1295
- .pa-white-label-notice-logo img {
1296
- padding: 10px;
1297
- padding-top: 40px;
1298
- background-color: #ffffff;
1299
- border: 1px solid #e6e6e6;
1300
- -webkit-border-radius: 50px;
1301
- border-radius: 50px;
1302
- -webkit-border-top-left-radius: 50px;
1303
- border-top-left-radius: 50px;
1304
- -webkit-border-top-right-radius: 50px;
1305
- border-top-right-radius: 50px;
1306
- -webkit-border-top-left-radius: 0;
1307
- border-top-left-radius: 0;
1308
- -webkit-border-top-right-radius: 0;
1309
- border-top-right-radius: 0;
1310
- }
1311
-
1312
- .pa-white-label-notice-content h2,
1313
- .pa-swal-head {
1314
- display: inline-block;
1315
- font-size: 23px;
1316
- color: #252c59;
1317
- font-weight: 900;
1318
- font-family: "Red Hat Display";
1319
- text-align: center;
1320
- max-width: 350px;
1321
- line-height: 1;
1322
- margin: 0;
1323
- margin-bottom: 18px;
1324
- }
1325
-
1326
- .pa-white-label-notice-content h2 span {
1327
- color: #fd9926;
1328
- text-transform: uppercase;
1329
- font-family: "Red Hat Display";
1330
- }
1331
-
1332
- .pa-white-label-notice-content p {
1333
- font-size: 13px;
1334
- color: #474747;
1335
- font-family: "Poppins";
1336
- text-align: center;
1337
- margin: 0;
1338
- margin-bottom: 18px;
1339
- }
1340
-
1341
- .pa-white-label-notice-content a.pa-get-pro {
1342
- display: inline-block;
1343
- width: 117px;
1344
- padding: 12px 10px;
1345
- -webkit-border-radius: 10px;
1346
- border-radius: 10px;
1347
- color: #ffffff;
1348
- font-size: 15px;
1349
- font-weight: 900;
1350
- font-family: "Red Hat Display";
1351
- -webkit-filter: drop-shadow(0px 20px 17.5px rgba(254, 99, 0, 0.2));
1352
- filter: drop-shadow(0px 20px 17.5px rgba(254, 99, 0, 0.2));
1353
- text-decoration: none;
1354
- outline: none;
1355
- border: none;
1356
- background-image: -webkit-linear-gradient(120deg, #fe6300 0%, #fe9f00 100%);
1357
- background-image: linear-gradient(-30deg, #fe6300 0%, #fe9f00 100%);
1358
- -webkit-transition: all 0.2s ease-in-out;
1359
- transition: all 0.2s ease-in-out;
1360
- }
1361
-
1362
- .pa-white-label-notice-content a.pa-get-pro:hover {
1363
- background-image: -webkit-linear-gradient(60deg, #fe6300 0%, #fe9f00 100%);
1364
- background-image: linear-gradient(30deg, #fe6300 0%, #fe9f00 100%);
1365
- }
1366
-
1367
- /*
1368
- * System Info Tab
1369
- */
1370
- .pa-section-info table.widefat {
1371
- border: 0px;
1372
- -webkit-box-shadow: none;
1373
- box-shadow: none;
1374
- font-family: "Poppins";
1375
- }
1376
-
1377
- .pa-section-info .widefat td:first-child {
1378
- width: 30%;
1379
- }
1380
-
1381
- .pa-section-info table.widefat tr:nth-child(2n) {
1382
- background-color: #f7f7f7;
1383
- }
1384
-
1385
- /*
1386
- * License Tab
1387
- */
1388
- .pa-license-form span {
1389
- color: #474747;
1390
- font-family: "Poppins";
1391
- }
1392
-
1393
- .pa-license-form label {
1394
- display: block;
1395
- font-weight: 500;
1396
- margin: 2em 0 0.5em;
1397
- }
1398
-
1399
- .pa-license-form code {
1400
- padding: 3px 5px 2px;
1401
- margin: 0 1px;
1402
- background: #eaeaea;
1403
- background: rgba(0, 0, 0, 0.07);
1404
- font-size: 13px;
1405
- font-style: italic;
1406
- }
1407
-
1408
- .pa-license-form .button.button-primary {
1409
- width: 147px;
1410
- height: 43px;
1411
- /* -webkit-filter: drop-shadow(0px 10px 35px rgba(0, 165, 229, 0.3));
1412
- filter: drop-shadow(0px 10px 35px rgba(0, 165, 229, 0.3)); */
1413
- background-color: #00a5e5;
1414
- /* margin-top: 50px; */
1415
- margin-left: -3px;
1416
- -webkit-border-radius: 0 10px 10px 0;
1417
- border-radius: 0 10px 10px 0;
1418
- border: none;
1419
- }
1420
-
1421
- #papro-license-key:focus,
1422
- .pa-license-form .button.button-primary:focus {
1423
- outline: none;
1424
- -webkit-box-shadow: none;
1425
- box-shadow: none;
1426
- }
1427
-
1428
- #papro-license-key {
1429
- height: 43px;
1430
- line-height: 1;
1431
- margin: 0;
1432
- padding: 8px 20px;
1433
- -webkit-border-radius: 10px 0 0 10px;
1434
- border-radius: 10px 0 0 10px;
1435
- }
1436
-
1437
- .pa-license-form input+span {
1438
- margin-left: 10px;
1439
- font-weight: 600;
1440
- }
1441
-
1442
- .pa-license-cell span {
1443
- margin-left: 0.3em;
1444
- }
1445
-
1446
- @media(min-width: 1550px) {
1447
- #pa-general-settings .pa-section-info:not(.pa-news-section):not(.pa-support-section) p {
1448
- min-height: 65px;
1449
- }
1450
-
1451
- .pa-news-grid .pa-news-post p:nth-of-type(1) {
1452
- min-height: 40px;
1453
- }
1454
- }
1455
-
1456
- /*
1457
- * PAPRO Notice
1458
- */
1459
- .papro-admin-notice {
1460
- -webkit-display: flex;
1461
- display: -webkit-box;
1462
- display: -ms-flexbox;
1463
- -js-display: flex;
1464
- display: -moz-box;
1465
- display: flex;
1466
- -webkit-box-pack: end;
1467
- -ms-flex-pack: end;
1468
- -webkit-justify-content: flex-end;
1469
- -moz-box-pack: end;
1470
- justify-content: flex-end;
1471
- -webkit-box-align: center;
1472
- -ms-flex-align: center;
1473
- -webkit-align-items: center;
1474
- -moz-box-align: center;
1475
- align-items: center;
1476
- margin-bottom: 24px;
1477
- }
1478
-
1479
- .papro-admin-notice>div {
1480
- -webkit-box-flex: 1;
1481
- -webkit-flex-grow: 1;
1482
- -moz-box-flex: 1;
1483
- -ms-flex-positive: 1;
1484
- flex-grow: 1;
1485
- }
1486
-
1487
- .papro-admin-notice-left {
1488
- position: relative;
1489
- padding: 16px;
1490
- -webkit-border-radius: 15px;
1491
- border-radius: 15px;
1492
- background-color: #fff;
1493
- -webkit-flex-basis: 80%;
1494
- -ms-flex-preferred-size: 80%;
1495
- flex-basis: 80%;
1496
- }
1497
-
1498
- .papro-admin-notice-left a {
1499
- position: absolute;
1500
- top: 0;
1501
- left: 0;
1502
- width: 100%;
1503
- height: 100%;
1504
- }
1505
-
1506
- .papro-admin-notice-left a:hover,
1507
- .papro-admin-notice-left a:focus,
1508
- .papro-admin-notice-left a:visited {
1509
- outline: none;
1510
- border: none;
1511
- -webkit-box-shadow: none;
1512
- box-shadow: none;
1513
- text-decoration: none;
1514
- }
1515
-
1516
- .papro-admin-notice-logo {
1517
- -webkit-display: flex;
1518
- display: -webkit-box;
1519
- display: -ms-flexbox;
1520
- -js-display: flex;
1521
- display: -moz-box;
1522
- display: flex;
1523
- -webkit-box-pack: justify;
1524
- -webkit-justify-content: space-between;
1525
- -moz-box-pack: justify;
1526
- -ms-flex-pack: justify;
1527
- justify-content: space-between;
1528
- -webkit-box-align: center;
1529
- -webkit-align-items: center;
1530
- -moz-box-align: center;
1531
- -ms-flex-align: center;
1532
- align-items: center;
1533
- }
1534
-
1535
- .papro-admin-notice-logo label {
1536
- display: block;
1537
- font-weight: 600;
1538
- margin: 10px 0 6px;
1539
- font-size: 14px;
1540
- color: #252c59;
1541
- font-family: "Red Hat Display";
1542
- }
1543
-
1544
- .papro-admin-notice-right {
1545
- -webkit-display: flex;
1546
- display: -webkit-box;
1547
- display: -ms-flexbox;
1548
- -js-display: flex;
1549
- display: -moz-box;
1550
- display: flex;
1551
- -webkit-box-align: center;
1552
- -ms-flex-align: center;
1553
- -webkit-align-items: center;
1554
- -moz-box-align: center;
1555
- align-items: center;
1556
- background: url("../../images/papro-banner.png");
1557
- -webkit-background-size: cover;
1558
- background-size: cover;
1559
- background-repeat: no-repeat;
1560
- padding: 18px;
1561
- -webkit-border-radius: 15px;
1562
- border-radius: 15px;
1563
- overflow: hidden;
1564
- margin-left: 25px;
1565
- }
1566
-
1567
- .papro-admin-notice-right h4 {
1568
- font-size: 20px;
1569
- color: #fff;
1570
- font-weight: 900;
1571
- font-family: "Red Hat Display";
1572
- margin: 0;
1573
- margin-bottom: 8px;
1574
- }
1575
-
1576
- .papro-admin-notice-right p {
1577
- font-size: 14px;
1578
- color: #ffffff;
1579
- font-family: "Poppins";
1580
- margin: 0;
1581
- }
1582
-
1583
- .papro-admin-notice-right span {
1584
- font-weight: 700;
1585
- }
1586
-
1587
- /*
1588
- * Dashboard Tabs
1589
- */
1590
- .pa-dash-general:before {
1591
- content: "\e93e";
1592
- }
1593
-
1594
- .pa-dash-integrations:before {
1595
- content: "\e93f";
1596
- }
1597
-
1598
- .pa-dash-system-info:before {
1599
- content: "\e941";
1600
- }
1601
-
1602
- .pa-dash-vcontrol:before {
1603
- content: "\e942";
1604
- }
1605
-
1606
- .pa-dash-white-label:before {
1607
- content: "\e943";
1608
- }
1609
-
1610
- .pa-dash-elements:before {
1611
- content: "\e944";
1612
- }
1613
-
1614
- .pa-dash-license:before {
1615
- content: "\e940";
1616
- }
1617
-
1618
- .pa-dash-features:before {
1619
- content: "\e911";
1620
- }
1621
-
1622
- /*
1623
- * Elements Categories
1624
- */
1625
- .pa-dash-cat-all:before {
1626
- content: "\e945";
1627
- }
1628
-
1629
- .pa-dash-cat-blurbs:before {
1630
- content: "\e946";
1631
- }
1632
-
1633
- .pa-dash-cat-contact:before {
1634
- content: "\e94a";
1635
- }
1636
-
1637
- .pa-dash-cat-content:before {
1638
- content: "\e948";
1639
- }
1640
-
1641
- .pa-dash-cat-images:before {
1642
- content: "\e949";
1643
- }
1644
-
1645
- .pa-dash-cat-off-grid:before {
1646
- content: "\e94b";
1647
- }
1648
-
1649
- .pa-dash-cat-section:before {
1650
- content: "\e94c";
1651
- }
1652
-
1653
- .pa-dash-cat-feed:before {
1654
- content: "\e94d";
1655
- }
1656
-
1657
- .pa-dash-cat-data:before {
1658
- content: "\e94e";
1659
- }
1660
-
1661
- .pa-dash-cat-social:before {
1662
- content: "\e94f";
1663
- }
1664
-
1665
- /*
1666
- * Widgets Icons
1667
- */
1668
- .pa-dash-premium-notbar:before {
1669
- content: "\e902";
1670
- }
1671
-
1672
- .pa-dash-premium-gradient:before {
1673
- content: "\e903";
1674
- }
1675
-
1676
- .pa-dash-premium-color-transition:before {
1677
- content: "\e904";
1678
- }
1679
-
1680
- .pa-dash-premium-behance:before {
1681
- content: "\e905";
1682
- }
1683
-
1684
- .pa-dash-premium-charts:before {
1685
- content: "\e906";
1686
- }
1687
-
1688
- .pa-dash-premium-content-toggle:before {
1689
- content: "\e907";
1690
- }
1691
-
1692
- .pa-dash-premium-divider:before {
1693
- content: "\e908";
1694
- }
1695
-
1696
- .pa-dash-premium-facebook-feed:before {
1697
- content: "\e90a";
1698
- }
1699
-
1700
- .pa-dash-facebook-feed-2:before {
1701
- content: "\e91b";
1702
- }
1703
-
1704
- .pa-dash-premium-fb-chat:before {
1705
- content: "\e90b";
1706
- }
1707
-
1708
- .pa-dash-premium-facebook-reviews:before {
1709
- content: "\e90c";
1710
- }
1711
-
1712
- .pa-dash-premium-google-reviews:before {
1713
- content: "\e90d";
1714
- }
1715
-
1716
- .pa-dash-premium-hscroll:before {
1717
- content: "\e90e";
1718
- }
1719
-
1720
- .pa-dash-premium-flipbox:before {
1721
- content: "\e90f";
1722
- }
1723
-
1724
- .pa-dash-premium-iconbox:before {
1725
- content: "\e910";
1726
- }
1727
-
1728
- .pa-dash-premium-image-accordion:before {
1729
- content: "\e912";
1730
- }
1731
-
1732
- .pa-dash-premium-image-comparison:before {
1733
- content: "\e913";
1734
- }
1735
-
1736
- .pa-dash-premium-image-hotspots:before {
1737
- content: "\e914";
1738
- }
1739
-
1740
- .pa-dash-premium-img-layers:before {
1741
- content: "\e915";
1742
- }
1743
-
1744
- .pa-dash-premium-instagram-feed:before {
1745
- content: "\e916";
1746
- }
1747
-
1748
- .pa-dash-premium-kenburns:before {
1749
- content: "\e917";
1750
- }
1751
-
1752
- .pa-dash-premium-lottie:before {
1753
- content: "\e918";
1754
- }
1755
-
1756
- .pa-dash-premium-magic-section:before {
1757
- content: "\e919";
1758
- }
1759
-
1760
- .pa-dash-premium-multi-scroll:before {
1761
- content: "\e91a";
1762
- }
1763
-
1764
- .pa-dash-premium-ihover:before {
1765
- content: "\e911";
1766
- }
1767
-
1768
- .pa-dash-premium-parallax:before {
1769
- content: "\e91b";
1770
- }
1771
-
1772
- .pa-dash-premium-particles:before {
1773
- content: "\e91c";
1774
- }
1775
-
1776
- .pa-dash-premium-prev-img:before {
1777
- content: "\e91d";
1778
- }
1779
-
1780
- .pa-dash-premium-tabs:before {
1781
- content: "\e91f";
1782
- }
1783
-
1784
- .pa-dash-premium-tables:before {
1785
- content: "\e91e";
1786
- }
1787
-
1788
- .pa-dash-premium-twitter-feed:before {
1789
- content: "\e921";
1790
- }
1791
-
1792
- .pa-dash-premium-unfold:before {
1793
- content: "\e922";
1794
- }
1795
-
1796
- .pa-dash-premium-whatsapp-chat:before {
1797
- content: "\e923";
1798
- }
1799
-
1800
- .pa-dash-premium-yelp-reviews:before {
1801
- content: "\e924";
1802
- }
1803
-
1804
- .pa-dash-premium-trustpilot-reviews:before {
1805
- content: "\e920";
1806
- }
1807
-
1808
- .pa-dash-premium-banner:before {
1809
- content: "\e925";
1810
- }
1811
-
1812
- .pa-dash-premium-blog:before {
1813
- content: "\e926";
1814
- }
1815
-
1816
- .pa-dash-premium-button:before {
1817
- content: "\e927";
1818
- }
1819
-
1820
- .pa-dash-premium-carousel:before {
1821
- content: "\e928";
1822
- }
1823
-
1824
- .pa-dash-premium-contactform:before {
1825
- content: "\e929";
1826
- }
1827
-
1828
- .pa-dash-premium-countdown:before {
1829
- content: "\e92a";
1830
- }
1831
-
1832
- .pa-dash-premium-counter:before {
1833
- content: "\e92b";
1834
- }
1835
-
1836
- .pa-dash-premium-dual-header:before {
1837
- content: "\e92c";
1838
- }
1839
-
1840
- .pa-dash-premium-fancytext:before {
1841
- content: "\e92d";
1842
- }
1843
-
1844
- .pa-dash-premium-maps:before {
1845
- content: "\e92e";
1846
- }
1847
-
1848
- .pa-dash-premium-title:before {
1849
- content: "\e92f";
1850
- }
1851
-
1852
- .pa-dash-premium-icon-list:before {
1853
- content: "\e930";
1854
- }
1855
-
1856
- .pa-dash-premium-image-button:before {
1857
- content: "\e931";
1858
- }
1859
-
1860
- .pa-dash-premium-image-scroll:before {
1861
- content: "\e932";
1862
- }
1863
-
1864
- .pa-dash-premium-image-separator:before {
1865
- content: "\e933";
1866
- }
1867
-
1868
- /* .pa-dash-premium-lottie:before {
1869
- content: "\e944";
1870
- } */
1871
- .pa-dash-premium-lottie-widget:before {
1872
- content: "\e935";
1873
- }
1874
-
1875
- .pa-dash-premium-grid:before {
1876
- content: "\e946";
1877
- }
1878
-
1879
- .pa-dash-premium-modalbox:before {
1880
- content: "\e937";
1881
- }
1882
-
1883
- .pa-dash-premium-pricing-table:before {
1884
- content: "\e938";
1885
- }
1886
-
1887
- .pa-dash-premium-progressbar:before {
1888
- content: "\e939";
1889
- }
1890
-
1891
- .pa-dash-premium-person:before {
1892
- content: "\e93a";
1893
- }
1894
-
1895
- .pa-dash-premium-testimonials:before {
1896
- content: "\e93b";
1897
- }
1898
-
1899
- .pa-dash-premium-vscroll:before {
1900
- content: "\e93c";
1901
- }
1902
-
1903
- .pa-dash-premium-videobox:before {
1904
- content: "\e93d";
1905
- }
1906
-
1907
- .pa-dash-premium-blob:before {
1908
- content: "\e900";
1909
- }
1910
-
1911
- .pa-dash-woo-products:before {
1912
- content: "\e901";
1913
  }
1
+ .button.pa-btn {
2
+ border: none;
3
+ color: #fff;
4
+ text-align: center;
5
+ padding: 3px;
6
+ max-width: 250px;
7
+ height: auto;
8
+ font-weight: 700;
9
+ -webkit-box-shadow: none;
10
+ box-shadow: none;
11
+ }
12
+
13
+ .button.pa-btn:hover,
14
+ .button.pa-btn:focus,
15
+ .button.pa-btn:active {
16
+ outline: none;
17
+ border: none;
18
+ text-decoration: none;
19
+ }
20
+
21
+
22
+ .switch {
23
+ position: relative;
24
+ display: inline-block;
25
+ width: 44px;
26
+ height: 24px;
27
+ -webkit-border-radius: 12px;
28
+ border-radius: 12px;
29
+ }
30
+
31
+ .switch input {
32
+ display: none;
33
+ }
34
+
35
+ .slider,
36
+ .pro-slider {
37
+ position: absolute;
38
+ cursor: pointer;
39
+ top: 0;
40
+ left: 0;
41
+ right: 0;
42
+ bottom: 0;
43
+ /* background-color: #f2f2f2;
44
+ box-shadow: 0 0 2px 1px #ccc inset; */
45
+ -webkit-transition: 0.4s;
46
+ transition: 0.4s;
47
+ }
48
+
49
+ .slider:before,
50
+ .pro-slider:before {
51
+ position: absolute;
52
+ content: "";
53
+ left: 3px;
54
+ top: 50%;
55
+ -webkit-transform: translateY(-50%);
56
+ -ms-transform: translateY(-50%);
57
+ transform: translateY(-50%);
58
+ /* background: radial-gradient(farthest-corner at 14px 0px, #f0f0f0 50%, #cacaca 100%); */
59
+ -webkit-transition: all 0.4s ease-in-out;
60
+ transition: all 0.4s ease-in-out;
61
+ padding: 0;
62
+ margin: 0;
63
+ width: 15px;
64
+ height: 15px;
65
+ -webkit-border-radius: 8px;
66
+ border-radius: 8px;
67
+ -webkit-filter: drop-shadow(0px 5px 2.5px rgba(40, 40, 40, 0.35));
68
+ filter: drop-shadow(0px 5px 2.5px rgba(40, 40, 40, 0.35));
69
+ background-color: #f7f7f7;
70
+ border: 1px solid #ffffff;
71
+ /* box-shadow: 0 2.5px 5px #b8b8b9; */
72
+ }
73
+
74
+ input:checked+.slider {
75
+ background: #8dc900;
76
+ }
77
+
78
+ input:focus+.slider {
79
+ -webkit-box-shadow: 0 0 1px #18a4fd;
80
+ box-shadow: 0 0 1px #18a4fd;
81
+ }
82
+
83
+ input:checked+.slider:before {
84
+ -webkit-transform: translate3d(20px, -50%, 0);
85
+ transform: translate3d(20px, -50%, 0);
86
+ }
87
+
88
+ .slider.round,
89
+ .pro-slider.round {
90
+ -webkit-border-radius: 34px;
91
+ border-radius: 34px;
92
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#cfcfcf), to(#dbdbdb));
93
+ background-image: -webkit-linear-gradient(top, #cfcfcf 0%, #dbdbdb 100%);
94
+ background-image: linear-gradient(180deg, #cfcfcf 0%, #dbdbdb 100%);
95
+ }
96
+
97
+ .slider.round:before,
98
+ .pro-slider.round:before {
99
+ -webkit-border-radius: 50%;
100
+ border-radius: 50%;
101
+ }
102
+
103
+ .pa-switcher input:disabled+.pro-slider::after {
104
+ position: absolute;
105
+ font-family: "Dashicons";
106
+ content: "\f160";
107
+ color: #474747;
108
+ right: 8px;
109
+ top: 50%;
110
+ -webkit-transform: translateY(-50%);
111
+ -ms-transform: translateY(-50%);
112
+ transform: translateY(-50%);
113
+ }
114
+
115
+ .pa-api-disable-title label,
116
+ .pa-is-beta label {
117
+ margin-right: 15px;
118
+ }
119
+
120
+ .pa-api-disable-title span,
121
+ .pa-is-beta span {
122
+ font-weight: 400;
123
+ }
124
+
125
+ .pa-maps-api-notice {
126
+ margin: 0.5em 0;
127
+ }
128
+
129
+ .pa-api-title input {
130
+ margin-top: 10px;
131
+ font-size: normal;
132
+ font-weight: 400;
133
+ width: 400px;
134
+ margin-left: 30px;
135
+ }
136
+
137
+ .pa-sys-info-tab {
138
+ background: #f7f7f7;
139
+ margin: 8px;
140
+ border: 2px solid #ddd;
141
+ -webkit-border-radius: 3px;
142
+ border-radius: 3px;
143
+ padding: 0;
144
+ }
145
+
146
+ .pa-system-info-container {
147
+ padding: 10px;
148
+ }
149
+
150
+ .dialog-type-lightbox .dialog-widget-header {
151
+ text-align: center;
152
+ font-size: 15px;
153
+ color: #495157;
154
+ padding: 30px 0 10px;
155
+ font-weight: 500;
156
+ }
157
+
158
+ .pa-swal.swal2-show {
159
+ padding: 32px;
160
+ padding-bottom: 50px;
161
+ background-image: url("../../images/popup-pattern.jpg");
162
+ background-repeat: no-repeat;
163
+ -webkit-background-size: cover;
164
+ background-size: cover;
165
+ -webkit-border-radius: 50px 0;
166
+ border-radius: 50px 0;
167
+ }
168
+
169
+ .pa-swal .swal2-close {
170
+ color: #c2c4cf;
171
+ }
172
+
173
+ .pa-swal .swal2-close:hover {
174
+ color: #00a5e5;
175
+ }
176
+
177
+ .pa-swal .swal2-title {
178
+ margin: 0;
179
+ }
180
+
181
+ .pa-swal .swal2-content {
182
+ font-size: 13px;
183
+ color: #474747;
184
+ font-family: "Poppins";
185
+ text-align: center;
186
+ margin: 0;
187
+ margin-bottom: 0px;
188
+ }
189
+
190
+ .pa-swal .swal2-cancel.swal2-styled,
191
+ .pa-swal .swal2-cancel.swal2-styled:hover,
192
+ .pa-swal .swal2-confirm.swal2-styled {
193
+ background-image: none !important;
194
+ background-color: #ebebeb;
195
+ color: #474747;
196
+ border: none !important;
197
+ -webkit-box-shadow: none !important;
198
+ box-shadow: none !important;
199
+ font-family: "Red Hat Display";
200
+ font-size: 15px;
201
+ font-weight: 700;
202
+ }
203
+
204
+ .pa-swal .swal2-confirm.swal2-styled,
205
+ .pa-swal .swal2-confirm.swal2-styled:hover {
206
+ min-width: 128px;
207
+ color: #fff;
208
+ background-image: none !important;
209
+ background-color: #00a5e5;
210
+ }
211
+
212
+ /**
213
+ * New Dashboard
214
+ */
215
+ .pa-settings-wrap {
216
+ padding: 35px;
217
+ padding-left: 15px;
218
+ }
219
+
220
+ .pa-settings-section {
221
+ display: none;
222
+ }
223
+
224
+ .pa-settings-tabs {
225
+ background-color: #fff;
226
+ -webkit-border-radius: 15px;
227
+ border-radius: 15px;
228
+ padding: 36px;
229
+ margin-bottom: 12px;
230
+ }
231
+
232
+ .pa-settings-tabs-list {
233
+ clear: left;
234
+ margin: 0;
235
+ list-style-type: none;
236
+ }
237
+
238
+ .pa-settings-tabs .pa-settings-tabs-list li {
239
+ display: inline-block;
240
+ margin-bottom: 0;
241
+ margin-right: 23px;
242
+ }
243
+
244
+ .pa-settings-section.active {
245
+ display: block;
246
+ }
247
+
248
+ .papro-admin-notice a,
249
+ .pa-settings-wrap .pa-settings-tabs a {
250
+ -js-display: flex;
251
+ display: -webkit-box;
252
+ display: -webkit-flex;
253
+ display: -moz-box;
254
+ display: -ms-flexbox;
255
+ display: flex;
256
+ -webkit-box-pack: center;
257
+ -webkit-justify-content: center;
258
+ -moz-box-pack: center;
259
+ -ms-flex-pack: center;
260
+ justify-content: center;
261
+ -webkit-box-align: center;
262
+ -webkit-align-items: center;
263
+ -moz-box-align: center;
264
+ -ms-flex-align: center;
265
+ align-items: center;
266
+ font-size: 14px;
267
+ line-height: 1.8em;
268
+ position: relative;
269
+ color: #252c59;
270
+ text-decoration: none;
271
+ -webkit-transition: all 0.3s ease;
272
+ transition: all 0.3s ease;
273
+ }
274
+
275
+ .papro-admin-notice a.papro-notice-btn {
276
+ width: 120px;
277
+ /* height: 58px; */
278
+ -webkit-border-radius: 15px;
279
+ border-radius: 15px;
280
+ -webkit-filter: drop-shadow(0px 5px 50px rgba(87, 0, 101, 0.7));
281
+ filter: drop-shadow(0px 5px 50px rgba(87, 0, 101, 0.7));
282
+ background-color: #ffffff;
283
+ font-size: 18px;
284
+ color: #fe6300;
285
+ font-weight: 800;
286
+ font-family: "Red Hat Display";
287
+ text-align: center;
288
+ padding: 10px 20px;
289
+ }
290
+
291
+ .pa-settings-wrap .pa-settings-tabs a:focus {
292
+ outline: none;
293
+ -webkit-box-shadow: none;
294
+ box-shadow: none;
295
+ }
296
+
297
+ .pa-settings-wrap .pa-settings-tabs span {
298
+ margin-left: 8px;
299
+ font-family: "Poppins";
300
+ font-weight: 500;
301
+ }
302
+
303
+ .pa-settings-wrap .pa-settings-tabs .pa-section-active {
304
+ color: #00a5e5;
305
+ }
306
+
307
+ .pa-section {
308
+ display: none;
309
+ position: relative;
310
+ background-color: #fff;
311
+ -webkit-transition: opacity 0.2s;
312
+ transition: opacity 0.2s;
313
+ padding: 34px;
314
+ -webkit-border-radius: 15px;
315
+ border-radius: 15px;
316
+ }
317
+
318
+ /**
319
+ * General Tab
320
+ */
321
+ #pa-general-settings {
322
+ -js-display: flex;
323
+ display: -webkit-box;
324
+ display: -webkit-flex;
325
+ display: -moz-box;
326
+ display: -ms-flexbox;
327
+ display: flex;
328
+ -webkit-box-orient: horizontal;
329
+ -webkit-box-direction: normal;
330
+ -webkit-flex-flow: row wrap;
331
+ -moz-box-orient: horizontal;
332
+ -moz-box-direction: normal;
333
+ -ms-flex-flow: row wrap;
334
+ flex-flow: row wrap;
335
+ -webkit-box-pack: justify;
336
+ -webkit-justify-content: space-between;
337
+ -moz-box-pack: justify;
338
+ -ms-flex-pack: justify;
339
+ justify-content: space-between;
340
+ width: 100%;
341
+ }
342
+
343
+ #pa-general-settings .pa-dash-block {
344
+ -webkit-box-flex: 1;
345
+ -webkit-flex: 1 1 auto;
346
+ -moz-box-flex: 1;
347
+ -ms-flex: 1 1 auto;
348
+ flex: 1 1 auto;
349
+ min-width: 250px;
350
+ margin: 0 5px 10px;
351
+ -js-display: flex;
352
+ display: -webkit-box;
353
+ display: -webkit-flex;
354
+ display: -moz-box;
355
+ display: -ms-flexbox;
356
+ display: flex;
357
+ -webkit-box-orient: vertical;
358
+ -webkit-box-direction: normal;
359
+ -webkit-flex-direction: column;
360
+ -moz-box-orient: vertical;
361
+ -moz-box-direction: normal;
362
+ -ms-flex-direction: column;
363
+ flex-direction: column;
364
+ }
365
+
366
+ .pa-dash-block.col-3 {
367
+ width: 31%;
368
+ }
369
+
370
+ .pa-dash-block.col-6 {
371
+ width: 64%;
372
+ }
373
+
374
+ #pa-general-settings .pa-section-info h4 {
375
+ font-size: 17px;
376
+ }
377
+
378
+ #pa-general-settings .pa-section-info:not(.pa-news-section):not(.pa-support-section) p {
379
+ min-height: 80px;
380
+ }
381
+
382
+ #pa-general-settings .pa-section-info .pa-element-icon {
383
+ margin-bottom: 12px;
384
+ }
385
+
386
+ #pa-general-settings .pa-element-icon.icon-inline {
387
+ -js-display: inline-flex;
388
+ display: -webkit-inline-box;
389
+ display: -webkit-inline-flex;
390
+ display: -moz-inline-box;
391
+ display: -ms-inline-flexbox;
392
+ display: inline-flex;
393
+ margin-bottom: 0;
394
+ vertical-align: middle;
395
+ }
396
+
397
+ #pa-general-settings .pa-section-info .pa-btn {
398
+ display: inline-block;
399
+ background-color: #252c59;
400
+ color: #fff;
401
+ /* margin-top: 12px; */
402
+ padding: 12px 36px;
403
+ }
404
+
405
+ .pa-element-icon.dashicons-facebook-alt {
406
+ color: #3b5998 !important
407
+ }
408
+
409
+ .pa-element-icon.dashicons-youtube {
410
+ color: #ff0000 !important
411
+ }
412
+
413
+ .pa-newsletter-form {
414
+ -js-display: flex;
415
+ display: -webkit-box;
416
+ display: -webkit-flex;
417
+ display: -moz-box;
418
+ display: -ms-flexbox;
419
+ display: flex;
420
+ -webkit-flex-wrap: wrap;
421
+ -ms-flex-wrap: wrap;
422
+ flex-wrap: wrap;
423
+ -webkit-box-align: center;
424
+ -webkit-align-items: center;
425
+ -moz-box-align: center;
426
+ -ms-flex-align: center;
427
+ align-items: center;
428
+ }
429
+
430
+ .pa-newsletter-form input {
431
+ width: 74%;
432
+ padding: 0px 10px;
433
+ height: 39px;
434
+ font-family: "Poppins";
435
+ border: 1px solid #dcdcdc;
436
+ -webkit-border-radius: 10px 0 0 10px;
437
+ border-radius: 10px 0 0 10px;
438
+ direction: ltr;
439
+ }
440
+
441
+ #pa-general-settings .pa-newsletter-form button.pa-btn {
442
+ width: 25%;
443
+ padding: 0;
444
+ height: 39px;
445
+ margin-top: 0;
446
+ margin-left: -1px;
447
+ -webkit-border-radius: 0 10px 10px 0;
448
+ border-radius: 0 10px 10px 0;
449
+ }
450
+
451
+ #pa-general-settings .pa-news-grid {
452
+ -js-display: flex;
453
+ display: -webkit-box;
454
+ display: -webkit-flex;
455
+ display: -moz-box;
456
+ display: -ms-flexbox;
457
+ display: flex;
458
+ -webkit-box-pack: justify;
459
+ -webkit-justify-content: space-between;
460
+ -moz-box-pack: justify;
461
+ -ms-flex-pack: justify;
462
+ justify-content: space-between;
463
+ margin-top: 12px;
464
+ }
465
+
466
+ .pa-news-grid .pa-news-post {
467
+ position: relative;
468
+ width: 33.33%;
469
+ margin: 0 5px;
470
+ }
471
+
472
+ .pa-news-grid .pa-news-post p:nth-of-type(1) {
473
+ font-family: "Red Hat Display";
474
+ font-size: 15px;
475
+ min-height: 60px;
476
+ font-weight: 800;
477
+ color: #252c59
478
+ }
479
+
480
+ .pa-news-grid .pa-news-post p:nth-of-type(2) {
481
+ font-size: 12px;
482
+ }
483
+
484
+ .pa-post-img-container img {
485
+ width: 100%;
486
+ height: 145px;
487
+ -o-object-fit: cover;
488
+ object-fit: cover;
489
+ -webkit-border-radius: 10px;
490
+ border-radius: 10px;
491
+ }
492
+
493
+ .pa-news-grid .pa-news-post a {
494
+ position: absolute;
495
+ top: 0;
496
+ left: 0;
497
+ width: 100%;
498
+ height: 100%;
499
+ z-index: 2;
500
+ }
501
+
502
+ #pa-general-settings .pa-support-list {
503
+ margin: 12px 0 0;
504
+ padding: 0;
505
+ }
506
+
507
+ #pa-general-settings .pa-support-list li {
508
+ margin-bottom: 10px;
509
+ }
510
+
511
+ .pa-support-list li a {
512
+ font-size: 15px;
513
+ color: #474747;
514
+ font-family: "Poppins";
515
+ text-decoration: none;
516
+ }
517
+
518
+ .pa-support-list li a:hover {
519
+ color: #135e96;
520
+ }
521
+
522
+ #pa-general-settings input[type="email"],
523
+ #pa-general-settings a:hover,
524
+ #pa-general-settings a:focus,
525
+ #pa-general-settings a:visited {
526
+ border: none;
527
+ -webkit-box-shadow: none;
528
+ box-shadow: none;
529
+ outline: none;
530
+ }
531
+
532
+
533
+ /**
534
+ * Tab Info
535
+ */
536
+ .pa-section-info-wrap {
537
+ padding: 34px;
538
+ -webkit-border-radius: 15px;
539
+ border-radius: 15px;
540
+ background-color: #f7f7f7;
541
+ -js-display: flex;
542
+ display: -webkit-box;
543
+ display: -webkit-flex;
544
+ display: -moz-box;
545
+ display: -ms-flexbox;
546
+ display: flex;
547
+ -webkit-box-pack: justify;
548
+ -webkit-justify-content: space-between;
549
+ -moz-box-pack: justify;
550
+ -ms-flex-pack: justify;
551
+ justify-content: space-between;
552
+ -webkit-box-align: center;
553
+ -webkit-align-items: center;
554
+ -moz-box-align: center;
555
+ -ms-flex-align: center;
556
+ align-items: center;
557
+ height: 100%;
558
+ }
559
+
560
+ #pa-general-settings .pa-section-info-wrap,
561
+ #pa-ver-control-settings .pa-section-info-wrap {
562
+ -webkit-box-orient: vertical;
563
+ -webkit-box-direction: normal;
564
+ -webkit-flex-direction: column;
565
+ -moz-box-orient: vertical;
566
+ -moz-box-direction: normal;
567
+ -ms-flex-direction: column;
568
+ flex-direction: column;
569
+ -webkit-box-align: start;
570
+ -webkit-align-items: flex-start;
571
+ -moz-box-align: start;
572
+ -ms-flex-align: start;
573
+ align-items: flex-start;
574
+ }
575
+
576
+ #pa-features-settings .pa-section-info-wrap:nth-of-type(n + 2),
577
+ #pa-ver-control-settings .pa-section-info-wrap:nth-of-type(n + 2) {
578
+ margin-top: 36px;
579
+ }
580
+
581
+ .pa-section-info-wrap h4 {
582
+ font-size: 20px;
583
+ color: #252c59;
584
+ font-weight: 900;
585
+ font-family: "Red Hat Display";
586
+ margin: 0;
587
+ }
588
+
589
+ .pa-section-info-wrap p {
590
+ font-size: 14px;
591
+ color: #474747;
592
+ font-family: "Poppins";
593
+ margin: 0;
594
+ margin-top: 14px;
595
+ }
596
+
597
+ .pa-section-info-cta {
598
+ -js-display: flex;
599
+ display: -webkit-box;
600
+ display: -webkit-flex;
601
+ display: -moz-box;
602
+ display: -ms-flexbox;
603
+ display: flex;
604
+ -webkit-box-align: center;
605
+ -webkit-align-items: center;
606
+ -moz-box-align: center;
607
+ -ms-flex-align: center;
608
+ align-items: center;
609
+ margin-top: 25px;
610
+ }
611
+
612
+ .pa-section-info-cta .pa-btn {
613
+ color: #474747;
614
+ background-color: #ebebeb;
615
+ padding: 8px 20px;
616
+ -webkit-border-radius: 10px;
617
+ border-radius: 10px;
618
+ font-size: 15px;
619
+ font-weight: 700;
620
+ font-family: "Red Hat Display";
621
+ -webkit-transition: all 0.2s ease-in-out;
622
+ transition: all 0.2s ease-in-out;
623
+ }
624
+
625
+ .pa-section-info-cta .pa-btn:hover,
626
+ .pa-section-info-cta .pa-btn:focus,
627
+ .pa-section-info-cta .pa-btn:active {
628
+ color: #fff;
629
+ background-color: #00a5e5;
630
+ }
631
+
632
+ .pa-section-info-cta .pa-section-info-label {
633
+ font-size: 13px;
634
+ color: #474747;
635
+ font-family: "Poppins";
636
+ text-align: right;
637
+ }
638
+
639
+ .pa-section-info-cta .pa-section-info-warning {
640
+ font-size: 13px;
641
+ color: #cca329;
642
+ font-weight: 300;
643
+ font-family: "Poppins";
644
+ margin-left: 20px;
645
+ }
646
+
647
+ .pa-section-info-cta .pa-section-info-warning i {
648
+ font-weight: 300;
649
+ vertical-align: bottom;
650
+ }
651
+
652
+ .pa-section-info-wrap .pa-btn,
653
+ .pa-section-info-wrap .pa-btn-unused {
654
+ font-family: "Red Hat Display";
655
+ color: #8e8e8e;
656
+ background-color: #ebebeb;
657
+ border: 0px solid;
658
+ padding: 16px 28px;
659
+ -webkit-border-radius: 10px;
660
+ border-radius: 10px;
661
+ font-size: 15px;
662
+ font-weight: 700;
663
+ cursor: pointer;
664
+ -webkit-transition: 300ms;
665
+ transition: 300ms;
666
+ display: block;
667
+ text-decoration: none;
668
+ }
669
+
670
+ .pa-section-info-wrap .pa-btn-unused {
671
+ width: 100%;
672
+ clear: both;
673
+ background: transparent;
674
+ color: #252C59;
675
+ padding-bottom: 0;
676
+ text-decoration: underline;
677
+ font-weight: normal;
678
+ }
679
+
680
+ .pa-section-info-wrap .pa-btn-unused.dimmed {
681
+ cursor: no-drop;
682
+ color: #C2C4CF;
683
+ }
684
+
685
+ .pa-element-name .pa-total-use {
686
+ color: #252C59;
687
+ }
688
+
689
+ .pa-section-info-wrap button.pa-btn-enable {
690
+ -webkit-border-top-right-radius: 0;
691
+ border-top-right-radius: 0;
692
+ -webkit-border-bottom-right-radius: 0;
693
+ border-bottom-right-radius: 0;
694
+ float: left;
695
+ }
696
+
697
+ .pa-section-info-wrap button.pa-btn-disable {
698
+ -webkit-border-top-left-radius: 0;
699
+ border-top-left-radius: 0;
700
+ -webkit-border-bottom-left-radius: 0;
701
+ border-bottom-left-radius: 0;
702
+ float: right;
703
+ }
704
+
705
+ .pa-section-info-wrap .pa-btn-enable.active {
706
+ color: #fff;
707
+ -webkit-box-shadow: inset 3.5px 1.8px 7px 0px rgba(125, 125, 125, 0.5);
708
+ box-shadow: inset 3.5px 1.8px 7px 0px rgba(125, 125, 125, 0.5);
709
+ background-color: #8dc900;
710
+ }
711
+
712
+ .pa-section-info-wrap .pa-btn-disable.active {
713
+ color: #fff;
714
+ -webkit-box-shadow: inset 3.564px 1.816px 7px 0px rgba(81, 81, 81, 0.5);
715
+ box-shadow: inset 3.564px 1.816px 7px 0px rgba(81, 81, 81, 0.5);
716
+ background-color: #898989;
717
+ }
718
+
719
+ .pa-section-info-wrap .pa-btn-enable:not(.active):hover {
720
+ color: #ffffff;
721
+ background-color: #8dc900;
722
+ }
723
+
724
+ .pa-section-info-wrap .pa-btn-disable:not(.active):hover {
725
+ color: #ffffff;
726
+ background-color: #898989;
727
+ }
728
+
729
+ /*
730
+ * Widgets & Addons Tab
731
+ */
732
+ .pa-elements-settings {
733
+ position: relative;
734
+ -js-display: flex;
735
+ display: -webkit-box;
736
+ display: -webkit-flex;
737
+ display: -moz-box;
738
+ display: -ms-flexbox;
739
+ display: flex;
740
+ margin-top: 16px;
741
+ }
742
+
743
+ .pa-elements-filter {
744
+ position: absolute;
745
+ top: 10px;
746
+ right: 16px;
747
+ }
748
+
749
+ .pa-elements-filter label {
750
+ font-size: 13px;
751
+ color: #474747;
752
+ font-family: "Poppins";
753
+ margin-right: 10px;
754
+ }
755
+
756
+ .pa-elements-filter select {
757
+ padding: 5px 35px 5px 15px;
758
+ }
759
+
760
+ .pa-elements-tabs {
761
+ -webkit-border-radius: 10px;
762
+ border-radius: 10px;
763
+ background-color: #f7f7f7;
764
+ padding: 20px;
765
+ margin-right: 16px;
766
+ }
767
+
768
+ .pa-elements-tabs .pa-elements-tab {
769
+ position: relative;
770
+ padding: 0;
771
+ margin-bottom: 12px;
772
+ text-align: center;
773
+ }
774
+
775
+ .pa-elements-tab .pa-element-tab-tooltip {
776
+ position: absolute;
777
+ background-color: #3a3c40;
778
+ display: block;
779
+ position: absolute;
780
+ top: 50%;
781
+ left: 100%;
782
+ padding: 10px 20px;
783
+ -webkit-border-radius: 13px;
784
+ border-radius: 13px;
785
+ -webkit-filter: drop-shadow(0px 5px 27.5px rgba(104, 104, 104, 0.3));
786
+ filter: drop-shadow(0px 5px 27.5px rgba(104, 104, 104, 0.3));
787
+ background-color: #ffffff;
788
+ font-size: 11px;
789
+ color: #252c59;
790
+ font-weight: 500;
791
+ font-family: "Poppins";
792
+ opacity: 0;
793
+ pointer-events: none;
794
+ text-transform: capitalize;
795
+ -webkit-transform: translate(30px, -50%);
796
+ -ms-transform: translate(30px, -50%);
797
+ transform: translate(30px, -50%);
798
+ -webkit-transition: all 0.3s ease;
799
+ transition: all 0.3s ease;
800
+ z-index: 1;
801
+ white-space: nowrap;
802
+ }
803
+
804
+ .pa-elements-tab .pa-element-tab-tooltip::before {
805
+ display: block;
806
+ position: absolute;
807
+ top: 50%;
808
+ left: -5px;
809
+ width: 0;
810
+ height: 0;
811
+ content: "";
812
+ border-top: 5px solid transparent;
813
+ border-bottom: 5px solid transparent;
814
+ border-right: 5px solid #ffffff;
815
+ -webkit-transform: translateY(-50%);
816
+ -ms-transform: translateY(-50%);
817
+ transform: translateY(-50%);
818
+ }
819
+
820
+ .pa-elements-tab .pa-elements-tab-link {
821
+ -js-display: flex;
822
+ display: -webkit-box;
823
+ display: -webkit-flex;
824
+ display: -moz-box;
825
+ display: -ms-flexbox;
826
+ display: flex;
827
+ -webkit-box-pack: center;
828
+ -webkit-justify-content: center;
829
+ -moz-box-pack: center;
830
+ -ms-flex-pack: center;
831
+ justify-content: center;
832
+ -webkit-box-align: center;
833
+ -webkit-align-items: center;
834
+ -moz-box-align: center;
835
+ -ms-flex-align: center;
836
+ align-items: center;
837
+ color: #c2c4cf;
838
+ padding: 12px;
839
+ text-decoration: none;
840
+ -webkit-transition: all 0.3s ease-in-out;
841
+ transition: all 0.3s ease-in-out;
842
+ -webkit-border-radius: 13px;
843
+ border-radius: 13px;
844
+ }
845
+
846
+ .pa-elements-tab .pa-elements-tab-link:hover,
847
+ .pa-elements-tab .pa-elements-tab-link.active {
848
+ -webkit-filter: drop-shadow(-4.243px -4.243px 3px rgba(255, 255, 255, 0.5)) drop-shadow(4.243px 4.243px 3px rgba(191, 201, 210, 0.6));
849
+ filter: drop-shadow(-4.243px -4.243px 3px rgba(255, 255, 255, 0.5)) drop-shadow(4.243px 4.243px 3px rgba(191, 201, 210, 0.6));
850
+ background-color: #ffffff;
851
+ color: #00a5e5;
852
+ outline: none;
853
+ border: none;
854
+ text-decoration: none;
855
+ -webkit-box-shadow: none;
856
+ box-shadow: none;
857
+ }
858
+
859
+ .pa-elements-tab .pa-elements-tab-link:hover+span {
860
+ opacity: 1;
861
+ -webkit-transform: translate(20px, -50%);
862
+ -ms-transform: translate(20px, -50%);
863
+ transform: translate(20px, -50%);
864
+ }
865
+
866
+ .pa-switchers {
867
+ -js-display: flex;
868
+ display: -webkit-box;
869
+ display: -webkit-flex;
870
+ display: -moz-box;
871
+ display: -ms-flexbox;
872
+ display: flex;
873
+ -webkit-flex-wrap: wrap;
874
+ -ms-flex-wrap: wrap;
875
+ flex-wrap: wrap;
876
+ -webkit-align-content: flex-start;
877
+ -ms-flex-line-pack: start;
878
+ align-content: flex-start;
879
+ }
880
+
881
+ .pa-switchers-container {
882
+ width: 100%;
883
+ }
884
+
885
+ .pa-switchers-container.hidden,
886
+ .pa-switcher.hidden {
887
+ display: none;
888
+ }
889
+
890
+ .pa-switchers-container .pa-elements-tab-title {
891
+ font-size: 20px;
892
+ color: #252c59;
893
+ font-weight: 900;
894
+ font-family: "Red Hat Display";
895
+ margin: 16px 0;
896
+ }
897
+
898
+ .pa-switcher {
899
+ -webkit-border-radius: 15px;
900
+ border-radius: 15px;
901
+ background-color: #f7f7f7;
902
+ position: relative;
903
+ -js-display: flex;
904
+ display: -webkit-box;
905
+ display: -webkit-flex;
906
+ display: -moz-box;
907
+ display: -ms-flexbox;
908
+ display: flex;
909
+ width: -webkit-calc(50% - 56px);
910
+ width: calc(50% - 56px);
911
+ -webkit-box-pack: justify;
912
+ -webkit-justify-content: space-between;
913
+ -moz-box-pack: justify;
914
+ -ms-flex-pack: justify;
915
+ justify-content: space-between;
916
+ -webkit-box-align: center;
917
+ -webkit-align-items: center;
918
+ -moz-box-align: center;
919
+ -ms-flex-align: center;
920
+ align-items: center;
921
+ padding: 20px;
922
+ margin-top: 16px;
923
+ margin-right: 16px;
924
+ }
925
+
926
+ .pa-element-info {
927
+ -js-display: flex;
928
+ display: -webkit-box;
929
+ display: -webkit-flex;
930
+ display: -moz-box;
931
+ display: -ms-flexbox;
932
+ display: flex;
933
+ -webkit-box-align: center;
934
+ -webkit-align-items: center;
935
+ -moz-box-align: center;
936
+ -ms-flex-align: center;
937
+ align-items: center;
938
+ }
939
+
940
+ .pa-section .pa-element-icon {
941
+ color: #252c59;
942
+ background-color: #ebebeb;
943
+ -webkit-border-radius: 15px;
944
+ border-radius: 15px;
945
+ /* padding: 12px; */
946
+ min-width: 40px;
947
+ min-height: 40px;
948
+ margin-right: 8px;
949
+ -js-display: flex;
950
+ display: -webkit-box;
951
+ display: -webkit-flex;
952
+ display: -moz-box;
953
+ display: -ms-flexbox;
954
+ display: flex;
955
+ -webkit-box-pack: center;
956
+ -webkit-justify-content: center;
957
+ -moz-box-pack: center;
958
+ -ms-flex-pack: center;
959
+ justify-content: center;
960
+ -webkit-box-align: center;
961
+ -webkit-align-items: center;
962
+ -moz-box-align: center;
963
+ -ms-flex-align: center;
964
+ align-items: center;
965
+ }
966
+
967
+ .pa-element-name {
968
+ font-size: 16px;
969
+ color: #252c59;
970
+ font-weight: 700;
971
+ font-family: "Red Hat Display";
972
+ margin: 0;
973
+ -js-display: flex;
974
+ display: -webkit-box;
975
+ display: -webkit-flex;
976
+ display: -moz-box;
977
+ display: -ms-flexbox;
978
+ display: flex;
979
+ }
980
+
981
+ .pa-element-name span {
982
+ text-transform: uppercase;
983
+ color: #fd9926;
984
+ font-weight: 700;
985
+ font-size: 11px;
986
+ margin-left: 5px;
987
+ }
988
+
989
+ .pa-element-link {
990
+ font-size: 13px;
991
+ color: #252c59;
992
+ font-family: "Poppins";
993
+ text-decoration: none;
994
+ -webkit-transition: all 0.2s ease-in-out;
995
+ transition: all 0.2s ease-in-out;
996
+ }
997
+
998
+ .pa-element-link-separator {
999
+ width: 3px;
1000
+ height: 3px;
1001
+ display: inline-block;
1002
+ text-align: center;
1003
+ color: #252c59;
1004
+ background: #252c59;
1005
+ -webkit-border-radius: 50%;
1006
+ border-radius: 50%;
1007
+ vertical-align: middle;
1008
+ margin: 0 3px;
1009
+ }
1010
+
1011
+ .pa-element-link:hover,
1012
+ .pa-element-link:focus {
1013
+ color: #00a5e5;
1014
+ text-decoration: none;
1015
+ outline: none;
1016
+ -webkit-box-shadow: none;
1017
+ box-shadow: none;
1018
+ border: none;
1019
+ }
1020
+
1021
+ /*
1022
+ * Integrations
1023
+ */
1024
+ .pa-maps-table select {
1025
+ width: 100%;
1026
+ max-width: 100%;
1027
+ padding: 8px;
1028
+ }
1029
+
1030
+ .pa-maps-table #premium-map-api,
1031
+ .pa-maps-table #premium-youtube-api {
1032
+ width: 100%;
1033
+ }
1034
+
1035
+ .pa-maps-table tr td {
1036
+ padding-top: 30px;
1037
+ }
1038
+
1039
+ .pa-maps-table tr td:first-of-type {
1040
+ padding-right: 30px;
1041
+ }
1042
+
1043
+ .pa-maps-table td h4 {
1044
+ margin: 0;
1045
+ font-size: 15px;
1046
+ color: #252c59;
1047
+ font-weight: 500;
1048
+ font-family: "Poppins";
1049
+ display: inline-block;
1050
+ }
1051
+
1052
+ .pa-maps-table td span {
1053
+ font-size: 13px;
1054
+ color: #474747;
1055
+ font-family: "Poppins";
1056
+ vertical-align: middle;
1057
+ }
1058
+
1059
+ .pa-maps-table td input[type="text"] {
1060
+ -webkit-border-radius: 10px;
1061
+ border-radius: 10px;
1062
+ background-color: #ebebeb;
1063
+ border: none;
1064
+ padding: 8px 20px;
1065
+ }
1066
+
1067
+ .pa-section input[type="checkbox"] {
1068
+ border: none;
1069
+ display: none;
1070
+ }
1071
+
1072
+ .pa-section input[type="checkbox"]+label {
1073
+ position: relative;
1074
+ background: #ebebeb;
1075
+ height: 16px;
1076
+ width: 16px;
1077
+ display: inline-block;
1078
+ padding: 0;
1079
+ margin-right: 5px;
1080
+ -webkit-border-radius: 4px;
1081
+ border-radius: 4px;
1082
+ }
1083
+
1084
+ .pa-section input[type="checkbox"]:checked+label {
1085
+ background: #00a5e5;
1086
+ height: 16px;
1087
+ width: 16px;
1088
+ display: inline-block;
1089
+ padding: 0;
1090
+ }
1091
+
1092
+ .pa-section input[type="checkbox"]:checked+label:before {
1093
+ position: absolute;
1094
+ content: "✔";
1095
+ color: #fff;
1096
+ font-size: 12px;
1097
+ top: 0;
1098
+ left: 0;
1099
+ width: 100%;
1100
+ height: 100%;
1101
+ text-align: center;
1102
+ margin-top: -1px;
1103
+ }
1104
+
1105
+ .pa-maps-table td input:focus {
1106
+ outline: none;
1107
+ -webkit-box-shadow: none;
1108
+ box-shadow: none;
1109
+ border: none;
1110
+ }
1111
+
1112
+ .pa-elements-filter select,
1113
+ .pa-maps-table td select {
1114
+ border-color: #dcdcdc;
1115
+ -webkit-border-radius: 10px;
1116
+ border-radius: 10px;
1117
+ -webkit-border-bottom-right-radius: 0;
1118
+ border-bottom-right-radius: 0;
1119
+ }
1120
+
1121
+ .pa-maps-circle-icon {
1122
+ width: 5px;
1123
+ height: 5px;
1124
+ background-color: #252c59;
1125
+ -webkit-border-radius: 50%;
1126
+ border-radius: 50%;
1127
+ display: inline-block;
1128
+ vertical-align: middle;
1129
+ margin-right: 10px;
1130
+ }
1131
+
1132
+ .pa-maps-table td h4:before {
1133
+ position: absolute;
1134
+ content: "";
1135
+ }
1136
+
1137
+ /*
1138
+ * White Labeling Tab
1139
+ */
1140
+ .pa-wht-lbl-settings .pa-wht-lbl-title {
1141
+ font-size: 20px;
1142
+ color: #252c59;
1143
+ font-weight: 900;
1144
+ font-family: "Red Hat Display";
1145
+ margin: 0;
1146
+ }
1147
+
1148
+ .pa-wht-lbl-settings .pa-row {
1149
+ width: 60%;
1150
+ float: left;
1151
+ }
1152
+
1153
+ .pa-wht-lbl-settings .pa-wht-lbl-admin {
1154
+ width: 30%;
1155
+ float: left;
1156
+ margin-left: 16px;
1157
+ }
1158
+
1159
+ .pa-wht-lbl-settings .pa-wht-lbl-head {
1160
+ border-bottom: 1px solid #ddd;
1161
+ background: #f7f7f7;
1162
+ padding: 20px;
1163
+ }
1164
+
1165
+ .pa-wht-lbl-table {
1166
+ text-align: left;
1167
+ }
1168
+
1169
+ .pa-wht-lbl-settings input {
1170
+ font-weight: 400;
1171
+ margin: 0;
1172
+ margin-bottom: 12px;
1173
+ -webkit-border-radius: 10px;
1174
+ border-radius: 10px;
1175
+ /* background-color: #ebebeb; */
1176
+ border: 1px solid #dcdcdc;
1177
+ padding: 8px 20px;
1178
+ }
1179
+
1180
+ /* .pa-wht-lbl-settings input + span {
1181
+ margin-left: 0.3em;
1182
+ } */
1183
+
1184
+ .pa-wht-lbl-settings label+span {
1185
+ font-family: "Poppins";
1186
+ vertical-align: middle;
1187
+ }
1188
+
1189
+ .pa-wht-lbl-settings .pa-input-label {
1190
+ display: block;
1191
+ font-weight: 600;
1192
+ margin: 10px 0 6px;
1193
+ font-size: 14px;
1194
+ color: #252c59;
1195
+ font-family: "Red Hat Display";
1196
+ }
1197
+
1198
+ .pa-wht-lbl-settings input[type="text"] {
1199
+ width: 550px;
1200
+ }
1201
+
1202
+ .pa-wht-lbl-settings input[type="text"]::-webkit-input-placeholder {
1203
+ font-weight: 300;
1204
+ font-family: "Poppins";
1205
+ }
1206
+
1207
+ .pa-wht-lbl-settings input[type="text"]:-moz-placeholder {
1208
+ font-weight: 300;
1209
+ font-family: "Poppins";
1210
+ }
1211
+
1212
+ .pa-wht-lbl-settings input[type="text"]::-moz-placeholder {
1213
+ font-weight: 300;
1214
+ font-family: "Poppins";
1215
+ }
1216
+
1217
+ .pa-wht-lbl-settings input[type="text"]:-ms-input-placeholder {
1218
+ font-weight: 300;
1219
+ font-family: "Poppins";
1220
+ }
1221
+
1222
+ .pa-wht-lbl-settings input[type="text"]::-ms-input-placeholder {
1223
+ font-weight: 300;
1224
+ font-family: "Poppins";
1225
+ }
1226
+
1227
+ .pa-wht-lbl-settings input[type="text"]::placeholder {
1228
+ font-weight: 300;
1229
+ font-family: "Poppins";
1230
+ }
1231
+
1232
+ .pa-wht-lbl-settings .pa-wht-lbl-settings-wrap {
1233
+ background: #fff;
1234
+ margin: 16px auto;
1235
+ border: 1px solid #dcdcdc;
1236
+ -webkit-border-radius: 10px;
1237
+ border-radius: 10px;
1238
+ overflow: hidden;
1239
+ }
1240
+
1241
+ .pa-wht-lbl-settings .clearfix {
1242
+ clear: both;
1243
+ }
1244
+
1245
+ .pa-wht-lbl-group-wrap {
1246
+ padding: 20px;
1247
+ }
1248
+
1249
+ .pa-section-white-label .pa-white-label-notice {
1250
+ position: absolute;
1251
+ top: 0;
1252
+ left: 0;
1253
+ width: 100%;
1254
+ height: 100%;
1255
+ background: rgba(200, 200, 200, 0.8);
1256
+ -webkit-border-radius: 15px;
1257
+ border-radius: 15px;
1258
+ -js-display: flex;
1259
+ display: -webkit-box;
1260
+ display: -webkit-flex;
1261
+ display: -moz-box;
1262
+ display: -ms-flexbox;
1263
+ display: flex;
1264
+ -webkit-box-pack: center;
1265
+ -webkit-justify-content: center;
1266
+ -moz-box-pack: center;
1267
+ -ms-flex-pack: center;
1268
+ justify-content: center;
1269
+ }
1270
+
1271
+ .pa-white-label-notice-content {
1272
+ position: absolute;
1273
+ top: 200px;
1274
+ left: 200;
1275
+ width: 530px;
1276
+ background-image: url("../../images/popup-pattern.jpg");
1277
+ background-repeat: no-repeat;
1278
+ -webkit-background-size: cover;
1279
+ background-size: cover;
1280
+ padding: 32px;
1281
+ padding-bottom: 50px;
1282
+ -webkit-border-radius: 50px 0px;
1283
+ border-radius: 50px 0px;
1284
+ text-align: center;
1285
+ z-index: 2;
1286
+ }
1287
+
1288
+ .pa-white-label-notice-logo {
1289
+ -webkit-transform: translateY(-32px);
1290
+ -ms-transform: translateY(-32px);
1291
+ transform: translateY(-32px);
1292
+ margin-bottom: -18px;
1293
+ }
1294
+
1295
+ .pa-white-label-notice-logo img {
1296
+ padding: 10px;
1297
+ padding-top: 40px;
1298
+ background-color: #ffffff;
1299
+ border: 1px solid #e6e6e6;
1300
+ -webkit-border-radius: 50px;
1301
+ border-radius: 50px;
1302
+ -webkit-border-top-left-radius: 50px;
1303
+ border-top-left-radius: 50px;
1304
+ -webkit-border-top-right-radius: 50px;
1305
+ border-top-right-radius: 50px;
1306
+ -webkit-border-top-left-radius: 0;
1307
+ border-top-left-radius: 0;
1308
+ -webkit-border-top-right-radius: 0;
1309
+ border-top-right-radius: 0;
1310
+ }
1311
+
1312
+ .pa-white-label-notice-content h2,
1313
+ .pa-swal-head {
1314
+ display: inline-block;
1315
+ font-size: 23px;
1316
+ color: #252c59;
1317
+ font-weight: 900;
1318
+ font-family: "Red Hat Display";
1319
+ text-align: center;
1320
+ max-width: 350px;
1321
+ line-height: 1;
1322
+ margin: 0;
1323
+ margin-bottom: 18px;
1324
+ }
1325
+
1326
+ .pa-white-label-notice-content h2 span {
1327
+ color: #fd9926;
1328
+ text-transform: uppercase;
1329
+ font-family: "Red Hat Display";
1330
+ }
1331
+
1332
+ .pa-white-label-notice-content p {
1333
+ font-size: 13px;
1334
+ color: #474747;
1335
+ font-family: "Poppins";
1336
+ text-align: center;
1337
+ margin: 0;
1338
+ margin-bottom: 18px;
1339
+ }
1340
+
1341
+ .pa-white-label-notice-content a.pa-get-pro {
1342
+ display: inline-block;
1343
+ width: 117px;
1344
+ padding: 12px 10px;
1345
+ -webkit-border-radius: 10px;
1346
+ border-radius: 10px;
1347
+ color: #ffffff;
1348
+ font-size: 15px;
1349
+ font-weight: 900;
1350
+ font-family: "Red Hat Display";
1351
+ -webkit-filter: drop-shadow(0px 20px 17.5px rgba(254, 99, 0, 0.2));
1352
+ filter: drop-shadow(0px 20px 17.5px rgba(254, 99, 0, 0.2));
1353
+ text-decoration: none;
1354
+ outline: none;
1355
+ border: none;
1356
+ background-image: -webkit-linear-gradient(120deg, #fe6300 0%, #fe9f00 100%);
1357
+ background-image: linear-gradient(-30deg, #fe6300 0%, #fe9f00 100%);
1358
+ -webkit-transition: all 0.2s ease-in-out;
1359
+ transition: all 0.2s ease-in-out;
1360
+ }
1361
+
1362
+ .pa-white-label-notice-content a.pa-get-pro:hover {
1363
+ background-image: -webkit-linear-gradient(60deg, #fe6300 0%, #fe9f00 100%);
1364
+ background-image: linear-gradient(30deg, #fe6300 0%, #fe9f00 100%);
1365
+ }
1366
+
1367
+ /*
1368
+ * System Info Tab
1369
+ */
1370
+ .pa-section-info table.widefat {
1371
+ border: 0px;
1372
+ -webkit-box-shadow: none;
1373
+ box-shadow: none;
1374
+ font-family: "Poppins";
1375
+ }
1376
+
1377
+ .pa-section-info .widefat td:first-child {
1378
+ width: 30%;
1379
+ }
1380
+
1381
+ .pa-section-info table.widefat tr:nth-child(2n) {
1382
+ background-color: #f7f7f7;
1383
+ }
1384
+
1385
+ /*
1386
+ * License Tab
1387
+ */
1388
+ .pa-license-form span {
1389
+ color: #474747;
1390
+ font-family: "Poppins";
1391
+ }
1392
+
1393
+ .pa-license-form label {
1394
+ display: block;
1395
+ font-weight: 500;
1396
+ margin: 2em 0 0.5em;
1397
+ }
1398
+
1399
+ .pa-license-form code {
1400
+ padding: 3px 5px 2px;
1401
+ margin: 0 1px;
1402
+ background: #eaeaea;
1403
+ background: rgba(0, 0, 0, 0.07);
1404
+ font-size: 13px;
1405
+ font-style: italic;
1406
+ }
1407
+
1408
+ .pa-license-form .button.button-primary {
1409
+ width: 147px;
1410
+ height: 43px;
1411
+ /* -webkit-filter: drop-shadow(0px 10px 35px rgba(0, 165, 229, 0.3));
1412
+ filter: drop-shadow(0px 10px 35px rgba(0, 165, 229, 0.3)); */
1413
+ background-color: #00a5e5;
1414
+ /* margin-top: 50px; */
1415
+ margin-left: -3px;
1416
+ -webkit-border-radius: 0 10px 10px 0;
1417
+ border-radius: 0 10px 10px 0;
1418
+ border: none;
1419
+ }
1420
+
1421
+ #papro-license-key:focus,
1422
+ .pa-license-form .button.button-primary:focus {
1423
+ outline: none;
1424
+ -webkit-box-shadow: none;
1425
+ box-shadow: none;
1426
+ }
1427
+
1428
+ #papro-license-key {
1429
+ height: 43px;
1430
+ line-height: 1;
1431
+ margin: 0;
1432
+ padding: 8px 20px;
1433
+ -webkit-border-radius: 10px 0 0 10px;
1434
+ border-radius: 10px 0 0 10px;
1435
+ }
1436
+
1437
+ .pa-license-form input+span {
1438
+ margin-left: 10px;
1439
+ font-weight: 600;
1440
+ }
1441
+
1442
+ .pa-license-cell span {
1443
+ margin-left: 0.3em;
1444
+ }
1445
+
1446
+ @media(min-width: 1550px) {
1447
+ #pa-general-settings .pa-section-info:not(.pa-news-section):not(.pa-support-section) p {
1448
+ min-height: 65px;
1449
+ }
1450
+
1451
+ .pa-news-grid .pa-news-post p:nth-of-type(1) {
1452
+ min-height: 40px;
1453
+ }
1454
+ }
1455
+
1456
+ /*
1457
+ * PAPRO Notice
1458
+ */
1459
+ .papro-admin-notice {
1460
+ -webkit-display: flex;
1461
+ display: -webkit-box;
1462
+ display: -ms-flexbox;
1463
+ -js-display: flex;
1464
+ display: -moz-box;
1465
+ display: flex;
1466
+ -webkit-box-pack: end;
1467
+ -ms-flex-pack: end;
1468
+ -webkit-justify-content: flex-end;
1469
+ -moz-box-pack: end;
1470
+ justify-content: flex-end;
1471
+ -webkit-box-align: center;
1472
+ -ms-flex-align: center;
1473
+ -webkit-align-items: center;
1474
+ -moz-box-align: center;
1475
+ align-items: center;
1476
+ margin-bottom: 24px;
1477
+ }
1478
+
1479
+ .papro-admin-notice>div {
1480
+ -webkit-box-flex: 1;
1481
+ -webkit-flex-grow: 1;
1482
+ -moz-box-flex: 1;
1483
+ -ms-flex-positive: 1;
1484
+ flex-grow: 1;
1485
+ }
1486
+
1487
+ .papro-admin-notice-left {
1488
+ position: relative;
1489
+ padding: 16px;
1490
+ -webkit-border-radius: 15px;
1491
+ border-radius: 15px;
1492
+ background-color: #fff;
1493
+ -webkit-flex-basis: 80%;
1494
+ -ms-flex-preferred-size: 80%;
1495
+ flex-basis: 80%;
1496
+ }
1497
+
1498
+ .papro-admin-notice-left a {
1499
+ position: absolute;
1500
+ top: 0;
1501
+ left: 0;
1502
+ width: 100%;
1503
+ height: 100%;
1504
+ }
1505
+
1506
+ .papro-admin-notice-left a:hover,
1507
+ .papro-admin-notice-left a:focus,
1508
+ .papro-admin-notice-left a:visited {
1509
+ outline: none;
1510
+ border: none;
1511
+ -webkit-box-shadow: none;
1512
+ box-shadow: none;
1513
+ text-decoration: none;
1514
+ }
1515
+
1516
+ .papro-admin-notice-logo {
1517
+ -webkit-display: flex;
1518
+ display: -webkit-box;
1519
+ display: -ms-flexbox;
1520
+ -js-display: flex;
1521
+ display: -moz-box;
1522
+ display: flex;
1523
+ -webkit-box-pack: justify;
1524
+ -webkit-justify-content: space-between;
1525
+ -moz-box-pack: justify;
1526
+ -ms-flex-pack: justify;
1527
+ justify-content: space-between;
1528
+ -webkit-box-align: center;
1529
+ -webkit-align-items: center;
1530
+ -moz-box-align: center;
1531
+ -ms-flex-align: center;
1532
+ align-items: center;
1533
+ }
1534
+
1535
+ .papro-admin-notice-logo label {
1536
+ display: block;
1537
+ font-weight: 600;
1538
+ margin: 10px 0 6px;
1539
+ font-size: 14px;
1540
+ color: #252c59;
1541
+ font-family: "Red Hat Display";
1542
+ }
1543
+
1544
+ .papro-admin-notice-right {
1545
+ -webkit-display: flex;
1546
+ display: -webkit-box;
1547
+ display: -ms-flexbox;
1548
+ -js-display: flex;
1549
+ display: -moz-box;
1550
+ display: flex;
1551
+ -webkit-box-align: center;
1552
+ -ms-flex-align: center;
1553
+ -webkit-align-items: center;
1554
+ -moz-box-align: center;
1555
+ align-items: center;
1556
+ background: url("../../images/papro-banner.png");
1557
+ -webkit-background-size: cover;
1558
+ background-size: cover;
1559
+ background-repeat: no-repeat;
1560
+ padding: 18px;
1561
+ -webkit-border-radius: 15px;
1562
+ border-radius: 15px;
1563
+ overflow: hidden;
1564
+ margin-left: 25px;
1565
+ }
1566
+
1567
+ .papro-admin-notice-right h4 {
1568
+ font-size: 20px;
1569
+ color: #fff;
1570
+ font-weight: 900;
1571
+ font-family: "Red Hat Display";
1572
+ margin: 0;
1573
+ margin-bottom: 8px;
1574
+ }
1575
+
1576
+ .papro-admin-notice-right p {
1577
+ font-size: 14px;
1578
+ color: #ffffff;
1579
+ font-family: "Poppins";
1580
+ margin: 0;
1581
+ }
1582
+
1583
+ .papro-admin-notice-right span {
1584
+ font-weight: 700;
1585
+ }
1586
+
1587
+ /*
1588
+ * Dashboard Tabs
1589
+ */
1590
+ .pa-dash-general:before {
1591
+ content: "\e93e";
1592
+ }
1593
+
1594
+ .pa-dash-integrations:before {
1595
+ content: "\e93f";
1596
+ }
1597
+
1598
+ .pa-dash-system-info:before {
1599
+ content: "\e941";
1600
+ }
1601
+
1602
+ .pa-dash-vcontrol:before {
1603
+ content: "\e942";
1604
+ }
1605
+
1606
+ .pa-dash-white-label:before {
1607
+ content: "\e943";
1608
+ }
1609
+
1610
+ .pa-dash-elements:before {
1611
+ content: "\e944";
1612
+ }
1613
+
1614
+ .pa-dash-license:before {
1615
+ content: "\e940";
1616
+ }
1617
+
1618
+ .pa-dash-features:before {
1619
+ content: "\e911";
1620
+ }
1621
+
1622
+ /*
1623
+ * Elements Categories
1624
+ */
1625
+ .pa-dash-cat-all:before {
1626
+ content: "\e945";
1627
+ }
1628
+
1629
+ .pa-dash-cat-blurbs:before {
1630
+ content: "\e946";
1631
+ }
1632
+
1633
+ .pa-dash-cat-contact:before {
1634
+ content: "\e94a";
1635
+ }
1636
+
1637
+ .pa-dash-cat-content:before {
1638
+ content: "\e948";
1639
+ }
1640
+
1641
+ .pa-dash-cat-images:before {
1642
+ content: "\e949";
1643
+ }
1644
+
1645
+ .pa-dash-cat-off-grid:before {
1646
+ content: "\e94b";
1647
+ }
1648
+
1649
+ .pa-dash-cat-section:before {
1650
+ content: "\e94c";
1651
+ }
1652
+
1653
+ .pa-dash-cat-feed:before {
1654
+ content: "\e94d";
1655
+ }
1656
+
1657
+ .pa-dash-cat-data:before {
1658
+ content: "\e94e";
1659
+ }
1660
+
1661
+ .pa-dash-cat-social:before {
1662
+ content: "\e94f";
1663
+ }
1664
+
1665
+ /*
1666
+ * Widgets Icons
1667
+ */
1668
+ .pa-dash-premium-notbar:before {
1669
+ content: "\e902";
1670
+ }
1671
+
1672
+ .pa-dash-premium-gradient:before {
1673
+ content: "\e903";
1674
+ }
1675
+
1676
+ .pa-dash-premium-color-transition:before {
1677
+ content: "\e904";
1678
+ }
1679
+
1680
+ .pa-dash-premium-behance:before {
1681
+ content: "\e905";
1682
+ }
1683
+
1684
+ .pa-dash-premium-charts:before {
1685
+ content: "\e906";
1686
+ }
1687
+
1688
+ .pa-dash-premium-content-toggle:before {
1689
+ content: "\e907";
1690
+ }
1691
+
1692
+ .pa-dash-premium-divider:before {
1693
+ content: "\e908";
1694
+ }
1695
+
1696
+ .pa-dash-premium-facebook-feed:before {
1697
+ content: "\e90a";
1698
+ }
1699
+
1700
+ .pa-dash-facebook-feed-2:before {
1701
+ content: "\e91b";
1702
+ }
1703
+
1704
+ .pa-dash-premium-fb-chat:before {
1705
+ content: "\e90b";
1706
+ }
1707
+
1708
+ .pa-dash-premium-facebook-reviews:before {
1709
+ content: "\e90c";
1710
+ }
1711
+
1712
+ .pa-dash-premium-google-reviews:before {
1713
+ content: "\e90d";
1714
+ }
1715
+
1716
+ .pa-dash-premium-hscroll:before {
1717
+ content: "\e90e";
1718
+ }
1719
+
1720
+ .pa-dash-premium-flipbox:before {
1721
+ content: "\e90f";
1722
+ }
1723
+
1724
+ .pa-dash-premium-iconbox:before {
1725
+ content: "\e910";
1726
+ }
1727
+
1728
+ .pa-dash-premium-image-accordion:before {
1729
+ content: "\e912";
1730
+ }
1731
+
1732
+ .pa-dash-premium-image-comparison:before {
1733
+ content: "\e913";
1734
+ }
1735
+
1736
+ .pa-dash-premium-image-hotspots:before {
1737
+ content: "\e914";
1738
+ }
1739
+
1740
+ .pa-dash-premium-img-layers:before {
1741
+ content: "\e915";
1742
+ }
1743
+
1744
+ .pa-dash-premium-instagram-feed:before {
1745
+ content: "\e916";
1746
+ }
1747
+
1748
+ .pa-dash-premium-kenburns:before {
1749
+ content: "\e917";
1750
+ }
1751
+
1752
+ .pa-dash-premium-lottie:before {
1753
+ content: "\e918";
1754
+ }
1755
+
1756
+ .pa-dash-premium-magic-section:before {
1757
+ content: "\e919";
1758
+ }
1759
+
1760
+ .pa-dash-premium-multi-scroll:before {
1761
+ content: "\e91a";
1762
+ }
1763
+
1764
+ .pa-dash-premium-ihover:before {
1765
+ content: "\e911";
1766
+ }
1767
+
1768
+ .pa-dash-premium-parallax:before {
1769
+ content: "\e91b";
1770
+ }
1771
+
1772
+ .pa-dash-premium-particles:before {
1773
+ content: "\e91c";
1774
+ }
1775
+
1776
+ .pa-dash-premium-prev-img:before {
1777
+ content: "\e91d";
1778
+ }
1779
+
1780
+ .pa-dash-premium-tabs:before {
1781
+ content: "\e91f";
1782
+ }
1783
+
1784
+ .pa-dash-premium-tables:before {
1785
+ content: "\e91e";
1786
+ }
1787
+
1788
+ .pa-dash-premium-twitter-feed:before {
1789
+ content: "\e921";
1790
+ }
1791
+
1792
+ .pa-dash-premium-unfold:before {
1793
+ content: "\e922";
1794
+ }
1795
+
1796
+ .pa-dash-premium-whatsapp-chat:before {
1797
+ content: "\e923";
1798
+ }
1799
+
1800
+ .pa-dash-premium-yelp-reviews:before {
1801
+ content: "\e924";
1802
+ }
1803
+
1804
+ .pa-dash-premium-trustpilot-reviews:before {
1805
+ content: "\e920";
1806
+ }
1807
+
1808
+ .pa-dash-premium-banner:before {
1809
+ content: "\e925";
1810
+ }
1811
+
1812
+ .pa-dash-premium-blog:before {
1813
+ content: "\e926";
1814
+ }
1815
+
1816
+ .pa-dash-premium-button:before {
1817
+ content: "\e927";
1818
+ }
1819
+
1820
+ .pa-dash-premium-carousel:before {
1821
+ content: "\e928";
1822
+ }
1823
+
1824
+ .pa-dash-premium-contactform:before {
1825
+ content: "\e929";
1826
+ }
1827
+
1828
+ .pa-dash-premium-countdown:before {
1829
+ content: "\e92a";
1830
+ }
1831
+
1832
+ .pa-dash-premium-counter:before {
1833
+ content: "\e92b";
1834
+ }
1835
+
1836
+ .pa-dash-premium-dual-header:before {
1837
+ content: "\e92c";
1838
+ }
1839
+
1840
+ .pa-dash-premium-fancytext:before {
1841
+ content: "\e92d";
1842
+ }
1843
+
1844
+ .pa-dash-premium-maps:before {
1845
+ content: "\e92e";
1846
+ }
1847
+
1848
+ .pa-dash-premium-title:before {
1849
+ content: "\e92f";
1850
+ }
1851
+
1852
+ .pa-dash-premium-icon-list:before {
1853
+ content: "\e930";
1854
+ }
1855
+
1856
+ .pa-dash-premium-image-button:before {
1857
+ content: "\e931";
1858
+ }
1859
+
1860
+ .pa-dash-premium-image-scroll:before {
1861
+ content: "\e932";
1862
+ }
1863
+
1864
+ .pa-dash-premium-image-separator:before {
1865
+ content: "\e933";
1866
+ }
1867
+
1868
+ /* .pa-dash-premium-lottie:before {
1869
+ content: "\e944";
1870
+ } */
1871
+ .pa-dash-premium-lottie-widget:before {
1872
+ content: "\e935";
1873
+ }
1874
+
1875
+ .pa-dash-premium-grid:before {
1876
+ content: "\e946";
1877
+ }
1878
+
1879
+ .pa-dash-premium-modalbox:before {
1880
+ content: "\e937";
1881
+ }
1882
+
1883
+ .pa-dash-premium-pricing-table:before {
1884
+ content: "\e938";
1885
+ }
1886
+
1887
+ .pa-dash-premium-progressbar:before {
1888
+ content: "\e939";
1889
+ }
1890
+
1891
+ .pa-dash-premium-person:before {
1892
+ content: "\e93a";
1893
+ }
1894
+
1895
+ .pa-dash-premium-testimonials:before {
1896
+ content: "\e93b";
1897
+ }
1898
+
1899
+ .pa-dash-premium-vscroll:before {
1900
+ content: "\e93c";
1901
+ }
1902
+
1903
+ .pa-dash-premium-videobox:before {
1904
+ content: "\e93d";
1905
+ }
1906
+
1907
+ .pa-dash-premium-blob:before {
1908
+ content: "\e900";
1909
+ }
1910
+
1911
+ .pa-dash-woo-products:before {
1912
+ content: "\e901";
1913
  }
admin/assets/fonts/pa-dashboard.svg CHANGED
@@ -1,91 +1,91 @@
1
- <?xml version="1.0" standalone="no"?>
2
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
- <svg xmlns="http://www.w3.org/2000/svg">
4
- <metadata>Generated by IcoMoon</metadata>
5
- <defs>
6
- <font id="icomoon" horiz-adv-x="1024">
7
- <font-face units-per-em="1024" ascent="960" descent="-64" />
8
- <missing-glyph horiz-adv-x="1024" />
9
- <glyph unicode="&#x20;" horiz-adv-x="512" d="" />
10
- <glyph unicode="&#xe900;" glyph-name="pa-blob-generator-section-addon" d="M512-64c-6.339 0.025-12.408 1.149-18.036 3.19l0.372-0.118c-19.741 7.406-33.536 26.12-33.536 48.056 0 0.025 0 0.050 0 0.075v-0.004 325.12h-409.6c-27.965 0.407-50.478 23.172-50.478 51.195 0 12.622 4.567 24.177 12.139 33.103l-0.061-0.074 460.8 545.28c9.428 10.657 23.137 17.342 38.407 17.342 27.984 0 50.724-22.45 51.193-50.322l0.001-0.044v-325.12h409.6c27.965-0.407 50.478-23.172 50.478-51.195 0-12.622-4.567-24.177-12.139-33.103l0.061 0.074-460.8-545.28c-9.299-10.969-23.012-17.949-38.361-18.176h-0.039zM161.536 414.72h350.464c28.277 0 51.2-22.923 51.2-51.2v0-235.52l299.264 353.28h-350.464c-28.277 0-51.2 22.923-51.2 51.2v0 235.52z" />
11
- <glyph unicode="&#xe901;" glyph-name="pa-woo-products-listing-widget" horiz-adv-x="847" d="M845.824 138.752l-73.472 473.856c-10.289 59.506-61.523 104.194-123.195 104.194-0.249 0-0.498-0.001-0.747-0.002h-14.042v37.888c0 113.108-91.692 204.8-204.8 204.8s-204.8-91.692-204.8-204.8v0-37.888h-25.6c-62.403-0.009-114.158-45.584-123.808-105.264l-0.096-0.72-72.96-471.552c-1.45-8.465-2.279-18.216-2.279-28.16 0-96.609 78.237-174.944 174.808-175.104h496.911c0.348-0.003 0.761-0.004 1.173-0.004 96.707 0 175.104 78.397 175.104 175.104 0 9.763-0.799 19.34-2.335 28.668l0.138-1.016zM326.144 754.688c0 56.554 45.846 102.4 102.4 102.4s102.4-45.846 102.4-102.4v0-37.888h-204.8zM727.040 63.488c-13.4-15.686-33.191-25.573-55.291-25.6h-496.901c-0.034 0-0.075 0-0.116 0-40.012 0-72.448 32.436-72.448 72.448 0 4.524 0.415 8.952 1.208 13.246l-0.068-0.446 72.192 473.088c2.214 10.449 11.361 18.177 22.313 18.177 0.075 0 0.151 0 0.226-0.001h450.292c0.033 0 0.072 0 0.111 0 11.277 0 20.662-8.102 22.651-18.802l0.022-0.142 72.192-472.832c0.627-3.561 0.985-7.661 0.985-11.844 0-17.92-6.576-34.304-17.446-46.871l0.077 0.091z" />
12
- <glyph unicode="&#xe902;" glyph-name="alert-box" horiz-adv-x="992" d="M987.392 79.104c-8.324-17.678-25.991-29.696-46.465-29.696-0.045 0-0.089 0-0.134 0h-329.209c-4.149-60.371-54.139-107.772-115.2-107.772s-111.051 47.401-115.18 107.413l-0.020 0.359h-329.728c-0.038 0-0.082 0-0.127 0-20.474 0-38.142 12.018-46.333 29.384l-0.132 0.312c-2.971 6.289-4.705 13.661-4.705 21.439 0 12.65 4.587 24.228 12.189 33.162l-0.060-0.073c67.072 78.336 99.84 186.368 99.84 318.464v108.288c0.234 53.87 10.74 105.22 29.659 152.283l-0.987-2.779c7.952 18.591 26.087 31.381 47.208 31.381 28.277 0 51.2-22.923 51.2-51.2 0-6.109-1.070-11.969-3.033-17.401l0.113 0.357c-13.548-33.354-21.516-72.032-21.76-112.542v-108.386c0.155-5.219 0.243-11.359 0.243-17.519 0-103.194-24.78-200.6-68.714-286.592l1.655 3.568h696.832c-42.279 82.425-67.059 179.831-67.059 283.025 0 6.16 0.088 12.3 0.264 18.418l-0.020-0.899v108.288c0 163.84-128 297.216-281.6 297.216-80.494-0.042-152.754-35.258-202.25-91.11l-0.246-0.282c-9.47-10.568-23.162-17.187-38.4-17.187-28.438 0-51.491 23.053-51.491 51.491 0 13.2 4.967 25.24 13.134 34.353l-0.043-0.049c68.984 76.751 168.489 124.89 279.243 125.184h0.053c211.2 0 384-179.2 384-399.616v-108.288c0-132.864 33.536-240.128 100.608-318.464 7.244-8.766 11.637-20.12 11.637-32.5 0-8.006-1.838-15.584-5.114-22.333l0.133 0.304z" />
13
- <glyph unicode="&#xe903;" glyph-name="animated-gradients" horiz-adv-x="826" d="M825.6 360.96c0.102-3.432 0.161-7.47 0.161-11.52 0-228.123-184.758-413.094-412.8-413.44h-0.033c-228.075 0.346-412.833 185.317-412.833 413.44 0 4.051 0.058 8.089 0.174 12.112l-0.013-0.592c1.13 27.404 23.621 49.193 51.2 49.193 28.3 0 51.241-22.941 51.241-51.241 0-0.72-0.015-1.437-0.044-2.15l0.003 0.102c-0.060-2.287-0.095-4.98-0.095-7.68 0-171.495 138.905-310.546 310.344-310.784h0.023c171.462 0.238 310.367 139.289 310.367 310.784 0 2.701-0.034 5.393-0.103 8.077l0.008-0.397c-10.24 244.736-231.68 430.848-310.272 489.216-61.44-45.312-208.384-167.68-275.712-334.080-5.12-12.544-9.728-25.6-13.824-38.4-6.736-20.947-26.050-35.84-48.842-35.84-0.019 0-0.038 0-0.057 0h0.003c-5.484 0.014-10.767 0.855-15.737 2.405l0.377-0.101c-20.981 6.716-35.905 26.046-35.905 48.862 0 5.497 0.866 10.793 2.47 15.756l-0.101-0.362c4.864 15.36 10.496 30.976 16.64 46.080 94.464 233.984 314.88 384 340.992 400.128l2.304 1.536 3.84 2.304 3.84 1.792 5.632 1.792c1.978 0.854 4.296 1.564 6.704 2.016l0.208 0.032h7.168c1.422 0.181 3.067 0.284 4.736 0.284s3.314-0.103 4.929-0.303l-0.193 0.020c0.654 0.112 1.408 0.176 2.176 0.176s1.522-0.064 2.255-0.187l-0.079 0.011c1.729-0.308 3.275-0.842 4.699-1.579l-0.091 0.043c2.054-0.622 3.836-1.405 5.499-2.37l-0.123 0.066 5.888-3.584c34.816-24.832 368.896-251.392 382.976-591.616z" />
14
- <glyph unicode="&#xe904;" glyph-name="background-transition" d="M512 199.424c-137.285 0-248.576 111.291-248.576 248.576s111.291 248.576 248.576 248.576c137.285 0 248.576-111.291 248.576-248.576v0c-0.291-137.168-111.409-248.285-248.548-248.576h-0.028zM512 594.176c-80.731 0-146.176-65.445-146.176-146.176s65.445-146.176 146.176-146.176c80.731 0 146.176 65.445 146.176 146.176v0c0 80.731-65.445 146.176-146.176 146.176v0zM512 755.2c-28.277 0-51.2 22.923-51.2 51.2v0 102.4c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0-102.4c0-28.277-22.923-51.2-51.2-51.2v0zM512-64c-28.277 0-51.2 22.923-51.2 51.2v0 102.4c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0-102.4c0-28.277-22.923-51.2-51.2-51.2v0zM153.6 396.8h-102.4c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h102.4c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0zM972.8 396.8h-102.4c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h102.4c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0zM764.928 649.728c-0.012 0-0.027 0-0.041 0-28.277 0-51.2 22.923-51.2 51.2 0 14.212 5.791 27.072 15.142 36.349l72.707 72.707c9.271 9.271 22.078 15.004 36.224 15.004 28.293 0 51.228-22.936 51.228-51.228 0-14.146-5.734-26.953-15.004-36.224v0l-72.704-72.704c-9.276-9.33-22.119-15.104-36.311-15.104-0.014 0-0.029 0-0.043 0h0.002zM186.112 70.912c-0.012 0-0.027 0-0.041 0-28.277 0-51.2 22.923-51.2 51.2 0 14.212 5.791 27.072 15.142 36.349l72.707 72.707c9.271 9.271 22.078 15.004 36.224 15.004 28.293 0 51.228-22.936 51.228-51.228 0-14.146-5.734-26.953-15.004-36.224v0l-72.704-72.704c-9.276-9.33-22.119-15.104-36.311-15.104-0.014 0-0.029 0-0.043 0h0.002zM259.072 649.728c-0.012 0-0.026 0-0.041 0-14.192 0-27.035 5.774-36.309 15.102l-72.706 72.706c-9.271 9.271-15.004 22.078-15.004 36.224 0 28.293 22.936 51.228 51.228 51.228 14.146 0 26.953-5.734 36.224-15.004v0l72.704-72.704c9.354-9.28 15.145-22.14 15.145-36.352 0-28.277-22.923-51.2-51.2-51.2-0.014 0-0.029 0-0.043 0h0.002zM837.888 70.912c-0.012 0-0.026 0-0.041 0-14.192 0-27.035 5.774-36.309 15.102l-72.706 72.706c-9.271 9.271-15.004 22.078-15.004 36.224 0 28.293 22.936 51.228 51.228 51.228 14.146 0 26.953-5.734 36.224-15.004l72.704-72.704c9.354-9.28 15.145-22.14 15.145-36.352 0-28.277-22.923-51.2-51.2-51.2-0.014 0-0.029 0-0.043 0h0.002z" />
15
- <glyph unicode="&#xe905;" glyph-name="behance-feed" d="M921.6 686.592h-265.984v66.56h265.984zM515.072 413.184c16.129-26.372 25.68-58.288 25.68-92.435 0-1.884-0.029-3.761-0.087-5.63l0.007 0.274c0.033-1.338 0.052-2.915 0.052-4.495 0-37.644-10.691-72.792-29.203-102.571l0.479 0.827c-26.295-43.778-69.259-75.257-119.9-85.809l-1.188-0.207c-26.73-5.71-57.441-8.98-88.916-8.98-1.501 0-2.999 0.007-4.496 0.022l0.229-0.002h-297.728v666.112h318.464q120.576-1.792 171.008-70.912c18.955-27.17 30.286-60.884 30.286-97.244 0-1.813-0.028-3.619-0.084-5.419l0.006 0.263c0.104-2.101 0.164-4.562 0.164-7.037 0-34.446-11.512-66.204-30.898-91.636l0.27 0.369c-14.164-15.607-31.163-28.349-50.225-37.468l-0.975-0.42c32.103-10.808 58.534-31.359 76.464-58.092l0.336-0.532zM153.6 517.888h138.24c1.644-0.074 3.572-0.116 5.51-0.116 23.558 0 45.664 6.215 64.769 17.095l-0.646-0.339c16.549 11.512 27.245 30.436 27.245 51.858 0 2.384-0.132 4.736-0.39 7.051l0.026-0.285c0.24 2.010 0.377 4.337 0.377 6.697 0 24.378-14.625 45.341-35.58 54.593l-0.382 0.15c-21.301 6.7-45.795 10.56-71.191 10.56-1.972 0-3.939-0.023-5.9-0.070l0.291 0.005h-122.368zM402.944 324.864c0.136 1.654 0.213 3.581 0.213 5.525 0 29.396-17.696 54.66-43.016 65.719l-0.462 0.18c-17.993 7.338-38.87 11.597-60.741 11.597-1.776 0-3.546-0.028-5.309-0.084l0.258 0.006h-140.288v-179.2h139.264c0.381-0.003 0.831-0.005 1.282-0.005 23.308 0 45.404 5.192 65.194 14.482l-0.94-0.396c26.295 14.463 43.817 41.982 43.817 73.594 0 3.385-0.201 6.723-0.591 10.003l0.038-0.397zM1020.928 433.408c2.383-20.017 3.743-43.2 3.743-66.701 0-9.945-0.243-19.833-0.725-29.658l0.054 1.384h-344.32c-0.111-1.89-0.175-4.1-0.175-6.325 0-38.958 19.468-73.369 49.207-94.036l0.376-0.247c18.274-11.292 40.428-17.983 64.145-17.983 1.389 0 2.773 0.023 4.152 0.069l-0.201-0.005c1.226-0.053 2.664-0.082 4.109-0.082 24.532 0 47.050 8.627 64.684 23.013l-0.185-0.146c10.601 8.834 19.216 19.658 25.342 31.941l0.258 0.571h126.208c-5.523-34.381-21.612-64.291-44.775-87.016l-0.025-0.024c-41.573-43.242-99.909-70.105-164.519-70.105-5.165 0-10.29 0.172-15.37 0.51l0.689-0.037c-0.994-0.014-2.168-0.022-3.344-0.022-62.153 0-119.132 22.149-163.476 58.985l0.42-0.339c-48.128 39.424-72.192 102.4-72.192 191.232q0 124.416 65.024 190.464c41.049 41.065 97.766 66.465 160.415 66.465 3.005 0 5.996-0.058 8.973-0.174l-0.428 0.013c1.251 0.021 2.726 0.033 4.205 0.033 38.754 0 75.591-8.209 108.867-22.983l-1.712 0.679c33.859-15.807 61.507-40.085 80.953-70.161l0.455-0.751c19.108-27.935 32.438-61.308 37.491-97.336l0.141-1.224zM896 421.888c-0.339 29.803-13.048 56.572-33.222 75.466l-0.058 0.054c-18.512 15.954-42.793 25.67-69.344 25.67-1.362 0-2.717-0.026-4.066-0.076l0.195 0.006c-1.181 0.051-2.567 0.080-3.959 0.080-26.804 0-51.089-10.784-68.754-28.249l0.009 0.009c-18.191-19.387-30.505-44.484-33.983-72.326l-0.065-0.634z" />
16
- <glyph unicode="&#xe906;" glyph-name="charts" d="M417.536-64c-228.348 5.805-411.243 192.296-411.243 421.504s182.895 415.698 410.706 421.493l0.538 0.011c28.277 0 51.2-22.923 51.2-51.2v0-318.464h314.88c28.277 0 51.2-22.923 51.2-51.2v0c0.004-0.687 0.006-1.499 0.006-2.312 0-230.973-186.516-418.384-417.148-419.832l-0.138-0.001zM366.336 671.488c-150.508-27.256-263.166-157.285-263.166-313.626 0-174.442 140.255-316.126 314.148-318.435l0.218-0.002c156.431 0.852 285.928 115.088 310.535 264.661l0.249 1.835h-310.784c-28.277 0-51.2 22.923-51.2 51.2v0zM972.8 486.912h-366.080c-28.277 0-51.2 22.923-51.2 51.2v0 370.688c0 28.277 22.923 51.2 51.2 51.2v0c230.769-1.45 417.284-188.86 417.284-419.832 0-0.633-0.001-1.265-0.004-1.897v0.097c0-0.076 0.001-0.166 0.001-0.256 0-28.277-22.923-51.2-51.2-51.2 0 0 0 0-0.001 0v0zM657.92 589.312h259.584c-21.95 134.407-125.709 239.377-257.664 262.884l-1.92 0.284z" />
17
- <glyph unicode="&#xe907;" glyph-name="content-switcher" d="M712.192 742.4h-400.384c-1.401 0.023-3.054 0.036-4.71 0.036-166.884 0-302.687-133.071-307.090-298.893l-0.009-0.408c4.411-166.229 140.214-299.3 307.098-299.3 1.656 0 3.309 0.013 4.958 0.039l-0.249-0.003h400.384c1.401-0.023 3.054-0.036 4.71-0.036 166.884 0 302.687 133.071 307.090 298.893l0.009 0.408c-4.411 166.229-140.214 299.3-307.098 299.3-1.656 0-3.309-0.013-4.958-0.039l0.249 0.003zM712.192 242.176h-400.384c-1.382-0.034-3.010-0.053-4.643-0.053-111.776 0-202.638 89.546-204.762 200.814l-0.003 0.199c2.127 111.467 92.989 201.013 204.765 201.013 1.633 0 3.261-0.019 4.884-0.057l-0.241 0.004h400.384c1.382 0.034 3.010 0.053 4.643 0.053 111.776 0 202.638-89.546 204.762-200.814l0.003-0.199c-2.127-111.467-92.989-201.013-204.765-201.013-1.633 0-3.261 0.019-4.884 0.057l0.241-0.004zM843.52 443.136c0-70.268-59.371-127.232-132.608-127.232s-132.608 56.964-132.608 127.232c0 70.268 59.371 127.232 132.608 127.232s132.608-56.964 132.608-127.232z" />
18
- <glyph unicode="&#xe908;" glyph-name="divider" d="M701.184 501.76h269.056c29.691 0 53.76-24.069 53.76-53.76s-24.069-53.76-53.76-53.76h-269.056c-29.691 0-53.76 24.069-53.76 53.76s24.069 53.76 53.76 53.76zM53.76 501.76h269.056c29.691 0 53.76-24.069 53.76-53.76s-24.069-53.76-53.76-53.76h-269.056c-29.691 0-53.76 24.069-53.76 53.76s24.069 53.76 53.76 53.76zM565.76 547.84v-199.68c0-29.691-24.069-53.76-53.76-53.76s-53.76 24.069-53.76 53.76v199.68c0 29.691 24.069 53.76 53.76 53.76s53.76-24.069 53.76-53.76z" />
19
- <glyph unicode="&#xe909;" glyph-name="facebook-feed-1" d="M1024 448c0 282.77-229.23 512-512 512s-512-229.23-512-512c0-282.77 229.23-512 512-512v0h8.96v398.592h-110.080v128h110.080v94.72c0 109.312 66.816 168.96 164.352 168.96 0.851 0.003 1.859 0.005 2.868 0.005 33.709 0 66.983-1.861 99.725-5.487l-4.033 0.363v-114.432h-67.072c-52.992 0-63.488-25.6-63.488-62.208v-81.408h128l-16.384-128h-111.616v-379.392c215.808 63.424 370.688 259.681 370.688 492.113 0 0.062 0 0.123 0 0.185v-0.009z" />
20
- <glyph unicode="&#xe90a;" glyph-name="facebook-feed-2" horiz-adv-x="553" d="M532.736 960h-132.864c-148.736 0-245.504-99.072-245.504-251.904v-116.224h-133.632c-11.483-0.144-20.736-9.487-20.736-20.99 0-0.001 0-0.001 0-0.002v0-168.448c0-11.452 9.284-20.736 20.736-20.736h133.632v-424.704c0-0.007 0-0.016 0-0.025 0-11.233 8.824-20.406 19.918-20.965l0.050-0.002h174.336c11.483 0.144 20.736 9.487 20.736 20.99 0 0.001 0 0.001 0 0.002v0 424.704h156.16c0 0 0.001 0 0.002 0 11.504 0 20.846 9.253 20.99 20.722v168.462c-0.056 5.788-2.39 11.020-6.147 14.851l0.003-0.003c-3.815 3.776-9.055 6.117-14.843 6.144h-156.165v98.304c0 47.36 11.52 71.424 72.96 71.424h90.368c11.483 0.144 20.736 9.487 20.736 20.99 0 0.001 0 0.001 0 0.002v0 156.16c0.004 0.152 0.006 0.332 0.006 0.512 0 11.452-9.284 20.736-20.736 20.736-0.002 0-0.004 0-0.007 0v0z" />
21
- <glyph unicode="&#xe90b;" glyph-name="facebook-messenger-chat" horiz-adv-x="1016" d="M508.16 960c-281.6 0-508.16-212.224-508.16-474.112 1.31-150.237 74.076-283.21 185.921-366.748l1.215-0.868v-182.272l170.496 97.024c43.79-12.85 94.098-20.242 146.132-20.242 1.546 0 3.090 0.007 4.633 0.020l-0.237-0.002c281.6 0 508.16 212.224 508.16 474.112s-226.56 473.088-508.16 473.088zM559.36 325.632l-130.304 136.96-249.088-136.96 273.92 290.048 131.072-134.4 246.528 134.4z" />
22
- <glyph unicode="&#xe90c;" glyph-name="facebook-reviews" d="M313.344-44.544c0.012 0 0.026 0 0.041 0 14.065 0 26.805 5.671 36.058 14.851l-0.003-0.003c-9.193-9.374-21.948-15.226-36.071-15.36h-7.193zM362.24-8.448c-1.808-6.862-5.091-12.801-9.506-17.702l0.034 0.038c4.071 5.003 7.302 10.881 9.366 17.283l0.106 0.381zM985.344 564.992c-29.427 34.25-72.791 55.808-121.19 55.808-0.054 0-0.109 0-0.163 0h-203.256v152.064c-0.289 89.278-72.729 161.539-162.047 161.539-0.36 0-0.72-0.001-1.080-0.004h0.055c-0.171 0.001-0.374 0.002-0.576 0.002-54.741 0-100.149-39.957-108.651-92.296l-0.085-0.634c-17.401-103.302-47.984-195.899-90.434-281.571l2.626 5.859-18.944-38.4h-160.512c-66.875 0-121.088-54.213-121.088-121.088v0-329.728c0-66.875 54.213-121.088 121.088-121.088v0h192.256c0.012 0 0.026 0 0.041 0 14.065 0 26.805 5.671 36.058 14.851l-0.003-0.003 3.328 3.584c4.071 5.003 7.302 10.881 9.366 17.283l0.106 0.381c1.462 4.385 2.306 9.433 2.306 14.678 0 0.15-0.001 0.299-0.002 0.448v-0.023 456.96l27.904 57.856c43.986 87.809 77.774 189.682 96.1 296.831l0.924 6.529c0.723 4.138 4.289 7.244 8.581 7.244 0.405 0 0.803-0.028 1.193-0.081l-0.045 0.005c32.66 0 59.136-26.476 59.136-59.136v0-203.264c0-28.277 22.923-51.2 51.2-51.2v0h254.464c0.015 0 0.033 0 0.052 0 17.429 0 33.057-7.707 43.665-19.898l0.060-0.070c8.98-9.973 14.473-23.241 14.473-37.791 0-3.016-0.236-5.977-0.69-8.865l0.041 0.32-53.76-342.528c-4.741-29.188-29.764-51.2-59.928-51.2-0.081 0-0.163 0-0.244 0h-351.731c-28.277 0-51.2-22.923-51.2-51.2s22.923-51.2 51.2-51.2v0h351.744c0.229-0.001 0.499-0.002 0.77-0.002 81.147 0 148.384 59.551 160.395 137.334l0.115 0.908 53.248 342.528c1.139 7.176 1.789 15.451 1.789 23.878 0 39.967-14.631 76.516-38.828 104.585l0.175-0.208zM102.4 76.544v329.728c0 10.321 8.367 18.688 18.688 18.688v0h141.056v-367.104h-141.056c-10.321 0-18.688 8.367-18.688 18.688v0z" />
23
- <glyph unicode="&#xe90d;" glyph-name="google-reviews" horiz-adv-x="1003" d="M512 521.327h483.441c4.978-25.633 7.876-55.155 7.976-85.336v-0.083c0.041-2.472 0.064-5.389 0.064-8.312 0-90.976-22.485-176.7-62.201-251.919l1.417 2.944c-40.134-75.121-99.112-135.586-170.742-176.397l-2.155-1.13c-71.446-40.366-156.884-64.151-247.877-64.151-3.308 0-6.609 0.031-9.903 0.094l0.494-0.007c-0.609-0.003-1.329-0.004-2.050-0.004-71.309 0-139.146 14.862-200.585 41.656l3.238-1.258c-63.637 26.44-118.043 62.856-163.975 107.885l0.084-0.082c-45.204 45.719-81.931 99.933-107.558 160.015l-1.274 3.361c-25.542 58.847-40.401 127.387-40.401 199.397s14.859 140.551 41.677 202.722l-1.276-3.325c26.9 63.443 63.628 117.657 108.879 163.425l-0.047-0.048c45.668 45.291 99.897 82.033 160.034 107.571l3.343 1.261c58.2 25.537 126.038 40.398 197.347 40.398 0.721 0 1.441-0.002 2.161-0.005h-0.111c2.575 0.049 5.611 0.077 8.654 0.077 129.937 0 247.94-51.099 335.008-134.299l-0.185 0.175-139.449-134.046c-50.634 49.245-119.851 79.612-196.16 79.612-2.767 0-5.524-0.040-8.272-0.119l0.404 0.009c-0.679 0.005-1.482 0.009-2.286 0.009-57.888 0-111.998-16.174-158.058-44.249l1.341 0.759c-95.41-57.522-158.235-160.595-158.235-278.341 0-0.558 0.001-1.115 0.004-1.672v0.086c-0.002-0.471-0.004-1.029-0.004-1.586 0-117.747 62.825-220.82 156.782-277.527l1.453-0.814c44.719-27.316 98.83-43.49 156.717-43.49 0.804 0 1.606 0.003 2.409 0.009l-0.123-0.001c2.12-0.047 4.618-0.074 7.122-0.074 35.546 0 69.834 5.387 102.091 15.39l-2.439-0.651c30.543 9.619 57.11 23.286 80.777 40.67l-0.761-0.533c20.712 15.883 38.662 33.833 54.041 53.862l0.504 0.683c13.43 17.224 25.003 36.895 33.846 57.994l0.631 1.696c6.285 14.746 11.462 32.014 14.698 49.956l0.225 1.501h-290.734z" />
24
- <glyph unicode="&#xe90e;" glyph-name="horizontal-scroll" d="M1024 448c0-63.623-51.577-115.2-115.2-115.2s-115.2 51.577-115.2 115.2c0 63.623 51.577 115.2 115.2 115.2s115.2-51.577 115.2-115.2zM627.2 448c0-63.623-51.577-115.2-115.2-115.2s-115.2 51.577-115.2 115.2c0 63.623 51.577 115.2 115.2 115.2s115.2-51.577 115.2-115.2zM230.4 448c0-63.623-51.577-115.2-115.2-115.2s-115.2 51.577-115.2 115.2c0 63.623 51.577 115.2 115.2 115.2s115.2-51.577 115.2-115.2z" />
25
- <glyph unicode="&#xe90f;" glyph-name="hover-box" horiz-adv-x="817" d="M813.824 717.312l-3.072-6.4c-0.853-2.067-1.974-3.845-3.346-5.396l0.018 0.020c-1.478-2.095-2.991-3.933-4.627-5.652l0.019 0.020-165.632-172.544c-8.842-9.276-21.277-15.058-35.063-15.104h-0.009c-13.619 0.132-25.865 5.901-34.538 15.081l-0.022 0.023c-8.923 9.426-14.41 22.184-14.41 36.224s5.487 26.798 14.433 36.248l-0.023-0.024 81.92 85.248h-460.8c-50.328-1.28-90.637-42.383-90.637-92.9 0-0.55 0.005-1.099 0.014-1.647l-0.001 0.082v-207.872c0-0.012 0-0.027 0-0.041 0-27.557-21.77-50.029-49.050-51.156l-0.102-0.003c-27.382 1.13-49.152 23.602-49.152 51.159 0 0.014 0 0.029 0 0.043v-0.002 207.872c-0.022 1.081-0.034 2.355-0.034 3.632 0 105.227 84.090 190.814 188.738 193.228l0.225 0.004h460.8l-81.92 85.248c-9.201 9.255-14.889 22.011-14.889 36.096s5.687 26.842 14.891 36.098l-0.002-0.002c8.715 9.323 21.087 15.133 34.816 15.133s26.101-5.81 34.791-15.106l0.025-0.027 162.048-169.216c1.34-0.998 2.515-2.092 3.56-3.3l0.024-0.028 5.376-6.656 2.048-3.328c0.871-1.608 1.816-3.63 2.658-5.705l0.158-0.439c2.466-6.070 3.897-13.112 3.897-20.488 0-6.602-1.146-12.935-3.251-18.813l0.122 0.39zM813.824 717.312c2.128 5.673 3.36 12.228 3.36 19.072s-1.232 13.399-3.486 19.458l0.126-0.386c2.272-5.41 3.592-11.699 3.592-18.296 0-0.318-0.003-0.635-0.009-0.952l0.001 0.047c0-0.037 0-0.081 0-0.125 0-6.776-1.316-13.244-3.707-19.163l0.123 0.344zM818.176 513.28v-207.872c0.022-1.081 0.034-2.355 0.034-3.632 0-105.227-84.090-190.814-188.738-193.228l-0.225-0.004h-460.8l81.92-85.248c9.201-9.255 14.889-22.011 14.889-36.096s-5.687-26.842-14.891-36.098l0.002 0.002c-8.715-9.323-21.087-15.133-34.816-15.133s-26.101 5.81-34.791 15.106l-0.025 0.027-166.4 172.544-5.376 6.656-2.048 3.328c-1.078 1.936-2.195 4.296-3.172 6.727l-0.156 0.441c-2.128 5.673-3.36 12.228-3.36 19.072s1.232 13.399 3.486 19.458l-0.126-0.386 3.072 6.4c0.853 2.067 1.974 3.845 3.346 5.396l-0.018-0.020c1.478 2.095 2.991 3.933 4.627 5.652l-0.019-0.020 3.584 3.328 162.048 169.216c8.748 9.255 21.109 15.015 34.816 15.015s26.068-5.76 34.795-14.992l0.021-0.023c8.923-9.426 14.41-22.184 14.41-36.224s-5.487-26.798-14.433-36.248l0.023 0.024-81.92-85.248h460.8c50.328 1.28 90.637 42.383 90.637 92.9 0 0.55-0.005 1.099-0.014 1.647l0.001-0.082v207.616c0 27.146 22.006 49.152 49.152 49.152s49.152-22.006 49.152-49.152v0zM3.584 140.8c-2.681 5.539-4.353 12.017-4.605 18.857l-0.003 0.087c-0.004 0.229-0.006 0.5-0.006 0.771 0 6.532 1.223 12.778 3.453 18.522l-0.119-0.349c-1.717-5.129-2.707-11.035-2.707-17.172 0-7.462 1.465-14.583 4.122-21.089l-0.135 0.373z" />
26
- <glyph unicode="&#xe910;" glyph-name="icon-box" d="M1017.344 600.064l-171.008 286.72c-8.275 13.36-22.81 22.155-39.407 22.272h-588.817c-0.209 0.003-0.456 0.005-0.704 0.005-16.738 0-31.415-8.826-39.629-22.078l-0.115-0.199-41.984-70.912c-4.095-6.702-6.519-14.811-6.519-23.486 0-16.618 8.895-31.158 22.184-39.118l0.207-0.115c6.609-4.020 14.6-6.4 23.147-6.4 0.052 0 0.105 0 0.157 0h-0.008c0.004 0 0.009 0 0.014 0 16.506 0 30.973 8.727 39.040 21.818l0.114 0.198 28.928 48.64h269.056c0.19-0.003 0.414-0.005 0.638-0.005 4.161 0 8.168 0.657 11.923 1.874l-0.274-0.077v-1.792l61.44-195.072h-56.064c-1.024 0.082-2.218 0.128-3.423 0.128-25.308 0-45.824-20.516-45.824-45.824s20.516-45.824 45.824-45.824c1.205 0 2.398 0.046 3.579 0.138l-0.157-0.010h60.416c-29.44-115.2-74.24-291.584-100.608-395.008l-387.072 445.696 49.152 81.92c4.031 6.698 6.416 14.782 6.416 23.424 0 25.387-20.581 45.968-45.968 45.968-16.746 0-31.4-8.954-39.436-22.336l-0.116-0.208-65.792-110.336c-4.2-6.767-6.689-14.976-6.689-23.767 0-11.391 4.18-21.806 11.090-29.795l-0.049 0.058 464.128-533.76c2.54-3.3 5.404-6.164 8.595-8.623l0.109-0.081h1.28c0.32-0.613 0.862-1.072 1.518-1.275l0.018-0.005 2.56-1.536c0.264-0.115 0.572-0.181 0.896-0.181s0.632 0.067 0.911 0.187l-0.015-0.006c1.204-0.999 2.675-1.718 4.29-2.038l0.062-0.010c0.346-0.066 0.745-0.105 1.152-0.105s0.806 0.038 1.192 0.111l-0.040-0.006h8.704c0.846-0.115 1.823-0.181 2.816-0.181s1.97 0.066 2.928 0.193l-0.112-0.012h7.936c2.184 0.261 4.173 0.802 6.032 1.59l-0.144-0.054h7.168l2.56 1.536c0.627 0.293 1.145 0.729 1.528 1.268l0.008 0.012c3.857 2.668 7.152 5.801 9.909 9.37l0.075 0.102 465.92 533.504c6.861 7.931 11.041 18.346 11.041 29.737 0 8.791-2.489 17-6.801 23.962l0.112-0.195zM604.16 216.064c18.432 73.216 44.288 174.592 80.128 315.392h193.536zM680.96 622.848l-60.416 194.56h160.512l116.48-195.072zM524.8 817.408h-12.8c0.19-0.003 0.414-0.005 0.638-0.005 4.161 0 8.168 0.657 11.923 1.874l-0.274-0.077zM414.208 530.944h-25.6c-1.024-0.082-2.218-0.128-3.423-0.128-25.308 0-45.824 20.516-45.824 45.824s20.516 45.824 45.824 45.824c1.205 0 2.398-0.046 3.579-0.138l-0.157 0.010h25.6c1.024 0.082 2.218 0.128 3.423 0.128 25.308 0 45.824-20.516 45.824-45.824s-20.516-45.824-45.824-45.824c-1.205 0-2.398 0.046-3.579 0.138l0.157-0.010z" />
27
- <glyph unicode="&#xe911;" glyph-name="ihover" horiz-adv-x="847" d="M841.472 629.504c-8.619 16.836-25.849 28.16-45.723 28.16-0.035 0-0.071 0-0.106 0h-179.194l82.432 234.24c1.656 4.818 2.612 10.37 2.612 16.145 0 11.464-3.768 22.048-10.133 30.582l0.096-0.135c-9.398 13.083-24.57 21.504-41.708 21.504-0.007 0-0.014 0-0.021 0h-387.839c-0.034 0-0.074 0-0.113 0-7.29 0-14.205-1.604-20.411-4.477l0.301 0.125c-1.269-0.32-2.381-0.85-3.356-1.556l0.028 0.020c-3.416-1.68-6.361-3.642-9.013-5.933l0.053 0.045c-1.34-0.998-2.515-2.092-3.56-3.3l-0.024-0.028c-5.82-5.654-10.239-12.719-12.707-20.644l-0.093-0.348-209.408-534.272c-2.173-5.467-3.433-11.803-3.433-18.432 0-28.224 22.837-51.114 51.041-51.2h307.208l-69.12-320.512c-0.057-0.231-0.090-0.496-0.090-0.768s0.033-0.537 0.095-0.791l-0.005 0.023c-0.18-1.613-0.283-3.482-0.283-5.376s0.103-3.763 0.303-5.604l-0.020 0.228c-0.126-1.304-0.198-2.82-0.198-4.352s0.072-3.048 0.213-4.543l-0.015 0.191c0.462-3.187 1.177-6.036 2.146-8.765l-0.098 0.317c3.683-9.814 9.867-17.977 17.787-23.967l0.133-0.097c2.301-1.734 4.901-3.352 7.642-4.73l0.294-0.134 6.656-2.56 6.4-1.792c1.38-0.121 2.986-0.19 4.608-0.19s3.228 0.069 4.815 0.204l-0.207-0.014c2.126-0.433 4.596-0.71 7.12-0.767l0.048-0.001h8.192l5.376 2.304c1.574 0.55 2.934 1.333 4.117 2.321l-0.021-0.017c5.626 3.529 10.376 7.872 14.242 12.928l0.094 0.128 2.304 3.328 455.936 619.008c6.289 8.407 10.070 19.008 10.070 30.493 0 8.391-2.019 16.311-5.597 23.3l0.134-0.289zM438.272 208.128l32.256 152.064c0.728 3.236 1.144 6.951 1.144 10.765 0 28.277-22.923 51.2-51.2 51.2-0.402 0-0.804-0.005-1.204-0.014l0.059 0.001h-293.12l170.496 435.456h280.32l-81.152-230.4-1.28-3.328c-0.77-1.911-1.394-4.15-1.768-6.473l-0.024-0.183v-5.12c-0.064-0.767-0.101-1.659-0.101-2.56s0.037-1.793 0.109-2.676l-0.008 0.116s0-2.56 0-3.584c-0.119-0.961-0.188-2.072-0.188-3.2s0.068-2.239 0.201-3.331l-0.013 0.131c0.549-3.46 1.441-6.56 2.661-9.489l-0.101 0.273v-1.536c0.555-1.388 1.156-2.567 1.849-3.683l-0.057 0.099c0.646-1.671 1.51-3.111 2.578-4.374l-0.018 0.022 2.304-3.072c2.179-2.902 4.622-5.426 7.343-7.617l0.081-0.063c3.711-2.876 7.916-5.441 12.396-7.512l0.404-0.168 4.608-1.792c1.937-0.729 4.191-1.27 6.531-1.525l0.125-0.011c1.266-0.121 2.737-0.19 4.224-0.19s2.958 0.069 4.41 0.204l-0.186-0.014h150.784zM288.768-21.504c-0.119 0.808-0.187 1.74-0.187 2.688s0.068 1.88 0.199 2.792l-0.012-0.104v3.328c-0.126-1.304-0.198-2.82-0.198-4.352s0.072-3.048 0.213-4.543l-0.015 0.191zM528.128 557.568h-4.608z" />
28
- <glyph unicode="&#xe912;" glyph-name="image-accordion" d="M972.8 883.2h-921.6c-28.277 0-51.2-22.923-51.2-51.2v0-776.192c0-28.277 22.923-51.2 51.2-51.2v0h921.6c28.277 0 51.2 22.923 51.2 51.2v0 776.192c0 28.277-22.923 51.2-51.2 51.2v0zM102.4 780.8h204.8v-673.792h-204.8zM409.6 780.8h204.8v-673.792h-204.8zM921.6 107.008h-204.8v673.792h204.8z" />
29
- <glyph unicode="&#xe913;" glyph-name="image-comparison" d="M972.8 883.2h-921.6c-28.277 0-51.2-22.923-51.2-51.2v0-776.192c0-28.277 22.923-51.2 51.2-51.2v0h921.6c28.277 0 51.2 22.923 51.2 51.2v0 776.192c0 28.277-22.923 51.2-51.2 51.2v0zM102.4 780.8h358.4v-234.496c-37.365-19.557-62.424-58.052-62.424-102.4s25.060-82.843 61.791-102.098l0.633-0.302v-233.728h-358.4zM921.6 107.008h-358.4v234.496c37.365 19.557 62.424 58.052 62.424 102.4s-25.060 82.843-61.791 102.098l-0.633 0.302v234.496h358.4z" />
30
- <glyph unicode="&#xe914;" glyph-name="image-hotspots" d="M1013.248 300.8l-371.456 611.072c-13.171 21.338-36.424 35.345-62.949 35.345-31.533 0-58.442-19.796-68.979-47.638l-0.168-0.507-81.408-220.16c-2.232-5.535-3.527-11.953-3.527-18.674 0-28.277 22.923-51.2 51.2-51.2 22.218 0 41.13 14.152 48.215 33.933l0.112 0.357 60.928 164.608 310.784-510.72-281.6 32.512-142.080 230.4c-6.846 11.049-17.646 19.094-30.382 22.202l-0.338 0.070h-6.4c-2.001 0.367-4.304 0.577-6.656 0.577s-4.655-0.21-6.891-0.612l0.235 0.035c-7.397-0.938-14.069-3.387-19.92-7.033l0.208 0.121-332.8-202.752c-41.525-25.053-68.866-69.925-68.866-121.183 0-26.712 7.425-51.689 20.323-72.981l-0.354 0.629 59.904-98.816c25.23-40.968 69.837-67.869 120.728-67.869 27.103 0 52.424 7.63 73.932 20.86l-0.613-0.351 200.96 121.856 40.96-67.584c2.932-4.782 4.669-10.572 4.669-16.768 0-17.919-14.526-32.445-32.445-32.445-11.723 0-21.994 6.218-27.695 15.535l-0.081 0.142-12.544 20.736c-7.063 7.884-17.275 12.822-28.641 12.822-21.208 0-38.4-17.192-38.4-38.4 0-5.174 1.023-10.109 2.878-14.613l-0.093 0.255 12.544-20.48c19.597-30.953 53.657-51.205 92.447-51.205 0.349 0 0.698 0.002 1.046 0.005h-0.053c60.099 0.173 108.751 48.933 108.751 109.056 0 20.914-5.887 40.452-16.094 57.049l0.271-0.473-40.96 67.584 55.808 33.792 345.088-39.68c2.017-0.196 4.359-0.308 6.728-0.308 40.719 0 73.728 33.009 73.728 73.728 0 13.698-3.736 26.524-10.244 37.513l0.187-0.342zM221.184 121.6c-5.76-3.595-12.754-5.726-20.247-5.726-13.905 0-26.095 7.342-32.906 18.36l-0.096 0.166-59.904 97.792c-3.493 5.721-5.562 12.643-5.562 20.047 0 13.984 7.377 26.245 18.451 33.105l0.167 0.096 291.584 176.896 102.4-163.84z" />
31
- <glyph unicode="&#xe915;" glyph-name="image-layers" d="M897.28 960h-512c-70.692 0-128-57.308-128-128v0-124.16h-129.28c-70.14-0.724-126.72-57.751-126.72-127.994 0-0.002 0-0.005 0-0.007v0-515.84c0-70.692 57.308-128 128-128v0h510.72c70.14 0.724 126.72 57.751 126.72 127.994 0 0.002 0 0.005 0 0.007v0 124.16h131.84c70.692 0 128 57.308 128 128v0 515.84c0 0.002 0 0.004 0 0.006 0 70.692-57.308 128-128 128-0.45 0-0.899-0.002-1.348-0.007l0.068 0.001zM664.064 64c0-14.138-11.462-25.6-25.6-25.6v0h-510.464c-14.138 0-25.6 11.462-25.6 25.6v0 516.096c0 14.138 11.462 25.6 25.6 25.6v0h512c14.138 0 25.6-11.462 25.6-25.6v0zM921.6 315.904c0-14.138-11.462-25.6-25.6-25.6v0h-130.56v289.792c0 0.002 0 0.004 0 0.006 0 70.242-56.58 127.27-126.651 127.993l-0.069 0.001h-278.784v123.904c0 14.138 11.462 25.6 25.6 25.6v0h512c14.138 0 25.6-11.462 25.6-25.6v0z" />
32
- <glyph unicode="&#xe916;" glyph-name="instagram-feed" d="M1021.185 659.019c-0.751 44.832-9.132 87.479-23.895 127.015l0.861-2.63c-13.62 35.496-33.821 65.731-59.321 90.547l-0.056 0.054c-24.912 25.418-55.137 45.527-88.888 58.541l-1.713 0.581c-37.011 14.227-79.807 22.877-124.502 23.796l-0.394 0.006c-54.77 3.071-72.174 3.071-211.403 3.071s-156.121 0-210.891-2.815c-44.715-0.687-87.285-8.98-126.762-23.634l2.633 0.856c-35.667-13.843-66.001-34.392-90.768-60.307l-0.089-0.094c-25.341-24.913-45.37-55.142-58.289-88.889l-0.576-1.712c-14.394-36.776-23.062-79.333-23.798-123.819l-0.004-0.31c-3.327-54.77-3.327-72.174-3.327-211.147s0-156.633 3.071-211.147c0.852-44.813 9.509-87.354 24.663-126.668l-0.86 2.539c13.561-35.564 33.676-65.878 59.083-90.82l0.038-0.037c24.854-25.809 55.081-46.253 88.901-59.556l1.7-0.589c36.769-14.089 79.281-22.725 123.667-23.793l0.462-0.009c54.77-1.792 72.174-1.792 211.147-1.792s156.377 0 211.147 2.815c44.715 0.687 87.285 8.98 126.762 23.634l-2.633-0.856c69.708 27.177 123.825 81.295 150.389 149.222l0.613 1.781c14.268 36.775 22.923 79.313 23.796 123.758l0.006 0.371c1.792 54.514 1.792 71.918 1.792 211.147s0 156.377-2.559 210.891zM929.048 241.076c-0.489-34.304-6.923-66.959-18.313-97.185l0.653 1.976c-17.676-44.72-52.476-79.436-96.104-96.601l-1.152-0.399c-28.172-10.979-60.775-17.438-94.86-17.659h-0.093c-54.002-2.559-70.382-3.071-206.796-3.071s-153.562 0-207.052 3.071c-34.177 0.222-66.781 6.681-96.819 18.294l1.867-0.635c-23.095 8.559-42.768 21.564-58.829 38.097l-0.036 0.038c-16.478 16.157-29.466 35.81-37.769 57.763l-0.366 1.102c-10.747 28.17-17.182 60.739-17.657 94.748l-0.002 0.205c-2.303 53.747-2.815 70.126-2.815 207.308s0 153.562 2.815 206.796c0.444 34.209 6.883 66.781 18.308 96.9l-0.648-1.947c8.59 23.126 21.686 42.807 38.339 58.816l0.051 0.049c16.098 16.57 35.77 29.575 57.781 37.78l1.084 0.354c28.172 10.979 60.775 17.438 94.86 17.659h0.093c54.002 2.559 70.382 3.071 206.796 3.071s153.562 0 206.796-3.071c34.263-0.2 66.957-6.662 97.079-18.295l-1.871 0.636c23.005-8.567 42.593-21.571 58.567-38.091l0.042-0.044c16.646-16.096 29.731-35.765 38.031-57.779l0.359-1.086c10.747-28.17 17.182-60.739 17.657-94.748l0.002-0.205c2.303-54.002 2.815-70.126 2.815-206.796s-0.512-153.562-2.815-207.052zM511.872 710.974c-145.197-0.146-262.846-117.885-262.846-263.102 0-145.307 117.795-263.102 263.102-263.102s263.102 117.795 263.102 263.102c0 0.090 0 0.18 0 0.27v-0.014c0 0 0 0 0 0 0 145.166-117.68 262.846-262.846 262.846-0.18 0-0.36 0-0.54-0.001h0.028zM511.872 277.419c-94.28 0-170.709 76.429-170.709 170.709s76.429 170.709 170.709 170.709c94.28 0 170.709-76.429 170.709-170.709v0c0-94.28-76.429-170.709-170.709-170.709v0zM846.892 721.468c0-33.924-27.501-61.425-61.425-61.425s-61.425 27.501-61.425 61.425c0 33.924 27.501 61.425 61.425 61.425v0c0.076 0 0.166 0.001 0.256 0.001 33.783 0 61.169-27.386 61.169-61.169 0-0.090 0-0.18-0.001-0.27v0.014z" />
33
- <glyph unicode="&#xe917;" glyph-name="ken-burns" d="M896-64h-768c-70.692 0-128 57.308-128 128v0 768c0 70.692 57.308 128 128 128v0h278.528c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0h-278.528c-14.138 0-25.6-11.462-25.6-25.6v0-768c0-14.138 11.462-25.6 25.6-25.6v0h768c14.138 0 25.6 11.462 25.6 25.6v0 228.352c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0-228.352c0-70.692-57.308-128-128-128v0zM1024 908.8v-369.664c0-28.277-22.923-51.2-51.2-51.2s-51.2 22.923-51.2 51.2v0 246.272l-373.504-373.504c-8.895-7.652-20.555-12.311-33.303-12.311-28.277 0-51.2 22.923-51.2 51.2 0 12.749 4.659 24.409 12.368 33.371l-0.057-0.067 373.504 373.504h-212.48c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h335.872c1.46 0.187 3.15 0.294 4.864 0.294s3.404-0.107 5.062-0.314l-0.198 0.020c3.44-0.752 6.434-1.721 9.294-2.943l-0.334 0.127 8.192-4.352s0 0 0 0c2.731-2.113 5.151-4.208 7.451-6.426l-0.027 0.026c2.192-2.273 4.287-4.693 6.249-7.222l0.151-0.202s0 0 0 0c1.384-2.23 2.835-4.916 4.138-7.685l0.214-0.507s0 0 0 0c2.406-3.393 4.477-7.281 6.028-11.423l0.116-0.353c0.207-1.538 0.325-3.315 0.325-5.12s-0.118-3.582-0.347-5.325l0.022 0.205z" />
34
- <glyph unicode="&#xe918;" glyph-name="lottie-section-background" d="M972.8-64h-921.6c-28.277 0-51.2 22.923-51.2 51.2v0 921.6c0 28.277 22.923 51.2 51.2 51.2v0h921.6c28.277 0 51.2-22.923 51.2-51.2v0-921.6c0-28.277-22.923-51.2-51.2-51.2v0zM102.4 857.6v-819.2h819.2v819.2zM782.080 648.96c-1.865-26.75-24.022-47.744-51.083-47.744-2.207 0-4.381 0.14-6.514 0.41l0.253-0.026h-1.536c-20.277-0.815-38.332-9.698-51.158-23.506l-0.042-0.046c-39.624-37.719-72.674-81.886-97.557-130.899l-1.259-2.733c-5.632-10.24-11.264-20.224-16.64-30.464-14.848-25.6-29.696-53.504-45.568-79.872-30.788-53.58-70.537-98.474-117.675-134.109l-1.109-0.803c-25.659-18.893-57.89-30.236-92.771-30.236-1.045 0-2.088 0.010-3.129 0.030l0.156-0.002c-17.084 0.379-32.471 7.342-43.786 18.442l0.010-0.010c-7.369 8.172-11.878 19.049-11.878 30.978 0 1.080 0.037 2.152 0.11 3.213l-0.008-0.143c1.795 26.812 23.983 47.88 51.092 47.88 2.567 0 5.089-0.189 7.555-0.554l-0.279 0.034h1.536c20.277 0.815 38.332 9.698 51.158 23.506l0.042 0.046c39.624 37.719 72.674 81.886 97.557 130.899l1.259 2.733c5.632 10.24 11.264 20.224 16.64 30.464 14.848 25.6 29.696 53.504 45.568 79.872 30.788 53.58 70.537 98.474 117.675 134.109l1.109 0.803c25.659 18.893 57.89 30.236 92.771 30.236 1.045 0 2.088-0.010 3.129-0.030l-0.156 0.002c17.084-0.379 32.471-7.342 43.786-18.442l-0.010 0.010c6.802-8.012 10.938-18.473 10.938-29.9 0-1.46-0.068-2.905-0.2-4.331l0.014 0.183z" />
35
- <glyph unicode="&#xe919;" glyph-name="magic-section" d="M1008.896 872.704l-249.856-250.112h176.64c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0h-300.288c-1.46-0.187-3.15-0.294-4.864-0.294s-3.404 0.107-5.062 0.314l0.198-0.020c-2.679 0.362-5.098 0.99-7.393 1.867l0.225-0.075-6.656 2.816h-1.792c-2.050 0.972-3.815 2.082-5.431 3.371l0.055-0.043-5.632 4.864c-1.715 1.716-3.31 3.554-4.769 5.499l-0.095 0.133c-1.246 1.561-2.356 3.326-3.257 5.211l-0.071 0.165c-0.040 0.269-0.063 0.58-0.063 0.896s0.023 0.627 0.067 0.931l-0.004-0.035c-0.96 1.827-1.911 4.026-2.707 6.297l-0.109 0.359c-0.602 1.671-1.219 3.813-1.716 6l-0.076 0.4c-0.181 1.498-0.284 3.233-0.284 4.992s0.103 3.494 0.304 5.199l-0.020-0.207v302.848c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0-176.64l248.064 249.856c9.255 9.201 22.011 14.889 36.096 14.889s26.842-5.687 36.098-14.891l-0.002 0.002c9.201-9.255 14.889-22.011 14.889-36.096s-5.687-26.842-14.891-36.098l0.002 0.002zM439.808 324.608v-300.288c0-28.277-22.923-51.2-51.2-51.2s-51.2 22.923-51.2 51.2v0 176.64l-250.112-249.856c-9.255-9.201-22.011-14.889-36.096-14.889s-26.842 5.687-36.098 14.891l0.002-0.002c-9.201 9.255-14.889 22.011-14.889 36.096s5.687 26.842 14.891 36.098l-0.002-0.002 249.856 250.112h-176.64c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h300.288c1.498 0.181 3.233 0.284 4.992 0.284s3.494-0.103 5.199-0.304l-0.207 0.020 6.4-1.792 6.656-2.816h1.792c2.050-0.972 3.815-2.082 5.431-3.371l-0.055 0.043 5.632-4.864c1.715-1.716 3.31-3.554 4.769-5.499l0.095-0.133c1.246-1.561 2.356-3.326 3.257-5.211l0.071-0.165c0.040-0.269 0.063-0.58 0.063-0.896s-0.023-0.627-0.067-0.931l0.004 0.035c0.96-1.827 1.911-4.026 2.707-6.297l0.109-0.359c0.602-1.671 1.219-3.813 1.716-6l0.076-0.4c1.383-3.697 2.3-7.973 2.555-12.427l0.005-0.117zM439.808 871.68v-300.288c0.181-1.498 0.284-3.233 0.284-4.992s-0.103-3.494-0.304-5.199l0.020 0.207c-0.573-2.587-1.19-4.729-1.919-6.818l0.127 0.418c-0.905-2.63-1.856-4.829-2.95-6.941l0.134 0.285c0.040-0.269 0.063-0.58 0.063-0.896s-0.023-0.627-0.067-0.931l0.004 0.035c-0.972-2.050-2.082-3.815-3.371-5.431l0.043 0.055c-1.554-2.078-3.149-3.916-4.864-5.632v0l-5.632-4.864c-1.561-1.246-3.326-2.356-5.211-3.257l-0.165-0.071h-1.792l-6.656-2.816c-2.070-0.802-4.489-1.43-6.998-1.773l-0.17-0.019c-1.46-0.187-3.15-0.294-4.864-0.294s-3.404 0.107-5.062 0.314l0.198-0.020h-302.336c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h176.64l-249.856 247.552c-9.201 9.255-14.889 22.011-14.889 36.096s5.687 26.842 14.891 36.098l-0.002-0.002c9.255 9.201 22.011 14.889 36.096 14.889s26.842-5.687 36.098-14.891l-0.002 0.002 250.112-249.856v176.64c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0zM1008.896-48.896c-9.255-9.201-22.011-14.889-36.096-14.889s-26.842 5.687-36.098 14.891l0.002-0.002-250.112 249.856v-176.64c0-28.277-22.923-51.2-51.2-51.2s-51.2 22.923-51.2 51.2v0 300.288c-0.181 1.498-0.284 3.233-0.284 4.992s0.103 3.494 0.304 5.199l-0.020-0.207c0.573 2.587 1.19 4.729 1.919 6.818l-0.127-0.418c0.874 2.817 1.83 5.191 2.95 7.469l-0.134-0.301c-0.040 0.269-0.063 0.58-0.063 0.896s0.023 0.627 0.067 0.931l-0.004-0.035c0.972 2.050 2.082 3.815 3.371 5.431l-0.043-0.055c1.554 2.078 3.149 3.916 4.864 5.632v0l5.632 4.864c1.561 1.246 3.326 2.356 5.211 3.257l0.165 0.071h1.792l6.656 2.816 6.4 1.792c1.498 0.181 3.233 0.284 4.992 0.284s3.494-0.103 5.199-0.304l-0.207 0.020h302.848c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0h-176.64l249.856-250.112c8.608-9.139 13.899-21.488 13.899-35.072s-5.29-25.933-13.923-35.098l0.024 0.026z" />
36
- <glyph unicode="&#xe91a;" glyph-name="multi-scroll" d="M432.64 610.304c-9.267-9.277-22.075-15.016-36.224-15.016s-26.957 5.739-36.224 15.016v0l-85.248 85.248v-625.408c0-28.277-22.923-51.2-51.2-51.2s-51.2 22.923-51.2 51.2v0 625.408l-85.248-85.248c-9.041-8.188-21.091-13.199-34.312-13.199-28.277 0-51.2 22.923-51.2 51.2 0 13.285 5.059 25.388 13.357 34.487l-0.036-0.040 169.216 168.96c0.988 0.925 2.076 1.769 3.238 2.507l0.090 0.053c2.027 1.945 4.197 3.791 6.475 5.502l0.181 0.13 3.328 2.048c2.081 1.748 4.436 3.284 6.965 4.519l0.203 0.089c5.657 2.248 12.212 3.551 19.072 3.551s13.415-1.303 19.431-3.676l-0.359 0.125 6.4-3.328c2.067-0.853 3.845-1.974 5.396-3.346l-0.020 0.018 5.632-4.864 3.328-3.584 169.216-168.96c9.125-9.241 14.761-21.946 14.761-35.967 0-14.149-5.739-26.957-15.017-36.224v0zM223.744 870.4c0.037 0 0.081 0 0.125 0 6.776 0 13.244-1.316 19.163-3.707l-0.344 0.123c-5.528 2.137-11.924 3.375-18.61 3.375-6.937 0-13.563-1.333-19.636-3.757l0.357 0.126c5.59 2.428 12.101 3.84 18.942 3.84 0.001 0 0.001 0 0.002 0v0zM1008.896 206.592l-172.544-171.52c-1.996-2.046-4.172-3.897-6.51-5.535l-0.146-0.097-3.328-2.048c-1.759-1.132-3.783-2.165-5.91-2.992l-0.234-0.080c-2.526-1.095-5.52-2.064-8.62-2.753l-0.34-0.063c-2.924-0.649-6.283-1.021-9.728-1.021s-6.804 0.372-10.038 1.078l0.31-0.057c-3.574 0.708-6.664 1.592-9.645 2.699l0.429-0.139-6.4 3.328c-2.067 0.853-3.845 1.974-5.396 3.346l0.020-0.018-6.912 4.352-172.544 171.52c-9.271 9.271-15.004 22.078-15.004 36.224 0 28.293 22.936 51.228 51.228 51.228 14.146 0 26.953-5.734 36.224-15.004l85.248-85.248v625.408c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0-625.408l85.248 85.248c9.4 10.31 22.887 16.753 37.88 16.753 28.277 0 51.2-22.923 51.2-51.2 0-15.056-6.499-28.594-16.844-37.963l-0.044-0.039z" />
37
- <glyph unicode="&#xe91b;" glyph-name="parallax" d="M1024 710.4v-480c0-84.831-68.769-153.6-153.6-153.6v0h-503.552c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h503.552c28.277 0 51.2 22.923 51.2 51.2v0 374.272l-206.848-162.048c-8.608-6.795-19.615-10.899-31.58-10.899-3.408 0-6.739 0.333-9.961 0.968l0.325-0.053c-15.112 3.113-27.562 12.54-34.683 25.339l-0.133 0.261-126.72 219.904-128-220.672c-7.202-13.006-19.551-22.416-34.225-25.54l-0.335-0.060c-1.457-0.127-3.152-0.199-4.864-0.199s-3.407 0.072-5.083 0.214l0.219-0.015c-11.945 0.056-22.914 4.193-31.593 11.089l0.105-0.081-205.824 161.792v-374.272c0-28.277 22.923-51.2 51.2-51.2v0c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0c-84.831 0-153.6 68.769-153.6 153.6v0 480c-0.111 1.151-0.174 2.488-0.174 3.84s0.063 2.689 0.187 4.009l-0.013-0.169c0.351 3.037 1.072 5.807 2.125 8.407l-0.077-0.215c1.013 2.987 2.138 5.524 3.458 7.939l-0.13-0.259c1.64 2.754 3.245 5.094 4.982 7.326l-0.118-0.158c2.454 3.213 5.235 5.994 8.342 8.37l0.106 0.078 4.608 3.328 5.12 2.816c6.604 3.549 14.423 5.707 22.728 5.887l0.056 0.001c1.228 0.126 2.654 0.198 4.096 0.198s2.868-0.072 4.273-0.212l-0.177 0.014c3.037-0.351 5.807-1.072 8.407-2.125l-0.215 0.077c2.987-1.013 5.524-2.138 7.939-3.458l-0.259 0.13h1.536l7.168-4.864 241.92-189.44 141.824 246.784c9.029 15.361 25.474 25.509 44.288 25.509s35.259-10.148 44.157-25.269l0.131-0.24 141.824-246.784 241.92 189.44h1.28l7.168 4.864c2.156 1.19 4.693 2.315 7.331 3.223l0.349 0.105c2.385 0.976 5.155 1.697 8.043 2.034l0.149 0.014c1.267 0.134 2.736 0.21 4.224 0.21s2.957-0.076 4.406-0.226l-0.182 0.015c8.018-0.049 15.585-1.934 22.316-5.254l-0.3 0.134 5.12-2.816 4.608-3.328c3.213-2.454 5.994-5.235 8.37-8.342l0.078-0.106c1.619-2.074 3.224-4.414 4.686-6.849l0.178-0.319c1.19-2.156 2.315-4.693 3.223-7.331l0.105-0.349c1.292-2.596 2.274-5.607 2.791-8.775l0.025-0.185c0.111-1.151 0.174-2.488 0.174-3.84s-0.063-2.689-0.187-4.009l0.013 0.169z" />
38
- <glyph unicode="&#xe91c;" glyph-name="particles" horiz-adv-x="1010" d="M878.080 237.056v4.096l-94.208 435.2c0.069 0.423 0.108 0.911 0.108 1.408s-0.039 0.985-0.115 1.46l0.007-0.052c36.629 29.186 59.899 73.792 59.899 123.833 0 87.234-70.718 157.952-157.952 157.952s-157.952-70.718-157.952-157.952c0-0.425 0.002-0.849 0.005-1.274v0.065c0-0.101 0-0.221 0-0.34 0-15.864 2.433-31.161 6.948-45.535l-0.291 1.075-281.088-249.088c-23.858 14.002-52.545 22.272-83.163 22.272-0.013 0-0.026 0-0.039 0h0.002c-94.021 0-170.24-76.219-170.24-170.24s76.219-170.24 170.24-170.24v0c0.207-0.001 0.453-0.001 0.699-0.001 37.1 0 71.373 12.104 99.085 32.579l-0.455-0.321 440.32-162.56c13.692-70.478 74.921-122.958 148.406-122.958 83.417 0 151.040 67.623 151.040 151.040 0 76.713-57.19 140.068-131.26 149.756l-0.762 0.081zM684.288 857.6c0.076 0 0.166 0.001 0.256 0.001 31.529 0 57.088-25.559 57.088-57.088s-25.559-57.088-57.088-57.088c-31.529 0-57.088 25.559-57.088 57.087v0c0 0.076-0.001 0.166-0.001 0.256 0 31.387 25.445 56.832 56.832 56.832 0 0 0 0 0.001 0v0zM100.864 359.936c0.18 38.179 31.171 69.060 69.375 69.060 18.952 0 36.129-7.599 48.65-19.917l-0.009 0.009 3.84-4.096c10.32-12.049 16.61-27.815 16.64-45.050v-0.006c-0.064-16.947-6.041-32.486-15.974-44.673l0.102 0.129-3.84-4.352c-12.538-12.459-29.818-20.16-48.896-20.16-38.293 0-69.34 31.024-69.376 69.309v0.003zM727.296 160.768l-395.52 145.92c5.501 15.884 8.686 34.191 8.704 53.24v0.008c-0.092 27.138-6.51 52.755-17.854 75.484l0.446-0.988 267.776 239.616c25.385-18.72 57.285-29.961 91.809-29.961 0.573 0 1.146 0.003 1.718 0.009l-0.087-0.001h3.328l92.16-424.704c-0.070-0.614-0.11-1.327-0.11-2.048s0.040-1.434 0.117-2.134l-0.008 0.086c-21.923-13.591-39.658-31.982-52.092-53.789l-0.388-0.739zM859.136 37.12c-28.27 0.009-51.184 22.929-51.184 51.2 0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2c0-0.45-0.006-0.899-0.017-1.346l0.001 0.066c-0.715-27.721-23.357-49.92-51.184-49.92-0.006 0-0.011 0-0.017 0h0.001z" />
39
- <glyph unicode="&#xe91d;" glyph-name="preview-window" d="M718.336-64h-564.736c-84.831 0-153.6 68.769-153.6 153.6v0 564.736c0 84.831 68.769 153.6 153.6 153.6v0h355.84c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0h-355.84c-28.277 0-51.2-22.923-51.2-51.2v0-564.736c0-28.277 22.923-51.2 51.2-51.2v0h564.736c28.277 0 51.2 22.923 51.2 51.2v0 354.304c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0-354.304c0-84.831-68.769-153.6-153.6-153.6v0zM820.736 553.472c-0.229-0.001-0.499-0.001-0.769-0.001-111.566 0-202.059 90.224-202.494 201.688v3.882c0 112.26 91.004 203.264 203.264 203.264s203.264-91.004 203.264-203.264v0-3.84c-0.436-111.505-90.929-201.729-202.495-201.729-0.271 0-0.541 0.001-0.811 0.002h0.042zM820.736 857.6c-0.307 0.003-0.669 0.005-1.032 0.005-54.692 0-99.113-43.976-99.831-98.498l-0.001-0.068v-3.84c0-55.706 45.158-100.864 100.864-100.864s100.864 45.158 100.864 100.864v0 3.84c-0.719 54.589-45.14 98.565-99.832 98.565-0.363 0-0.725-0.002-1.087-0.006h0.055z" />
40
- <glyph unicode="&#xe91e;" glyph-name="tables" d="M966.144 960h-908.288c-31.953 0-57.856-25.903-57.856-57.856v0-908.288c0-31.953 25.903-57.856 57.856-57.856v0h908.288c31.953 0 57.856 25.903 57.856 57.856v0 908.288c0 31.953-25.903 57.856-57.856 57.856v0zM418.56 844.288h186.88v-187.136h-186.88zM418.56 541.44h186.88v-186.88h-186.88zM302.848 51.712h-187.136v187.136h187.136zM302.848 354.56h-187.136v186.88h187.136zM302.848 657.152h-187.136v187.136h187.136zM605.44 51.712h-186.88v187.136h186.88zM908.288 51.712h-187.136v187.136h187.136zM908.288 354.56h-187.136v186.88h187.136zM908.288 657.152h-187.136v187.136h187.136z" />
41
- <glyph unicode="&#xe91f;" glyph-name="tabs" d="M972.8 532.48h-921.6c-28.277 0-51.2 22.923-51.2 51.2v0 325.12c0 28.277 22.923 51.2 51.2 51.2v0h921.6c28.277 0 51.2-22.923 51.2-51.2v0-325.12c0-28.277-22.923-51.2-51.2-51.2v0zM102.4 634.88h819.2v222.72h-819.2zM972.8-64h-921.6c-28.277 0-51.2 22.923-51.2 51.2v0 325.12c0 28.277 22.923 51.2 51.2 51.2v0h921.6c28.277 0 51.2-22.923 51.2-51.2v0-325.12c0-28.277-22.923-51.2-51.2-51.2v0zM102.4 38.4h819.2v222.72h-819.2z" />
42
- <glyph unicode="&#xe920;" glyph-name="trustpilot" d="M195.584-39.424l119.808 374.528-315.392 227.328 389.888 2.816 122.112 369.152 119.296-369.152 392.704-2.816-512-369.152-316.416-232.704zM832-36.864l-320 230.144 221.696 61.44 98.304-291.584z" />
43
- <glyph unicode="&#xe921;" glyph-name="twitter-feed" d="M322.048 38.4c386.304 0 597.76 320 597.76 597.76 0 8.96 0 17.92 0 27.136 41.023 30.13 75.596 66.169 103.222 107.268l0.97 1.532c-35.109-16.142-75.839-27.862-118.577-33.081l-1.999-0.199c43.321 26.458 75.94 66.791 91.98 114.721l0.436 1.503c-38.467-23.22-83.226-40.975-130.898-50.732l-2.734-0.468c-38.48 41.26-93.16 66.981-153.847 66.981-116.077 0-210.176-94.099-210.176-210.176 0-17.133 2.050-33.786 5.918-49.729l-0.295 1.437c-174.874 9.249-328.64 92.418-431.795 218.582l-0.845 1.066c-18.199-30.472-28.959-67.211-28.959-106.463 0-72.791 37.004-136.939 93.226-174.659l0.757-0.478c-34.967 0.923-67.551 10.298-96.041 26.144l1.065-0.544v-2.56c0.591-100.815 72.070-184.766 167.084-204.562l1.364-0.238c-15.949-4.402-34.263-6.932-53.168-6.932-1.018 0-2.034 0.007-3.049 0.022l0.153-0.002c-14.1 0.109-27.804 1.501-41.090 4.067l1.41-0.227c27.752-84.096 104.81-144.061 196.135-145.917l0.217-0.003c-70.634-55.776-160.879-89.566-259.006-89.856h-0.066c-0.057 0-0.125 0-0.193 0-17.97 0-35.702 1.023-53.139 3.014l2.132-0.198c90.704-59.076 201.703-94.209 320.908-94.209 0.401 0 0.801 0 1.202 0.001h-0.062z" />
44
- <glyph unicode="&#xe922;" glyph-name="unfold" d="M1024 448c0-28.277-22.923-51.2-51.2-51.2v0h-409.6v-409.6c0-28.277-22.923-51.2-51.2-51.2s-51.2 22.923-51.2 51.2v0 409.6h-409.6c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h409.6v409.6c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0-409.6h409.6c28.277 0 51.2-22.923 51.2-51.2v0z" />
45
- <glyph unicode="&#xe923;" glyph-name="whatsapp-chat" horiz-adv-x="1019" d="M870.4 811.264c-91.866 92.1-218.903 149.081-359.249 149.081-280.225 0-507.392-227.167-507.392-507.392 0-93.548 25.317-181.184 69.472-256.429l-1.295 2.388-71.936-262.912 268.8 70.656c70.087-38.943 153.7-61.891 242.669-61.952h0.019c280.104 0.348 507.038 227.496 507.038 507.648 0 140.159-56.801 267.051-148.639 358.914l0.001-0.001zM512 30.464v0c-0.009 0-0.019 0-0.029 0-79.439 0-153.744 21.982-217.163 60.196l1.896-1.060-15.36 8.96-159.744-41.984 42.752 155.648-9.984 15.872c-40.423 63.543-64.423 140.968-64.423 223.998 0 232.861 188.771 421.632 421.632 421.632s421.632-188.771 421.632-421.632c0-232.442-188.093-420.953-420.376-421.63h-0.065zM742.144 347.392c12.544-6.4 21.248-9.472 24.32-14.848l-0.089 0.633c1.001-5.888 1.523-11.939 1.523-18.111 0-15.434-3.26-30.107-8.858-42.682-10.496-29.696-61.184-56.832-85.504-60.416l1.039 0.153c-9.827-1.745-19.943-2.655-30.271-2.655-18.072 0-35.494 2.787-50.639 7.622l-5.361 1.405c-24.577 7.491-48.624 16.199-67.087 24.195-126.976 55.040-210.176 183.040-216.576 191.488l0.409-0.543c-28.693 36.665-47.273 81.626-51.609 131.615l0.001-0.1c-0.009 0.663-0.014 1.327-0.014 1.992 0 40.677 17.094 77.361 44.557 103.324l0.043 0.050c8.344 9.44 20.436 15.491 34.005 15.822h24.32c7.68-0.512 17.92 3.84 28.416-21.76s35.84-87.808 39.168-94.208l-0.063 0.13c1.784-3.361 2.795-7.196 2.795-11.266s-1.011-7.905-2.732-11.136l-0.859-1.458c-9.382-14.874-19.843-28.999-30.885-41.806-5.632-6.912-13.056-13.056-5.632-25.6l0.97-1.764c18.932-31.885 42.368-60.781 69.686-86.044l-0.339 0.297c29.389-26.221 63.303-47.477 102.739-63.273 12.8-6.4 19.968-5.376 27.392 3.072s31.744 36.864 40.192 49.664c8.448 12.8 17.152 10.496 28.672 6.4s73.728-34.816 86.528-41.216z" />
46
- <glyph unicode="&#xe924;" glyph-name="yelp-reviews" horiz-adv-x="784" d="M289.792 301.056c23.635 7.12 40.616 28.539 40.96 53.976v0.040c0.146 1.563 0.23 3.38 0.23 5.217 0 24.667-15.038 45.822-36.446 54.797l-0.392 0.146-46.336 18.944c-168.192 69.376-168.704 69.376-179.2 69.376-0.438 0.013-0.954 0.021-1.471 0.021-18.86 0-35.338-10.197-44.222-25.379l-0.131-0.242c-20.736-33.024-25.6-121.856-19.712-171.008 1.117-17.27 5.247-33.305 11.871-47.972l-0.351 0.868c8.084-16.521 24.361-27.919 43.393-28.923l0.127-0.005h1.28c9.728 0 25.6 4.608 163.328 49.408l67.072 20.736zM370.176 267.52c-6.839 2.977-14.805 4.708-23.176 4.708-18.048 0-34.216-8.050-45.109-20.756l-0.067-0.080-32-37.888c-117.504-137.984-117.76-139.008-121.6-149.504-1.922-5.083-3.035-10.96-3.035-17.096 0-1.642 0.080-3.266 0.235-4.867l-0.016 0.203c1.159-11.353 5.708-21.468 12.604-29.512l-0.060 0.072c27.136-32.768 141.312-76.8 194.048-76.8 1.686-0.134 3.65-0.211 5.632-0.211s3.946 0.077 5.89 0.227l-0.258-0.016c18.8 2.767 34.093 15.418 40.586 32.417l0.118 0.351c3.584 10.24 3.584 11.008 4.096 173.568 0 0 0 64.768 0 68.096 0.032 0.711 0.050 1.546 0.050 2.384 0 24.854-16.026 45.964-38.308 53.562l-0.398 0.118zM765.184 240.384c-8.704 6.4-9.216 6.656-163.584 57.344l-64.768 22.272c-5.741 2.138-12.373 3.375-19.295 3.375-18.685 0-35.263-9.017-45.622-22.936l-0.108-0.151c-9.107-10.384-14.663-24.080-14.663-39.074 0-11.496 3.266-22.229 8.921-31.322l-0.146 0.252 25.6-42.496c94.976-153.6 96.256-155.136 104.704-162.048 8.213-6.388 18.672-10.242 30.032-10.242 0.152 0 0.304 0.001 0.455 0.002h-0.023c0.093-0.001 0.203-0.001 0.313-0.001 7.659 0 14.943 1.601 21.537 4.488l-0.346-0.135c42.752 16.896 128 125.952 135.168 171.52 0.555 2.829 0.872 6.083 0.872 9.41 0 16.285-7.603 30.795-19.453 40.172l-0.107 0.082zM512.512 371.2h3.584c0.924-0.176 1.986-0.277 3.072-0.277s2.148 0.101 3.178 0.294l-0.106-0.017c7.424 2.816 23.040 6.656 47.872 12.544v0c175.872 42.496 176.896 43.264 186.624 49.664 13.486 9.356 22.205 24.759 22.205 42.199 0 1.547-0.069 3.077-0.203 4.589l0.014-0.195s0 2.304 0 3.072c-4.864 47.104-81.152 159.488-121.6 179.2-6.976 3.795-15.277 6.026-24.099 6.026-10.577 0-20.405-3.207-28.564-8.702l0.183 0.116c-9.216-6.144-9.216-6.144-105.472-137.728l-40.704-55.296c-7.512-9.483-12.050-21.619-12.050-34.816 0-12.296 3.941-23.672 10.628-32.934l-0.114 0.166c10.945-16.98 29.76-28.063 51.164-28.063 1.544 0 3.075 0.058 4.59 0.171l-0.202-0.012zM388.864 921.088c-5.462 18.62-20.382 32.775-39.068 37.051l-0.356 0.069c-48.64 11.776-219.136-35.84-253.44-71.424-9.96-9.364-16.163-22.625-16.163-37.334 0-4.471 0.573-8.808 1.65-12.942l-0.079 0.356c-0.053-0.461-0.083-0.995-0.083-1.536s0.030-1.075 0.088-1.601l-0.006 0.065c4.864-9.984 161.024-256 208.64-330.752 19.968-32.256 41.984-48.64 65.024-48.64 6.062 0.065 11.863 1.090 17.287 2.931l-0.391-0.115c29.952 8.96 43.776 37.12 41.728 83.712-2.56 58.88-22.784 362.24-25.6 380.16z" />
47
- <glyph unicode="&#xe925;" glyph-name="banner" d="M1015.808 121.6l-296.192 484.864c-9.972 15.491-27.129 25.605-46.648 25.605-0.25 0-0.5-0.002-0.749-0.005h0.038c-0.163 0.002-0.356 0.003-0.549 0.003-19.641 0-36.923-10.1-46.935-25.389l-0.131-0.214-284.672-465.664h-198.144l122.88 201.216 45.056-73.216c9.303-15.221 25.714-25.298 44.5-25.599l0.044-0.001h-1.536c0.133-0.001 0.291-0.002 0.449-0.002 18.36 0 34.529 9.383 43.973 23.615l0.122 0.195c5.033 7.788 8.025 17.305 8.025 27.52s-2.992 19.732-8.147 27.722l0.122-0.202-86.016 140.544c-10.077 16.22-27.796 26.859-48 26.859s-37.923-10.639-47.861-26.62l-0.139-0.239-207.104-340.992c-4.825-7.973-7.681-17.605-7.681-27.904s2.855-19.931 7.818-28.148l-0.137 0.244c9.919-16.953 28.038-28.16 48.775-28.16 0.043 0 0.085 0 0.128 0h911.609c0.028 0 0.061 0 0.093 0 20.463 0 38.33 11.116 47.893 27.638l0.142 0.266c4.669 7.78 7.43 17.168 7.43 27.2 0 10.719-3.152 20.702-8.58 29.073l0.127-0.208zM455.424 140.8l216.32 353.792 216.576-353.792zM332.8 870.4c-85.127-0.725-153.856-69.902-153.856-155.131 0-85.679 69.457-155.136 155.136-155.136s155.136 69.457 155.136 155.136c0 0.088 0 0.176 0 0.264v-0.014c-0.725 85.693-70.36 154.88-156.155 154.88-0.092 0-0.184 0-0.276 0h0.014zM332.8 665.6c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2c28.277 0 51.2-22.923 51.2-51.2v0c0-0.076 0.001-0.166 0.001-0.256 0-28.277-22.923-51.2-51.2-51.2 0 0 0 0-0.001 0v0z" />
48
- <glyph unicode="&#xe926;" glyph-name="blog" d="M964.096 900.096c-37.044 36.957-88.173 59.809-144.64 59.809s-107.596-22.852-144.644-59.813l-590.332-590.076c-6.357-6.46-11.016-14.609-13.24-23.713l-0.072-0.351-69.632-286.72c-0.897-3.586-1.412-7.703-1.412-11.94 0-14.13 5.724-26.924 14.98-36.188v0c9.226-9.28 21.982-15.043 36.084-15.104h0.012c0.030 0 0.065 0 0.101 0 4.241 0 8.351 0.561 12.261 1.612l-0.329-0.075 106.24 25.6h1.792l179.2 43.52c9.455 2.296 17.604 6.955 24.071 13.319l-0.007-0.007 588.8 590.336c37.339 37.107 60.45 88.494 60.45 145.28 0 56.403-22.801 107.481-59.689 144.519l0.007-0.007zM311.808 103.168l-135.936-33.024-41.472 42.24 32.768 135.424 482.816 481.792c-0.41-2.383-0.644-5.128-0.644-7.928 0-13.735 5.634-26.154 14.716-35.073l116.231-116.231zM891.648 683.008l-39.168-39.168-116.224 116.224c-9.24 9.121-21.943 14.755-35.961 14.755-2.304 0-4.572-0.152-6.796-0.447l0.261 0.028 53.248 53.248c18.1 16.447 42.252 26.517 68.757 26.517 56.554 0 102.4-45.846 102.4-102.4 0-26.504-10.070-50.657-26.592-68.841l0.075 0.084z" />
49
- <glyph unicode="&#xe927;" glyph-name="button" d="M512-64c-282.77 0-512 229.23-512 512s229.23 512 512 512c282.77 0 512-229.23 512-512v0c0-282.77-229.23-512-512-512v0zM512 857.6c-226.216 0-409.6-183.384-409.6-409.6s183.384-409.6 409.6-409.6c226.216 0 409.6 183.384 409.6 409.6v0c0 226.216-183.384 409.6-409.6 409.6v0zM668.16 240.64h-312.32c-28.277 0-51.2 22.923-51.2 51.2v0 312.32c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0-261.12h209.92v209.92h-104.96c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h156.16c28.277 0 51.2-22.923 51.2-51.2v0-312.32c0-28.277-22.923-51.2-51.2-51.2v0z" />
50
- <glyph unicode="&#xe928;" glyph-name="carousel" d="M378.112 69.888c-14.669 0.259-27.859 6.382-37.366 16.117l-0.010 0.011-325.632 322.56c-9.050 9.228-14.636 21.882-14.636 35.84s5.586 26.612 14.644 35.848l-0.008-0.008 325.632 322.56c9.606 9.264 22.697 14.971 37.12 14.971s27.514-5.707 37.136-14.987l-0.016 0.015c9.277-9.267 15.016-22.075 15.016-36.224s-5.739-26.957-15.016-36.224v0l-288.768-285.952 289.536-287.488c9.277-9.267 15.016-22.075 15.016-36.224s-5.739-26.957-15.016-36.224v0c-9.56-9.041-22.496-14.6-36.73-14.6-0.317 0-0.633 0.003-0.949 0.008l0.047-0.001zM645.888 69.888c-0.042 0-0.092 0-0.141 0-14.23 0-27.163 5.555-36.748 14.616l0.025-0.024c-9.277 9.267-15.016 22.075-15.016 36.224s5.739 26.957 15.016 36.224v0l288.768 287.488-289.536 287.488c-9.277 9.267-15.016 22.075-15.016 36.224s5.739 26.957 15.016 36.224v0c9.58 9.322 22.679 15.071 37.12 15.071s27.54-5.749 37.132-15.083l-0.012 0.012 326.4-324.096c9.050-9.228 14.636-21.882 14.636-35.84s-5.586-26.612-14.644-35.848l0.008 0.008-325.632-322.56c-9.517-9.746-22.707-15.869-37.328-16.127l-0.048-0.001z" />
51
- <glyph unicode="&#xe929;" glyph-name="contact-form" d="M972.8 622.592c-28.277 0-51.2-22.923-51.2-51.2v0-379.392c0-28.277-22.923-51.2-51.2-51.2v0h-716.8c-28.277 0-51.2 22.923-51.2 51.2v0 500.736l377.344-307.2c8.717-7.152 19.977-11.495 32.251-11.52h0.005c0.064 0 0.14 0 0.216 0 12.172 0 23.351 4.247 32.138 11.341l-0.097-0.076 428.544 348.16c4.477 3.717 8.294 8.022 11.387 12.835l0.133 0.221 23.808 23.296c9.508 9.304 15.403 22.267 15.403 36.606 0 12.62-4.566 24.174-12.136 33.1l0.061-0.074c-9.453 11.162-23.478 18.2-39.146 18.2-0.548 0-1.094-0.009-1.637-0.026l0.079 0.002h-842.752c-70.692 0-128-57.308-128-128v0-537.6c0-84.831 68.769-153.6 153.6-153.6v0h716.8c84.831 0 153.6 68.769 153.6 153.6v0 379.392c0 28.277-22.923 51.2-51.2 51.2v0zM837.12 755.2l-325.12-263.936-323.84 263.936z" />
52
- <glyph unicode="&#xe92a;" glyph-name="countdown" d="M1024 712.704v-619.52c0-70.692-57.308-128-128-128v0h-768c-70.692 0-128 57.308-128 128v0 619.52c0 70.692 57.308 128 128 128v0h136.192v42.496c0 28.277 22.923 51.2 51.2 51.2v0c0.012 0 0.026 0 0.041 0 14.192 0 27.035-5.774 36.309-15.102l0.002-0.002c9.177-9.25 14.849-21.991 14.849-36.056 0-0.104 0-0.208-0.001-0.312v0.016-42.24h290.816v42.24c0 0.012 0 0.026 0 0.041 0 28.277 22.923 51.2 51.2 51.2 14.085 0 26.842-5.687 36.098-14.891l-0.002 0.002c9.28-9.226 15.043-21.982 15.104-36.084v-192.78c0-28.277-22.923-51.2-51.2-51.2v0 0c-28.277 0-51.2 22.923-51.2 51.2v0 47.872h-290.816v-48.128c0-28.277-22.923-51.2-51.2-51.2s-51.2 22.923-51.2 51.2v0 48.128h-136.192c-14.138 0-25.6-11.462-25.6-25.6v0-619.52c0-14.138 11.462-25.6 25.6-25.6v0h768c14.138 0 25.6 11.462 25.6 25.6v0 619.52c0 14.138-11.462 25.6-25.6 25.6v0h-43.008c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h43.008c70.692 0 128-57.308 128-128v0zM315.392 407.040c-28.277 0-51.2 22.923-51.2 51.2v0 0c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0c0-28.277-22.923-51.2-51.2-51.2v0zM315.392 207.36c-28.277 0-51.2 22.923-51.2 51.2v0 1.28c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2c0-28.277-22.923-51.2-51.2-51.2v0zM512 406.784c-13.641 0.127-25.986 5.569-35.087 14.351l0.015-0.015c-9.501 9.308-15.391 22.27-15.391 36.608 0 28.294 22.937 51.231 51.231 51.231 13.956 0 26.609-5.581 35.849-14.632l-0.009 0.008c9.819-9.347 15.926-22.515 15.926-37.11 0-13.963-5.59-26.621-14.653-35.858l0.008 0.008c-9.227-9.048-21.88-14.633-35.837-14.633-0.721 0-1.439 0.015-2.153 0.044l0.102-0.003zM512 206.848c-13.641 0.127-25.986 5.569-35.087 14.351l0.015-0.015v1.28c-7.765 8.927-12.498 20.671-12.498 33.52 0 28.277 22.923 51.2 51.2 51.2 12.018 0 23.069-4.141 31.804-11.073l-0.106 0.081c10.492-9.416 17.062-23.019 17.062-38.158 0-28.277-22.923-51.2-51.2-51.2-0.418 0-0.836 0.005-1.251 0.015l0.062-0.001zM708.608 407.040c-28.277 0-51.2 22.923-51.2 51.2v0 0c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2c0-28.277-22.923-51.2-51.2-51.2v0zM708.608 207.36c-28.277 0-51.2 22.923-51.2 51.2v0 1.28c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2c0-28.277-22.923-51.2-51.2-51.2v0z" />
53
- <glyph unicode="&#xe92b;" glyph-name="counter" horiz-adv-x="867" d="M552.192 211.968c-0.045 0-0.097 0-0.15 0-13.146 0-25.135 4.954-34.201 13.098l0.047-0.042-118.528 106.752c-10.365 9.381-16.859 22.872-16.896 37.881v215.815c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0-193.024l102.4-91.392c10.315-9.401 16.763-22.891 16.763-37.888 0-28.23-22.847-51.124-51.060-51.2h-0.007zM484.864 800.512v57.088h113.408c28.277 0 51.2 22.923 51.2 51.2s-22.923 51.2-51.2 51.2v0h-329.216c-28.277 0-51.2-22.923-51.2-51.2s22.923-51.2 51.2-51.2v0h113.408v-57.088c-216.459-26.479-382.464-209.169-382.464-430.631 0-239.506 194.158-433.664 433.664-433.664s433.664 194.158 433.664 433.664c0 221.462-166.006 404.152-380.369 430.422l-2.095 0.209zM433.664 38.4c-0.076 0-0.166 0-0.256 0-183.093 0-331.52 148.427-331.52 331.52s148.427 331.52 331.52 331.52c183.093 0 331.52-148.427 331.52-331.52 0-0.090 0-0.18 0-0.27v0.014c-0.868-182.602-148.662-330.396-331.181-331.264h-0.083z" />
54
- <glyph unicode="&#xe92c;" glyph-name="dual-heading" d="M642.56 499.2h327.68c29.691 0 53.76-24.069 53.76-53.76s-24.069-53.76-53.76-53.76h-327.68c-29.691 0-53.76 24.069-53.76 53.76s24.069 53.76 53.76 53.76zM53.76 499.2h327.68c29.691 0 53.76-24.069 53.76-53.76s-24.069-53.76-53.76-53.76h-327.68c-29.691 0-53.76 24.069-53.76 53.76s24.069 53.76 53.76 53.76z" />
55
- <glyph unicode="&#xe92d;" glyph-name="fancy-text" horiz-adv-x="401" d="M398.080 16.128c2.095-5.875 3.306-12.652 3.306-19.712 0-33.359-27.037-60.404-60.393-60.416h-278.273c-0.51-0.015-1.111-0.024-1.713-0.024-26.6 0-49.252 16.904-57.8 40.556l-0.135 0.428c-1.923 5.656-3.034 12.171-3.034 18.945 0 33.405 26.996 60.504 60.362 60.671h80.144v782.848h-76.8c-0.733-0.031-1.593-0.049-2.457-0.049-26.752 0-49.527 17.027-58.080 40.835l-0.135 0.43c-1.932 5.655-3.047 12.169-3.047 18.944 0 33.358 27.035 60.402 60.389 60.416h278.017c0.487 0.014 1.060 0.022 1.635 0.022 26.406 0 48.953-16.52 57.87-39.789l0.143-0.424c2.086-5.876 3.292-12.654 3.292-19.713 0-33.405-26.997-60.505-60.364-60.671h-80.144v-782.848h76.8c0.686 0.027 1.491 0.043 2.3 0.043 26.51 0 49.131-16.651 57.975-40.064l0.141-0.426z" />
56
- <glyph unicode="&#xe92e;" glyph-name="google-maps" horiz-adv-x="826" d="M412.928 380.416c-0.004 0-0.008 0-0.013 0-49.482 0-94.279 20.055-126.707 52.48v0c-32.433 32.43-52.493 77.232-52.493 126.72 0 98.969 80.231 179.2 179.2 179.2s179.2-80.231 179.2-179.2c0-98.965-80.223-179.193-179.186-179.2h-0.001zM358.656 505.344c13.895-13.878 33.081-22.46 54.272-22.46 42.392 0 76.761 34.346 76.8 76.729v0.004c-0.019 21.2-8.625 40.386-22.527 54.271l-0.001 0.001c-14.056 13.52-33.191 21.846-54.272 21.846s-40.216-8.327-54.297-21.871l0.025 0.024c-13.878-13.895-22.46-33.081-22.46-54.272s8.583-40.377 22.461-54.273l-0.001 0.001zM825.6 535.040c-14.080-340.224-348.16-566.784-384-588.8l-5.632-3.328-5.632-2.56-4.608-1.536c-0.654-0.112-1.408-0.176-2.176-0.176s-1.522 0.064-2.255 0.187l0.079-0.011c-2.847-0.651-6.116-1.025-9.472-1.025s-6.625 0.373-9.768 1.081l0.296-0.056c-0.654-0.112-1.408-0.176-2.176-0.176s-1.522 0.064-2.255 0.187l0.079-0.011-4.608 1.536c-2.054 0.622-3.836 1.405-5.499 2.37l0.123-0.066-3.584 2.048-2.304 1.536c-25.088 15.36-245.504 165.376-339.968 399.36-6.144 15.104-11.776 30.72-16.64 46.080-1.494 4.592-2.356 9.875-2.356 15.36 0 28.306 22.946 51.252 51.252 51.252 22.821 0 42.158-14.915 48.795-35.529l0.101-0.363c4.096-12.8 8.704-25.6 13.824-38.4 67.328-166.4 214.272-288.768 275.712-334.080 78.592 58.368 300.032 244.48 310.272 489.216 0.060 2.287 0.095 4.98 0.095 7.68 0 171.495-138.905 310.546-310.344 310.784h-0.023c-171.462-0.238-310.367-139.289-310.367-310.784 0-2.701 0.034-5.393 0.103-8.077l-0.008 0.397c0.028-0.638 0.045-1.386 0.045-2.138 0-27.212-21.229-49.466-48.029-51.103l-0.144-0.007h-3.072c-0.012 0-0.027 0-0.041 0-27.557 0-50.029 21.77-51.156 49.050l-0.003 0.102c-0.102 3.432-0.161 7.47-0.161 11.52 0 228.123 184.758 413.094 412.8 413.44h0.033c228.075-0.346 412.833-185.317 412.833-413.44 0-4.051-0.058-8.089-0.174-12.112l0.013 0.592z" />
57
- <glyph unicode="&#xe92f;" glyph-name="heading" horiz-adv-x="903" d="M903.68 899.84v-91.136c0.006-0.326 0.010-0.711 0.010-1.097 0-27.118-17.496-50.15-41.815-58.423l-0.435-0.128c-5.359-1.725-11.524-2.719-17.921-2.719-33.243 0-60.215 26.848-60.415 60.044v33.043h-271.104v-782.848h76.8c0.458 0.012 0.997 0.019 1.538 0.019 26.498 0 49.143-16.5 58.22-39.786l0.146-0.425c2.087-5.878 3.293-12.657 3.293-19.717 0-33.226-26.708-60.214-59.827-60.666h-277.803c-0.458-0.012-0.997-0.019-1.538-0.019-26.498 0-49.143 16.5-58.22 39.786l-0.146 0.425c-2.086 5.876-3.292 12.654-3.292 19.713 0 33.405 26.997 60.505 60.364 60.671h80.144v782.848h-271.104v-33.024c-0.2-33.215-27.172-60.063-60.415-60.063-6.397 0-12.562 0.994-18.349 2.837l0.428-0.118c-24.754 8.402-42.25 31.433-42.25 58.551 0 0.386 0.004 0.771 0.011 1.155l-0.001-0.058v91.136c0.145 33.257 27.139 60.16 60.415 60.16 0 0 0 0 0.001 0h782.848c0 0 0 0 0.001 0 33.277 0 60.27-26.903 60.415-60.146v-0.014z" />
58
- <glyph unicode="&#xe930;" glyph-name="icon-list" d="M972.8 739.072h-660.736c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h660.736c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0zM185.6 790.528c0-0.076 0-0.166 0-0.256 0-51.323-41.605-92.928-92.928-92.928s-92.928 41.605-92.928 92.928c0 51.323 41.605 92.928 92.928 92.928v0c51.175-0.144 92.638-41.518 92.928-92.644v-0.028zM972.8 391.168h-660.736c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h660.736c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0zM185.344 442.368c0-51.181-41.491-92.672-92.672-92.672s-92.672 41.491-92.672 92.672c0 51.181 41.491 92.672 92.672 92.672s92.672-41.491 92.672-92.672zM972.8 43.008h-660.736c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h660.736c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0zM185.344 94.208c0-51.181-41.491-92.672-92.672-92.672s-92.672 41.491-92.672 92.672c0 51.181 41.491 92.672 92.672 92.672s92.672-41.491 92.672-92.672z" />
59
- <glyph unicode="&#xe931;" glyph-name="image-button" d="M972.8 468.48c28.277 0 51.2 22.923 51.2 51.2v0 222.72c0 84.831-68.769 153.6-153.6 153.6v0h-716.8c-84.831 0-153.6-68.769-153.6-153.6v0-584.192c0-84.831 68.769-153.6 153.6-153.6v0h742.4c70.692 0 128 57.308 128 128v0 144.128c0.002 0.141 0.002 0.307 0.002 0.474 0 6.282-1.223 12.278-3.444 17.764l0.114-0.318v2.048c-1.215 2.988-2.503 5.514-3.974 7.915l0.134-0.235c-1.859 2.572-3.706 4.826-5.678 6.962l0.046-0.050-316.928 323.84c-9.193 9.374-21.948 15.226-36.071 15.36h-0.025c-14.213-0.161-27.082-5.786-36.631-14.869l0.023 0.021-508.928-508.16c-6.393 8.45-10.24 19.136-10.24 30.72v0 584.192c0 28.277 22.923 51.2 51.2 51.2v0h716.8c28.277 0 51.2-22.923 51.2-51.2v0-222.72c0-28.277 22.923-51.2 51.2-51.2v0zM657.152 527.104l264.448-271.36v-123.136c0-14.138-11.462-25.6-25.6-25.6v0h-659.2zM434.688 590.080c0-56.554-45.846-102.4-102.4-102.4s-102.4 45.846-102.4 102.4c0 56.554 45.846 102.4 102.4 102.4s102.4-45.846 102.4-102.4z" />
60
- <glyph unicode="&#xe932;" glyph-name="image-scroll" horiz-adv-x="624" d="M311.808-64c-172.148 0.146-311.662 139.66-311.808 311.794v400.398c0 172.207 139.601 311.808 311.808 311.808s311.808-139.601 311.808-311.808v0-400.384c-0.291-172.090-139.719-311.517-311.78-311.808h-0.028zM311.808 857.6c-115.594-0.146-209.262-93.814-209.408-209.394v-400.398c0-115.653 93.755-209.408 209.408-209.408s209.408 93.755 209.408 209.408v0 400.384c-0.146 115.594-93.814 209.262-209.394 209.408h-0.014zM311.808 488.704c-28.277 0-51.2 22.923-51.2 51.2v0 102.4c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0-102.4c0-28.277-22.923-51.2-51.2-51.2v0z" />
61
- <glyph unicode="&#xe933;" glyph-name="image-separator" d="M870.4 24.576h-716.8c-84.831 0-153.6 68.769-153.6 153.6v0 399.104c0 84.831 68.769 153.6 153.6 153.6v0h66.048c0.032 0 0.069 0 0.106 0 19.672 0 36.753 11.095 45.327 27.368l0.134 0.28 16.384 29.184c26.159 49.501 77.3 82.664 136.189 82.688h190.979c58.892-0.024 110.033-33.187 135.789-81.853l0.403-0.835 15.104-29.184c8.708-16.553 25.789-27.648 45.462-27.648 0.037 0 0.075 0 0.112 0h64.762c84.831 0 153.6-68.769 153.6-153.6v0-399.104c0-84.831-68.769-153.6-153.6-153.6v0zM153.6 628.48c-28.277 0-51.2-22.923-51.2-51.2v0-399.104c0-28.277 22.923-51.2 51.2-51.2v0h716.8c28.277 0 51.2 22.923 51.2 51.2v0 399.104c0 28.277-22.923 51.2-51.2 51.2v0h-66.048c-58.892 0.024-110.033 33.187-135.789 81.853l-0.403 0.835-15.36 29.184c-8.685 16.51-25.698 27.589-45.304 27.648h-190.984c-19.614-0.059-36.627-11.138-45.178-27.368l-0.134-0.28-15.36-29.184c-26.159-49.501-77.3-82.664-136.189-82.688h-0.003zM512 189.696c-123.005 0-222.72 99.715-222.72 222.72s99.715 222.72 222.72 222.72c123.005 0 222.72-99.715 222.72-222.72 0-0.090 0-0.18 0-0.27v0.014c-0.146-122.895-99.805-222.464-222.72-222.464 0 0 0 0 0 0v0zM512 532.48c-66.451 0-120.32-53.869-120.32-120.32s53.869-120.32 120.32-120.32c66.451 0 120.32 53.869 120.32 120.32v0c-0.145 66.392-53.928 120.175-120.306 120.32h-0.014z" />
62
- <glyph unicode="&#xe934;" glyph-name="lottie-animations-fill" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512v0c0 282.77-229.23 512-512 512v0zM815.104 697.856c-1.28-25.6-22.016-43.52-54.784-43.52-0.117 0.001-0.256 0.001-0.395 0.001-21.459 0-41.11-7.743-56.311-20.587l0.129 0.106c-4.444-3.303-8.369-6.66-12.054-10.261l0.022 0.021c-29.226-26.509-54.608-56.449-75.742-89.375l-1.058-1.761c-12.544-19.2-25.6-40.448-40.704-68.096l-19.456-35.072c-9.472-17.664-19.456-35.328-29.44-52.992-7.424-13.568-15.36-26.88-23.040-39.936-11.008-16.896-23.808-37.12-38.912-57.088-27.040-37.641-58.962-69.645-95.295-95.93l-1.217-0.838c-27.86-20.498-62.85-32.803-100.714-32.803-1.223 0-2.443 0.013-3.66 0.038l0.182-0.003c-0.69-0.030-1.5-0.047-2.313-0.047-15.781 0-30.073 6.375-40.442 16.689l0.002-0.002c-6.884 7.419-11.108 17.39-11.108 28.348 0 1.015 0.036 2.021 0.107 3.018l-0.008-0.134c1.28 25.6 22.016 43.52 54.784 43.52 21.567 0.154 41.304 7.861 56.728 20.602l-0.152-0.122c4.444 3.303 8.369 6.66 12.054 10.261l-0.022-0.021c29.226 26.509 54.608 56.449 75.742 89.375l1.058 1.761c12.544 19.2 25.6 40.448 40.704 67.84l3.072 5.12c5.376 10.24 11.008 20.224 16.384 30.208 9.472 17.664 19.456 35.328 29.44 52.992 7.424 13.568 15.36 27.136 23.040 39.936 11.008 17.152 23.808 37.12 38.912 57.088 27.107 37.585 59.019 69.578 95.296 95.926l1.216 0.842c27.719 20.5 62.576 32.812 100.308 32.812 1.366 0 2.728-0.016 4.086-0.048l-0.202 0.004c0.84 0.044 1.823 0.069 2.811 0.069 15.535 0 29.628-6.178 39.954-16.21l-0.014 0.013c6.877-7.382 11.098-17.317 11.098-28.238 0-0.963-0.033-1.919-0.097-2.866l0.007 0.128z" />
63
- <glyph unicode="&#xe935;" glyph-name="lottie-animations-outline" d="M512-64c-282.77 0-512 229.23-512 512s229.23 512 512 512c282.77 0 512-229.23 512-512v0c0-282.77-229.23-512-512-512v0zM512 857.6c-226.216 0-409.6-183.384-409.6-409.6s183.384-409.6 409.6-409.6c226.216 0 409.6 183.384 409.6 409.6v0c0 226.216-183.384 409.6-409.6 409.6v0zM739.328 621.312c-1.926-25.559-23.137-45.566-49.021-45.566-1.759 0-3.497 0.092-5.208 0.273l0.213-0.018c-11.454-0.008-21.934-4.17-30.017-11.062l0.065 0.054c-2.564-1.895-4.824-3.911-6.886-6.116l-0.026-0.028c-19.643-17.531-36.584-37.485-50.523-59.526l-0.677-1.146c-8.704-13.312-17.664-27.904-27.904-46.336l-13.568-25.6c-6.656-12.288-13.568-25.6-20.736-37.376s-10.752-18.944-16.384-27.904l-3.328-5.12c-6.912-11.008-15.104-23.808-25.6-36.096-20.020-27.622-43.546-51.148-70.265-70.543l-0.903-0.625c-21.303-15.57-47.891-25.092-76.679-25.598l-0.121-0.002h-4.096c-16.134 0.135-30.693 6.766-41.211 17.403l-0.005 0.005c-7.215 8.028-11.628 18.702-11.628 30.406 0 1.102 0.039 2.194 0.116 3.276l-0.008-0.145c1.536 25.904 22.918 46.329 49.071 46.329 1.742 0 3.462-0.091 5.157-0.267l-0.212 0.018c11.347 0.187 21.695 4.314 29.771 11.069l-0.075-0.061c2.564 1.895 4.824 3.911 6.886 6.116l0.026 0.028c19.643 17.531 36.584 37.485 50.523 59.526l0.677 1.146c9.472 14.336 18.432 29.184 27.904 46.336l2.048 3.584 6.144 11.52 5.376 9.472c6.656 12.288 13.568 25.6 20.736 37.376s10.496 18.944 16.384 28.16 16.128 25.6 27.904 40.96c20.013 27.628 43.54 51.155 70.265 70.544l0.903 0.624c21.859 16.026 49.289 25.645 78.966 25.645 1.219 0 2.434-0.016 3.645-0.048l-0.179 0.004c15.958-0.22 30.328-6.838 40.695-17.399l0.009-0.009c7.352-8.027 11.858-18.768 11.858-30.561 0-0.957-0.030-1.906-0.088-2.848l0.006 0.129z" />
64
- <glyph unicode="&#xe936;" glyph-name="media-grid" d="M384 524.8h-332.8c-28.277 0-51.2 22.923-51.2 51.2v0 332.8c0 28.277 22.923 51.2 51.2 51.2v0h332.8c28.277 0 51.2-22.923 51.2-51.2v0-332.8c0-28.277-22.923-51.2-51.2-51.2v0zM102.4 627.2h230.4v230.4h-230.4zM384-64h-332.8c-28.277 0-51.2 22.923-51.2 51.2v0 332.8c0 28.277 22.923 51.2 51.2 51.2v0h332.8c28.277 0 51.2-22.923 51.2-51.2v0-332.8c0-28.277-22.923-51.2-51.2-51.2v0zM102.4 38.4h230.4v230.4h-230.4zM972.8 524.8h-332.8c-28.277 0-51.2 22.923-51.2 51.2v0 332.8c0 28.277 22.923 51.2 51.2 51.2v0h332.8c28.277 0 51.2-22.923 51.2-51.2v0-332.8c0-28.277-22.923-51.2-51.2-51.2v0zM691.2 627.2h230.4v230.4h-230.4zM972.8-64h-332.8c-28.277 0-51.2 22.923-51.2 51.2v0 332.8c0 28.277 22.923 51.2 51.2 51.2v0h332.8c28.277 0 51.2-22.923 51.2-51.2v0-332.8c0-28.277-22.923-51.2-51.2-51.2v0zM691.2 38.4h230.4v230.4h-230.4z" />
65
- <glyph unicode="&#xe937;" glyph-name="modal-box" horiz-adv-x="1025" d="M751.275-64.769h-589.537c-0.381-0.003-0.831-0.005-1.282-0.005-88.618 0-160.457 71.839-160.457 160.457 0 0.002 0 0.004 0 0.006v0 587.999c0.291 88.397 72.018 159.944 160.456 159.944 0.090 0 0.181 0 0.271 0h371.907c29.445 0 53.315-23.87 53.315-53.315s-23.87-53.315-53.315-53.315h-371.921c-0.076 0-0.166 0.001-0.256 0.001-29.445 0-53.315-23.87-53.315-53.315 0 0 0 0 0-0.001v0-587.999c0.146-29.476 24.074-53.315 53.57-53.315 0 0 0 0 0.001 0h589.537c0 0 0 0 0.001 0 29.496 0 53.425 23.839 53.57 53.301v374.754c0 29.586 23.985 53.571 53.571 53.571s53.571-23.985 53.571-53.571v0-374.74c0 0 0-0.001 0-0.002 0-88.347-71.401-160.018-159.646-160.455h-0.042zM1008.621 642.675c-9.748-10.038-23.37-16.267-38.448-16.267s-28.7 6.229-38.435 16.254l-0.013 0.013-73.308 74.846-76.896-76.896c-9.84-9.84-23.433-15.926-38.448-15.926-30.030 0-54.374 24.344-54.374 54.374 0 15.015 6.086 28.608 15.926 38.448v0l76.896 75.615-73.308 74.589c-10.391 9.753-16.865 23.575-16.865 38.908 0 29.445 23.87 53.315 53.315 53.315 15.334 0 29.156-6.473 38.882-16.836l0.027-0.029 74.589-74.589 76.896 76.896c9.84 9.84 23.433 15.926 38.448 15.926 30.030 0 54.374-24.344 54.374-54.374 0-15.015-6.086-28.608-15.926-38.448l-76.896-76.896 74.589-74.589c8.972-9.555 14.484-22.451 14.484-36.634 0-14.703-5.923-28.023-15.514-37.703l0.004 0.004z" />
66
- <glyph unicode="&#xe938;" glyph-name="pricing-table" horiz-adv-x="749" d="M589.824 960h-430.592c-88.004-0.291-159.232-71.699-159.232-159.743 0 0 0-0.001 0-0.001v0-704.512c0 0 0-0.001 0-0.001 0-88.044 71.228-159.452 159.204-159.743h430.62c88.004 0.291 159.232 71.699 159.232 159.743 0 0 0 0.001 0 0.001v0 704.512c0 0 0 0.001 0 0.001 0 88.044-71.228 159.452-159.204 159.743h-0.028zM649.984 95.744c0-33.225-26.935-60.16-60.16-60.16v0h-430.592c-33.225 0-60.16 26.935-60.16 60.16v704.512c0 33.225 26.935 60.16 60.16 60.16v0h430.592c33.225 0 60.16-26.935 60.16-60.16v0zM487.168 378.88c-5.15-40.576-33.827-73.292-71.737-84.303l-0.711-0.177v-51.2h-79.36v46.336h-27.136c0 0-0.001 0-0.001 0-21.825 0-39.534 17.62-39.679 39.41v0.014c0.142 21.909 17.792 39.649 39.653 39.936h80.155c11.169 0 20.224 9.055 20.224 20.224s-9.055 20.224-20.224 20.224h-24.064c-0.238-0.002-0.52-0.003-0.803-0.003-52.043 0-95.018 38.824-101.543 89.089l-0.055 0.514c-0.322 3-0.505 6.48-0.505 10.002 0 46.494 31.945 85.528 75.084 96.348l0.685 0.145v47.36h79.104v-44.8h25.6c21.915 0 39.68-17.765 39.68-39.68s-17.765-39.68-39.68-39.68h-81.152c-11.169 0-20.224-9.055-20.224-20.224s9.055-20.224 20.224-20.224h28.16c54.652-0.455 98.781-44.864 98.781-99.581 0-3.427-0.173-6.813-0.511-10.151l0.034 0.42z" />
67
- <glyph unicode="&#xe939;" glyph-name="progress-bar" d="M969.472 730.88h-355.072c-18.657-30.236-51.603-50.084-89.185-50.084-9.523 0-18.749 1.274-27.515 3.662l0.732-0.17c-44.754 10.952-77.444 50.712-77.444 98.107 0 55.706 45.158 100.864 100.864 100.864 1.217 0 2.429-0.022 3.635-0.064l-0.175 0.005c0.086 0 0.188 0 0.29 0 37.431 0 70.241-19.787 88.54-49.472l0.257-0.449h358.4c0.039 0 0.086 0 0.132 0 28.277 0 51.2-22.923 51.2-51.2 0-5.864-0.986-11.497-2.801-16.744l0.108 0.36c-7.793-20.524-27.297-34.847-50.146-34.847-0.641 0-1.279 0.011-1.914 0.034l0.092-0.003zM326.656 730.88h-271.872c-0.344-0.008-0.75-0.013-1.157-0.013-22.746 0-42.177 14.194-49.918 34.207l-0.124 0.365c-1.762 4.961-2.78 10.683-2.78 16.642 0 28.277 22.923 51.2 51.2 51.2 0.167 0 0.335-0.001 0.502-0.002h272.102c0.344 0.008 0.75 0.013 1.157 0.013 22.746 0 42.177-14.194 49.918-34.207l0.124-0.365c1.763-4.962 2.781-10.685 2.781-16.645 0-28.277-22.923-51.2-51.2-51.2-0.258 0-0.515 0.002-0.772 0.006h0.039zM256 65.28h-201.216c-0.344-0.008-0.75-0.013-1.157-0.013-22.746 0-42.177 14.194-49.918 34.207l-0.124 0.365c-1.762 4.961-2.78 10.683-2.78 16.642 0 28.277 22.923 51.2 51.2 51.2 0.167 0 0.335-0.001 0.502-0.002h201.958c0.344 0.008 0.75 0.013 1.157 0.013 22.746 0 42.177-14.194 49.918-34.207l0.124-0.365c1.765-4.965 2.785-10.691 2.785-16.655 0-28.277-22.923-51.2-51.2-51.2-0.439 0-0.877 0.006-1.313 0.017l0.065-0.001zM972.8 398.080h-93.184c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h93.184c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0zM799.232 449.28c-0.722-56.001-46.288-101.12-102.392-101.12-0.003 0-0.006 0-0.008 0v0c-0.645-0.015-1.406-0.023-2.169-0.023-37.19 0-69.75 19.826-87.686 49.485l-0.257 0.458h-554.24c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h554.24c18.196 30.108 50.75 49.927 87.933 49.927 0.406 0 0.811-0.002 1.216-0.007l-0.062 0.001c0.307 0.003 0.669 0.005 1.032 0.005 56.106 0 101.673-45.122 102.391-101.057l0.001-0.068zM969.472 167.68c0.316 0.007 0.689 0.011 1.062 0.011 22.841 0 42.34-14.313 50.015-34.459l0.123-0.367c1.707-4.888 2.694-10.523 2.694-16.388 0-28.054-22.563-50.838-50.532-51.196h-430.882c-18.035-30.824-50.979-51.201-88.681-51.201-0.143 0-0.286 0-0.429 0.001h0.022c-4.852-0.815-10.442-1.28-16.14-1.28-56.554 0-102.4 45.846-102.4 102.4s45.846 102.4 102.4 102.4c5.699 0 11.288-0.465 16.734-1.361l-0.593 0.081c0.572 0.012 1.247 0.018 1.924 0.018 36.662 0 68.824-19.267 86.913-48.227l0.251-0.431z" />
68
- <glyph unicode="&#xe93a;" glyph-name="team-members" d="M723.456 414.208c63.021 57.606 102.4 140.17 102.4 231.931 0 173.338-140.518 313.856-313.856 313.856s-313.856-140.518-313.856-313.856c0-91.761 39.379-174.325 102.159-231.714l0.241-0.217c-176.376-63.598-300.249-229.391-300.544-424.156v-0.036c0.145-29.774 24.242-53.871 54.002-54.016h0.014c29.722 0.145 53.76 24.273 53.76 54.015 0 0 0 0 0 0.001v0c0.436 188.804 153.447 341.726 342.244 342.016h123.932c188.825-0.29 341.836-153.212 342.272-341.974v-0.042c-0.082-1.112-0.128-2.409-0.128-3.716 0-29.832 24.184-54.016 54.016-54.016s54.016 24.184 54.016 54.016c0 1.308-0.046 2.605-0.138 3.889l0.010-0.173c-0.295 194.801-124.168 360.594-297.406 423.201l-3.138 0.991zM307.2 646.144c0.148 113.703 92.356 205.82 206.080 205.82 113.815 0 206.080-92.265 206.080-206.080s-92.265-206.080-206.080-206.080c-0.45 0-0.9 0.001-1.349 0.004h0.069c-113.294 0.87-204.8 92.914-204.8 206.33 0 0.002 0 0.004 0 0.006v0z" />
69
- <glyph unicode="&#xe93b;" glyph-name="testimonials" d="M512 10.752c-0.012 0-0.026 0-0.041 0-14.065 0-26.805 5.671-36.058 14.851l-125.437 125.437c-9.276 9.33-22.119 15.104-36.311 15.104-0.014 0-0.029 0-0.043 0h-160.51c-84.831 0-153.6 68.769-153.6 153.6v0 422.656c0 84.831 68.769 153.6 153.6 153.6v0h90.624c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0h-90.624c-28.277 0-51.2-22.923-51.2-51.2v0-422.656c0-28.277 22.923-51.2 51.2-51.2v0h160.512c42.562-0.111 81.037-17.516 108.787-45.555l0.013-0.013 89.088-88.832 89.088 88.832c27.803 27.836 66.23 45.056 108.679 45.056 0.042 0 0.085 0 0.127 0h160.506c28.277 0 51.2 22.923 51.2 51.2v0 423.168c0 28.277-22.923 51.2-51.2 51.2v0h-501.248c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h501.248c84.831 0 153.6-68.769 153.6-153.6v0-422.656c0-84.831-68.769-153.6-153.6-153.6v0h-160.512c-0.012 0-0.026 0-0.041 0-14.192 0-27.035-5.774-36.309-15.102l-125.442-125.442c-9.25-9.177-21.99-14.848-36.055-14.848-0.014 0-0.029 0-0.043 0h0.002zM782.336 514.816c-0.145-34.388-28.056-62.208-62.463-62.208-34.498 0-62.464 27.966-62.464 62.464s27.966 62.464 62.463 62.464v0c34.529-0.145 62.464-28.17 62.464-62.719 0 0 0 0 0-0.001v0zM583.424 514.816c-0.146-34.387-28.056-62.207-62.463-62.207-34.498 0-62.464 27.966-62.464 62.464s27.966 62.464 62.464 62.464c0.090 0 0.18 0 0.269-0.001h-0.014c34.418-0.29 62.208-28.259 62.208-62.718 0-0.001 0-0.001 0-0.002v0zM384 514.816c-0.145-34.388-28.056-62.208-62.463-62.208-34.498 0-62.464 27.966-62.464 62.464s27.966 62.464 62.463 62.464v0c34.529-0.145 62.464-28.17 62.464-62.719 0 0 0 0 0-0.001v0z" />
70
- <glyph unicode="&#xe93c;" glyph-name="vertical-scroll" horiz-adv-x="230" d="M230.4 844.8c0-63.623-51.577-115.2-115.2-115.2s-115.2 51.577-115.2 115.2c0 63.623 51.577 115.2 115.2 115.2s115.2-51.577 115.2-115.2zM230.4 448c0-63.623-51.577-115.2-115.2-115.2s-115.2 51.577-115.2 115.2c0 63.623 51.577 115.2 115.2 115.2s115.2-51.577 115.2-115.2zM230.4 51.2c0-63.623-51.577-115.2-115.2-115.2s-115.2 51.577-115.2 115.2c0 63.623 51.577 115.2 115.2 115.2s115.2-51.577 115.2-115.2z" />
71
- <glyph unicode="&#xe93d;" glyph-name="video-box" d="M512-64c-282.77 0-512 229.23-512 512s229.23 512 512 512c282.77 0 512-229.23 512-512v0c0-282.77-229.23-512-512-512v0zM512 857.6c-226.216 0-409.6-183.384-409.6-409.6s183.384-409.6 409.6-409.6c226.216 0 409.6 183.384 409.6 409.6v0c0 226.216-183.384 409.6-409.6 409.6v0zM404.736 225.024c-28.051 0.295-50.677 23.104-50.677 51.197 0 18.638 9.959 34.951 24.846 43.906l0.231 0.129 212.736 128-136.192 80.896v-71.424c0-28.277-22.923-51.2-51.2-51.2s-51.2 22.923-51.2 51.2v0 162.048c0.318 28.034 23.118 50.637 51.197 50.637 9.427 0 18.259-2.548 25.845-6.992l-0.242 0.131 286.72-171.776c14.875-9.135 24.646-25.314 24.646-43.776s-9.771-34.641-24.424-43.649l-0.222-0.127-285.952-171.776c-7.445-4.587-16.448-7.337-26.088-7.424h-0.024z" />
72
- <glyph unicode="&#xe93e;" glyph-name="general-tab" horiz-adv-x="1055" d="M975.547 684.151l-337.256 239.869c-30.838 21.74-69.19 34.746-110.58 34.746s-79.742-13.006-111.192-35.155l0.613 0.409-337.495-239.869c-48.303-35.139-79.404-91.391-79.636-154.918v-402.777c0.809-104.859 85.597-189.647 190.379-190.455h134.883c67.96 0 123.053 55.093 123.053 123.053v0 214.443h158.793v-214.443c0-67.96 55.093-123.053 123.053-123.053v0h134.806c104.859 0.809 189.647 85.597 190.455 190.379v402.817c0 0.004 0 0.008 0 0.012 0 63.667-31.28 120.029-79.309 154.555l-0.567 0.388zM595.115 384.315h-134.806c0 0 0 0 0 0-67.876 0-122.916-54.956-123.052-122.8v-214.456h-146.8c0 0 0 0 0 0-43.898 0-79.5 35.518-79.636 79.384v402.753c0.012 26.6 13.062 50.149 33.107 64.603l0.235 0.161 337.495 239.869c12.826 9.108 28.804 14.56 46.055 14.56s33.229-5.452 46.303-14.728l-0.249 0.167 337.495-239.869c20.28-14.616 33.33-38.165 33.342-64.763v-402.742c-0.136-43.879-35.738-79.397-79.636-79.397 0 0 0 0 0 0h-146.8v214.443c-0.137 67.857-55.177 122.813-123.052 122.813 0 0 0 0 0 0v0z" />
73
- <glyph unicode="&#xe93f;" glyph-name="integrations" horiz-adv-x="829" d="M416.050-63.77v0c-40.321 0.003-75.437 22.283-93.712 55.202l-0.279 0.548c-33.239 62.133-65.92 114.4-101.637 164.348l3.038-4.471c-17.508 23.037-38.933 48.608-61.739 74.64-75.331 86.159-161.26 184.297-161.26 318.834 0 229.015 185.653 414.668 414.668 414.668v0c1.308 0.015 2.853 0.024 4.401 0.024 226.598 0 410.291-183.694 410.291-410.291 0-1.547-0.009-3.093-0.026-4.636l0.002 0.236c0-138.223-84.085-235.209-158.495-322.52-21.655-25.11-41.928-48.608-58.975-71.876-32.614-45.263-66.374-97.927-97.386-152.361l-4.668-8.899c-18.936-32.191-53.406-53.455-92.842-53.455-0.485 0-0.969 0.003-1.453 0.010l0.073-0.001zM414.668 856.333c-171.708-0.131-310.87-139.293-311.001-310.988v-0.013c0-95.834 69.111-174.621 135.228-250.644 24.189-27.875 47.226-53.907 67.268-81.551 35.59-49.137 70.727-105.336 102.067-163.874l3.903-7.983c40.664 66.893 79.040 122.957 120.030 176.927l-3.692-5.070c19.351 26.493 41.928 52.755 63.813 78.326 65.656 76.022 133.385 154.809 133.385 253.869 0.011 0.964 0.017 2.102 0.017 3.242 0 169.98-137.796 307.776-307.776 307.776-1.14 0-2.279-0.006-3.416-0.019l0.173 0.001zM414.668 390.522c-85.881 0-155.501 69.62-155.501 155.501s69.62 155.501 155.501 155.501c85.881 0 155.501-69.62 155.501-155.501v0c-0.131-85.828-69.673-155.37-155.488-155.501h-0.013zM414.668 597.856c-28.627 0-51.834-23.207-51.834-51.834s23.207-51.834 51.834-51.834c28.627 0 51.834 23.207 51.834 51.834v0c0 28.627-23.207 51.834-51.834 51.834v0z" />
74
- <glyph unicode="&#xe940;" glyph-name="license" horiz-adv-x="1126" d="M1105.819 838.282l-101.011 101.011c-13.132 12.989-31.197 21.014-51.137 21.014s-38.005-8.024-51.143-21.020l0.006 0.006-389.65-388.64c-50.306 32.934-111.928 52.528-178.127 52.528-0.411 0-0.821-0.001-1.232-0.002h0.064c-0.075 0-0.164 0-0.253 0-184.236 0-333.589-149.353-333.589-333.589s149.353-333.589 333.589-333.589c184.236 0 333.589 149.353 333.589 333.589v0c0.001 0.246 0.001 0.536 0.001 0.827 0 66.395-19.59 128.215-53.305 179.995l0.778-1.275 194.951 194.951 43.94-44.95c12.797-13.214 30.688-21.427 50.499-21.465h1.775c39.744 0.006 71.96 32.226 71.96 71.97 0 20.060-8.207 38.203-21.446 51.255l-0.009 0.008-44.697 45.202 42.93 41.667 50.506-50.506c12.076-9.487 27.497-15.215 44.256-15.215 39.748 0 71.97 32.222 71.97 71.97 0 16.759-5.728 32.179-15.333 44.411l0.118-0.156zM334.599 80.698c-104.6 0-189.396 84.796-189.396 189.396s84.795 189.396 189.396 189.396c104.6 0 189.396-84.795 189.396-189.396 0-0.089 0-0.178 0-0.266v0.014c0-0.075 0-0.165 0-0.254 0-104.74-84.908-189.648-189.648-189.648-0.266 0-0.533 0.001-0.799 0.002h0.041z" />
75
- <glyph unicode="&#xe941;" glyph-name="system-info" d="M968.034 904.489c-34.44 34.345-81.968 55.58-134.455 55.58s-100.015-21.236-134.46-55.585l0.004 0.004-599.703-599.021c-9.133-9.341-16.281-20.665-20.734-33.261l-0.196-0.637-74.167-222.955c-2.852-8.142-4.499-17.529-4.499-27.301 0-46.992 38.095-85.087 85.087-85.087 0.062 0 0.124 0 0.186 0h-0.010c0.229-0.002 0.499-0.004 0.769-0.004 9.414 0 18.458 1.584 26.881 4.5l-0.577-0.174 223.182 74.849c13.107 4.117 24.286 11.183 33.191 20.45l0.025 0.026 501.649 500.511s1.593 1.82 2.73 2.275l94.87 94.87c35.082 34.525 56.819 82.52 56.819 135.591 0 52.959-21.645 100.863-56.572 135.347l-0.020 0.020zM294.391 118.232l-168.809-56.876 56.421 170.629 460.698 459.788 112.387-113.752zM890 713.385l-56.421-55.966-112.387 112.387 55.966 56.649c14.556 14.556 34.665 23.559 56.876 23.559 44.423 0 80.435-36.012 80.435-80.435 0-22.212-9.003-42.32-23.559-56.876v0z" />
76
- <glyph unicode="&#xe942;" glyph-name="version-control" horiz-adv-x="1005" d="M502.618 258.122c-104.867 0-189.878 85.011-189.878 189.878s85.011 189.878 189.878 189.878c104.867 0 189.878-85.011 189.878-189.878v0c-0.127-104.816-85.062-189.751-189.866-189.878h-0.012zM502.618 526.185c-43.797 0-79.302-35.505-79.302-79.302s35.505-79.302 79.302-79.302c43.797 0 79.302 35.505 79.302 79.302v0c-0.127 43.746-35.556 79.175-79.29 79.302h-0.012zM587.951-64h-170.89c-0.002 0-0.003 0-0.005 0-67.092 0-121.555 54.072-122.186 121.015v0.060c0.008 0.153 0.013 0.331 0.013 0.511 0 3.661-1.957 6.865-4.882 8.623l-0.045 0.025-11.393 6.702c-1.46 0.77-3.19 1.222-5.026 1.222s-3.567-0.452-5.086-1.251l0.060 0.029c-17.556-10.279-38.658-16.349-61.178-16.349-11.13 0-21.913 1.483-32.163 4.261l0.859-0.198c-31.923 8.658-58.032 29.161-73.853 56.384l-0.311 0.58-85.333 148.328c-10.277 17.496-16.347 38.537-16.347 60.995 0 44.924 24.287 84.175 60.448 105.339l0.576 0.312c3.946 2.044 6.615 6.062 6.701 10.711v9.171c0.001 0.066 0.002 0.144 0.002 0.222 0 4.223-2.211 7.929-5.538 10.025l-0.049 0.029c-36.9 21.437-61.316 60.777-61.316 105.819 0 22.662 6.181 43.881 16.948 62.063l-0.31-0.565 85.333 147.881c21.593 36.709 60.9 60.958 105.87 60.958 22.451 0 43.491-6.044 61.581-16.594l-0.582 0.313c1.488-0.953 3.302-1.519 5.25-1.519s3.762 0.566 5.289 1.543l-0.039-0.024 10.052 5.585c3.228 1.832 5.371 5.247 5.371 9.161 0 0.156-0.003 0.312-0.010 0.466l0.001-0.022c0.127 67.434 54.758 122.065 122.18 122.192h170.902c67.434-0.127 122.065-54.758 122.192-122.18v-0.012c-0.007-0.145-0.011-0.314-0.011-0.485 0-3.733 1.948-7.011 4.883-8.872l0.043-0.025 9.159-5.138c1.932-1.426 4.36-2.282 6.988-2.282 1.672 0 3.263 0.346 4.705 0.972l-0.077-0.030c17.482 10.227 38.492 16.265 60.913 16.265 44.927 0 84.192-24.247 105.421-60.369l0.312-0.574 85.557-147.658c10.246-17.534 16.296-38.603 16.296-61.085 0-45.013-24.251-84.363-60.401-105.695l-0.572-0.312c-4.097-1.855-6.939-5.822-7.147-10.473l-0.001-0.026v-9.159c0-0.036-0.001-0.079-0.001-0.122 0-4.24 2.316-7.939 5.753-9.901l0.056-0.029h1.34c36.655-21.605 60.861-60.883 60.861-105.814 0-22.383-6.008-43.364-16.498-61.417l0.314 0.585-85.557-147.881c-21.541-36.695-60.805-60.942-105.733-60.942-22.421 0-43.431 6.039-61.493 16.578l0.58-0.313c-1.58 0.882-3.466 1.401-5.473 1.401s-3.893-0.519-5.531-1.43l0.058 0.030-10.276-6.031c-3.224-1.833-5.364-5.246-5.364-9.157 0-0.079 0.001-0.158 0.003-0.236v0.012c-0.127-67.434-54.758-122.065-122.18-122.192h-0.012zM275.211 185.522c0.087 0 0.191 0 0.294 0 22.734 0 43.993-6.312 62.121-17.279l-0.537 0.302 8.265-4.914c36.321-21.243 60.332-60.056 60.332-104.477 0-0.73-0.006-1.459-0.019-2.187l0.002 0.109c0-6.292 5.101-11.393 11.393-11.393v0h170.89c6.292 0 11.393 5.101 11.393 11.393v0c-0.001 0.148-0.001 0.323-0.001 0.497 0 45.174 24.786 84.559 61.499 105.298l0.603 0.313 7.148 4.244c17.627 10.474 38.862 16.665 61.543 16.665s43.916-6.191 62.107-16.975l-0.564 0.31c1.689-1.013 3.726-1.612 5.904-1.612 4.206 0 7.889 2.235 9.928 5.582l0.029 0.051 86.003 149.668c1.003 1.663 1.597 3.67 1.597 5.817 0 4.163-2.232 7.804-5.565 9.792l-0.052 0.029c-37.522 21.643-62.49 61.35-62.994 106.93l-0.001 0.071v8.712c0 0.114-0.001 0.25-0.001 0.386 0 44.871 24.275 84.072 60.408 105.188l0.577 0.311c3.88 2.341 6.434 6.533 6.434 11.323 0 1.882-0.395 3.673-1.106 5.293l0.033-0.085-85.333 147.658c-2.070 3.385-5.747 5.61-9.943 5.61-1.827 0-3.555-0.422-5.093-1.173l0.069 0.030c-17.48-10.37-38.533-16.499-61.017-16.499-22.64 0-43.828 6.214-61.952 17.029l0.554-0.306-7.818 4.468c-37.331 21.218-62.101 60.718-62.101 106.004 0 0.037 0 0.074 0 0.11v-0.006c0.001 0.066 0.002 0.145 0.002 0.223 0 6.292-5.101 11.393-11.393 11.393-0.001 0-0.002 0-0.002 0h-171.783c-6.292 0-11.393-5.101-11.393-11.393v0c0-0.039 0-0.086 0-0.133 0-45.105-24.574-84.47-61.063-105.439l-0.591-0.313-5.585-3.127c-18.295-11.547-40.556-18.399-64.417-18.399-22.33 0-43.258 6.001-61.26 16.477l0.582-0.313c-1.663 1.003-3.67 1.597-5.817 1.597-4.163 0-7.804-2.232-9.792-5.565l-0.029-0.052-86.003-148.105c-0.954-1.649-1.516-3.628-1.516-5.738 0-4.166 2.193-7.82 5.488-9.87l0.049-0.029c37.778-21.271 62.899-61.080 62.995-106.765v-8.726c0 0 0-0.001 0-0.001 0-44.927-24.158-84.212-60.193-105.572l-0.568-0.311c-4.037-1.944-6.773-6.003-6.773-10.701 0-2.054 0.523-3.985 1.443-5.668l-0.031 0.062 85.333-147.881c2.43-3.214 6.246-5.269 10.542-5.269 1.839 0 3.591 0.377 5.181 1.057l-0.086-0.033c17.421 10.252 38.377 16.307 60.747 16.307 0.005 0 0.010 0 0.015 0h-0.001z" />
77
- <glyph unicode="&#xe943;" glyph-name="white-label" horiz-adv-x="901" d="M120.783-64c-18.709 0.031-36.417 4.286-52.231 11.863l0.731-0.315c-41.244 19.404-69.284 60.613-69.284 108.372 0 0.223 0.001 0.445 0.002 0.668v-0.034 717.077c0.131 102.877 83.494 186.24 186.358 186.371h527.947c102.877-0.131 186.24-83.494 186.371-186.358v-717.089c0.001-0.188 0.002-0.411 0.002-0.633 0-47.759-28.040-88.968-68.556-108.063l-0.728-0.309c-15.089-7.219-32.789-11.468-51.473-11.547h-0.027c-0.037 0-0.080 0-0.124 0-29.357 0-56.225 10.657-76.947 28.314l0.167-0.138-202.999 169.050c-13.286 11.346-30.663 18.249-49.653 18.249s-36.367-6.903-49.759-18.337l-203.123-169.193c-20.622-17.28-47.405-27.817-76.645-27.944h-0.028zM450.338 259.32c0.029 0 0.064 0 0.098 0 45.519 0 87.226-16.318 119.591-43.424l-0.291 0.238 222.167-184.754v742.25c-0.131 42.756-34.822 77.366-77.596 77.366 0 0 0 0 0 0h-527.935c0 0 0 0 0 0-42.774 0-77.465-34.61-77.596-77.353v-741.801l222.167 184.754c32.083 26.986 73.799 43.449 119.355 43.648h0.043z" />
78
- <glyph unicode="&#xe944;" glyph-name="widgets-and-addons" d="M282.396 511.943h-116.736c-91.492 0-165.66 74.169-165.66 165.66v0 116.736c0 91.492 74.169 165.66 165.66 165.66v0h116.736c91.492 0 165.66-74.169 165.66-165.66v0-116.736c0-91.492-74.169-165.66-165.66-165.66v0zM165.66 832.114c-20.862 0-37.774-16.912-37.774-37.774v0-116.736c0 0 0 0 0-0.001 0-20.736 16.81-37.547 37.547-37.547 0.080 0 0.16 0 0.24 0.001h116.724c20.736 0 37.547 16.81 37.547 37.547v116.736c0 0.068 0.001 0.148 0.001 0.228 0 20.736-16.81 37.547-37.547 37.547 0 0-0.001 0-0.001 0v0zM858.34 511.943h-116.736c-91.492 0-165.66 74.169-165.66 165.66v0 116.736c0 91.492 74.169 165.66 165.66 165.66v0h116.736c91.492 0 165.66-74.169 165.66-165.66v0-116.736c0-91.492-74.169-165.66-165.66-165.66v0zM741.604 832.114c0 0 0 0-0.001 0-20.736 0-37.547-16.81-37.547-37.547 0-0.080 0-0.16 0.001-0.24v0.012-116.736c0-20.736 16.81-37.547 37.547-37.547v0h116.736c0.068 0 0.148-0.001 0.228-0.001 20.736 0 37.547 16.81 37.547 37.547 0 0 0 0.001 0 0.001v0 116.736c0 20.862-16.912 37.774-37.774 37.774v0zM282.396-64h-116.736c-91.492 0-165.66 74.169-165.66 165.66v0 116.736c0 91.492 74.169 165.66 165.66 165.66v0h116.736c91.492 0 165.66-74.169 165.66-165.66v0-116.736c0-91.492-74.169-165.66-165.66-165.66v0zM165.66 255.943c-0.068 0-0.148 0.001-0.228 0.001-20.736 0-37.547-16.81-37.547-37.547 0 0 0-0.001 0-0.001v0-116.736c0-20.862 16.912-37.774 37.774-37.774v0h116.736c0 0 0 0 0.001 0 20.736 0 37.547 16.81 37.547 37.547 0 0.080 0 0.16-0.001 0.24v-0.012 116.736c0 20.736-16.81 37.547-37.547 37.547v0zM858.34-64h-116.736c-91.492 0-165.66 74.169-165.66 165.66v0 116.736c0 91.492 74.169 165.66 165.66 165.66v0h116.736c91.492 0 165.66-74.169 165.66-165.66v0-116.736c0-91.492-74.169-165.66-165.66-165.66v0zM741.604 255.943c-20.736 0-37.547-16.81-37.547-37.547v0-116.736c0-0.068-0.001-0.148-0.001-0.228 0-20.736 16.81-37.547 37.547-37.547 0 0 0.001 0 0.001 0h116.736c20.862 0 37.774 16.912 37.774 37.774v0 116.736c0 0 0 0 0 0.001 0 20.736-16.81 37.547-37.547 37.547-0.080 0-0.16 0-0.24-0.001h0.012z" />
79
- <glyph unicode="&#xe945;" glyph-name="all-widgets" d="M139.947 345.6h129.707c77.29 0 139.947-62.656 139.947-139.947v-129.707c0-77.29-62.656-139.947-139.947-139.947h-129.707c-77.29 0-139.947 62.656-139.947 139.947v129.707c0 77.29 62.656 139.947 139.947 139.947zM752.754 345.6h132.892c76.411 0 138.354-61.943 138.354-138.354v-132.892c0-76.411-61.943-138.354-138.354-138.354h-132.892c-76.411 0-138.354 61.943-138.354 138.354v132.892c0 76.411 61.943 138.354 138.354 138.354zM754.574 960h129.252c77.416 0 140.174-62.758 140.174-140.174v-129.252c0-77.416-62.758-140.174-140.174-140.174h-129.252c-77.416 0-140.174 62.758-140.174 140.174v129.252c0 77.416 62.758 140.174 140.174 140.174zM139.719 960h130.162c77.165 0 139.719-62.554 139.719-139.719v-130.162c0-77.165-62.554-139.719-139.719-139.719h-130.162c-77.165 0-139.719 62.554-139.719 139.719v130.162c0 77.165 62.554 139.719 139.719 139.719z" />
80
- <glyph unicode="&#xe946;" glyph-name="blurbs-and-cta-widgets" d="M409.6 140.8h409.6c113.108 0 204.8 91.692 204.8 204.8v0 409.6c0 113.108-91.692 204.8-204.8 204.8v0h-409.6c-113.108 0-204.8-91.692-204.8-204.8v0-407.78c0.129-114.061 92.559-206.491 206.608-206.62h0.012zM256 38.4c-84.831 0-153.6 68.769-153.6 153.6v0 381.156c0 28.277-22.923 51.2-51.2 51.2s-51.2-22.923-51.2-51.2v0-381.156c0-141.385 114.615-256 256-256v0h381.156c28.277 0 51.2 22.923 51.2 51.2s-22.923 51.2-51.2 51.2v0z" />
81
- <glyph unicode="&#xe947;" glyph-name="contact-widgets" horiz-adv-x="1396" d="M555.132 546.987l-479.108 385.086c26.241 17.403 58.439 27.81 93.060 27.927h1058.163c34.653-0.097 66.856-10.508 93.723-28.321l-0.632 0.394-478.177-385.086c-38.86-31.592-88.953-50.725-143.515-50.725s-104.655 19.133-143.936 51.057l0.421-0.331zM1396.364 782.196v-677.081c0-93.4-75.715-169.115-169.115-169.115v0h-1058.133c-93.329 0.176-168.939 75.786-169.115 169.098v677.098c-0.001 0.222-0.002 0.485-0.002 0.747 0 35.157 10.787 67.795 29.233 94.783l-0.373-0.578 484.693-390.361c50.227-40.144 114.519-64.609 184.506-65.163l0.124-0.001c0.412-0.002 0.899-0.003 1.386-0.003 70.381 0 134.933 24.953 185.293 66.496l-0.497-0.398 484.073 389.43c17.507-26.116 27.941-58.255 27.941-92.831 0-0.746-0.005-1.491-0.015-2.234l0.001 0.113z" />
82
- <glyph unicode="&#xe948;" glyph-name="content-widgets" horiz-adv-x="1138" d="M849.794 960c0.15 0 0.328 0 0.506 0 158.592 0 287.19-128.421 287.478-286.946v-449.829c-0.288-158.692-128.999-287.226-287.731-287.226-0.089 0-0.178 0-0.267 0h-562.048c0 0 0 0 0 0-158.732 0-287.443 128.534-287.731 287.198v449.577c0.144 158.573 128.653 287.082 287.212 287.226h562.581zM940.31 587.062l4.551 4.551c6.487 7.616 10.432 17.57 10.432 28.444s-3.946 20.828-10.484 28.506l0.052-0.062c-7.873 8.067-18.53 13.386-30.415 14.4l-0.179 0.012c-0.733 0.044-1.591 0.069-2.454 0.069-11.353 0-21.69-4.35-29.435-11.475l0.031 0.028-256.632-203.536c-15.32-12.745-35.201-20.48-56.889-20.48s-41.568 7.735-57.034 20.597l0.145-0.117-256.126 204.8c-7.107 5.263-16.047 8.425-25.725 8.425-24.018 0-43.488-19.47-43.488-43.488 0-9.742 3.203-18.736 8.614-25.985l-0.082 0.115 7.080-7.332 258.908-202.272c30.223-24.098 68.972-38.667 111.123-38.667s80.9 14.569 111.485 38.945l-0.362-0.279z" />
83
- <glyph unicode="&#xe949;" glyph-name="image-widgets" d="M887.467-41.244v2.276c-32.732-15.692-71.14-24.909-111.688-25.031h-519.779c-141.385 0-256 114.615-256 256v0 88.292c1.221 0.551 2.271 1.238 3.199 2.059l-0.013-0.011c104.903 87.381 217.543 131.527 333.596 131.527v0c239.844 0 465.806-186.368 550.684-452.38zM773.689 960h-517.689c-141.385 0-256-114.615-256-256v0-337.92c91.377 70.78 207.13 114.129 332.93 116.048l0.439 0.005c9.33 0 19.115 0 28.217 0 104.071-6.788 199.035-40.671 279.433-94.588l-2.043 1.29c142.842-95.27 250.349-233.701 304.723-396.455l1.567-5.408c48.603 47.588 78.735 113.877 78.735 187.203 0 0.266 0 0.533-0.001 0.799v-0.041 523.378c0.009 0.817 0.015 1.781 0.015 2.747 0 141.984-114.268 257.279-255.858 258.94l-0.157 0.001zM732.729 604.103c-0.068 0-0.148 0-0.228 0-42.478 0-76.914 34.435-76.914 76.914s34.435 76.914 76.914 76.914c42.478 0 76.914-34.435 76.914-76.913v0c0 0 0 0 0 0 0-42.398-34.306-76.784-76.674-76.913h-0.013z" />
84
- <glyph unicode="&#xe94a;" glyph-name="message" horiz-adv-x="1138" d="M849.794 960c0.15 0 0.328 0 0.506 0 158.592 0 287.19-128.421 287.478-286.946v-449.829c-0.288-158.692-128.999-287.226-287.731-287.226-0.089 0-0.178 0-0.267 0h-562.048c0 0 0 0 0 0-158.732 0-287.443 128.534-287.731 287.198v449.577c0.144 158.573 128.653 287.082 287.212 287.226h562.581zM940.31 587.062l4.551 4.551c6.487 7.616 10.432 17.57 10.432 28.444s-3.946 20.828-10.484 28.506l0.052-0.062c-7.873 8.067-18.53 13.386-30.415 14.4l-0.179 0.012c-0.733 0.044-1.591 0.069-2.454 0.069-11.353 0-21.69-4.35-29.435-11.475l0.031 0.028-256.632-203.536c-15.32-12.745-35.201-20.48-56.889-20.48s-41.568 7.735-57.034 20.597l0.145-0.117-256.126 204.8c-7.107 5.263-16.047 8.425-25.725 8.425-24.018 0-43.488-19.47-43.488-43.488 0-9.742 3.203-18.736 8.614-25.985l-0.082 0.115 7.080-7.332 258.908-202.272c30.223-24.098 68.972-38.667 111.123-38.667s80.9 14.569 111.485 38.945l-0.362-0.279z" />
85
- <glyph unicode="&#xe94b;" glyph-name="off-grid-widgets" horiz-adv-x="1041" d="M883.433 676.771c77.252-4.721 140.095-60.978 154.818-134.608l0.179-1.072c1.494-8.285 2.348-17.821 2.348-27.557 0-88.015-69.798-159.728-157.063-162.806l-0.281-0.008zM813.615 900.422v-765.207c0-32.904-26.674-59.578-59.578-59.578v0h-19.316c-0.217-0.001-0.475-0.002-0.732-0.002-39.55 0-74.887 18.036-98.236 46.331l-0.173 0.216c-34.096 42.335-85.759 69.33-143.744 69.818l-0.082 0.001h-73.775v-184.087c-0.524-39.829-32.934-71.914-72.838-71.914-0.166 0-0.331 0.001-0.497 0.002h-40.237c-40.102 0-72.611 32.509-72.611 72.611v0 199.68c-135.169 41.188-231.816 164.77-231.816 310.924 0 179.173 145.249 324.422 324.422 324.422 0.171 0 0.341 0 0.512 0h166.141c57.892 0.184 109.539 26.762 143.563 68.324l0.262 0.33c23.522 28.512 58.86 46.548 98.41 46.548 0.257 0 0.514-0.001 0.771-0.002h19.976c0.046 0 0.1 0 0.155 0 6.027 0 11.815-1.023 17.2-2.904l-0.366 0.111c4.129-1.275 7.674-2.776 11.030-4.582l-0.325 0.16c18.694-9.9 31.337-29.012 31.882-51.126l0.001-0.074z" />
86
- <glyph unicode="&#xe94c;" glyph-name="section-addons" horiz-adv-x="1040" d="M958.122 631.996v58.712c0.012 0.794 0.019 1.732 0.019 2.671 0 50.807-20.49 96.829-53.658 130.253l0.011-0.011c-33.999 34.358-81.032 55.76-133.066 56.169h-44.458c-0.917-0.074-1.986-0.116-3.064-0.116-22.468 0-40.683 18.214-40.683 40.683s18.214 40.683 40.683 40.683c1.078 0 2.147-0.042 3.204-0.124l-0.14 0.009h44.381c148.272-1.689 267.927-121.83 268.828-270.13v-57.874c-1.653-21.358-19.39-38.063-41.029-38.063s-39.377 16.705-41.021 37.922l-0.009 0.141zM40.451 591.545c-22.236 0.258-40.194 18.215-40.451 40.427v58.737c1.436 148.794 122.197 268.906 271.104 269.291h44.187c22.432-0.124 40.629-18.078 41.144-40.403l0.001-0.048c-0.513-22.421-18.685-40.431-41.121-40.682h-44.174c-0.173 0.001-0.377 0.001-0.581 0.001-52.382 0-99.813-21.197-134.184-55.481l0.004 0.004c-33.564-33.481-54.329-79.778-54.329-130.925 0-0.617 0.003-1.234 0.009-1.849l-0.001 0.094v-57.788c-0.513-22.293-18.581-40.2-40.89-40.451h-0.024zM82.059 264.004v-58.712c-0.012-0.794-0.019-1.732-0.019-2.671 0-50.807 20.49-96.829 53.658-130.253l-0.011 0.011c34.025-34.317 81.042-55.706 133.055-56.169l0.088-0.001h44.381c0.917 0.074 1.986 0.116 3.064 0.116 22.468 0 40.683-18.214 40.683-40.683s-18.214-40.683-40.683-40.683c-1.078 0-2.147 0.042-3.204 0.124l0.14-0.009h-44.381c-148.272 1.689-267.927 121.83-268.828 270.13v57.874c1.653 21.358 19.39 38.063 41.029 38.063s39.377-16.705 41.021-37.922l0.009-0.141zM999.729 303.53c21.921-0.243 39.689-17.687 40.45-39.457l0.002-0.070v-58.712c-1.435-148.713-122.065-268.775-270.86-269.291h-44.431c-0.917-0.074-1.986-0.116-3.064-0.116-22.468 0-40.683 18.214-40.683 40.683s18.214 40.683 40.683 40.683c1.078 0 2.147-0.042 3.204-0.124l-0.14 0.009h44.381c0.132 0 0.289-0.001 0.446-0.001 52.352 0 99.752 21.198 134.087 55.479l-0.002-0.002c33.564 33.481 54.329 79.778 54.329 130.925 0 0.617-0.003 1.234-0.009 1.849l0.001-0.094v57.788c0.388 22.345 18.53 40.325 40.902 40.451h0.012zM693.454 159.061h-346.727c-63.831 0-115.576 51.745-115.576 115.576v0 346.727c0 63.831 51.745 115.576 115.576 115.576v0h346.727c63.831 0 115.576-51.745 115.576-115.576v0-346.727c0-63.831-51.745-115.576-115.576-115.576v0z" />
87
- <glyph unicode="&#xe94d;" glyph-name="social-feed-widgets" horiz-adv-x="939" d="M201.751 562.774v-551.902c-21.080-23.819-51.721-38.764-85.853-38.781h-0.003c-0.001 0-0.002 0-0.003 0-63.692 0-115.383 51.378-115.891 114.95v393.239c-0.012 0.646-0.020 1.407-0.020 2.171 0 54.302 36.022 100.19 85.474 115.073l0.851 0.22c8.944 2.498 19.216 3.934 29.822 3.934 33.959 0 64.48-14.72 85.531-38.127l0.093-0.105zM936.35 449.793l-75.769-376.827c-11.775-77.927-78.28-136.972-158.576-136.972-6.684 0-13.272 0.409-19.741 1.204l0.776-0.078-334.011 37.66c-28.037 3.383-52.344 17.15-69.362 37.278l-0.13 0.158c-3.592 3.918-7.048 8.157-10.252 12.589l-0.284 0.412v548.764l315.405 351.944c18.456 20.934 45.334 34.071 75.281 34.071 18.145 0 35.164-4.823 49.844-13.257l-0.488 0.258c31.606-17.508 52.648-50.663 52.648-88.733 0-16.699-4.049-32.453-11.218-46.333l0.265 0.565-89.667-181.352c-2.259-4.153-3.587-9.095-3.587-14.348 0-16.759 13.522-30.359 30.251-30.486h0.012l145.709-5.604c58.524-2.688 104.955-50.788 104.955-109.734 0-7.494-0.75-14.813-2.18-21.885l0.119 0.704z" />
88
- <glyph unicode="&#xe94e;" glyph-name="table-and-chars-widgets" d="M750.933 960c174.080 0 273.067-98.759 273.067-273.067v0-477.867c0-174.080-98.759-273.067-273.067-273.067h-477.867c-174.308 0-273.067 98.759-273.067 273.067v0 477.867c0 174.308 98.759 273.067 273.067 273.067h477.867zM547.954 769.536c-7.012 4.634-15.616 7.393-24.865 7.393-25.135 0-45.511-20.376-45.511-45.511 0-1.803 0.105-3.581 0.309-5.33l-0.020 0.213v-558.876c2.39-23.1 21.751-40.961 45.283-40.961 0.080 0 0.16 0 0.24 0.001h-0.012c0.068 0 0.148-0.001 0.228-0.001 23.532 0 42.893 17.861 45.267 40.765l0.016 0.195v558.876c0.169 1.472 0.265 3.178 0.265 4.906 0 16.023-8.28 30.112-20.795 38.221l-0.178 0.108zM297.188 595.911c-6.846 4.341-15.182 6.918-24.121 6.918s-17.275-2.577-24.307-7.028l0.187 0.11c-13.056-8.153-21.614-22.443-21.614-38.732 0-1.586 0.081-3.153 0.239-4.697l-0.016 0.194v-379.335c0-25.135 20.376-45.511 45.511-45.511s45.511 20.376 45.511 45.511v0 0 379.108c0.156 1.415 0.245 3.056 0.245 4.718 0 16.298-8.567 30.595-21.444 38.634l-0.192 0.112zM775.054 403.399c-6.897 4.429-15.315 7.061-24.348 7.061s-17.451-2.632-24.53-7.17l0.182 0.109c-12.851-7.762-21.31-21.655-21.31-37.523 0-2.014 0.136-3.997 0.4-5.938l-0.025 0.226v-179.996c2.39-23.1 21.751-40.961 45.283-40.961 0.080 0 0.16 0 0.24 0.001h-0.012c0.068 0 0.148-0.001 0.228-0.001 23.532 0 42.893 17.861 45.267 40.765l0.016 0.195v179.769c0.142 1.35 0.223 2.918 0.223 4.504 0 16.289-8.558 30.579-21.422 38.62l-0.191 0.112z" />
89
- <glyph unicode="&#xe94f;" glyph-name="testimonials-and-reviews-widgets" d="M512 960c0.379 0.001 0.827 0.002 1.276 0.002 282.77 0 512-229.23 512-512s-229.23-512-512-512c-87.909 0-170.643 22.155-242.924 61.186l2.715-1.341h-1.593c-15.246 6.144-27.534 17.067-41.87 24.121-8.435 3.656-18.258 5.783-28.578 5.783-7.749 0-15.219-1.199-22.233-3.422l0.521 0.142c-29.627-10.816-68.275-22.231-107.704-31.635l-7.894-1.589c-20.48 0-26.624 11.833-26.624 31.858 10.827 47.474 23.027 87.476 37.679 126.274l-2.18-6.58c2.107 6.024 3.323 12.969 3.323 20.197 0 11.030-2.833 21.398-7.811 30.417l0.164-0.325-10.24 19.797c-36.341 67.827-57.787 148.346-58.026 233.851v3.262c0 282.77 229.23 512 512 512v0zM747.975 513.081c-36.195 0-65.536-29.341-65.536-65.536s29.341-65.536 65.536-65.536c36.195 0 65.536 29.341 65.536 65.536v0c-0.129 36.143-29.393 65.407-65.524 65.536h-0.012zM512 513.081c-36.195 0-65.536-29.341-65.536-65.536s29.341-65.536 65.536-65.536c36.195 0 65.536 29.341 65.536 65.536v0c0 0.068 0 0.148 0 0.228 0 36.069-29.24 65.308-65.308 65.308-0.080 0-0.16 0-0.24 0h0.012zM276.025 513.081c-36.195 0-65.536-29.341-65.536-65.536s29.341-65.536 65.536-65.536v0c36.195 0 65.536 29.341 65.536 65.536s-29.341 65.536-65.536 65.536v0z" />
90
- <glyph unicode="&#xe950;" glyph-name="pa-admin-icon" d="M1024.437 448.219c-0.596-158.073-72.763-299.17-185.761-392.653l-0.858-0.689h-13.548l-104.891 323.851 285.828 207.597 3.059-11.8c9.961-37.82 15.839-81.301 16.17-126.103l0.001-0.204zM798.047 22.972l-10.489-6.556c-77.973-50.165-173.175-79.974-275.339-79.974s-197.366 29.808-277.383 81.202l2.043-1.228-10.489 6.556 285.828 206.723zM305.058 380.913l-107.076-329.533h-9.178c-115.562 94.543-188.753 237.138-188.804 396.829v0.009c0.139 45.7 6.029 89.961 16.983 132.181l-0.813-3.69 3.059 11.8zM493.426 960l-109.262-336.963h-352.697l4.37 13.111c73.442 181.603 242.662 310.074 443.369 323.333l1.545 0.082zM992.97 623.037h-352.697l-109.262 336.963h12.674c202.344-13.418 371.597-142.068 443.682-320.403l1.232-3.448z" />
91
  </font></defs></svg>
1
+ <?xml version="1.0" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
+ <svg xmlns="http://www.w3.org/2000/svg">
4
+ <metadata>Generated by IcoMoon</metadata>
5
+ <defs>
6
+ <font id="icomoon" horiz-adv-x="1024">
7
+ <font-face units-per-em="1024" ascent="960" descent="-64" />
8
+ <missing-glyph horiz-adv-x="1024" />
9
+ <glyph unicode="&#x20;" horiz-adv-x="512" d="" />
10
+ <glyph unicode="&#xe900;" glyph-name="pa-blob-generator-section-addon" d="M512-64c-6.339 0.025-12.408 1.149-18.036 3.19l0.372-0.118c-19.741 7.406-33.536 26.12-33.536 48.056 0 0.025 0 0.050 0 0.075v-0.004 325.12h-409.6c-27.965 0.407-50.478 23.172-50.478 51.195 0 12.622 4.567 24.177 12.139 33.103l-0.061-0.074 460.8 545.28c9.428 10.657 23.137 17.342 38.407 17.342 27.984 0 50.724-22.45 51.193-50.322l0.001-0.044v-325.12h409.6c27.965-0.407 50.478-23.172 50.478-51.195 0-12.622-4.567-24.177-12.139-33.103l0.061 0.074-460.8-545.28c-9.299-10.969-23.012-17.949-38.361-18.176h-0.039zM161.536 414.72h350.464c28.277 0 51.2-22.923 51.2-51.2v0-235.52l299.264 353.28h-350.464c-28.277 0-51.2 22.923-51.2 51.2v0 235.52z" />
11
+ <glyph unicode="&#xe901;" glyph-name="pa-woo-products-listing-widget" horiz-adv-x="847" d="M845.824 138.752l-73.472 473.856c-10.289 59.506-61.523 104.194-123.195 104.194-0.249 0-0.498-0.001-0.747-0.002h-14.042v37.888c0 113.108-91.692 204.8-204.8 204.8s-204.8-91.692-204.8-204.8v0-37.888h-25.6c-62.403-0.009-114.158-45.584-123.808-105.264l-0.096-0.72-72.96-471.552c-1.45-8.465-2.279-18.216-2.279-28.16 0-96.609 78.237-174.944 174.808-175.104h496.911c0.348-0.003 0.761-0.004 1.173-0.004 96.707 0 175.104 78.397 175.104 175.104 0 9.763-0.799 19.34-2.335 28.668l0.138-1.016zM326.144 754.688c0 56.554 45.846 102.4 102.4 102.4s102.4-45.846 102.4-102.4v0-37.888h-204.8zM727.040 63.488c-13.4-15.686-33.191-25.573-55.291-25.6h-496.901c-0.034 0-0.075 0-0.116 0-40.012 0-72.448 32.436-72.448 72.448 0 4.524 0.415 8.952 1.208 13.246l-0.068-0.446 72.192 473.088c2.214 10.449 11.361 18.177 22.313 18.177 0.075 0 0.151 0 0.226-0.001h450.292c0.033 0 0.072 0 0.111 0 11.277 0 20.662-8.102 22.651-18.802l0.022-0.142 72.192-472.832c0.627-3.561 0.985-7.661 0.985-11.844 0-17.92-6.576-34.304-17.446-46.871l0.077 0.091z" />
12
+ <glyph unicode="&#xe902;" glyph-name="alert-box" horiz-adv-x="992" d="M987.392 79.104c-8.324-17.678-25.991-29.696-46.465-29.696-0.045 0-0.089 0-0.134 0h-329.209c-4.149-60.371-54.139-107.772-115.2-107.772s-111.051 47.401-115.18 107.413l-0.020 0.359h-329.728c-0.038 0-0.082 0-0.127 0-20.474 0-38.142 12.018-46.333 29.384l-0.132 0.312c-2.971 6.289-4.705 13.661-4.705 21.439 0 12.65 4.587 24.228 12.189 33.162l-0.060-0.073c67.072 78.336 99.84 186.368 99.84 318.464v108.288c0.234 53.87 10.74 105.22 29.659 152.283l-0.987-2.779c7.952 18.591 26.087 31.381 47.208 31.381 28.277 0 51.2-22.923 51.2-51.2 0-6.109-1.070-11.969-3.033-17.401l0.113 0.357c-13.548-33.354-21.516-72.032-21.76-112.542v-108.386c0.155-5.219 0.243-11.359 0.243-17.519 0-103.194-24.78-200.6-68.714-286.592l1.655 3.568h696.832c-42.279 82.425-67.059 179.831-67.059 283.025 0 6.16 0.088 12.3 0.264 18.418l-0.020-0.899v108.288c0 163.84-128 297.216-281.6 297.216-80.494-0.042-152.754-35.258-202.25-91.11l-0.246-0.282c-9.47-10.568-23.162-17.187-38.4-17.187-28.438 0-51.491 23.053-51.491 51.491 0 13.2 4.967 25.24 13.134 34.353l-0.043-0.049c68.984 76.751 168.489 124.89 279.243 125.184h0.053c211.2 0 384-179.2 384-399.616v-108.288c0-132.864 33.536-240.128 100.608-318.464 7.244-8.766 11.637-20.12 11.637-32.5 0-8.006-1.838-15.584-5.114-22.333l0.133 0.304z" />
13
+ <glyph unicode="&#xe903;" glyph-name="animated-gradients" horiz-adv-x="826" d="M825.6 360.96c0.102-3.432 0.161-7.47 0.161-11.52 0-228.123-184.758-413.094-412.8-413.44h-0.033c-228.075 0.346-412.833 185.317-412.833 413.44 0 4.051 0.058 8.089 0.174 12.112l-0.013-0.592c1.13 27.404 23.621 49.193 51.2 49.193 28.3 0 51.241-22.941 51.241-51.241 0-0.72-0.015-1.437-0.044-2.15l0.003 0.102c-0.060-2.287-0.095-4.98-0.095-7.68 0-171.495 138.905-310.546 310.344-310.784h0.023c171.462 0.238 310.367 139.289 310.367 310.784 0 2.701-0.034 5.393-0.103 8.077l0.008-0.397c-10.24 244.736-231.68 430.848-310.272 489.216-61.44-45.312-208.384-167.68-275.712-334.080-5.12-12.544-9.728-25.6-13.824-38.4-6.736-20.947-26.050-35.84-48.842-35.84-0.019 0-0.038 0-0.057 0h0.003c-5.484 0.014-10.767 0.855-15.737 2.405l0.377-0.101c-20.981 6.716-35.905 26.046-35.905 48.862 0 5.497 0.866 10.793 2.47 15.756l-0.101-0.362c4.864 15.36 10.496 30.976 16.64 46.080 94.464 233.984 314.88 384 340.992 400.128l2.304 1.536 3.84 2.304 3.84 1.792 5.632 1.792c1.978 0.854 4.296 1.564 6.704 2.016l0.208 0.032h7.168c1.422 0.181 3.067 0.284 4.736 0.284s3.314-0.103 4.929-0.303l-0.193 0.020c0.654 0.112 1.408 0.176 2.176 0.176s1.522-0.064 2.255-0.187l-0.079 0.011c1.729-0.308 3.275-0.842 4.699-1.579l-0.091 0.043c2.054-0.622 3.836-1.405 5.499-2.37l-0.123 0.066 5.888-3.584c34.816-24.832 368.896-251.392 382.976-591.616z" />
14
+ <glyph unicode="&#xe904;" glyph-name="background-transition" d="M512 199.424c-137.285 0-248.576 111.291-248.576 248.576s111.291 248.576 248.576 248.576c137.285 0 248.576-111.291 248.576-248.576v0c-0.291-137.168-111.409-248.285-248.548-248.576h-0.028zM512 594.176c-80.731 0-146.176-65.445-146.176-146.176s65.445-146.176 146.176-146.176c80.731 0 146.176 65.445 146.176 146.176v0c0 80.731-65.445 146.176-146.176 146.176v0zM512 755.2c-28.277 0-51.2 22.923-51.2 51.2v0 102.4c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0-102.4c0-28.277-22.923-51.2-51.2-51.2v0zM512-64c-28.277 0-51.2 22.923-51.2 51.2v0 102.4c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0-102.4c0-28.277-22.923-51.2-51.2-51.2v0zM153.6 396.8h-102.4c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h102.4c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0zM972.8 396.8h-102.4c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h102.4c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0zM764.928 649.728c-0.012 0-0.027 0-0.041 0-28.277 0-51.2 22.923-51.2 51.2 0 14.212 5.791 27.072 15.142 36.349l72.707 72.707c9.271 9.271 22.078 15.004 36.224 15.004 28.293 0 51.228-22.936 51.228-51.228 0-14.146-5.734-26.953-15.004-36.224v0l-72.704-72.704c-9.276-9.33-22.119-15.104-36.311-15.104-0.014 0-0.029 0-0.043 0h0.002zM186.112 70.912c-0.012 0-0.027 0-0.041 0-28.277 0-51.2 22.923-51.2 51.2 0 14.212 5.791 27.072 15.142 36.349l72.707 72.707c9.271 9.271 22.078 15.004 36.224 15.004 28.293 0 51.228-22.936 51.228-51.228 0-14.146-5.734-26.953-15.004-36.224v0l-72.704-72.704c-9.276-9.33-22.119-15.104-36.311-15.104-0.014 0-0.029 0-0.043 0h0.002zM259.072 649.728c-0.012 0-0.026 0-0.041 0-14.192 0-27.035 5.774-36.309 15.102l-72.706 72.706c-9.271 9.271-15.004 22.078-15.004 36.224 0 28.293 22.936 51.228 51.228 51.228 14.146 0 26.953-5.734 36.224-15.004v0l72.704-72.704c9.354-9.28 15.145-22.14 15.145-36.352 0-28.277-22.923-51.2-51.2-51.2-0.014 0-0.029 0-0.043 0h0.002zM837.888 70.912c-0.012 0-0.026 0-0.041 0-14.192 0-27.035 5.774-36.309 15.102l-72.706 72.706c-9.271 9.271-15.004 22.078-15.004 36.224 0 28.293 22.936 51.228 51.228 51.228 14.146 0 26.953-5.734 36.224-15.004l72.704-72.704c9.354-9.28 15.145-22.14 15.145-36.352 0-28.277-22.923-51.2-51.2-51.2-0.014 0-0.029 0-0.043 0h0.002z" />
15
+ <glyph unicode="&#xe905;" glyph-name="behance-feed" d="M921.6 686.592h-265.984v66.56h265.984zM515.072 413.184c16.129-26.372 25.68-58.288 25.68-92.435 0-1.884-0.029-3.761-0.087-5.63l0.007 0.274c0.033-1.338 0.052-2.915 0.052-4.495 0-37.644-10.691-72.792-29.203-102.571l0.479 0.827c-26.295-43.778-69.259-75.257-119.9-85.809l-1.188-0.207c-26.73-5.71-57.441-8.98-88.916-8.98-1.501 0-2.999 0.007-4.496 0.022l0.229-0.002h-297.728v666.112h318.464q120.576-1.792 171.008-70.912c18.955-27.17 30.286-60.884 30.286-97.244 0-1.813-0.028-3.619-0.084-5.419l0.006 0.263c0.104-2.101 0.164-4.562 0.164-7.037 0-34.446-11.512-66.204-30.898-91.636l0.27 0.369c-14.164-15.607-31.163-28.349-50.225-37.468l-0.975-0.42c32.103-10.808 58.534-31.359 76.464-58.092l0.336-0.532zM153.6 517.888h138.24c1.644-0.074 3.572-0.116 5.51-0.116 23.558 0 45.664 6.215 64.769 17.095l-0.646-0.339c16.549 11.512 27.245 30.436 27.245 51.858 0 2.384-0.132 4.736-0.39 7.051l0.026-0.285c0.24 2.010 0.377 4.337 0.377 6.697 0 24.378-14.625 45.341-35.58 54.593l-0.382 0.15c-21.301 6.7-45.795 10.56-71.191 10.56-1.972 0-3.939-0.023-5.9-0.070l0.291 0.005h-122.368zM402.944 324.864c0.136 1.654 0.213 3.581 0.213 5.525 0 29.396-17.696 54.66-43.016 65.719l-0.462 0.18c-17.993 7.338-38.87 11.597-60.741 11.597-1.776 0-3.546-0.028-5.309-0.084l0.258 0.006h-140.288v-179.2h139.264c0.381-0.003 0.831-0.005 1.282-0.005 23.308 0 45.404 5.192 65.194 14.482l-0.94-0.396c26.295 14.463 43.817 41.982 43.817 73.594 0 3.385-0.201 6.723-0.591 10.003l0.038-0.397zM1020.928 433.408c2.383-20.017 3.743-43.2 3.743-66.701 0-9.945-0.243-19.833-0.725-29.658l0.054 1.384h-344.32c-0.111-1.89-0.175-4.1-0.175-6.325 0-38.958 19.468-73.369 49.207-94.036l0.376-0.247c18.274-11.292 40.428-17.983 64.145-17.983 1.389 0 2.773 0.023 4.152 0.069l-0.201-0.005c1.226-0.053 2.664-0.082 4.109-0.082 24.532 0 47.050 8.627 64.684 23.013l-0.185-0.146c10.601 8.834 19.216 19.658 25.342 31.941l0.258 0.571h126.208c-5.523-34.381-21.612-64.291-44.775-87.016l-0.025-0.024c-41.573-43.242-99.909-70.105-164.519-70.105-5.165 0-10.29 0.172-15.37 0.51l0.689-0.037c-0.994-0.014-2.168-0.022-3.344-0.022-62.153 0-119.132 22.149-163.476 58.985l0.42-0.339c-48.128 39.424-72.192 102.4-72.192 191.232q0 124.416 65.024 190.464c41.049 41.065 97.766 66.465 160.415 66.465 3.005 0 5.996-0.058 8.973-0.174l-0.428 0.013c1.251 0.021 2.726 0.033 4.205 0.033 38.754 0 75.591-8.209 108.867-22.983l-1.712 0.679c33.859-15.807 61.507-40.085 80.953-70.161l0.455-0.751c19.108-27.935 32.438-61.308 37.491-97.336l0.141-1.224zM896 421.888c-0.339 29.803-13.048 56.572-33.222 75.466l-0.058 0.054c-18.512 15.954-42.793 25.67-69.344 25.67-1.362 0-2.717-0.026-4.066-0.076l0.195 0.006c-1.181 0.051-2.567 0.080-3.959 0.080-26.804 0-51.089-10.784-68.754-28.249l0.009 0.009c-18.191-19.387-30.505-44.484-33.983-72.326l-0.065-0.634z" />
16
+ <glyph unicode="&#xe906;" glyph-name="charts" d="M417.536-64c-228.348 5.805-411.243 192.296-411.243 421.504s182.895 415.698 410.706 421.493l0.538 0.011c28.277 0 51.2-22.923 51.2-51.2v0-318.464h314.88c28.277 0 51.2-22.923 51.2-51.2v0c0.004-0.687 0.006-1.499 0.006-2.312 0-230.973-186.516-418.384-417.148-419.832l-0.138-0.001zM366.336 671.488c-150.508-27.256-263.166-157.285-263.166-313.626 0-174.442 140.255-316.126 314.148-318.435l0.218-0.002c156.431 0.852 285.928 115.088 310.535 264.661l0.249 1.835h-310.784c-28.277 0-51.2 22.923-51.2 51.2v0zM972.8 486.912h-366.080c-28.277 0-51.2 22.923-51.2 51.2v0 370.688c0 28.277 22.923 51.2 51.2 51.2v0c230.769-1.45 417.284-188.86 417.284-419.832 0-0.633-0.001-1.265-0.004-1.897v0.097c0-0.076 0.001-0.166 0.001-0.256 0-28.277-22.923-51.2-51.2-51.2 0 0 0 0-0.001 0v0zM657.92 589.312h259.584c-21.95 134.407-125.709 239.377-257.664 262.884l-1.92 0.284z" />
17
+ <glyph unicode="&#xe907;" glyph-name="content-switcher" d="M712.192 742.4h-400.384c-1.401 0.023-3.054 0.036-4.71 0.036-166.884 0-302.687-133.071-307.090-298.893l-0.009-0.408c4.411-166.229 140.214-299.3 307.098-299.3 1.656 0 3.309 0.013 4.958 0.039l-0.249-0.003h400.384c1.401-0.023 3.054-0.036 4.71-0.036 166.884 0 302.687 133.071 307.090 298.893l0.009 0.408c-4.411 166.229-140.214 299.3-307.098 299.3-1.656 0-3.309-0.013-4.958-0.039l0.249 0.003zM712.192 242.176h-400.384c-1.382-0.034-3.010-0.053-4.643-0.053-111.776 0-202.638 89.546-204.762 200.814l-0.003 0.199c2.127 111.467 92.989 201.013 204.765 201.013 1.633 0 3.261-0.019 4.884-0.057l-0.241 0.004h400.384c1.382 0.034 3.010 0.053 4.643 0.053 111.776 0 202.638-89.546 204.762-200.814l0.003-0.199c-2.127-111.467-92.989-201.013-204.765-201.013-1.633 0-3.261 0.019-4.884 0.057l0.241-0.004zM843.52 443.136c0-70.268-59.371-127.232-132.608-127.232s-132.608 56.964-132.608 127.232c0 70.268 59.371 127.232 132.608 127.232s132.608-56.964 132.608-127.232z" />
18
+ <glyph unicode="&#xe908;" glyph-name="divider" d="M701.184 501.76h269.056c29.691 0 53.76-24.069 53.76-53.76s-24.069-53.76-53.76-53.76h-269.056c-29.691 0-53.76 24.069-53.76 53.76s24.069 53.76 53.76 53.76zM53.76 501.76h269.056c29.691 0 53.76-24.069 53.76-53.76s-24.069-53.76-53.76-53.76h-269.056c-29.691 0-53.76 24.069-53.76 53.76s24.069 53.76 53.76 53.76zM565.76 547.84v-199.68c0-29.691-24.069-53.76-53.76-53.76s-53.76 24.069-53.76 53.76v199.68c0 29.691 24.069 53.76 53.76 53.76s53.76-24.069 53.76-53.76z" />
19
+ <glyph unicode="&#xe909;" glyph-name="facebook-feed-1" d="M1024 448c0 282.77-229.23 512-512 512s-512-229.23-512-512c0-282.77 229.23-512 512-512v0h8.96v398.592h-110.080v128h110.080v94.72c0 109.312 66.816 168.96 164.352 168.96 0.851 0.003 1.859 0.005 2.868 0.005 33.709 0 66.983-1.861 99.725-5.487l-4.033 0.363v-114.432h-67.072c-52.992 0-63.488-25.6-63.488-62.208v-81.408h128l-16.384-128h-111.616v-379.392c215.808 63.424 370.688 259.681 370.688 492.113 0 0.062 0 0.123 0 0.185v-0.009z" />
20
+ <glyph unicode="&#xe90a;" glyph-name="facebook-feed-2" horiz-adv-x="553" d="M532.736 960h-132.864c-148.736 0-245.504-99.072-245.504-251.904v-116.224h-133.632c-11.483-0.144-20.736-9.487-20.736-20.99 0-0.001 0-0.001 0-0.002v0-168.448c0-11.452 9.284-20.736 20.736-20.736h133.632v-424.704c0-0.007 0-0.016 0-0.025 0-11.233 8.824-20.406 19.918-20.965l0.050-0.002h174.336c11.483 0.144 20.736 9.487 20.736 20.99 0 0.001 0 0.001 0 0.002v0 424.704h156.16c0 0 0.001 0 0.002 0 11.504 0 20.846 9.253 20.99 20.722v168.462c-0.056 5.788-2.39 11.020-6.147 14.851l0.003-0.003c-3.815 3.776-9.055 6.117-14.843 6.144h-156.165v98.304c0 47.36 11.52 71.424 72.96 71.424h90.368c11.483 0.144 20.736 9.487 20.736 20.99 0 0.001 0 0.001 0 0.002v0 156.16c0.004 0.152 0.006 0.332 0.006 0.512 0 11.452-9.284 20.736-20.736 20.736-0.002 0-0.004 0-0.007 0v0z" />
21
+ <glyph unicode="&#xe90b;" glyph-name="facebook-messenger-chat" horiz-adv-x="1016" d="M508.16 960c-281.6 0-508.16-212.224-508.16-474.112 1.31-150.237 74.076-283.21 185.921-366.748l1.215-0.868v-182.272l170.496 97.024c43.79-12.85 94.098-20.242 146.132-20.242 1.546 0 3.090 0.007 4.633 0.020l-0.237-0.002c281.6 0 508.16 212.224 508.16 474.112s-226.56 473.088-508.16 473.088zM559.36 325.632l-130.304 136.96-249.088-136.96 273.92 290.048 131.072-134.4 246.528 134.4z" />
22
+ <glyph unicode="&#xe90c;" glyph-name="facebook-reviews" d="M313.344-44.544c0.012 0 0.026 0 0.041 0 14.065 0 26.805 5.671 36.058 14.851l-0.003-0.003c-9.193-9.374-21.948-15.226-36.071-15.36h-7.193zM362.24-8.448c-1.808-6.862-5.091-12.801-9.506-17.702l0.034 0.038c4.071 5.003 7.302 10.881 9.366 17.283l0.106 0.381zM985.344 564.992c-29.427 34.25-72.791 55.808-121.19 55.808-0.054 0-0.109 0-0.163 0h-203.256v152.064c-0.289 89.278-72.729 161.539-162.047 161.539-0.36 0-0.72-0.001-1.080-0.004h0.055c-0.171 0.001-0.374 0.002-0.576 0.002-54.741 0-100.149-39.957-108.651-92.296l-0.085-0.634c-17.401-103.302-47.984-195.899-90.434-281.571l2.626 5.859-18.944-38.4h-160.512c-66.875 0-121.088-54.213-121.088-121.088v0-329.728c0-66.875 54.213-121.088 121.088-121.088v0h192.256c0.012 0 0.026 0 0.041 0 14.065 0 26.805 5.671 36.058 14.851l-0.003-0.003 3.328 3.584c4.071 5.003 7.302 10.881 9.366 17.283l0.106 0.381c1.462 4.385 2.306 9.433 2.306 14.678 0 0.15-0.001 0.299-0.002 0.448v-0.023 456.96l27.904 57.856c43.986 87.809 77.774 189.682 96.1 296.831l0.924 6.529c0.723 4.138 4.289 7.244 8.581 7.244 0.405 0 0.803-0.028 1.193-0.081l-0.045 0.005c32.66 0 59.136-26.476 59.136-59.136v0-203.264c0-28.277 22.923-51.2 51.2-51.2v0h254.464c0.015 0 0.033 0 0.052 0 17.429 0 33.057-7.707 43.665-19.898l0.060-0.070c8.98-9.973 14.473-23.241 14.473-37.791 0-3.016-0.236-5.977-0.69-8.865l0.041 0.32-53.76-342.528c-4.741-29.188-29.764-51.2-59.928-51.2-0.081 0-0.163 0-0.244 0h-351.731c-28.277 0-51.2-22.923-51.2-51.2s22.923-51.2 51.2-51.2v0h351.744c0.229-0.001 0.499-0.002 0.77-0.002 81.147 0 148.384 59.551 160.395 137.334l0.115 0.908 53.248 342.528c1.139 7.176 1.789 15.451 1.789 23.878 0 39.967-14.631 76.516-38.828 104.585l0.175-0.208zM102.4 76.544v329.728c0 10.321 8.367 18.688 18.688 18.688v0h141.056v-367.104h-141.056c-10.321 0-18.688 8.367-18.688 18.688v0z" />
23
+ <glyph unicode="&#xe90d;" glyph-name="google-reviews" horiz-adv-x="1003" d="M512 521.327h483.441c4.978-25.633 7.876-55.155 7.976-85.336v-0.083c0.041-2.472 0.064-5.389 0.064-8.312 0-90.976-22.485-176.7-62.201-251.919l1.417 2.944c-40.134-75.121-99.112-135.586-170.742-176.397l-2.155-1.13c-71.446-40.366-156.884-64.151-247.877-64.151-3.308 0-6.609 0.031-9.903 0.094l0.494-0.007c-0.609-0.003-1.329-0.004-2.050-0.004-71.309 0-139.146 14.862-200.585 41.656l3.238-1.258c-63.637 26.44-118.043 62.856-163.975 107.885l0.084-0.082c-45.204 45.719-81.931 99.933-107.558 160.015l-1.274 3.361c-25.542 58.847-40.401 127.387-40.401 199.397s14.859 140.551 41.677 202.722l-1.276-3.325c26.9 63.443 63.628 117.657 108.879 163.425l-0.047-0.048c45.668 45.291 99.897 82.033 160.034 107.571l3.343 1.261c58.2 25.537 126.038 40.398 197.347 40.398 0.721 0 1.441-0.002 2.161-0.005h-0.111c2.575 0.049 5.611 0.077 8.654 0.077 129.937 0 247.94-51.099 335.008-134.299l-0.185 0.175-139.449-134.046c-50.634 49.245-119.851 79.612-196.16 79.612-2.767 0-5.524-0.040-8.272-0.119l0.404 0.009c-0.679 0.005-1.482 0.009-2.286 0.009-57.888 0-111.998-16.174-158.058-44.249l1.341 0.759c-95.41-57.522-158.235-160.595-158.235-278.341 0-0.558 0.001-1.115 0.004-1.672v0.086c-0.002-0.471-0.004-1.029-0.004-1.586 0-117.747 62.825-220.82 156.782-277.527l1.453-0.814c44.719-27.316 98.83-43.49 156.717-43.49 0.804 0 1.606 0.003 2.409 0.009l-0.123-0.001c2.12-0.047 4.618-0.074 7.122-0.074 35.546 0 69.834 5.387 102.091 15.39l-2.439-0.651c30.543 9.619 57.11 23.286 80.777 40.67l-0.761-0.533c20.712 15.883 38.662 33.833 54.041 53.862l0.504 0.683c13.43 17.224 25.003 36.895 33.846 57.994l0.631 1.696c6.285 14.746 11.462 32.014 14.698 49.956l0.225 1.501h-290.734z" />
24
+ <glyph unicode="&#xe90e;" glyph-name="horizontal-scroll" d="M1024 448c0-63.623-51.577-115.2-115.2-115.2s-115.2 51.577-115.2 115.2c0 63.623 51.577 115.2 115.2 115.2s115.2-51.577 115.2-115.2zM627.2 448c0-63.623-51.577-115.2-115.2-115.2s-115.2 51.577-115.2 115.2c0 63.623 51.577 115.2 115.2 115.2s115.2-51.577 115.2-115.2zM230.4 448c0-63.623-51.577-115.2-115.2-115.2s-115.2 51.577-115.2 115.2c0 63.623 51.577 115.2 115.2 115.2s115.2-51.577 115.2-115.2z" />
25
+ <glyph unicode="&#xe90f;" glyph-name="hover-box" horiz-adv-x="817" d="M813.824 717.312l-3.072-6.4c-0.853-2.067-1.974-3.845-3.346-5.396l0.018 0.020c-1.478-2.095-2.991-3.933-4.627-5.652l0.019 0.020-165.632-172.544c-8.842-9.276-21.277-15.058-35.063-15.104h-0.009c-13.619 0.132-25.865 5.901-34.538 15.081l-0.022 0.023c-8.923 9.426-14.41 22.184-14.41 36.224s5.487 26.798 14.433 36.248l-0.023-0.024 81.92 85.248h-460.8c-50.328-1.28-90.637-42.383-90.637-92.9 0-0.55 0.005-1.099 0.014-1.647l-0.001 0.082v-207.872c0-0.012 0-0.027 0-0.041 0-27.557-21.77-50.029-49.050-51.156l-0.102-0.003c-27.382 1.13-49.152 23.602-49.152 51.159 0 0.014 0 0.029 0 0.043v-0.002 207.872c-0.022 1.081-0.034 2.355-0.034 3.632 0 105.227 84.090 190.814 188.738 193.228l0.225 0.004h460.8l-81.92 85.248c-9.201 9.255-14.889 22.011-14.889 36.096s5.687 26.842 14.891 36.098l-0.002-0.002c8.715 9.323 21.087 15.133 34.816 15.133s26.101-5.81 34.791-15.106l0.025-0.027 162.048-169.216c1.34-0.998 2.515-2.092 3.56-3.3l0.024-0.028 5.376-6.656 2.048-3.328c0.871-1.608 1.816-3.63 2.658-5.705l0.158-0.439c2.466-6.070 3.897-13.112 3.897-20.488 0-6.602-1.146-12.935-3.251-18.813l0.122 0.39zM813.824 717.312c2.128 5.673 3.36 12.228 3.36 19.072s-1.232 13.399-3.486 19.458l0.126-0.386c2.272-5.41 3.592-11.699 3.592-18.296 0-0.318-0.003-0.635-0.009-0.952l0.001 0.047c0-0.037 0-0.081 0-0.125 0-6.776-1.316-13.244-3.707-19.163l0.123 0.344zM818.176 513.28v-207.872c0.022-1.081 0.034-2.355 0.034-3.632 0-105.227-84.090-190.814-188.738-193.228l-0.225-0.004h-460.8l81.92-85.248c9.201-9.255 14.889-22.011 14.889-36.096s-5.687-26.842-14.891-36.098l0.002 0.002c-8.715-9.323-21.087-15.133-34.816-15.133s-26.101 5.81-34.791 15.106l-0.025 0.027-166.4 172.544-5.376 6.656-2.048 3.328c-1.078 1.936-2.195 4.296-3.172 6.727l-0.156 0.441c-2.128 5.673-3.36 12.228-3.36 19.072s1.232 13.399 3.486 19.458l-0.126-0.386 3.072 6.4c0.853 2.067 1.974 3.845 3.346 5.396l-0.018-0.020c1.478 2.095 2.991 3.933 4.627 5.652l-0.019-0.020 3.584 3.328 162.048 169.216c8.748 9.255 21.109 15.015 34.816 15.015s26.068-5.76 34.795-14.992l0.021-0.023c8.923-9.426 14.41-22.184 14.41-36.224s-5.487-26.798-14.433-36.248l0.023 0.024-81.92-85.248h460.8c50.328 1.28 90.637 42.383 90.637 92.9 0 0.55-0.005 1.099-0.014 1.647l0.001-0.082v207.616c0 27.146 22.006 49.152 49.152 49.152s49.152-22.006 49.152-49.152v0zM3.584 140.8c-2.681 5.539-4.353 12.017-4.605 18.857l-0.003 0.087c-0.004 0.229-0.006 0.5-0.006 0.771 0 6.532 1.223 12.778 3.453 18.522l-0.119-0.349c-1.717-5.129-2.707-11.035-2.707-17.172 0-7.462 1.465-14.583 4.122-21.089l-0.135 0.373z" />
26
+ <glyph unicode="&#xe910;" glyph-name="icon-box" d="M1017.344 600.064l-171.008 286.72c-8.275 13.36-22.81 22.155-39.407 22.272h-588.817c-0.209 0.003-0.456 0.005-0.704 0.005-16.738 0-31.415-8.826-39.629-22.078l-0.115-0.199-41.984-70.912c-4.095-6.702-6.519-14.811-6.519-23.486 0-16.618 8.895-31.158 22.184-39.118l0.207-0.115c6.609-4.020 14.6-6.4 23.147-6.4 0.052 0 0.105 0 0.157 0h-0.008c0.004 0 0.009 0 0.014 0 16.506 0 30.973 8.727 39.040 21.818l0.114 0.198 28.928 48.64h269.056c0.19-0.003 0.414-0.005 0.638-0.005 4.161 0 8.168 0.657 11.923 1.874l-0.274-0.077v-1.792l61.44-195.072h-56.064c-1.024 0.082-2.218 0.128-3.423 0.128-25.308 0-45.824-20.516-45.824-45.824s20.516-45.824 45.824-45.824c1.205 0 2.398 0.046 3.579 0.138l-0.157-0.010h60.416c-29.44-115.2-74.24-291.584-100.608-395.008l-387.072 445.696 49.152 81.92c4.031 6.698 6.416 14.782 6.416 23.424 0 25.387-20.581 45.968-45.968 45.968-16.746 0-31.4-8.954-39.436-22.336l-0.116-0.208-65.792-110.336c-4.2-6.767-6.689-14.976-6.689-23.767 0-11.391 4.18-21.806 11.090-29.795l-0.049 0.058 464.128-533.76c2.54-3.3 5.404-6.164 8.595-8.623l0.109-0.081h1.28c0.32-0.613 0.862-1.072 1.518-1.275l0.018-0.005 2.56-1.536c0.264-0.115 0.572-0.181 0.896-0.181s0.632 0.067 0.911 0.187l-0.015-0.006c1.204-0.999 2.675-1.718 4.29-2.038l0.062-0.010c0.346-0.066 0.745-0.105 1.152-0.105s0.806 0.038 1.192 0.111l-0.040-0.006h8.704c0.846-0.115 1.823-0.181 2.816-0.181s1.97 0.066 2.928 0.193l-0.112-0.012h7.936c2.184 0.261 4.173 0.802 6.032 1.59l-0.144-0.054h7.168l2.56 1.536c0.627 0.293 1.145 0.729 1.528 1.268l0.008 0.012c3.857 2.668 7.152 5.801 9.909 9.37l0.075 0.102 465.92 533.504c6.861 7.931 11.041 18.346 11.041 29.737 0 8.791-2.489 17-6.801 23.962l0.112-0.195zM604.16 216.064c18.432 73.216 44.288 174.592 80.128 315.392h193.536zM680.96 622.848l-60.416 194.56h160.512l116.48-195.072zM524.8 817.408h-12.8c0.19-0.003 0.414-0.005 0.638-0.005 4.161 0 8.168 0.657 11.923 1.874l-0.274-0.077zM414.208 530.944h-25.6c-1.024-0.082-2.218-0.128-3.423-0.128-25.308 0-45.824 20.516-45.824 45.824s20.516 45.824 45.824 45.824c1.205 0 2.398-0.046 3.579-0.138l-0.157 0.010h25.6c1.024 0.082 2.218 0.128 3.423 0.128 25.308 0 45.824-20.516 45.824-45.824s-20.516-45.824-45.824-45.824c-1.205 0-2.398 0.046-3.579 0.138l0.157-0.010z" />
27
+ <glyph unicode="&#xe911;" glyph-name="ihover" horiz-adv-x="847" d="M841.472 629.504c-8.619 16.836-25.849 28.16-45.723 28.16-0.035 0-0.071 0-0.106 0h-179.194l82.432 234.24c1.656 4.818 2.612 10.37 2.612 16.145 0 11.464-3.768 22.048-10.133 30.582l0.096-0.135c-9.398 13.083-24.57 21.504-41.708 21.504-0.007 0-0.014 0-0.021 0h-387.839c-0.034 0-0.074 0-0.113 0-7.29 0-14.205-1.604-20.411-4.477l0.301 0.125c-1.269-0.32-2.381-0.85-3.356-1.556l0.028 0.020c-3.416-1.68-6.361-3.642-9.013-5.933l0.053 0.045c-1.34-0.998-2.515-2.092-3.56-3.3l-0.024-0.028c-5.82-5.654-10.239-12.719-12.707-20.644l-0.093-0.348-209.408-534.272c-2.173-5.467-3.433-11.803-3.433-18.432 0-28.224 22.837-51.114 51.041-51.2h307.208l-69.12-320.512c-0.057-0.231-0.090-0.496-0.090-0.768s0.033-0.537 0.095-0.791l-0.005 0.023c-0.18-1.613-0.283-3.482-0.283-5.376s0.103-3.763 0.303-5.604l-0.020 0.228c-0.126-1.304-0.198-2.82-0.198-4.352s0.072-3.048 0.213-4.543l-0.015 0.191c0.462-3.187 1.177-6.036 2.146-8.765l-0.098 0.317c3.683-9.814 9.867-17.977 17.787-23.967l0.133-0.097c2.301-1.734 4.901-3.352 7.642-4.73l0.294-0.134 6.656-2.56 6.4-1.792c1.38-0.121 2.986-0.19 4.608-0.19s3.228 0.069 4.815 0.204l-0.207-0.014c2.126-0.433 4.596-0.71 7.12-0.767l0.048-0.001h8.192l5.376 2.304c1.574 0.55 2.934 1.333 4.117 2.321l-0.021-0.017c5.626 3.529 10.376 7.872 14.242 12.928l0.094 0.128 2.304 3.328 455.936 619.008c6.289 8.407 10.070 19.008 10.070 30.493 0 8.391-2.019 16.311-5.597 23.3l0.134-0.289zM438.272 208.128l32.256 152.064c0.728 3.236 1.144 6.951 1.144 10.765 0 28.277-22.923 51.2-51.2 51.2-0.402 0-0.804-0.005-1.204-0.014l0.059 0.001h-293.12l170.496 435.456h280.32l-81.152-230.4-1.28-3.328c-0.77-1.911-1.394-4.15-1.768-6.473l-0.024-0.183v-5.12c-0.064-0.767-0.101-1.659-0.101-2.56s0.037-1.793 0.109-2.676l-0.008 0.116s0-2.56 0-3.584c-0.119-0.961-0.188-2.072-0.188-3.2s0.068-2.239 0.201-3.331l-0.013 0.131c0.549-3.46 1.441-6.56 2.661-9.489l-0.101 0.273v-1.536c0.555-1.388 1.156-2.567 1.849-3.683l-0.057 0.099c0.646-1.671 1.51-3.111 2.578-4.374l-0.018 0.022 2.304-3.072c2.179-2.902 4.622-5.426 7.343-7.617l0.081-0.063c3.711-2.876 7.916-5.441 12.396-7.512l0.404-0.168 4.608-1.792c1.937-0.729 4.191-1.27 6.531-1.525l0.125-0.011c1.266-0.121 2.737-0.19 4.224-0.19s2.958 0.069 4.41 0.204l-0.186-0.014h150.784zM288.768-21.504c-0.119 0.808-0.187 1.74-0.187 2.688s0.068 1.88 0.199 2.792l-0.012-0.104v3.328c-0.126-1.304-0.198-2.82-0.198-4.352s0.072-3.048 0.213-4.543l-0.015 0.191zM528.128 557.568h-4.608z" />
28
+ <glyph unicode="&#xe912;" glyph-name="image-accordion" d="M972.8 883.2h-921.6c-28.277 0-51.2-22.923-51.2-51.2v0-776.192c0-28.277 22.923-51.2 51.2-51.2v0h921.6c28.277 0 51.2 22.923 51.2 51.2v0 776.192c0 28.277-22.923 51.2-51.2 51.2v0zM102.4 780.8h204.8v-673.792h-204.8zM409.6 780.8h204.8v-673.792h-204.8zM921.6 107.008h-204.8v673.792h204.8z" />
29
+ <glyph unicode="&#xe913;" glyph-name="image-comparison" d="M972.8 883.2h-921.6c-28.277 0-51.2-22.923-51.2-51.2v0-776.192c0-28.277 22.923-51.2 51.2-51.2v0h921.6c28.277 0 51.2 22.923 51.2 51.2v0 776.192c0 28.277-22.923 51.2-51.2 51.2v0zM102.4 780.8h358.4v-234.496c-37.365-19.557-62.424-58.052-62.424-102.4s25.060-82.843 61.791-102.098l0.633-0.302v-233.728h-358.4zM921.6 107.008h-358.4v234.496c37.365 19.557 62.424 58.052 62.424 102.4s-25.060 82.843-61.791 102.098l-0.633 0.302v234.496h358.4z" />
30
+ <glyph unicode="&#xe914;" glyph-name="image-hotspots" d="M1013.248 300.8l-371.456 611.072c-13.171 21.338-36.424 35.345-62.949 35.345-31.533 0-58.442-19.796-68.979-47.638l-0.168-0.507-81.408-220.16c-2.232-5.535-3.527-11.953-3.527-18.674 0-28.277 22.923-51.2 51.2-51.2 22.218 0 41.13 14.152 48.215 33.933l0.112 0.357 60.928 164.608 310.784-510.72-281.6 32.512-142.080 230.4c-6.846 11.049-17.646 19.094-30.382 22.202l-0.338 0.070h-6.4c-2.001 0.367-4.304 0.577-6.656 0.577s-4.655-0.21-6.891-0.612l0.235 0.035c-7.397-0.938-14.069-3.387-19.92-7.033l0.208 0.121-332.8-202.752c-41.525-25.053-68.866-69.925-68.866-121.183 0-26.712 7.425-51.689 20.323-72.981l-0.354 0.629 59.904-98.816c25.23-40.968 69.837-67.869 120.728-67.869 27.103 0 52.424 7.63 73.932 20.86l-0.613-0.351 200.96 121.856 40.96-67.584c2.932-4.782 4.669-10.572 4.669-16.768 0-17.919-14.526-32.445-32.445-32.445-11.723 0-21.994 6.218-27.695 15.535l-0.081 0.142-12.544 20.736c-7.063 7.884-17.275 12.822-28.641 12.822-21.208 0-38.4-17.192-38.4-38.4 0-5.174 1.023-10.109 2.878-14.613l-0.093 0.255 12.544-20.48c19.597-30.953 53.657-51.205 92.447-51.205 0.349 0 0.698 0.002 1.046 0.005h-0.053c60.099 0.173 108.751 48.933 108.751 109.056 0 20.914-5.887 40.452-16.094 57.049l0.271-0.473-40.96 67.584 55.808 33.792 345.088-39.68c2.017-0.196 4.359-0.308 6.728-0.308 40.719 0 73.728 33.009 73.728 73.728 0 13.698-3.736 26.524-10.244 37.513l0.187-0.342zM221.184 121.6c-5.76-3.595-12.754-5.726-20.247-5.726-13.905 0-26.095 7.342-32.906 18.36l-0.096 0.166-59.904 97.792c-3.493 5.721-5.562 12.643-5.562 20.047 0 13.984 7.377 26.245 18.451 33.105l0.167 0.096 291.584 176.896 102.4-163.84z" />
31
+ <glyph unicode="&#xe915;" glyph-name="image-layers" d="M897.28 960h-512c-70.692 0-128-57.308-128-128v0-124.16h-129.28c-70.14-0.724-126.72-57.751-126.72-127.994 0-0.002 0-0.005 0-0.007v0-515.84c0-70.692 57.308-128 128-128v0h510.72c70.14 0.724 126.72 57.751 126.72 127.994 0 0.002 0 0.005 0 0.007v0 124.16h131.84c70.692 0 128 57.308 128 128v0 515.84c0 0.002 0 0.004 0 0.006 0 70.692-57.308 128-128 128-0.45 0-0.899-0.002-1.348-0.007l0.068 0.001zM664.064 64c0-14.138-11.462-25.6-25.6-25.6v0h-510.464c-14.138 0-25.6 11.462-25.6 25.6v0 516.096c0 14.138 11.462 25.6 25.6 25.6v0h512c14.138 0 25.6-11.462 25.6-25.6v0zM921.6 315.904c0-14.138-11.462-25.6-25.6-25.6v0h-130.56v289.792c0 0.002 0 0.004 0 0.006 0 70.242-56.58 127.27-126.651 127.993l-0.069 0.001h-278.784v123.904c0 14.138 11.462 25.6 25.6 25.6v0h512c14.138 0 25.6-11.462 25.6-25.6v0z" />
32
+ <glyph unicode="&#xe916;" glyph-name="instagram-feed" d="M1021.185 659.019c-0.751 44.832-9.132 87.479-23.895 127.015l0.861-2.63c-13.62 35.496-33.821 65.731-59.321 90.547l-0.056 0.054c-24.912 25.418-55.137 45.527-88.888 58.541l-1.713 0.581c-37.011 14.227-79.807 22.877-124.502 23.796l-0.394 0.006c-54.77 3.071-72.174 3.071-211.403 3.071s-156.121 0-210.891-2.815c-44.715-0.687-87.285-8.98-126.762-23.634l2.633 0.856c-35.667-13.843-66.001-34.392-90.768-60.307l-0.089-0.094c-25.341-24.913-45.37-55.142-58.289-88.889l-0.576-1.712c-14.394-36.776-23.062-79.333-23.798-123.819l-0.004-0.31c-3.327-54.77-3.327-72.174-3.327-211.147s0-156.633 3.071-211.147c0.852-44.813 9.509-87.354 24.663-126.668l-0.86 2.539c13.561-35.564 33.676-65.878 59.083-90.82l0.038-0.037c24.854-25.809 55.081-46.253 88.901-59.556l1.7-0.589c36.769-14.089 79.281-22.725 123.667-23.793l0.462-0.009c54.77-1.792 72.174-1.792 211.147-1.792s156.377 0 211.147 2.815c44.715 0.687 87.285 8.98 126.762 23.634l-2.633-0.856c69.708 27.177 123.825 81.295 150.389 149.222l0.613 1.781c14.268 36.775 22.923 79.313 23.796 123.758l0.006 0.371c1.792 54.514 1.792 71.918 1.792 211.147s0 156.377-2.559 210.891zM929.048 241.076c-0.489-34.304-6.923-66.959-18.313-97.185l0.653 1.976c-17.676-44.72-52.476-79.436-96.104-96.601l-1.152-0.399c-28.172-10.979-60.775-17.438-94.86-17.659h-0.093c-54.002-2.559-70.382-3.071-206.796-3.071s-153.562 0-207.052 3.071c-34.177 0.222-66.781 6.681-96.819 18.294l1.867-0.635c-23.095 8.559-42.768 21.564-58.829 38.097l-0.036 0.038c-16.478 16.157-29.466 35.81-37.769 57.763l-0.366 1.102c-10.747 28.17-17.182 60.739-17.657 94.748l-0.002 0.205c-2.303 53.747-2.815 70.126-2.815 207.308s0 153.562 2.815 206.796c0.444 34.209 6.883 66.781 18.308 96.9l-0.648-1.947c8.59 23.126 21.686 42.807 38.339 58.816l0.051 0.049c16.098 16.57 35.77 29.575 57.781 37.78l1.084 0.354c28.172 10.979 60.775 17.438 94.86 17.659h0.093c54.002 2.559 70.382 3.071 206.796 3.071s153.562 0 206.796-3.071c34.263-0.2 66.957-6.662 97.079-18.295l-1.871 0.636c23.005-8.567 42.593-21.571 58.567-38.091l0.042-0.044c16.646-16.096 29.731-35.765 38.031-57.779l0.359-1.086c10.747-28.17 17.182-60.739 17.657-94.748l0.002-0.205c2.303-54.002 2.815-70.126 2.815-206.796s-0.512-153.562-2.815-207.052zM511.872 710.974c-145.197-0.146-262.846-117.885-262.846-263.102 0-145.307 117.795-263.102 263.102-263.102s263.102 117.795 263.102 263.102c0 0.090 0 0.18 0 0.27v-0.014c0 0 0 0 0 0 0 145.166-117.68 262.846-262.846 262.846-0.18 0-0.36 0-0.54-0.001h0.028zM511.872 277.419c-94.28 0-170.709 76.429-170.709 170.709s76.429 170.709 170.709 170.709c94.28 0 170.709-76.429 170.709-170.709v0c0-94.28-76.429-170.709-170.709-170.709v0zM846.892 721.468c0-33.924-27.501-61.425-61.425-61.425s-61.425 27.501-61.425 61.425c0 33.924 27.501 61.425 61.425 61.425v0c0.076 0 0.166 0.001 0.256 0.001 33.783 0 61.169-27.386 61.169-61.169 0-0.090 0-0.18-0.001-0.27v0.014z" />
33
+ <glyph unicode="&#xe917;" glyph-name="ken-burns" d="M896-64h-768c-70.692 0-128 57.308-128 128v0 768c0 70.692 57.308 128 128 128v0h278.528c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0h-278.528c-14.138 0-25.6-11.462-25.6-25.6v0-768c0-14.138 11.462-25.6 25.6-25.6v0h768c14.138 0 25.6 11.462 25.6 25.6v0 228.352c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0-228.352c0-70.692-57.308-128-128-128v0zM1024 908.8v-369.664c0-28.277-22.923-51.2-51.2-51.2s-51.2 22.923-51.2 51.2v0 246.272l-373.504-373.504c-8.895-7.652-20.555-12.311-33.303-12.311-28.277 0-51.2 22.923-51.2 51.2 0 12.749 4.659 24.409 12.368 33.371l-0.057-0.067 373.504 373.504h-212.48c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h335.872c1.46 0.187 3.15 0.294 4.864 0.294s3.404-0.107 5.062-0.314l-0.198 0.020c3.44-0.752 6.434-1.721 9.294-2.943l-0.334 0.127 8.192-4.352s0 0 0 0c2.731-2.113 5.151-4.208 7.451-6.426l-0.027 0.026c2.192-2.273 4.287-4.693 6.249-7.222l0.151-0.202s0 0 0 0c1.384-2.23 2.835-4.916 4.138-7.685l0.214-0.507s0 0 0 0c2.406-3.393 4.477-7.281 6.028-11.423l0.116-0.353c0.207-1.538 0.325-3.315 0.325-5.12s-0.118-3.582-0.347-5.325l0.022 0.205z" />
34
+ <glyph unicode="&#xe918;" glyph-name="lottie-section-background" d="M972.8-64h-921.6c-28.277 0-51.2 22.923-51.2 51.2v0 921.6c0 28.277 22.923 51.2 51.2 51.2v0h921.6c28.277 0 51.2-22.923 51.2-51.2v0-921.6c0-28.277-22.923-51.2-51.2-51.2v0zM102.4 857.6v-819.2h819.2v819.2zM782.080 648.96c-1.865-26.75-24.022-47.744-51.083-47.744-2.207 0-4.381 0.14-6.514 0.41l0.253-0.026h-1.536c-20.277-0.815-38.332-9.698-51.158-23.506l-0.042-0.046c-39.624-37.719-72.674-81.886-97.557-130.899l-1.259-2.733c-5.632-10.24-11.264-20.224-16.64-30.464-14.848-25.6-29.696-53.504-45.568-79.872-30.788-53.58-70.537-98.474-117.675-134.109l-1.109-0.803c-25.659-18.893-57.89-30.236-92.771-30.236-1.045 0-2.088 0.010-3.129 0.030l0.156-0.002c-17.084 0.379-32.471 7.342-43.786 18.442l0.010-0.010c-7.369 8.172-11.878 19.049-11.878 30.978 0 1.080 0.037 2.152 0.11 3.213l-0.008-0.143c1.795 26.812 23.983 47.88 51.092 47.88 2.567 0 5.089-0.189 7.555-0.554l-0.279 0.034h1.536c20.277 0.815 38.332 9.698 51.158 23.506l0.042 0.046c39.624 37.719 72.674 81.886 97.557 130.899l1.259 2.733c5.632 10.24 11.264 20.224 16.64 30.464 14.848 25.6 29.696 53.504 45.568 79.872 30.788 53.58 70.537 98.474 117.675 134.109l1.109 0.803c25.659 18.893 57.89 30.236 92.771 30.236 1.045 0 2.088-0.010 3.129-0.030l-0.156 0.002c17.084-0.379 32.471-7.342 43.786-18.442l-0.010 0.010c6.802-8.012 10.938-18.473 10.938-29.9 0-1.46-0.068-2.905-0.2-4.331l0.014 0.183z" />
35
+ <glyph unicode="&#xe919;" glyph-name="magic-section" d="M1008.896 872.704l-249.856-250.112h176.64c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0h-300.288c-1.46-0.187-3.15-0.294-4.864-0.294s-3.404 0.107-5.062 0.314l0.198-0.020c-2.679 0.362-5.098 0.99-7.393 1.867l0.225-0.075-6.656 2.816h-1.792c-2.050 0.972-3.815 2.082-5.431 3.371l0.055-0.043-5.632 4.864c-1.715 1.716-3.31 3.554-4.769 5.499l-0.095 0.133c-1.246 1.561-2.356 3.326-3.257 5.211l-0.071 0.165c-0.040 0.269-0.063 0.58-0.063 0.896s0.023 0.627 0.067 0.931l-0.004-0.035c-0.96 1.827-1.911 4.026-2.707 6.297l-0.109 0.359c-0.602 1.671-1.219 3.813-1.716 6l-0.076 0.4c-0.181 1.498-0.284 3.233-0.284 4.992s0.103 3.494 0.304 5.199l-0.020-0.207v302.848c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0-176.64l248.064 249.856c9.255 9.201 22.011 14.889 36.096 14.889s26.842-5.687 36.098-14.891l-0.002 0.002c9.201-9.255 14.889-22.011 14.889-36.096s-5.687-26.842-14.891-36.098l0.002 0.002zM439.808 324.608v-300.288c0-28.277-22.923-51.2-51.2-51.2s-51.2 22.923-51.2 51.2v0 176.64l-250.112-249.856c-9.255-9.201-22.011-14.889-36.096-14.889s-26.842 5.687-36.098 14.891l0.002-0.002c-9.201 9.255-14.889 22.011-14.889 36.096s5.687 26.842 14.891 36.098l-0.002-0.002 249.856 250.112h-176.64c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h300.288c1.498 0.181 3.233 0.284 4.992 0.284s3.494-0.103 5.199-0.304l-0.207 0.020 6.4-1.792 6.656-2.816h1.792c2.050-0.972 3.815-2.082 5.431-3.371l-0.055 0.043 5.632-4.864c1.715-1.716 3.31-3.554 4.769-5.499l0.095-0.133c1.246-1.561 2.356-3.326 3.257-5.211l0.071-0.165c0.040-0.269 0.063-0.58 0.063-0.896s-0.023-0.627-0.067-0.931l0.004 0.035c0.96-1.827 1.911-4.026 2.707-6.297l0.109-0.359c0.602-1.671 1.219-3.813 1.716-6l0.076-0.4c1.383-3.697 2.3-7.973 2.555-12.427l0.005-0.117zM439.808 871.68v-300.288c0.181-1.498 0.284-3.233 0.284-4.992s-0.103-3.494-0.304-5.199l0.020 0.207c-0.573-2.587-1.19-4.729-1.919-6.818l0.127 0.418c-0.905-2.63-1.856-4.829-2.95-6.941l0.134 0.285c0.040-0.269 0.063-0.58 0.063-0.896s-0.023-0.627-0.067-0.931l0.004 0.035c-0.972-2.050-2.082-3.815-3.371-5.431l0.043 0.055c-1.554-2.078-3.149-3.916-4.864-5.632v0l-5.632-4.864c-1.561-1.246-3.326-2.356-5.211-3.257l-0.165-0.071h-1.792l-6.656-2.816c-2.070-0.802-4.489-1.43-6.998-1.773l-0.17-0.019c-1.46-0.187-3.15-0.294-4.864-0.294s-3.404 0.107-5.062 0.314l0.198-0.020h-302.336c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h176.64l-249.856 247.552c-9.201 9.255-14.889 22.011-14.889 36.096s5.687 26.842 14.891 36.098l-0.002-0.002c9.255 9.201 22.011 14.889 36.096 14.889s26.842-5.687 36.098-14.891l-0.002 0.002 250.112-249.856v176.64c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0zM1008.896-48.896c-9.255-9.201-22.011-14.889-36.096-14.889s-26.842 5.687-36.098 14.891l0.002-0.002-250.112 249.856v-176.64c0-28.277-22.923-51.2-51.2-51.2s-51.2 22.923-51.2 51.2v0 300.288c-0.181 1.498-0.284 3.233-0.284 4.992s0.103 3.494 0.304 5.199l-0.020-0.207c0.573 2.587 1.19 4.729 1.919 6.818l-0.127-0.418c0.874 2.817 1.83 5.191 2.95 7.469l-0.134-0.301c-0.040 0.269-0.063 0.58-0.063 0.896s0.023 0.627 0.067 0.931l-0.004-0.035c0.972 2.050 2.082 3.815 3.371 5.431l-0.043-0.055c1.554 2.078 3.149 3.916 4.864 5.632v0l5.632 4.864c1.561 1.246 3.326 2.356 5.211 3.257l0.165 0.071h1.792l6.656 2.816 6.4 1.792c1.498 0.181 3.233 0.284 4.992 0.284s3.494-0.103 5.199-0.304l-0.207 0.020h302.848c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0h-176.64l249.856-250.112c8.608-9.139 13.899-21.488 13.899-35.072s-5.29-25.933-13.923-35.098l0.024 0.026z" />
36
+ <glyph unicode="&#xe91a;" glyph-name="multi-scroll" d="M432.64 610.304c-9.267-9.277-22.075-15.016-36.224-15.016s-26.957 5.739-36.224 15.016v0l-85.248 85.248v-625.408c0-28.277-22.923-51.2-51.2-51.2s-51.2 22.923-51.2 51.2v0 625.408l-85.248-85.248c-9.041-8.188-21.091-13.199-34.312-13.199-28.277 0-51.2 22.923-51.2 51.2 0 13.285 5.059 25.388 13.357 34.487l-0.036-0.040 169.216 168.96c0.988 0.925 2.076 1.769 3.238 2.507l0.090 0.053c2.027 1.945 4.197 3.791 6.475 5.502l0.181 0.13 3.328 2.048c2.081 1.748 4.436 3.284 6.965 4.519l0.203 0.089c5.657 2.248 12.212 3.551 19.072 3.551s13.415-1.303 19.431-3.676l-0.359 0.125 6.4-3.328c2.067-0.853 3.845-1.974 5.396-3.346l-0.020 0.018 5.632-4.864 3.328-3.584 169.216-168.96c9.125-9.241 14.761-21.946 14.761-35.967 0-14.149-5.739-26.957-15.017-36.224v0zM223.744 870.4c0.037 0 0.081 0 0.125 0 6.776 0 13.244-1.316 19.163-3.707l-0.344 0.123c-5.528 2.137-11.924 3.375-18.61 3.375-6.937 0-13.563-1.333-19.636-3.757l0.357 0.126c5.59 2.428 12.101 3.84 18.942 3.84 0.001 0 0.001 0 0.002 0v0zM1008.896 206.592l-172.544-171.52c-1.996-2.046-4.172-3.897-6.51-5.535l-0.146-0.097-3.328-2.048c-1.759-1.132-3.783-2.165-5.91-2.992l-0.234-0.080c-2.526-1.095-5.52-2.064-8.62-2.753l-0.34-0.063c-2.924-0.649-6.283-1.021-9.728-1.021s-6.804 0.372-10.038 1.078l0.31-0.057c-3.574 0.708-6.664 1.592-9.645 2.699l0.429-0.139-6.4 3.328c-2.067 0.853-3.845 1.974-5.396 3.346l0.020-0.018-6.912 4.352-172.544 171.52c-9.271 9.271-15.004 22.078-15.004 36.224 0 28.293 22.936 51.228 51.228 51.228 14.146 0 26.953-5.734 36.224-15.004l85.248-85.248v625.408c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0-625.408l85.248 85.248c9.4 10.31 22.887 16.753 37.88 16.753 28.277 0 51.2-22.923 51.2-51.2 0-15.056-6.499-28.594-16.844-37.963l-0.044-0.039z" />
37
+ <glyph unicode="&#xe91b;" glyph-name="parallax" d="M1024 710.4v-480c0-84.831-68.769-153.6-153.6-153.6v0h-503.552c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h503.552c28.277 0 51.2 22.923 51.2 51.2v0 374.272l-206.848-162.048c-8.608-6.795-19.615-10.899-31.58-10.899-3.408 0-6.739 0.333-9.961 0.968l0.325-0.053c-15.112 3.113-27.562 12.54-34.683 25.339l-0.133 0.261-126.72 219.904-128-220.672c-7.202-13.006-19.551-22.416-34.225-25.54l-0.335-0.060c-1.457-0.127-3.152-0.199-4.864-0.199s-3.407 0.072-5.083 0.214l0.219-0.015c-11.945 0.056-22.914 4.193-31.593 11.089l0.105-0.081-205.824 161.792v-374.272c0-28.277 22.923-51.2 51.2-51.2v0c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0c-84.831 0-153.6 68.769-153.6 153.6v0 480c-0.111 1.151-0.174 2.488-0.174 3.84s0.063 2.689 0.187 4.009l-0.013-0.169c0.351 3.037 1.072 5.807 2.125 8.407l-0.077-0.215c1.013 2.987 2.138 5.524 3.458 7.939l-0.13-0.259c1.64 2.754 3.245 5.094 4.982 7.326l-0.118-0.158c2.454 3.213 5.235 5.994 8.342 8.37l0.106 0.078 4.608 3.328 5.12 2.816c6.604 3.549 14.423 5.707 22.728 5.887l0.056 0.001c1.228 0.126 2.654 0.198 4.096 0.198s2.868-0.072 4.273-0.212l-0.177 0.014c3.037-0.351 5.807-1.072 8.407-2.125l-0.215 0.077c2.987-1.013 5.524-2.138 7.939-3.458l-0.259 0.13h1.536l7.168-4.864 241.92-189.44 141.824 246.784c9.029 15.361 25.474 25.509 44.288 25.509s35.259-10.148 44.157-25.269l0.131-0.24 141.824-246.784 241.92 189.44h1.28l7.168 4.864c2.156 1.19 4.693 2.315 7.331 3.223l0.349 0.105c2.385 0.976 5.155 1.697 8.043 2.034l0.149 0.014c1.267 0.134 2.736 0.21 4.224 0.21s2.957-0.076 4.406-0.226l-0.182 0.015c8.018-0.049 15.585-1.934 22.316-5.254l-0.3 0.134 5.12-2.816 4.608-3.328c3.213-2.454 5.994-5.235 8.37-8.342l0.078-0.106c1.619-2.074 3.224-4.414 4.686-6.849l0.178-0.319c1.19-2.156 2.315-4.693 3.223-7.331l0.105-0.349c1.292-2.596 2.274-5.607 2.791-8.775l0.025-0.185c0.111-1.151 0.174-2.488 0.174-3.84s-0.063-2.689-0.187-4.009l0.013 0.169z" />
38
+ <glyph unicode="&#xe91c;" glyph-name="particles" horiz-adv-x="1010" d="M878.080 237.056v4.096l-94.208 435.2c0.069 0.423 0.108 0.911 0.108 1.408s-0.039 0.985-0.115 1.46l0.007-0.052c36.629 29.186 59.899 73.792 59.899 123.833 0 87.234-70.718 157.952-157.952 157.952s-157.952-70.718-157.952-157.952c0-0.425 0.002-0.849 0.005-1.274v0.065c0-0.101 0-0.221 0-0.34 0-15.864 2.433-31.161 6.948-45.535l-0.291 1.075-281.088-249.088c-23.858 14.002-52.545 22.272-83.163 22.272-0.013 0-0.026 0-0.039 0h0.002c-94.021 0-170.24-76.219-170.24-170.24s76.219-170.24 170.24-170.24v0c0.207-0.001 0.453-0.001 0.699-0.001 37.1 0 71.373 12.104 99.085 32.579l-0.455-0.321 440.32-162.56c13.692-70.478 74.921-122.958 148.406-122.958 83.417 0 151.040 67.623 151.040 151.040 0 76.713-57.19 140.068-131.26 149.756l-0.762 0.081zM684.288 857.6c0.076 0 0.166 0.001 0.256 0.001 31.529 0 57.088-25.559 57.088-57.088s-25.559-57.088-57.088-57.088c-31.529 0-57.088 25.559-57.088 57.087v0c0 0.076-0.001 0.166-0.001 0.256 0 31.387 25.445 56.832 56.832 56.832 0 0 0 0 0.001 0v0zM100.864 359.936c0.18 38.179 31.171 69.060 69.375 69.060 18.952 0 36.129-7.599 48.65-19.917l-0.009 0.009 3.84-4.096c10.32-12.049 16.61-27.815 16.64-45.050v-0.006c-0.064-16.947-6.041-32.486-15.974-44.673l0.102 0.129-3.84-4.352c-12.538-12.459-29.818-20.16-48.896-20.16-38.293 0-69.34 31.024-69.376 69.309v0.003zM727.296 160.768l-395.52 145.92c5.501 15.884 8.686 34.191 8.704 53.24v0.008c-0.092 27.138-6.51 52.755-17.854 75.484l0.446-0.988 267.776 239.616c25.385-18.72 57.285-29.961 91.809-29.961 0.573 0 1.146 0.003 1.718 0.009l-0.087-0.001h3.328l92.16-424.704c-0.070-0.614-0.11-1.327-0.11-2.048s0.040-1.434 0.117-2.134l-0.008 0.086c-21.923-13.591-39.658-31.982-52.092-53.789l-0.388-0.739zM859.136 37.12c-28.27 0.009-51.184 22.929-51.184 51.2 0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2c0-0.45-0.006-0.899-0.017-1.346l0.001 0.066c-0.715-27.721-23.357-49.92-51.184-49.92-0.006 0-0.011 0-0.017 0h0.001z" />
39
+ <glyph unicode="&#xe91d;" glyph-name="preview-window" d="M718.336-64h-564.736c-84.831 0-153.6 68.769-153.6 153.6v0 564.736c0 84.831 68.769 153.6 153.6 153.6v0h355.84c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0h-355.84c-28.277 0-51.2-22.923-51.2-51.2v0-564.736c0-28.277 22.923-51.2 51.2-51.2v0h564.736c28.277 0 51.2 22.923 51.2 51.2v0 354.304c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0-354.304c0-84.831-68.769-153.6-153.6-153.6v0zM820.736 553.472c-0.229-0.001-0.499-0.001-0.769-0.001-111.566 0-202.059 90.224-202.494 201.688v3.882c0 112.26 91.004 203.264 203.264 203.264s203.264-91.004 203.264-203.264v0-3.84c-0.436-111.505-90.929-201.729-202.495-201.729-0.271 0-0.541 0.001-0.811 0.002h0.042zM820.736 857.6c-0.307 0.003-0.669 0.005-1.032 0.005-54.692 0-99.113-43.976-99.831-98.498l-0.001-0.068v-3.84c0-55.706 45.158-100.864 100.864-100.864s100.864 45.158 100.864 100.864v0 3.84c-0.719 54.589-45.14 98.565-99.832 98.565-0.363 0-0.725-0.002-1.087-0.006h0.055z" />
40
+ <glyph unicode="&#xe91e;" glyph-name="tables" d="M966.144 960h-908.288c-31.953 0-57.856-25.903-57.856-57.856v0-908.288c0-31.953 25.903-57.856 57.856-57.856v0h908.288c31.953 0 57.856 25.903 57.856 57.856v0 908.288c0 31.953-25.903 57.856-57.856 57.856v0zM418.56 844.288h186.88v-187.136h-186.88zM418.56 541.44h186.88v-186.88h-186.88zM302.848 51.712h-187.136v187.136h187.136zM302.848 354.56h-187.136v186.88h187.136zM302.848 657.152h-187.136v187.136h187.136zM605.44 51.712h-186.88v187.136h186.88zM908.288 51.712h-187.136v187.136h187.136zM908.288 354.56h-187.136v186.88h187.136zM908.288 657.152h-187.136v187.136h187.136z" />
41
+ <glyph unicode="&#xe91f;" glyph-name="tabs" d="M972.8 532.48h-921.6c-28.277 0-51.2 22.923-51.2 51.2v0 325.12c0 28.277 22.923 51.2 51.2 51.2v0h921.6c28.277 0 51.2-22.923 51.2-51.2v0-325.12c0-28.277-22.923-51.2-51.2-51.2v0zM102.4 634.88h819.2v222.72h-819.2zM972.8-64h-921.6c-28.277 0-51.2 22.923-51.2 51.2v0 325.12c0 28.277 22.923 51.2 51.2 51.2v0h921.6c28.277 0 51.2-22.923 51.2-51.2v0-325.12c0-28.277-22.923-51.2-51.2-51.2v0zM102.4 38.4h819.2v222.72h-819.2z" />
42
+ <glyph unicode="&#xe920;" glyph-name="trustpilot" d="M195.584-39.424l119.808 374.528-315.392 227.328 389.888 2.816 122.112 369.152 119.296-369.152 392.704-2.816-512-369.152-316.416-232.704zM832-36.864l-320 230.144 221.696 61.44 98.304-291.584z" />
43
+ <glyph unicode="&#xe921;" glyph-name="twitter-feed" d="M322.048 38.4c386.304 0 597.76 320 597.76 597.76 0 8.96 0 17.92 0 27.136 41.023 30.13 75.596 66.169 103.222 107.268l0.97 1.532c-35.109-16.142-75.839-27.862-118.577-33.081l-1.999-0.199c43.321 26.458 75.94 66.791 91.98 114.721l0.436 1.503c-38.467-23.22-83.226-40.975-130.898-50.732l-2.734-0.468c-38.48 41.26-93.16 66.981-153.847 66.981-116.077 0-210.176-94.099-210.176-210.176 0-17.133 2.050-33.786 5.918-49.729l-0.295 1.437c-174.874 9.249-328.64 92.418-431.795 218.582l-0.845 1.066c-18.199-30.472-28.959-67.211-28.959-106.463 0-72.791 37.004-136.939 93.226-174.659l0.757-0.478c-34.967 0.923-67.551 10.298-96.041 26.144l1.065-0.544v-2.56c0.591-100.815 72.070-184.766 167.084-204.562l1.364-0.238c-15.949-4.402-34.263-6.932-53.168-6.932-1.018 0-2.034 0.007-3.049 0.022l0.153-0.002c-14.1 0.109-27.804 1.501-41.090 4.067l1.41-0.227c27.752-84.096 104.81-144.061 196.135-145.917l0.217-0.003c-70.634-55.776-160.879-89.566-259.006-89.856h-0.066c-0.057 0-0.125 0-0.193 0-17.97 0-35.702 1.023-53.139 3.014l2.132-0.198c90.704-59.076 201.703-94.209 320.908-94.209 0.401 0 0.801 0 1.202 0.001h-0.062z" />
44
+ <glyph unicode="&#xe922;" glyph-name="unfold" d="M1024 448c0-28.277-22.923-51.2-51.2-51.2v0h-409.6v-409.6c0-28.277-22.923-51.2-51.2-51.2s-51.2 22.923-51.2 51.2v0 409.6h-409.6c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h409.6v409.6c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0-409.6h409.6c28.277 0 51.2-22.923 51.2-51.2v0z" />
45
+ <glyph unicode="&#xe923;" glyph-name="whatsapp-chat" horiz-adv-x="1019" d="M870.4 811.264c-91.866 92.1-218.903 149.081-359.249 149.081-280.225 0-507.392-227.167-507.392-507.392 0-93.548 25.317-181.184 69.472-256.429l-1.295 2.388-71.936-262.912 268.8 70.656c70.087-38.943 153.7-61.891 242.669-61.952h0.019c280.104 0.348 507.038 227.496 507.038 507.648 0 140.159-56.801 267.051-148.639 358.914l0.001-0.001zM512 30.464v0c-0.009 0-0.019 0-0.029 0-79.439 0-153.744 21.982-217.163 60.196l1.896-1.060-15.36 8.96-159.744-41.984 42.752 155.648-9.984 15.872c-40.423 63.543-64.423 140.968-64.423 223.998 0 232.861 188.771 421.632 421.632 421.632s421.632-188.771 421.632-421.632c0-232.442-188.093-420.953-420.376-421.63h-0.065zM742.144 347.392c12.544-6.4 21.248-9.472 24.32-14.848l-0.089 0.633c1.001-5.888 1.523-11.939 1.523-18.111 0-15.434-3.26-30.107-8.858-42.682-10.496-29.696-61.184-56.832-85.504-60.416l1.039 0.153c-9.827-1.745-19.943-2.655-30.271-2.655-18.072 0-35.494 2.787-50.639 7.622l-5.361 1.405c-24.577 7.491-48.624 16.199-67.087 24.195-126.976 55.040-210.176 183.040-216.576 191.488l0.409-0.543c-28.693 36.665-47.273 81.626-51.609 131.615l0.001-0.1c-0.009 0.663-0.014 1.327-0.014 1.992 0 40.677 17.094 77.361 44.557 103.324l0.043 0.050c8.344 9.44 20.436 15.491 34.005 15.822h24.32c7.68-0.512 17.92 3.84 28.416-21.76s35.84-87.808 39.168-94.208l-0.063 0.13c1.784-3.361 2.795-7.196 2.795-11.266s-1.011-7.905-2.732-11.136l-0.859-1.458c-9.382-14.874-19.843-28.999-30.885-41.806-5.632-6.912-13.056-13.056-5.632-25.6l0.97-1.764c18.932-31.885 42.368-60.781 69.686-86.044l-0.339 0.297c29.389-26.221 63.303-47.477 102.739-63.273 12.8-6.4 19.968-5.376 27.392 3.072s31.744 36.864 40.192 49.664c8.448 12.8 17.152 10.496 28.672 6.4s73.728-34.816 86.528-41.216z" />
46
+ <glyph unicode="&#xe924;" glyph-name="yelp-reviews" horiz-adv-x="784" d="M289.792 301.056c23.635 7.12 40.616 28.539 40.96 53.976v0.040c0.146 1.563 0.23 3.38 0.23 5.217 0 24.667-15.038 45.822-36.446 54.797l-0.392 0.146-46.336 18.944c-168.192 69.376-168.704 69.376-179.2 69.376-0.438 0.013-0.954 0.021-1.471 0.021-18.86 0-35.338-10.197-44.222-25.379l-0.131-0.242c-20.736-33.024-25.6-121.856-19.712-171.008 1.117-17.27 5.247-33.305 11.871-47.972l-0.351 0.868c8.084-16.521 24.361-27.919 43.393-28.923l0.127-0.005h1.28c9.728 0 25.6 4.608 163.328 49.408l67.072 20.736zM370.176 267.52c-6.839 2.977-14.805 4.708-23.176 4.708-18.048 0-34.216-8.050-45.109-20.756l-0.067-0.080-32-37.888c-117.504-137.984-117.76-139.008-121.6-149.504-1.922-5.083-3.035-10.96-3.035-17.096 0-1.642 0.080-3.266 0.235-4.867l-0.016 0.203c1.159-11.353 5.708-21.468 12.604-29.512l-0.060 0.072c27.136-32.768 141.312-76.8 194.048-76.8 1.686-0.134 3.65-0.211 5.632-0.211s3.946 0.077 5.89 0.227l-0.258-0.016c18.8 2.767 34.093 15.418 40.586 32.417l0.118 0.351c3.584 10.24 3.584 11.008 4.096 173.568 0 0 0 64.768 0 68.096 0.032 0.711 0.050 1.546 0.050 2.384 0 24.854-16.026 45.964-38.308 53.562l-0.398 0.118zM765.184 240.384c-8.704 6.4-9.216 6.656-163.584 57.344l-64.768 22.272c-5.741 2.138-12.373 3.375-19.295 3.375-18.685 0-35.263-9.017-45.622-22.936l-0.108-0.151c-9.107-10.384-14.663-24.080-14.663-39.074 0-11.496 3.266-22.229 8.921-31.322l-0.146 0.252 25.6-42.496c94.976-153.6 96.256-155.136 104.704-162.048 8.213-6.388 18.672-10.242 30.032-10.242 0.152 0 0.304 0.001 0.455 0.002h-0.023c0.093-0.001 0.203-0.001 0.313-0.001 7.659 0 14.943 1.601 21.537 4.488l-0.346-0.135c42.752 16.896 128 125.952 135.168 171.52 0.555 2.829 0.872 6.083 0.872 9.41 0 16.285-7.603 30.795-19.453 40.172l-0.107 0.082zM512.512 371.2h3.584c0.924-0.176 1.986-0.277 3.072-0.277s2.148 0.101 3.178 0.294l-0.106-0.017c7.424 2.816 23.040 6.656 47.872 12.544v0c175.872 42.496 176.896 43.264 186.624 49.664 13.486 9.356 22.205 24.759 22.205 42.199 0 1.547-0.069 3.077-0.203 4.589l0.014-0.195s0 2.304 0 3.072c-4.864 47.104-81.152 159.488-121.6 179.2-6.976 3.795-15.277 6.026-24.099 6.026-10.577 0-20.405-3.207-28.564-8.702l0.183 0.116c-9.216-6.144-9.216-6.144-105.472-137.728l-40.704-55.296c-7.512-9.483-12.050-21.619-12.050-34.816 0-12.296 3.941-23.672 10.628-32.934l-0.114 0.166c10.945-16.98 29.76-28.063 51.164-28.063 1.544 0 3.075 0.058 4.59 0.171l-0.202-0.012zM388.864 921.088c-5.462 18.62-20.382 32.775-39.068 37.051l-0.356 0.069c-48.64 11.776-219.136-35.84-253.44-71.424-9.96-9.364-16.163-22.625-16.163-37.334 0-4.471 0.573-8.808 1.65-12.942l-0.079 0.356c-0.053-0.461-0.083-0.995-0.083-1.536s0.030-1.075 0.088-1.601l-0.006 0.065c4.864-9.984 161.024-256 208.64-330.752 19.968-32.256 41.984-48.64 65.024-48.64 6.062 0.065 11.863 1.090 17.287 2.931l-0.391-0.115c29.952 8.96 43.776 37.12 41.728 83.712-2.56 58.88-22.784 362.24-25.6 380.16z" />
47
+ <glyph unicode="&#xe925;" glyph-name="banner" d="M1015.808 121.6l-296.192 484.864c-9.972 15.491-27.129 25.605-46.648 25.605-0.25 0-0.5-0.002-0.749-0.005h0.038c-0.163 0.002-0.356 0.003-0.549 0.003-19.641 0-36.923-10.1-46.935-25.389l-0.131-0.214-284.672-465.664h-198.144l122.88 201.216 45.056-73.216c9.303-15.221 25.714-25.298 44.5-25.599l0.044-0.001h-1.536c0.133-0.001 0.291-0.002 0.449-0.002 18.36 0 34.529 9.383 43.973 23.615l0.122 0.195c5.033 7.788 8.025 17.305 8.025 27.52s-2.992 19.732-8.147 27.722l0.122-0.202-86.016 140.544c-10.077 16.22-27.796 26.859-48 26.859s-37.923-10.639-47.861-26.62l-0.139-0.239-207.104-340.992c-4.825-7.973-7.681-17.605-7.681-27.904s2.855-19.931 7.818-28.148l-0.137 0.244c9.919-16.953 28.038-28.16 48.775-28.16 0.043 0 0.085 0 0.128 0h911.609c0.028 0 0.061 0 0.093 0 20.463 0 38.33 11.116 47.893 27.638l0.142 0.266c4.669 7.78 7.43 17.168 7.43 27.2 0 10.719-3.152 20.702-8.58 29.073l0.127-0.208zM455.424 140.8l216.32 353.792 216.576-353.792zM332.8 870.4c-85.127-0.725-153.856-69.902-153.856-155.131 0-85.679 69.457-155.136 155.136-155.136s155.136 69.457 155.136 155.136c0 0.088 0 0.176 0 0.264v-0.014c-0.725 85.693-70.36 154.88-156.155 154.88-0.092 0-0.184 0-0.276 0h0.014zM332.8 665.6c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2c28.277 0 51.2-22.923 51.2-51.2v0c0-0.076 0.001-0.166 0.001-0.256 0-28.277-22.923-51.2-51.2-51.2 0 0 0 0-0.001 0v0z" />
48
+ <glyph unicode="&#xe926;" glyph-name="blog" d="M964.096 900.096c-37.044 36.957-88.173 59.809-144.64 59.809s-107.596-22.852-144.644-59.813l-590.332-590.076c-6.357-6.46-11.016-14.609-13.24-23.713l-0.072-0.351-69.632-286.72c-0.897-3.586-1.412-7.703-1.412-11.94 0-14.13 5.724-26.924 14.98-36.188v0c9.226-9.28 21.982-15.043 36.084-15.104h0.012c0.030 0 0.065 0 0.101 0 4.241 0 8.351 0.561 12.261 1.612l-0.329-0.075 106.24 25.6h1.792l179.2 43.52c9.455 2.296 17.604 6.955 24.071 13.319l-0.007-0.007 588.8 590.336c37.339 37.107 60.45 88.494 60.45 145.28 0 56.403-22.801 107.481-59.689 144.519l0.007-0.007zM311.808 103.168l-135.936-33.024-41.472 42.24 32.768 135.424 482.816 481.792c-0.41-2.383-0.644-5.128-0.644-7.928 0-13.735 5.634-26.154 14.716-35.073l116.231-116.231zM891.648 683.008l-39.168-39.168-116.224 116.224c-9.24 9.121-21.943 14.755-35.961 14.755-2.304 0-4.572-0.152-6.796-0.447l0.261 0.028 53.248 53.248c18.1 16.447 42.252 26.517 68.757 26.517 56.554 0 102.4-45.846 102.4-102.4 0-26.504-10.070-50.657-26.592-68.841l0.075 0.084z" />
49
+ <glyph unicode="&#xe927;" glyph-name="button" d="M512-64c-282.77 0-512 229.23-512 512s229.23 512 512 512c282.77 0 512-229.23 512-512v0c0-282.77-229.23-512-512-512v0zM512 857.6c-226.216 0-409.6-183.384-409.6-409.6s183.384-409.6 409.6-409.6c226.216 0 409.6 183.384 409.6 409.6v0c0 226.216-183.384 409.6-409.6 409.6v0zM668.16 240.64h-312.32c-28.277 0-51.2 22.923-51.2 51.2v0 312.32c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0-261.12h209.92v209.92h-104.96c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h156.16c28.277 0 51.2-22.923 51.2-51.2v0-312.32c0-28.277-22.923-51.2-51.2-51.2v0z" />
50
+ <glyph unicode="&#xe928;" glyph-name="carousel" d="M378.112 69.888c-14.669 0.259-27.859 6.382-37.366 16.117l-0.010 0.011-325.632 322.56c-9.050 9.228-14.636 21.882-14.636 35.84s5.586 26.612 14.644 35.848l-0.008-0.008 325.632 322.56c9.606 9.264 22.697 14.971 37.12 14.971s27.514-5.707 37.136-14.987l-0.016 0.015c9.277-9.267 15.016-22.075 15.016-36.224s-5.739-26.957-15.016-36.224v0l-288.768-285.952 289.536-287.488c9.277-9.267 15.016-22.075 15.016-36.224s-5.739-26.957-15.016-36.224v0c-9.56-9.041-22.496-14.6-36.73-14.6-0.317 0-0.633 0.003-0.949 0.008l0.047-0.001zM645.888 69.888c-0.042 0-0.092 0-0.141 0-14.23 0-27.163 5.555-36.748 14.616l0.025-0.024c-9.277 9.267-15.016 22.075-15.016 36.224s5.739 26.957 15.016 36.224v0l288.768 287.488-289.536 287.488c-9.277 9.267-15.016 22.075-15.016 36.224s5.739 26.957 15.016 36.224v0c9.58 9.322 22.679 15.071 37.12 15.071s27.54-5.749 37.132-15.083l-0.012 0.012 326.4-324.096c9.050-9.228 14.636-21.882 14.636-35.84s-5.586-26.612-14.644-35.848l0.008 0.008-325.632-322.56c-9.517-9.746-22.707-15.869-37.328-16.127l-0.048-0.001z" />
51
+ <glyph unicode="&#xe929;" glyph-name="contact-form" d="M972.8 622.592c-28.277 0-51.2-22.923-51.2-51.2v0-379.392c0-28.277-22.923-51.2-51.2-51.2v0h-716.8c-28.277 0-51.2 22.923-51.2 51.2v0 500.736l377.344-307.2c8.717-7.152 19.977-11.495 32.251-11.52h0.005c0.064 0 0.14 0 0.216 0 12.172 0 23.351 4.247 32.138 11.341l-0.097-0.076 428.544 348.16c4.477 3.717 8.294 8.022 11.387 12.835l0.133 0.221 23.808 23.296c9.508 9.304 15.403 22.267 15.403 36.606 0 12.62-4.566 24.174-12.136 33.1l0.061-0.074c-9.453 11.162-23.478 18.2-39.146 18.2-0.548 0-1.094-0.009-1.637-0.026l0.079 0.002h-842.752c-70.692 0-128-57.308-128-128v0-537.6c0-84.831 68.769-153.6 153.6-153.6v0h716.8c84.831 0 153.6 68.769 153.6 153.6v0 379.392c0 28.277-22.923 51.2-51.2 51.2v0zM837.12 755.2l-325.12-263.936-323.84 263.936z" />
52
+ <glyph unicode="&#xe92a;" glyph-name="countdown" d="M1024 712.704v-619.52c0-70.692-57.308-128-128-128v0h-768c-70.692 0-128 57.308-128 128v0 619.52c0 70.692 57.308 128 128 128v0h136.192v42.496c0 28.277 22.923 51.2 51.2 51.2v0c0.012 0 0.026 0 0.041 0 14.192 0 27.035-5.774 36.309-15.102l0.002-0.002c9.177-9.25 14.849-21.991 14.849-36.056 0-0.104 0-0.208-0.001-0.312v0.016-42.24h290.816v42.24c0 0.012 0 0.026 0 0.041 0 28.277 22.923 51.2 51.2 51.2 14.085 0 26.842-5.687 36.098-14.891l-0.002 0.002c9.28-9.226 15.043-21.982 15.104-36.084v-192.78c0-28.277-22.923-51.2-51.2-51.2v0 0c-28.277 0-51.2 22.923-51.2 51.2v0 47.872h-290.816v-48.128c0-28.277-22.923-51.2-51.2-51.2s-51.2 22.923-51.2 51.2v0 48.128h-136.192c-14.138 0-25.6-11.462-25.6-25.6v0-619.52c0-14.138 11.462-25.6 25.6-25.6v0h768c14.138 0 25.6 11.462 25.6 25.6v0 619.52c0 14.138-11.462 25.6-25.6 25.6v0h-43.008c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h43.008c70.692 0 128-57.308 128-128v0zM315.392 407.040c-28.277 0-51.2 22.923-51.2 51.2v0 0c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0c0-28.277-22.923-51.2-51.2-51.2v0zM315.392 207.36c-28.277 0-51.2 22.923-51.2 51.2v0 1.28c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2c0-28.277-22.923-51.2-51.2-51.2v0zM512 406.784c-13.641 0.127-25.986 5.569-35.087 14.351l0.015-0.015c-9.501 9.308-15.391 22.27-15.391 36.608 0 28.294 22.937 51.231 51.231 51.231 13.956 0 26.609-5.581 35.849-14.632l-0.009 0.008c9.819-9.347 15.926-22.515 15.926-37.11 0-13.963-5.59-26.621-14.653-35.858l0.008 0.008c-9.227-9.048-21.88-14.633-35.837-14.633-0.721 0-1.439 0.015-2.153 0.044l0.102-0.003zM512 206.848c-13.641 0.127-25.986 5.569-35.087 14.351l0.015-0.015v1.28c-7.765 8.927-12.498 20.671-12.498 33.52 0 28.277 22.923 51.2 51.2 51.2 12.018 0 23.069-4.141 31.804-11.073l-0.106 0.081c10.492-9.416 17.062-23.019 17.062-38.158 0-28.277-22.923-51.2-51.2-51.2-0.418 0-0.836 0.005-1.251 0.015l0.062-0.001zM708.608 407.040c-28.277 0-51.2 22.923-51.2 51.2v0 0c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2c0-28.277-22.923-51.2-51.2-51.2v0zM708.608 207.36c-28.277 0-51.2 22.923-51.2 51.2v0 1.28c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2c0-28.277-22.923-51.2-51.2-51.2v0z" />
53
+ <glyph unicode="&#xe92b;" glyph-name="counter" horiz-adv-x="867" d="M552.192 211.968c-0.045 0-0.097 0-0.15 0-13.146 0-25.135 4.954-34.201 13.098l0.047-0.042-118.528 106.752c-10.365 9.381-16.859 22.872-16.896 37.881v215.815c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0-193.024l102.4-91.392c10.315-9.401 16.763-22.891 16.763-37.888 0-28.23-22.847-51.124-51.060-51.2h-0.007zM484.864 800.512v57.088h113.408c28.277 0 51.2 22.923 51.2 51.2s-22.923 51.2-51.2 51.2v0h-329.216c-28.277 0-51.2-22.923-51.2-51.2s22.923-51.2 51.2-51.2v0h113.408v-57.088c-216.459-26.479-382.464-209.169-382.464-430.631 0-239.506 194.158-433.664 433.664-433.664s433.664 194.158 433.664 433.664c0 221.462-166.006 404.152-380.369 430.422l-2.095 0.209zM433.664 38.4c-0.076 0-0.166 0-0.256 0-183.093 0-331.52 148.427-331.52 331.52s148.427 331.52 331.52 331.52c183.093 0 331.52-148.427 331.52-331.52 0-0.090 0-0.18 0-0.27v0.014c-0.868-182.602-148.662-330.396-331.181-331.264h-0.083z" />
54
+ <glyph unicode="&#xe92c;" glyph-name="dual-heading" d="M642.56 499.2h327.68c29.691 0 53.76-24.069 53.76-53.76s-24.069-53.76-53.76-53.76h-327.68c-29.691 0-53.76 24.069-53.76 53.76s24.069 53.76 53.76 53.76zM53.76 499.2h327.68c29.691 0 53.76-24.069 53.76-53.76s-24.069-53.76-53.76-53.76h-327.68c-29.691 0-53.76 24.069-53.76 53.76s24.069 53.76 53.76 53.76z" />
55
+ <glyph unicode="&#xe92d;" glyph-name="fancy-text" horiz-adv-x="401" d="M398.080 16.128c2.095-5.875 3.306-12.652 3.306-19.712 0-33.359-27.037-60.404-60.393-60.416h-278.273c-0.51-0.015-1.111-0.024-1.713-0.024-26.6 0-49.252 16.904-57.8 40.556l-0.135 0.428c-1.923 5.656-3.034 12.171-3.034 18.945 0 33.405 26.996 60.504 60.362 60.671h80.144v782.848h-76.8c-0.733-0.031-1.593-0.049-2.457-0.049-26.752 0-49.527 17.027-58.080 40.835l-0.135 0.43c-1.932 5.655-3.047 12.169-3.047 18.944 0 33.358 27.035 60.402 60.389 60.416h278.017c0.487 0.014 1.060 0.022 1.635 0.022 26.406 0 48.953-16.52 57.87-39.789l0.143-0.424c2.086-5.876 3.292-12.654 3.292-19.713 0-33.405-26.997-60.505-60.364-60.671h-80.144v-782.848h76.8c0.686 0.027 1.491 0.043 2.3 0.043 26.51 0 49.131-16.651 57.975-40.064l0.141-0.426z" />
56
+ <glyph unicode="&#xe92e;" glyph-name="google-maps" horiz-adv-x="826" d="M412.928 380.416c-0.004 0-0.008 0-0.013 0-49.482 0-94.279 20.055-126.707 52.48v0c-32.433 32.43-52.493 77.232-52.493 126.72 0 98.969 80.231 179.2 179.2 179.2s179.2-80.231 179.2-179.2c0-98.965-80.223-179.193-179.186-179.2h-0.001zM358.656 505.344c13.895-13.878 33.081-22.46 54.272-22.46 42.392 0 76.761 34.346 76.8 76.729v0.004c-0.019 21.2-8.625 40.386-22.527 54.271l-0.001 0.001c-14.056 13.52-33.191 21.846-54.272 21.846s-40.216-8.327-54.297-21.871l0.025 0.024c-13.878-13.895-22.46-33.081-22.46-54.272s8.583-40.377 22.461-54.273l-0.001 0.001zM825.6 535.040c-14.080-340.224-348.16-566.784-384-588.8l-5.632-3.328-5.632-2.56-4.608-1.536c-0.654-0.112-1.408-0.176-2.176-0.176s-1.522 0.064-2.255 0.187l0.079-0.011c-2.847-0.651-6.116-1.025-9.472-1.025s-6.625 0.373-9.768 1.081l0.296-0.056c-0.654-0.112-1.408-0.176-2.176-0.176s-1.522 0.064-2.255 0.187l0.079-0.011-4.608 1.536c-2.054 0.622-3.836 1.405-5.499 2.37l0.123-0.066-3.584 2.048-2.304 1.536c-25.088 15.36-245.504 165.376-339.968 399.36-6.144 15.104-11.776 30.72-16.64 46.080-1.494 4.592-2.356 9.875-2.356 15.36 0 28.306 22.946 51.252 51.252 51.252 22.821 0 42.158-14.915 48.795-35.529l0.101-0.363c4.096-12.8 8.704-25.6 13.824-38.4 67.328-166.4 214.272-288.768 275.712-334.080 78.592 58.368 300.032 244.48 310.272 489.216 0.060 2.287 0.095 4.98 0.095 7.68 0 171.495-138.905 310.546-310.344 310.784h-0.023c-171.462-0.238-310.367-139.289-310.367-310.784 0-2.701 0.034-5.393 0.103-8.077l-0.008 0.397c0.028-0.638 0.045-1.386 0.045-2.138 0-27.212-21.229-49.466-48.029-51.103l-0.144-0.007h-3.072c-0.012 0-0.027 0-0.041 0-27.557 0-50.029 21.77-51.156 49.050l-0.003 0.102c-0.102 3.432-0.161 7.47-0.161 11.52 0 228.123 184.758 413.094 412.8 413.44h0.033c228.075-0.346 412.833-185.317 412.833-413.44 0-4.051-0.058-8.089-0.174-12.112l0.013 0.592z" />
57
+ <glyph unicode="&#xe92f;" glyph-name="heading" horiz-adv-x="903" d="M903.68 899.84v-91.136c0.006-0.326 0.010-0.711 0.010-1.097 0-27.118-17.496-50.15-41.815-58.423l-0.435-0.128c-5.359-1.725-11.524-2.719-17.921-2.719-33.243 0-60.215 26.848-60.415 60.044v33.043h-271.104v-782.848h76.8c0.458 0.012 0.997 0.019 1.538 0.019 26.498 0 49.143-16.5 58.22-39.786l0.146-0.425c2.087-5.878 3.293-12.657 3.293-19.717 0-33.226-26.708-60.214-59.827-60.666h-277.803c-0.458-0.012-0.997-0.019-1.538-0.019-26.498 0-49.143 16.5-58.22 39.786l-0.146 0.425c-2.086 5.876-3.292 12.654-3.292 19.713 0 33.405 26.997 60.505 60.364 60.671h80.144v782.848h-271.104v-33.024c-0.2-33.215-27.172-60.063-60.415-60.063-6.397 0-12.562 0.994-18.349 2.837l0.428-0.118c-24.754 8.402-42.25 31.433-42.25 58.551 0 0.386 0.004 0.771 0.011 1.155l-0.001-0.058v91.136c0.145 33.257 27.139 60.16 60.415 60.16 0 0 0 0 0.001 0h782.848c0 0 0 0 0.001 0 33.277 0 60.27-26.903 60.415-60.146v-0.014z" />
58
+ <glyph unicode="&#xe930;" glyph-name="icon-list" d="M972.8 739.072h-660.736c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h660.736c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0zM185.6 790.528c0-0.076 0-0.166 0-0.256 0-51.323-41.605-92.928-92.928-92.928s-92.928 41.605-92.928 92.928c0 51.323 41.605 92.928 92.928 92.928v0c51.175-0.144 92.638-41.518 92.928-92.644v-0.028zM972.8 391.168h-660.736c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h660.736c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0zM185.344 442.368c0-51.181-41.491-92.672-92.672-92.672s-92.672 41.491-92.672 92.672c0 51.181 41.491 92.672 92.672 92.672s92.672-41.491 92.672-92.672zM972.8 43.008h-660.736c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h660.736c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0zM185.344 94.208c0-51.181-41.491-92.672-92.672-92.672s-92.672 41.491-92.672 92.672c0 51.181 41.491 92.672 92.672 92.672s92.672-41.491 92.672-92.672z" />
59
+ <glyph unicode="&#xe931;" glyph-name="image-button" d="M972.8 468.48c28.277 0 51.2 22.923 51.2 51.2v0 222.72c0 84.831-68.769 153.6-153.6 153.6v0h-716.8c-84.831 0-153.6-68.769-153.6-153.6v0-584.192c0-84.831 68.769-153.6 153.6-153.6v0h742.4c70.692 0 128 57.308 128 128v0 144.128c0.002 0.141 0.002 0.307 0.002 0.474 0 6.282-1.223 12.278-3.444 17.764l0.114-0.318v2.048c-1.215 2.988-2.503 5.514-3.974 7.915l0.134-0.235c-1.859 2.572-3.706 4.826-5.678 6.962l0.046-0.050-316.928 323.84c-9.193 9.374-21.948 15.226-36.071 15.36h-0.025c-14.213-0.161-27.082-5.786-36.631-14.869l0.023 0.021-508.928-508.16c-6.393 8.45-10.24 19.136-10.24 30.72v0 584.192c0 28.277 22.923 51.2 51.2 51.2v0h716.8c28.277 0 51.2-22.923 51.2-51.2v0-222.72c0-28.277 22.923-51.2 51.2-51.2v0zM657.152 527.104l264.448-271.36v-123.136c0-14.138-11.462-25.6-25.6-25.6v0h-659.2zM434.688 590.080c0-56.554-45.846-102.4-102.4-102.4s-102.4 45.846-102.4 102.4c0 56.554 45.846 102.4 102.4 102.4s102.4-45.846 102.4-102.4z" />
60
+ <glyph unicode="&#xe932;" glyph-name="image-scroll" horiz-adv-x="624" d="M311.808-64c-172.148 0.146-311.662 139.66-311.808 311.794v400.398c0 172.207 139.601 311.808 311.808 311.808s311.808-139.601 311.808-311.808v0-400.384c-0.291-172.090-139.719-311.517-311.78-311.808h-0.028zM311.808 857.6c-115.594-0.146-209.262-93.814-209.408-209.394v-400.398c0-115.653 93.755-209.408 209.408-209.408s209.408 93.755 209.408 209.408v0 400.384c-0.146 115.594-93.814 209.262-209.394 209.408h-0.014zM311.808 488.704c-28.277 0-51.2 22.923-51.2 51.2v0 102.4c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0-102.4c0-28.277-22.923-51.2-51.2-51.2v0z" />
61
+ <glyph unicode="&#xe933;" glyph-name="image-separator" d="M870.4 24.576h-716.8c-84.831 0-153.6 68.769-153.6 153.6v0 399.104c0 84.831 68.769 153.6 153.6 153.6v0h66.048c0.032 0 0.069 0 0.106 0 19.672 0 36.753 11.095 45.327 27.368l0.134 0.28 16.384 29.184c26.159 49.501 77.3 82.664 136.189 82.688h190.979c58.892-0.024 110.033-33.187 135.789-81.853l0.403-0.835 15.104-29.184c8.708-16.553 25.789-27.648 45.462-27.648 0.037 0 0.075 0 0.112 0h64.762c84.831 0 153.6-68.769 153.6-153.6v0-399.104c0-84.831-68.769-153.6-153.6-153.6v0zM153.6 628.48c-28.277 0-51.2-22.923-51.2-51.2v0-399.104c0-28.277 22.923-51.2 51.2-51.2v0h716.8c28.277 0 51.2 22.923 51.2 51.2v0 399.104c0 28.277-22.923 51.2-51.2 51.2v0h-66.048c-58.892 0.024-110.033 33.187-135.789 81.853l-0.403 0.835-15.36 29.184c-8.685 16.51-25.698 27.589-45.304 27.648h-190.984c-19.614-0.059-36.627-11.138-45.178-27.368l-0.134-0.28-15.36-29.184c-26.159-49.501-77.3-82.664-136.189-82.688h-0.003zM512 189.696c-123.005 0-222.72 99.715-222.72 222.72s99.715 222.72 222.72 222.72c123.005 0 222.72-99.715 222.72-222.72 0-0.090 0-0.18 0-0.27v0.014c-0.146-122.895-99.805-222.464-222.72-222.464 0 0 0 0 0 0v0zM512 532.48c-66.451 0-120.32-53.869-120.32-120.32s53.869-120.32 120.32-120.32c66.451 0 120.32 53.869 120.32 120.32v0c-0.145 66.392-53.928 120.175-120.306 120.32h-0.014z" />
62
+ <glyph unicode="&#xe934;" glyph-name="lottie-animations-fill" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512v0c0 282.77-229.23 512-512 512v0zM815.104 697.856c-1.28-25.6-22.016-43.52-54.784-43.52-0.117 0.001-0.256 0.001-0.395 0.001-21.459 0-41.11-7.743-56.311-20.587l0.129 0.106c-4.444-3.303-8.369-6.66-12.054-10.261l0.022 0.021c-29.226-26.509-54.608-56.449-75.742-89.375l-1.058-1.761c-12.544-19.2-25.6-40.448-40.704-68.096l-19.456-35.072c-9.472-17.664-19.456-35.328-29.44-52.992-7.424-13.568-15.36-26.88-23.040-39.936-11.008-16.896-23.808-37.12-38.912-57.088-27.040-37.641-58.962-69.645-95.295-95.93l-1.217-0.838c-27.86-20.498-62.85-32.803-100.714-32.803-1.223 0-2.443 0.013-3.66 0.038l0.182-0.003c-0.69-0.030-1.5-0.047-2.313-0.047-15.781 0-30.073 6.375-40.442 16.689l0.002-0.002c-6.884 7.419-11.108 17.39-11.108 28.348 0 1.015 0.036 2.021 0.107 3.018l-0.008-0.134c1.28 25.6 22.016 43.52 54.784 43.52 21.567 0.154 41.304 7.861 56.728 20.602l-0.152-0.122c4.444 3.303 8.369 6.66 12.054 10.261l-0.022-0.021c29.226 26.509 54.608 56.449 75.742 89.375l1.058 1.761c12.544 19.2 25.6 40.448 40.704 67.84l3.072 5.12c5.376 10.24 11.008 20.224 16.384 30.208 9.472 17.664 19.456 35.328 29.44 52.992 7.424 13.568 15.36 27.136 23.040 39.936 11.008 17.152 23.808 37.12 38.912 57.088 27.107 37.585 59.019 69.578 95.296 95.926l1.216 0.842c27.719 20.5 62.576 32.812 100.308 32.812 1.366 0 2.728-0.016 4.086-0.048l-0.202 0.004c0.84 0.044 1.823 0.069 2.811 0.069 15.535 0 29.628-6.178 39.954-16.21l-0.014 0.013c6.877-7.382 11.098-17.317 11.098-28.238 0-0.963-0.033-1.919-0.097-2.866l0.007 0.128z" />
63
+ <glyph unicode="&#xe935;" glyph-name="lottie-animations-outline" d="M512-64c-282.77 0-512 229.23-512 512s229.23 512 512 512c282.77 0 512-229.23 512-512v0c0-282.77-229.23-512-512-512v0zM512 857.6c-226.216 0-409.6-183.384-409.6-409.6s183.384-409.6 409.6-409.6c226.216 0 409.6 183.384 409.6 409.6v0c0 226.216-183.384 409.6-409.6 409.6v0zM739.328 621.312c-1.926-25.559-23.137-45.566-49.021-45.566-1.759 0-3.497 0.092-5.208 0.273l0.213-0.018c-11.454-0.008-21.934-4.17-30.017-11.062l0.065 0.054c-2.564-1.895-4.824-3.911-6.886-6.116l-0.026-0.028c-19.643-17.531-36.584-37.485-50.523-59.526l-0.677-1.146c-8.704-13.312-17.664-27.904-27.904-46.336l-13.568-25.6c-6.656-12.288-13.568-25.6-20.736-37.376s-10.752-18.944-16.384-27.904l-3.328-5.12c-6.912-11.008-15.104-23.808-25.6-36.096-20.020-27.622-43.546-51.148-70.265-70.543l-0.903-0.625c-21.303-15.57-47.891-25.092-76.679-25.598l-0.121-0.002h-4.096c-16.134 0.135-30.693 6.766-41.211 17.403l-0.005 0.005c-7.215 8.028-11.628 18.702-11.628 30.406 0 1.102 0.039 2.194 0.116 3.276l-0.008-0.145c1.536 25.904 22.918 46.329 49.071 46.329 1.742 0 3.462-0.091 5.157-0.267l-0.212 0.018c11.347 0.187 21.695 4.314 29.771 11.069l-0.075-0.061c2.564 1.895 4.824 3.911 6.886 6.116l0.026 0.028c19.643 17.531 36.584 37.485 50.523 59.526l0.677 1.146c9.472 14.336 18.432 29.184 27.904 46.336l2.048 3.584 6.144 11.52 5.376 9.472c6.656 12.288 13.568 25.6 20.736 37.376s10.496 18.944 16.384 28.16 16.128 25.6 27.904 40.96c20.013 27.628 43.54 51.155 70.265 70.544l0.903 0.624c21.859 16.026 49.289 25.645 78.966 25.645 1.219 0 2.434-0.016 3.645-0.048l-0.179 0.004c15.958-0.22 30.328-6.838 40.695-17.399l0.009-0.009c7.352-8.027 11.858-18.768 11.858-30.561 0-0.957-0.030-1.906-0.088-2.848l0.006 0.129z" />
64
+ <glyph unicode="&#xe936;" glyph-name="media-grid" d="M384 524.8h-332.8c-28.277 0-51.2 22.923-51.2 51.2v0 332.8c0 28.277 22.923 51.2 51.2 51.2v0h332.8c28.277 0 51.2-22.923 51.2-51.2v0-332.8c0-28.277-22.923-51.2-51.2-51.2v0zM102.4 627.2h230.4v230.4h-230.4zM384-64h-332.8c-28.277 0-51.2 22.923-51.2 51.2v0 332.8c0 28.277 22.923 51.2 51.2 51.2v0h332.8c28.277 0 51.2-22.923 51.2-51.2v0-332.8c0-28.277-22.923-51.2-51.2-51.2v0zM102.4 38.4h230.4v230.4h-230.4zM972.8 524.8h-332.8c-28.277 0-51.2 22.923-51.2 51.2v0 332.8c0 28.277 22.923 51.2 51.2 51.2v0h332.8c28.277 0 51.2-22.923 51.2-51.2v0-332.8c0-28.277-22.923-51.2-51.2-51.2v0zM691.2 627.2h230.4v230.4h-230.4zM972.8-64h-332.8c-28.277 0-51.2 22.923-51.2 51.2v0 332.8c0 28.277 22.923 51.2 51.2 51.2v0h332.8c28.277 0 51.2-22.923 51.2-51.2v0-332.8c0-28.277-22.923-51.2-51.2-51.2v0zM691.2 38.4h230.4v230.4h-230.4z" />
65
+ <glyph unicode="&#xe937;" glyph-name="modal-box" horiz-adv-x="1025" d="M751.275-64.769h-589.537c-0.381-0.003-0.831-0.005-1.282-0.005-88.618 0-160.457 71.839-160.457 160.457 0 0.002 0 0.004 0 0.006v0 587.999c0.291 88.397 72.018 159.944 160.456 159.944 0.090 0 0.181 0 0.271 0h371.907c29.445 0 53.315-23.87 53.315-53.315s-23.87-53.315-53.315-53.315h-371.921c-0.076 0-0.166 0.001-0.256 0.001-29.445 0-53.315-23.87-53.315-53.315 0 0 0 0 0-0.001v0-587.999c0.146-29.476 24.074-53.315 53.57-53.315 0 0 0 0 0.001 0h589.537c0 0 0 0 0.001 0 29.496 0 53.425 23.839 53.57 53.301v374.754c0 29.586 23.985 53.571 53.571 53.571s53.571-23.985 53.571-53.571v0-374.74c0 0 0-0.001 0-0.002 0-88.347-71.401-160.018-159.646-160.455h-0.042zM1008.621 642.675c-9.748-10.038-23.37-16.267-38.448-16.267s-28.7 6.229-38.435 16.254l-0.013 0.013-73.308 74.846-76.896-76.896c-9.84-9.84-23.433-15.926-38.448-15.926-30.030 0-54.374 24.344-54.374 54.374 0 15.015 6.086 28.608 15.926 38.448v0l76.896 75.615-73.308 74.589c-10.391 9.753-16.865 23.575-16.865 38.908 0 29.445 23.87 53.315 53.315 53.315 15.334 0 29.156-6.473 38.882-16.836l0.027-0.029 74.589-74.589 76.896 76.896c9.84 9.84 23.433 15.926 38.448 15.926 30.030 0 54.374-24.344 54.374-54.374 0-15.015-6.086-28.608-15.926-38.448l-76.896-76.896 74.589-74.589c8.972-9.555 14.484-22.451 14.484-36.634 0-14.703-5.923-28.023-15.514-37.703l0.004 0.004z" />
66
+ <glyph unicode="&#xe938;" glyph-name="pricing-table" horiz-adv-x="749" d="M589.824 960h-430.592c-88.004-0.291-159.232-71.699-159.232-159.743 0 0 0-0.001 0-0.001v0-704.512c0 0 0-0.001 0-0.001 0-88.044 71.228-159.452 159.204-159.743h430.62c88.004 0.291 159.232 71.699 159.232 159.743 0 0 0 0.001 0 0.001v0 704.512c0 0 0 0.001 0 0.001 0 88.044-71.228 159.452-159.204 159.743h-0.028zM649.984 95.744c0-33.225-26.935-60.16-60.16-60.16v0h-430.592c-33.225 0-60.16 26.935-60.16 60.16v704.512c0 33.225 26.935 60.16 60.16 60.16v0h430.592c33.225 0 60.16-26.935 60.16-60.16v0zM487.168 378.88c-5.15-40.576-33.827-73.292-71.737-84.303l-0.711-0.177v-51.2h-79.36v46.336h-27.136c0 0-0.001 0-0.001 0-21.825 0-39.534 17.62-39.679 39.41v0.014c0.142 21.909 17.792 39.649 39.653 39.936h80.155c11.169 0 20.224 9.055 20.224 20.224s-9.055 20.224-20.224 20.224h-24.064c-0.238-0.002-0.52-0.003-0.803-0.003-52.043 0-95.018 38.824-101.543 89.089l-0.055 0.514c-0.322 3-0.505 6.48-0.505 10.002 0 46.494 31.945 85.528 75.084 96.348l0.685 0.145v47.36h79.104v-44.8h25.6c21.915 0 39.68-17.765 39.68-39.68s-17.765-39.68-39.68-39.68h-81.152c-11.169 0-20.224-9.055-20.224-20.224s9.055-20.224 20.224-20.224h28.16c54.652-0.455 98.781-44.864 98.781-99.581 0-3.427-0.173-6.813-0.511-10.151l0.034 0.42z" />
67
+ <glyph unicode="&#xe939;" glyph-name="progress-bar" d="M969.472 730.88h-355.072c-18.657-30.236-51.603-50.084-89.185-50.084-9.523 0-18.749 1.274-27.515 3.662l0.732-0.17c-44.754 10.952-77.444 50.712-77.444 98.107 0 55.706 45.158 100.864 100.864 100.864 1.217 0 2.429-0.022 3.635-0.064l-0.175 0.005c0.086 0 0.188 0 0.29 0 37.431 0 70.241-19.787 88.54-49.472l0.257-0.449h358.4c0.039 0 0.086 0 0.132 0 28.277 0 51.2-22.923 51.2-51.2 0-5.864-0.986-11.497-2.801-16.744l0.108 0.36c-7.793-20.524-27.297-34.847-50.146-34.847-0.641 0-1.279 0.011-1.914 0.034l0.092-0.003zM326.656 730.88h-271.872c-0.344-0.008-0.75-0.013-1.157-0.013-22.746 0-42.177 14.194-49.918 34.207l-0.124 0.365c-1.762 4.961-2.78 10.683-2.78 16.642 0 28.277 22.923 51.2 51.2 51.2 0.167 0 0.335-0.001 0.502-0.002h272.102c0.344 0.008 0.75 0.013 1.157 0.013 22.746 0 42.177-14.194 49.918-34.207l0.124-0.365c1.763-4.962 2.781-10.685 2.781-16.645 0-28.277-22.923-51.2-51.2-51.2-0.258 0-0.515 0.002-0.772 0.006h0.039zM256 65.28h-201.216c-0.344-0.008-0.75-0.013-1.157-0.013-22.746 0-42.177 14.194-49.918 34.207l-0.124 0.365c-1.762 4.961-2.78 10.683-2.78 16.642 0 28.277 22.923 51.2 51.2 51.2 0.167 0 0.335-0.001 0.502-0.002h201.958c0.344 0.008 0.75 0.013 1.157 0.013 22.746 0 42.177-14.194 49.918-34.207l0.124-0.365c1.765-4.965 2.785-10.691 2.785-16.655 0-28.277-22.923-51.2-51.2-51.2-0.439 0-0.877 0.006-1.313 0.017l0.065-0.001zM972.8 398.080h-93.184c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h93.184c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0zM799.232 449.28c-0.722-56.001-46.288-101.12-102.392-101.12-0.003 0-0.006 0-0.008 0v0c-0.645-0.015-1.406-0.023-2.169-0.023-37.19 0-69.75 19.826-87.686 49.485l-0.257 0.458h-554.24c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h554.24c18.196 30.108 50.75 49.927 87.933 49.927 0.406 0 0.811-0.002 1.216-0.007l-0.062 0.001c0.307 0.003 0.669 0.005 1.032 0.005 56.106 0 101.673-45.122 102.391-101.057l0.001-0.068zM969.472 167.68c0.316 0.007 0.689 0.011 1.062 0.011 22.841 0 42.34-14.313 50.015-34.459l0.123-0.367c1.707-4.888 2.694-10.523 2.694-16.388 0-28.054-22.563-50.838-50.532-51.196h-430.882c-18.035-30.824-50.979-51.201-88.681-51.201-0.143 0-0.286 0-0.429 0.001h0.022c-4.852-0.815-10.442-1.28-16.14-1.28-56.554 0-102.4 45.846-102.4 102.4s45.846 102.4 102.4 102.4c5.699 0 11.288-0.465 16.734-1.361l-0.593 0.081c0.572 0.012 1.247 0.018 1.924 0.018 36.662 0 68.824-19.267 86.913-48.227l0.251-0.431z" />
68
+ <glyph unicode="&#xe93a;" glyph-name="team-members" d="M723.456 414.208c63.021 57.606 102.4 140.17 102.4 231.931 0 173.338-140.518 313.856-313.856 313.856s-313.856-140.518-313.856-313.856c0-91.761 39.379-174.325 102.159-231.714l0.241-0.217c-176.376-63.598-300.249-229.391-300.544-424.156v-0.036c0.145-29.774 24.242-53.871 54.002-54.016h0.014c29.722 0.145 53.76 24.273 53.76 54.015 0 0 0 0 0 0.001v0c0.436 188.804 153.447 341.726 342.244 342.016h123.932c188.825-0.29 341.836-153.212 342.272-341.974v-0.042c-0.082-1.112-0.128-2.409-0.128-3.716 0-29.832 24.184-54.016 54.016-54.016s54.016 24.184 54.016 54.016c0 1.308-0.046 2.605-0.138 3.889l0.010-0.173c-0.295 194.801-124.168 360.594-297.406 423.201l-3.138 0.991zM307.2 646.144c0.148 113.703 92.356 205.82 206.080 205.82 113.815 0 206.080-92.265 206.080-206.080s-92.265-206.080-206.080-206.080c-0.45 0-0.9 0.001-1.349 0.004h0.069c-113.294 0.87-204.8 92.914-204.8 206.33 0 0.002 0 0.004 0 0.006v0z" />
69
+ <glyph unicode="&#xe93b;" glyph-name="testimonials" d="M512 10.752c-0.012 0-0.026 0-0.041 0-14.065 0-26.805 5.671-36.058 14.851l-125.437 125.437c-9.276 9.33-22.119 15.104-36.311 15.104-0.014 0-0.029 0-0.043 0h-160.51c-84.831 0-153.6 68.769-153.6 153.6v0 422.656c0 84.831 68.769 153.6 153.6 153.6v0h90.624c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0h-90.624c-28.277 0-51.2-22.923-51.2-51.2v0-422.656c0-28.277 22.923-51.2 51.2-51.2v0h160.512c42.562-0.111 81.037-17.516 108.787-45.555l0.013-0.013 89.088-88.832 89.088 88.832c27.803 27.836 66.23 45.056 108.679 45.056 0.042 0 0.085 0 0.127 0h160.506c28.277 0 51.2 22.923 51.2 51.2v0 423.168c0 28.277-22.923 51.2-51.2 51.2v0h-501.248c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h501.248c84.831 0 153.6-68.769 153.6-153.6v0-422.656c0-84.831-68.769-153.6-153.6-153.6v0h-160.512c-0.012 0-0.026 0-0.041 0-14.192 0-27.035-5.774-36.309-15.102l-125.442-125.442c-9.25-9.177-21.99-14.848-36.055-14.848-0.014 0-0.029 0-0.043 0h0.002zM782.336 514.816c-0.145-34.388-28.056-62.208-62.463-62.208-34.498 0-62.464 27.966-62.464 62.464s27.966 62.464 62.463 62.464v0c34.529-0.145 62.464-28.17 62.464-62.719 0 0 0 0 0-0.001v0zM583.424 514.816c-0.146-34.387-28.056-62.207-62.463-62.207-34.498 0-62.464 27.966-62.464 62.464s27.966 62.464 62.464 62.464c0.090 0 0.18 0 0.269-0.001h-0.014c34.418-0.29 62.208-28.259 62.208-62.718 0-0.001 0-0.001 0-0.002v0zM384 514.816c-0.145-34.388-28.056-62.208-62.463-62.208-34.498 0-62.464 27.966-62.464 62.464s27.966 62.464 62.463 62.464v0c34.529-0.145 62.464-28.17 62.464-62.719 0 0 0 0 0-0.001v0z" />
70
+ <glyph unicode="&#xe93c;" glyph-name="vertical-scroll" horiz-adv-x="230" d="M230.4 844.8c0-63.623-51.577-115.2-115.2-115.2s-115.2 51.577-115.2 115.2c0 63.623 51.577 115.2 115.2 115.2s115.2-51.577 115.2-115.2zM230.4 448c0-63.623-51.577-115.2-115.2-115.2s-115.2 51.577-115.2 115.2c0 63.623 51.577 115.2 115.2 115.2s115.2-51.577 115.2-115.2zM230.4 51.2c0-63.623-51.577-115.2-115.2-115.2s-115.2 51.577-115.2 115.2c0 63.623 51.577 115.2 115.2 115.2s115.2-51.577 115.2-115.2z" />
71
+ <glyph unicode="&#xe93d;" glyph-name="video-box" d="M512-64c-282.77 0-512 229.23-512 512s229.23 512 512 512c282.77 0 512-229.23 512-512v0c0-282.77-229.23-512-512-512v0zM512 857.6c-226.216 0-409.6-183.384-409.6-409.6s183.384-409.6 409.6-409.6c226.216 0 409.6 183.384 409.6 409.6v0c0 226.216-183.384 409.6-409.6 409.6v0zM404.736 225.024c-28.051 0.295-50.677 23.104-50.677 51.197 0 18.638 9.959 34.951 24.846 43.906l0.231 0.129 212.736 128-136.192 80.896v-71.424c0-28.277-22.923-51.2-51.2-51.2s-51.2 22.923-51.2 51.2v0 162.048c0.318 28.034 23.118 50.637 51.197 50.637 9.427 0 18.259-2.548 25.845-6.992l-0.242 0.131 286.72-171.776c14.875-9.135 24.646-25.314 24.646-43.776s-9.771-34.641-24.424-43.649l-0.222-0.127-285.952-171.776c-7.445-4.587-16.448-7.337-26.088-7.424h-0.024z" />
72
+ <glyph unicode="&#xe93e;" glyph-name="general-tab" horiz-adv-x="1055" d="M975.547 684.151l-337.256 239.869c-30.838 21.74-69.19 34.746-110.58 34.746s-79.742-13.006-111.192-35.155l0.613 0.409-337.495-239.869c-48.303-35.139-79.404-91.391-79.636-154.918v-402.777c0.809-104.859 85.597-189.647 190.379-190.455h134.883c67.96 0 123.053 55.093 123.053 123.053v0 214.443h158.793v-214.443c0-67.96 55.093-123.053 123.053-123.053v0h134.806c104.859 0.809 189.647 85.597 190.455 190.379v402.817c0 0.004 0 0.008 0 0.012 0 63.667-31.28 120.029-79.309 154.555l-0.567 0.388zM595.115 384.315h-134.806c0 0 0 0 0 0-67.876 0-122.916-54.956-123.052-122.8v-214.456h-146.8c0 0 0 0 0 0-43.898 0-79.5 35.518-79.636 79.384v402.753c0.012 26.6 13.062 50.149 33.107 64.603l0.235 0.161 337.495 239.869c12.826 9.108 28.804 14.56 46.055 14.56s33.229-5.452 46.303-14.728l-0.249 0.167 337.495-239.869c20.28-14.616 33.33-38.165 33.342-64.763v-402.742c-0.136-43.879-35.738-79.397-79.636-79.397 0 0 0 0 0 0h-146.8v214.443c-0.137 67.857-55.177 122.813-123.052 122.813 0 0 0 0 0 0v0z" />
73
+ <glyph unicode="&#xe93f;" glyph-name="integrations" horiz-adv-x="829" d="M416.050-63.77v0c-40.321 0.003-75.437 22.283-93.712 55.202l-0.279 0.548c-33.239 62.133-65.92 114.4-101.637 164.348l3.038-4.471c-17.508 23.037-38.933 48.608-61.739 74.64-75.331 86.159-161.26 184.297-161.26 318.834 0 229.015 185.653 414.668 414.668 414.668v0c1.308 0.015 2.853 0.024 4.401 0.024 226.598 0 410.291-183.694 410.291-410.291 0-1.547-0.009-3.093-0.026-4.636l0.002 0.236c0-138.223-84.085-235.209-158.495-322.52-21.655-25.11-41.928-48.608-58.975-71.876-32.614-45.263-66.374-97.927-97.386-152.361l-4.668-8.899c-18.936-32.191-53.406-53.455-92.842-53.455-0.485 0-0.969 0.003-1.453 0.010l0.073-0.001zM414.668 856.333c-171.708-0.131-310.87-139.293-311.001-310.988v-0.013c0-95.834 69.111-174.621 135.228-250.644 24.189-27.875 47.226-53.907 67.268-81.551 35.59-49.137 70.727-105.336 102.067-163.874l3.903-7.983c40.664 66.893 79.040 122.957 120.030 176.927l-3.692-5.070c19.351 26.493 41.928 52.755 63.813 78.326 65.656 76.022 133.385 154.809 133.385 253.869 0.011 0.964 0.017 2.102 0.017 3.242 0 169.98-137.796 307.776-307.776 307.776-1.14 0-2.279-0.006-3.416-0.019l0.173 0.001zM414.668 390.522c-85.881 0-155.501 69.62-155.501 155.501s69.62 155.501 155.501 155.501c85.881 0 155.501-69.62 155.501-155.501v0c-0.131-85.828-69.673-155.37-155.488-155.501h-0.013zM414.668 597.856c-28.627 0-51.834-23.207-51.834-51.834s23.207-51.834 51.834-51.834c28.627 0 51.834 23.207 51.834 51.834v0c0 28.627-23.207 51.834-51.834 51.834v0z" />
74
+ <glyph unicode="&#xe940;" glyph-name="license" horiz-adv-x="1126" d="M1105.819 838.282l-101.011 101.011c-13.132 12.989-31.197 21.014-51.137 21.014s-38.005-8.024-51.143-21.020l0.006 0.006-389.65-388.64c-50.306 32.934-111.928 52.528-178.127 52.528-0.411 0-0.821-0.001-1.232-0.002h0.064c-0.075 0-0.164 0-0.253 0-184.236 0-333.589-149.353-333.589-333.589s149.353-333.589 333.589-333.589c184.236 0 333.589 149.353 333.589 333.589v0c0.001 0.246 0.001 0.536 0.001 0.827 0 66.395-19.59 128.215-53.305 179.995l0.778-1.275 194.951 194.951 43.94-44.95c12.797-13.214 30.688-21.427 50.499-21.465h1.775c39.744 0.006 71.96 32.226 71.96 71.97 0 20.060-8.207 38.203-21.446 51.255l-0.009 0.008-44.697 45.202 42.93 41.667 50.506-50.506c12.076-9.487 27.497-15.215 44.256-15.215 39.748 0 71.97 32.222 71.97 71.97 0 16.759-5.728 32.179-15.333 44.411l0.118-0.156zM334.599 80.698c-104.6 0-189.396 84.796-189.396 189.396s84.795 189.396 189.396 189.396c104.6 0 189.396-84.795 189.396-189.396 0-0.089 0-0.178 0-0.266v0.014c0-0.075 0-0.165 0-0.254 0-104.74-84.908-189.648-189.648-189.648-0.266 0-0.533 0.001-0.799 0.002h0.041z" />
75
+ <glyph unicode="&#xe941;" glyph-name="system-info" d="M968.034 904.489c-34.44 34.345-81.968 55.58-134.455 55.58s-100.015-21.236-134.46-55.585l0.004 0.004-599.703-599.021c-9.133-9.341-16.281-20.665-20.734-33.261l-0.196-0.637-74.167-222.955c-2.852-8.142-4.499-17.529-4.499-27.301 0-46.992 38.095-85.087 85.087-85.087 0.062 0 0.124 0 0.186 0h-0.010c0.229-0.002 0.499-0.004 0.769-0.004 9.414 0 18.458 1.584 26.881 4.5l-0.577-0.174 223.182 74.849c13.107 4.117 24.286 11.183 33.191 20.45l0.025 0.026 501.649 500.511s1.593 1.82 2.73 2.275l94.87 94.87c35.082 34.525 56.819 82.52 56.819 135.591 0 52.959-21.645 100.863-56.572 135.347l-0.020 0.020zM294.391 118.232l-168.809-56.876 56.421 170.629 460.698 459.788 112.387-113.752zM890 713.385l-56.421-55.966-112.387 112.387 55.966 56.649c14.556 14.556 34.665 23.559 56.876 23.559 44.423 0 80.435-36.012 80.435-80.435 0-22.212-9.003-42.32-23.559-56.876v0z" />
76
+ <glyph unicode="&#xe942;" glyph-name="version-control" horiz-adv-x="1005" d="M502.618 258.122c-104.867 0-189.878 85.011-189.878 189.878s85.011 189.878 189.878 189.878c104.867 0 189.878-85.011 189.878-189.878v0c-0.127-104.816-85.062-189.751-189.866-189.878h-0.012zM502.618 526.185c-43.797 0-79.302-35.505-79.302-79.302s35.505-79.302 79.302-79.302c43.797 0 79.302 35.505 79.302 79.302v0c-0.127 43.746-35.556 79.175-79.29 79.302h-0.012zM587.951-64h-170.89c-0.002 0-0.003 0-0.005 0-67.092 0-121.555 54.072-122.186 121.015v0.060c0.008 0.153 0.013 0.331 0.013 0.511 0 3.661-1.957 6.865-4.882 8.623l-0.045 0.025-11.393 6.702c-1.46 0.77-3.19 1.222-5.026 1.222s-3.567-0.452-5.086-1.251l0.060 0.029c-17.556-10.279-38.658-16.349-61.178-16.349-11.13 0-21.913 1.483-32.163 4.261l0.859-0.198c-31.923 8.658-58.032 29.161-73.853 56.384l-0.311 0.58-85.333 148.328c-10.277 17.496-16.347 38.537-16.347 60.995 0 44.924 24.287 84.175 60.448 105.339l0.576 0.312c3.946 2.044 6.615 6.062 6.701 10.711v9.171c0.001 0.066 0.002 0.144 0.002 0.222 0 4.223-2.211 7.929-5.538 10.025l-0.049 0.029c-36.9 21.437-61.316 60.777-61.316 105.819 0 22.662 6.181 43.881 16.948 62.063l-0.31-0.565 85.333 147.881c21.593 36.709 60.9 60.958 105.87 60.958 22.451 0 43.491-6.044 61.581-16.594l-0.582 0.313c1.488-0.953 3.302-1.519 5.25-1.519s3.762 0.566 5.289 1.543l-0.039-0.024 10.052 5.585c3.228 1.832 5.371 5.247 5.371 9.161 0 0.156-0.003 0.312-0.010 0.466l0.001-0.022c0.127 67.434 54.758 122.065 122.18 122.192h170.902c67.434-0.127 122.065-54.758 122.192-122.18v-0.012c-0.007-0.145-0.011-0.314-0.011-0.485 0-3.733 1.948-7.011 4.883-8.872l0.043-0.025 9.159-5.138c1.932-1.426 4.36-2.282 6.988-2.282 1.672 0 3.263 0.346 4.705 0.972l-0.077-0.030c17.482 10.227 38.492 16.265 60.913 16.265 44.927 0 84.192-24.247 105.421-60.369l0.312-0.574 85.557-147.658c10.246-17.534 16.296-38.603 16.296-61.085 0-45.013-24.251-84.363-60.401-105.695l-0.572-0.312c-4.097-1.855-6.939-5.822-7.147-10.473l-0.001-0.026v-9.159c0-0.036-0.001-0.079-0.001-0.122 0-4.24 2.316-7.939 5.753-9.901l0.056-0.029h1.34c36.655-21.605 60.861-60.883 60.861-105.814 0-22.383-6.008-43.364-16.498-61.417l0.314 0.585-85.557-147.881c-21.541-36.695-60.805-60.942-105.733-60.942-22.421 0-43.431 6.039-61.493 16.578l0.58-0.313c-1.58 0.882-3.466 1.401-5.473 1.401s-3.893-0.519-5.531-1.43l0.058 0.030-10.276-6.031c-3.224-1.833-5.364-5.246-5.364-9.157 0-0.079 0.001-0.158 0.003-0.236v0.012c-0.127-67.434-54.758-122.065-122.18-122.192h-0.012zM275.211 185.522c0.087 0 0.191 0 0.294 0 22.734 0 43.993-6.312 62.121-17.279l-0.537 0.302 8.265-4.914c36.321-21.243 60.332-60.056 60.332-104.477 0-0.73-0.006-1.459-0.019-2.187l0.002 0.109c0-6.292 5.101-11.393 11.393-11.393v0h170.89c6.292 0 11.393 5.101 11.393 11.393v0c-0.001 0.148-0.001 0.323-0.001 0.497 0 45.174 24.786 84.559 61.499 105.298l0.603 0.313 7.148 4.244c17.627 10.474 38.862 16.665 61.543 16.665s43.916-6.191 62.107-16.975l-0.564 0.31c1.689-1.013 3.726-1.612 5.904-1.612 4.206 0 7.889 2.235 9.928 5.582l0.029 0.051 86.003 149.668c1.003 1.663 1.597 3.67 1.597 5.817 0 4.163-2.232 7.804-5.565 9.792l-0.052 0.029c-37.522 21.643-62.49 61.35-62.994 106.93l-0.001 0.071v8.712c0 0.114-0.001 0.25-0.001 0.386 0 44.871 24.275 84.072 60.408 105.188l0.577 0.311c3.88 2.341 6.434 6.533 6.434 11.323 0 1.882-0.395 3.673-1.106 5.293l0.033-0.085-85.333 147.658c-2.070 3.385-5.747 5.61-9.943 5.61-1.827 0-3.555-0.422-5.093-1.173l0.069 0.030c-17.48-10.37-38.533-16.499-61.017-16.499-22.64 0-43.828 6.214-61.952 17.029l0.554-0.306-7.818 4.468c-37.331 21.218-62.101 60.718-62.101 106.004 0 0.037 0 0.074 0 0.11v-0.006c0.001 0.066 0.002 0.145 0.002 0.223 0 6.292-5.101 11.393-11.393 11.393-0.001 0-0.002 0-0.002 0h-171.783c-6.292 0-11.393-5.101-11.393-11.393v0c0-0.039 0-0.086 0-0.133 0-45.105-24.574-84.47-61.063-105.439l-0.591-0.313-5.585-3.127c-18.295-11.547-40.556-18.399-64.417-18.399-22.33 0-43.258 6.001-61.26 16.477l0.582-0.313c-1.663 1.003-3.67 1.597-5.817 1.597-4.163 0-7.804-2.232-9.792-5.565l-0.029-0.052-86.003-148.105c-0.954-1.649-1.516-3.628-1.516-5.738 0-4.166 2.193-7.82 5.488-9.87l0.049-0.029c37.778-21.271 62.899-61.080 62.995-106.765v-8.726c0 0 0-0.001 0-0.001 0-44.927-24.158-84.212-60.193-105.572l-0.568-0.311c-4.037-1.944-6.773-6.003-6.773-10.701 0-2.054 0.523-3.985 1.443-5.668l-0.031 0.062 85.333-147.881c2.43-3.214 6.246-5.269 10.542-5.269 1.839 0 3.591 0.377 5.181 1.057l-0.086-0.033c17.421 10.252 38.377 16.307 60.747 16.307 0.005 0 0.010 0 0.015 0h-0.001z" />
77
+ <glyph unicode="&#xe943;" glyph-name="white-label" horiz-adv-x="901" d="M120.783-64c-18.709 0.031-36.417 4.286-52.231 11.863l0.731-0.315c-41.244 19.404-69.284 60.613-69.284 108.372 0 0.223 0.001 0.445 0.002 0.668v-0.034 717.077c0.131 102.877 83.494 186.24 186.358 186.371h527.947c102.877-0.131 186.24-83.494 186.371-186.358v-717.089c0.001-0.188 0.002-0.411 0.002-0.633 0-47.759-28.040-88.968-68.556-108.063l-0.728-0.309c-15.089-7.219-32.789-11.468-51.473-11.547h-0.027c-0.037 0-0.080 0-0.124 0-29.357 0-56.225 10.657-76.947 28.314l0.167-0.138-202.999 169.050c-13.286 11.346-30.663 18.249-49.653 18.249s-36.367-6.903-49.759-18.337l-203.123-169.193c-20.622-17.28-47.405-27.817-76.645-27.944h-0.028zM450.338 259.32c0.029 0 0.064 0 0.098 0 45.519 0 87.226-16.318 119.591-43.424l-0.291 0.238 222.167-184.754v742.25c-0.131 42.756-34.822 77.366-77.596 77.366 0 0 0 0 0 0h-527.935c0 0 0 0 0 0-42.774 0-77.465-34.61-77.596-77.353v-741.801l222.167 184.754c32.083 26.986 73.799 43.449 119.355 43.648h0.043z" />
78
+ <glyph unicode="&#xe944;" glyph-name="widgets-and-addons" d="M282.396 511.943h-116.736c-91.492 0-165.66 74.169-165.66 165.66v0 116.736c0 91.492 74.169 165.66 165.66 165.66v0h116.736c91.492 0 165.66-74.169 165.66-165.66v0-116.736c0-91.492-74.169-165.66-165.66-165.66v0zM165.66 832.114c-20.862 0-37.774-16.912-37.774-37.774v0-116.736c0 0 0 0 0-0.001 0-20.736 16.81-37.547 37.547-37.547 0.080 0 0.16 0 0.24 0.001h116.724c20.736 0 37.547 16.81 37.547 37.547v116.736c0 0.068 0.001 0.148 0.001 0.228 0 20.736-16.81 37.547-37.547 37.547 0 0-0.001 0-0.001 0v0zM858.34 511.943h-116.736c-91.492 0-165.66 74.169-165.66 165.66v0 116.736c0 91.492 74.169 165.66 165.66 165.66v0h116.736c91.492 0 165.66-74.169 165.66-165.66v0-116.736c0-91.492-74.169-165.66-165.66-165.66v0zM741.604 832.114c0 0 0 0-0.001 0-20.736 0-37.547-16.81-37.547-37.547 0-0.080 0-0.16 0.001-0.24v0.012-116.736c0-20.736 16.81-37.547 37.547-37.547v0h116.736c0.068 0 0.148-0.001 0.228-0.001 20.736 0 37.547 16.81 37.547 37.547 0 0 0 0.001 0 0.001v0 116.736c0 20.862-16.912 37.774-37.774 37.774v0zM282.396-64h-116.736c-91.492 0-165.66 74.169-165.66 165.66v0 116.736c0 91.492 74.169 165.66 165.66 165.66v0h116.736c91.492 0 165.66-74.169 165.66-165.66v0-116.736c0-91.492-74.169-165.66-165.66-165.66v0zM165.66 255.943c-0.068 0-0.148 0.001-0.228 0.001-20.736 0-37.547-16.81-37.547-37.547 0 0 0-0.001 0-0.001v0-116.736c0-20.862 16.912-37.774 37.774-37.774v0h116.736c0 0 0 0 0.001 0 20.736 0 37.547 16.81 37.547 37.547 0 0.080 0 0.16-0.001 0.24v-0.012 116.736c0 20.736-16.81 37.547-37.547 37.547v0zM858.34-64h-116.736c-91.492 0-165.66 74.169-165.66 165.66v0 116.736c0 91.492 74.169 165.66 165.66 165.66v0h116.736c91.492 0 165.66-74.169 165.66-165.66v0-116.736c0-91.492-74.169-165.66-165.66-165.66v0zM741.604 255.943c-20.736 0-37.547-16.81-37.547-37.547v0-116.736c0-0.068-0.001-0.148-0.001-0.228 0-20.736 16.81-37.547 37.547-37.547 0 0 0.001 0 0.001 0h116.736c20.862 0 37.774 16.912 37.774 37.774v0 116.736c0 0 0 0 0 0.001 0 20.736-16.81 37.547-37.547 37.547-0.080 0-0.16 0-0.24-0.001h0.012z" />
79
+ <glyph unicode="&#xe945;" glyph-name="all-widgets" d="M139.947 345.6h129.707c77.29 0 139.947-62.656 139.947-139.947v-129.707c0-77.29-62.656-139.947-139.947-139.947h-129.707c-77.29 0-139.947 62.656-139.947 139.947v129.707c0 77.29 62.656 139.947 139.947 139.947zM752.754 345.6h132.892c76.411 0 138.354-61.943 138.354-138.354v-132.892c0-76.411-61.943-138.354-138.354-138.354h-132.892c-76.411 0-138.354 61.943-138.354 138.354v132.892c0 76.411 61.943 138.354 138.354 138.354zM754.574 960h129.252c77.416 0 140.174-62.758 140.174-140.174v-129.252c0-77.416-62.758-140.174-140.174-140.174h-129.252c-77.416 0-140.174 62.758-140.174 140.174v129.252c0 77.416 62.758 140.174 140.174 140.174zM139.719 960h130.162c77.165 0 139.719-62.554 139.719-139.719v-130.162c0-77.165-62.554-139.719-139.719-139.719h-130.162c-77.165 0-139.719 62.554-139.719 139.719v130.162c0 77.165 62.554 139.719 139.719 139.719z" />
80
+ <glyph unicode="&#xe946;" glyph-name="blurbs-and-cta-widgets" d="M409.6 140.8h409.6c113.108 0 204.8 91.692 204.8 204.8v0 409.6c0 113.108-91.692 204.8-204.8 204.8v0h-409.6c-113.108 0-204.8-91.692-204.8-204.8v0-407.78c0.129-114.061 92.559-206.491 206.608-206.62h0.012zM256 38.4c-84.831 0-153.6 68.769-153.6 153.6v0 381.156c0 28.277-22.923 51.2-51.2 51.2s-51.2-22.923-51.2-51.2v0-381.156c0-141.385 114.615-256 256-256v0h381.156c28.277 0 51.2 22.923 51.2 51.2s-22.923 51.2-51.2 51.2v0z" />
81
+ <glyph unicode="&#xe947;" glyph-name="contact-widgets" horiz-adv-x="1396" d="M555.132 546.987l-479.108 385.086c26.241 17.403 58.439 27.81 93.060 27.927h1058.163c34.653-0.097 66.856-10.508 93.723-28.321l-0.632 0.394-478.177-385.086c-38.86-31.592-88.953-50.725-143.515-50.725s-104.655 19.133-143.936 51.057l0.421-0.331zM1396.364 782.196v-677.081c0-93.4-75.715-169.115-169.115-169.115v0h-1058.133c-93.329 0.176-168.939 75.786-169.115 169.098v677.098c-0.001 0.222-0.002 0.485-0.002 0.747 0 35.157 10.787 67.795 29.233 94.783l-0.373-0.578 484.693-390.361c50.227-40.144 114.519-64.609 184.506-65.163l0.124-0.001c0.412-0.002 0.899-0.003 1.386-0.003 70.381 0 134.933 24.953 185.293 66.496l-0.497-0.398 484.073 389.43c17.507-26.116 27.941-58.255 27.941-92.831 0-0.746-0.005-1.491-0.015-2.234l0.001 0.113z" />
82
+ <glyph unicode="&#xe948;" glyph-name="content-widgets" horiz-adv-x="1138" d="M849.794 960c0.15 0 0.328 0 0.506 0 158.592 0 287.19-128.421 287.478-286.946v-449.829c-0.288-158.692-128.999-287.226-287.731-287.226-0.089 0-0.178 0-0.267 0h-562.048c0 0 0 0 0 0-158.732 0-287.443 128.534-287.731 287.198v449.577c0.144 158.573 128.653 287.082 287.212 287.226h562.581zM940.31 587.062l4.551 4.551c6.487 7.616 10.432 17.57 10.432 28.444s-3.946 20.828-10.484 28.506l0.052-0.062c-7.873 8.067-18.53 13.386-30.415 14.4l-0.179 0.012c-0.733 0.044-1.591 0.069-2.454 0.069-11.353 0-21.69-4.35-29.435-11.475l0.031 0.028-256.632-203.536c-15.32-12.745-35.201-20.48-56.889-20.48s-41.568 7.735-57.034 20.597l0.145-0.117-256.126 204.8c-7.107 5.263-16.047 8.425-25.725 8.425-24.018 0-43.488-19.47-43.488-43.488 0-9.742 3.203-18.736 8.614-25.985l-0.082 0.115 7.080-7.332 258.908-202.272c30.223-24.098 68.972-38.667 111.123-38.667s80.9 14.569 111.485 38.945l-0.362-0.279z" />
83
+ <glyph unicode="&#xe949;" glyph-name="image-widgets" d="M887.467-41.244v2.276c-32.732-15.692-71.14-24.909-111.688-25.031h-519.779c-141.385 0-256 114.615-256 256v0 88.292c1.221 0.551 2.271 1.238 3.199 2.059l-0.013-0.011c104.903 87.381 217.543 131.527 333.596 131.527v0c239.844 0 465.806-186.368 550.684-452.38zM773.689 960h-517.689c-141.385 0-256-114.615-256-256v0-337.92c91.377 70.78 207.13 114.129 332.93 116.048l0.439 0.005c9.33 0 19.115 0 28.217 0 104.071-6.788 199.035-40.671 279.433-94.588l-2.043 1.29c142.842-95.27 250.349-233.701 304.723-396.455l1.567-5.408c48.603 47.588 78.735 113.877 78.735 187.203 0 0.266 0 0.533-0.001 0.799v-0.041 523.378c0.009 0.817 0.015 1.781 0.015 2.747 0 141.984-114.268 257.279-255.858 258.94l-0.157 0.001zM732.729 604.103c-0.068 0-0.148 0-0.228 0-42.478 0-76.914 34.435-76.914 76.914s34.435 76.914 76.914 76.914c42.478 0 76.914-34.435 76.914-76.913v0c0 0 0 0 0 0 0-42.398-34.306-76.784-76.674-76.913h-0.013z" />
84
+ <glyph unicode="&#xe94a;" glyph-name="message" horiz-adv-x="1138" d="M849.794 960c0.15 0 0.328 0 0.506 0 158.592 0 287.19-128.421 287.478-286.946v-449.829c-0.288-158.692-128.999-287.226-287.731-287.226-0.089 0-0.178 0-0.267 0h-562.048c0 0 0 0 0 0-158.732 0-287.443 128.534-287.731 287.198v449.577c0.144 158.573 128.653 287.082 287.212 287.226h562.581zM940.31 587.062l4.551 4.551c6.487 7.616 10.432 17.57 10.432 28.444s-3.946 20.828-10.484 28.506l0.052-0.062c-7.873 8.067-18.53 13.386-30.415 14.4l-0.179 0.012c-0.733 0.044-1.591 0.069-2.454 0.069-11.353 0-21.69-4.35-29.435-11.475l0.031 0.028-256.632-203.536c-15.32-12.745-35.201-20.48-56.889-20.48s-41.568 7.735-57.034 20.597l0.145-0.117-256.126 204.8c-7.107 5.263-16.047 8.425-25.725 8.425-24.018 0-43.488-19.47-43.488-43.488 0-9.742 3.203-18.736 8.614-25.985l-0.082 0.115 7.080-7.332 258.908-202.272c30.223-24.098 68.972-38.667 111.123-38.667s80.9 14.569 111.485 38.945l-0.362-0.279z" />
85
+ <glyph unicode="&#xe94b;" glyph-name="off-grid-widgets" horiz-adv-x="1041" d="M883.433 676.771c77.252-4.721 140.095-60.978 154.818-134.608l0.179-1.072c1.494-8.285 2.348-17.821 2.348-27.557 0-88.015-69.798-159.728-157.063-162.806l-0.281-0.008zM813.615 900.422v-765.207c0-32.904-26.674-59.578-59.578-59.578v0h-19.316c-0.217-0.001-0.475-0.002-0.732-0.002-39.55 0-74.887 18.036-98.236 46.331l-0.173 0.216c-34.096 42.335-85.759 69.33-143.744 69.818l-0.082 0.001h-73.775v-184.087c-0.524-39.829-32.934-71.914-72.838-71.914-0.166 0-0.331 0.001-0.497 0.002h-40.237c-40.102 0-72.611 32.509-72.611 72.611v0 199.68c-135.169 41.188-231.816 164.77-231.816 310.924 0 179.173 145.249 324.422 324.422 324.422 0.171 0 0.341 0 0.512 0h166.141c57.892 0.184 109.539 26.762 143.563 68.324l0.262 0.33c23.522 28.512 58.86 46.548 98.41 46.548 0.257 0 0.514-0.001 0.771-0.002h19.976c0.046 0 0.1 0 0.155 0 6.027 0 11.815-1.023 17.2-2.904l-0.366 0.111c4.129-1.275 7.674-2.776 11.030-4.582l-0.325 0.16c18.694-9.9 31.337-29.012 31.882-51.126l0.001-0.074z" />
86
+ <glyph unicode="&#xe94c;" glyph-name="section-addons" horiz-adv-x="1040" d="M958.122 631.996v58.712c0.012 0.794 0.019 1.732 0.019 2.671 0 50.807-20.49 96.829-53.658 130.253l0.011-0.011c-33.999 34.358-81.032 55.76-133.066 56.169h-44.458c-0.917-0.074-1.986-0.116-3.064-0.116-22.468 0-40.683 18.214-40.683 40.683s18.214 40.683 40.683 40.683c1.078 0 2.147-0.042 3.204-0.124l-0.14 0.009h44.381c148.272-1.689 267.927-121.83 268.828-270.13v-57.874c-1.653-21.358-19.39-38.063-41.029-38.063s-39.377 16.705-41.021 37.922l-0.009 0.141zM40.451 591.545c-22.236 0.258-40.194 18.215-40.451 40.427v58.737c1.436 148.794 122.197 268.906 271.104 269.291h44.187c22.432-0.124 40.629-18.078 41.144-40.403l0.001-0.048c-0.513-22.421-18.685-40.431-41.121-40.682h-44.174c-0.173 0.001-0.377 0.001-0.581 0.001-52.382 0-99.813-21.197-134.184-55.481l0.004 0.004c-33.564-33.481-54.329-79.778-54.329-130.925 0-0.617 0.003-1.234 0.009-1.849l-0.001 0.094v-57.788c-0.513-22.293-18.581-40.2-40.89-40.451h-0.024zM82.059 264.004v-58.712c-0.012-0.794-0.019-1.732-0.019-2.671 0-50.807 20.49-96.829 53.658-130.253l-0.011 0.011c34.025-34.317 81.042-55.706 133.055-56.169l0.088-0.001h44.381c0.917 0.074 1.986 0.116 3.064 0.116 22.468 0 40.683-18.214 40.683-40.683s-18.214-40.683-40.683-40.683c-1.078 0-2.147 0.042-3.204 0.124l0.14-0.009h-44.381c-148.272 1.689-267.927 121.83-268.828 270.13v57.874c1.653 21.358 19.39 38.063 41.029 38.063s39.377-16.705 41.021-37.922l0.009-0.141zM999.729 303.53c21.921-0.243 39.689-17.687 40.45-39.457l0.002-0.070v-58.712c-1.435-148.713-122.065-268.775-270.86-269.291h-44.431c-0.917-0.074-1.986-0.116-3.064-0.116-22.468 0-40.683 18.214-40.683 40.683s18.214 40.683 40.683 40.683c1.078 0 2.147-0.042 3.204-0.124l-0.14 0.009h44.381c0.132 0 0.289-0.001 0.446-0.001 52.352 0 99.752 21.198 134.087 55.479l-0.002-0.002c33.564 33.481 54.329 79.778 54.329 130.925 0 0.617-0.003 1.234-0.009 1.849l0.001-0.094v57.788c0.388 22.345 18.53 40.325 40.902 40.451h0.012zM693.454 159.061h-346.727c-63.831 0-115.576 51.745-115.576 115.576v0 346.727c0 63.831 51.745 115.576 115.576 115.576v0h346.727c63.831 0 115.576-51.745 115.576-115.576v0-346.727c0-63.831-51.745-115.576-115.576-115.576v0z" />
87
+ <glyph unicode="&#xe94d;" glyph-name="social-feed-widgets" horiz-adv-x="939" d="M201.751 562.774v-551.902c-21.080-23.819-51.721-38.764-85.853-38.781h-0.003c-0.001 0-0.002 0-0.003 0-63.692 0-115.383 51.378-115.891 114.95v393.239c-0.012 0.646-0.020 1.407-0.020 2.171 0 54.302 36.022 100.19 85.474 115.073l0.851 0.22c8.944 2.498 19.216 3.934 29.822 3.934 33.959 0 64.48-14.72 85.531-38.127l0.093-0.105zM936.35 449.793l-75.769-376.827c-11.775-77.927-78.28-136.972-158.576-136.972-6.684 0-13.272 0.409-19.741 1.204l0.776-0.078-334.011 37.66c-28.037 3.383-52.344 17.15-69.362 37.278l-0.13 0.158c-3.592 3.918-7.048 8.157-10.252 12.589l-0.284 0.412v548.764l315.405 351.944c18.456 20.934 45.334 34.071 75.281 34.071 18.145 0 35.164-4.823 49.844-13.257l-0.488 0.258c31.606-17.508 52.648-50.663 52.648-88.733 0-16.699-4.049-32.453-11.218-46.333l0.265 0.565-89.667-181.352c-2.259-4.153-3.587-9.095-3.587-14.348 0-16.759 13.522-30.359 30.251-30.486h0.012l145.709-5.604c58.524-2.688 104.955-50.788 104.955-109.734 0-7.494-0.75-14.813-2.18-21.885l0.119 0.704z" />
88
+ <glyph unicode="&#xe94e;" glyph-name="table-and-chars-widgets" d="M750.933 960c174.080 0 273.067-98.759 273.067-273.067v0-477.867c0-174.080-98.759-273.067-273.067-273.067h-477.867c-174.308 0-273.067 98.759-273.067 273.067v0 477.867c0 174.308 98.759 273.067 273.067 273.067h477.867zM547.954 769.536c-7.012 4.634-15.616 7.393-24.865 7.393-25.135 0-45.511-20.376-45.511-45.511 0-1.803 0.105-3.581 0.309-5.33l-0.020 0.213v-558.876c2.39-23.1 21.751-40.961 45.283-40.961 0.080 0 0.16 0 0.24 0.001h-0.012c0.068 0 0.148-0.001 0.228-0.001 23.532 0 42.893 17.861 45.267 40.765l0.016 0.195v558.876c0.169 1.472 0.265 3.178 0.265 4.906 0 16.023-8.28 30.112-20.795 38.221l-0.178 0.108zM297.188 595.911c-6.846 4.341-15.182 6.918-24.121 6.918s-17.275-2.577-24.307-7.028l0.187 0.11c-13.056-8.153-21.614-22.443-21.614-38.732 0-1.586 0.081-3.153 0.239-4.697l-0.016 0.194v-379.335c0-25.135 20.376-45.511 45.511-45.511s45.511 20.376 45.511 45.511v0 0 379.108c0.156 1.415 0.245 3.056 0.245 4.718 0 16.298-8.567 30.595-21.444 38.634l-0.192 0.112zM775.054 403.399c-6.897 4.429-15.315 7.061-24.348 7.061s-17.451-2.632-24.53-7.17l0.182 0.109c-12.851-7.762-21.31-21.655-21.31-37.523 0-2.014 0.136-3.997 0.4-5.938l-0.025 0.226v-179.996c2.39-23.1 21.751-40.961 45.283-40.961 0.080 0 0.16 0 0.24 0.001h-0.012c0.068 0 0.148-0.001 0.228-0.001 23.532 0 42.893 17.861 45.267 40.765l0.016 0.195v179.769c0.142 1.35 0.223 2.918 0.223 4.504 0 16.289-8.558 30.579-21.422 38.62l-0.191 0.112z" />
89
+ <glyph unicode="&#xe94f;" glyph-name="testimonials-and-reviews-widgets" d="M512 960c0.379 0.001 0.827 0.002 1.276 0.002 282.77 0 512-229.23 512-512s-229.23-512-512-512c-87.909 0-170.643 22.155-242.924 61.186l2.715-1.341h-1.593c-15.246 6.144-27.534 17.067-41.87 24.121-8.435 3.656-18.258 5.783-28.578 5.783-7.749 0-15.219-1.199-22.233-3.422l0.521 0.142c-29.627-10.816-68.275-22.231-107.704-31.635l-7.894-1.589c-20.48 0-26.624 11.833-26.624 31.858 10.827 47.474 23.027 87.476 37.679 126.274l-2.18-6.58c2.107 6.024 3.323 12.969 3.323 20.197 0 11.030-2.833 21.398-7.811 30.417l0.164-0.325-10.24 19.797c-36.341 67.827-57.787 148.346-58.026 233.851v3.262c0 282.77 229.23 512 512 512v0zM747.975 513.081c-36.195 0-65.536-29.341-65.536-65.536s29.341-65.536 65.536-65.536c36.195 0 65.536 29.341 65.536 65.536v0c-0.129 36.143-29.393 65.407-65.524 65.536h-0.012zM512 513.081c-36.195 0-65.536-29.341-65.536-65.536s29.341-65.536 65.536-65.536c36.195 0 65.536 29.341 65.536 65.536v0c0 0.068 0 0.148 0 0.228 0 36.069-29.24 65.308-65.308 65.308-0.080 0-0.16 0-0.24 0h0.012zM276.025 513.081c-36.195 0-65.536-29.341-65.536-65.536s29.341-65.536 65.536-65.536v0c36.195 0 65.536 29.341 65.536 65.536s-29.341 65.536-65.536 65.536v0z" />
90
+ <glyph unicode="&#xe950;" glyph-name="pa-admin-icon" d="M1024.437 448.219c-0.596-158.073-72.763-299.17-185.761-392.653l-0.858-0.689h-13.548l-104.891 323.851 285.828 207.597 3.059-11.8c9.961-37.82 15.839-81.301 16.17-126.103l0.001-0.204zM798.047 22.972l-10.489-6.556c-77.973-50.165-173.175-79.974-275.339-79.974s-197.366 29.808-277.383 81.202l2.043-1.228-10.489 6.556 285.828 206.723zM305.058 380.913l-107.076-329.533h-9.178c-115.562 94.543-188.753 237.138-188.804 396.829v0.009c0.139 45.7 6.029 89.961 16.983 132.181l-0.813-3.69 3.059 11.8zM493.426 960l-109.262-336.963h-352.697l4.37 13.111c73.442 181.603 242.662 310.074 443.369 323.333l1.545 0.082zM992.97 623.037h-352.697l-109.262 336.963h12.674c202.344-13.418 371.597-142.068 443.682-320.403l1.232-3.448z" />
91
  </font></defs></svg>
admin/assets/fonts/style.css CHANGED
@@ -1,42 +1,42 @@
1
- @font-face {
2
- font-family: "pa-dash";
3
- src: url("pa-dashboard.eot?oxj6w0");
4
- src: url("pa-dashboard.eot?oxj6w0#iefix") format("embedded-opentype"),
5
- url("pa-dashboard.ttf?oxj6w0") format("truetype"), url("pa-dashboard.woff?oxj6w0") format("woff"),
6
- url("pa-dashboard.svg?oxj6w0#pa-dashboard") format("svg");
7
- font-weight: normal;
8
- font-style: normal;
9
- font-display: block;
10
- }
11
-
12
- [class^="pa-dash-"] {
13
- /* use !important to prevent issues with browser extensions that change fonts */
14
- font-family: "pa-dash" !important;
15
- speak: never;
16
- font-style: normal;
17
- font-weight: normal;
18
- font-variant: normal;
19
- text-transform: none;
20
- line-height: 1;
21
- font-size: 17px;
22
- /* Better Font Rendering =========== */
23
- -webkit-font-smoothing: antialiased;
24
- -moz-osx-font-smoothing: grayscale;
25
- }
26
-
27
- .toplevel_page_premium-addons>div.wp-menu-image::before {
28
- position: relative;
29
- top: 5px;
30
- content: "\e950";
31
- /* use !important to prevent issues with browser extensions that change fonts */
32
- font-family: "pa-dash" !important;
33
- speak: none;
34
- font-style: normal;
35
- font-variant: normal;
36
- text-transform: none;
37
- line-height: 1;
38
- /* Better Font Rendering =========== */
39
- -webkit-font-smoothing: antialiased;
40
- -moz-osx-font-smoothing: grayscale;
41
- font-size: 21px;
42
  }
1
+ @font-face {
2
+ font-family: "pa-dash";
3
+ src: url("pa-dashboard.eot?oxj6w0");
4
+ src: url("pa-dashboard.eot?oxj6w0#iefix") format("embedded-opentype"),
5
+ url("pa-dashboard.ttf?oxj6w0") format("truetype"), url("pa-dashboard.woff?oxj6w0") format("woff"),
6
+ url("pa-dashboard.svg?oxj6w0#pa-dashboard") format("svg");
7
+ font-weight: normal;
8
+ font-style: normal;
9
+ font-display: block;
10
+ }
11
+
12
+ [class^="pa-dash-"] {
13
+ /* use !important to prevent issues with browser extensions that change fonts */
14
+ font-family: "pa-dash" !important;
15
+ speak: never;
16
+ font-style: normal;
17
+ font-weight: normal;
18
+ font-variant: normal;
19
+ text-transform: none;
20
+ line-height: 1;
21
+ font-size: 17px;
22
+ /* Better Font Rendering =========== */
23
+ -webkit-font-smoothing: antialiased;
24
+ -moz-osx-font-smoothing: grayscale;
25
+ }
26
+
27
+ .toplevel_page_premium-addons>div.wp-menu-image::before {
28
+ position: relative;
29
+ top: 5px;
30
+ content: "\e950";
31
+ /* use !important to prevent issues with browser extensions that change fonts */
32
+ font-family: "pa-dash" !important;
33
+ speak: none;
34
+ font-style: normal;
35
+ font-variant: normal;
36
+ text-transform: none;
37
+ line-height: 1;
38
+ /* Better Font Rendering =========== */
39
+ -webkit-font-smoothing: antialiased;
40
+ -moz-osx-font-smoothing: grayscale;
41
+ font-size: 21px;
42
  }
admin/assets/js/admin.js CHANGED
@@ -32,7 +32,9 @@
32
 
33
  self.initElementsTabs($elementsTabs);
34
 
35
- self.getUnusedWidget();
 
 
36
 
37
  self.handleElementsActions();
38
 
@@ -73,8 +75,8 @@
73
 
74
  //get unused widgets.
75
  self.getUnusedWidget = function () {
76
-
77
- if ($(".pa-btn-group .pa-btn-disable").hasClass("active")) {
78
  $(".pa-btn-group .pa-btn-unused").addClass("dimmed");
79
  }
80
 
32
 
33
  self.initElementsTabs($elementsTabs);
34
 
35
+ if ( settings.isTrackerAllowed ) {
36
+ self.getUnusedWidget();
37
+ }
38
 
39
  self.handleElementsActions();
40
 
75
 
76
  //get unused widgets.
77
  self.getUnusedWidget = function () {
78
+
79
+ if ( $(".pa-btn-group .pa-btn-disable").hasClass("active") ) {
80
  $(".pa-btn-group .pa-btn-unused").addClass("dimmed");
81
  }
82
 
admin/includes/admin-helper.php CHANGED
@@ -252,9 +252,10 @@ class Admin_Helper {
252
 
253
  $localized_data = array(
254
  'settings' => array(
255
- 'ajaxurl' => admin_url( 'admin-ajax.php' ),
256
- 'nonce' => wp_create_nonce( 'pa-settings-tab' ),
257
- 'theme' => $theme_slug,
 
258
  ),
259
  'premiumRollBackConfirm' => array(
260
  'home_url' => home_url(),
@@ -919,6 +920,10 @@ class Admin_Helper {
919
 
920
  $used_widgets = array();
921
 
 
 
 
 
922
  if ( class_exists( 'Elementor\Modules\Usage\Module' ) ) {
923
 
924
  $module = Module::instance();
252
 
253
  $localized_data = array(
254
  'settings' => array(
255
+ 'ajaxurl' => admin_url( 'admin-ajax.php' ),
256
+ 'nonce' => wp_create_nonce( 'pa-settings-tab' ),
257
+ 'theme' => $theme_slug,
258
+ 'isTrackerAllowed' => 'yes' === get_option( 'elementor_allow_tracking', 'no' ) ? true : false,
259
  ),
260
  'premiumRollBackConfirm' => array(
261
  'home_url' => home_url(),
920
 
921
  $used_widgets = array();
922
 
923
+ if ( ! \Elementor\Tracker::is_allow_track() ) {
924
+ return false;
925
+ }
926
+
927
  if ( class_exists( 'Elementor\Modules\Usage\Module' ) ) {
928
 
929
  $module = Module::instance();
admin/includes/duplicator.php CHANGED
@@ -1,299 +1,299 @@
1
- <?php
2
- /**
3
- * PA Duplicator.
4
- */
5
-
6
- namespace PremiumAddons\Admin\Includes;
7
-
8
- use Elementor\Core\Files\CSS\Post as Post_CSS;
9
-
10
- if ( ! defined( 'ABSPATH' ) ) {
11
- exit();
12
- }
13
-
14
- /**
15
- * Class Duplicator
16
- */
17
- class Duplicator {
18
-
19
- /**
20
- * PA Duplicator action.
21
- */
22
- const DUPLICATE_ACTION = 'pa_duplicator';
23
-
24
- /**
25
- * Class object
26
- *
27
- * @var instance
28
- */
29
- private static $instance = null;
30
-
31
- /**
32
- * Elementor slug
33
- *
34
- * @var elementor
35
- */
36
- private static $elementor = 'elementor';
37
-
38
- /**
39
- * PAPRO Slug
40
- *
41
- * @var papro
42
- */
43
- private static $papro = 'premium-addons-pro';
44
-
45
- /**
46
- * Constructor for the class
47
- */
48
- public function __construct() {
49
-
50
- add_action( 'admin_action_' . self::DUPLICATE_ACTION, array( $this, 'duplicate_post' ) );
51
-
52
- add_filter( 'post_row_actions', array( $this, 'add_duplicator_actions' ), 10, 2 );
53
-
54
- add_filter( 'page_row_actions', array( $this, 'add_duplicator_actions' ), 10, 2 );
55
-
56
- }
57
-
58
- /**
59
- * Add Duplicator Actions
60
- *
61
- * Add duplicator action links to posts/pages
62
- *
63
- * @access public
64
- * @since 3.9.7
65
- *
66
- * @param array $actions row actions.
67
- * @param object $post \WP_Post.
68
- * @return array
69
- */
70
- public function add_duplicator_actions( $actions, $post ) {
71
-
72
- if ( current_user_can( 'edit_posts' ) && post_type_supports( $post->post_type, 'elementor' ) ) {
73
-
74
- $actions[ self::DUPLICATE_ACTION ] = sprintf(
75
- '<a href="%1$s" title="%2$s"><span class="screen-reader-text">%2$s</span>%3$s</a>',
76
- esc_url( self::get_duplicate_url( $post->ID ) ),
77
- /* translators: %s: Post Title */
78
- sprintf( esc_attr__( 'Duplicate - %s', 'premium-addons-for-elementor' ), esc_attr( $post->post_title ) ),
79
- __( 'PA Duplicate', 'premium-addons-for-elementor' )
80
- );
81
-
82
- }
83
-
84
- return $actions;
85
- }
86
-
87
- /**
88
- * Get duplicate url
89
- *
90
- * @access public
91
- * @since 3.9.7
92
- *
93
- * @param integer $post_id item ID.
94
- * @return string
95
- */
96
- public static function get_duplicate_url( $post_id ) {
97
-
98
- $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
99
-
100
- return wp_nonce_url(
101
- add_query_arg(
102
- array(
103
- 'action' => self::DUPLICATE_ACTION,
104
- 'post_id' => $post_id,
105
- 'paged' => $paged,
106
- ),
107
- admin_url( 'admin.php' )
108
- ),
109
- self::DUPLICATE_ACTION
110
- );
111
- }
112
-
113
- /**
114
- * Duplicate required post/page
115
- *
116
- * @access public
117
- * @since 3.9.7
118
- *
119
- * @return void
120
- */
121
- public function duplicate_post() {
122
-
123
- if ( ! current_user_can( 'edit_posts' ) ) {
124
- return;
125
- }
126
-
127
- $nonce = isset( $_GET['_wpnonce'] ) ? sanitize_text_field( wp_unslash( $_GET['_wpnonce'] ) ) : '';
128
- $post_id = isset( $_GET['post_id'] ) ? absint( $_GET['post_id'] ) : 0;
129
- $paged = isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 1;
130
-
131
- if ( ! wp_verify_nonce( $nonce, self::DUPLICATE_ACTION ) ) {
132
- return;
133
- }
134
-
135
- $post = get_post( $post_id );
136
- if ( is_null( $post ) ) {
137
- return;
138
- }
139
-
140
- $post = sanitize_post( $post, 'db' );
141
-
142
- $duplicated_post_id = self::insert_post( $post );
143
-
144
- $redirect = add_query_arg(
145
- array(
146
- 'post_type' => $post->post_type,
147
- 'paged' => $paged,
148
- ),
149
- admin_url( 'edit.php' )
150
- );
151
-
152
- if ( ! is_wp_error( $duplicated_post_id ) ) {
153
-
154
- self::duplicate_post_taxonomies( $post, $duplicated_post_id );
155
- self::duplicate_post_meta_data( $post, $duplicated_post_id );
156
-
157
- $css = Post_CSS::create( $duplicated_post_id );
158
- $css->update();
159
-
160
- }
161
-
162
- wp_safe_redirect( $redirect );
163
- die();
164
- }
165
-
166
- /**
167
- * Duplicate required post/page
168
- *
169
- * @access public
170
- * @since 3.9.7
171
- *
172
- * @param object $post WP_Post.
173
- */
174
- protected static function insert_post( $post ) {
175
-
176
- $current_user = wp_get_current_user();
177
-
178
- $post_meta = get_post_meta( $post->ID );
179
-
180
- $duplicated_post_args = array(
181
- 'post_status' => 'draft',
182
- 'post_type' => $post->post_type,
183
- 'post_parent' => $post->post_parent,
184
- 'post_content' => $post->post_content,
185
- 'menu_order' => $post->menu_order,
186
- 'ping_status' => $post->ping_status,
187
- 'post_excerpt' => $post->post_excerpt,
188
- 'post_password' => $post->post_password,
189
- 'comment_status' => $post->comment_status,
190
- 'to_ping' => $post->to_ping,
191
- 'post_author' => $current_user->ID,
192
- 'post_title' => sprintf(
193
- /* translators: 1: Post Title, 2: Post ID */
194
- __( '%1$s - Duplicate - [#%2$d]', 'premium-addons-for-elementor' ),
195
- $post->post_title,
196
- $post->ID
197
- ),
198
- );
199
-
200
- if ( isset( $post_meta['_elementor_edit_mode'][0] ) ) {
201
-
202
- $data = array(
203
- 'meta_input' => array(
204
- '_elementor_edit_mode' => $post_meta['_elementor_edit_mode'][0],
205
- '_elementor_template_type' => $post_meta['_elementor_template_type'][0],
206
- ),
207
- );
208
-
209
- $duplicated_post_args = array_merge( $duplicated_post_args, $data );
210
-
211
- }
212
-
213
- return wp_insert_post( $duplicated_post_args );
214
- }
215
-
216
- /**
217
- * Add post taxonomies to the cloned version
218
- *
219
- * @access public
220
- * @since 3.9.7
221
- *
222
- * @param object $post WP_Post.
223
- * @param integer $id item ID.
224
- */
225
- public static function duplicate_post_taxonomies( $post, $id ) {
226
-
227
- $taxonomies = get_object_taxonomies( $post->post_type );
228
-
229
- if ( ! empty( $taxonomies ) && is_array( $taxonomies ) ) {
230
- foreach ( $taxonomies as $taxonomy ) {
231
- $terms = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'slugs' ) );
232
- wp_set_object_terms( $id, $terms, $taxonomy, false );
233
- }
234
- }
235
- }
236
-
237
- /**
238
- * Add post meta data to the cloned version
239
- *
240
- * @access public
241
- * @since 3.9.7
242
- *
243
- * @param object $post WP_Post.
244
- * @param integer $id item ID.
245
- */
246
- public static function duplicate_post_meta_data( $post, $id ) {
247
-
248
- global $wpdb;
249
-
250
- $postmeta = esc_sql( $wpdb->postmeta );
251
-
252
- $post_id = esc_sql( $post->ID );
253
-
254
- $meta = $wpdb->get_results(
255
- $wpdb->prepare( "SELECT meta_key, meta_value FROM {$postmeta} WHERE post_id = %d", $post_id )
256
- );
257
-
258
- if ( ! empty( $meta ) && is_array( $meta ) ) {
259
-
260
- $query = "INSERT INTO {$postmeta} ( post_id, meta_key, meta_value ) VALUES ";
261
-
262
- $_records = array();
263
-
264
- foreach ( $meta as $meta_info ) {
265
-
266
- $meta_value = $meta_info->meta_value;
267
- $meta_key = sanitize_text_field( $meta_info->meta_key );
268
-
269
- $_value = $meta_value;
270
- $_records[] = $wpdb->prepare( "( $id, %s, %s )", $meta_key, $_value );
271
- }
272
-
273
- $query .= implode( ', ', $_records ) . ';';
274
- $wpdb->query( $query );
275
- }
276
-
277
- }
278
-
279
-
280
- /**
281
- * Creates and returns an instance of the class
282
- *
283
- * @since 3.20.9
284
- * @access public
285
- *
286
- * @return object
287
- */
288
- public static function get_instance() {
289
-
290
- if ( ! isset( self::$instance ) ) {
291
-
292
- self::$instance = new self();
293
-
294
- }
295
-
296
- return self::$instance;
297
- }
298
-
299
- }
1
+ <?php
2
+ /**
3
+ * PA Duplicator.
4
+ */
5
+
6
+ namespace PremiumAddons\Admin\Includes;
7
+
8
+ use Elementor\Core\Files\CSS\Post as Post_CSS;
9
+
10
+ if ( ! defined( 'ABSPATH' ) ) {
11
+ exit();
12
+ }
13
+
14
+ /**
15
+ * Class Duplicator
16
+ */
17
+ class Duplicator {
18
+
19
+ /**
20
+ * PA Duplicator action.
21
+ */
22
+ const DUPLICATE_ACTION = 'pa_duplicator';
23
+
24
+ /**
25
+ * Class object
26
+ *
27
+ * @var instance
28
+ */
29
+ private static $instance = null;
30
+
31
+ /**
32
+ * Elementor slug
33
+ *
34
+ * @var elementor
35
+ */
36
+ private static $elementor = 'elementor';
37
+
38
+ /**
39
+ * PAPRO Slug
40
+ *
41
+ * @var papro
42
+ */
43
+ private static $papro = 'premium-addons-pro';
44
+
45
+ /**
46
+ * Constructor for the class
47
+ */
48
+ public function __construct() {
49
+
50
+ add_action( 'admin_action_' . self::DUPLICATE_ACTION, array( $this, 'duplicate_post' ) );
51
+
52
+ add_filter( 'post_row_actions', array( $this, 'add_duplicator_actions' ), 10, 2 );
53
+
54
+ add_filter( 'page_row_actions', array( $this, 'add_duplicator_actions' ), 10, 2 );
55
+
56
+ }
57
+
58
+ /**
59
+ * Add Duplicator Actions
60
+ *
61
+ * Add duplicator action links to posts/pages
62
+ *
63
+ * @access public
64
+ * @since 3.9.7
65
+ *
66
+ * @param array $actions row actions.
67
+ * @param object $post \WP_Post.
68
+ * @return array
69
+ */
70
+ public function add_duplicator_actions( $actions, $post ) {
71
+
72
+ if ( current_user_can( 'edit_posts' ) && post_type_supports( $post->post_type, 'elementor' ) ) {
73
+
74
+ $actions[ self::DUPLICATE_ACTION ] = sprintf(
75
+ '<a href="%1$s" title="%2$s"><span class="screen-reader-text">%2$s</span>%3$s</a>',
76
+ esc_url( self::get_duplicate_url( $post->ID ) ),
77
+ /* translators: %s: Post Title */
78
+ sprintf( esc_attr__( 'Duplicate - %s', 'premium-addons-for-elementor' ), esc_attr( $post->post_title ) ),
79
+ __( 'PA Duplicate', 'premium-addons-for-elementor' )
80
+ );
81
+
82
+ }
83
+
84
+ return $actions;
85
+ }
86
+
87
+ /**
88
+ * Get duplicate url
89
+ *
90
+ * @access public
91
+ * @since 3.9.7
92
+ *
93
+ * @param integer $post_id item ID.
94
+ * @return string
95
+ */
96
+ public static function get_duplicate_url( $post_id ) {
97
+
98
+ $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
99
+
100
+ return wp_nonce_url(
101
+ add_query_arg(
102
+ array(
103
+ 'action' => self::DUPLICATE_ACTION,
104
+ 'post_id' => $post_id,
105
+ 'paged' => $paged,
106
+ ),
107
+ admin_url( 'admin.php' )
108
+ ),
109
+ self::DUPLICATE_ACTION
110
+ );
111
+ }
112
+
113
+ /**
114
+ * Duplicate required post/page
115
+ *
116
+ * @access public
117
+ * @since 3.9.7
118
+ *
119
+ * @return void
120
+ */
121
+ public function duplicate_post() {
122
+
123
+ if ( ! current_user_can( 'edit_posts' ) ) {
124
+ return;
125
+ }
126
+
127
+ $nonce = isset( $_GET['_wpnonce'] ) ? sanitize_text_field( wp_unslash( $_GET['_wpnonce'] ) ) : '';
128
+ $post_id = isset( $_GET['post_id'] ) ? absint( $_GET['post_id'] ) : 0;
129
+ $paged = isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 1;
130
+
131
+ if ( ! wp_verify_nonce( $nonce, self::DUPLICATE_ACTION ) ) {
132
+ return;
133
+ }
134
+
135
+ $post = get_post( $post_id );
136
+ if ( is_null( $post ) ) {
137
+ return;
138
+ }
139
+
140
+ $post = sanitize_post( $post, 'db' );
141
+
142
+ $duplicated_post_id = self::insert_post( $post );
143
+
144
+ $redirect = add_query_arg(
145
+ array(
146
+ 'post_type' => $post->post_type,
147
+ 'paged' => $paged,
148
+ ),
149
+ admin_url( 'edit.php' )
150
+ );
151
+
152
+ if ( ! is_wp_error( $duplicated_post_id ) ) {
153
+
154
+ self::duplicate_post_taxonomies( $post, $duplicated_post_id );
155
+ self::duplicate_post_meta_data( $post, $duplicated_post_id );
156
+
157
+ $css = Post_CSS::create( $duplicated_post_id );
158
+ $css->update();
159
+
160
+ }
161
+
162
+ wp_safe_redirect( $redirect );
163
+ die();
164
+ }
165
+
166
+ /**
167
+ * Duplicate required post/page
168
+ *
169
+ * @access public
170
+ * @since 3.9.7
171
+ *
172
+ * @param object $post WP_Post.
173
+ */
174
+ protected static function insert_post( $post ) {
175
+
176
+ $current_user = wp_get_current_user();
177
+
178
+ $post_meta = get_post_meta( $post->ID );
179
+
180
+ $duplicated_post_args = array(
181
+ 'post_status' => 'draft',
182
+ 'post_type' => $post->post_type,
183
+ 'post_parent' => $post->post_parent,
184
+ 'post_content' => $post->post_content,
185
+ 'menu_order' => $post->menu_order,
186
+ 'ping_status' => $post->ping_status,
187
+ 'post_excerpt' => $post->post_excerpt,
188
+ 'post_password' => $post->post_password,
189
+ 'comment_status' => $post->comment_status,
190
+ 'to_ping' => $post->to_ping,
191
+ 'post_author' => $current_user->ID,
192
+ 'post_title' => sprintf(
193
+ /* translators: 1: Post Title, 2: Post ID */
194
+ __( '%1$s - Duplicate - [#%2$d]', 'premium-addons-for-elementor' ),
195
+ $post->post_title,
196
+ $post->ID
197
+ ),
198
+ );
199
+
200
+ if ( isset( $post_meta['_elementor_edit_mode'][0] ) ) {
201
+
202
+ $data = array(
203
+ 'meta_input' => array(
204
+ '_elementor_edit_mode' => $post_meta['_elementor_edit_mode'][0],
205
+ '_elementor_template_type' => $post_meta['_elementor_template_type'][0],
206
+ ),
207
+ );
208
+
209
+ $duplicated_post_args = array_merge( $duplicated_post_args, $data );
210
+
211
+ }
212
+
213
+ return wp_insert_post( $duplicated_post_args );
214
+ }
215
+
216
+ /**
217
+ * Add post taxonomies to the cloned version
218
+ *
219
+ * @access public
220
+ * @since 3.9.7
221
+ *
222
+ * @param object $post WP_Post.
223
+ * @param integer $id item ID.
224
+ */
225
+ public static function duplicate_post_taxonomies( $post, $id ) {
226
+
227
+ $taxonomies = get_object_taxonomies( $post->post_type );
228
+
229
+ if ( ! empty( $taxonomies ) && is_array( $taxonomies ) ) {
230
+ foreach ( $taxonomies as $taxonomy ) {
231
+ $terms = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'slugs' ) );
232
+ wp_set_object_terms( $id, $terms, $taxonomy, false );
233
+ }
234
+ }
235
+ }
236
+
237
+ /**
238
+ * Add post meta data to the cloned version
239
+ *
240
+ * @access public
241
+ * @since 3.9.7
242
+ *
243
+ * @param object $post WP_Post.
244
+ * @param integer $id item ID.
245
+ */
246
+ public static function duplicate_post_meta_data( $post, $id ) {
247
+
248
+ global $wpdb;
249
+
250
+ $postmeta = esc_sql( $wpdb->postmeta );
251
+
252
+ $post_id = esc_sql( $post->ID );
253
+
254
+ $meta = $wpdb->get_results(
255
+ $wpdb->prepare( "SELECT meta_key, meta_value FROM {$postmeta} WHERE post_id = %d", $post_id )
256
+ );
257
+
258
+ if ( ! empty( $meta ) && is_array( $meta ) ) {
259
+
260
+ $query = "INSERT INTO {$postmeta} ( post_id, meta_key, meta_value ) VALUES ";
261
+
262
+ $_records = array();
263
+
264
+ foreach ( $meta as $meta_info ) {
265
+
266
+ $meta_value = $meta_info->meta_value;
267
+ $meta_key = sanitize_text_field( $meta_info->meta_key );
268
+
269
+ $_value = $meta_value;
270
+ $_records[] = $wpdb->prepare( "( $id, %s, %s )", $meta_key, $_value );
271
+ }
272
+
273
+ $query .= implode( ', ', $_records ) . ';';
274
+ $wpdb->query( $query );
275
+ }
276
+
277
+ }
278
+
279
+
280
+ /**
281
+ * Creates and returns an instance of the class
282
+ *
283
+ * @since 3.20.9
284
+ * @access public
285
+ *
286
+ * @return object
287
+ */
288
+ public static function get_instance() {
289
+
290
+ if ( ! isset( self::$instance ) ) {
291
+
292
+ self::$instance = new self();
293
+
294
+ }
295
+
296
+ return self::$instance;
297
+ }
298
+
299
+ }
admin/includes/templates/modules-settings.php CHANGED
@@ -36,7 +36,9 @@ $row_meta = Helper_Functions::is_hide_row_meta();
36
  <div class="pa-btn-group">
37
  <button type="button" class="pa-btn pa-btn-enable <?php echo esc_attr( $enable_btn ); ?>"><?php echo __( 'Switch On', 'premium-addons-for-elementor' ); ?></button>
38
  <button type="button" class="pa-btn pa-btn-disable <?php echo esc_attr( $disable_btn ); ?>"><?php echo __( 'Switch Off', 'premium-addons-for-elementor' ); ?></button>
39
- <button type="button" class="pa-btn-unused"><?php echo __( 'Disable Unused Widgets', 'premium-addons-for-elementor' ); ?></button>
 
 
40
  </div>
41
  </div>
42
 
@@ -96,7 +98,7 @@ $row_meta = Helper_Functions::is_hide_row_meta();
96
  <?php echo $elem['title']; ?>
97
  <span class="pa-total-use" title="Total Use">
98
  <?php
99
- if ( ! isset( $elem['is_global'] ) ) {
100
  echo esc_html__( in_array( $elem['name'], array_keys( $used_widgets ) ) ? '(' . $used_widgets[ $elem['name'] ] . ')' : '(0)' );}
101
  ?>
102
  </span>
36
  <div class="pa-btn-group">
37
  <button type="button" class="pa-btn pa-btn-enable <?php echo esc_attr( $enable_btn ); ?>"><?php echo __( 'Switch On', 'premium-addons-for-elementor' ); ?></button>
38
  <button type="button" class="pa-btn pa-btn-disable <?php echo esc_attr( $disable_btn ); ?>"><?php echo __( 'Switch Off', 'premium-addons-for-elementor' ); ?></button>
39
+ <?php if ( $used_widgets ) { ?>
40
+ <button type="button" class="pa-btn-unused"><?php echo __( 'Disable Unused Widgets', 'premium-addons-for-elementor' ); ?></button>
41
+ <?php } ?>
42
  </div>
43
  </div>
44
 
98
  <?php echo $elem['title']; ?>
99
  <span class="pa-total-use" title="Total Use">
100
  <?php
101
+ if ( ! isset( $elem['is_global'] ) && is_array( $used_widgets ) ) {
102
  echo esc_html__( in_array( $elem['name'], array_keys( $used_widgets ) ) ? '(' . $used_widgets[ $elem['name'] ] . ')' : '(0)' );}
103
  ?>
104
  </span>
assets/frontend/css/slick-rtl.css CHANGED
@@ -1,66 +1,66 @@
1
- .slick-slider {
2
- position: relative;
3
- display: block;
4
- -webkit-box-sizing: border-box;
5
- -moz-box-sizing: border-box;
6
- box-sizing: border-box;
7
- -webkit-touch-callout: none;
8
- -webkit-user-select: none;
9
- -moz-user-select: none;
10
- -ms-user-select: none;
11
- user-select: none;
12
- -ms-touch-action: pan-y;
13
- touch-action: pan-y;
14
- -webkit-tap-highlight-color: transparent; }
15
-
16
- .slick-list {
17
- position: relative;
18
- overflow: hidden;
19
- display: block;
20
- margin: 0;
21
- padding: 0; }
22
- .slick-list:focus {
23
- outline: none; }
24
- .slick-list.dragging {
25
- cursor: pointer; }
26
-
27
- .slick-slider .slick-track,
28
- .slick-slider .slick-list {
29
- -webkit-transform: translate3d(0, 0, 0);
30
- transform: translate3d(0, 0, 0); }
31
-
32
- .slick-track {
33
- position: relative;
34
- right: 0;
35
- top: 0;
36
- display: block; }
37
- .slick-track:before, .slick-track:after {
38
- content: "";
39
- display: table; }
40
- .slick-track:after {
41
- clear: both; }
42
- .slick-loading .slick-track {
43
- visibility: hidden; }
44
-
45
- .slick-slide {
46
- float: right;
47
- height: 100%;
48
- min-height: 1px;
49
- display: none; }
50
- .elementor-slick-slider[dir="rtl"] .slick-slide {
51
- float: left; }
52
- .slick-slide.slick-loading img {
53
- display: none; }
54
- .slick-slide.dragging img {
55
- pointer-events: none; }
56
- .slick-initialized .slick-slide {
57
- display: block; }
58
- .slick-loading .slick-slide {
59
- visibility: hidden; }
60
- .slick-vertical .slick-slide {
61
- display: block;
62
- height: auto;
63
- border: 1px solid transparent; }
64
-
65
- .slick-arrow.slick-hidden {
66
- display: none; }
1
+ .slick-slider {
2
+ position: relative;
3
+ display: block;
4
+ -webkit-box-sizing: border-box;
5
+ -moz-box-sizing: border-box;
6
+ box-sizing: border-box;
7
+ -webkit-touch-callout: none;
8
+ -webkit-user-select: none;
9
+ -moz-user-select: none;
10
+ -ms-user-select: none;
11
+ user-select: none;
12
+ -ms-touch-action: pan-y;
13
+ touch-action: pan-y;
14
+ -webkit-tap-highlight-color: transparent; }
15
+
16
+ .slick-list {
17
+ position: relative;
18
+ overflow: hidden;
19
+ display: block;
20
+ margin: 0;
21
+ padding: 0; }
22
+ .slick-list:focus {
23
+ outline: none; }
24
+ .slick-list.dragging {
25
+ cursor: pointer; }
26
+
27
+ .slick-slider .slick-track,
28
+ .slick-slider .slick-list {
29
+ -webkit-transform: translate3d(0, 0, 0);
30
+ transform: translate3d(0, 0, 0); }
31
+
32
+ .slick-track {
33
+ position: relative;
34
+ right: 0;
35
+ top: 0;
36
+ display: block; }
37
+ .slick-track:before, .slick-track:after {
38
+ content: "";
39
+ display: table; }
40
+ .slick-track:after {
41
+ clear: both; }
42
+ .slick-loading .slick-track {
43
+ visibility: hidden; }
44
+
45
+ .slick-slide {
46
+ float: right;
47
+ height: 100%;
48
+ min-height: 1px;
49
+ display: none; }
50
+ .elementor-slick-slider[dir="rtl"] .slick-slide {
51
+ float: left; }
52
+ .slick-slide.slick-loading img {
53
+ display: none; }
54
+ .slick-slide.dragging img {
55
+ pointer-events: none; }
56
+ .slick-initialized .slick-slide {
57
+ display: block; }
58
+ .slick-loading .slick-slide {
59
+ visibility: hidden; }
60
+ .slick-vertical .slick-slide {
61
+ display: block;
62
+ height: auto;
63
+ border: 1px solid transparent; }
64
+
65
+ .slick-arrow.slick-hidden {
66
+ display: none; }
assets/frontend/css/slick.css CHANGED
@@ -1,66 +1,66 @@
1
- .slick-slider {
2
- position: relative;
3
- display: block;
4
- -webkit-box-sizing: border-box;
5
- -moz-box-sizing: border-box;
6
- box-sizing: border-box;
7
- -webkit-touch-callout: none;
8
- -webkit-user-select: none;
9
- -moz-user-select: none;
10
- -ms-user-select: none;
11
- user-select: none;
12
- -ms-touch-action: pan-y;
13
- touch-action: pan-y;
14
- -webkit-tap-highlight-color: transparent; }
15
-
16
- .slick-list {
17
- position: relative;
18
- overflow: hidden;
19
- display: block;
20
- margin: 0;
21
- padding: 0; }
22
- .slick-list:focus {
23
- outline: none; }
24
- .slick-list.dragging {
25
- cursor: pointer; }
26
-
27
- .slick-slider .slick-track,
28
- .slick-slider .slick-list {
29
- -webkit-transform: translate3d(0, 0, 0);
30
- transform: translate3d(0, 0, 0); }
31
-
32
- .slick-track {
33
- position: relative;
34
- left: 0;
35
- top: 0;
36
- display: block; }
37
- .slick-track:before, .slick-track:after {
38
- content: "";
39
- display: table; }
40
- .slick-track:after {
41
- clear: both; }
42
- .slick-loading .slick-track {
43
- visibility: hidden; }
44
-
45
- .slick-slide {
46
- float: left;
47
- height: 100%;
48
- min-height: 1px;
49
- display: none; }
50
- .elementor-slick-slider[dir="rtl"] .slick-slide {
51
- float: right; }
52
- .slick-slide.slick-loading img {
53
- display: none; }
54
- .slick-slide.dragging img {
55
- pointer-events: none; }
56
- .slick-initialized .slick-slide {
57
- display: block; }
58
- .slick-loading .slick-slide {
59
- visibility: hidden; }
60
- .slick-vertical .slick-slide {
61
- display: block;
62
- height: auto;
63
- border: 1px solid transparent; }
64
-
65
- .slick-arrow.slick-hidden {
66
- display: none; }
1
+ .slick-slider {
2
+ position: relative;
3
+ display: block;
4
+ -webkit-box-sizing: border-box;
5
+ -moz-box-sizing: border-box;
6
+ box-sizing: border-box;
7
+ -webkit-touch-callout: none;
8
+ -webkit-user-select: none;
9
+ -moz-user-select: none;
10
+ -ms-user-select: none;
11
+ user-select: none;
12
+ -ms-touch-action: pan-y;
13
+ touch-action: pan-y;
14
+ -webkit-tap-highlight-color: transparent; }
15
+
16
+ .slick-list {
17
+ position: relative;
18
+ overflow: hidden;
19
+ display: block;
20
+ margin: 0;
21
+ padding: 0; }
22
+ .slick-list:focus {
23
+ outline: none; }
24
+ .slick-list.dragging {
25
+ cursor: pointer; }
26
+
27
+ .slick-slider .slick-track,
28
+ .slick-slider .slick-list {
29
+ -webkit-transform: translate3d(0, 0, 0);
30
+ transform: translate3d(0, 0, 0); }
31
+
32
+ .slick-track {
33
+ position: relative;
34
+ left: 0;
35
+ top: 0;
36
+ display: block; }
37
+ .slick-track:before, .slick-track:after {
38
+ content: "";
39
+ display: table; }
40
+ .slick-track:after {
41
+ clear: both; }
42
+ .slick-loading .slick-track {
43
+ visibility: hidden; }
44
+
45
+ .slick-slide {
46
+ float: left;
47
+ height: 100%;
48
+ min-height: 1px;
49
+ display: none; }
50
+ .elementor-slick-slider[dir="rtl"] .slick-slide {
51
+ float: right; }
52
+ .slick-slide.slick-loading img {
53
+ display: none; }
54
+ .slick-slide.dragging img {
55
+ pointer-events: none; }
56
+ .slick-initialized .slick-slide {
57
+ display: block; }
58
+ .slick-loading .slick-slide {
59
+ visibility: hidden; }
60
+ .slick-vertical .slick-slide {
61
+ display: block;
62
+ height: auto;
63
+ border: 1px solid transparent; }
64
+
65
+ .slick-arrow.slick-hidden {
66
+ display: none; }
assets/frontend/js/lottie.js CHANGED
@@ -1,15575 +1,15575 @@
1
- (function ($) {
2
-
3
- (typeof navigator !== "undefined") && (function (root, factory) {
4
-
5
- if (typeof define === "function" && define.amd) {
6
- define(function () {
7
- return factory(root);
8
- });
9
- } else if (typeof module === "object" && module.exports) {
10
- module.exports = factory(root);
11
- } else {
12
- root.lottie = factory(root);
13
- root.bodymovin = root.lottie;
14
- }
15
- }((window || {}), function (window) {
16
- "use strict";
17
- var svgNS = "http://www.w3.org/2000/svg";
18
-
19
- var locationHref = '';
20
-
21
- var initialDefaultFrame = -999999;
22
-
23
- var subframeEnabled = true;
24
- var expressionsPlugin;
25
- var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
26
- var cachedColors = {};
27
- var bm_rounder = Math.round;
28
- var bm_rnd;
29
- var bm_pow = Math.pow;
30
- var bm_sqrt = Math.sqrt;
31
- var bm_abs = Math.abs;
32
- var bm_floor = Math.floor;
33
- var bm_max = Math.max;
34
- var bm_min = Math.min;
35
- var blitter = 10;
36
-
37
- var BMMath = {};
38
- (function () {
39
- var propertyNames = ["abs", "acos", "acosh", "asin", "asinh", "atan", "atanh", "atan2", "ceil", "cbrt", "expm1", "clz32", "cos", "cosh", "exp", "floor", "fround", "hypot", "imul", "log", "log1p", "log2", "log10", "max", "min", "pow", "random", "round", "sign", "sin", "sinh", "sqrt", "tan", "tanh", "trunc", "E", "LN10", "LN2", "LOG10E", "LOG2E", "PI", "SQRT1_2", "SQRT2"];
40
- var i, len = propertyNames.length;
41
- for (i = 0; i < len; i += 1) {
42
- BMMath[propertyNames[i]] = Math[propertyNames[i]];
43
- }
44
- }());
45
-
46
- function ProjectInterface() {
47
- return {};
48
- }
49
-
50
- BMMath.random = Math.random;
51
- BMMath.abs = function (val) {
52
- var tOfVal = typeof val;
53
- if (tOfVal === 'object' && val.length) {
54
- var absArr = createSizedArray(val.length);
55
- var i, len = val.length;
56
- for (i = 0; i < len; i += 1) {
57
- absArr[i] = Math.abs(val[i]);
58
- }
59
- return absArr;
60
- }
61
- return Math.abs(val);
62
-
63
- };
64
- var defaultCurveSegments = 150;
65
- var degToRads = Math.PI / 180;
66
- var roundCorner = 0.5519;
67
-
68
- function roundValues(flag) {
69
- if (flag) {
70
- bm_rnd = Math.round;
71
- } else {
72
- bm_rnd = function (val) {
73
- return val;
74
- };
75
- }
76
- }
77
- roundValues(false);
78
-
79
- function styleDiv(element) {
80
- element.style.position = 'absolute';
81
- element.style.top = 0;
82
- element.style.left = 0;
83
- element.style.display = 'block';
84
- element.style.transformOrigin = element.style.webkitTransformOrigin = '0 0';
85
- element.style.backfaceVisibility = element.style.webkitBackfaceVisibility = 'visible';
86
- element.style.transformStyle = element.style.webkitTransformStyle = element.style.mozTransformStyle = "preserve-3d";
87
- }
88
-
89
- function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {
90
- this.type = type;
91
- this.currentTime = currentTime;
92
- this.totalTime = totalTime;
93
- this.direction = frameMultiplier < 0 ? -1 : 1;
94
- }
95
-
96
- function BMCompleteEvent(type, frameMultiplier) {
97
- this.type = type;
98
- this.direction = frameMultiplier < 0 ? -1 : 1;
99
- }
100
-
101
- function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {
102
- this.type = type;
103
- this.currentLoop = currentLoop;
104
- this.totalLoops = totalLoops;
105
- this.direction = frameMultiplier < 0 ? -1 : 1;
106
- }
107
-
108
- function BMSegmentStartEvent(type, firstFrame, totalFrames) {
109
- this.type = type;
110
- this.firstFrame = firstFrame;
111
- this.totalFrames = totalFrames;
112
- }
113
-
114
- function BMDestroyEvent(type, target) {
115
- this.type = type;
116
- this.target = target;
117
- }
118
-
119
- function BMRenderFrameErrorEvent(nativeError, currentTime) {
120
- this.type = 'renderFrameError';
121
- this.nativeError = nativeError;
122
- this.currentTime = currentTime;
123
- }
124
-
125
- function BMConfigErrorEvent(nativeError) {
126
- this.type = 'configError';
127
- this.nativeError = nativeError;
128
- }
129
-
130
- function BMAnimationConfigErrorEvent(type, nativeError) {
131
- this.type = type;
132
- this.nativeError = nativeError;
133
- this.currentTime = currentTime;
134
- }
135
-
136
- var createElementID = (function () {
137
- var _count = 0;
138
- return function createID() {
139
- return '__lottie_element_' + ++_count
140
- }
141
- }())
142
-
143
- function HSVtoRGB(h, s, v) {
144
- var r, g, b, i, f, p, q, t;
145
- i = Math.floor(h * 6);
146
- f = h * 6 - i;
147
- p = v * (1 - s);
148
- q = v * (1 - f * s);
149
- t = v * (1 - (1 - f) * s);
150
- switch (i % 6) {
151
- case 0:
152
- r = v;
153
- g = t;
154
- b = p;
155
- break;
156
- case 1:
157
- r = q;
158
- g = v;
159
- b = p;
160
- break;
161
- case 2:
162
- r = p;
163
- g = v;
164
- b = t;
165
- break;
166
- case 3:
167
- r = p;
168
- g = q;
169
- b = v;
170
- break;
171
- case 4:
172
- r = t;
173
- g = p;
174
- b = v;
175
- break;
176
- case 5:
177
- r = v;
178
- g = p;
179
- b = q;
180
- break;
181
- }
182
- return [r,
183
- g,
184
- b
185
- ];
186
- }
187
-
188
- function RGBtoHSV(r, g, b) {
189
- var max = Math.max(r, g, b),
190
- min = Math.min(r, g, b),
191
- d = max - min,
192
- h,
193
- s = (max === 0 ? 0 : d / max),
194
- v = max / 255;
195
-
196
- switch (max) {
197
- case min:
198
- h = 0;
199
- break;
200
- case r:
201
- h = (g - b) + d * (g < b ? 6 : 0);
202
- h /= 6 * d;
203
- break;
204
- case g:
205
- h = (b - r) + d * 2;
206
- h /= 6 * d;
207
- break;
208
- case b:
209
- h = (r - g) + d * 4;
210
- h /= 6 * d;
211
- break;
212
- }
213
-
214
- return [
215
- h,
216
- s,
217
- v
218
- ];
219
- }
220
-
221
- function addSaturationToRGB(color, offset) {
222
- var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);
223
- hsv[1] += offset;
224
- if (hsv[1] > 1) {
225
- hsv[1] = 1;
226
- } else if (hsv[1] <= 0) {
227
- hsv[1] = 0;
228
- }
229
- return HSVtoRGB(hsv[0], hsv[1], hsv[2]);
230
- }
231
-
232
- function addBrightnessToRGB(color, offset) {
233
- var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);
234
- hsv[2] += offset;
235
- if (hsv[2] > 1) {
236
- hsv[2] = 1;
237
- } else if (hsv[2] < 0) {
238
- hsv[2] = 0;
239
- }
240
- return HSVtoRGB(hsv[0], hsv[1], hsv[2]);
241
- }
242
-
243
- function addHueToRGB(color, offset) {
244
- var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);
245
- hsv[0] += offset / 360;
246
- if (hsv[0] > 1) {
247
- hsv[0] -= 1;
248
- } else if (hsv[0] < 0) {
249
- hsv[0] += 1;
250
- }
251
- return HSVtoRGB(hsv[0], hsv[1], hsv[2]);
252
- }
253
-
254
- var rgbToHex = (function () {
255
- var colorMap = [];
256
- var i;
257
- var hex;
258
- for (i = 0; i < 256; i += 1) {
259
- hex = i.toString(16);
260
- colorMap[i] = hex.length == 1 ? '0' + hex : hex;
261
- }
262
-
263
- return function (r, g, b) {
264
- if (r < 0) {
265
- r = 0;
266
- }
267
- if (g < 0) {
268
- g = 0;
269
- }
270
- if (b < 0) {
271
- b = 0;
272
- }
273
- return '#' + colorMap[r] + colorMap[g] + colorMap[b];
274
- };
275
- }());
276
-
277
- function BaseEvent() { }
278
- BaseEvent.prototype = {
279
- triggerEvent: function (eventName, args) {
280
- if (this._cbs[eventName]) {
281
- var len = this._cbs[eventName].length;
282
- for (var i = 0; i < len; i++) {
283
- this._cbs[eventName][i](args);
284
- }
285
- }
286
- },
287
- addEventListener: function (eventName, callback) {
288
- if (!this._cbs[eventName]) {
289
- this._cbs[eventName] = [];
290
- }
291
- this._cbs[eventName].push(callback);
292
-
293
- return function () {
294
- this.removeEventListener(eventName, callback);
295
- }.bind(this);
296
- },
297
- removeEventListener: function (eventName, callback) {
298
- if (!callback) {
299
- this._cbs[eventName] = null;
300
- } else if (this._cbs[eventName]) {
301
- var i = 0,
302
- len = this._cbs[eventName].length;
303
- while (i < len) {
304
- if (this._cbs[eventName][i] === callback) {
305
- this._cbs[eventName].splice(i, 1);
306
- i -= 1;
307
- len -= 1;
308
- }
309
- i += 1;
310
- }
311
- if (!this._cbs[eventName].length) {
312
- this._cbs[eventName] = null;
313
- }
314
- }
315
- }
316
- };
317
- var createTypedArray = (function () {
318
- function createRegularArray(type, len) {
319
- var i = 0,
320
- arr = [],
321
- value;
322
- switch (type) {
323
- case 'int16':
324
- case 'uint8c':
325
- value = 1;
326
- break;
327
- default:
328
- value = 1.1;
329
- break;
330
- }
331
- for (i = 0; i < len; i += 1) {
332
- arr.push(value);
333
- }
334
- return arr;
335
- }
336
-
337
- function createTypedArray(type, len) {
338
- if (type === 'float32') {
339
- return new Float32Array(len);
340
- } else if (type === 'int16') {
341
- return new Int16Array(len);
342
- } else if (type === 'uint8c') {
343
- return new Uint8ClampedArray(len);
344
- }
345
- }
346
- if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {
347
- return createTypedArray;
348
- } else {
349
- return createRegularArray;
350
- }
351
- }());
352
-
353
- function createSizedArray(len) {
354
- return Array.apply(null, {
355
- length: len
356
- });
357
- }
358
-
359
- function createNS(type) {
360
- //return {appendChild:function(){},setAttribute:function(){},style:{}}
361
- return document.createElementNS(svgNS, type);
362
- }
363
-
364
- function createTag(type) {
365
- //return {appendChild:function(){},setAttribute:function(){},style:{}}
366
- return document.createElement(type);
367
- }
368
-
369
- function DynamicPropertyContainer() { };
370
- DynamicPropertyContainer.prototype = {
371
- addDynamicProperty: function (prop) {
372
- if (this.dynamicProperties.indexOf(prop) === -1) {
373
- this.dynamicProperties.push(prop);
374
- this.container.addDynamicProperty(this);
375
- this._isAnimated = true;
376
- }
377
- },
378
- iterateDynamicProperties: function () {
379
- this._mdf = false;
380
- var i, len = this.dynamicProperties.length;
381
- for (i = 0; i < len; i += 1) {
382
- this.dynamicProperties[i].getValue();
383
- if (this.dynamicProperties[i]._mdf) {
384
- this._mdf = true;
385
- }
386
- }
387
- },
388
- initDynamicPropertyContainer: function (container) {
389
- this.container = container;
390
- this.dynamicProperties = [];
391
- this._mdf = false;
392
- this._isAnimated = false;
393
- }
394
- }
395
- var getBlendMode = (function () {
396
-
397
- var blendModeEnums = {
398
- 0: 'source-over',
399
- 1: 'multiply',
400
- 2: 'screen',
401
- 3: 'overlay',
402
- 4: 'darken',
403
- 5: 'lighten',
404
- 6: 'color-dodge',
405
- 7: 'color-burn',
406
- 8: 'hard-light',
407
- 9: 'soft-light',
408
- 10: 'difference',
409
- 11: 'exclusion',
410
- 12: 'hue',
411
- 13: 'saturation',
412
- 14: 'color',
413
- 15: 'luminosity'
414
- }
415
-
416
- return function (mode) {
417
- return blendModeEnums[mode] || '';
418
- }
419
- }())
420
- /*!
421
- Transformation Matrix v2.0
422
- (c) Epistemex 2014-2015
423
- www.epistemex.com
424
- By Ken Fyrstenberg
425
- Contributions by leeoniya.
426
- License: MIT, header required.
427
- */
428
-
429
- /**
430
- * 2D transformation matrix object initialized with identity matrix.
431
- *
432
- * The matrix can synchronize a canvas context by supplying the context
433
- * as an argument, or later apply current absolute transform to an
434
- * existing context.
435
- *
436
- * All values are handled as floating point values.
437
- *
438
- * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix
439
- * @prop {number} a - scale x
440
- * @prop {number} b - shear y
441
- * @prop {number} c - shear x
442
- * @prop {number} d - scale y
443
- * @prop {number} e - translate x
444
- * @prop {number} f - translate y
445
- * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context
446
- * @constructor
447
- */
448
-
449
- var Matrix = (function () {
450
-
451
- var _cos = Math.cos;
452
- var _sin = Math.sin;
453
- var _tan = Math.tan;
454
- var _rnd = Math.round;
455
-
456
- function reset() {
457
- this.props[0] = 1;
458
- this.props[1] = 0;
459
- this.props[2] = 0;
460
- this.props[3] = 0;
461
- this.props[4] = 0;
462
- this.props[5] = 1;
463
- this.props[6] = 0;
464
- this.props[7] = 0;
465
- this.props[8] = 0;
466
- this.props[9] = 0;
467
- this.props[10] = 1;
468
- this.props[11] = 0;
469
- this.props[12] = 0;
470
- this.props[13] = 0;
471
- this.props[14] = 0;
472
- this.props[15] = 1;
473
- return this;
474
- }
475
-
476
- function rotate(angle) {
477
- if (angle === 0) {
478
- return this;
479
- }
480
- var mCos = _cos(angle);
481
- var mSin = _sin(angle);
482
- return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
483
- }
484
-
485
- function rotateX(angle) {
486
- if (angle === 0) {
487
- return this;
488
- }
489
- var mCos = _cos(angle);
490
- var mSin = _sin(angle);
491
- return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);
492
- }
493
-
494
- function rotateY(angle) {
495
- if (angle === 0) {
496
- return this;
497
- }
498
- var mCos = _cos(angle);
499
- var mSin = _sin(angle);
500
- return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);
501
- }
502
-
503
- function rotateZ(angle) {
504
- if (angle === 0) {
505
- return this;
506
- }
507
- var mCos = _cos(angle);
508
- var mSin = _sin(angle);
509
- return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
510
- }
511
-
512
- function shear(sx, sy) {
513
- return this._t(1, sy, sx, 1, 0, 0);
514
- }
515
-
516
- function skew(ax, ay) {
517
- return this.shear(_tan(ax), _tan(ay));
518
- }
519
-
520
- function skewFromAxis(ax, angle) {
521
- var mCos = _cos(angle);
522
- var mSin = _sin(angle);
523
- return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)
524
- ._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)
525
- ._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
526
- //return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);
527
- }
528
-
529
- function scale(sx, sy, sz) {
530
- if (!sz && sz !== 0) {
531
- sz = 1;
532
- }
533
- if (sx === 1 && sy === 1 && sz === 1) {
534
- return this;
535
- }
536
- return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);
537
- }
538
-
539
- function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {
540
- this.props[0] = a;
541
- this.props[1] = b;
542
- this.props[2] = c;
543
- this.props[3] = d;
544
- this.props[4] = e;
545
- this.props[5] = f;
546
- this.props[6] = g;
547
- this.props[7] = h;
548
- this.props[8] = i;
549
- this.props[9] = j;
550
- this.props[10] = k;
551
- this.props[11] = l;
552
- this.props[12] = m;
553
- this.props[13] = n;
554
- this.props[14] = o;
555
- this.props[15] = p;
556
- return this;
557
- }
558
-
559
- function translate(tx, ty, tz) {
560
- tz = tz || 0;
561
- if (tx !== 0 || ty !== 0 || tz !== 0) {
562
- return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);
563
- }
564
- return this;
565
- }
566
-
567
- function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {
568
-
569
- var _p = this.props;
570
-
571
- if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {
572
- //NOTE: commenting this condition because TurboFan deoptimizes code when present
573
- //if(m2 !== 0 || n2 !== 0 || o2 !== 0){
574
- _p[12] = _p[12] * a2 + _p[15] * m2;
575
- _p[13] = _p[13] * f2 + _p[15] * n2;
576
- _p[14] = _p[14] * k2 + _p[15] * o2;
577
- _p[15] = _p[15] * p2;
578
- //}
579
- this._identityCalculated = false;
580
- return this;
581
- }
582
-
583
- var a1 = _p[0];
584
- var b1 = _p[1];
585
- var c1 = _p[2];
586
- var d1 = _p[3];
587
- var e1 = _p[4];
588
- var f1 = _p[5];
589
- var g1 = _p[6];
590
- var h1 = _p[7];
591
- var i1 = _p[8];
592
- var j1 = _p[9];
593
- var k1 = _p[10];
594
- var l1 = _p[11];
595
- var m1 = _p[12];
596
- var n1 = _p[13];
597
- var o1 = _p[14];
598
- var p1 = _p[15];
599
-
600
- /* matrix order (canvas compatible):
601
- * ace
602
- * bdf
603
- * 001
604
- */
605
- _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;
606
- _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;
607
- _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;
608
- _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;
609
-
610
- _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;
611
- _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;
612
- _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;
613
- _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;
614
-
615
- _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;
616
- _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;
617
- _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;
618
- _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;
619
-
620
- _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;
621
- _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;
622
- _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;
623
- _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;
624
-
625
- this._identityCalculated = false;
626
- return this;
627
- }
628
-
629
- function isIdentity() {
630
- if (!this._identityCalculated) {
631
- this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);
632
- this._identityCalculated = true;
633
- }
634
- return this._identity;
635
- }
636
-
637
- function equals(matr) {
638
- var i = 0;
639
- while (i < 16) {
640
- if (matr.props[i] !== this.props[i]) {
641
- return false;
642
- }
643
- i += 1;
644
- }
645
- return true;
646
- }
647
-
648
- function clone(matr) {
649
- var i;
650
- for (i = 0; i < 16; i += 1) {
651
- matr.props[i] = this.props[i];
652
- }
653
- }
654
-
655
- function cloneFromProps(props) {
656
- var i;
657
- for (i = 0; i < 16; i += 1) {
658
- this.props[i] = props[i];
659
- }
660
- }
661
-
662
- function applyToPoint(x, y, z) {
663
-
664
- return {
665
- x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],
666
- y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],
667
- z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]
668
- };
669
- /*return {
670
- x: x * me.a + y * me.c + me.e,
671
- y: x * me.b + y * me.d + me.f
672
- };*/
673
- }
674
-
675
- function applyToX(x, y, z) {
676
- return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];
677
- }
678
-
679
- function applyToY(x, y, z) {
680
- return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];
681
- }
682
-
683
- function applyToZ(x, y, z) {
684
- return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];
685
- }
686
-
687
- function getInverseMatrix() {
688
- var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];
689
- var a = this.props[5] / determinant;
690
- var b = -this.props[1] / determinant;
691
- var c = -this.props[4] / determinant;
692
- var d = this.props[0] / determinant;
693
- var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;
694
- var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;
695
- var inverseMatrix = new Matrix();
696
- inverseMatrix.props[0] = a;
697
- inverseMatrix.props[1] = b;
698
- inverseMatrix.props[4] = c;
699
- inverseMatrix.props[5] = d;
700
- inverseMatrix.props[12] = e;
701
- inverseMatrix.props[13] = f;
702
- return inverseMatrix;
703
- }
704
-
705
- function inversePoint(pt) {
706
- var inverseMatrix = this.getInverseMatrix();
707
- return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0)
708
- }
709
-
710
- function inversePoints(pts) {
711
- var i, len = pts.length,
712
- retPts = [];
713
- for (i = 0; i < len; i += 1) {
714
- retPts[i] = inversePoint(pts[i]);
715
- }
716
- return retPts;
717
- }
718
-
719
- function applyToTriplePoints(pt1, pt2, pt3) {
720
- var arr = createTypedArray('float32', 6);
721
- if (this.isIdentity()) {
722
- arr[0] = pt1[0];
723
- arr[1] = pt1[1];
724
- arr[2] = pt2[0];
725
- arr[3] = pt2[1];
726
- arr[4] = pt3[0];
727
- arr[5] = pt3[1];
728
- } else {
729
- var p0 = this.props[0],
730
- p1 = this.props[1],
731
- p4 = this.props[4],
732
- p5 = this.props[5],
733
- p12 = this.props[12],
734
- p13 = this.props[13];
735
- arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;
736
- arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;
737
- arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;
738
- arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;
739
- arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;
740
- arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;
741
- }
742
- return arr;
743
- }
744
-
745
- function applyToPointArray(x, y, z) {
746
- var arr;
747
- if (this.isIdentity()) {
748
- arr = [x, y, z];
749
- } else {
750
- arr = [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]];
751
- }
752
- return arr;
753
- }
754
-
755
- function applyToPointStringified(x, y) {
756
- if (this.isIdentity()) {
757
- return x + ',' + y;
758
- }
759
- var _p = this.props;
760
- return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;
761
- }
762
-
763
- function toCSS() {
764
- //Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.
765
- /*if(this.isIdentity()) {
766
- return '';
767
- }*/
768
- var i = 0;
769
- var props = this.props;
770
- var cssValue = 'matrix3d(';
771
- var v = 10000;
772
- while (i < 16) {
773
- cssValue += _rnd(props[i] * v) / v;
774
- cssValue += i === 15 ? ')' : ',';
775
- i += 1;
776
- }
777
- return cssValue;
778
- }
779
-
780
- function roundMatrixProperty(val) {
781
- var v = 10000;
782
- if ((val < 0.000001 && val > 0) || (val > -0.000001 && val < 0)) {
783
- return _rnd(val * v) / v;
784
- }
785
- return val;
786
- }
787
-
788
- function to2dCSS() {
789
- //Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.
790
- /*if(this.isIdentity()) {
791
- return '';
792
- }*/
793
- var props = this.props;
794
- var _a = roundMatrixProperty(props[0]);
795
- var _b = roundMatrixProperty(props[1]);
796
- var _c = roundMatrixProperty(props[4]);
797
- var _d = roundMatrixProperty(props[5]);
798
- var _e = roundMatrixProperty(props[12]);
799
- var _f = roundMatrixProperty(props[13]);
800
- return "matrix(" + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ")";
801
- }
802
-
803
- return function () {
804
- this.reset = reset;
805
- this.rotate = rotate;
806
- this.rotateX = rotateX;
807
- this.rotateY = rotateY;
808
- this.rotateZ = rotateZ;
809
- this.skew = skew;
810
- this.skewFromAxis = skewFromAxis;
811
- this.shear = shear;
812
- this.scale = scale;
813
- this.setTransform = setTransform;
814
- this.translate = translate;
815
- this.transform = transform;
816
- this.applyToPoint = applyToPoint;
817
- this.applyToX = applyToX;
818
- this.applyToY = applyToY;
819
- this.applyToZ = applyToZ;
820
- this.applyToPointArray = applyToPointArray;
821
- this.applyToTriplePoints = applyToTriplePoints;
822
- this.applyToPointStringified = applyToPointStringified;
823
- this.toCSS = toCSS;
824
- this.to2dCSS = to2dCSS;
825
- this.clone = clone;
826
- this.cloneFromProps = cloneFromProps;
827
- this.equals = equals;
828
- this.inversePoints = inversePoints;
829
- this.inversePoint = inversePoint;
830
- this.getInverseMatrix = getInverseMatrix;
831
- this._t = this.transform;
832
- this.isIdentity = isIdentity;
833
- this._identity = true;
834
- this._identityCalculated = false;
835
-
836
- this.props = createTypedArray('float32', 16);
837
- this.reset();
838
- };
839
- }());
840
-
841
- /*
842
- Copyright 2014 David Bau.
843
-
844
- Permission is hereby granted, free of charge, to any person obtaining
845
- a copy of this software and associated documentation files (the
846
- "Software"), to deal in the Software without restriction, including
847
- without limitation the rights to use, copy, modify, merge, publish,
848
- distribute, sublicense, and/or sell copies of the Software, and to
849
- permit persons to whom the Software is furnished to do so, subject to
850
- the following conditions:
851
-
852
- The above copyright notice and this permission notice shall be
853
- included in all copies or substantial portions of the Software.
854
-
855
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
856
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
857
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
858
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
859
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
860
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
861
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
862
-
863
- */
864
-
865
- (function (pool, math) {
866
- //
867
- // The following constants are related to IEEE 754 limits.
868
- //
869
- var global = this,
870
- width = 256, // each RC4 output is 0 <= x < 256
871
- chunks = 6, // at least six RC4 outputs for each double
872
- digits = 52, // there are 52 significant digits in a double
873
- rngname = 'random', // rngname: name for Math.random and Math.seedrandom
874
- startdenom = math.pow(width, chunks),
875
- significance = math.pow(2, digits),
876
- overflow = significance * 2,
877
- mask = width - 1,
878
- nodecrypto; // node.js crypto module, initialized at the bottom.
879
-
880
- //
881
- // seedrandom()
882
- // This is the seedrandom function described above.
883
- //
884
- function seedrandom(seed, options, callback) {
885
- var key = [];
886
- options = (options === true) ? {
887
- entropy: true
888
- } : (options || {});
889
-
890
- // Flatten the seed string or build one from local entropy if needed.
891
- var shortseed = mixkey(flatten(
892
- options.entropy ? [seed, tostring(pool)] :
893
- (seed === null) ? autoseed() : seed, 3), key);
894
-
895
- // Use the seed to initialize an ARC4 generator.
896
- var arc4 = new ARC4(key);
897
-
898
- // This function returns a random double in [0, 1) that contains
899
- // randomness in every bit of the mantissa of the IEEE 754 value.
900
- var prng = function () {
901
- var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48
902
- d = startdenom, // and denominator d = 2 ^ 48.
903
- x = 0; // and no 'extra last byte'.
904
- while (n < significance) { // Fill up all significant digits by
905
- n = (n + x) * width; // shifting numerator and
906
- d *= width; // denominator and generating a
907
- x = arc4.g(1); // new least-significant-byte.
908
- }
909
- while (n >= overflow) { // To avoid rounding up, before adding
910
- n /= 2; // last byte, shift everything
911
- d /= 2; // right using integer math until
912
- x >>>= 1; // we have exactly the desired bits.
913
- }
914
- return (n + x) / d; // Form the number within [0, 1).
915
- };
916
-
917
- prng.int32 = function () {
918
- return arc4.g(4) | 0;
919
- };
920
- prng.quick = function () {
921
- return arc4.g(4) / 0x100000000;
922
- };
923
- prng.double = prng;
924
-
925
- // Mix the randomness into accumulated entropy.
926
- mixkey(tostring(arc4.S), pool);
927
-
928
- // Calling convention: what to return as a function of prng, seed, is_math.
929
- return (options.pass || callback ||
930
- function (prng, seed, is_math_call, state) {
931
- if (state) {
932
- // Load the arc4 state from the given state if it has an S array.
933
- if (state.S) {
934
- copy(state, arc4);
935
- }
936
- // Only provide the .state method if requested via options.state.
937
- prng.state = function () {
938
- return copy(arc4, {});
939
- };
940
- }
941
-
942
- // If called as a method of Math (Math.seedrandom()), mutate
943
- // Math.random because that is how seedrandom.js has worked since v1.0.
944
- if (is_math_call) {
945
- math[rngname] = prng;
946
- return seed;
947
- }
948
-
949
- // Otherwise, it is a newer calling convention, so return the
950
- // prng directly.
951
- else return prng;
952
- })(
953
- prng,
954
- shortseed,
955
- 'global' in options ? options.global : (this == math),
956
- options.state);
957
- }
958
- math['seed' + rngname] = seedrandom;
959
-
960
- //
961
- // ARC4
962
- //
963
- // An ARC4 implementation. The constructor takes a key in the form of
964
- // an array of at most (width) integers that should be 0 <= x < (width).
965
- //
966
- // The g(count) method returns a pseudorandom integer that concatenates
967
- // the next (count) outputs from ARC4. Its return value is a number x
968
- // that is in the range 0 <= x < (width ^ count).
969
- //
970
- function ARC4(key) {
971
- var t, keylen = key.length,
972
- me = this,
973
- i = 0,
974
- j = me.i = me.j = 0,
975
- s = me.S = [];
976
-
977
- // The empty key [] is treated as [0].
978
- if (!keylen) {
979
- key = [keylen++];
980
- }
981
-
982
- // Set up S using the standard key scheduling algorithm.
983
- while (i < width) {
984
- s[i] = i++;
985
- }
986
- for (i = 0; i < width; i++) {
987
- s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];
988
- s[j] = t;
989
- }
990
-
991
- // The "g" method returns the next (count) outputs as one number.
992
- me.g = function (count) {
993
- // Using instance members instead of closure state nearly doubles speed.
994
- var t, r = 0,
995
- i = me.i,
996
- j = me.j,
997
- s = me.S;
998
- while (count--) {
999
- t = s[i = mask & (i + 1)];
1000
- r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];
1001
- }
1002
- me.i = i;
1003
- me.j = j;
1004
- return r;
1005
- // For robust unpredictability, the function call below automatically
1006
- // discards an initial batch of values. This is called RC4-drop[256].
1007
- // See http://google.com/search?q=rsa+fluhrer+response&btnI
1008
- };
1009
- }
1010
-
1011
- //
1012
- // copy()
1013
- // Copies internal state of ARC4 to or from a plain object.
1014
- //
1015
- function copy(f, t) {
1016
- t.i = f.i;
1017
- t.j = f.j;
1018
- t.S = f.S.slice();
1019
- return t;
1020
- }
1021
-
1022
- //
1023
- // flatten()
1024
- // Converts an object tree to nested arrays of strings.
1025
- //
1026
- function flatten(obj, depth) {
1027
- var result = [],
1028
- typ = (typeof obj),
1029
- prop;
1030
- if (depth && typ == 'object') {
1031
- for (prop in obj) {
1032
- try {
1033
- result.push(flatten(obj[prop], depth - 1));
1034
- } catch (e) { }
1035
- }
1036
- }
1037
- return (result.length ? result : typ == 'string' ? obj : obj + '\0');
1038
- }
1039
-
1040
- //
1041
- // mixkey()
1042
- // Mixes a string seed into a key that is an array of integers, and
1043
- // returns a shortened string seed that is equivalent to the result key.
1044
- //
1045
- function mixkey(seed, key) {
1046
- var stringseed = seed + '',
1047
- smear, j = 0;
1048
- while (j < stringseed.length) {
1049
- key[mask & j] =
1050
- mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));
1051
- }
1052
- return tostring(key);
1053
- }
1054
-
1055
- //
1056
- // autoseed()
1057
- // Returns an object for autoseeding, using window.crypto and Node crypto
1058
- // module if available.
1059
- //
1060
- function autoseed() {
1061
- try {
1062
- if (nodecrypto) {
1063
- return tostring(nodecrypto.randomBytes(width));
1064
- }
1065
- var out = new Uint8Array(width);
1066
- (global.crypto || global.msCrypto).getRandomValues(out);
1067
- return tostring(out);
1068
- } catch (e) {
1069
- var browser = global.navigator,
1070
- plugins = browser && browser.plugins;
1071
- return [+new Date(), global, plugins, global.screen, tostring(pool)];
1072
- }
1073
- }
1074
-
1075
- //
1076
- // tostring()
1077
- // Converts an array of charcodes to a string
1078
- //
1079
- function tostring(a) {
1080
- return String.fromCharCode.apply(0, a);
1081
- }
1082
-
1083
- //
1084
- // When seedrandom.js is loaded, we immediately mix a few bits
1085
- // from the built-in RNG into the entropy pool. Because we do
1086
- // not want to interfere with deterministic PRNG state later,
1087
- // seedrandom will not call math.random on its own again after
1088
- // initialization.
1089
- //
1090
- mixkey(math.random(), pool);
1091
-
1092
- //
1093
- // Nodejs and AMD support: export the implementation as a module using
1094
- // either convention.
1095
- //
1096
-
1097
- // End anonymous scope, and pass initial values.
1098
- })(
1099
- [], // pool: entropy pool starts empty
1100
- BMMath // math: package containing random, pow, and seedrandom
1101
- );
1102
- var BezierFactory = (function () {
1103
- /**
1104
- * BezierEasing - use bezier curve for transition easing function
1105
- * by Gaëtan Renaudeau 2014 - 2015 – MIT License
1106
- *
1107
- * Credits: is based on Firefox's nsSMILKeySpline.cpp
1108
- * Usage:
1109
- * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])
1110
- * spline.get(x) => returns the easing value | x must be in [0, 1] range
1111
- *
1112
- */
1113
-
1114
- var ob = {};
1115
- ob.getBezierEasing = getBezierEasing;
1116
- var beziers = {};
1117
-
1118
- function getBezierEasing(a, b, c, d, nm) {
1119
- var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\./g, 'p');
1120
- if (beziers[str]) {
1121
- return beziers[str];
1122
- }
1123
- var bezEasing = new BezierEasing([a, b, c, d]);
1124
- beziers[str] = bezEasing;
1125
- return bezEasing;
1126
- }
1127
-
1128
- // These values are established by empiricism with tests (tradeoff: performance VS precision)
1129
- var NEWTON_ITERATIONS = 4;
1130
- var NEWTON_MIN_SLOPE = 0.001;
1131
- var SUBDIVISION_PRECISION = 0.0000001;
1132
- var SUBDIVISION_MAX_ITERATIONS = 10;
1133
-
1134
- var kSplineTableSize = 11;
1135
- var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);
1136
-
1137
- var float32ArraySupported = typeof Float32Array === "function";
1138
-
1139
- function A(aA1, aA2) {
1140
- return 1.0 - 3.0 * aA2 + 3.0 * aA1;
1141
- }
1142
-
1143
- function B(aA1, aA2) {
1144
- return 3.0 * aA2 - 6.0 * aA1;
1145
- }
1146
-
1147
- function C(aA1) {
1148
- return 3.0 * aA1;
1149
- }
1150
-
1151
- // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.
1152
- function calcBezier(aT, aA1, aA2) {
1153
- return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;
1154
- }
1155
-
1156
- // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.
1157
- function getSlope(aT, aA1, aA2) {
1158
- return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);
1159
- }
1160
-
1161
- function binarySubdivide(aX, aA, aB, mX1, mX2) {
1162
- var currentX, currentT, i = 0;
1163
- do {
1164
- currentT = aA + (aB - aA) / 2.0;
1165
- currentX = calcBezier(currentT, mX1, mX2) - aX;
1166
- if (currentX > 0.0) {
1167
- aB = currentT;
1168
- } else {
1169
- aA = currentT;
1170
- }
1171
- } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);
1172
- return currentT;
1173
- }
1174
-
1175
- function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {
1176
- for (var i = 0; i < NEWTON_ITERATIONS; ++i) {
1177
- var currentSlope = getSlope(aGuessT, mX1, mX2);
1178
- if (currentSlope === 0.0) return aGuessT;
1179
- var currentX = calcBezier(aGuessT, mX1, mX2) - aX;
1180
- aGuessT -= currentX / currentSlope;
1181
- }
1182
- return aGuessT;
1183
- }
1184
-
1185
- /**
1186
- * points is an array of [ mX1, mY1, mX2, mY2 ]
1187
- */
1188
- function BezierEasing(points) {
1189
- this._p = points;
1190
- this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);
1191
- this._precomputed = false;
1192
-
1193
- this.get = this.get.bind(this);
1194
- }
1195
-
1196
- BezierEasing.prototype = {
1197
-
1198
- get: function (x) {
1199
- var mX1 = this._p[0],
1200
- mY1 = this._p[1],
1201
- mX2 = this._p[2],
1202
- mY2 = this._p[3];
1203
- if (!this._precomputed) this._precompute();
1204
- if (mX1 === mY1 && mX2 === mY2) return x; // linear
1205
- // Because JavaScript number are imprecise, we should guarantee the extremes are right.
1206
- if (x === 0) return 0;
1207
- if (x === 1) return 1;
1208
- return calcBezier(this._getTForX(x), mY1, mY2);
1209
- },
1210
-
1211
- // Private part
1212
-
1213
- _precompute: function () {
1214
- var mX1 = this._p[0],
1215
- mY1 = this._p[1],
1216
- mX2 = this._p[2],
1217
- mY2 = this._p[3];
1218
- this._precomputed = true;
1219
- if (mX1 !== mY1 || mX2 !== mY2)
1220
- this._calcSampleValues();
1221
- },
1222
-
1223
- _calcSampleValues: function () {
1224
- var mX1 = this._p[0],
1225
- mX2 = this._p[2];
1226
- for (var i = 0; i < kSplineTableSize; ++i) {
1227
- this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);
1228
- }
1229
- },
1230
-
1231
- /**
1232
- * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.
1233
- */
1234
- _getTForX: function (aX) {
1235
- var mX1 = this._p[0],
1236
- mX2 = this._p[2],
1237
- mSampleValues = this._mSampleValues;
1238
-
1239
- var intervalStart = 0.0;
1240
- var currentSample = 1;
1241
- var lastSample = kSplineTableSize - 1;
1242
-
1243
- for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {
1244
- intervalStart += kSampleStepSize;
1245
- }
1246
- --currentSample;
1247
-
1248
- // Interpolate to provide an initial guess for t
1249
- var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);
1250
- var guessForT = intervalStart + dist * kSampleStepSize;
1251
-
1252
- var initialSlope = getSlope(guessForT, mX1, mX2);
1253
- if (initialSlope >= NEWTON_MIN_SLOPE) {
1254
- return newtonRaphsonIterate(aX, guessForT, mX1, mX2);
1255
- } else if (initialSlope === 0.0) {
1256
- return guessForT;
1257
- } else {
1258
- return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);
1259
- }
1260
- }
1261
- };
1262
-
1263
- return ob;
1264
-
1265
- }());
1266
- (function () {
1267
- var lastTime = 0;
1268
- var vendors = ['ms', 'moz', 'webkit', 'o'];
1269
- for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
1270
- window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
1271
- window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];
1272
- }
1273
- if (!window.requestAnimationFrame)
1274
- window.requestAnimationFrame = function (callback, element) {
1275
- var currTime = new Date().getTime();
1276
- var timeToCall = Math.max(0, 16 - (currTime - lastTime));
1277
- var id = setTimeout(function () {
1278
- callback(currTime + timeToCall);
1279
- },
1280
- timeToCall);
1281
- lastTime = currTime + timeToCall;
1282
- return id;
1283
- };
1284
- if (!window.cancelAnimationFrame)
1285
- window.cancelAnimationFrame = function (id) {
1286
- clearTimeout(id);
1287
- };
1288
- }());
1289
-
1290
- function extendPrototype(sources, destination) {
1291
- var i, len = sources.length,
1292
- sourcePrototype;
1293
- for (i = 0; i < len; i += 1) {
1294
- sourcePrototype = sources[i].prototype;
1295
- for (var attr in sourcePrototype) {
1296
- if (sourcePrototype.hasOwnProperty(attr)) destination.prototype[attr] = sourcePrototype[attr];
1297
- }
1298
- }
1299
- }
1300
-
1301
- function getDescriptor(object, prop) {
1302
- return Object.getOwnPropertyDescriptor(object, prop);
1303
- }
1304
-
1305
- function createProxyFunction(prototype) {
1306
- function ProxyFunction() { }
1307
- ProxyFunction.prototype = prototype;
1308
- return ProxyFunction;
1309
- }
1310
-
1311
- function bezFunction() {
1312
-
1313
- var easingFunctions = [];
1314
- var math = Math;
1315
-
1316
- function pointOnLine2D(x1, y1, x2, y2, x3, y3) {
1317
- var det1 = (x1 * y2) + (y1 * x3) + (x2 * y3) - (x3 * y2) - (y3 * x1) - (x2 * y1);
1318
- return det1 > -0.001 && det1 < 0.001;
1319
- }
1320
-
1321
- function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {
1322
- if (z1 === 0 && z2 === 0 && z3 === 0) {
1323
- return pointOnLine2D(x1, y1, x2, y2, x3, y3);
1324
- }
1325
- var dist1 = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2) + Math.pow(z2 - z1, 2));
1326
- var dist2 = Math.sqrt(Math.pow(x3 - x1, 2) + Math.pow(y3 - y1, 2) + Math.pow(z3 - z1, 2));
1327
- var dist3 = Math.sqrt(Math.pow(x3 - x2, 2) + Math.pow(y3 - y2, 2) + Math.pow(z3 - z2, 2));
1328
- var diffDist;
1329
- if (dist1 > dist2) {
1330
- if (dist1 > dist3) {
1331
- diffDist = dist1 - dist2 - dist3;
1332
- } else {
1333
- diffDist = dist3 - dist2 - dist1;
1334
- }
1335
- } else if (dist3 > dist2) {
1336
- diffDist = dist3 - dist2 - dist1;
1337
- } else {
1338
- diffDist = dist2 - dist1 - dist3;
1339
- }
1340
- return diffDist > -0.0001 && diffDist < 0.0001;
1341
- }
1342
-
1343
- var getBezierLength = (function () {
1344
-
1345
- return function (pt1, pt2, pt3, pt4) {
1346
- var curveSegments = defaultCurveSegments;
1347
- var k;
1348
- var i, len;
1349
- var ptCoord, perc, addedLength = 0;
1350
- var ptDistance;
1351
- var point = [],
1352
- lastPoint = [];
1353
- var lengthData = bezier_length_pool.newElement();
1354
- len = pt3.length;
1355
- for (k = 0; k < curveSegments; k += 1) {
1356
- perc = k / (curveSegments - 1);
1357
- ptDistance = 0;
1358
- for (i = 0; i < len; i += 1) {
1359
- ptCoord = bm_pow(1 - perc, 3) * pt1[i] + 3 * bm_pow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bm_pow(perc, 2) * pt4[i] + bm_pow(perc, 3) * pt2[i];
1360
- point[i] = ptCoord;
1361
- if (lastPoint[i] !== null) {
1362
- ptDistance += bm_pow(point[i] - lastPoint[i], 2);
1363
- }
1364
- lastPoint[i] = point[i];
1365
- }
1366
- if (ptDistance) {
1367
- ptDistance = bm_sqrt(ptDistance);
1368
- addedLength += ptDistance;
1369
- }
1370
- lengthData.percents[k] = perc;
1371
- lengthData.lengths[k] = addedLength;
1372
- }
1373
- lengthData.addedLength = addedLength;
1374
- return lengthData;
1375
- };
1376
- }());
1377
-
1378
- function getSegmentsLength(shapeData) {
1379
- var segmentsLength = segments_length_pool.newElement();
1380
- var closed = shapeData.c;
1381
- var pathV = shapeData.v;
1382
- var pathO = shapeData.o;
1383
- var pathI = shapeData.i;
1384
- var i, len = shapeData._length;
1385
- var lengths = segmentsLength.lengths;
1386
- var totalLength = 0;
1387
- for (i = 0; i < len - 1; i += 1) {
1388
- lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);
1389
- totalLength += lengths[i].addedLength;
1390
- }
1391
- if (closed && len) {
1392
- lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);
1393
- totalLength += lengths[i].addedLength;
1394
- }
1395
- segmentsLength.totalLength = totalLength;
1396
- return segmentsLength;
1397
- }
1398
-
1399
- function BezierData(length) {
1400
- this.segmentLength = 0;
1401
- this.points = new Array(length);
1402
- }
1403
-
1404
- function PointData(partial, point) {
1405
- this.partialLength = partial;
1406
- this.point = point;
1407
- }
1408
-
1409
- var buildBezierData = (function () {
1410
-
1411
- var storedData = {};
1412
-
1413
- return function (pt1, pt2, pt3, pt4) {
1414
- var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\./g, 'p');
1415
- if (!storedData[bezierName]) {
1416
- var curveSegments = defaultCurveSegments;
1417
- var k, i, len;
1418
- var ptCoord, perc, addedLength = 0;
1419
- var ptDistance;
1420
- var point, lastPoint = null;
1421
- if (pt1.length === 2 && (pt1[0] != pt2[0] || pt1[1] != pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {
1422
- curveSegments = 2;
1423
- }
1424
- var bezierData = new BezierData(curveSegments);
1425
- len = pt3.length;
1426
- for (k = 0; k < curveSegments; k += 1) {
1427
- point = createSizedArray(len);
1428
- perc = k / (curveSegments - 1);
1429
- ptDistance = 0;
1430
- for (i = 0; i < len; i += 1) {
1431
- ptCoord = bm_pow(1 - perc, 3) * pt1[i] + 3 * bm_pow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bm_pow(perc, 2) * (pt2[i] + pt4[i]) + bm_pow(perc, 3) * pt2[i];
1432
- point[i] = ptCoord;
1433
- if (lastPoint !== null) {
1434
- ptDistance += bm_pow(point[i] - lastPoint[i], 2);
1435
- }
1436
- }
1437
- ptDistance = bm_sqrt(ptDistance);
1438
- addedLength += ptDistance;
1439
- bezierData.points[k] = new PointData(ptDistance, point);
1440
- lastPoint = point;
1441
- }
1442
- bezierData.segmentLength = addedLength;
1443
- storedData[bezierName] = bezierData;
1444
- }
1445
- return storedData[bezierName];
1446
- };
1447
- }());
1448
-
1449
- function getDistancePerc(perc, bezierData) {
1450
- var percents = bezierData.percents;
1451
- var lengths = bezierData.lengths;
1452
- var len = percents.length;
1453
- var initPos = bm_floor((len - 1) * perc);
1454
- var lengthPos = perc * bezierData.addedLength;
1455
- var lPerc = 0;
1456
- if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {
1457
- return percents[initPos];
1458
- } else {
1459
- var dir = lengths[initPos] > lengthPos ? -1 : 1;
1460
- var flag = true;
1461
- while (flag) {
1462
- if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {
1463
- lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);
1464
- flag = false;
1465
- } else {
1466
- initPos += dir;
1467
- }
1468
- if (initPos < 0 || initPos >= len - 1) {
1469
- //FIX for TypedArrays that don't store floating point values with enough accuracy
1470
- if (initPos === len - 1) {
1471
- return percents[initPos];
1472
- }
1473
- flag = false;
1474
- }
1475
- }
1476
- return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;
1477
- }
1478
- }
1479
-
1480
- function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {
1481
- var t1 = getDistancePerc(percent, bezierData);
1482
- var u0 = 1;
1483
- var u1 = 1 - t1;
1484
- var ptX = Math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;
1485
- var ptY = Math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;
1486
- return [ptX, ptY];
1487
- }
1488
-
1489
- function getSegmentArray() {
1490
-
1491
- }
1492
-
1493
- var bezier_segment_points = createTypedArray('float32', 8);
1494
-
1495
- function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {
1496
-
1497
- startPerc = startPerc < 0 ? 0 : startPerc > 1 ? 1 : startPerc;
1498
- var t0 = getDistancePerc(startPerc, bezierData);
1499
- endPerc = endPerc > 1 ? 1 : endPerc;
1500
- var t1 = getDistancePerc(endPerc, bezierData);
1501
- var i, len = pt1.length;
1502
- var u0 = 1 - t0;
1503
- var u1 = 1 - t1;
1504
- var u0u0u0 = u0 * u0 * u0;
1505
- var t0u0u0_3 = t0 * u0 * u0 * 3;
1506
- var t0t0u0_3 = t0 * t0 * u0 * 3;
1507
- var t0t0t0 = t0 * t0 * t0;
1508
- //
1509
- var u0u0u1 = u0 * u0 * u1;
1510
- var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1;
1511
- var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1;
1512
- var t0t0t1 = t0 * t0 * t1;
1513
- //
1514
- var u0u1u1 = u0 * u1 * u1;
1515
- var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1;
1516
- var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1;
1517
- var t0t1t1 = t0 * t1 * t1;
1518
- //
1519
- var u1u1u1 = u1 * u1 * u1;
1520
- var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1;
1521
- var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1;
1522
- var t1t1t1 = t1 * t1 * t1;
1523
- for (i = 0; i < len; i += 1) {
1524
- bezier_segment_points[i * 4] = Math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000;
1525
- bezier_segment_points[i * 4 + 1] = Math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000;
1526
- bezier_segment_points[i * 4 + 2] = Math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000;
1527
- bezier_segment_points[i * 4 + 3] = Math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000;
1528
- }
1529
-
1530
- return bezier_segment_points;
1531
- }
1532
-
1533
- return {
1534
- getSegmentsLength: getSegmentsLength,
1535
- getNewSegment: getNewSegment,
1536
- getPointInSegment: getPointInSegment,
1537
- buildBezierData: buildBezierData,
1538
- pointOnLine2D: pointOnLine2D,
1539
- pointOnLine3D: pointOnLine3D
1540
- };
1541
- }
1542
-
1543
- var bez = bezFunction();
1544
-
1545
- function dataFunctionManager() {
1546
-
1547
- //var tCanvasHelper = createTag('canvas').getContext('2d');
1548
-
1549
- function completeLayers(layers, comps, fontManager) {
1550
- var layerData;
1551
- var animArray, lastFrame;
1552
- var i, len = layers.length;
1553
- var j, jLen, k, kLen;
1554
- for (i = 0; i < len; i += 1) {
1555
- layerData = layers[i];
1556
- if (!('ks' in layerData) || layerData.completed) {
1557
- continue;
1558
- }
1559
- layerData.completed = true;
1560
- if (layerData.tt) {
1561
- layers[i - 1].td = layerData.tt;
1562
- }
1563
- animArray = [];
1564
- lastFrame = -1;
1565
- if (layerData.hasMask) {
1566
- var maskProps = layerData.masksProperties;
1567
- jLen = maskProps.length;
1568
- for (j = 0; j < jLen; j += 1) {
1569
- if (maskProps[j].pt.k.i) {
1570
- convertPathsToAbsoluteValues(maskProps[j].pt.k);
1571
- } else {
1572
- kLen = maskProps[j].pt.k.length;
1573
- for (k = 0; k < kLen; k += 1) {
1574
- if (maskProps[j].pt.k[k].s) {
1575
- convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);
1576
- }
1577
- if (maskProps[j].pt.k[k].e) {
1578
- convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);
1579
- }
1580
- }
1581
- }
1582
- }
1583
- }
1584
- if (layerData.ty === 0) {
1585
- layerData.layers = findCompLayers(layerData.refId, comps);
1586
- completeLayers(layerData.layers, comps, fontManager);
1587
- } else if (layerData.ty === 4) {
1588
- completeShapes(layerData.shapes);
1589
- } else if (layerData.ty == 5) {
1590
- completeText(layerData, fontManager);
1591
- }
1592
- }
1593
- }
1594
-
1595
- function findCompLayers(id, comps) {
1596
- var i = 0,
1597
- len = comps.length;
1598
- while (i < len) {
1599
- if (comps[i].id === id) {
1600
- if (!comps[i].layers.__used) {
1601
- comps[i].layers.__used = true;
1602
- return comps[i].layers;
1603
- }
1604
- return JSON.parse(JSON.stringify(comps[i].layers));
1605
- }
1606
- i += 1;
1607
- }
1608
- }
1609
-
1610
- function completeShapes(arr) {
1611
- var i, len = arr.length;
1612
- var j, jLen;
1613
- var hasPaths = false;
1614
- for (i = len - 1; i >= 0; i -= 1) {
1615
- if (arr[i].ty == 'sh') {
1616
- if (arr[i].ks.k.i) {
1617
- convertPathsToAbsoluteValues(arr[i].ks.k);
1618
- } else {
1619
- jLen = arr[i].ks.k.length;
1620
- for (j = 0; j < jLen; j += 1) {
1621
- if (arr[i].ks.k[j].s) {
1622
- convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);
1623
- }
1624
- if (arr[i].ks.k[j].e) {
1625
- convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);
1626
- }
1627
- }
1628
- }
1629
- hasPaths = true;
1630
- } else if (arr[i].ty == 'gr') {
1631
- completeShapes(arr[i].it);
1632
- }
1633
- }
1634
- /*if(hasPaths){
1635
- //mx: distance
1636
- //ss: sensitivity
1637
- //dc: decay
1638
- arr.splice(arr.length-1,0,{
1639
- "ty": "ms",
1640
- "mx":20,
1641
- "ss":10,
1642
- "dc":0.001,
1643
- "maxDist":200
1644
- });
1645
- }*/
1646
- }
1647
-
1648
- function convertPathsToAbsoluteValues(path) {
1649
- var i, len = path.i.length;
1650
- for (i = 0; i < len; i += 1) {
1651
- path.i[i][0] += path.v[i][0];
1652
- path.i[i][1] += path.v[i][1];
1653
- path.o[i][0] += path.v[i][0];
1654
- path.o[i][1] += path.v[i][1];
1655
- }
1656
- }
1657
-
1658
- function checkVersion(minimum, animVersionString) {
1659
- var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];
1660
- if (minimum[0] > animVersion[0]) {
1661
- return true;
1662
- } else if (animVersion[0] > minimum[0]) {
1663
- return false;
1664
- }
1665
- if (minimum[1] > animVersion[1]) {
1666
- return true;
1667
- } else if (animVersion[1] > minimum[1]) {
1668
- return false;
1669
- }
1670
- if (minimum[2] > animVersion[2]) {
1671
- return true;
1672
- } else if (animVersion[2] > minimum[2]) {
1673
- return false;
1674
- }
1675
- }
1676
-
1677
- var checkText = (function () {
1678
- var minimumVersion = [4, 4, 14];
1679
-
1680
- function updateTextLayer(textLayer) {
1681
- var documentData = textLayer.t.d;
1682
- textLayer.t.d = {
1683
- k: [{
1684
- s: documentData,
1685
- t: 0
1686
- }]
1687
- };
1688
- }
1689
-
1690
- function iterateLayers(layers) {
1691
- var i, len = layers.length;
1692
- for (i = 0; i < len; i += 1) {
1693
- if (layers[i].ty === 5) {
1694
- updateTextLayer(layers[i]);
1695
- }
1696
- }
1697
- }
1698
-
1699
- return function (animationData) {
1700
- if (checkVersion(minimumVersion, animationData.v)) {
1701
- iterateLayers(animationData.layers);
1702
- if (animationData.assets) {
1703
- var i, len = animationData.assets.length;
1704
- for (i = 0; i < len; i += 1) {
1705
- if (animationData.assets[i].layers) {
1706
- iterateLayers(animationData.assets[i].layers);
1707
-
1708
- }
1709
- }
1710
- }
1711
- }
1712
- };
1713
- }());
1714
-
1715
- var checkChars = (function () {
1716
- var minimumVersion = [4, 7, 99];
1717
- return function (animationData) {
1718
- if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {
1719
- var i, len = animationData.chars.length,
1720
- j, jLen, k, kLen;
1721
- var pathData, paths;
1722
- for (i = 0; i < len; i += 1) {
1723
- if (animationData.chars[i].data && animationData.chars[i].data.shapes) {
1724
- paths = animationData.chars[i].data.shapes[0].it;
1725
- jLen = paths.length;
1726
-
1727
- for (j = 0; j < jLen; j += 1) {
1728
- pathData = paths[j].ks.k;
1729
- if (!pathData.__converted) {
1730
- convertPathsToAbsoluteValues(paths[j].ks.k);
1731
- pathData.__converted = true;
1732
- }
1733
- }
1734
- }
1735
- }
1736
- }
1737
- };
1738
- }());
1739
-
1740
- var checkColors = (function () {
1741
- var minimumVersion = [4, 1, 9];
1742
-
1743
- function iterateShapes(shapes) {
1744
- var i, len = shapes.length;
1745
- var j, jLen;
1746
- for (i = 0; i < len; i += 1) {
1747
- if (shapes[i].ty === 'gr') {
1748
- iterateShapes(shapes[i].it);
1749
- } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {
1750
- if (shapes[i].c.k && shapes[i].c.k[0].i) {
1751
- jLen = shapes[i].c.k.length;
1752
- for (j = 0; j < jLen; j += 1) {
1753
- if (shapes[i].c.k[j].s) {
1754
- shapes[i].c.k[j].s[0] /= 255;
1755
- shapes[i].c.k[j].s[1] /= 255;
1756
- shapes[i].c.k[j].s[2] /= 255;
1757
- shapes[i].c.k[j].s[3] /= 255;
1758
- }
1759
- if (shapes[i].c.k[j].e) {
1760
- shapes[i].c.k[j].e[0] /= 255;
1761
- shapes[i].c.k[j].e[1] /= 255;
1762
- shapes[i].c.k[j].e[2] /= 255;
1763
- shapes[i].c.k[j].e[3] /= 255;
1764
- }
1765
- }
1766
- } else {
1767
- shapes[i].c.k[0] /= 255;
1768
- shapes[i].c.k[1] /= 255;
1769
- shapes[i].c.k[2] /= 255;
1770
- shapes[i].c.k[3] /= 255;
1771
- }
1772
- }
1773
- }
1774
- }
1775
-
1776
- function iterateLayers(layers) {
1777
- var i, len = layers.length;
1778
- for (i = 0; i < len; i += 1) {
1779
- if (layers[i].ty === 4) {
1780
- iterateShapes(layers[i].shapes);
1781
- }
1782
- }
1783
- }
1784
-
1785
- return function (animationData) {
1786
- if (checkVersion(minimumVersion, animationData.v)) {
1787
- iterateLayers(animationData.layers);
1788
- if (animationData.assets) {
1789
- var i, len = animationData.assets.length;
1790
- for (i = 0; i < len; i += 1) {
1791
- if (animationData.assets[i].layers) {
1792
- iterateLayers(animationData.assets[i].layers);
1793
-
1794
- }
1795
- }
1796
- }
1797
- }
1798
- };
1799
- }());
1800
-
1801
- var checkShapes = (function () {
1802
- var minimumVersion = [4, 4, 18];
1803
-
1804
-
1805
-
1806
- function completeShapes(arr) {
1807
- var i, len = arr.length;
1808
- var j, jLen;
1809
- var hasPaths = false;
1810
- for (i = len - 1; i >= 0; i -= 1) {
1811
- if (arr[i].ty == 'sh') {
1812
- if (arr[i].ks.k.i) {
1813
- arr[i].ks.k.c = arr[i].closed;
1814
- } else {
1815
- jLen = arr[i].ks.k.length;
1816
- for (j = 0; j < jLen; j += 1) {
1817
- if (arr[i].ks.k[j].s) {
1818
- arr[i].ks.k[j].s[0].c = arr[i].closed;
1819
- }
1820
- if (arr[i].ks.k[j].e) {
1821
- arr[i].ks.k[j].e[0].c = arr[i].closed;
1822
- }
1823
- }
1824
- }
1825
- hasPaths = true;
1826
- } else if (arr[i].ty == 'gr') {
1827
- completeShapes(arr[i].it);
1828
- }
1829
- }
1830
- }
1831
-
1832
- function iterateLayers(layers) {
1833
- var layerData;
1834
- var i, len = layers.length;
1835
- var j, jLen, k, kLen;
1836
- for (i = 0; i < len; i += 1) {
1837
- layerData = layers[i];
1838
- if (layerData.hasMask) {
1839
- var maskProps = layerData.masksProperties;
1840
- jLen = maskProps.length;
1841
- for (j = 0; j < jLen; j += 1) {
1842
- if (maskProps[j].pt.k.i) {
1843
- maskProps[j].pt.k.c = maskProps[j].cl;
1844
- } else {
1845
- kLen = maskProps[j].pt.k.length;
1846
- for (k = 0; k < kLen; k += 1) {
1847
- if (maskProps[j].pt.k[k].s) {
1848
- maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;
1849
- }
1850
- if (maskProps[j].pt.k[k].e) {
1851
- maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;
1852
- }
1853
- }
1854
- }
1855
- }
1856
- }
1857
- if (layerData.ty === 4) {
1858
- completeShapes(layerData.shapes);
1859
- }
1860
- }
1861
- }
1862
-
1863
- return function (animationData) {
1864
- if (checkVersion(minimumVersion, animationData.v)) {
1865
- iterateLayers(animationData.layers);
1866
- if (animationData.assets) {
1867
- var i, len = animationData.assets.length;
1868
- for (i = 0; i < len; i += 1) {
1869
- if (animationData.assets[i].layers) {
1870
- iterateLayers(animationData.assets[i].layers);
1871
-
1872
- }
1873
- }
1874
- }
1875
- }
1876
- };
1877
- }());
1878
-
1879
- function completeData(animationData, fontManager) {
1880
- if (animationData.__complete) {
1881
- return;
1882
- }
1883
- checkColors(animationData);
1884
- checkText(animationData);
1885
- checkChars(animationData);
1886
- checkShapes(animationData);
1887
- completeLayers(animationData.layers, animationData.assets, fontManager);
1888
- animationData.__complete = true;
1889
- //blitAnimation(animationData, animationData.assets, fontManager);
1890
- }
1891
-
1892
- function completeText(data, fontManager) {
1893
- if (data.t.a.length === 0 && !('m' in data.t.p)) {
1894
- data.singleShape = true;
1895
- }
1896
- }
1897
-
1898
- var moduleOb = {};
1899
- moduleOb.completeData = completeData;
1900
- moduleOb.checkColors = checkColors;
1901
- moduleOb.checkChars = checkChars;
1902
- moduleOb.checkShapes = checkShapes;
1903
- moduleOb.completeLayers = completeLayers;
1904
-
1905
- return moduleOb;
1906
- }
1907
-
1908
- var dataManager = dataFunctionManager();
1909
-
1910
- var FontManager = (function () {
1911
-
1912
- var maxWaitingTime = 5000;
1913
- var emptyChar = {
1914
- w: 0,
1915
- size: 0,
1916
- shapes: []
1917
- };
1918
- var combinedCharacters = [];
1919
- //Hindi characters
1920
- combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);
1921
-
1922
- function setUpNode(font, family) {
1923
- var parentNode = createTag('span');
1924
- parentNode.style.fontFamily = family;
1925
- var node = createTag('span');
1926
- // Characters that vary significantly among different fonts
1927
- node.innerHTML = 'giItT1WQy@!-/#';
1928
- // Visible - so we can measure it - but not on the screen
1929
- parentNode.style.position = 'absolute';
1930
- parentNode.style.left = '-10000px';
1931
- parentNode.style.top = '-10000px';
1932
- // Large font size makes even subtle changes obvious
1933
- parentNode.style.fontSize = '300px';
1934
- // Reset any font properties
1935
- parentNode.style.fontVariant = 'normal';
1936
- parentNode.style.fontStyle = 'normal';
1937
- parentNode.style.fontWeight = 'normal';
1938
- parentNode.style.letterSpacing = '0';
1939
- parentNode.appendChild(node);
1940
- document.body.appendChild(parentNode);
1941
-
1942
- // Remember width with no applied web font
1943
- var width = node.offsetWidth;
1944
- node.style.fontFamily = font + ', ' + family;
1945
- return {
1946
- node: node,
1947
- w: width,
1948
- parent: parentNode
1949
- };
1950
- }
1951
-
1952
- function checkLoadedFonts() {
1953
- var i, len = this.fonts.length;
1954
- var node, w;
1955
- var loadedCount = len;
1956
- for (i = 0; i < len; i += 1) {
1957
- if (this.fonts[i].loaded) {
1958
- loadedCount -= 1;
1959
- continue;
1960
- }
1961
- if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {
1962
- this.fonts[i].loaded = true;
1963
- } else {
1964
- node = this.fonts[i].monoCase.node;
1965
- w = this.fonts[i].monoCase.w;
1966
- if (node.offsetWidth !== w) {
1967
- loadedCount -= 1;
1968
- this.fonts[i].loaded = true;
1969
- } else {
1970
- node = this.fonts[i].sansCase.node;
1971
- w = this.fonts[i].sansCase.w;
1972
- if (node.offsetWidth !== w) {
1973
- loadedCount -= 1;
1974
- this.fonts[i].loaded = true;
1975
- }
1976
- }
1977
- if (this.fonts[i].loaded) {
1978
- this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);
1979
- this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);
1980
- }
1981
- }
1982
- }
1983
-
1984
- if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {
1985
- setTimeout(this.checkLoadedFonts.bind(this), 20);
1986
- } else {
1987
- setTimeout(function () {
1988
- this.isLoaded = true;
1989
- }.bind(this), 0);
1990
-
1991
- }
1992
- }
1993
-
1994
- function createHelper(def, fontData) {
1995
- var tHelper = createNS('text');
1996
- tHelper.style.fontSize = '100px';
1997
- //tHelper.style.fontFamily = fontData.fFamily;
1998
- tHelper.setAttribute('font-family', fontData.fFamily);
1999
- tHelper.setAttribute('font-style', fontData.fStyle);
2000
- tHelper.setAttribute('font-weight', fontData.fWeight);
2001
- tHelper.textContent = '1';
2002
- if (fontData.fClass) {
2003
- tHelper.style.fontFamily = 'inherit';
2004
- tHelper.setAttribute('class', fontData.fClass);
2005
- } else {
2006
- tHelper.style.fontFamily = fontData.fFamily;
2007
- }
2008
- def.appendChild(tHelper);
2009
- var tCanvasHelper = createTag('canvas').getContext('2d');
2010
- tCanvasHelper.font = fontData.fWeight + ' ' + fontData.fStyle + ' 100px ' + fontData.fFamily;
2011
- //tCanvasHelper.font = ' 100px '+ fontData.fFamily;
2012
- return tHelper;
2013
- }
2014
-
2015
- function addFonts(fontData, defs) {
2016
- if (!fontData) {
2017
- this.isLoaded = true;
2018
- return;
2019
- }
2020
- if (this.chars) {
2021
- this.isLoaded = true;
2022
- this.fonts = fontData.list;
2023
- return;
2024
- }
2025
-
2026
-
2027
- var fontArr = fontData.list;
2028
- var i, len = fontArr.length;
2029
- var _pendingFonts = len;
2030
- for (i = 0; i < len; i += 1) {
2031
- var shouldLoadFont = true;
2032
- var loadedSelector;
2033
- var j;
2034
- fontArr[i].loaded = false;
2035
- fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');
2036
- fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');
2037
- if (!fontArr[i].fPath) {
2038
- fontArr[i].loaded = true;
2039
- _pendingFonts -= 1;
2040
- } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {
2041
- loadedSelector = document.querySelectorAll('style[f-forigin="p"][f-family="' + fontArr[i].fFamily + '"], style[f-origin="3"][f-family="' + fontArr[i].fFamily + '"]');
2042
-
2043
- if (loadedSelector.length > 0) {
2044
- shouldLoadFont = false;
2045
- }
2046
-
2047
- if (shouldLoadFont) {
2048
- var s = createTag('style');
2049
- s.setAttribute('f-forigin', fontArr[i].fOrigin);
2050
- s.setAttribute('f-origin', fontArr[i].origin);
2051
- s.setAttribute('f-family', fontArr[i].fFamily);
2052
- s.type = "text/css";
2053
- s.innerHTML = "@font-face {" + "font-family: " + fontArr[i].fFamily + "; font-style: normal; src: url('" + fontArr[i].fPath + "');}";
2054
- defs.appendChild(s);
2055
- }
2056
- } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {
2057
- loadedSelector = document.querySelectorAll('link[f-forigin="g"], link[f-origin="1"]');
2058
-
2059
- for (j = 0; j < loadedSelector.length; j++) {
2060
- if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {
2061
- // Font is already loaded
2062
- shouldLoadFont = false;
2063
- }
2064
- }
2065
-
2066
- if (shouldLoadFont) {
2067
- var l = createTag('link');
2068
- l.setAttribute('f-forigin', fontArr[i].fOrigin);
2069
- l.setAttribute('f-origin', fontArr[i].origin);
2070
- l.type = "text/css";
2071
- l.rel = "stylesheet";
2072
- l.href = fontArr[i].fPath;
2073
- document.body.appendChild(l);
2074
- }
2075
- } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {
2076
- loadedSelector = document.querySelectorAll('script[f-forigin="t"], script[f-origin="2"]');
2077
-
2078
- for (j = 0; j < loadedSelector.length; j++) {
2079
- if (fontArr[i].fPath === loadedSelector[j].src) {
2080
- // Font is already loaded
2081
- shouldLoadFont = false;
2082
- }
2083
- }
2084
-
2085
- if (shouldLoadFont) {
2086
- var sc = createTag('link');
2087
- sc.setAttribute('f-forigin', fontArr[i].fOrigin);
2088
- sc.setAttribute('f-origin', fontArr[i].origin);
2089
- sc.setAttribute('rel', 'stylesheet');
2090
- sc.setAttribute('href', fontArr[i].fPath);
2091
- defs.appendChild(sc);
2092
- }
2093
- }
2094
- fontArr[i].helper = createHelper(defs, fontArr[i]);
2095
- fontArr[i].cache = {};
2096
- this.fonts.push(fontArr[i]);
2097
- }
2098
- if (_pendingFonts === 0) {
2099
- this.isLoaded = true;
2100
- } else {
2101
- //On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.
2102
- //Adding this timeout seems to fix it
2103
- setTimeout(this.checkLoadedFonts.bind(this), 100);
2104
- }
2105
- }
2106
-
2107
- function addChars(chars) {
2108
- if (!chars) {
2109
- return;
2110
- }
2111
- if (!this.chars) {
2112
- this.chars = [];
2113
- }
2114
- var i, len = chars.length;
2115
- var j, jLen = this.chars.length,
2116
- found;
2117
- for (i = 0; i < len; i += 1) {
2118
- j = 0;
2119
- found = false;
2120
- while (j < jLen) {
2121
- if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {
2122
- found = true;
2123
- }
2124
- j += 1;
2125
- }
2126
- if (!found) {
2127
- this.chars.push(chars[i]);
2128
- jLen += 1;
2129
- }
2130
- }
2131
- }
2132
-
2133
- function getCharData(char, style, font) {
2134
- var i = 0,
2135
- len = this.chars.length;
2136
- while (i < len) {
2137
- if (this.chars[i].ch === char && this.chars[i].style === style && this.chars[i].fFamily === font) {
2138
-
2139
- return this.chars[i];
2140
- }
2141
- i += 1;
2142
- }
2143
- if ((typeof char === 'string' && char.charCodeAt(0) !== 13 || !char) && console && console.warn) {
2144
- // console.warn('Missing character from exported characters list: ', char, style, font);
2145
- }
2146
- return emptyChar;
2147
- }
2148
-
2149
- function measureText(char, fontName, size) {
2150
- var fontData = this.getFontByName(fontName);
2151
- var index = char.charCodeAt(0);
2152
- if (!fontData.cache[index + 1]) {
2153
- var tHelper = fontData.helper;
2154
- //Canvas version
2155
- //fontData.cache[index] = tHelper.measureText(char).width / 100;
2156
- //SVG version
2157
- //console.log(tHelper.getBBox().width)
2158
- if (char === ' ') {
2159
- tHelper.textContent = '|' + char + '|';
2160
- var doubleSize = tHelper.getComputedTextLength();
2161
- tHelper.textContent = '||';
2162
- var singleSize = tHelper.getComputedTextLength();
2163
- fontData.cache[index + 1] = (doubleSize - singleSize) / 100;
2164
- } else {
2165
- tHelper.textContent = char;
2166
- fontData.cache[index + 1] = (tHelper.getComputedTextLength()) / 100;
2167
- }
2168
- }
2169
- return fontData.cache[index + 1] * size;
2170
- }
2171
-
2172
- function getFontByName(name) {
2173
- var i = 0,
2174
- len = this.fonts.length;
2175
- while (i < len) {
2176
- if (this.fonts[i].fName === name) {
2177
- return this.fonts[i];
2178
- }
2179
- i += 1;
2180
- }
2181
- return this.fonts[0];
2182
- }
2183
-
2184
- function getCombinedCharacterCodes() {
2185
- return combinedCharacters;
2186
- }
2187
-
2188
- function loaded() {
2189
- return this.isLoaded;
2190
- }
2191
-
2192
- var Font = function () {
2193
- this.fonts = [];
2194
- this.chars = null;
2195
- this.typekitLoaded = 0;
2196
- this.isLoaded = false;
2197
- this.initTime = Date.now();
2198
- };
2199
- //TODO: for now I'm adding these methods to the Class and not the prototype. Think of a better way to implement it.
2200
- Font.getCombinedCharacterCodes = getCombinedCharacterCodes;
2201
-
2202
- Font.prototype.addChars = addChars;
2203
- Font.prototype.addFonts = addFonts;
2204
- Font.prototype.getCharData = getCharData;
2205
- Font.prototype.getFontByName = getFontByName;
2206
- Font.prototype.measureText = measureText;
2207
- Font.prototype.checkLoadedFonts = checkLoadedFonts;
2208
- Font.prototype.loaded = loaded;
2209
-
2210
- return Font;
2211
-
2212
- }());
2213
- var PropertyFactory = (function () {
2214
-
2215
- var initFrame = initialDefaultFrame;
2216
- var math_abs = Math.abs;
2217
-
2218
- function interpolateValue(frameNum, caching) {
2219
- var offsetTime = this.offsetTime;
2220
- var newValue;
2221
- if (this.propType === 'multidimensional') {
2222
- newValue = createTypedArray('float32', this.pv.length);
2223
- }
2224
- var iterationIndex = caching.lastIndex;
2225
- var i = iterationIndex;
2226
- var len = this.keyframes.length - 1,
2227
- flag = true;
2228
- var keyData, nextKeyData;
2229
-
2230
- while (flag) {
2231
- keyData = this.keyframes[i];
2232
- nextKeyData = this.keyframes[i + 1];
2233
- if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {
2234
- if (keyData.h) {
2235
- keyData = nextKeyData;
2236
- }
2237
- iterationIndex = 0;
2238
- break;
2239
- }
2240
- if ((nextKeyData.t - offsetTime) > frameNum) {
2241
- iterationIndex = i;
2242
- break;
2243
- }
2244
- if (i < len - 1) {
2245
- i += 1;
2246
- } else {
2247
- iterationIndex = 0;
2248
- flag = false;
2249
- }
2250
- }
2251
-
2252
- var k, kLen, perc, jLen, j, fnc;
2253
- var nextKeyTime = nextKeyData.t - offsetTime;
2254
- var keyTime = keyData.t - offsetTime;
2255
- var endValue;
2256
- if (keyData.to) {
2257
- if (!keyData.bezierData) {
2258
- keyData.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);
2259
- }
2260
- var bezierData = keyData.bezierData;
2261
- if (frameNum >= nextKeyTime || frameNum < keyTime) {
2262
- var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;
2263
- kLen = bezierData.points[ind].point.length;
2264
- for (k = 0; k < kLen; k += 1) {
2265
- newValue[k] = bezierData.points[ind].point[k];
2266
- }
2267
- // caching._lastKeyframeIndex = -1;
2268
- } else {
2269
- if (keyData.__fnct) {
2270
- fnc = keyData.__fnct;
2271
- } else {
2272
- fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;
2273
- keyData.__fnct = fnc;
2274
- }
2275
- perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));
2276
- var distanceInLine = bezierData.segmentLength * perc;
2277
-
2278
- var segmentPerc;
2279
- var addedLength = (caching.lastFrame < frameNum && caching._lastKeyframeIndex === i) ? caching._lastAddedLength : 0;
2280
- j = (caching.lastFrame < frameNum && caching._lastKeyframeIndex === i) ? caching._lastPoint : 0;
2281
- flag = true;
2282
- jLen = bezierData.points.length;
2283
- while (flag) {
2284
- addedLength += bezierData.points[j].partialLength;
2285
- if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {
2286
- kLen = bezierData.points[j].point.length;
2287
- for (k = 0; k < kLen; k += 1) {
2288
- newValue[k] = bezierData.points[j].point[k];
2289
- }
2290
- break;
2291
- } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {
2292
- segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;
2293
- kLen = bezierData.points[j].point.length;
2294
- for (k = 0; k < kLen; k += 1) {
2295
- newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;
2296
- }
2297
- break;
2298
- }
2299
- if (j < jLen - 1) {
2300
- j += 1;
2301
- } else {
2302
- flag = false;
2303
- }
2304
- }
2305
- caching._lastPoint = j;
2306
- caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;
2307
- caching._lastKeyframeIndex = i;
2308
- }
2309
- } else {
2310
- var outX, outY, inX, inY, keyValue;
2311
- len = keyData.s.length;
2312
- endValue = nextKeyData.s || keyData.e;
2313
- if (this.sh && keyData.h !== 1) {
2314
- if (frameNum >= nextKeyTime) {
2315
- newValue[0] = endValue[0];
2316
- newValue[1] = endValue[1];
2317
- newValue[2] = endValue[2];
2318
- } else if (frameNum <= keyTime) {
2319
- newValue[0] = keyData.s[0];
2320
- newValue[1] = keyData.s[1];
2321
- newValue[2] = keyData.s[2];
2322
- } else {
2323
- var quatStart = createQuaternion(keyData.s);
2324
- var quatEnd = createQuaternion(endValue);
2325
- var time = (frameNum - keyTime) / (nextKeyTime - keyTime);
2326
- quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));
2327
- }
2328
-
2329
- } else {
2330
- for (i = 0; i < len; i += 1) {
2331
- if (keyData.h !== 1) {
2332
- if (frameNum >= nextKeyTime) {
2333
- perc = 1;
2334
- } else if (frameNum < keyTime) {
2335
- perc = 0;
2336
- } else {
2337
- if (keyData.o.x.constructor === Array) {
2338
- if (!keyData.__fnct) {
2339
- keyData.__fnct = [];
2340
- }
2341
- if (!keyData.__fnct[i]) {
2342
- outX = (typeof keyData.o.x[i] === 'undefined') ? keyData.o.x[0] : keyData.o.x[i];
2343
- outY = (typeof keyData.o.y[i] === 'undefined') ? keyData.o.y[0] : keyData.o.y[i];
2344
- inX = (typeof keyData.i.x[i] === 'undefined') ? keyData.i.x[0] : keyData.i.x[i];
2345
- inY = (typeof keyData.i.y[i] === 'undefined') ? keyData.i.y[0] : keyData.i.y[i];
2346
- fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;
2347
- keyData.__fnct[i] = fnc;
2348
- } else {
2349
- fnc = keyData.__fnct[i];
2350
- }
2351
- } else {
2352
- if (!keyData.__fnct) {
2353
- outX = keyData.o.x;
2354
- outY = keyData.o.y;
2355
- inX = keyData.i.x;
2356
- inY = keyData.i.y;
2357
- fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;
2358
- keyData.__fnct = fnc;
2359
- } else {
2360
- fnc = keyData.__fnct;
2361
- }
2362
- }
2363
- perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));
2364
- }
2365
- }
2366
-
2367
- endValue = nextKeyData.s || keyData.e;
2368
- keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;
2369
-
2370
- if (this.propType === 'multidimensional') {
2371
- newValue[i] = keyValue;
2372
- } else {
2373
- newValue = keyValue;
2374
- }
2375
- }
2376
- }
2377
- }
2378
- caching.lastIndex = iterationIndex;
2379
- return newValue;
2380
- }
2381
-
2382
- //based on @Toji's https://github.com/toji/gl-matrix/
2383
- function slerp(a, b, t) {
2384
- var out = [];
2385
- var ax = a[0],
2386
- ay = a[1],
2387
- az = a[2],
2388
- aw = a[3],
2389
- bx = b[0],
2390
- by = b[1],
2391
- bz = b[2],
2392
- bw = b[3]
2393
-
2394
- var omega, cosom, sinom, scale0, scale1;
2395
-
2396
- cosom = ax * bx + ay * by + az * bz + aw * bw;
2397
- if (cosom < 0.0) {
2398
- cosom = -cosom;
2399
- bx = -bx;
2400
- by = -by;
2401
- bz = -bz;
2402
- bw = -bw;
2403
- }
2404
- if ((1.0 - cosom) > 0.000001) {
2405
- omega = Math.acos(cosom);
2406
- sinom = Math.sin(omega);
2407
- scale0 = Math.sin((1.0 - t) * omega) / sinom;
2408
- scale1 = Math.sin(t * omega) / sinom;
2409
- } else {
2410
- scale0 = 1.0 - t;
2411
- scale1 = t;
2412
- }
2413
- out[0] = scale0 * ax + scale1 * bx;
2414
- out[1] = scale0 * ay + scale1 * by;
2415
- out[2] = scale0 * az + scale1 * bz;
2416
- out[3] = scale0 * aw + scale1 * bw;
2417
-
2418
- return out;
2419
- }
2420
-
2421
- function quaternionToEuler(out, quat) {
2422
- var qx = quat[0];
2423
- var qy = quat[1];
2424
- var qz = quat[2];
2425
- var qw = quat[3];
2426
- var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz)
2427
- var attitude = Math.asin(2 * qx * qy + 2 * qz * qw)
2428
- var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);
2429
- out[0] = heading / degToRads;
2430
- out[1] = attitude / degToRads;
2431
- out[2] = bank / degToRads;
2432
- }
2433
-
2434
- function createQuaternion(values) {
2435
- var heading = values[0] * degToRads;
2436
- var attitude = values[1] * degToRads;
2437
- var bank = values[2] * degToRads;
2438
- var c1 = Math.cos(heading / 2);
2439
- var c2 = Math.cos(attitude / 2);
2440
- var c3 = Math.cos(bank / 2);
2441
- var s1 = Math.sin(heading / 2);
2442
- var s2 = Math.sin(attitude / 2);
2443
- var s3 = Math.sin(bank / 2);
2444
- var w = c1 * c2 * c3 - s1 * s2 * s3;
2445
- var x = s1 * s2 * c3 + c1 * c2 * s3;
2446
- var y = s1 * c2 * c3 + c1 * s2 * s3;
2447
- var z = c1 * s2 * c3 - s1 * c2 * s3;
2448
-
2449
- return [x, y, z, w];
2450
- }
2451
-
2452
- function getValueAtCurrentTime() {
2453
- var frameNum = this.comp.renderedFrame - this.offsetTime;
2454
- var initTime = this.keyframes[0].t - this.offsetTime;
2455
- var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;
2456
- if (!(frameNum === this._caching.lastFrame || (this._caching.lastFrame !== initFrame && ((this._caching.lastFrame >= endTime && frameNum >= endTime) || (this._caching.lastFrame < initTime && frameNum < initTime))))) {
2457
- if (this._caching.lastFrame >= frameNum) {
2458
- this._caching._lastKeyframeIndex = -1;
2459
- this._caching.lastIndex = 0;
2460
- }
2461
-
2462
- var renderResult = this.interpolateValue(frameNum, this._caching);
2463
- this.pv = renderResult;
2464
- }
2465
- this._caching.lastFrame = frameNum;
2466
- return this.pv;
2467
- }
2468
-
2469
- function setVValue(val) {
2470
- var multipliedValue;
2471
- if (this.propType === 'unidimensional') {
2472
- multipliedValue = val * this.mult;
2473
- if (math_abs(this.v - multipliedValue) > 0.00001) {
2474
- this.v = multipliedValue;
2475
- this._mdf = true;
2476
- }
2477
- } else {
2478
- var i = 0,
2479
- len = this.v.length;
2480
- while (i < len) {
2481
- multipliedValue = val[i] * this.mult;
2482
- if (math_abs(this.v[i] - multipliedValue) > 0.00001) {
2483
- this.v[i] = multipliedValue;
2484
- this._mdf = true;
2485
- }
2486
- i += 1;
2487
- }
2488
- }
2489
- }
2490
-
2491
- function processEffectsSequence() {
2492
- if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {
2493
- return;
2494
- }
2495
- if (this.lock) {
2496
- this.setVValue(this.pv);
2497
- return;
2498
- }
2499
- this.lock = true;
2500
- this._mdf = this._isFirstFrame;
2501
- var multipliedValue;
2502
- var i, len = this.effectsSequence.length;
2503
- var finalValue = this.kf ? this.pv : this.data.k;
2504
- for (i = 0; i < len; i += 1) {
2505
- finalValue = this.effectsSequence[i](finalValue);
2506
- }
2507
- this.setVValue(finalValue);
2508
- this._isFirstFrame = false;
2509
- this.lock = false;
2510
- this.frameId = this.elem.globalData.frameId;
2511
- }
2512
-
2513
- function addEffect(effectFunction) {
2514
- this.effectsSequence.push(effectFunction);
2515
- this.container.addDynamicProperty(this);
2516
- }
2517
-
2518
- function ValueProperty(elem, data, mult, container) {
2519
- this.propType = 'unidimensional';
2520
- this.mult = mult || 1;
2521
- this.data = data;
2522
- this.v = mult ? data.k * mult : data.k;
2523
- this.pv = data.k;
2524
- this._mdf = false;
2525
- this.elem = elem;
2526
- this.container = container;
2527
- this.comp = elem.comp;
2528
- this.k = false;
2529
- this.kf = false;
2530
- this.vel = 0;
2531
- this.effectsSequence = [];
2532
- this._isFirstFrame = true;
2533
- this.getValue = processEffectsSequence;
2534
- this.setVValue = setVValue;
2535
- this.addEffect = addEffect;
2536
- }
2537
-
2538
- function MultiDimensionalProperty(elem, data, mult, container) {
2539
- this.propType = 'multidimensional';
2540
- this.mult = mult || 1;
2541
- this.data = data;
2542
- this._mdf = false;
2543
- this.elem = elem;
2544
- this.container = container;
2545
- this.comp = elem.comp;
2546
- this.k = false;
2547
- this.kf = false;
2548
- this.frameId = -1;
2549
- var i, len = data.k.length;
2550
- this.v = createTypedArray('float32', len);
2551
- this.pv = createTypedArray('float32', len);
2552
- var arr = createTypedArray('float32', len);
2553
- this.vel = createTypedArray('float32', len);
2554
- for (i = 0; i < len; i += 1) {
2555
- this.v[i] = data.k[i] * this.mult;
2556
- this.pv[i] = data.k[i];
2557
- }
2558
- this._isFirstFrame = true;
2559
- this.effectsSequence = [];
2560
- this.getValue = processEffectsSequence;
2561
- this.setVValue = setVValue;
2562
- this.addEffect = addEffect;
2563
- }
2564
-
2565
- function KeyframedValueProperty(elem, data, mult, container) {
2566
- this.propType = 'unidimensional';
2567
- this.keyframes = data.k;
2568
- this.offsetTime = elem.data.st;
2569
- this.frameId = -1;
2570
- this._caching = {
2571
- lastFrame: initFrame,
2572
- lastIndex: 0,
2573
- value: 0,
2574
- _lastKeyframeIndex: -1
2575
- };
2576
- this.k = true;
2577
- this.kf = true;
2578
- this.data = data;
2579
- this.mult = mult || 1;
2580
- this.elem = elem;
2581
- this.container = container;
2582
- this.comp = elem.comp;
2583
- this.v = initFrame;
2584
- this.pv = initFrame;
2585
- this._isFirstFrame = true;
2586
- this.getValue = processEffectsSequence;
2587
- this.setVValue = setVValue;
2588
- this.interpolateValue = interpolateValue;
2589
- this.effectsSequence = [getValueAtCurrentTime.bind(this)];
2590
- this.addEffect = addEffect;
2591
- }
2592
-
2593
- function KeyframedMultidimensionalProperty(elem, data, mult, container) {
2594
- this.propType = 'multidimensional';
2595
- var i, len = data.k.length;
2596
- var s, e, to, ti;
2597
- for (i = 0; i < len - 1; i += 1) {
2598
- if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {
2599
- s = data.k[i].s;
2600
- e = data.k[i + 1].s;
2601
- to = data.k[i].to;
2602
- ti = data.k[i].ti;
2603
- if ((s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1])) || (s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2]))) {
2604
- data.k[i].to = null;
2605
- data.k[i].ti = null;
2606
- }
2607
- if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {
2608
- if (s.length === 2 || (s[2] === e[2] && to[2] === 0 && ti[2] === 0)) {
2609
- data.k[i].to = null;
2610
- data.k[i].ti = null;
2611
- }
2612
- }
2613
- }
2614
- }
2615
- this.effectsSequence = [getValueAtCurrentTime.bind(this)];
2616
- this.keyframes = data.k;
2617
- this.offsetTime = elem.data.st;
2618
- this.k = true;
2619
- this.kf = true;
2620
- this._isFirstFrame = true;
2621
- this.mult = mult || 1;
2622
- this.elem = elem;
2623
- this.container = container;
2624
- this.comp = elem.comp;
2625
- this.getValue = processEffectsSequence;
2626
- this.setVValue = setVValue;
2627
- this.interpolateValue = interpolateValue;
2628
- this.frameId = -1;
2629
- var arrLen = data.k[0].s.length;
2630
- this.v = createTypedArray('float32', arrLen);
2631
- this.pv = createTypedArray('float32', arrLen);
2632
- for (i = 0; i < arrLen; i += 1) {
2633
- this.v[i] = initFrame;
2634
- this.pv[i] = initFrame;
2635
- }
2636
- this._caching = {
2637
- lastFrame: initFrame,
2638
- lastIndex: 0,
2639
- value: createTypedArray('float32', arrLen)
2640
- };
2641
- this.addEffect = addEffect;
2642
- }
2643
-
2644
- function getProp(elem, data, type, mult, container) {
2645
- var p;
2646
- if (!data.k.length) {
2647
- p = new ValueProperty(elem, data, mult, container);
2648
- } else if (typeof (data.k[0]) === 'number') {
2649
- p = new MultiDimensionalProperty(elem, data, mult, container);
2650
- } else {
2651
- switch (type) {
2652
- case 0:
2653
- p = new KeyframedValueProperty(elem, data, mult, container);
2654
- break;
2655
- case 1:
2656
- p = new KeyframedMultidimensionalProperty(elem, data, mult, container);
2657
- break;
2658
- }
2659
- }
2660
- if (p.effectsSequence.length) {
2661
- container.addDynamicProperty(p);
2662
- }
2663
- return p;
2664
- }
2665
-
2666
- var ob = {
2667
- getProp: getProp
2668
- };
2669
- return ob;
2670
- }());
2671
- var TransformPropertyFactory = (function () {
2672
-
2673
- var defaultVector = [0, 0]
2674
-
2675
- function applyToMatrix(mat) {
2676
- var _mdf = this._mdf;
2677
- this.iterateDynamicProperties();
2678
- this._mdf = this._mdf || _mdf;
2679
- if (this.a) {
2680
- mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);
2681
- }
2682
- if (this.s) {
2683
- mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);
2684
- }
2685
- if (this.sk) {
2686
- mat.skewFromAxis(-this.sk.v, this.sa.v);
2687
- }
2688
- if (this.r) {
2689
- mat.rotate(-this.r.v);
2690
- } else {
2691
- mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);
2692
- }
2693
- if (this.data.p.s) {
2694
- if (this.data.p.z) {
2695
- mat.translate(this.px.v, this.py.v, -this.pz.v);
2696
- } else {
2697
- mat.translate(this.px.v, this.py.v, 0);
2698
- }
2699
- } else {
2700
- mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);
2701
- }
2702
- }
2703
-
2704
- function processKeys(forceRender) {
2705
- if (this.elem.globalData.frameId === this.frameId) {
2706
- return;
2707
- }
2708
- if (this._isDirty) {
2709
- this.precalculateMatrix();
2710
- this._isDirty = false;
2711
- }
2712
-
2713
- this.iterateDynamicProperties();
2714
-
2715
- if (this._mdf || forceRender) {
2716
- this.v.cloneFromProps(this.pre.props);
2717
- if (this.appliedTransformations < 1) {
2718
- this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);
2719
- }
2720
- if (this.appliedTransformations < 2) {
2721
- this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);
2722
- }
2723
- if (this.sk && this.appliedTransformations < 3) {
2724
- this.v.skewFromAxis(-this.sk.v, this.sa.v);
2725
- }
2726
- if (this.r && this.appliedTransformations < 4) {
2727
- this.v.rotate(-this.r.v);
2728
- } else if (!this.r && this.appliedTransformations < 4) {
2729
- this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);
2730
- }
2731
- if (this.autoOriented) {
2732
- var v1, v2, frameRate = this.elem.globalData.frameRate;
2733
- if (this.p && this.p.keyframes && this.p.getValueAtTime) {
2734
- if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {
2735
- v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);
2736
- v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);
2737
- } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {
2738
- v1 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t / frameRate), 0);
2739
- v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);
2740
- } else {
2741
- v1 = this.p.pv;
2742
- v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);
2743
- }
2744
- } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {
2745
- v1 = [];
2746
- v2 = [];
2747
- var px = this.px,
2748
- py = this.py,
2749
- frameRate;
2750
- if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {
2751
- v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);
2752
- v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);
2753
- v2[0] = px.getValueAtTime((px.keyframes[0].t) / frameRate, 0);
2754
- v2[1] = py.getValueAtTime((py.keyframes[0].t) / frameRate, 0);
2755
- } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {
2756
- v1[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t / frameRate), 0);
2757
- v1[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t / frameRate), 0);
2758
- v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);
2759
- v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);
2760
- } else {
2761
- v1 = [px.pv, py.pv];
2762
- v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);
2763
- v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);
2764
- }
2765
- } else {
2766
- v1 = v2 = defaultVector
2767
- }
2768
- this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));
2769
- }
2770
- if (this.data.p && this.data.p.s) {
2771
- if (this.data.p.z) {
2772
- this.v.translate(this.px.v, this.py.v, -this.pz.v);
2773
- } else {
2774
- this.v.translate(this.px.v, this.py.v, 0);
2775
- }
2776
- } else {
2777
- this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);
2778
- }
2779
- }
2780
- this.frameId = this.elem.globalData.frameId;
2781
- }
2782
-
2783
- function precalculateMatrix() {
2784
- if (!this.a.k) {
2785
- this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);
2786
- this.appliedTransformations = 1;
2787
- } else {
2788
- return;
2789
- }
2790
- if (!this.s.effectsSequence.length) {
2791
- this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);
2792
- this.appliedTransformations = 2;
2793
- } else {
2794
- return;
2795
- }
2796
- if (this.sk) {
2797
- if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {
2798
- this.pre.skewFromAxis(-this.sk.v, this.sa.v);
2799
- this.appliedTransformations = 3;
2800
- } else {
2801
- return;
2802
- }
2803
- }
2804
- if (this.r) {
2805
- if (!this.r.effectsSequence.length) {
2806
- this.pre.rotate(-this.r.v);
2807
- this.appliedTransformations = 4;
2808
- } else {
2809
- return;
2810
- }
2811
- } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {
2812
- this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);
2813
- this.appliedTransformations = 4;
2814
- }
2815
- }
2816
-
2817
- function autoOrient() {
2818
- //
2819
- //var prevP = this.getValueAtTime();
2820
- }
2821
-
2822
- function addDynamicProperty(prop) {
2823
- this._addDynamicProperty(prop);
2824
- this.elem.addDynamicProperty(prop);
2825
- this._isDirty = true;
2826
- }
2827
-
2828
- function TransformProperty(elem, data, container) {
2829
- this.elem = elem;
2830
- this.frameId = -1;
2831
- this.propType = 'transform';
2832
- this.data = data;
2833
- this.v = new Matrix();
2834
- //Precalculated matrix with non animated properties
2835
- this.pre = new Matrix();
2836
- this.appliedTransformations = 0;
2837
- this.initDynamicPropertyContainer(container || elem);
2838
- if (data.p && data.p.s) {
2839
- this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);
2840
- this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);
2841
- if (data.p.z) {
2842
- this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);
2843
- }
2844
- } else {
2845
- this.p = PropertyFactory.getProp(elem, data.p || {
2846
- k: [0, 0, 0]
2847
- }, 1, 0, this);
2848
- }
2849
- if (data.rx) {
2850
- this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);
2851
- this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);
2852
- this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);
2853
- if (data.or.k[0].ti) {
2854
- var i, len = data.or.k.length;
2855
- for (i = 0; i < len; i += 1) {
2856
- data.or.k[i].to = data.or.k[i].ti = null;
2857
- }
2858
- }
2859
- this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this);
2860
- //sh Indicates it needs to be capped between -180 and 180
2861
- this.or.sh = true;
2862
- } else {
2863
- this.r = PropertyFactory.getProp(elem, data.r || {
2864
- k: 0
2865
- }, 0, degToRads, this);
2866
- }
2867
- if (data.sk) {
2868
- this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);
2869
- this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);
2870
- }
2871
- this.a = PropertyFactory.getProp(elem, data.a || {
2872
- k: [0, 0, 0]
2873
- }, 1, 0, this);
2874
- this.s = PropertyFactory.getProp(elem, data.s || {
2875
- k: [100, 100, 100]
2876
- }, 1, 0.01, this);
2877
- // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.
2878
- if (data.o) {
2879
- this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);
2880
- } else {
2881
- this.o = {
2882
- _mdf: false,
2883
- v: 1
2884
- };
2885
- }
2886
- this._isDirty = true;
2887
- if (!this.dynamicProperties.length) {
2888
- this.getValue(true);
2889
- }
2890
- }
2891
-
2892
- TransformProperty.prototype = {
2893
- applyToMatrix: applyToMatrix,
2894
- getValue: processKeys,
2895
- precalculateMatrix: precalculateMatrix,
2896
- autoOrient: autoOrient
2897
- }
2898
-
2899
- extendPrototype([DynamicPropertyContainer], TransformProperty);
2900
- TransformProperty.prototype.addDynamicProperty = addDynamicProperty;
2901
- TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;
2902
-
2903
- function getTransformProperty(elem, data, container) {
2904
- return new TransformProperty(elem, data, container);
2905
- }
2906
-
2907
- return {
2908
- getTransformProperty: getTransformProperty
2909
- };
2910
-
2911
- }());
2912
-
2913
- function ShapePath() {
2914
- this.c = false;
2915
- this._length = 0;
2916
- this._maxLength = 8;
2917
- this.v = createSizedArray(this._maxLength);
2918
- this.o = createSizedArray(this._maxLength);
2919
- this.i = createSizedArray(this._maxLength);
2920
- }
2921
-
2922
- ShapePath.prototype.setPathData = function (closed, len) {
2923
- this.c = closed;
2924
- this.setLength(len);
2925
- var i = 0;
2926
- while (i < len) {
2927
- this.v[i] = point_pool.newElement();
2928
- this.o[i] = point_pool.newElement();
2929
- this.i[i] = point_pool.newElement();
2930
- i += 1;
2931
- }
2932
- };
2933
-
2934
- ShapePath.prototype.setLength = function (len) {
2935
- while (this._maxLength < len) {
2936
- this.doubleArrayLength();
2937
- }
2938
- this._length = len;
2939
- };
2940
-
2941
- ShapePath.prototype.doubleArrayLength = function () {
2942
- this.v = this.v.concat(createSizedArray(this._maxLength));
2943
- this.i = this.i.concat(createSizedArray(this._maxLength));
2944
- this.o = this.o.concat(createSizedArray(this._maxLength));
2945
- this._maxLength *= 2;
2946
- };
2947
-
2948
- ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {
2949
- var arr;
2950
- this._length = Math.max(this._length, pos + 1);
2951
- if (this._length >= this._maxLength) {
2952
- this.doubleArrayLength();
2953
- }
2954
- switch (type) {
2955
- case 'v':
2956
- arr = this.v;
2957
- break;
2958
- case 'i':
2959
- arr = this.i;
2960
- break;
2961
- case 'o':
2962
- arr = this.o;
2963
- break;
2964
- }
2965
- if (!arr[pos] || (arr[pos] && !replace)) {
2966
- arr[pos] = point_pool.newElement();
2967
- }
2968
- arr[pos][0] = x;
2969
- arr[pos][1] = y;
2970
- };
2971
-
2972
- ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {
2973
- this.setXYAt(vX, vY, 'v', pos, replace);
2974
- this.setXYAt(oX, oY, 'o', pos, replace);
2975
- this.setXYAt(iX, iY, 'i', pos, replace);
2976
- };
2977
-
2978
- ShapePath.prototype.reverse = function () {
2979
- var newPath = new ShapePath();
2980
- newPath.setPathData(this.c, this._length);
2981
- var vertices = this.v,
2982
- outPoints = this.o,
2983
- inPoints = this.i;
2984
- var init = 0;
2985
- if (this.c) {
2986
- newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);
2987
- init = 1;
2988
- }
2989
- var cnt = this._length - 1;
2990
- var len = this._length;
2991
-
2992
- var i;
2993
- for (i = init; i < len; i += 1) {
2994
- newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);
2995
- cnt -= 1;
2996
- }
2997
- return newPath;
2998
- };
2999
- var ShapePropertyFactory = (function () {
3000
-
3001
- var initFrame = -999999;
3002
-
3003
- function interpolateShape(frameNum, previousValue, caching) {
3004
- var iterationIndex = caching.lastIndex;
3005
- var keyPropS, keyPropE, isHold, j, k, jLen, kLen, perc, vertexValue;
3006
- var kf = this.keyframes;
3007
- if (frameNum < kf[0].t - this.offsetTime) {
3008
- keyPropS = kf[0].s[0];
3009
- isHold = true;
3010
- iterationIndex = 0;
3011
- } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {
3012
- keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];
3013
- /*if(kf[kf.length - 1].s){
3014
- keyPropS = kf[kf.length - 1].s[0];
3015
- }else{
3016
- keyPropS = kf[kf.length - 2].e[0];
3017
- }*/
3018
- isHold = true;
3019
- } else {
3020
- var i = iterationIndex;
3021
- var len = kf.length - 1,
3022
- flag = true,
3023
- keyData, nextKeyData;
3024
- while (flag) {
3025
- keyData = kf[i];
3026
- nextKeyData = kf[i + 1];
3027
- if ((nextKeyData.t - this.offsetTime) > frameNum) {
3028
- break;
3029
- }
3030
- if (i < len - 1) {
3031
- i += 1;
3032
- } else {
3033
- flag = false;
3034
- }
3035
- }
3036
- isHold = keyData.h === 1;
3037
- iterationIndex = i;
3038
- if (!isHold) {
3039
- if (frameNum >= nextKeyData.t - this.offsetTime) {
3040
- perc = 1;
3041
- } else if (frameNum < keyData.t - this.offsetTime) {
3042
- perc = 0;
3043
- } else {
3044
- var fnc;
3045
- if (keyData.__fnct) {
3046
- fnc = keyData.__fnct;
3047
- } else {
3048
- fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;
3049
- keyData.__fnct = fnc;
3050
- }
3051
- perc = fnc((frameNum - (keyData.t - this.offsetTime)) / ((nextKeyData.t - this.offsetTime) - (keyData.t - this.offsetTime)));
3052
- }
3053
- keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];
3054
- }
3055
- keyPropS = keyData.s[0];
3056
- }
3057
- jLen = previousValue._length;
3058
- kLen = keyPropS.i[0].length;
3059
- caching.lastIndex = iterationIndex;
3060
-
3061
- for (j = 0; j < jLen; j += 1) {
3062
- for (k = 0; k < kLen; k += 1) {
3063
- vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;
3064
- previousValue.i[j][k] = vertexValue;
3065
- vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;
3066
- previousValue.o[j][k] = vertexValue;
3067
- vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;
3068
- previousValue.v[j][k] = vertexValue;
3069
- }
3070
- }
3071
- }
3072
-
3073
- function interpolateShapeCurrentTime() {
3074
- var frameNum = this.comp.renderedFrame - this.offsetTime;
3075
- var initTime = this.keyframes[0].t - this.offsetTime;
3076
- var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;
3077
- var lastFrame = this._caching.lastFrame;
3078
- if (!(lastFrame !== initFrame && ((lastFrame < initTime && frameNum < initTime) || (lastFrame > endTime && frameNum > endTime)))) {
3079
- ////
3080
- this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;
3081
- this.interpolateShape(frameNum, this.pv, this._caching);
3082
- ////
3083
- }
3084
- this._caching.lastFrame = frameNum;
3085
- return this.pv;
3086
- }
3087
-
3088
- function resetShape() {
3089
- this.paths = this.localShapeCollection;
3090
- }
3091
-
3092
- function shapesEqual(shape1, shape2) {
3093
- if (shape1._length !== shape2._length || shape1.c !== shape2.c) {
3094
- return false;
3095
- }
3096
- var i, len = shape1._length;
3097
- for (i = 0; i < len; i += 1) {
3098
- if (shape1.v[i][0] !== shape2.v[i][0] ||
3099
- shape1.v[i][1] !== shape2.v[i][1] ||
3100
- shape1.o[i][0] !== shape2.o[i][0] ||
3101
- shape1.o[i][1] !== shape2.o[i][1] ||
3102
- shape1.i[i][0] !== shape2.i[i][0] ||
3103
- shape1.i[i][1] !== shape2.i[i][1]) {
3104
- return false;
3105
- }
3106
- }
3107
- return true;
3108
- }
3109
-
3110
- function setVValue(newPath) {
3111
- if (!shapesEqual(this.v, newPath)) {
3112
- this.v = shape_pool.clone(newPath);
3113
- this.localShapeCollection.releaseShapes();
3114
- this.localShapeCollection.addShape(this.v);
3115
- this._mdf = true;
3116
- this.paths = this.localShapeCollection;
3117
- }
3118
- }
3119
-
3120
- function processEffectsSequence() {
3121
- if (this.elem.globalData.frameId === this.frameId) {
3122
- return;
3123
- } else if (!this.effectsSequence.length) {
3124
- this._mdf = false;
3125
- return;
3126
- }
3127
- if (this.lock) {
3128
- this.setVValue(this.pv);
3129
- return;
3130
- }
3131
- this.lock = true;
3132
- this._mdf = false;
3133
- var finalValue = this.kf ? this.pv : this.data.ks ? this.data.ks.k : this.data.pt.k;
3134
- var i, len = this.effectsSequence.length;
3135
- for (i = 0; i < len; i += 1) {
3136
- finalValue = this.effectsSequence[i](finalValue);
3137
- }
3138
- this.setVValue(finalValue);
3139
- this.lock = false;
3140
- this.frameId = this.elem.globalData.frameId;
3141
- };
3142
-
3143
- function ShapeProperty(elem, data, type) {
3144
- this.propType = 'shape';
3145
- this.comp = elem.comp;
3146
- this.container = elem;
3147
- this.elem = elem;
3148
- this.data = data;
3149
- this.k = false;
3150
- this.kf = false;
3151
- this._mdf = false;
3152
- var pathData = type === 3 ? data.pt.k : data.ks.k;
3153
- this.v = shape_pool.clone(pathData);
3154
- this.pv = shape_pool.clone(this.v);
3155
- this.localShapeCollection = shapeCollection_pool.newShapeCollection();
3156
- this.paths = this.localShapeCollection;
3157
- this.paths.addShape(this.v);
3158
- this.reset = resetShape;
3159
- this.effectsSequence = [];
3160
- }
3161
-
3162
- function addEffect(effectFunction) {
3163
- this.effectsSequence.push(effectFunction);
3164
- this.container.addDynamicProperty(this);
3165
- }
3166
-
3167
- ShapeProperty.prototype.interpolateShape = interpolateShape;
3168
- ShapeProperty.prototype.getValue = processEffectsSequence;
3169
- ShapeProperty.prototype.setVValue = setVValue;
3170
- ShapeProperty.prototype.addEffect = addEffect;
3171
-
3172
- function KeyframedShapeProperty(elem, data, type) {
3173
- this.propType = 'shape';
3174
- this.comp = elem.comp;
3175
- this.elem = elem;
3176
- this.container = elem;
3177
- this.offsetTime = elem.data.st;
3178
- this.keyframes = type === 3 ? data.pt.k : data.ks.k;
3179
- this.k = true;
3180
- this.kf = true;
3181
- var i, len = this.keyframes[0].s[0].i.length;
3182
- var jLen = this.keyframes[0].s[0].i[0].length;
3183
- this.v = shape_pool.newElement();
3184
- this.v.setPathData(this.keyframes[0].s[0].c, len);
3185
- this.pv = shape_pool.clone(this.v);
3186
- this.localShapeCollection = shapeCollection_pool.newShapeCollection();
3187
- this.paths = this.localShapeCollection;
3188
- this.paths.addShape(this.v);
3189
- this.lastFrame = initFrame;
3190
- this.reset = resetShape;
3191
- this._caching = {
3192
- lastFrame: initFrame,
3193
- lastIndex: 0
3194
- };
3195
- this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];
3196
- }
3197
- KeyframedShapeProperty.prototype.getValue = processEffectsSequence;
3198
- KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;
3199
- KeyframedShapeProperty.prototype.setVValue = setVValue;
3200
- KeyframedShapeProperty.prototype.addEffect = addEffect;
3201
-
3202
- var EllShapeProperty = (function () {
3203
-
3204
- var cPoint = roundCorner;
3205
-
3206
- function EllShapeProperty(elem, data) {
3207
- /*this.v = {
3208
- v: createSizedArray(4),
3209
- i: createSizedArray(4),
3210
- o: createSizedArray(4),
3211
- c: true
3212
- };*/
3213
- this.v = shape_pool.newElement();
3214
- this.v.setPathData(true, 4);
3215
- this.localShapeCollection = shapeCollection_pool.newShapeCollection();
3216
- this.paths = this.localShapeCollection;
3217
- this.localShapeCollection.addShape(this.v);
3218
- this.d = data.d;
3219
- this.elem = elem;
3220
- this.comp = elem.comp;
3221
- this.frameId = -1;
3222
- this.initDynamicPropertyContainer(elem);
3223
- this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);
3224
- this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);
3225
- if (this.dynamicProperties.length) {
3226
- this.k = true;
3227
- } else {
3228
- this.k = false;
3229
- this.convertEllToPath();
3230
- }
3231
- };
3232
-
3233
- EllShapeProperty.prototype = {
3234
- reset: resetShape,
3235
- getValue: function () {
3236
- if (this.elem.globalData.frameId === this.frameId) {
3237
- return;
3238
- }
3239
- this.frameId = this.elem.globalData.frameId;
3240
- this.iterateDynamicProperties();
3241
-
3242
- if (this._mdf) {
3243
- this.convertEllToPath();
3244
- }
3245
- },
3246
- convertEllToPath: function () {
3247
- var p0 = this.p.v[0],
3248
- p1 = this.p.v[1],
3249
- s0 = this.s.v[0] / 2,
3250
- s1 = this.s.v[1] / 2;
3251
- var _cw = this.d !== 3;
3252
- var _v = this.v;
3253
- _v.v[0][0] = p0;
3254
- _v.v[0][1] = p1 - s1;
3255
- _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;
3256
- _v.v[1][1] = p1;
3257
- _v.v[2][0] = p0;
3258
- _v.v[2][1] = p1 + s1;
3259
- _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;
3260
- _v.v[3][1] = p1;
3261
- _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;
3262
- _v.i[0][1] = p1 - s1;
3263
- _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;
3264
- _v.i[1][1] = p1 - s1 * cPoint;
3265
- _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;
3266
- _v.i[2][1] = p1 + s1;
3267
- _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;
3268
- _v.i[3][1] = p1 + s1 * cPoint;
3269
- _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;
3270
- _v.o[0][1] = p1 - s1;
3271
- _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;
3272
- _v.o[1][1] = p1 + s1 * cPoint;
3273
- _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;
3274
- _v.o[2][1] = p1 + s1;
3275
- _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;
3276
- _v.o[3][1] = p1 - s1 * cPoint;
3277
- }
3278
- }
3279
-
3280
- extendPrototype([DynamicPropertyContainer], EllShapeProperty);
3281
-
3282
- return EllShapeProperty;
3283
- }());
3284
-
3285
- var StarShapeProperty = (function () {
3286
-
3287
- function StarShapeProperty(elem, data) {
3288
- this.v = shape_pool.newElement();
3289
- this.v.setPathData(true, 0);
3290
- this.elem = elem;
3291
- this.comp = elem.comp;
3292
- this.data = data;
3293
- this.frameId = -1;
3294
- this.d = data.d;
3295
- this.initDynamicPropertyContainer(elem);
3296
- if (data.sy === 1) {
3297
- this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);
3298
- this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);
3299
- this.convertToPath = this.convertStarToPath;
3300
- } else {
3301
- this.convertToPath = this.convertPolygonToPath;
3302
- }
3303
- this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);
3304
- this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);
3305
- this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);
3306
- this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);
3307
- this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);
3308
- this.localShapeCollection = shapeCollection_pool.newShapeCollection();
3309
- this.localShapeCollection.addShape(this.v);
3310
- this.paths = this.localShapeCollection;
3311
- if (this.dynamicProperties.length) {
3312
- this.k = true;
3313
- } else {
3314
- this.k = false;
3315
- this.convertToPath();
3316
- }
3317
- };
3318
-
3319
- StarShapeProperty.prototype = {
3320
- reset: resetShape,
3321
- getValue: function () {
3322
- if (this.elem.globalData.frameId === this.frameId) {
3323
- return;
3324
- }
3325
- this.frameId = this.elem.globalData.frameId;
3326
- this.iterateDynamicProperties();
3327
- if (this._mdf) {
3328
- this.convertToPath();
3329
- }
3330
- },
3331
- convertStarToPath: function () {
3332
- var numPts = Math.floor(this.pt.v) * 2;
3333
- var angle = Math.PI * 2 / numPts;
3334
- /*this.v.v.length = numPts;
3335
- this.v.i.length = numPts;
3336
- this.v.o.length = numPts;*/
3337
- var longFlag = true;
3338
- var longRad = this.or.v;
3339
- var shortRad = this.ir.v;
3340
- var longRound = this.os.v;
3341
- var shortRound = this.is.v;
3342
- var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2);
3343
- var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2);
3344
- var i, rad, roundness, perimSegment, currentAng = -Math.PI / 2;
3345
- currentAng += this.r.v;
3346
- var dir = this.data.d === 3 ? -1 : 1;
3347
- this.v._length = 0;
3348
- for (i = 0; i < numPts; i += 1) {
3349
- rad = longFlag ? longRad : shortRad;
3350
- roundness = longFlag ? longRound : shortRound;
3351
- perimSegment = longFlag ? longPerimSegment : shortPerimSegment;
3352
- var x = rad * Math.cos(currentAng);
3353
- var y = rad * Math.sin(currentAng);
3354
- var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);
3355
- var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);
3356
- x += +this.p.v[0];
3357
- y += +this.p.v[1];
3358
- this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);
3359
-
3360
- /*this.v.v[i] = [x,y];
3361
- this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];
3362
- this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];
3363
- this.v._length = numPts;*/
3364
- longFlag = !longFlag;
3365
- currentAng += angle * dir;
3366
- }
3367
- },
3368
- convertPolygonToPath: function () {
3369
- var numPts = Math.floor(this.pt.v);
3370
- var angle = Math.PI * 2 / numPts;
3371
- var rad = this.or.v;
3372
- var roundness = this.os.v;
3373
- var perimSegment = 2 * Math.PI * rad / (numPts * 4);
3374
- var i, currentAng = -Math.PI / 2;
3375
- var dir = this.data.d === 3 ? -1 : 1;
3376
- currentAng += this.r.v;
3377
- this.v._length = 0;
3378
- for (i = 0; i < numPts; i += 1) {
3379
- var x = rad * Math.cos(currentAng);
3380
- var y = rad * Math.sin(currentAng);
3381
- var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);
3382
- var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);
3383
- x += +this.p.v[0];
3384
- y += +this.p.v[1];
3385
- this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);
3386
- currentAng += angle * dir;
3387
- }
3388
- this.paths.length = 0;
3389
- this.paths[0] = this.v;
3390
- }
3391
-
3392
- }
3393
- extendPrototype([DynamicPropertyContainer], StarShapeProperty);
3394
-
3395
- return StarShapeProperty;
3396
- }());
3397
-
3398
- var RectShapeProperty = (function () {
3399
-
3400
- function RectShapeProperty(elem, data) {
3401
- this.v = shape_pool.newElement();
3402
- this.v.c = true;
3403
- this.localShapeCollection = shapeCollection_pool.newShapeCollection();
3404
- this.localShapeCollection.addShape(this.v);
3405
- this.paths = this.localShapeCollection;
3406
- this.elem = elem;
3407
- this.comp = elem.comp;
3408
- this.frameId = -1;
3409
- this.d = data.d;
3410
- this.initDynamicPropertyContainer(elem);
3411
- this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);
3412
- this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);
3413
- this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);
3414
- if (this.dynamicProperties.length) {
3415
- this.k = true;
3416
- } else {
3417
- this.k = false;
3418
- this.convertRectToPath();
3419
- }
3420
- };
3421
-
3422
- RectShapeProperty.prototype = {
3423
- convertRectToPath: function () {
3424
- var p0 = this.p.v[0],
3425
- p1 = this.p.v[1],
3426
- v0 = this.s.v[0] / 2,
3427
- v1 = this.s.v[1] / 2;
3428
- var round = bm_min(v0, v1, this.r.v);
3429
- var cPoint = round * (1 - roundCorner);
3430
- this.v._length = 0;
3431
-
3432
- if (this.d === 2 || this.d === 1) {
3433
- this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);
3434
- this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);
3435
- if (round !== 0) {
3436
- this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);
3437
- this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);
3438
- this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);
3439
- this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);
3440
- this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);
3441
- this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);
3442
- } else {
3443
- this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);
3444
- this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);
3445
- }
3446
- } else {
3447
- this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);
3448
- if (round !== 0) {
3449
- this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);
3450
- this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);
3451
- this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);
3452
- this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);
3453
- this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);
3454
- this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);
3455
- this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);
3456
- } else {
3457
- this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);
3458
- this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);
3459
- this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);
3460
-
3461
- }
3462
- }
3463
- },
3464
- getValue: function (frameNum) {
3465
- if (this.elem.globalData.frameId === this.frameId) {
3466
- return;
3467
- }
3468
- this.frameId = this.elem.globalData.frameId;
3469
- this.iterateDynamicProperties();
3470
- if (this._mdf) {
3471
- this.convertRectToPath();
3472
- }
3473
-
3474
- },
3475
- reset: resetShape
3476
- }
3477
- extendPrototype([DynamicPropertyContainer], RectShapeProperty);
3478
-
3479
- return RectShapeProperty;
3480
- }());
3481
-
3482
- function getShapeProp(elem, data, type) {
3483
- var prop;
3484
- if (type === 3 || type === 4) {
3485
- var dataProp = type === 3 ? data.pt : data.ks;
3486
- var keys = dataProp.k;
3487
- if (keys.length) {
3488
- prop = new KeyframedShapeProperty(elem, data, type);
3489
- } else {
3490
- prop = new ShapeProperty(elem, data, type);
3491
- }
3492
- } else if (type === 5) {
3493
- prop = new RectShapeProperty(elem, data);
3494
- } else if (type === 6) {
3495
- prop = new EllShapeProperty(elem, data);
3496
- } else if (type === 7) {
3497
- prop = new StarShapeProperty(elem, data);
3498
- }
3499
- if (prop.k) {
3500
- elem.addDynamicProperty(prop);
3501
- }
3502
- return prop;
3503
- }
3504
-
3505
- function getConstructorFunction() {
3506
- return ShapeProperty;
3507
- }
3508
-
3509
- function getKeyframedConstructorFunction() {
3510
- return KeyframedShapeProperty;
3511
- }
3512
-
3513
- var ob = {};
3514
- ob.getShapeProp = getShapeProp;
3515
- ob.getConstructorFunction = getConstructorFunction;
3516
- ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;
3517
- return ob;
3518
- }());
3519
- var ShapeModifiers = (function () {
3520
- var ob = {};
3521
- var modifiers = {};
3522
- ob.registerModifier = registerModifier;
3523
- ob.getModifier = getModifier;
3524
-
3525
- function registerModifier(nm, factory) {
3526
- if (!modifiers[nm]) {
3527
- modifiers[nm] = factory;
3528
- }
3529
- }
3530
-
3531
- function getModifier(nm, elem, data) {
3532
- return new modifiers[nm](elem, data);
3533
- }
3534
-
3535
- return ob;
3536
- }());
3537
-
3538
- function ShapeModifier() { }
3539
- ShapeModifier.prototype.initModifierProperties = function () { };
3540
- ShapeModifier.prototype.addShapeToModifier = function () { };
3541
- ShapeModifier.prototype.addShape = function (data) {
3542
- if (!this.closed) {
3543
- // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.
3544
- data.sh.container.addDynamicProperty(data.sh);
3545
- var shapeData = {
3546
- shape: data.sh,
3547
- data: data,
3548
- localShapeCollection: shapeCollection_pool.newShapeCollection()
3549
- };
3550
- this.shapes.push(shapeData);
3551
- this.addShapeToModifier(shapeData);
3552
- if (this._isAnimated) {
3553
- data.setAsAnimated();
3554
- }
3555
- }
3556
- };
3557
- ShapeModifier.prototype.init = function (elem, data) {
3558
- this.shapes = [];
3559
- this.elem = elem;
3560
- this.initDynamicPropertyContainer(elem);
3561
- this.initModifierProperties(elem, data);
3562
- this.frameId = initialDefaultFrame;
3563
- this.closed = false;
3564
- this.k = false;
3565
- if (this.dynamicProperties.length) {
3566
- this.k = true;
3567
- } else {
3568
- this.getValue(true);
3569
- }
3570
- };
3571
- ShapeModifier.prototype.processKeys = function () {
3572
- if (this.elem.globalData.frameId === this.frameId) {
3573
- return;
3574
- }
3575
- this.frameId = this.elem.globalData.frameId;
3576
- this.iterateDynamicProperties();
3577
- };
3578
-
3579
- extendPrototype([DynamicPropertyContainer], ShapeModifier);
3580
-
3581
- function TrimModifier() { }
3582
- extendPrototype([ShapeModifier], TrimModifier);
3583
- TrimModifier.prototype.initModifierProperties = function (elem, data) {
3584
- this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);
3585
- this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);
3586
- this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);
3587
- this.sValue = 0;
3588
- this.eValue = 0;
3589
- this.getValue = this.processKeys;
3590
- this.m = data.m;
3591
- this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;
3592
- };
3593
-
3594
- TrimModifier.prototype.addShapeToModifier = function (shapeData) {
3595
- shapeData.pathsData = [];
3596
- };
3597
-
3598
- TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {
3599
- var segments = [];
3600
- if (e <= 1) {
3601
- segments.push({
3602
- s: s,
3603
- e: e
3604
- });
3605
- } else if (s >= 1) {
3606
- segments.push({
3607
- s: s - 1,
3608
- e: e - 1
3609
- });
3610
- } else {
3611
- segments.push({
3612
- s: s,
3613
- e: 1
3614
- });
3615
- segments.push({
3616
- s: 0,
3617
- e: e - 1
3618
- });
3619
- }
3620
- var shapeSegments = [];
3621
- var i, len = segments.length,
3622
- segmentOb;
3623
- for (i = 0; i < len; i += 1) {
3624
- segmentOb = segments[i];
3625
- if (segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength) {
3626
-
3627
- } else {
3628
- var shapeS, shapeE;
3629
- if (segmentOb.s * totalModifierLength <= addedLength) {
3630
- shapeS = 0;
3631
- } else {
3632
- shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;
3633
- }
3634
- if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {
3635
- shapeE = 1;
3636
- } else {
3637
- shapeE = ((segmentOb.e * totalModifierLength - addedLength) / shapeLength);
3638
- }
3639
- shapeSegments.push([shapeS, shapeE]);
3640
- }
3641
- }
3642
- if (!shapeSegments.length) {
3643
- shapeSegments.push([0, 0]);
3644
- }
3645
- return shapeSegments;
3646
- };
3647
-
3648
- TrimModifier.prototype.releasePathsData = function (pathsData) {
3649
- var i, len = pathsData.length;
3650
- for (i = 0; i < len; i += 1) {
3651
- segments_length_pool.release(pathsData[i]);
3652
- }
3653
- pathsData.length = 0;
3654
- return pathsData;
3655
- };
3656
-
3657
- TrimModifier.prototype.processShapes = function (_isFirstFrame) {
3658
- var s, e;
3659
- if (this._mdf || _isFirstFrame) {
3660
- var o = (this.o.v % 360) / 360;
3661
- if (o < 0) {
3662
- o += 1;
3663
- }
3664
- s = (this.s.v > 1 ? 1 : this.s.v < 0 ? 0 : this.s.v) + o;
3665
- e = (this.e.v > 1 ? 1 : this.e.v < 0 ? 0 : this.e.v) + o;
3666
- if (s === e) {
3667
-
3668
- }
3669
- if (s > e) {
3670
- var _s = s;
3671
- s = e;
3672
- e = _s;
3673
- }
3674
- s = Math.round(s * 10000) * 0.0001;
3675
- e = Math.round(e * 10000) * 0.0001;
3676
- this.sValue = s;
3677
- this.eValue = e;
3678
- } else {
3679
- s = this.sValue;
3680
- e = this.eValue;
3681
- }
3682
- var shapePaths;
3683
- var i, len = this.shapes.length,
3684
- j, jLen;
3685
- var pathsData, pathData, totalShapeLength, totalModifierLength = 0;
3686
-
3687
- if (e === s) {
3688
- for (i = 0; i < len; i += 1) {
3689
- this.shapes[i].localShapeCollection.releaseShapes();
3690
- this.shapes[i].shape._mdf = true;
3691
- this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;
3692
- }
3693
- } else if (!((e === 1 && s === 0) || (e === 0 && s === 1))) {
3694
- var segments = [],
3695
- shapeData, localShapeCollection;
3696
- for (i = 0; i < len; i += 1) {
3697
- shapeData = this.shapes[i];
3698
- // if shape hasn't changed and trim properties haven't changed, cached previous path can be used
3699
- if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {
3700
- shapeData.shape.paths = shapeData.localShapeCollection;
3701
- } else {
3702
- shapePaths = shapeData.shape.paths;
3703
- jLen = shapePaths._length;
3704
- totalShapeLength = 0;
3705
- if (!shapeData.shape._mdf && shapeData.pathsData.length) {
3706
- totalShapeLength = shapeData.totalShapeLength;
3707
- } else {
3708
- pathsData = this.releasePathsData(shapeData.pathsData);
3709
- for (j = 0; j < jLen; j += 1) {
3710
- pathData = bez.getSegmentsLength(shapePaths.shapes[j]);
3711
- pathsData.push(pathData);
3712
- totalShapeLength += pathData.totalLength;
3713
- }
3714
- shapeData.totalShapeLength = totalShapeLength;
3715
- shapeData.pathsData = pathsData;
3716
- }
3717
-
3718
- totalModifierLength += totalShapeLength;
3719
- shapeData.shape._mdf = true;
3720
- }
3721
- }
3722
- var shapeS = s,
3723
- shapeE = e,
3724
- addedLength = 0,
3725
- edges;
3726
- for (i = len - 1; i >= 0; i -= 1) {
3727
- shapeData = this.shapes[i];
3728
- if (shapeData.shape._mdf) {
3729
- localShapeCollection = shapeData.localShapeCollection;
3730
- localShapeCollection.releaseShapes();
3731
- //if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group
3732
- if (this.m === 2 && len > 1) {
3733
- edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);
3734
- addedLength += shapeData.totalShapeLength;
3735
- } else {
3736
- edges = [
3737
- [shapeS, shapeE]
3738
- ];
3739
- }
3740
- jLen = edges.length;
3741
- for (j = 0; j < jLen; j += 1) {
3742
- shapeS = edges[j][0];
3743
- shapeE = edges[j][1];
3744
- segments.length = 0;
3745
- if (shapeE <= 1) {
3746
- segments.push({
3747
- s: shapeData.totalShapeLength * shapeS,
3748
- e: shapeData.totalShapeLength * shapeE
3749
- });
3750
- } else if (shapeS >= 1) {
3751
- segments.push({
3752
- s: shapeData.totalShapeLength * (shapeS - 1),
3753
- e: shapeData.totalShapeLength * (shapeE - 1)
3754
- });
3755
- } else {
3756
- segments.push({
3757
- s: shapeData.totalShapeLength * shapeS,
3758
- e: shapeData.totalShapeLength
3759
- });
3760
- segments.push({
3761
- s: 0,
3762
- e: shapeData.totalShapeLength * (shapeE - 1)
3763
- });
3764
- }
3765
- var newShapesData = this.addShapes(shapeData, segments[0]);
3766
- if (segments[0].s !== segments[0].e) {
3767
- if (segments.length > 1) {
3768
- var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];
3769
- if (lastShapeInCollection.c) {
3770
- var lastShape = newShapesData.pop();
3771
- this.addPaths(newShapesData, localShapeCollection);
3772
- newShapesData = this.addShapes(shapeData, segments[1], lastShape);
3773
- } else {
3774
- this.addPaths(newShapesData, localShapeCollection);
3775
- newShapesData = this.addShapes(shapeData, segments[1]);
3776
- }
3777
- }
3778
- this.addPaths(newShapesData, localShapeCollection);
3779
- }
3780
-
3781
- }
3782
- shapeData.shape.paths = localShapeCollection;
3783
- }
3784
- }
3785
- } else if (this._mdf) {
3786
- for (i = 0; i < len; i += 1) {
3787
- //Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.
3788
- //Don't remove this even if it's losing cached info.
3789
- this.shapes[i].pathsData.length = 0;
3790
- this.shapes[i].shape._mdf = true;
3791
- }
3792
- }
3793
- };
3794
-
3795
- TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {
3796
- var i, len = newPaths.length;
3797
- for (i = 0; i < len; i += 1) {
3798
- localShapeCollection.addShape(newPaths[i]);
3799
- }
3800
- };
3801
-
3802
- TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {
3803
- shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);
3804
- shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);
3805
- if (newShape) {
3806
- shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);
3807
- }
3808
- shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);
3809
- };
3810
-
3811
- TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {
3812
- shapePath.setXYAt(points[1], points[5], 'o', pos);
3813
- shapePath.setXYAt(points[2], points[6], 'i', pos + 1);
3814
- if (newShape) {
3815
- shapePath.setXYAt(points[0], points[4], 'v', pos);
3816
- }
3817
- shapePath.setXYAt(points[3], points[7], 'v', pos + 1);
3818
- };
3819
-
3820
- TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {
3821
- var pathsData = shapeData.pathsData;
3822
- var shapePaths = shapeData.shape.paths.shapes;
3823
- var i, len = shapeData.shape.paths._length,
3824
- j, jLen;
3825
- var addedLength = 0;
3826
- var currentLengthData, segmentCount;
3827
- var lengths;
3828
- var segment;
3829
- var shapes = [];
3830
- var initPos;
3831
- var newShape = true;
3832
- if (!shapePath) {
3833
- shapePath = shape_pool.newElement();
3834
- segmentCount = 0;
3835
- initPos = 0;
3836
- } else {
3837
- segmentCount = shapePath._length;
3838
- initPos = shapePath._length;
3839
- }
3840
- shapes.push(shapePath);
3841
- for (i = 0; i < len; i += 1) {
3842
- lengths = pathsData[i].lengths;
3843
- shapePath.c = shapePaths[i].c;
3844
- jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;
3845
- for (j = 1; j < jLen; j += 1) {
3846
- currentLengthData = lengths[j - 1];
3847
- if (addedLength + currentLengthData.addedLength < shapeSegment.s) {
3848
- addedLength += currentLengthData.addedLength;
3849
- shapePath.c = false;
3850
- } else if (addedLength > shapeSegment.e) {
3851
- shapePath.c = false;
3852
- break;
3853
- } else {
3854
- if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {
3855
- this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);
3856
- newShape = false;
3857
- } else {
3858
- segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);
3859
- this.addSegmentFromArray(segment, shapePath, segmentCount, newShape);
3860
- // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);
3861
- newShape = false;
3862
- shapePath.c = false;
3863
- }
3864
- addedLength += currentLengthData.addedLength;
3865
- segmentCount += 1;
3866
- }
3867
- }
3868
- if (shapePaths[i].c && lengths.length) {
3869
- currentLengthData = lengths[j - 1];
3870
- if (addedLength <= shapeSegment.e) {
3871
- var segmentLength = lengths[j - 1].addedLength;
3872
- if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {
3873
- this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);
3874
- newShape = false;
3875
- } else {
3876
- segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);
3877
- this.addSegmentFromArray(segment, shapePath, segmentCount, newShape);
3878
- // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);
3879
- newShape = false;
3880
- shapePath.c = false;
3881
- }
3882
- } else {
3883
- shapePath.c = false;
3884
- }
3885
- addedLength += currentLengthData.addedLength;
3886
- segmentCount += 1;
3887
- }
3888
- if (shapePath._length) {
3889
- shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);
3890
- shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);
3891
- }
3892
- if (addedLength > shapeSegment.e) {
3893
- break;
3894
- }
3895
- if (i < len - 1) {
3896
- shapePath = shape_pool.newElement();
3897
- newShape = true;
3898
- shapes.push(shapePath);
3899
- segmentCount = 0;
3900
- }
3901
- }
3902
- return shapes;
3903
- };
3904
-
3905
-
3906
- ShapeModifiers.registerModifier('tm', TrimModifier);
3907
-
3908
- function RoundCornersModifier() { }
3909
- extendPrototype([ShapeModifier], RoundCornersModifier);
3910
- RoundCornersModifier.prototype.initModifierProperties = function (elem, data) {
3911
- this.getValue = this.processKeys;
3912
- this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);
3913
- this._isAnimated = !!this.rd.effectsSequence.length;
3914
- };
3915
-
3916
- RoundCornersModifier.prototype.processPath = function (path, round) {
3917
- var cloned_path = shape_pool.newElement();
3918
- cloned_path.c = path.c;
3919
- var i, len = path._length;
3920
- var currentV, currentI, currentO, closerV, newV, newO, newI, distance, newPosPerc, index = 0;
3921
- var vX, vY, oX, oY, iX, iY;
3922
- for (i = 0; i < len; i += 1) {
3923
- currentV = path.v[i];
3924
- currentO = path.o[i];
3925
- currentI = path.i[i];
3926
- if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {
3927
- if ((i === 0 || i === len - 1) && !path.c) {
3928
- cloned_path.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);
3929
- /*cloned_path.v[index] = currentV;
3930
- cloned_path.o[index] = currentO;
3931
- cloned_path.i[index] = currentI;*/
3932
- index += 1;
3933
- } else {
3934
- if (i === 0) {
3935
- closerV = path.v[len - 1];
3936
- } else {
3937
- closerV = path.v[i - 1];
3938
- }
3939
- distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));
3940
- newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;
3941
- vX = iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;
3942
- vY = iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;
3943
- oX = vX - (vX - currentV[0]) * roundCorner;
3944
- oY = vY - (vY - currentV[1]) * roundCorner;
3945
- cloned_path.setTripleAt(vX, vY, oX, oY, iX, iY, index);
3946
- index += 1;
3947
-
3948
- if (i === len - 1) {
3949
- closerV = path.v[0];
3950
- } else {
3951
- closerV = path.v[i + 1];
3952
- }
3953
- distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));
3954
- newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;
3955
- vX = oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;
3956
- vY = oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;
3957
- iX = vX - (vX - currentV[0]) * roundCorner;
3958
- iY = vY - (vY - currentV[1]) * roundCorner;
3959
- cloned_path.setTripleAt(vX, vY, oX, oY, iX, iY, index);
3960
- index += 1;
3961
- }
3962
- } else {
3963
- cloned_path.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);
3964
- index += 1;
3965
- }
3966
- }
3967
- return cloned_path;
3968
- };
3969
-
3970
- RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {
3971
- var shapePaths;
3972
- var i, len = this.shapes.length;
3973
- var j, jLen;
3974
- var rd = this.rd.v;
3975
-
3976
- if (rd !== 0) {
3977
- var shapeData, newPaths, localShapeCollection;
3978
- for (i = 0; i < len; i += 1) {
3979
- shapeData = this.shapes[i];
3980
- newPaths = shapeData.shape.paths;
3981
- localShapeCollection = shapeData.localShapeCollection;
3982
- if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {
3983
- localShapeCollection.releaseShapes();
3984
- shapeData.shape._mdf = true;
3985
- shapePaths = shapeData.shape.paths.shapes;
3986
- jLen = shapeData.shape.paths._length;
3987
- for (j = 0; j < jLen; j += 1) {
3988
- localShapeCollection.addShape(this.processPath(shapePaths[j], rd));
3989
- }
3990
- }
3991
- shapeData.shape.paths = shapeData.localShapeCollection;
3992
- }
3993
-
3994
- }
3995
- if (!this.dynamicProperties.length) {
3996
- this._mdf = false;
3997
- }
3998
- };
3999
-
4000
- ShapeModifiers.registerModifier('rd', RoundCornersModifier);
4001
-
4002
- function RepeaterModifier() { }
4003
- extendPrototype([ShapeModifier], RepeaterModifier);
4004
-
4005
- RepeaterModifier.prototype.initModifierProperties = function (elem, data) {
4006
- this.getValue = this.processKeys;
4007
- this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);
4008
- this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);
4009
- this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);
4010
- this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);
4011
- this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);
4012
- this.data = data;
4013
- if (!this.dynamicProperties.length) {
4014
- this.getValue(true);
4015
- }
4016
- this._isAnimated = !!this.dynamicProperties.length;
4017
- this.pMatrix = new Matrix();
4018
- this.rMatrix = new Matrix();
4019
- this.sMatrix = new Matrix();
4020
- this.tMatrix = new Matrix();
4021
- this.matrix = new Matrix();
4022
- };
4023
-
4024
- RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {
4025
- var dir = inv ? -1 : 1;
4026
- var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);
4027
- var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);
4028
- pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);
4029
- rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);
4030
- rMatrix.rotate(-transform.r.v * dir * perc);
4031
- rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);
4032
- sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);
4033
- sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);
4034
- sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);
4035
- };
4036
-
4037
- RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {
4038
- this.elem = elem;
4039
- this.arr = arr;
4040
- this.pos = pos;
4041
- this.elemsData = elemsData;
4042
- this._currentCopies = 0;
4043
- this._elements = [];
4044
- this._groups = [];
4045
- this.frameId = -1;
4046
- this.initDynamicPropertyContainer(elem);
4047
- this.initModifierProperties(elem, arr[pos]);
4048
- var cont = 0;
4049
- while (pos > 0) {
4050
- pos -= 1;
4051
- //this._elements.unshift(arr.splice(pos,1)[0]);
4052
- this._elements.unshift(arr[pos]);
4053
- cont += 1;
4054
- }
4055
- if (this.dynamicProperties.length) {
4056
- this.k = true;
4057
- } else {
4058
- this.getValue(true);
4059
- }
4060
- };
4061
-
4062
- RepeaterModifier.prototype.resetElements = function (elements) {
4063
- var i, len = elements.length;
4064
- for (i = 0; i < len; i += 1) {
4065
- elements[i]._processed = false;
4066
- if (elements[i].ty === 'gr') {
4067
- this.resetElements(elements[i].it);
4068
- }
4069
- }
4070
- };
4071
-
4072
- RepeaterModifier.prototype.cloneElements = function (elements) {
4073
- var i, len = elements.length;
4074
- var newElements = JSON.parse(JSON.stringify(elements));
4075
- this.resetElements(newElements);
4076
- return newElements;
4077
- };
4078
-
4079
- RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {
4080
- var i, len = elements.length;
4081
- for (i = 0; i < len; i += 1) {
4082
- elements[i]._render = renderFlag;
4083
- if (elements[i].ty === 'gr') {
4084
- this.changeGroupRender(elements[i].it, renderFlag);
4085
- }
4086
- }
4087
- };
4088
-
4089
- RepeaterModifier.prototype.processShapes = function (_isFirstFrame) {
4090
- var items, itemsTransform, i, dir, cont;
4091
- if (this._mdf || _isFirstFrame) {
4092
- var copies = Math.ceil(this.c.v);
4093
- if (this._groups.length < copies) {
4094
- while (this._groups.length < copies) {
4095
- var group = {
4096
- it: this.cloneElements(this._elements),
4097
- ty: 'gr'
4098
- };
4099
- group.it.push({
4100
- "a": {
4101
- "a": 0,
4102
- "ix": 1,
4103
- "k": [0, 0]
4104
- },
4105
- "nm": "Transform",
4106
- "o": {
4107
- "a": 0,
4108
- "ix": 7,
4109
- "k": 100
4110
- },
4111
- "p": {
4112
- "a": 0,
4113
- "ix": 2,
4114
- "k": [0, 0]
4115
- },
4116
- "r": {
4117
- "a": 1,
4118
- "ix": 6,
4119
- "k": [{
4120
- s: 0,
4121
- e: 0,
4122
- t: 0
4123
- }, {
4124
- s: 0,
4125
- e: 0,
4126
- t: 1
4127
- }]
4128
- },
4129
- "s": {
4130
- "a": 0,
4131
- "ix": 3,
4132
- "k": [100, 100]
4133
- },
4134
- "sa": {
4135
- "a": 0,
4136
- "ix": 5,
4137
- "k": 0
4138
- },
4139
- "sk": {
4140
- "a": 0,
4141
- "ix": 4,
4142
- "k": 0
4143
- },
4144
- "ty": "tr"
4145
- });
4146
-
4147
- this.arr.splice(0, 0, group);
4148
- this._groups.splice(0, 0, group);
4149
- this._currentCopies += 1;
4150
- }
4151
- this.elem.reloadShapes();
4152
- }
4153
- cont = 0;
4154
- var renderFlag;
4155
- for (i = 0; i <= this._groups.length - 1; i += 1) {
4156
- renderFlag = cont < copies;
4157
- this._groups[i]._render = renderFlag;
4158
- this.changeGroupRender(this._groups[i].it, renderFlag);
4159
- cont += 1;
4160
- }
4161
-
4162
- this._currentCopies = copies;
4163
- ////
4164
-
4165
- var offset = this.o.v;
4166
- var offsetModulo = offset % 1;
4167
- var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);
4168
- var k;
4169
- var tMat = this.tr.v.props;
4170
- var pProps = this.pMatrix.props;
4171
- var rProps = this.rMatrix.props;
4172
- var sProps = this.sMatrix.props;
4173
- this.pMatrix.reset();
4174
- this.rMatrix.reset();
4175
- this.sMatrix.reset();
4176
- this.tMatrix.reset();
4177
- this.matrix.reset();
4178
- var iteration = 0;
4179
-
4180
- if (offset > 0) {
4181
- while (iteration < roundOffset) {
4182
- this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);
4183
- iteration += 1;
4184
- }
4185
- if (offsetModulo) {
4186
- this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);
4187
- iteration += offsetModulo;
4188
- }
4189
- } else if (offset < 0) {
4190
- while (iteration > roundOffset) {
4191
- this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);
4192
- iteration -= 1;
4193
- }
4194
- if (offsetModulo) {
4195
- this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);
4196
- iteration -= offsetModulo;
4197
- }
4198
- }
4199
- i = this.data.m === 1 ? 0 : this._currentCopies - 1;
4200
- dir = this.data.m === 1 ? 1 : -1;
4201
- cont = this._currentCopies;
4202
- var j, jLen;
4203
- while (cont) {
4204
- items = this.elemsData[i].it;
4205
- itemsTransform = items[items.length - 1].transform.mProps.v.props;
4206
- jLen = itemsTransform.length;
4207
- items[items.length - 1].transform.mProps._mdf = true;
4208
- items[items.length - 1].transform.op._mdf = true;
4209
- items[items.length - 1].transform.op.v = this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));
4210
- if (iteration !== 0) {
4211
- if ((i !== 0 && dir === 1) || (i !== this._currentCopies - 1 && dir === -1)) {
4212
- this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);
4213
- }
4214
- this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);
4215
- this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);
4216
- this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);
4217
-
4218
- for (j = 0; j < jLen; j += 1) {
4219
- itemsTransform[j] = this.matrix.props[j];
4220
- }
4221
- this.matrix.reset();
4222
- } else {
4223
- this.matrix.reset();
4224
- for (j = 0; j < jLen; j += 1) {
4225
- itemsTransform[j] = this.matrix.props[j];
4226
- }
4227
- }
4228
- iteration += 1;
4229
- cont -= 1;
4230
- i += dir;
4231
- }
4232
- } else {
4233
- cont = this._currentCopies;
4234
- i = 0;
4235
- dir = 1;
4236
- while (cont) {
4237
- items = this.elemsData[i].it;
4238
- itemsTransform = items[items.length - 1].transform.mProps.v.props;
4239
- items[items.length - 1].transform.mProps._mdf = false;
4240
- items[items.length - 1].transform.op._mdf = false;
4241
- cont -= 1;
4242
- i += dir;
4243
- }
4244
- }
4245
- };
4246
-
4247
- RepeaterModifier.prototype.addShape = function () { };
4248
-
4249
- ShapeModifiers.registerModifier('rp', RepeaterModifier);
4250
-
4251
- function ShapeCollection() {
4252
- this._length = 0;
4253
- this._maxLength = 4;
4254
- this.shapes = createSizedArray(this._maxLength);
4255
- }
4256
-
4257
- ShapeCollection.prototype.addShape = function (shapeData) {
4258
- if (this._length === this._maxLength) {
4259
- this.shapes = this.shapes.concat(createSizedArray(this._maxLength));
4260
- this._maxLength *= 2;
4261
- }
4262
- this.shapes[this._length] = shapeData;
4263
- this._length += 1;
4264
- };
4265
-
4266
- ShapeCollection.prototype.releaseShapes = function () {
4267
- var i;
4268
- for (i = 0; i < this._length; i += 1) {
4269
- shape_pool.release(this.shapes[i]);
4270
- }
4271
- this._length = 0;
4272
- };
4273
-
4274
- function DashProperty(elem, data, renderer, container) {
4275
- this.elem = elem;
4276
- this.frameId = -1;
4277
- this.dataProps = createSizedArray(data.length);
4278
- this.renderer = renderer;
4279
- this.k = false;
4280
- this.dashStr = '';
4281
- this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);
4282
- this.dashoffset = createTypedArray('float32', 1);
4283
- this.initDynamicPropertyContainer(container);
4284
- var i, len = data.length || 0,
4285
- prop;
4286
- for (i = 0; i < len; i += 1) {
4287
- prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);
4288
- this.k = prop.k || this.k;
4289
- this.dataProps[i] = {
4290
- n: data[i].n,
4291
- p: prop
4292
- };
4293
- }
4294
- if (!this.k) {
4295
- this.getValue(true);
4296
- }
4297
- this._isAnimated = this.k;
4298
- }
4299
-
4300
- DashProperty.prototype.getValue = function (forceRender) {
4301
- if (this.elem.globalData.frameId === this.frameId && !forceRender) {
4302
- return;
4303
- }
4304
- this.frameId = this.elem.globalData.frameId;
4305
- this.iterateDynamicProperties();
4306
- this._mdf = this._mdf || forceRender;
4307
- if (this._mdf) {
4308
- var i = 0,
4309
- len = this.dataProps.length;
4310
- if (this.renderer === 'svg') {
4311
- this.dashStr = '';
4312
- }
4313
- for (i = 0; i < len; i += 1) {
4314
- if (this.dataProps[i].n != 'o') {
4315
- if (this.renderer === 'svg') {
4316
- this.dashStr += ' ' + this.dataProps[i].p.v;
4317
- } else {
4318
- this.dashArray[i] = this.dataProps[i].p.v;
4319
- }
4320
- } else {
4321
- this.dashoffset[0] = this.dataProps[i].p.v;
4322
- }
4323
- }
4324
- }
4325
- };
4326
- extendPrototype([DynamicPropertyContainer], DashProperty);
4327
-
4328
- function GradientProperty(elem, data, container) {
4329
- this.data = data;
4330
- this.c = createTypedArray('uint8c', data.p * 4);
4331
- var cLength = data.k.k[0].s ? (data.k.k[0].s.length - data.p * 4) : data.k.k.length - data.p * 4;
4332
- this.o = createTypedArray('float32', cLength);
4333
- this._cmdf = false;
4334
- this._omdf = false;
4335
- this._collapsable = this.checkCollapsable();
4336
- this._hasOpacity = cLength;
4337
- this.initDynamicPropertyContainer(container);
4338
- this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);
4339
- this.k = this.prop.k;
4340
- this.getValue(true);
4341
- }
4342
-
4343
- GradientProperty.prototype.comparePoints = function (values, points) {
4344
- var i = 0,
4345
- len = this.o.length / 2,
4346
- diff;
4347
- while (i < len) {
4348
- diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);
4349
- if (diff > 0.01) {
4350
- return false;
4351
- }
4352
- i += 1;
4353
- }
4354
- return true;
4355
- };
4356
-
4357
- GradientProperty.prototype.checkCollapsable = function () {
4358
- if (this.o.length / 2 !== this.c.length / 4) {
4359
- return false;
4360
- }
4361
- if (this.data.k.k[0].s) {
4362
- var i = 0,
4363
- len = this.data.k.k.length;
4364
- while (i < len) {
4365
- if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {
4366
- return false;
4367
- }
4368
- i += 1;
4369
- }
4370
- } else if (!this.comparePoints(this.data.k.k, this.data.p)) {
4371
- return false;
4372
- }
4373
- return true;
4374
- };
4375
-
4376
- GradientProperty.prototype.getValue = function (forceRender) {
4377
- this.prop.getValue();
4378
- this._mdf = false;
4379
- this._cmdf = false;
4380
- this._omdf = false;
4381
- if (this.prop._mdf || forceRender) {
4382
- var i, len = this.data.p * 4;
4383
- var mult, val;
4384
- for (i = 0; i < len; i += 1) {
4385
- mult = i % 4 === 0 ? 100 : 255;
4386
- val = Math.round(this.prop.v[i] * mult);
4387
- if (this.c[i] !== val) {
4388
- this.c[i] = val;
4389
- this._cmdf = !forceRender;
4390
- }
4391
- }
4392
- if (this.o.length) {
4393
- len = this.prop.v.length;
4394
- for (i = this.data.p * 4; i < len; i += 1) {
4395
- mult = i % 2 === 0 ? 100 : 1;
4396
- val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];
4397
- if (this.o[i - this.data.p * 4] !== val) {
4398
- this.o[i - this.data.p * 4] = val;
4399
- this._omdf = !forceRender;
4400
- }
4401
- }
4402
- }
4403
- this._mdf = !forceRender;
4404
- }
4405
- };
4406
-
4407
- extendPrototype([DynamicPropertyContainer], GradientProperty);
4408
- var buildShapeString = function (pathNodes, length, closed, mat) {
4409
- if (length === 0) {
4410
- return '';
4411
- }
4412
- var _o = pathNodes.o;
4413
- var _i = pathNodes.i;
4414
- var _v = pathNodes.v;
4415
- var i, shapeString = " M" + mat.applyToPointStringified(_v[0][0], _v[0][1]);
4416
- for (i = 1; i < length; i += 1) {
4417
- shapeString += " C" + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + " " + mat.applyToPointStringified(_i[i][0], _i[i][1]) + " " + mat.applyToPointStringified(_v[i][0], _v[i][1]);
4418
- }
4419
- if (closed && length) {
4420
- shapeString += " C" + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + " " + mat.applyToPointStringified(_i[0][0], _i[0][1]) + " " + mat.applyToPointStringified(_v[0][0], _v[0][1]);
4421
- shapeString += 'z';
4422
- }
4423
- return shapeString;
4424
- }
4425
- var ImagePreloader = (function () {
4426
-
4427
- var proxyImage = (function () {
4428
- var canvas = createTag('canvas');
4429
- canvas.width = 1;
4430
- canvas.height = 1;
4431
- var ctx = canvas.getContext('2d');
4432
- ctx.fillStyle = 'rgba(0,0,0,0)';
4433
- ctx.fillRect(0, 0, 1, 1);
4434
- return canvas;
4435
- }())
4436
-
4437
- function imageLoaded() {
4438
- this.loadedAssets += 1;
4439
- if (this.loadedAssets === this.totalImages) {
4440
- if (this.imagesLoadedCb) {
4441
- this.imagesLoadedCb(null);
4442
- }
4443
- }
4444
- }
4445
-
4446
- function getAssetsPath(assetData, assetsPath, original_path) {
4447
- var path = '';
4448
- if (assetData.e) {
4449
- path = assetData.p;
4450
- } else if (assetsPath) {
4451
- var imagePath = assetData.p;
4452
- if (imagePath.indexOf('images/') !== -1) {
4453
- imagePath = imagePath.split('/')[1];
4454
- }
4455
- path = assetsPath + imagePath;
4456
- } else {
4457
- path = original_path;
4458
- path += assetData.u ? assetData.u : '';
4459
- path += assetData.p;
4460
- }
4461
- return path;
4462
- }
4463
-
4464
- function createImageData(assetData) {
4465
- var path = getAssetsPath(assetData, this.assetsPath, this.path);
4466
- var img = createTag('img');
4467
- img.crossOrigin = 'anonymous';
4468
- img.addEventListener('load', this._imageLoaded.bind(this), false);
4469
- img.addEventListener('error', function () {
4470
- ob.img = proxyImage;
4471
- this._imageLoaded();
4472
- }.bind(this), false);
4473
- img.src = path;
4474
- var ob = {
4475
- img: img,
4476
- assetData: assetData
4477
- }
4478
- return ob;
4479
- }
4480
-
4481
- function loadAssets(assets, cb) {
4482
- this.imagesLoadedCb = cb;
4483
- var i, len = assets.length;
4484
- for (i = 0; i < len; i += 1) {
4485
- if (!assets[i].layers) {
4486
- this.totalImages += 1;
4487
- this.images.push(this._createImageData(assets[i]));
4488
- }
4489
- }
4490
- }
4491
-
4492
- function setPath(path) {
4493
- this.path = path || '';
4494
- }
4495
-
4496
- function setAssetsPath(path) {
4497
- this.assetsPath = path || '';
4498
- }
4499
-
4500
- function getImage(assetData) {
4501
- var i = 0,
4502
- len = this.images.length;
4503
- while (i < len) {
4504
- if (this.images[i].assetData === assetData) {
4505
- return this.images[i].img;
4506
- }
4507
- i += 1;
4508
- }
4509
- }
4510
-
4511
- function destroy() {
4512
- this.imagesLoadedCb = null;
4513
- this.images.length = 0;
4514
- }
4515
-
4516
- function loaded() {
4517
- return this.totalImages === this.loadedAssets;
4518
- }
4519
-
4520
- return function ImagePreloader() {
4521
- this.loadAssets = loadAssets;
4522
- this.setAssetsPath = setAssetsPath;
4523
- this.setPath = setPath;
4524
- this.loaded = loaded;
4525
- this.destroy = destroy;
4526
- this.getImage = getImage;
4527
- this._createImageData = createImageData;
4528
- this._imageLoaded = imageLoaded;
4529
- this.assetsPath = '';
4530
- this.path = '';
4531
- this.totalImages = 0;
4532
- this.loadedAssets = 0;
4533
- this.imagesLoadedCb = null;
4534
- this.images = [];
4535
- };
4536
- }());
4537
- var featureSupport = (function () {
4538
- var ob = {
4539
- maskType: true
4540
- };
4541
- if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\/\d./i.test(navigator.userAgent)) {
4542
- ob.maskType = false;
4543
- }
4544
- return ob;
4545
- }());
4546
- var filtersFactory = (function () {
4547
- var ob = {};
4548
- ob.createFilter = createFilter;
4549
- ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;
4550
-
4551
- function createFilter(filId) {
4552
- var fil = createNS('filter');
4553
- fil.setAttribute('id', filId);
4554
- fil.setAttribute('filterUnits', 'objectBoundingBox');
4555
- fil.setAttribute('x', '0%');
4556
- fil.setAttribute('y', '0%');
4557
- fil.setAttribute('width', '100%');
4558
- fil.setAttribute('height', '100%');
4559
- return fil;
4560
- }
4561
-
4562
- function createAlphaToLuminanceFilter() {
4563
- var feColorMatrix = createNS('feColorMatrix');
4564
- feColorMatrix.setAttribute('type', 'matrix');
4565
- feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');
4566
- feColorMatrix.setAttribute('values', '0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1');
4567
- return feColorMatrix;
4568
- }
4569
-
4570
- return ob;
4571
- }());
4572
- var assetLoader = (function () {
4573
-
4574
- function formatResponse(xhr) {
4575
- if (xhr.response && typeof xhr.response === 'object') {
4576
- return xhr.response;
4577
- } else if (xhr.response && typeof xhr.response === 'string') {
4578
- return JSON.parse(xhr.response);
4579
- } else if (xhr.responseText) {
4580
- return JSON.parse(xhr.responseText);
4581
- }
4582
- }
4583
-
4584
- function loadAsset(path, callback, errorCallback) {
4585
- var response;
4586
- var xhr = new XMLHttpRequest();
4587
- xhr.open('GET', path, true);
4588
- // set responseType after calling open or IE will break.
4589
- try {
4590
- // This crashes on Android WebView prior to KitKat
4591
- xhr.responseType = "json";
4592
- } catch (err) { }
4593
- xhr.send();
4594
- xhr.onreadystatechange = function () {
4595
- if (xhr.readyState == 4) {
4596
- if (xhr.status == 200) {
4597
- response = formatResponse(xhr);
4598
- callback(response);
4599
- } else {
4600
- try {
4601
- response = formatResponse(xhr);
4602
- callback(response);
4603
- } catch (err) {
4604
- if (errorCallback) {
4605
- errorCallback(err);
4606
- }
4607
- }
4608
- }
4609
- }
4610
- };
4611
- }
4612
- return {
4613
- load: loadAsset
4614
- }
4615
- }())
4616
-
4617
- function TextAnimatorProperty(textData, renderType, elem) {
4618
- this._isFirstFrame = true;
4619
- this._hasMaskedPath = false;
4620
- this._frameId = -1;
4621
- this._textData = textData;
4622
- this._renderType = renderType;
4623
- this._elem = elem;
4624
- this._animatorsData = createSizedArray(this._textData.a.length);
4625
- this._pathData = {};
4626
- this._moreOptions = {
4627
- alignment: {}
4628
- };
4629
- this.renderedLetters = [];
4630
- this.lettersChangedFlag = false;
4631
- this.initDynamicPropertyContainer(elem);
4632
-
4633
- }
4634
-
4635
- TextAnimatorProperty.prototype.searchProperties = function () {
4636
- var i, len = this._textData.a.length,
4637
- animatorProps;
4638
- var getProp = PropertyFactory.getProp;
4639
- for (i = 0; i < len; i += 1) {
4640
- animatorProps = this._textData.a[i];
4641
- this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);
4642
- }
4643
- if (this._textData.p && 'm' in this._textData.p) {
4644
- this._pathData = {
4645
- f: getProp(this._elem, this._textData.p.f, 0, 0, this),
4646
- l: getProp(this._elem, this._textData.p.l, 0, 0, this),
4647
- r: this._textData.p.r,
4648
- m: this._elem.maskManager.getMaskProperty(this._textData.p.m)
4649
- };
4650
- this._hasMaskedPath = true;
4651
- } else {
4652
- this._hasMaskedPath = false;
4653
- }
4654
- this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);
4655
- };
4656
-
4657
- TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {
4658
- this.lettersChangedFlag = lettersChangedFlag;
4659
- if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {
4660
- return;
4661
- }
4662
- this._isFirstFrame = false;
4663
- var alignment = this._moreOptions.alignment.v;
4664
- var animators = this._animatorsData;
4665
- var textData = this._textData;
4666
- var matrixHelper = this.mHelper;
4667
- var renderType = this._renderType;
4668
- var renderedLettersCount = this.renderedLetters.length;
4669
- var data = this.data;
4670
- var xPos, yPos;
4671
- var i, len;
4672
- var letters = documentData.l,
4673
- pathInfo, currentLength, currentPoint, segmentLength, flag, pointInd, segmentInd, prevPoint, points, segments, partialLength, totalLength, perc, tanAngle, mask;
4674
- if (this._hasMaskedPath) {
4675
- mask = this._pathData.m;
4676
- if (!this._pathData.n || this._pathData._mdf) {
4677
- var paths = mask.v;
4678
- if (this._pathData.r) {
4679
- paths = paths.reverse();
4680
- }
4681
- // TODO: release bezier data cached from previous pathInfo: this._pathData.pi
4682
- pathInfo = {
4683
- tLength: 0,
4684
- segments: []
4685
- };
4686
- len = paths._length - 1;
4687
- var bezierData;
4688
- totalLength = 0;
4689
- for (i = 0; i < len; i += 1) {
4690
- bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);
4691
- pathInfo.tLength += bezierData.segmentLength;
4692
- pathInfo.segments.push(bezierData);
4693
- totalLength += bezierData.segmentLength;
4694
- }
4695
- i = len;
4696
- if (mask.v.c) {
4697
- bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);
4698
- pathInfo.tLength += bezierData.segmentLength;
4699
- pathInfo.segments.push(bezierData);
4700
- totalLength += bezierData.segmentLength;
4701
- }
4702
- this._pathData.pi = pathInfo;
4703
- }
4704
- pathInfo = this._pathData.pi;
4705
-
4706
- currentLength = this._pathData.f.v;
4707
- segmentInd = 0;
4708
- pointInd = 1;
4709
- segmentLength = 0;
4710
- flag = true;
4711
- segments = pathInfo.segments;
4712
- if (currentLength < 0 && mask.v.c) {
4713
- if (pathInfo.tLength < Math.abs(currentLength)) {
4714
- currentLength = -Math.abs(currentLength) % pathInfo.tLength;
4715
- }
4716
- segmentInd = segments.length - 1;
4717
- points = segments[segmentInd].points;
4718
- pointInd = points.length - 1;
4719
- while (currentLength < 0) {
4720
- currentLength += points[pointInd].partialLength;
4721
- pointInd -= 1;
4722
- if (pointInd < 0) {
4723
- segmentInd -= 1;
4724
- points = segments[segmentInd].points;
4725
- pointInd = points.length - 1;
4726
- }
4727
- }
4728
-
4729
- }
4730
- points = segments[segmentInd].points;
4731
- prevPoint = points[pointInd - 1];
4732
- currentPoint = points[pointInd];
4733
- partialLength = currentPoint.partialLength;
4734
- }
4735
-
4736
-
4737
- len = letters.length;
4738
- xPos = 0;
4739
- yPos = 0;
4740
- var yOff = documentData.finalSize * 1.2 * 0.714;
4741
- var firstLine = true;
4742
- var animatorProps, animatorSelector;
4743
- var j, jLen;
4744
- var letterValue;
4745
-
4746
- jLen = animators.length;
4747
- var lastLetter;
4748
-
4749
- var mult, ind = -1,
4750
- offf, xPathPos, yPathPos;
4751
- var initPathPos = currentLength,
4752
- initSegmentInd = segmentInd,
4753
- initPointInd = pointInd,
4754
- currentLine = -1;
4755
- var elemOpacity;
4756
- var sc, sw, fc, k;
4757
- var lineLength = 0;
4758
- var letterSw, letterSc, letterFc, letterM = '',
4759
- letterP = this.defaultPropsArray,
4760
- letterO;
4761
-
4762
- //
4763
- if (documentData.j === 2 || documentData.j === 1) {
4764
- var animatorJustifyOffset = 0;
4765
- var animatorFirstCharOffset = 0;
4766
- var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;
4767
- var lastIndex = 0;
4768
- var isNewLine = true;
4769
-
4770
- for (i = 0; i < len; i += 1) {
4771
- if (letters[i].n) {
4772
- if (animatorJustifyOffset) {
4773
- animatorJustifyOffset += animatorFirstCharOffset;
4774
- }
4775
- while (lastIndex < i) {
4776
- letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;
4777
- lastIndex += 1;
4778
- }
4779
- animatorJustifyOffset = 0;
4780
- isNewLine = true;
4781
- } else {
4782
- for (j = 0; j < jLen; j += 1) {
4783
- animatorProps = animators[j].a;
4784
- if (animatorProps.t.propType) {
4785
- if (isNewLine && documentData.j === 2) {
4786
- animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;
4787
- }
4788
- animatorSelector = animators[j].s;
4789
- mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);
4790
- if (mult.length) {
4791
- animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;
4792
- } else {
4793
- animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;
4794
- }
4795
- }
4796
- }
4797
- isNewLine = false;
4798
- }
4799
- }
4800
- if (animatorJustifyOffset) {
4801
- animatorJustifyOffset += animatorFirstCharOffset;
4802
- }
4803
- while (lastIndex < i) {
4804
- letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;
4805
- lastIndex += 1;
4806
- }
4807
- }
4808
- //
4809
-
4810
- for (i = 0; i < len; i += 1) {
4811
-
4812
- matrixHelper.reset();
4813
- elemOpacity = 1;
4814
- if (letters[i].n) {
4815
- xPos = 0;
4816
- yPos += documentData.yOffset;
4817
- yPos += firstLine ? 1 : 0;
4818
- currentLength = initPathPos;
4819
- firstLine = false;
4820
- lineLength = 0;
4821
- if (this._hasMaskedPath) {
4822
- segmentInd = initSegmentInd;
4823
- pointInd = initPointInd;
4824
- points = segments[segmentInd].points;
4825
- prevPoint = points[pointInd - 1];
4826
- currentPoint = points[pointInd];
4827
- partialLength = currentPoint.partialLength;
4828
- segmentLength = 0;
4829
- }
4830
- letterO = letterSw = letterFc = letterM = '';
4831
- letterP = this.defaultPropsArray;
4832
- } else {
4833
- if (this._hasMaskedPath) {
4834
- if (currentLine !== letters[i].line) {
4835
- switch (documentData.j) {
4836
- case 1:
4837
- currentLength += totalLength - documentData.lineWidths[letters[i].line];
4838
- break;
4839
- case 2:
4840
- currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;
4841
- break;
4842
- }
4843
- currentLine = letters[i].line;
4844
- }
4845
- if (ind !== letters[i].ind) {
4846
- if (letters[ind]) {
4847
- currentLength += letters[ind].extra;
4848
- }
4849
- currentLength += letters[i].an / 2;
4850
- ind = letters[i].ind;
4851
- }
4852
- currentLength += alignment[0] * letters[i].an / 200;
4853
- var animatorOffset = 0;
4854
- for (j = 0; j < jLen; j += 1) {
4855
- animatorProps = animators[j].a;
4856
- if (animatorProps.p.propType) {
4857
- animatorSelector = animators[j].s;
4858
- mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);
4859
- if (mult.length) {
4860
- animatorOffset += animatorProps.p.v[0] * mult[0];
4861
- } else {
4862
- animatorOffset += animatorProps.p.v[0] * mult;
4863
- }
4864
-
4865
- }
4866
- if (animatorProps.a.propType) {
4867
- animatorSelector = animators[j].s;
4868
- mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);
4869
- if (mult.length) {
4870
- animatorOffset += animatorProps.a.v[0] * mult[0];
4871
- } else {
4872
- animatorOffset += animatorProps.a.v[0] * mult;
4873
- }
4874
-
4875
- }
4876
- }
4877
- flag = true;
4878
- while (flag) {
4879
- if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {
4880
- perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;
4881
- xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;
4882
- yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;
4883
- matrixHelper.translate(-alignment[0] * letters[i].an / 200, -(alignment[1] * yOff / 100));
4884
- flag = false;
4885
- } else if (points) {
4886
- segmentLength += currentPoint.partialLength;
4887
- pointInd += 1;
4888
- if (pointInd >= points.length) {
4889
- pointInd = 0;
4890
- segmentInd += 1;
4891
- if (!segments[segmentInd]) {
4892
- if (mask.v.c) {
4893
- pointInd = 0;
4894
- segmentInd = 0;
4895
- points = segments[segmentInd].points;
4896
- } else {
4897
- segmentLength -= currentPoint.partialLength;
4898
- points = null;
4899
- }
4900
- } else {
4901
- points = segments[segmentInd].points;
4902
- }
4903
- }
4904
- if (points) {
4905
- prevPoint = currentPoint;
4906
- currentPoint = points[pointInd];
4907
- partialLength = currentPoint.partialLength;
4908
- }
4909
- }
4910
- }
4911
- offf = letters[i].an / 2 - letters[i].add;
4912
- matrixHelper.translate(-offf, 0, 0);
4913
- } else {
4914
- offf = letters[i].an / 2 - letters[i].add;
4915
- matrixHelper.translate(-offf, 0, 0);
4916
-
4917
- // Grouping alignment
4918
- matrixHelper.translate(-alignment[0] * letters[i].an / 200, -alignment[1] * yOff / 100, 0);
4919
- }
4920
-
4921
- lineLength += letters[i].l / 2;
4922
- for (j = 0; j < jLen; j += 1) {
4923
- animatorProps = animators[j].a;
4924
- if (animatorProps.t.propType) {
4925
- animatorSelector = animators[j].s;
4926
- mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);
4927
- //This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean "isNewLine"
4928
- if (xPos !== 0 || documentData.j !== 0) {
4929
- if (this._hasMaskedPath) {
4930
- if (mult.length) {
4931
- currentLength += animatorProps.t.v * mult[0];
4932
- } else {
4933
- currentLength += animatorProps.t.v * mult;
4934
- }
4935
- } else {
4936
- if (mult.length) {
4937
- xPos += animatorProps.t.v * mult[0];
4938
- } else {
4939
- xPos += animatorProps.t.v * mult;
4940
- }
4941
- }
4942
- }
4943
- }
4944
- }
4945
- lineLength += letters[i].l / 2;
4946
- if (documentData.strokeWidthAnim) {
4947
- sw = documentData.sw || 0;
4948
- }
4949
- if (documentData.strokeColorAnim) {
4950
- if (documentData.sc) {
4951
- sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];
4952
- } else {
4953
- sc = [0, 0, 0];
4954
- }
4955
- }
4956
- if (documentData.fillColorAnim && documentData.fc) {
4957
- fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];
4958
- }
4959
- for (j = 0; j < jLen; j += 1) {
4960
- animatorProps = animators[j].a;
4961
- if (animatorProps.a.propType) {
4962
- animatorSelector = animators[j].s;
4963
- mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);
4964
-
4965
- if (mult.length) {
4966
- matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);
4967
- } else {
4968
- matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);
4969
- }
4970
- }
4971
- }
4972
- for (j = 0; j < jLen; j += 1) {
4973
- animatorProps = animators[j].a;
4974
- if (animatorProps.s.propType) {
4975
- animatorSelector = animators[j].s;
4976
- mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);
4977
- if (mult.length) {
4978
- matrixHelper.scale(1 + ((animatorProps.s.v[0] - 1) * mult[0]), 1 + ((animatorProps.s.v[1] - 1) * mult[1]), 1);
4979
- } else {
4980
- matrixHelper.scale(1 + ((animatorProps.s.v[0] - 1) * mult), 1 + ((animatorProps.s.v[1] - 1) * mult), 1);
4981
- }
4982
- }
4983
- }
4984
- for (j = 0; j < jLen; j += 1) {
4985
- animatorProps = animators[j].a;
4986
- animatorSelector = animators[j].s;
4987
- mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);
4988
- if (animatorProps.sk.propType) {
4989
- if (mult.length) {
4990
- matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);
4991
- } else {
4992
- matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);
4993
- }
4994
- }
4995
- if (animatorProps.r.propType) {
4996
- if (mult.length) {
4997
- matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);
4998
- } else {
4999
- matrixHelper.rotateZ(-animatorProps.r.v * mult);
5000
- }
5001
- }
5002
- if (animatorProps.ry.propType) {
5003
-
5004
- if (mult.length) {
5005
- matrixHelper.rotateY(animatorProps.ry.v * mult[1]);
5006
- } else {
5007
- matrixHelper.rotateY(animatorProps.ry.v * mult);
5008
- }
5009
- }
5010
- if (animatorProps.rx.propType) {
5011
- if (mult.length) {
5012
- matrixHelper.rotateX(animatorProps.rx.v * mult[0]);
5013
- } else {
5014
- matrixHelper.rotateX(animatorProps.rx.v * mult);
5015
- }
5016
- }
5017
- if (animatorProps.o.propType) {
5018
- if (mult.length) {
5019
- elemOpacity += ((animatorProps.o.v) * mult[0] - elemOpacity) * mult[0];
5020
- } else {
5021
- elemOpacity += ((animatorProps.o.v) * mult - elemOpacity) * mult;
5022
- }
5023
- }
5024
- if (documentData.strokeWidthAnim && animatorProps.sw.propType) {
5025
- if (mult.length) {
5026
- sw += animatorProps.sw.v * mult[0];
5027
- } else {
5028
- sw += animatorProps.sw.v * mult;
5029
- }
5030
- }
5031
- if (documentData.strokeColorAnim && animatorProps.sc.propType) {
5032
- for (k = 0; k < 3; k += 1) {
5033
- if (mult.length) {
5034
- sc[k] = sc[k] + (animatorProps.sc.v[k] - sc[k]) * mult[0];
5035
- } else {
5036
- sc[k] = sc[k] + (animatorProps.sc.v[k] - sc[k]) * mult;
5037
- }
5038
- }
5039
- }
5040
- if (documentData.fillColorAnim && documentData.fc) {
5041
- if (animatorProps.fc.propType) {
5042
- for (k = 0; k < 3; k += 1) {
5043
- if (mult.length) {
5044
- fc[k] = fc[k] + (animatorProps.fc.v[k] - fc[k]) * mult[0];
5045
- } else {
5046
- fc[k] = fc[k] + (animatorProps.fc.v[k] - fc[k]) * mult;
5047
- }
5048
- }
5049
- }
5050
- if (animatorProps.fh.propType) {
5051
- if (mult.length) {
5052
- fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);
5053
- } else {
5054
- fc = addHueToRGB(fc, animatorProps.fh.v * mult);
5055
- }
5056
- }
5057
- if (animatorProps.fs.propType) {
5058
- if (mult.length) {
5059
- fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);
5060
- } else {
5061
- fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);
5062
- }
5063
- }
5064
- if (animatorProps.fb.propType) {
5065
- if (mult.length) {
5066
- fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);
5067
- } else {
5068
- fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);
5069
- }
5070
- }
5071
- }
5072
- }
5073
-
5074
- for (j = 0; j < jLen; j += 1) {
5075
- animatorProps = animators[j].a;
5076
-
5077
- if (animatorProps.p.propType) {
5078
- animatorSelector = animators[j].s;
5079
- mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);
5080
- if (this._hasMaskedPath) {
5081
- if (mult.length) {
5082
- matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);
5083
- } else {
5084
- matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);
5085
- }
5086
- } else {
5087
- if (mult.length) {
5088
- matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);
5089
- } else {
5090
- matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);
5091
-
5092
- }
5093
- }
5094
- }
5095
- }
5096
- if (documentData.strokeWidthAnim) {
5097
- letterSw = sw < 0 ? 0 : sw;
5098
- }
5099
- if (documentData.strokeColorAnim) {
5100
- letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';
5101
- }
5102
- if (documentData.fillColorAnim && documentData.fc) {
5103
- letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';
5104
- }
5105
-
5106
- if (this._hasMaskedPath) {
5107
- matrixHelper.translate(0, -documentData.ls);
5108
-
5109
- matrixHelper.translate(0, alignment[1] * yOff / 100 + yPos, 0);
5110
- if (textData.p.p) {
5111
- tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);
5112
- var rot = Math.atan(tanAngle) * 180 / Math.PI;
5113
- if (currentPoint.point[0] < prevPoint.point[0]) {
5114
- rot += 180;
5115
- }
5116
- matrixHelper.rotate(-rot * Math.PI / 180);
5117
- }
5118
- matrixHelper.translate(xPathPos, yPathPos, 0);
5119
- currentLength -= alignment[0] * letters[i].an / 200;
5120
- if (letters[i + 1] && ind !== letters[i + 1].ind) {
5121
- currentLength += letters[i].an / 2;
5122
- currentLength += documentData.tr / 1000 * documentData.finalSize;
5123
- }
5124
- } else {
5125
-
5126
- matrixHelper.translate(xPos, yPos, 0);
5127
-
5128
- if (documentData.ps) {
5129
- //matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);
5130
- matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);
5131
- }
5132
- switch (documentData.j) {
5133
- case 1:
5134
- matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);
5135
- break;
5136
- case 2:
5137
- matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);
5138
- break;
5139
- }
5140
- matrixHelper.translate(0, -documentData.ls);
5141
- matrixHelper.translate(offf, 0, 0);
5142
- matrixHelper.translate(alignment[0] * letters[i].an / 200, alignment[1] * yOff / 100, 0);
5143
- xPos += letters[i].l + documentData.tr / 1000 * documentData.finalSize;
5144
- }
5145
- if (renderType === 'html') {
5146
- letterM = matrixHelper.toCSS();
5147
- } else if (renderType === 'svg') {
5148
- letterM = matrixHelper.to2dCSS();
5149
- } else {
5150
- letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];
5151
- }
5152
- letterO = elemOpacity;
5153
- }
5154
-
5155
- if (renderedLettersCount <= i) {
5156
- letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);
5157
- this.renderedLetters.push(letterValue);
5158
- renderedLettersCount += 1;
5159
- this.lettersChangedFlag = true;
5160
- } else {
5161
- letterValue = this.renderedLetters[i];
5162
- this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;
5163
- }
5164
- }
5165
- };
5166
-
5167
- TextAnimatorProperty.prototype.getValue = function () {
5168
- if (this._elem.globalData.frameId === this._frameId) {
5169
- return;
5170
- }
5171
- this._frameId = this._elem.globalData.frameId;
5172
- this.iterateDynamicProperties();
5173
- };
5174
-
5175
- TextAnimatorProperty.prototype.mHelper = new Matrix();
5176
- TextAnimatorProperty.prototype.defaultPropsArray = [];
5177
- extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);
5178
-
5179
- function TextAnimatorDataProperty(elem, animatorProps, container) {
5180
- var defaultData = {
5181
- propType: false
5182
- };
5183
- var getProp = PropertyFactory.getProp;
5184
- var textAnimator_animatables = animatorProps.a;
5185
- this.a = {
5186
- r: textAnimator_animatables.r ? getProp(elem, textAnimator_animatables.r, 0, degToRads, container) : defaultData,
5187
- rx: textAnimator_animatables.rx ? getProp(elem, textAnimator_animatables.rx, 0, degToRads, container) : defaultData,
5188
- ry: textAnimator_animatables.ry ? getProp(elem, textAnimator_animatables.ry, 0, degToRads, container) : defaultData,
5189
- sk: textAnimator_animatables.sk ? getProp(elem, textAnimator_animatables.sk, 0, degToRads, container) : defaultData,
5190
- sa: textAnimator_animatables.sa ? getProp(elem, textAnimator_animatables.sa, 0, degToRads, container) : defaultData,
5191
- s: textAnimator_animatables.s ? getProp(elem, textAnimator_animatables.s, 1, 0.01, container) : defaultData,
5192
- a: textAnimator_animatables.a ? getProp(elem, textAnimator_animatables.a, 1, 0, container) : defaultData,
5193
- o: textAnimator_animatables.o ? getProp(elem, textAnimator_animatables.o, 0, 0.01, container) : defaultData,
5194
- p: textAnimator_animatables.p ? getProp(elem, textAnimator_animatables.p, 1, 0, container) : defaultData,
5195
- sw: textAnimator_animatables.sw ? getProp(elem, textAnimator_animatables.sw, 0, 0, container) : defaultData,
5196
- sc: textAnimator_animatables.sc ? getProp(elem, textAnimator_animatables.sc, 1, 0, container) : defaultData,
5197
- fc: textAnimator_animatables.fc ? getProp(elem, textAnimator_animatables.fc, 1, 0, container) : defaultData,
5198
- fh: textAnimator_animatables.fh ? getProp(elem, textAnimator_animatables.fh, 0, 0, container) : defaultData,
5199
- fs: textAnimator_animatables.fs ? getProp(elem, textAnimator_animatables.fs, 0, 0.01, container) : defaultData,
5200
- fb: textAnimator_animatables.fb ? getProp(elem, textAnimator_animatables.fb, 0, 0.01, container) : defaultData,
5201
- t: textAnimator_animatables.t ? getProp(elem, textAnimator_animatables.t, 0, 0, container) : defaultData
5202
- };
5203
-
5204
- this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);
5205
- this.s.t = animatorProps.s.t;
5206
- }
5207
-
5208
- function LetterProps(o, sw, sc, fc, m, p) {
5209
- this.o = o;
5210
- this.sw = sw;
5211
- this.sc = sc;
5212
- this.fc = fc;
5213
- this.m = m;
5214
- this.p = p;
5215
- this._mdf = {
5216
- o: true,
5217
- sw: !!sw,
5218
- sc: !!sc,
5219
- fc: !!fc,
5220
- m: true,
5221
- p: true
5222
- };
5223
- }
5224
-
5225
- LetterProps.prototype.update = function (o, sw, sc, fc, m, p) {
5226
- this._mdf.o = false;
5227
- this._mdf.sw = false;
5228
- this._mdf.sc = false;
5229
- this._mdf.fc = false;
5230
- this._mdf.m = false;
5231
- this._mdf.p = false;
5232
- var updated = false;
5233
-
5234
- if (this.o !== o) {
5235
- this.o = o;
5236
- this._mdf.o = true;
5237
- updated = true;
5238
- }
5239
- if (this.sw !== sw) {
5240
- this.sw = sw;
5241
- this._mdf.sw = true;
5242
- updated = true;
5243
- }
5244
- if (this.sc !== sc) {
5245
- this.sc = sc;
5246
- this._mdf.sc = true;
5247
- updated = true;
5248
- }
5249
- if (this.fc !== fc) {
5250
- this.fc = fc;
5251
- this._mdf.fc = true;
5252
- updated = true;
5253
- }
5254
- if (this.m !== m) {
5255
- this.m = m;
5256
- this._mdf.m = true;
5257
- updated = true;
5258
- }
5259
- if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {
5260
- this.p = p;
5261
- this._mdf.p = true;
5262
- updated = true;
5263
- }
5264
- return updated;
5265
- };
5266
-
5267
- function TextProperty(elem, data) {
5268
- this._frameId = initialDefaultFrame;
5269
- this.pv = '';
5270
- this.v = '';
5271
- this.kf = false;
5272
- this._isFirstFrame = true;
5273
- this._mdf = false;
5274
- this.data = data;
5275
- this.elem = elem;
5276
- this.comp = this.elem.comp;
5277
- this.keysIndex = 0;
5278
- this.canResize = false;
5279
- this.minimumFontSize = 1;
5280
- this.effectsSequence = [];
5281
- this.currentData = {
5282
- ascent: 0,
5283
- boxWidth: this.defaultBoxWidth,
5284
- f: '',
5285
- fStyle: '',
5286
- fWeight: '',
5287
- fc: '',
5288
- j: '',
5289
- justifyOffset: '',
5290
- l: [],
5291
- lh: 0,
5292
- lineWidths: [],
5293
- ls: '',
5294
- of: '',
5295
- s: '',
5296
- sc: '',
5297
- sw: 0,
5298
- t: 0,
5299
- tr: 0,
5300
- sz: 0,
5301
- ps: null,
5302
- fillColorAnim: false,
5303
- strokeColorAnim: false,
5304
- strokeWidthAnim: false,
5305
- yOffset: 0,
5306
- finalSize: 0,
5307
- finalText: [],
5308
- finalLineHeight: 0,
5309
- __complete: false
5310
-
5311
- };
5312
- this.copyData(this.currentData, this.data.d.k[0].s);
5313
-
5314
- if (!this.searchProperty()) {
5315
- this.completeTextData(this.currentData);
5316
- }
5317
- }
5318
-
5319
- TextProperty.prototype.defaultBoxWidth = [0, 0];
5320
-
5321
- TextProperty.prototype.copyData = function (obj, data) {
5322
- for (var s in data) {
5323
- if (data.hasOwnProperty(s)) {
5324
- obj[s] = data[s];
5325
- }
5326
- }
5327
- return obj;
5328
- }
5329
-
5330
- TextProperty.prototype.setCurrentData = function (data) {
5331
- if (!data.__complete) {
5332
- this.completeTextData(data);
5333
- }
5334
- this.currentData = data;
5335
- this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;
5336
- this._mdf = true;
5337
- };
5338
-
5339
- TextProperty.prototype.searchProperty = function () {
5340
- return this.searchKeyframes();
5341
- };
5342
-
5343
- TextProperty.prototype.searchKeyframes = function () {
5344
- this.kf = this.data.d.k.length > 1;
5345
- if (this.kf) {
5346
- this.addEffect(this.getKeyframeValue.bind(this));
5347
- }
5348
- return this.kf;
5349
- }
5350
-
5351
- TextProperty.prototype.addEffect = function (effectFunction) {
5352
- this.effectsSequence.push(effectFunction);
5353
- this.elem.addDynamicProperty(this);
5354
- };
5355
-
5356
- TextProperty.prototype.getValue = function (_finalValue) {
5357
- if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {
5358
- return;
5359
- }
5360
- this.currentData.t = this.data.d.k[this.keysIndex].s.t;
5361
- var currentValue = this.currentData;
5362
- var currentIndex = this.keysIndex;
5363
- if (this.lock) {
5364
- this.setCurrentData(this.currentData);
5365
- return;
5366
- }
5367
- this.lock = true;
5368
- this._mdf = false;
5369
- var multipliedValue;
5370
- var i, len = this.effectsSequence.length;
5371
- var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;
5372
- for (i = 0; i < len; i += 1) {
5373
- //Checking if index changed to prevent creating a new object every time the expression updates.
5374
- if (currentIndex !== this.keysIndex) {
5375
- finalValue = this.effectsSequence[i](finalValue, finalValue.t);
5376
- } else {
5377
- finalValue = this.effectsSequence[i](this.currentData, finalValue.t);
5378
- }
5379
- }
5380
- if (currentValue !== finalValue) {
5381
- this.setCurrentData(finalValue);
5382
- }
5383
- this.pv = this.v = this.currentData;
5384
- this.lock = false;
5385
- this.frameId = this.elem.globalData.frameId;
5386
- }
5387
-
5388
- TextProperty.prototype.getKeyframeValue = function () {
5389
- var textKeys = this.data.d.k,
5390
- textDocumentData;
5391
- var frameNum = this.elem.comp.renderedFrame;
5392
- var i = 0,
5393
- len = textKeys.length;
5394
- while (i <= len - 1) {
5395
- textDocumentData = textKeys[i].s;
5396
- if (i === len - 1 || textKeys[i + 1].t > frameNum) {
5397
- break;
5398
- }
5399
- i += 1;
5400
- }
5401
- if (this.keysIndex !== i) {
5402
- this.keysIndex = i;
5403
- }
5404
- return this.data.d.k[this.keysIndex].s;
5405
- };
5406
-
5407
- TextProperty.prototype.buildFinalText = function (text) {
5408
- var combinedCharacters = FontManager.getCombinedCharacterCodes();
5409
- var charactersArray = [];
5410
- var i = 0,
5411
- len = text.length;
5412
- var charCode;
5413
- while (i < len) {
5414
- charCode = text.charCodeAt(i);
5415
- if (combinedCharacters.indexOf(charCode) !== -1) {
5416
- charactersArray[charactersArray.length - 1] += text.charAt(i);
5417
- } else {
5418
- if (charCode >= 0xD800 && charCode <= 0xDBFF) {
5419
- charCode = text.charCodeAt(i + 1);
5420
- if (charCode >= 0xDC00 && charCode <= 0xDFFF) {
5421
- charactersArray.push(text.substr(i, 2));
5422
- ++i;
5423
- } else {
5424
- charactersArray.push(text.charAt(i));
5425
- }
5426
- } else {
5427
- charactersArray.push(text.charAt(i));
5428
- }
5429
- }
5430
- i += 1;
5431
- }
5432
- return charactersArray;
5433
- }
5434
-
5435
- TextProperty.prototype.completeTextData = function (documentData) {
5436
- documentData.__complete = true;
5437
- var fontManager = this.elem.globalData.fontManager;
5438
- var data = this.data;
5439
- var letters = [];
5440
- var i, len;
5441
- var newLineFlag, index = 0,
5442
- val;
5443
- var anchorGrouping = data.m.g;
5444
- var currentSize = 0,
5445
- currentPos = 0,
5446
- currentLine = 0,
5447
- lineWidths = [];
5448
- var lineWidth = 0;
5449
- var maxLineWidth = 0;
5450
- var j, jLen;
5451
- var fontData = fontManager.getFontByName(documentData.f);
5452
- var charData, cLength = 0;
5453
- var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];
5454
-
5455
- var fWeight = 'normal',
5456
- fStyle = 'normal';
5457
- len = styles.length;
5458
- var styleName;
5459
- for (i = 0; i < len; i += 1) {
5460
- styleName = styles[i].toLowerCase();
5461
- switch (styleName) {
5462
- case 'italic':
5463
- fStyle = 'italic';
5464
- break;
5465
- case 'bold':
5466
- fWeight = '700';
5467
- break;
5468
- case 'black':
5469
- fWeight = '900';
5470
- break;
5471
- case 'medium':
5472
- fWeight = '500';
5473
- break;
5474
- case 'regular':
5475
- case 'normal':
5476
- fWeight = '400';
5477
- break;
5478
- case 'light':
5479
- case 'thin':
5480
- fWeight = '200';
5481
- break;
5482
- }
5483
- }
5484
- documentData.fWeight = fontData.fWeight || fWeight;
5485
- documentData.fStyle = fStyle;
5486
- documentData.finalSize = documentData.s;
5487
- documentData.finalText = this.buildFinalText(documentData.t);
5488
- len = documentData.finalText.length;
5489
- documentData.finalLineHeight = documentData.lh;
5490
- var trackingOffset = documentData.tr / 1000 * documentData.finalSize;
5491
- var charCode;
5492
- if (documentData.sz) {
5493
- var flag = true;
5494
- var boxWidth = documentData.sz[0];
5495
- var boxHeight = documentData.sz[1];
5496
- var currentHeight, finalText;
5497
- while (flag) {
5498
- finalText = this.buildFinalText(documentData.t);
5499
- currentHeight = 0;
5500
- lineWidth = 0;
5501
- len = finalText.length;
5502
- trackingOffset = documentData.tr / 1000 * documentData.finalSize;
5503
- var lastSpaceIndex = -1;
5504
- for (i = 0; i < len; i += 1) {
5505
- charCode = finalText[i].charCodeAt(0);
5506
- newLineFlag = false;
5507
- if (finalText[i] === ' ') {
5508
- lastSpaceIndex = i;
5509
- } else if (charCode === 13 || charCode === 3) {
5510
- lineWidth = 0;
5511
- newLineFlag = true;
5512
- currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;
5513
- }
5514
- if (fontManager.chars) {
5515
- charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);
5516
- cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;
5517
- } else {
5518
- //tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;
5519
- cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);
5520
- }
5521
- if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {
5522
- if (lastSpaceIndex === -1) {
5523
- len += 1;
5524
- } else {
5525
- i = lastSpaceIndex;
5526
- }
5527
- currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;
5528
- finalText.splice(i, lastSpaceIndex === i ? 1 : 0, "\r");
5529
- //finalText = finalText.substr(0,i) + "\r" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);
5530
- lastSpaceIndex = -1;
5531
- lineWidth = 0;
5532
- } else {
5533
- lineWidth += cLength;
5534
- lineWidth += trackingOffset;
5535
- }
5536
- }
5537
- currentHeight += fontData.ascent * documentData.finalSize / 100;
5538
- if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {
5539
- documentData.finalSize -= 1;
5540
- documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s;
5541
- } else {
5542
- documentData.finalText = finalText;
5543
- len = documentData.finalText.length;
5544
- flag = false;
5545
- }
5546
- }
5547
-
5548
- }
5549
- lineWidth = -trackingOffset;
5550
- cLength = 0;
5551
- var uncollapsedSpaces = 0;
5552
- var currentChar;
5553
- for (i = 0; i < len; i += 1) {
5554
- newLineFlag = false;
5555
- currentChar = documentData.finalText[i];
5556
- charCode = currentChar.charCodeAt(0);
5557
- if (currentChar === ' ') {
5558
- val = '\u00A0';
5559
- } else if (charCode === 13 || charCode === 3) {
5560
- uncollapsedSpaces = 0;
5561
- lineWidths.push(lineWidth);
5562
- maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;
5563
- lineWidth = -2 * trackingOffset;
5564
- val = '';
5565
- newLineFlag = true;
5566
- currentLine += 1;
5567
- } else {
5568
- val = documentData.finalText[i];
5569
- }
5570
- if (fontManager.chars) {
5571
- charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);
5572
- cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;
5573
- } else {
5574
- //var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);
5575
- //tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;
5576
- cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);
5577
- }
5578
-
5579
- //
5580
- if (currentChar === ' ') {
5581
- uncollapsedSpaces += cLength + trackingOffset;
5582
- } else {
5583
- lineWidth += cLength + trackingOffset + uncollapsedSpaces;
5584
- uncollapsedSpaces = 0;
5585
- }
5586
- letters.push({
5587
- l: cLength,
5588
- an: cLength,
5589
- add: currentSize,
5590
- n: newLineFlag,
5591
- anIndexes: [],
5592
- val: val,
5593
- line: currentLine,
5594
- animatorJustifyOffset: 0
5595
- });
5596
- if (anchorGrouping == 2) {
5597
- currentSize += cLength;
5598
- if (val === '' || val === '\u00A0' || i === len - 1) {
5599
- if (val === '' || val === '\u00A0') {
5600
- currentSize -= cLength;
5601
- }
5602
- while (currentPos <= i) {
5603
- letters[currentPos].an = currentSize;
5604
- letters[currentPos].ind = index;
5605
- letters[currentPos].extra = cLength;
5606
- currentPos += 1;
5607
- }
5608
- index += 1;
5609
- currentSize = 0;
5610
- }
5611
- } else if (anchorGrouping == 3) {
5612
- currentSize += cLength;
5613
- if (val === '' || i === len - 1) {
5614
- if (val === '') {
5615
- currentSize -= cLength;
5616
- }
5617
- while (currentPos <= i) {
5618
- letters[currentPos].an = currentSize;
5619
- letters[currentPos].ind = index;
5620
- letters[currentPos].extra = cLength;
5621
- currentPos += 1;
5622
- }
5623
- currentSize = 0;
5624
- index += 1;
5625
- }
5626
- } else {
5627
- letters[index].ind = index;
5628
- letters[index].extra = 0;
5629
- index += 1;
5630
- }
5631
- }
5632
- documentData.l = letters;
5633
- maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;
5634
- lineWidths.push(lineWidth);
5635
- if (documentData.sz) {
5636
- documentData.boxWidth = documentData.sz[0];
5637
- documentData.justifyOffset = 0;
5638
- } else {
5639
- documentData.boxWidth = maxLineWidth;
5640
- switch (documentData.j) {
5641
- case 1:
5642
- documentData.justifyOffset = -documentData.boxWidth;
5643
- break;
5644
- case 2:
5645
- documentData.justifyOffset = -documentData.boxWidth / 2;
5646
- break;
5647
- default:
5648
- documentData.justifyOffset = 0;
5649
- }
5650
- }
5651
- documentData.lineWidths = lineWidths;
5652
-
5653
- var animators = data.a,
5654
- animatorData, letterData;
5655
- jLen = animators.length;
5656
- var based, ind, indexes = [];
5657
- for (j = 0; j < jLen; j += 1) {
5658
- animatorData = animators[j];
5659
- if (animatorData.a.sc) {
5660
- documentData.strokeColorAnim = true;
5661
- }
5662
- if (animatorData.a.sw) {
5663
- documentData.strokeWidthAnim = true;
5664
- }
5665
- if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {
5666
- documentData.fillColorAnim = true;
5667
- }
5668
- ind = 0;
5669
- based = animatorData.s.b;
5670
- for (i = 0; i < len; i += 1) {
5671
- letterData = letters[i];
5672
- letterData.anIndexes[j] = ind;
5673
- if ((based == 1 && letterData.val !== '') || (based == 2 && letterData.val !== '' && letterData.val !== '\u00A0') || (based == 3 && (letterData.n || letterData.val == '\u00A0' || i == len - 1)) || (based == 4 && (letterData.n || i == len - 1))) {
5674
- if (animatorData.s.rn === 1) {
5675
- indexes.push(ind);
5676
- }
5677
- ind += 1;
5678
- }
5679
- }
5680
- data.a[j].s.totalChars = ind;
5681
- var currentInd = -1,
5682
- newInd;
5683
- if (animatorData.s.rn === 1) {
5684
- for (i = 0; i < len; i += 1) {
5685
- letterData = letters[i];
5686
- if (currentInd != letterData.anIndexes[j]) {
5687
- currentInd = letterData.anIndexes[j];
5688
- newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];
5689
- }
5690
- letterData.anIndexes[j] = newInd;
5691
- }
5692
- }
5693
- }
5694
- documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;
5695
- documentData.ls = documentData.ls || 0;
5696
- documentData.ascent = fontData.ascent * documentData.finalSize / 100;
5697
- };
5698
-
5699
- TextProperty.prototype.updateDocumentData = function (newData, index) {
5700
- index = index === undefined ? this.keysIndex : index;
5701
- var dData = this.copyData({}, this.data.d.k[index].s);
5702
- dData = this.copyData(dData, newData);
5703
- this.data.d.k[index].s = dData;
5704
- this.recalculate(index);
5705
- this.elem.addDynamicProperty(this);
5706
- };
5707
-
5708
- TextProperty.prototype.recalculate = function (index) {
5709
- var dData = this.data.d.k[index].s;
5710
- dData.__complete = false;
5711
- this.keysIndex = 0;
5712
- this._isFirstFrame = true;
5713
- this.getValue(dData);
5714
- }
5715
-
5716
- TextProperty.prototype.canResizeFont = function (_canResize) {
5717
- this.canResize = _canResize;
5718
- this.recalculate(this.keysIndex);
5719
- this.elem.addDynamicProperty(this);
5720
- };
5721
-
5722
- TextProperty.prototype.setMinimumFontSize = function (_fontValue) {
5723
- this.minimumFontSize = Math.floor(_fontValue) || 1;
5724
- this.recalculate(this.keysIndex);
5725
- this.elem.addDynamicProperty(this);
5726
- };
5727
-
5728
- var TextSelectorProp = (function () {
5729
- var max = Math.max;
5730
- var min = Math.min;
5731
- var floor = Math.floor;
5732
-
5733
- function TextSelectorProp(elem, data) {
5734
- this._currentTextLength = -1;
5735
- this.k = false;
5736
- this.data = data;
5737
- this.elem = elem;
5738
- this.comp = elem.comp;
5739
- this.finalS = 0;
5740
- this.finalE = 0;
5741
- this.initDynamicPropertyContainer(elem);
5742
- this.s = PropertyFactory.getProp(elem, data.s || {
5743
- k: 0
5744
- }, 0, 0, this);
5745
- if ('e' in data) {
5746
- this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);
5747
- } else {
5748
- this.e = {
5749
- v: 100
5750
- };
5751
- }
5752
- this.o = PropertyFactory.getProp(elem, data.o || {
5753
- k: 0
5754
- }, 0, 0, this);
5755
- this.xe = PropertyFactory.getProp(elem, data.xe || {
5756
- k: 0
5757
- }, 0, 0, this);
5758
- this.ne = PropertyFactory.getProp(elem, data.ne || {
5759
- k: 0
5760
- }, 0, 0, this);
5761
- this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);
5762
- if (!this.dynamicProperties.length) {
5763
- this.getValue();
5764
- }
5765
- }
5766
-
5767
- TextSelectorProp.prototype = {
5768
- getMult: function (ind) {
5769
- if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {
5770
- this.getValue();
5771
- }
5772
- //var easer = bez.getEasingCurve(this.ne.v/100,0,1-this.xe.v/100,1);
5773
- var x1 = 0;
5774
- var y1 = 0;
5775
- var x2 = 1;
5776
- var y2 = 1;
5777
- if (this.ne.v > 0) {
5778
- x1 = this.ne.v / 100.0;
5779
- } else {
5780
- y1 = -this.ne.v / 100.0;
5781
- }
5782
- if (this.xe.v > 0) {
5783
- x2 = 1.0 - this.xe.v / 100.0;
5784
- } else {
5785
- y2 = 1.0 + this.xe.v / 100.0;
5786
- }
5787
- var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;
5788
-
5789
- var mult = 0;
5790
- var s = this.finalS;
5791
- var e = this.finalE;
5792
- var type = this.data.sh;
5793
- if (type === 2) {
5794
- if (e === s) {
5795
- mult = ind >= e ? 1 : 0;
5796
- } else {
5797
- mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));
5798
- }
5799
- mult = easer(mult);
5800
- } else if (type === 3) {
5801
- if (e === s) {
5802
- mult = ind >= e ? 0 : 1;
5803
- } else {
5804
- mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));
5805
- }
5806
-
5807
- mult = easer(mult);
5808
- } else if (type === 4) {
5809
- if (e === s) {
5810
- mult = 0;
5811
- } else {
5812
- mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));
5813
- if (mult < 0.5) {
5814
- mult *= 2;
5815
- } else {
5816
- mult = 1 - 2 * (mult - 0.5);
5817
- }
5818
- }
5819
- mult = easer(mult);
5820
- } else if (type === 5) {
5821
- if (e === s) {
5822
- mult = 0;
5823
- } else {
5824
- var tot = e - s;
5825
- /*ind += 0.5;
5826
- mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind;*/
5827
- ind = min(max(0, ind + 0.5 - s), e - s);
5828
- var x = -tot / 2 + ind;
5829
- var a = tot / 2;
5830
- mult = Math.sqrt(1 - (x * x) / (a * a));
5831
- }
5832
- mult = easer(mult);
5833
- } else if (type === 6) {
5834
- if (e === s) {
5835
- mult = 0;
5836
- } else {
5837
- ind = min(max(0, ind + 0.5 - s), e - s);
5838
- mult = (1 + (Math.cos((Math.PI + Math.PI * 2 * (ind) / (e - s))))) / 2;
5839
- }
5840
- mult = easer(mult);
5841
- } else {
5842
- if (ind >= floor(s)) {
5843
- if (ind - s < 0) {
5844
- mult = max(0, min(min(e, 1) - (s - ind), 1));
5845
- } else {
5846
- mult = max(0, min(e - ind, 1));
5847
- }
5848
- }
5849
- mult = easer(mult);
5850
- }
5851
- return mult * this.a.v;
5852
- },
5853
- getValue: function (newCharsFlag) {
5854
- this.iterateDynamicProperties();
5855
- this._mdf = newCharsFlag || this._mdf;
5856
- this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;
5857
- if (newCharsFlag && this.data.r === 2) {
5858
- this.e.v = this._currentTextLength;
5859
- }
5860
- var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;
5861
- var o = this.o.v / divisor;
5862
- var s = this.s.v / divisor + o;
5863
- var e = (this.e.v / divisor) + o;
5864
- if (s > e) {
5865
- var _s = s;
5866
- s = e;
5867
- e = _s;
5868
- }
5869
- this.finalS = s;
5870
- this.finalE = e;
5871
- }
5872
- }
5873
- extendPrototype([DynamicPropertyContainer], TextSelectorProp);
5874
-
5875
- function getTextSelectorProp(elem, data, arr) {
5876
- return new TextSelectorProp(elem, data, arr);
5877
- }
5878
-
5879
- return {
5880
- getTextSelectorProp: getTextSelectorProp
5881
- };
5882
- }());
5883
-
5884
-
5885
- var pool_factory = (function () {
5886
- return function (initialLength, _create, _release, _clone) {
5887
-
5888
- var _length = 0;
5889
- var _maxLength = initialLength;
5890
- var pool = createSizedArray(_maxLength);
5891
-
5892
- var ob = {
5893
- newElement: newElement,
5894
- release: release
5895
- };
5896
-
5897
- function newElement() {
5898
- var element;
5899
- if (_length) {
5900
- _length -= 1;
5901
- element = pool[_length];
5902
- } else {
5903
- element = _create();
5904
- }
5905
- return element;
5906
- }
5907
-
5908
- function release(element) {
5909
- if (_length === _maxLength) {
5910
- pool = pooling.double(pool);
5911
- _maxLength = _maxLength * 2;
5912
- }
5913
- if (_release) {
5914
- _release(element);
5915
- }
5916
- pool[_length] = element;
5917
- _length += 1;
5918
- }
5919
-
5920
- function clone() {
5921
- var clonedElement = newElement();
5922
- return _clone(clonedElement);
5923
- }
5924
-
5925
- return ob;
5926
- };
5927
- }());
5928
-
5929
- var pooling = (function () {
5930
-
5931
- function double(arr) {
5932
- return arr.concat(createSizedArray(arr.length));
5933
- }
5934
-
5935
- return {
5936
- double: double
5937
- };
5938
- }());
5939
- var point_pool = (function () {
5940
-
5941
- function create() {
5942
- return createTypedArray('float32', 2);
5943
- }
5944
- return pool_factory(8, create);
5945
- }());
5946
- var shape_pool = (function () {
5947
-
5948
- function create() {
5949
- return new ShapePath();
5950
- }
5951
-
5952
- function release(shapePath) {
5953
- var len = shapePath._length,
5954
- i;
5955
- for (i = 0; i < len; i += 1) {
5956
- point_pool.release(shapePath.v[i]);
5957
- point_pool.release(shapePath.i[i]);
5958
- point_pool.release(shapePath.o[i]);
5959
- shapePath.v[i] = null;
5960
- shapePath.i[i] = null;
5961
- shapePath.o[i] = null;
5962
- }
5963
- shapePath._length = 0;
5964
- shapePath.c = false;
5965
- }
5966
-
5967
- function clone(shape) {
5968
- var cloned = factory.newElement();
5969
- var i, len = shape._length === undefined ? shape.v.length : shape._length;
5970
- cloned.setLength(len);
5971
- cloned.c = shape.c;
5972
- var pt;
5973
-
5974
- for (i = 0; i < len; i += 1) {
5975
- cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);
5976
- }
5977
- return cloned;
5978
- }
5979
-
5980
- var factory = pool_factory(4, create, release);
5981
- factory.clone = clone;
5982
-
5983
- return factory;
5984
- }());
5985
- var shapeCollection_pool = (function () {
5986
- var ob = {
5987
- newShapeCollection: newShapeCollection,
5988
- release: release
5989
- };
5990
-
5991
- var _length = 0;
5992
- var _maxLength = 4;
5993
- var pool = createSizedArray(_maxLength);
5994
-
5995
- function newShapeCollection() {
5996
- var shapeCollection;
5997
- if (_length) {
5998
- _length -= 1;
5999
- shapeCollection = pool[_length];
6000
- } else {
6001
- shapeCollection = new ShapeCollection();
6002
- }
6003
- return shapeCollection;
6004
- }
6005
-
6006
- function release(shapeCollection) {
6007
- var i, len = shapeCollection._length;
6008
- for (i = 0; i < len; i += 1) {
6009
- shape_pool.release(shapeCollection.shapes[i]);
6010
- }
6011
- shapeCollection._length = 0;
6012
-
6013
- if (_length === _maxLength) {
6014
- pool = pooling.double(pool);
6015
- _maxLength = _maxLength * 2;
6016
- }
6017
- pool[_length] = shapeCollection;
6018
- _length += 1;
6019
- }
6020
-
6021
- return ob;
6022
- }());
6023
- var segments_length_pool = (function () {
6024
-
6025
- function create() {
6026
- return {
6027
- lengths: [],
6028
- totalLength: 0
6029
- };
6030
- }
6031
-
6032
- function release(element) {
6033
- var i, len = element.lengths.length;
6034
- for (i = 0; i < len; i += 1) {
6035
- bezier_length_pool.release(element.lengths[i]);
6036
- }
6037
- element.lengths.length = 0;
6038
- }
6039
-
6040
- return pool_factory(8, create, release);
6041
- }());
6042
- var bezier_length_pool = (function () {
6043
-
6044
- function create() {
6045
- return {
6046
- addedLength: 0,
6047
- percents: createTypedArray('float32', defaultCurveSegments),
6048
- lengths: createTypedArray('float32', defaultCurveSegments),
6049
- };
6050
- }
6051
- return pool_factory(8, create);
6052
- }());
6053
-
6054
- function BaseRenderer() { }
6055
- BaseRenderer.prototype.checkLayers = function (num) {
6056
- var i, len = this.layers.length,
6057
- data;
6058
- this.completeLayers = true;
6059
- for (i = len - 1; i >= 0; i--) {
6060
- if (!this.elements[i]) {
6061
- data = this.layers[i];
6062
- if (data.ip - data.st <= (num - this.layers[i].st) && data.op - data.st > (num - this.layers[i].st)) {
6063
- this.buildItem(i);
6064
- }
6065
- }
6066
- this.completeLayers = this.elements[i] ? this.completeLayers : false;
6067
- }
6068
- this.checkPendingElements();
6069
- };
6070
-
6071
- BaseRenderer.prototype.createItem = function (layer) {
6072
- switch (layer.ty) {
6073
- case 2:
6074
- return this.createImage(layer);
6075
- case 0:
6076
- return this.createComp(layer);
6077
- case 1:
6078
- return this.createSolid(layer);
6079
- case 3:
6080
- return this.createNull(layer);
6081
- case 4:
6082
- return this.createShape(layer);
6083
- case 5:
6084
- return this.createText(layer);
6085
- case 13:
6086
- return this.createCamera(layer);
6087
- }
6088
- return this.createNull(layer);
6089
- };
6090
-
6091
- BaseRenderer.prototype.createCamera = function () {
6092
- throw new Error('You\'re using a 3d camera. Try the html renderer.');
6093
- };
6094
-
6095
- BaseRenderer.prototype.buildAllItems = function () {
6096
- var i, len = this.layers.length;
6097
- for (i = 0; i < len; i += 1) {
6098
- this.buildItem(i);
6099
- }
6100
- this.checkPendingElements();
6101
- };
6102
-
6103
- BaseRenderer.prototype.includeLayers = function (newLayers) {
6104
- this.completeLayers = false;
6105
- var i, len = newLayers.length;
6106
- var j, jLen = this.layers.length;
6107
- for (i = 0; i < len; i += 1) {
6108
- j = 0;
6109
- while (j < jLen) {
6110
- if (this.layers[j].id == newLayers[i].id) {
6111
- this.layers[j] = newLayers[i];
6112
- break;
6113
- }
6114
- j += 1;
6115
- }
6116
- }
6117
- };
6118
-
6119
- BaseRenderer.prototype.setProjectInterface = function (pInterface) {
6120
- this.globalData.projectInterface = pInterface;
6121
- };
6122
-
6123
- BaseRenderer.prototype.initItems = function () {
6124
- if (!this.globalData.progressiveLoad) {
6125
- this.buildAllItems();
6126
- }
6127
- };
6128
- BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {
6129
- var elements = this.elements;
6130
- var layers = this.layers;
6131
- var i = 0,
6132
- len = layers.length;
6133
- while (i < len) {
6134
- if (layers[i].ind == parentName) {
6135
- if (!elements[i] || elements[i] === true) {
6136
- this.buildItem(i);
6137
- this.addPendingElement(element);
6138
- } else {
6139
- hierarchy.push(elements[i]);
6140
- elements[i].setAsParent();
6141
- if (layers[i].parent !== undefined) {
6142
- this.buildElementParenting(element, layers[i].parent, hierarchy);
6143
- } else {
6144
- element.setHierarchy(hierarchy);
6145
- }
6146
- }
6147
- }
6148
- i += 1;
6149
- }
6150
- };
6151
-
6152
- BaseRenderer.prototype.addPendingElement = function (element) {
6153
- this.pendingElements.push(element);
6154
- };
6155
-
6156
- BaseRenderer.prototype.searchExtraCompositions = function (assets) {
6157
- var i, len = assets.length;
6158
- for (i = 0; i < len; i += 1) {
6159
- if (assets[i].xt) {
6160
- var comp = this.createComp(assets[i]);
6161
- comp.initExpressions();
6162
- this.globalData.projectInterface.registerComposition(comp);
6163
- }
6164
- }
6165
- };
6166
-
6167
- BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {
6168
- this.globalData.fontManager = new FontManager();
6169
- this.globalData.fontManager.addChars(animData.chars);
6170
- this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);
6171
- this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);
6172
- this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);
6173
- this.globalData.imageLoader = this.animationItem.imagePreloader;
6174
- this.globalData.frameId = 0;
6175
- this.globalData.frameRate = animData.fr;
6176
- this.globalData.nm = animData.nm;
6177
- this.globalData.compSize = {
6178
- w: animData.w,
6179
- h: animData.h
6180
- }
6181
- }
6182
-
6183
- function SVGRenderer(animationItem, config) {
6184
- this.animationItem = animationItem;
6185
- this.layers = null;
6186
- this.renderedFrame = -1;
6187
- this.svgElement = createNS('svg');
6188
- var ariaLabel = '';
6189
- if (config && config.title) {
6190
- var titleElement = createNS('title');
6191
- var titleId = createElementID();
6192
- titleElement.setAttribute('id', titleId);
6193
- titleElement.textContent = config.title;
6194
- this.svgElement.appendChild(titleElement);
6195
- ariaLabel += titleId;
6196
- }
6197
- if (config && config.description) {
6198
- var descElement = createNS('desc');
6199
- var descId = createElementID();
6200
- descElement.setAttribute('id', descId);
6201
- descElement.textContent = config.description;
6202
- this.svgElement.appendChild(descElement);
6203
- ariaLabel += ' ' + descId;
6204
- }
6205
- if (ariaLabel) {
6206
- this.svgElement.setAttribute('aria-labelledby', ariaLabel)
6207
- }
6208
- var defs = createNS('defs');
6209
- this.svgElement.appendChild(defs);
6210
- var maskElement = createNS('g');
6211
- this.svgElement.appendChild(maskElement);
6212
- this.layerElement = maskElement;
6213
- this.renderConfig = {
6214
- preserveAspectRatio: (config && config.preserveAspectRatio) || 'xMidYMid meet',
6215
- imagePreserveAspectRatio: (config && config.imagePreserveAspectRatio) || 'xMidYMid slice',
6216
- progressiveLoad: (config && config.progressiveLoad) || false,
6217
- hideOnTransparent: (config && config.hideOnTransparent === false) ? false : true,
6218
- viewBoxOnly: true,
6219
- viewBoxSize: (config && config.viewBoxSize) || false,
6220
- className: (config && config.className) || '',
6221
- id: (config && config.id) || '',
6222
- focusable: config && config.focusable,
6223
- filterSize: {
6224
- width: config && config.filterSize && config.filterSize.width || '100%',
6225
- height: config && config.filterSize && config.filterSize.height || '100%',
6226
- x: config && config.filterSize && config.filterSize.x || '0%',
6227
- y: config && config.filterSize && config.filterSize.y || '0%',
6228
- }
6229
- };
6230
-
6231
- this.globalData = {
6232
- _mdf: false,
6233
- frameNum: -1,
6234
- defs: defs,
6235
- renderConfig: this.renderConfig
6236
- };
6237
- this.elements = [];
6238
- this.pendingElements = [];
6239
- this.destroyed = false;
6240
- this.rendererType = 'svg';
6241
-
6242
- }
6243
-
6244
- extendPrototype([BaseRenderer], SVGRenderer);
6245
-
6246
- SVGRenderer.prototype.createNull = function (data) {
6247
- return new NullElement(data, this.globalData, this);
6248
- };
6249
-
6250
- SVGRenderer.prototype.createShape = function (data) {
6251
- return new SVGShapeElement(data, this.globalData, this);
6252
- };
6253
-
6254
- SVGRenderer.prototype.createText = function (data) {
6255
- return new SVGTextElement(data, this.globalData, this);
6256
-
6257
- };
6258
-
6259
- SVGRenderer.prototype.createImage = function (data) {
6260
- return new IImageElement(data, this.globalData, this);
6261
- };
6262
-
6263
- SVGRenderer.prototype.createComp = function (data) {
6264
- return new SVGCompElement(data, this.globalData, this);
6265
-
6266
- };
6267
-
6268
- SVGRenderer.prototype.createSolid = function (data) {
6269
- return new ISolidElement(data, this.globalData, this);
6270
- };
6271
-
6272
- SVGRenderer.prototype.configAnimation = function (animData) {
6273
- this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
6274
- if (this.renderConfig.viewBoxSize) {
6275
- this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);
6276
- } else {
6277
- this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);
6278
- }
6279
-
6280
- if (!this.renderConfig.viewBoxOnly) {
6281
- this.svgElement.setAttribute('width', animData.w);
6282
- this.svgElement.setAttribute('height', animData.h);
6283
- this.svgElement.style.width = '100%';
6284
- this.svgElement.style.height = '100%';
6285
- this.svgElement.style.transform = 'translate3d(0,0,0)';
6286
- }
6287
- if (this.renderConfig.className) {
6288
- this.svgElement.setAttribute('class', this.renderConfig.className);
6289
- }
6290
- if (this.renderConfig.id) {
6291
- this.svgElement.setAttribute('id', this.renderConfig.id);
6292
- }
6293
- if (this.renderConfig.focusable !== undefined) {
6294
- this.svgElement.setAttribute('focusable', this.renderConfig.focusable);
6295
- }
6296
- this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio);
6297
- //this.layerElement.style.transform = 'translate3d(0,0,0)';
6298
- //this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = "0px 0px 0px";
6299
- this.animationItem.wrapper.appendChild(this.svgElement);
6300
- //Mask animation
6301
- var defs = this.globalData.defs;
6302
-
6303
- this.setupGlobalData(animData, defs);
6304
- this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;
6305
- this.data = animData;
6306
-
6307
- var maskElement = createNS('clipPath');
6308
- var rect = createNS('rect');
6309
- rect.setAttribute('width', animData.w);
6310
- rect.setAttribute('height', animData.h);
6311
- rect.setAttribute('x', 0);
6312
- rect.setAttribute('y', 0);
6313
- var maskId = createElementID();
6314
- maskElement.setAttribute('id', maskId);
6315
- maskElement.appendChild(rect);
6316
- this.layerElement.setAttribute("clip-path", "url(" + locationHref + "#" + maskId + ")");
6317
-
6318
- defs.appendChild(maskElement);
6319
- this.layers = animData.layers;
6320
- this.elements = createSizedArray(animData.layers.length);
6321
- };
6322
-
6323
-
6324
- SVGRenderer.prototype.destroy = function () {
6325
- this.animationItem.wrapper.innerHTML = '';
6326
- this.layerElement = null;
6327
- this.globalData.defs = null;
6328
- var i, len = this.layers ? this.layers.length : 0;
6329
- for (i = 0; i < len; i++) {
6330
- if (this.elements[i]) {
6331
- this.elements[i].destroy();
6332
- }
6333
- }
6334
- this.elements.length = 0;
6335
- this.destroyed = true;
6336
- this.animationItem = null;
6337
- };
6338
-
6339
- SVGRenderer.prototype.updateContainerSize = function () { };
6340
-
6341
- SVGRenderer.prototype.buildItem = function (pos) {
6342
- var elements = this.elements;
6343
- if (elements[pos] || this.layers[pos].ty == 99) {
6344
- return;
6345
- }
6346
- elements[pos] = true;
6347
- var element = this.createItem(this.layers[pos]);
6348
-
6349
- elements[pos] = element;
6350
- if (expressionsPlugin) {
6351
- if (this.layers[pos].ty === 0) {
6352
- this.globalData.projectInterface.registerComposition(element);
6353
- }
6354
- element.initExpressions();
6355
- }
6356
- this.appendElementInPos(element, pos);
6357
- if (this.layers[pos].tt) {
6358
- if (!this.elements[pos - 1] || this.elements[pos - 1] === true) {
6359
- this.buildItem(pos - 1);
6360
- this.addPendingElement(element);
6361
- } else {
6362
- element.setMatte(elements[pos - 1].layerId);
6363
- }
6364
- }
6365
- };
6366
-
6367
- SVGRenderer.prototype.checkPendingElements = function () {
6368
- while (this.pendingElements.length) {
6369
- var element = this.pendingElements.pop();
6370
- element.checkParenting();
6371
- if (element.data.tt) {
6372
- var i = 0,
6373
- len = this.elements.length;
6374
- while (i < len) {
6375
- if (this.elements[i] === element) {
6376
- element.setMatte(this.elements[i - 1].layerId);
6377
- break;
6378
- }
6379
- i += 1;
6380
- }
6381
- }
6382
- }
6383
- };
6384
-
6385
- SVGRenderer.prototype.renderFrame = function (num) {
6386
- if (this.renderedFrame === num || this.destroyed) {
6387
- return;
6388
- }
6389
- if (num === null) {
6390
- num = this.renderedFrame;
6391
- } else {
6392
- this.renderedFrame = num;
6393
- }
6394
- // console.log('-------');
6395
- // console.log('FRAME ',num);
6396
- this.globalData.frameNum = num;
6397
- this.globalData.frameId += 1;
6398
- this.globalData.projectInterface.currentFrame = num;
6399
- this.globalData._mdf = false;
6400
- var i, len = this.layers.length;
6401
- if (!this.completeLayers) {
6402
- this.checkLayers(num);
6403
- }
6404
- for (i = len - 1; i >= 0; i--) {
6405
- if (this.completeLayers || this.elements[i]) {
6406
- this.elements[i].prepareFrame(num - this.layers[i].st);
6407
- }
6408
- }
6409
- if (this.globalData._mdf) {
6410
- for (i = 0; i < len; i += 1) {
6411
- if (this.completeLayers || this.elements[i]) {
6412
- this.elements[i].renderFrame();
6413
- }
6414
- }
6415
- }
6416
- };
6417
-
6418
- SVGRenderer.prototype.appendElementInPos = function (element, pos) {
6419
- var newElement = element.getBaseElement();
6420
- if (!newElement) {
6421
- return;
6422
- }
6423
- var i = 0;
6424
- var nextElement;
6425
- while (i < pos) {
6426
- if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {
6427
- nextElement = this.elements[i].getBaseElement();
6428
- }
6429
- i += 1;
6430
- }
6431
- if (nextElement) {
6432
- this.layerElement.insertBefore(newElement, nextElement);
6433
- } else {
6434
- this.layerElement.appendChild(newElement);
6435
- }
6436
- };
6437
-
6438
- SVGRenderer.prototype.hide = function () {
6439
- this.layerElement.style.display = 'none';
6440
- };
6441
-
6442
- SVGRenderer.prototype.show = function () {
6443
- this.layerElement.style.display = 'block';
6444
- };
6445
-
6446
- function CanvasRenderer(animationItem, config) {
6447
- this.animationItem = animationItem;
6448
- this.renderConfig = {
6449
- clearCanvas: (config && config.clearCanvas !== undefined) ? config.clearCanvas : true,
6450
- context: (config && config.context) || null,
6451
- progressiveLoad: (config && config.progressiveLoad) || false,
6452
- preserveAspectRatio: (config && config.preserveAspectRatio) || 'xMidYMid meet',
6453
- imagePreserveAspectRatio: (config && config.imagePreserveAspectRatio) || 'xMidYMid slice',
6454
- className: (config && config.className) || '',
6455
- id: (config && config.id) || '',
6456
- };
6457
- this.renderConfig.dpr = (config && config.dpr) || 1;
6458
- if (this.animationItem.wrapper) {
6459
- this.renderConfig.dpr = (config && config.dpr) || window.devicePixelRatio || 1;
6460
- }
6461
- this.renderedFrame = -1;
6462
- this.globalData = {
6463
- frameNum: -1,
6464
- _mdf: false,
6465
- renderConfig: this.renderConfig,
6466
- currentGlobalAlpha: -1
6467
- };
6468
- this.contextData = new CVContextData();
6469
- this.elements = [];
6470
- this.pendingElements = [];
6471
- this.transformMat = new Matrix();
6472
- this.completeLayers = false;
6473
- this.rendererType = 'canvas';
6474
- }
6475
- extendPrototype([BaseRenderer], CanvasRenderer);
6476
-
6477
- CanvasRenderer.prototype.createShape = function (data) {
6478
- return new CVShapeElement(data, this.globalData, this);
6479
- };
6480
-
6481
- CanvasRenderer.prototype.createText = function (data) {
6482
- return new CVTextElement(data, this.globalData, this);
6483
- };
6484
-
6485
- CanvasRenderer.prototype.createImage = function (data) {
6486
- return new CVImageElement(data, this.globalData, this);
6487
- };
6488
-
6489
- CanvasRenderer.prototype.createComp = function (data) {
6490
- return new CVCompElement(data, this.globalData, this);
6491
- };
6492
-
6493
- CanvasRenderer.prototype.createSolid = function (data) {
6494
- return new CVSolidElement(data, this.globalData, this);
6495
- };
6496
-
6497
- CanvasRenderer.prototype.createNull = SVGRenderer.prototype.createNull;
6498
-
6499
- CanvasRenderer.prototype.ctxTransform = function (props) {
6500
- if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {
6501
- return;
6502
- }
6503
- if (!this.renderConfig.clearCanvas) {
6504
- this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);
6505
- return;
6506
- }
6507
- this.transformMat.cloneFromProps(props);
6508
- var cProps = this.contextData.cTr.props;
6509
- this.transformMat.transform(cProps[0], cProps[1], cProps[2], cProps[3], cProps[4], cProps[5], cProps[6], cProps[7], cProps[8], cProps[9], cProps[10], cProps[11], cProps[12], cProps[13], cProps[14], cProps[15]);
6510
- //this.contextData.cTr.transform(props[0],props[1],props[2],props[3],props[4],props[5],props[6],props[7],props[8],props[9],props[10],props[11],props[12],props[13],props[14],props[15]);
6511
- this.contextData.cTr.cloneFromProps(this.transformMat.props);
6512
- var trProps = this.contextData.cTr.props;
6513
- this.canvasContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);
6514
- };
6515
-
6516
- CanvasRenderer.prototype.ctxOpacity = function (op) {
6517
- /*if(op === 1){
6518
- return;
6519
- }*/
6520
- if (!this.renderConfig.clearCanvas) {
6521
- this.canvasContext.globalAlpha *= op < 0 ? 0 : op;
6522
- this.globalData.currentGlobalAlpha = this.contextData.cO;
6523
- return;
6524
- }
6525
- this.contextData.cO *= op < 0 ? 0 : op;
6526
- if (this.globalData.currentGlobalAlpha !== this.contextData.cO) {
6527
- this.canvasContext.globalAlpha = this.contextData.cO;
6528
- this.globalData.currentGlobalAlpha = this.contextData.cO;
6529
- }
6530
- };
6531
-
6532
- CanvasRenderer.prototype.reset = function () {
6533
- if (!this.renderConfig.clearCanvas) {
6534
- this.canvasContext.restore();
6535
- return;
6536
- }
6537
- this.contextData.reset();
6538
- };
6539
-
6540
- CanvasRenderer.prototype.save = function (actionFlag) {
6541
- if (!this.renderConfig.clearCanvas) {
6542
- this.canvasContext.save();
6543
- return;
6544
- }
6545
- if (actionFlag) {
6546
- this.canvasContext.save();
6547
- }
6548
- var props = this.contextData.cTr.props;
6549
- if (this.contextData._length <= this.contextData.cArrPos) {
6550
- this.contextData.duplicate();
6551
- }
6552
- var i, arr = this.contextData.saved[this.contextData.cArrPos];
6553
- for (i = 0; i < 16; i += 1) {
6554
- arr[i] = props[i];
6555
- }
6556
- this.contextData.savedOp[this.contextData.cArrPos] = this.contextData.cO;
6557
- this.contextData.cArrPos += 1;
6558
- };
6559
-
6560
- CanvasRenderer.prototype.restore = function (actionFlag) {
6561
- if (!this.renderConfig.clearCanvas) {
6562
- this.canvasContext.restore();
6563
- return;
6564
- }
6565
- if (actionFlag) {
6566
- this.canvasContext.restore();
6567
- this.globalData.blendMode = 'source-over';
6568
- }
6569
- this.contextData.cArrPos -= 1;
6570
- var popped = this.contextData.saved[this.contextData.cArrPos];
6571
- var i, arr = this.contextData.cTr.props;
6572
- for (i = 0; i < 16; i += 1) {
6573
- arr[i] = popped[i];
6574
- }
6575
- this.canvasContext.setTransform(popped[0], popped[1], popped[4], popped[5], popped[12], popped[13]);
6576
- popped = this.contextData.savedOp[this.contextData.cArrPos];
6577
- this.contextData.cO = popped;
6578
- if (this.globalData.currentGlobalAlpha !== popped) {
6579
- this.canvasContext.globalAlpha = popped;
6580
- this.globalData.currentGlobalAlpha = popped;
6581
- }
6582
- };
6583
-
6584
- CanvasRenderer.prototype.configAnimation = function (animData) {
6585
- if (this.animationItem.wrapper) {
6586
- this.animationItem.container = createTag('canvas');
6587
- this.animationItem.container.style.width = '100%';
6588
- this.animationItem.container.style.height = '100%';
6589
- //this.animationItem.container.style.transform = 'translate3d(0,0,0)';
6590
- //this.animationItem.container.style.webkitTransform = 'translate3d(0,0,0)';
6591
- this.animationItem.container.style.transformOrigin = this.animationItem.container.style.mozTransformOrigin = this.animationItem.container.style.webkitTransformOrigin = this.animationItem.container.style['-webkit-transform'] = "0px 0px 0px";
6592
- this.animationItem.wrapper.appendChild(this.animationItem.container);
6593
- this.canvasContext = this.animationItem.container.getContext('2d');
6594
- if (this.renderConfig.className) {
6595
- this.animationItem.container.setAttribute('class', this.renderConfig.className);
6596
- }
6597
- if (this.renderConfig.id) {
6598
- this.animationItem.container.setAttribute('id', this.renderConfig.id);
6599
- }
6600
- } else {
6601
- this.canvasContext = this.renderConfig.context;
6602
- }
6603
- this.data = animData;
6604
- this.layers = animData.layers;
6605
- this.transformCanvas = {
6606
- w: animData.w,
6607
- h: animData.h,
6608
- sx: 0,
6609
- sy: 0,
6610
- tx: 0,
6611
- ty: 0
6612
- };
6613
- this.setupGlobalData(animData, document.body);
6614
- this.globalData.canvasContext = this.canvasContext;
6615
- this.globalData.renderer = this;
6616
- this.globalData.isDashed = false;
6617
- this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;
6618
- this.globalData.transformCanvas = this.transformCanvas;
6619
- this.elements = createSizedArray(animData.layers.length);
6620
-
6621
- this.updateContainerSize();
6622
- };
6623
-
6624
- CanvasRenderer.prototype.updateContainerSize = function () {
6625
- this.reset();
6626
- var elementWidth, elementHeight;
6627
- if (this.animationItem.wrapper && this.animationItem.container) {
6628
- elementWidth = this.animationItem.wrapper.offsetWidth;
6629
- elementHeight = this.animationItem.wrapper.offsetHeight;
6630
- this.animationItem.container.setAttribute('width', elementWidth * this.renderConfig.dpr);
6631
- this.animationItem.container.setAttribute('height', elementHeight * this.renderConfig.dpr);
6632
- } else {
6633
- elementWidth = this.canvasContext.canvas.width * this.renderConfig.dpr;
6634
- elementHeight = this.canvasContext.canvas.height * this.renderConfig.dpr;
6635
- }
6636
- var elementRel, animationRel;
6637
- if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {
6638
- var par = this.renderConfig.preserveAspectRatio.split(' ');
6639
- var fillType = par[1] || 'meet';
6640
- var pos = par[0] || 'xMidYMid';
6641
- var xPos = pos.substr(0, 4);
6642
- var yPos = pos.substr(4);
6643
- elementRel = elementWidth / elementHeight;
6644
- animationRel = this.transformCanvas.w / this.transformCanvas.h;
6645
- if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') {
6646
- this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);
6647
- this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);
6648
- } else {
6649
- this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);
6650
- this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);
6651
- }
6652
-
6653
- if (xPos === 'xMid' && ((animationRel < elementRel && fillType === 'meet') || (animationRel > elementRel && fillType === 'slice'))) {
6654
- this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr;
6655
- } else if (xPos === 'xMax' && ((animationRel < elementRel && fillType === 'meet') || (animationRel > elementRel && fillType === 'slice'))) {
6656
- this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;
6657
- } else {
6658
- this.transformCanvas.tx = 0;
6659
- }
6660
- if (yPos === 'YMid' && ((animationRel > elementRel && fillType === 'meet') || (animationRel < elementRel && fillType === 'slice'))) {
6661
- this.transformCanvas.ty = ((elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2) * this.renderConfig.dpr;
6662
- } else if (yPos === 'YMax' && ((animationRel > elementRel && fillType === 'meet') || (animationRel < elementRel && fillType === 'slice'))) {
6663
- this.transformCanvas.ty = ((elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w))) * this.renderConfig.dpr;
6664
- } else {
6665
- this.transformCanvas.ty = 0;
6666
- }
6667
-
6668
- } else if (this.renderConfig.preserveAspectRatio == 'none') {
6669
- this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);
6670
- this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);
6671
- this.transformCanvas.tx = 0;
6672
- this.transformCanvas.ty = 0;
6673
- } else {
6674
- this.transformCanvas.sx = this.renderConfig.dpr;
6675
- this.transformCanvas.sy = this.renderConfig.dpr;
6676
- this.transformCanvas.tx = 0;
6677
- this.transformCanvas.ty = 0;
6678
- }
6679
- this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];
6680
- /*var i, len = this.elements.length;
6681
- for(i=0;i<len;i+=1){
6682
- if(this.elements[i] && this.elements[i].data.ty === 0){
6683
- this.elements[i].resize(this.globalData.transformCanvas);
6684
- }
6685
- }*/
6686
- this.ctxTransform(this.transformCanvas.props);
6687
- this.canvasContext.beginPath();
6688
- this.canvasContext.rect(0, 0, this.transformCanvas.w, this.transformCanvas.h);
6689
- this.canvasContext.closePath();
6690
- this.canvasContext.clip();
6691
-
6692
- this.renderFrame(this.renderedFrame, true);
6693
- };
6694
-
6695
- CanvasRenderer.prototype.destroy = function () {
6696
- if (this.renderConfig.clearCanvas) {
6697
- this.animationItem.wrapper.innerHTML = '';
6698
- }
6699
- var i, len = this.layers ? this.layers.length : 0;
6700
- for (i = len - 1; i >= 0; i -= 1) {
6701
- if (this.elements[i]) {
6702
- this.elements[i].destroy();
6703
- }
6704
- }
6705
- this.elements.length = 0;
6706
- this.globalData.canvasContext = null;
6707
- this.animationItem.container = null;
6708
- this.destroyed = true;
6709
- };
6710
-
6711
- CanvasRenderer.prototype.renderFrame = function (num, forceRender) {
6712
- if ((this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender) || this.destroyed || num === -1) {
6713
- return;
6714
- }
6715
- this.renderedFrame = num;
6716
- this.globalData.frameNum = num - this.animationItem._isFirstFrame;
6717
- this.globalData.frameId += 1;
6718
- this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;
6719
- this.globalData.projectInterface.currentFrame = num;
6720
-
6721
- // console.log('--------');
6722
- // console.log('NEW: ',num);
6723
- var i, len = this.layers.length;
6724
- if (!this.completeLayers) {
6725
- this.checkLayers(num);
6726
- }
6727
-
6728
- for (i = 0; i < len; i++) {
6729
- if (this.completeLayers || this.elements[i]) {
6730
- this.elements[i].prepareFrame(num - this.layers[i].st);
6731
- }
6732
- }
6733
- if (this.globalData._mdf) {
6734
- if (this.renderConfig.clearCanvas === true) {
6735
- this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);
6736
- } else {
6737
- this.save();
6738
- }
6739
- for (i = len - 1; i >= 0; i -= 1) {
6740
- if (this.completeLayers || this.elements[i]) {
6741
- this.elements[i].renderFrame();
6742
- }
6743
- }
6744
- if (this.renderConfig.clearCanvas !== true) {
6745
- this.restore();
6746
- }
6747
- }
6748
- };
6749
-
6750
- CanvasRenderer.prototype.buildItem = function (pos) {
6751
- var elements = this.elements;
6752
- if (elements[pos] || this.layers[pos].ty == 99) {
6753
- return;
6754
- }
6755
- var element = this.createItem(this.layers[pos], this, this.globalData);
6756
- elements[pos] = element;
6757
- element.initExpressions();
6758
- /*if(this.layers[pos].ty === 0){
6759
- element.resize(this.globalData.transformCanvas);
6760
- }*/
6761
- };
6762
-
6763
- CanvasRenderer.prototype.checkPendingElements = function () {
6764
- while (this.pendingElements.length) {
6765
- var element = this.pendingElements.pop();
6766
- element.checkParenting();
6767
- }
6768
- };
6769
-
6770
- CanvasRenderer.prototype.hide = function () {
6771
- this.animationItem.container.style.display = 'none';
6772
- };
6773
-
6774
- CanvasRenderer.prototype.show = function () {
6775
- this.animationItem.container.style.display = 'block';
6776
- };
6777
-
6778
- function HybridRenderer(animationItem, config) {
6779
- this.animationItem = animationItem;
6780
- this.layers = null;
6781
- this.renderedFrame = -1;
6782
- this.renderConfig = {
6783
- className: (config && config.className) || '',
6784
- imagePreserveAspectRatio: (config && config.imagePreserveAspectRatio) || 'xMidYMid slice',
6785
- hideOnTransparent: (config && config.hideOnTransparent === false) ? false : true,
6786
- filterSize: {
6787
- width: config && config.filterSize && config.filterSize.width || '400%',
6788
- height: config && config.filterSize && config.filterSize.height || '400%',
6789
- x: config && config.filterSize && config.filterSize.x || '-100%',
6790
- y: config && config.filterSize && config.filterSize.y || '-100%',
6791
- }
6792
- };
6793
- this.globalData = {
6794
- _mdf: false,
6795
- frameNum: -1,
6796
- renderConfig: this.renderConfig
6797
- };
6798
- this.pendingElements = [];
6799
- this.elements = [];
6800
- this.threeDElements = [];
6801
- this.destroyed = false;
6802
- this.camera = null;
6803
- this.supports3d = true;
6804
- this.rendererType = 'html';
6805
-
6806
- }
6807
-
6808
- extendPrototype([BaseRenderer], HybridRenderer);
6809
-
6810
- HybridRenderer.prototype.buildItem = SVGRenderer.prototype.buildItem;
6811
-
6812
- HybridRenderer.prototype.checkPendingElements = function () {
6813
- while (this.pendingElements.length) {
6814
- var element = this.pendingElements.pop();
6815
- element.checkParenting();
6816
- }
6817
- };
6818
-
6819
- HybridRenderer.prototype.appendElementInPos = function (element, pos) {
6820
- var newDOMElement = element.getBaseElement();
6821
- if (!newDOMElement) {
6822
- return;
6823
- }
6824
- var layer = this.layers[pos];
6825
- if (!layer.ddd || !this.supports3d) {
6826
- if (this.threeDElements) {
6827
- this.addTo3dContainer(newDOMElement, pos);
6828
- } else {
6829
- var i = 0;
6830
- var nextDOMElement, nextLayer, tmpDOMElement;
6831
- while (i < pos) {
6832
- if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) {
6833
- nextLayer = this.elements[i];
6834
- tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();
6835
- nextDOMElement = tmpDOMElement || nextDOMElement;
6836
- }
6837
- i += 1;
6838
- }
6839
- if (nextDOMElement) {
6840
- if (!layer.ddd || !this.supports3d) {
6841
- this.layerElement.insertBefore(newDOMElement, nextDOMElement);
6842
- }
6843
- } else {
6844
- if (!layer.ddd || !this.supports3d) {
6845
- this.layerElement.appendChild(newDOMElement);
6846
- }
6847
- }
6848
- }
6849
-
6850
- } else {
6851
- this.addTo3dContainer(newDOMElement, pos);
6852
- }
6853
- };
6854
-
6855
- HybridRenderer.prototype.createShape = function (data) {
6856
- if (!this.supports3d) {
6857
- return new SVGShapeElement(data, this.globalData, this);
6858
- }
6859
- return new HShapeElement(data, this.globalData, this);
6860
- };
6861
-
6862
- HybridRenderer.prototype.createText = function (data) {
6863
- if (!this.supports3d) {
6864
- return new SVGTextElement(data, this.globalData, this);
6865
- }
6866
- return new HTextElement(data, this.globalData, this);
6867
- };
6868
-
6869
- HybridRenderer.prototype.createCamera = function (data) {
6870
- this.camera = new HCameraElement(data, this.globalData, this);
6871
- return this.camera;
6872
- };
6873
-
6874
- HybridRenderer.prototype.createImage = function (data) {
6875
- if (!this.supports3d) {
6876
- return new IImageElement(data, this.globalData, this);
6877
- }
6878
- return new HImageElement(data, this.globalData, this);
6879
- };
6880
-
6881
- HybridRenderer.prototype.createComp = function (data) {
6882
- if (!this.supports3d) {
6883
- return new SVGCompElement(data, this.globalData, this);
6884
- }
6885
- return new HCompElement(data, this.globalData, this);
6886
-
6887
- };
6888
-
6889
- HybridRenderer.prototype.createSolid = function (data) {
6890
- if (!this.supports3d) {
6891
- return new ISolidElement(data, this.globalData, this);
6892
- }
6893
- return new HSolidElement(data, this.globalData, this);
6894
- };
6895
-
6896
- HybridRenderer.prototype.createNull = SVGRenderer.prototype.createNull;
6897
-
6898
- HybridRenderer.prototype.getThreeDContainerByPos = function (pos) {
6899
- var i = 0,
6900
- len = this.threeDElements.length;
6901
- while (i < len) {
6902
- if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {
6903
- return this.threeDElements[i].perspectiveElem;
6904
- }
6905
- i += 1;
6906
- }
6907
- };
6908
-
6909
- HybridRenderer.prototype.createThreeDContainer = function (pos, type) {
6910
- var perspectiveElem = createTag('div');
6911
- styleDiv(perspectiveElem);
6912
- var container = createTag('div');
6913
- styleDiv(container);
6914
- if (type === '3d') {
6915
- perspectiveElem.style.width = this.globalData.compSize.w + 'px';
6916
- perspectiveElem.style.height = this.globalData.compSize.h + 'px';
6917
- perspectiveElem.style.transformOrigin = perspectiveElem.style.mozTransformOrigin = perspectiveElem.style.webkitTransformOrigin = "50% 50%";
6918
- container.style.transform = container.style.webkitTransform = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';
6919
- }
6920
-
6921
- perspectiveElem.appendChild(container);
6922
- //this.resizerElem.appendChild(perspectiveElem);
6923
- var threeDContainerData = {
6924
- container: container,
6925
- perspectiveElem: perspectiveElem,
6926
- startPos: pos,
6927
- endPos: pos,
6928
- type: type
6929
- };
6930
- this.threeDElements.push(threeDContainerData);
6931
- return threeDContainerData;
6932
- };
6933
-
6934
- HybridRenderer.prototype.build3dContainers = function () {
6935
- var i, len = this.layers.length;
6936
- var lastThreeDContainerData;
6937
- var currentContainer = '';
6938
- for (i = 0; i < len; i += 1) {
6939
- if (this.layers[i].ddd && this.layers[i].ty !== 3) {
6940
- if (currentContainer !== '3d') {
6941
- currentContainer = '3d';
6942
- lastThreeDContainerData = this.createThreeDContainer(i, '3d');
6943
- }
6944
- lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);
6945
- } else {
6946
- if (currentContainer !== '2d') {
6947
- currentContainer = '2d';
6948
- lastThreeDContainerData = this.createThreeDContainer(i, '2d');
6949
- }
6950
- lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);
6951
- }
6952
- }
6953
- len = this.threeDElements.length;
6954
- for (i = len - 1; i >= 0; i--) {
6955
- this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);
6956
- }
6957
- };
6958
-
6959
- HybridRenderer.prototype.addTo3dContainer = function (elem, pos) {
6960
- var i = 0,
6961
- len = this.threeDElements.length;
6962
- while (i < len) {
6963
- if (pos <= this.threeDElements[i].endPos) {
6964
- var j = this.threeDElements[i].startPos;
6965
- var nextElement;
6966
- while (j < pos) {
6967
- if (this.elements[j] && this.elements[j].getBaseElement) {
6968
- nextElement = this.elements[j].getBaseElement();
6969
- }
6970
- j += 1;
6971
- }
6972
- if (nextElement) {
6973
- this.threeDElements[i].container.insertBefore(elem, nextElement);
6974
- } else {
6975
- this.threeDElements[i].container.appendChild(elem);
6976
- }
6977
- break;
6978
- }
6979
- i += 1;
6980
- }
6981
- };
6982
-
6983
- HybridRenderer.prototype.configAnimation = function (animData) {
6984
- var resizerElem = createTag('div');
6985
- var wrapper = this.animationItem.wrapper;
6986
- resizerElem.style.width = animData.w + 'px';
6987
- resizerElem.style.height = animData.h + 'px';
6988
- this.resizerElem = resizerElem;
6989
- styleDiv(resizerElem);
6990
- resizerElem.style.transformStyle = resizerElem.style.webkitTransformStyle = resizerElem.style.mozTransformStyle = "flat";
6991
- if (this.renderConfig.className) {
6992
- resizerElem.setAttribute('class', this.renderConfig.className);
6993
- }
6994
- wrapper.appendChild(resizerElem);
6995
-
6996
- resizerElem.style.overflow = 'hidden';
6997
- var svg = createNS('svg');
6998
- svg.setAttribute('width', '1');
6999
- svg.setAttribute('height', '1');
7000
- styleDiv(svg);
7001
- this.resizerElem.appendChild(svg);
7002
- var defs = createNS('defs');
7003
- svg.appendChild(defs);
7004
- this.data = animData;
7005
- //Mask animation
7006
- this.setupGlobalData(animData, svg);
7007
- this.globalData.defs = defs;
7008
- this.layers = animData.layers;
7009
- this.layerElement = this.resizerElem;
7010
- this.build3dContainers();
7011
- this.updateContainerSize();
7012
- };
7013
-
7014
- HybridRenderer.prototype.destroy = function () {
7015
- this.animationItem.wrapper.innerHTML = '';
7016
- this.animationItem.container = null;
7017
- this.globalData.defs = null;
7018
- var i, len = this.layers ? this.layers.length : 0;
7019
- for (i = 0; i < len; i++) {
7020
- this.elements[i].destroy();
7021
- }
7022
- this.elements.length = 0;
7023
- this.destroyed = true;
7024
- this.animationItem = null;
7025
- };
7026
-
7027
- HybridRenderer.prototype.updateContainerSize = function () {
7028
- var elementWidth = this.animationItem.wrapper.offsetWidth;
7029
- var elementHeight = this.animationItem.wrapper.offsetHeight;
7030
- var elementRel = elementWidth / elementHeight;
7031
- var animationRel = this.globalData.compSize.w / this.globalData.compSize.h;
7032
- var sx, sy, tx, ty;
7033
- if (animationRel > elementRel) {
7034
- sx = elementWidth / (this.globalData.compSize.w);
7035
- sy = elementWidth / (this.globalData.compSize.w);
7036
- tx = 0;
7037
- ty = ((elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2);
7038
- } else {
7039
- sx = elementHeight / (this.globalData.compSize.h);
7040
- sy = elementHeight / (this.globalData.compSize.h);
7041
- tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2;
7042
- ty = 0;
7043
- }
7044
- this.resizerElem.style.transform = this.resizerElem.style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';
7045
- };
7046
-
7047
- HybridRenderer.prototype.renderFrame = SVGRenderer.prototype.renderFrame;
7048
-
7049
- HybridRenderer.prototype.hide = function () {
7050
- this.resizerElem.style.display = 'none';
7051
- };
7052
-
7053
- HybridRenderer.prototype.show = function () {
7054
- this.resizerElem.style.display = 'block';
7055
- };
7056
-
7057
- HybridRenderer.prototype.initItems = function () {
7058
- this.buildAllItems();
7059
- if (this.camera) {
7060
- this.camera.setup();
7061
- } else {
7062
- var cWidth = this.globalData.compSize.w;
7063
- var cHeight = this.globalData.compSize.h;
7064
- var i, len = this.threeDElements.length;
7065
- for (i = 0; i < len; i += 1) {
7066
- this.threeDElements[i].perspectiveElem.style.perspective = this.threeDElements[i].perspectiveElem.style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';
7067
- }
7068
- }
7069
- };
7070
-
7071
- HybridRenderer.prototype.searchExtraCompositions = function (assets) {
7072
- var i, len = assets.length;
7073
- var floatingContainer = createTag('div');
7074
- for (i = 0; i < len; i += 1) {
7075
- if (assets[i].xt) {
7076
- var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null);
7077
- comp.initExpressions();
7078
- this.globalData.projectInterface.registerComposition(comp);
7079
- }
7080
- }
7081
- };
7082
-
7083
- function MaskElement(data, element, globalData) {
7084
- this.data = data;
7085
- this.element = element;
7086
- this.globalData = globalData;
7087
- this.storedData = [];
7088
- this.masksProperties = this.data.masksProperties || [];
7089
- this.maskElement = null;
7090
- var defs = this.globalData.defs;
7091
- var i, len = this.masksProperties ? this.masksProperties.length : 0;
7092
- this.viewData = createSizedArray(len);
7093
- this.solidPath = '';
7094
-
7095
-
7096
- var path, properties = this.masksProperties;
7097
- var count = 0;
7098
- var currentMasks = [];
7099
- var j, jLen;
7100
- var layerId = createElementID();
7101
- var rect, expansor, feMorph, x;
7102
- var maskType = 'clipPath',
7103
- maskRef = 'clip-path';
7104
- for (i = 0; i < len; i++) {
7105
- if ((properties[i].mode !== 'a' && properties[i].mode !== 'n') || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {
7106
- maskType = 'mask';
7107
- maskRef = 'mask';
7108
- }
7109
-
7110
- if ((properties[i].mode == 's' || properties[i].mode == 'i') && count === 0) {
7111
- rect = createNS('rect');
7112
- rect.setAttribute('fill', '#ffffff');
7113
- rect.setAttribute('width', this.element.comp.data.w || 0);
7114
- rect.setAttribute('height', this.element.comp.data.h || 0);
7115
- currentMasks.push(rect);
7116
- } else {
7117
- rect = null;
7118
- }
7119
-
7120
- path = createNS('path');
7121
- if (properties[i].mode == 'n') {
7122
- // TODO move this to a factory or to a constructor
7123
- this.viewData[i] = {
7124
- op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),
7125
- prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),
7126
- elem: path,
7127
- lastPath: ''
7128
- };
7129
- defs.appendChild(path);
7130
- continue;
7131
- }
7132
- count += 1;
7133
-
7134
- path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');
7135
- path.setAttribute('clip-rule', 'nonzero');
7136
- var filterID;
7137
-
7138
- if (properties[i].x.k !== 0) {
7139
- maskType = 'mask';
7140
- maskRef = 'mask';
7141
- x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);
7142
- filterID = createElementID();
7143
- expansor = createNS('filter');
7144
- expansor.setAttribute('id', filterID);
7145
- feMorph = createNS('feMorphology');
7146
- feMorph.setAttribute('operator', 'erode');
7147
- feMorph.setAttribute('in', 'SourceGraphic');
7148
- feMorph.setAttribute('radius', '0');
7149
- expansor.appendChild(feMorph);
7150
- defs.appendChild(expansor);
7151
- path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');
7152
- } else {
7153
- feMorph = null;
7154
- x = null;
7155
- }
7156
-
7157
- // TODO move this to a factory or to a constructor
7158
- this.storedData[i] = {
7159
- elem: path,
7160
- x: x,
7161
- expan: feMorph,
7162
- lastPath: '',
7163
- lastOperator: '',
7164
- filterId: filterID,
7165
- lastRadius: 0
7166
- };
7167
- if (properties[i].mode == 'i') {
7168
- jLen = currentMasks.length;
7169
- var g = createNS('g');
7170
- for (j = 0; j < jLen; j += 1) {
7171
- g.appendChild(currentMasks[j]);
7172
- }
7173
- var mask = createNS('mask');
7174
- mask.setAttribute('mask-type', 'alpha');
7175
- mask.setAttribute('id', layerId + '_' + count);
7176
- mask.appendChild(path);
7177
- defs.appendChild(mask);
7178
- g.setAttribute('mask', 'url(' + locationHref + '#' + layerId + '_' + count + ')');
7179
-
7180
- currentMasks.length = 0;
7181
- currentMasks.push(g);
7182
- } else {
7183
- currentMasks.push(path);
7184
- }
7185
- if (properties[i].inv && !this.solidPath) {
7186
- this.solidPath = this.createLayerSolidPath();
7187
- }
7188
- // TODO move this to a factory or to a constructor
7189
- this.viewData[i] = {
7190
- elem: path,
7191
- lastPath: '',
7192
- op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),
7193
- prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),
7194
- invRect: rect
7195
- };
7196
- if (!this.viewData[i].prop.k) {
7197
- this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);
7198
- }
7199
- }
7200
-
7201
- this.maskElement = createNS(maskType);
7202
-
7203
- len = currentMasks.length;
7204
- for (i = 0; i < len; i += 1) {
7205
- this.maskElement.appendChild(currentMasks[i]);
7206
- }
7207
-
7208
- if (count > 0) {
7209
- this.maskElement.setAttribute('id', layerId);
7210
- this.element.maskedElement.setAttribute(maskRef, "url(" + locationHref + "#" + layerId + ")");
7211
- defs.appendChild(this.maskElement);
7212
- }
7213
- if (this.viewData.length) {
7214
- this.element.addRenderableComponent(this);
7215
- }
7216
-
7217
- }
7218
-
7219
- MaskElement.prototype.getMaskProperty = function (pos) {
7220
- return this.viewData[pos].prop;
7221
- };
7222
-
7223
- MaskElement.prototype.renderFrame = function (isFirstFrame) {
7224
- var finalMat = this.element.finalTransform.mat;
7225
- var i, len = this.masksProperties.length;
7226
- for (i = 0; i < len; i++) {
7227
- if (this.viewData[i].prop._mdf || isFirstFrame) {
7228
- this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);
7229
- }
7230
- if (this.viewData[i].op._mdf || isFirstFrame) {
7231
- this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);
7232
- }
7233
- if (this.masksProperties[i].mode !== 'n') {
7234
- if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {
7235
- this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS())
7236
- }
7237
- if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {
7238
- var feMorph = this.storedData[i].expan;
7239
- if (this.storedData[i].x.v < 0) {
7240
- if (this.storedData[i].lastOperator !== 'erode') {
7241
- this.storedData[i].lastOperator = 'erode';
7242
- this.storedData[i].elem.setAttribute('filter', 'url(' + locationHref + '#' + this.storedData[i].filterId + ')');
7243
- }
7244
- feMorph.setAttribute('radius', -this.storedData[i].x.v);
7245
- } else {
7246
- if (this.storedData[i].lastOperator !== 'dilate') {
7247
- this.storedData[i].lastOperator = 'dilate';
7248
- this.storedData[i].elem.setAttribute('filter', null);
7249
- }
7250
- this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);
7251
-
7252
- }
7253
- }
7254
- }
7255
- }
7256
- };
7257
-
7258
- MaskElement.prototype.getMaskelement = function () {
7259
- return this.maskElement;
7260
- };
7261
-
7262
- MaskElement.prototype.createLayerSolidPath = function () {
7263
- var path = 'M0,0 ';
7264
- path += ' h' + this.globalData.compSize.w;
7265
- path += ' v' + this.globalData.compSize.h;
7266
- path += ' h-' + this.globalData.compSize.w;
7267
- path += ' v-' + this.globalData.compSize.h + ' ';
7268
- return path;
7269
- };
7270
-
7271
- MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {
7272
- var pathString = " M" + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];
7273
- var i, len;
7274
- len = pathNodes._length;
7275
- for (i = 1; i < len; i += 1) {
7276
- //pathString += " C"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + " "+pathNodes.i[i][0]+','+pathNodes.i[i][1] + " "+pathNodes.v[i][0]+','+pathNodes.v[i][1];
7277
- pathString += " C" + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + " " + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + " " + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];
7278
- }
7279
- //pathString += " C"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + " "+pathNodes.i[0][0]+','+pathNodes.i[0][1] + " "+pathNodes.v[0][0]+','+pathNodes.v[0][1];
7280
- if (pathNodes.c && len > 1) {
7281
- pathString += " C" + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + " " + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + " " + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];
7282
- }
7283
- //pathNodes.__renderedString = pathString;
7284
-
7285
- if (viewData.lastPath !== pathString) {
7286
- var pathShapeValue = '';
7287
- if (viewData.elem) {
7288
- if (pathNodes.c) {
7289
- pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;
7290
- }
7291
- viewData.elem.setAttribute('d', pathShapeValue);
7292
- }
7293
- viewData.lastPath = pathString;
7294
- }
7295
- };
7296
-
7297
- MaskElement.prototype.destroy = function () {
7298
- this.element = null;
7299
- this.globalData = null;
7300
- this.maskElement = null;
7301
- this.data = null;
7302
- this.masksProperties = null;
7303
- };
7304
-
7305
- /**
7306
- * @file
7307
- * Handles AE's layer parenting property.
7308
- *
7309
- */
7310
-
7311
- function HierarchyElement() { }
7312
-
7313
- HierarchyElement.prototype = {
7314
- /**
7315
- * @function
7316
- * Initializes hierarchy properties
7317
- *
7318
- */
7319
- initHierarchy: function () {
7320
- //element's parent list
7321
- this.hierarchy = [];
7322
- //if element is parent of another layer _isParent will be true
7323
- this._isParent = false;
7324
- this.checkParenting();
7325
- },
7326
- /**
7327
- * @function
7328
- * Sets layer's hierarchy.
7329
- * @param {array} hierarch
7330
- * layer's parent list
7331
- *
7332
- */
7333
- setHierarchy: function (hierarchy) {
7334
- this.hierarchy = hierarchy;
7335
- },
7336
- /**
7337
- * @function
7338
- * Sets layer as parent.
7339
- *
7340
- */
7341
- setAsParent: function () {
7342
- this._isParent = true;
7343
- },
7344
- /**
7345
- * @function
7346
- * Searches layer's parenting chain
7347
- *
7348
- */
7349
- checkParenting: function () {
7350
- if (this.data.parent !== undefined) {
7351
- this.comp.buildElementParenting(this, this.data.parent, []);
7352
- }
7353
- }
7354
- };
7355
- /**
7356
- * @file
7357
- * Handles element's layer frame update.
7358
- * Checks layer in point and out point
7359
- *
7360
- */
7361
-
7362
- function FrameElement() { }
7363
-
7364
- FrameElement.prototype = {
7365
- /**
7366
- * @function
7367
- * Initializes frame related properties.
7368
- *
7369
- */
7370
- initFrame: function () {
7371
- //set to true when inpoint is rendered
7372
- this._isFirstFrame = false;
7373
- //list of animated properties
7374
- this.dynamicProperties = [];
7375
- // If layer has been modified in current tick this will be true
7376
- this._mdf = false;
7377
- },
7378
- /**
7379
- * @function
7380
- * Calculates all dynamic values
7381
- *
7382
- * @param {number} num
7383
- * current frame number in Layer's time
7384
- * @param {boolean} isVisible
7385
- * if layers is currently in range
7386
- *
7387
- */
7388
- prepareProperties: function (num, isVisible) {
7389
- var i, len = this.dynamicProperties.length;
7390
- for (i = 0; i < len; i += 1) {
7391
- if (isVisible || (this._isParent && this.dynamicProperties[i].propType === 'transform')) {
7392
- this.dynamicProperties[i].getValue();
7393
- if (this.dynamicProperties[i]._mdf) {
7394
- this.globalData._mdf = true;
7395
- this._mdf = true;
7396
- }
7397
- }
7398
- }
7399
- },
7400
- addDynamicProperty: function (prop) {
7401
- if (this.dynamicProperties.indexOf(prop) === -1) {
7402
- this.dynamicProperties.push(prop);
7403
- }
7404
- }
7405
- };
7406
-
7407
- function TransformElement() { }
7408
-
7409
- TransformElement.prototype = {
7410
- initTransform: function () {
7411
- this.finalTransform = {
7412
- mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {
7413
- o: 0
7414
- },
7415
- _matMdf: false,
7416
- _opMdf: false,
7417
- mat: new Matrix()
7418
- };
7419
- if (this.data.ao) {
7420
- this.finalTransform.mProp.autoOriented = true;
7421
- }
7422
-
7423
- //TODO: check TYPE 11: Guided elements
7424
- if (this.data.ty !== 11) {
7425
- //this.createElements();
7426
- }
7427
- },
7428
- renderTransform: function () {
7429
-
7430
- this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;
7431
- this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;
7432
-
7433
- if (this.hierarchy) {
7434
- var mat;
7435
- var finalMat = this.finalTransform.mat;
7436
- var i = 0,
7437
- len = this.hierarchy.length;
7438
- //Checking if any of the transformation matrices in the hierarchy chain has changed.
7439
- if (!this.finalTransform._matMdf) {
7440
- while (i < len) {
7441
- if (this.hierarchy[i].finalTransform.mProp._mdf) {
7442
- this.finalTransform._matMdf = true;
7443
- break;
7444
- }
7445
- i += 1;
7446
- }
7447
- }
7448
-
7449
- if (this.finalTransform._matMdf) {
7450
- mat = this.finalTransform.mProp.v.props;
7451
- finalMat.cloneFromProps(mat);
7452
- for (i = 0; i < len; i += 1) {
7453
- mat = this.hierarchy[i].finalTransform.mProp.v.props;
7454
- finalMat.transform(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5], mat[6], mat[7], mat[8], mat[9], mat[10], mat[11], mat[12], mat[13], mat[14], mat[15]);
7455
- }
7456
- }
7457
- }
7458
- },
7459
- globalToLocal: function (pt) {
7460
- var transforms = [];
7461
- transforms.push(this.finalTransform);
7462
- var flag = true;
7463
- var comp = this.comp;
7464
- while (flag) {
7465
- if (comp.finalTransform) {
7466
- if (comp.data.hasMask) {
7467
- transforms.splice(0, 0, comp.finalTransform);
7468
- }
7469
- comp = comp.comp;
7470
- } else {
7471
- flag = false;
7472
- }
7473
- }
7474
- var i, len = transforms.length,
7475
- ptNew;
7476
- for (i = 0; i < len; i += 1) {
7477
- ptNew = transforms[i].mat.applyToPointArray(0, 0, 0);
7478
- //ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);
7479
- pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];
7480
- }
7481
- return pt;
7482
- },
7483
- mHelper: new Matrix()
7484
- };
7485
-
7486
- function RenderableElement() {
7487
-
7488
- }
7489
-
7490
- RenderableElement.prototype = {
7491
- initRenderable: function () {
7492
- //layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange
7493
- this.isInRange = false;
7494
- //layer's display state
7495
- this.hidden = false;
7496
- // If layer's transparency equals 0, it can be hidden
7497
- this.isTransparent = false;
7498
- //list of animated components
7499
- this.renderableComponents = [];
7500
- },
7501
- addRenderableComponent: function (component) {
7502
- if (this.renderableComponents.indexOf(component) === -1) {
7503
- this.renderableComponents.push(component);
7504
- }
7505
- },
7506
- removeRenderableComponent: function (component) {
7507
- if (this.renderableComponents.indexOf(component) !== -1) {
7508
- this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);
7509
- }
7510
- },
7511
- prepareRenderableFrame: function (num) {
7512
- this.checkLayerLimits(num);
7513
- },
7514
- checkTransparency: function () {
7515
- if (this.finalTransform.mProp.o.v <= 0) {
7516
- if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {
7517
- this.isTransparent = true;
7518
- this.hide();
7519
- }
7520
- } else if (this.isTransparent) {
7521
- this.isTransparent = false;
7522
- this.show();
7523
- }
7524
- },
7525
- /**
7526
- * @function
7527
- * Initializes frame related properties.
7528
- *
7529
- * @param {number} num
7530
- * current frame number in Layer's time
7531
- *
7532
- */
7533
- checkLayerLimits: function (num) {
7534
- if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {
7535
- if (this.isInRange !== true) {
7536
- this.globalData._mdf = true;
7537
- this._mdf = true;
7538
- this.isInRange = true;
7539
- this.show();
7540
- }
7541
- } else {
7542
- if (this.isInRange !== false) {
7543
- this.globalData._mdf = true;
7544
- this.isInRange = false;
7545
- this.hide();
7546
- }
7547
- }
7548
- },
7549
- renderRenderable: function () {
7550
- var i, len = this.renderableComponents.length;
7551
- for (i = 0; i < len; i += 1) {
7552
- this.renderableComponents[i].renderFrame(this._isFirstFrame);
7553
- }
7554
- /*this.maskManager.renderFrame(this.finalTransform.mat);
7555
- this.renderableEffectsManager.renderFrame(this._isFirstFrame);*/
7556
- },
7557
- sourceRectAtTime: function () {
7558
- return {
7559
- top: 0,
7560
- left: 0,
7561
- width: 100,
7562
- height: 100
7563
- };
7564
- },
7565
- getLayerSize: function () {
7566
- if (this.data.ty === 5) {
7567
- return {
7568
- w: this.data.textData.width,
7569
- h: this.data.textData.height
7570
- };
7571
- } else {
7572
- return {
7573
- w: this.data.width,
7574
- h: this.data.height
7575
- };
7576
- }
7577
- }
7578
- };
7579
-
7580
- function RenderableDOMElement() { }
7581
-
7582
- (function () {
7583
- var _prototype = {
7584
- initElement: function (data, globalData, comp) {
7585
- this.initFrame();
7586
- this.initBaseData(data, globalData, comp);
7587
- this.initTransform(data, globalData, comp);
7588
- this.initHierarchy();
7589
- this.initRenderable();
7590
- this.initRendererElement();
7591
- this.createContainerElements();
7592
- this.createRenderableComponents();
7593
- this.createContent();
7594
- this.hide();
7595
- },
7596
- hide: function () {
7597
- if (!this.hidden && (!this.isInRange || this.isTransparent)) {
7598
- var elem = this.baseElement || this.layerElement;
7599
- elem.style.display = 'none';
7600
- this.hidden = true;
7601
- }
7602
- },
7603
- show: function () {
7604
- if (this.isInRange && !this.isTransparent) {
7605
- if (!this.data.hd) {
7606
- var elem = this.baseElement || this.layerElement;
7607
- elem.style.display = 'block';
7608
- }
7609
- this.hidden = false;
7610
- this._isFirstFrame = true;
7611
- }
7612
- },
7613
- renderFrame: function () {
7614
- //If it is exported as hidden (data.hd === true) no need to render
7615
- //If it is not visible no need to render
7616
- if (this.data.hd || this.hidden) {
7617
- return;
7618
- }
7619
- this.renderTransform();
7620
- this.renderRenderable();
7621
- this.renderElement();
7622
- this.renderInnerContent();
7623
- if (this._isFirstFrame) {
7624
- this._isFirstFrame = false;
7625
- }
7626
- },
7627
- renderInnerContent: function () { },
7628
- prepareFrame: function (num) {
7629
- this._mdf = false;
7630
- this.prepareRenderableFrame(num);
7631
- this.prepareProperties(num, this.isInRange);
7632
- this.checkTransparency();
7633
- },
7634
- destroy: function () {
7635
- this.innerElem = null;
7636
- this.destroyBaseElement();
7637
- }
7638
- };
7639
- extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);
7640
- }());
7641
-
7642
- function ProcessedElement(element, position) {
7643
- this.elem = element;
7644
- this.pos = position;
7645
- }
7646
-
7647
- function SVGStyleData(data, level) {
7648
- this.data = data;
7649
- this.type = data.ty;
7650
- this.d = '';
7651
- this.lvl = level;
7652
- this._mdf = false;
7653
- this.closed = data.hd === true;
7654
- this.pElem = createNS('path');
7655
- this.msElem = null;
7656
- }
7657
-
7658
- SVGStyleData.prototype.reset = function () {
7659
- this.d = '';
7660
- this._mdf = false;
7661
- };
7662
-
7663
- function SVGShapeData(transformers, level, shape) {
7664
- this.caches = [];
7665
- this.styles = [];
7666
- this.transformers = transformers;
7667
- this.lStr = '';
7668
- this.sh = shape;
7669
- this.lvl = level;
7670
- //TODO find if there are some cases where _isAnimated can be false.
7671
- // For now, since shapes add up with other shapes. They have to be calculated every time.
7672
- // One way of finding out is checking if all styles associated to this shape depend only of this shape
7673
- this._isAnimated = !!shape.k;
7674
- // TODO: commenting this for now since all shapes are animated
7675
- var i = 0,
7676
- len = transformers.length;
7677
- while (i < len) {
7678
- if (transformers[i].mProps.dynamicProperties.length) {
7679
- this._isAnimated = true;
7680
- break;
7681
- }
7682
- i += 1;
7683
- }
7684
- }
7685
-
7686
- SVGShapeData.prototype.setAsAnimated = function () {
7687
- this._isAnimated = true;
7688
- }
7689
-
7690
- function SVGTransformData(mProps, op, container) {
7691
- this.transform = {
7692
- mProps: mProps,
7693
- op: op,
7694
- container: container
7695
- };
7696
- this.elements = [];
7697
- this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;
7698
- }
7699
-
7700
- function SVGStrokeStyleData(elem, data, styleOb) {
7701
- this.initDynamicPropertyContainer(elem);
7702
- this.getValue = this.iterateDynamicProperties;
7703
- this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);
7704
- this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);
7705
- this.d = new DashProperty(elem, data.d || {}, 'svg', this);
7706
- this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);
7707
- this.style = styleOb;
7708
- this._isAnimated = !!this._isAnimated;
7709
- }
7710
-
7711
- extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);
7712
-
7713
- function SVGFillStyleData(elem, data, styleOb) {
7714
- this.initDynamicPropertyContainer(elem);
7715
- this.getValue = this.iterateDynamicProperties;
7716
- this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);
7717
- this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);
7718
- this.style = styleOb;
7719
- }
7720
-
7721
- extendPrototype([DynamicPropertyContainer], SVGFillStyleData);
7722
-
7723
- function SVGGradientFillStyleData(elem, data, styleOb) {
7724
- this.initDynamicPropertyContainer(elem);
7725
- this.getValue = this.iterateDynamicProperties;
7726
- this.initGradientData(elem, data, styleOb);
7727
- }
7728
-
7729
- SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {
7730
- this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);
7731
- this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);
7732
- this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);
7733
- this.h = PropertyFactory.getProp(elem, data.h || {
7734
- k: 0
7735
- }, 0, 0.01, this);
7736
- this.a = PropertyFactory.getProp(elem, data.a || {
7737
- k: 0
7738
- }, 0, degToRads, this);
7739
- this.g = new GradientProperty(elem, data.g, this);
7740
- this.style = styleOb;
7741
- this.stops = [];
7742
- this.setGradientData(styleOb.pElem, data);
7743
- this.setGradientOpacity(data, styleOb);
7744
- this._isAnimated = !!this._isAnimated;
7745
-
7746
- };
7747
-
7748
- SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {
7749
-
7750
- var gradientId = createElementID();
7751
- var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');
7752
- gfill.setAttribute('id', gradientId);
7753
- gfill.setAttribute('spreadMethod', 'pad');
7754
- gfill.setAttribute('gradientUnits', 'userSpaceOnUse');
7755
- var stops = [];
7756
- var stop, j, jLen;
7757
- jLen = data.g.p * 4;
7758
- for (j = 0; j < jLen; j += 4) {
7759
- stop = createNS('stop');
7760
- gfill.appendChild(stop);
7761
- stops.push(stop);
7762
- }
7763
- pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + locationHref + '#' + gradientId + ')');
7764
-
7765
- this.gf = gfill;
7766
- this.cst = stops;
7767
- };
7768
-
7769
- SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {
7770
- if (this.g._hasOpacity && !this.g._collapsable) {
7771
- var stop, j, jLen;
7772
- var mask = createNS("mask");
7773
- var maskElement = createNS('path');
7774
- mask.appendChild(maskElement);
7775
- var opacityId = createElementID();
7776
- var maskId = createElementID();
7777
- mask.setAttribute('id', maskId);
7778
- var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');
7779
- opFill.setAttribute('id', opacityId);
7780
- opFill.setAttribute('spreadMethod', 'pad');
7781
- opFill.setAttribute('gradientUnits', 'userSpaceOnUse');
7782
- jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;
7783
- var stops = this.stops;
7784
- for (j = data.g.p * 4; j < jLen; j += 2) {
7785
- stop = createNS('stop');
7786
- stop.setAttribute('stop-color', 'rgb(255,255,255)');
7787
- opFill.appendChild(stop);
7788
- stops.push(stop);
7789
- }
7790
- maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + locationHref + '#' + opacityId + ')');
7791
- this.of = opFill;
7792
- this.ms = mask;
7793
- this.ost = stops;
7794
- this.maskId = maskId;
7795
- styleOb.msElem = maskElement;
7796
- }
7797
- };
7798
-
7799
- extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);
7800
-
7801
- function SVGGradientStrokeStyleData(elem, data, styleOb) {
7802
- this.initDynamicPropertyContainer(elem);
7803
- this.getValue = this.iterateDynamicProperties;
7804
- this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);
7805
- this.d = new DashProperty(elem, data.d || {}, 'svg', this);
7806
- this.initGradientData(elem, data, styleOb);
7807
- this._isAnimated = !!this._isAnimated;
7808
- }
7809
-
7810
- extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);
7811
-
7812
- function ShapeGroupData() {
7813
- this.it = [];
7814
- this.prevViewData = [];
7815
- this.gr = createNS('g');
7816
- }
7817
- var SVGElementsRenderer = (function () {
7818
- var _identityMatrix = new Matrix();
7819
- var _matrixHelper = new Matrix();
7820
-
7821
- var ob = {
7822
- createRenderFunction: createRenderFunction
7823
- }
7824
-
7825
- function createRenderFunction(data) {
7826
- var ty = data.ty;
7827
- switch (data.ty) {
7828
- case 'fl':
7829
- return renderFill;
7830
- case 'gf':
7831
- return renderGradient;
7832
- case 'gs':
7833
- return renderGradientStroke;
7834
- case 'st':
7835
- return renderStroke;
7836
- case 'sh':
7837
- case 'el':
7838
- case 'rc':
7839
- case 'sr':
7840
- return renderPath;
7841
- case 'tr':
7842
- return renderContentTransform;
7843
- }
7844
- }
7845
-
7846
- function renderContentTransform(styleData, itemData, isFirstFrame) {
7847
- if (isFirstFrame || itemData.transform.op._mdf) {
7848
- itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);
7849
- }
7850
- if (isFirstFrame || itemData.transform.mProps._mdf) {
7851
- itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());
7852
- }
7853
- }
7854
-
7855
- function renderPath(styleData, itemData, isFirstFrame) {
7856
- var j, jLen, pathStringTransformed, redraw, pathNodes, l, lLen = itemData.styles.length;
7857
- var lvl = itemData.lvl;
7858
- var paths, mat, props, iterations, k;
7859
- for (l = 0; l < lLen; l += 1) {
7860
- redraw = itemData.sh._mdf || isFirstFrame;
7861
- if (itemData.styles[l].lvl < lvl) {
7862
- mat = _matrixHelper.reset();
7863
- iterations = lvl - itemData.styles[l].lvl;
7864
- k = itemData.transformers.length - 1;
7865
- while (!redraw && iterations > 0) {
7866
- redraw = itemData.transformers[k].mProps._mdf || redraw;
7867
- iterations--;
7868
- k--;
7869
- }
7870
- if (redraw) {
7871
- iterations = lvl - itemData.styles[l].lvl;
7872
- k = itemData.transformers.length - 1;
7873
- while (iterations > 0) {
7874
- props = itemData.transformers[k].mProps.v.props;
7875
- mat.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);
7876
- iterations--;
7877
- k--;
7878
- }
7879
- }
7880
- } else {
7881
- mat = _identityMatrix;
7882
- }
7883
- paths = itemData.sh.paths;
7884
- jLen = paths._length;
7885
- if (redraw) {
7886
- pathStringTransformed = '';
7887
- for (j = 0; j < jLen; j += 1) {
7888
- pathNodes = paths.shapes[j];
7889
- if (pathNodes && pathNodes._length) {
7890
- pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);
7891
- }
7892
- }
7893
- itemData.caches[l] = pathStringTransformed;
7894
- } else {
7895
- pathStringTransformed = itemData.caches[l];
7896
- }
7897
- itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;
7898
- itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;
7899
- }
7900
- }
7901
-
7902
- function renderFill(styleData, itemData, isFirstFrame) {
7903
- var styleElem = itemData.style;
7904
-
7905
- if (itemData.c._mdf || isFirstFrame) {
7906
- styleElem.pElem.setAttribute('fill', 'rgb(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(itemData.c.v[2]) + ')');
7907
- }
7908
- if (itemData.o._mdf || isFirstFrame) {
7909
- styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);
7910
- }
7911
- };
7912
-
7913
- function renderGradientStroke(styleData, itemData, isFirstFrame) {
7914
- renderGradient(styleData, itemData, isFirstFrame);
7915
- renderStroke(styleData, itemData, isFirstFrame);
7916
- }
7917
-
7918
- function renderGradient(styleData, itemData, isFirstFrame) {
7919
- var gfill = itemData.gf;
7920
- var hasOpacity = itemData.g._hasOpacity;
7921
- var pt1 = itemData.s.v,
7922
- pt2 = itemData.e.v;
7923
-
7924
- if (itemData.o._mdf || isFirstFrame) {
7925
- var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';
7926
- itemData.style.pElem.setAttribute(attr, itemData.o.v);
7927
- }
7928
- if (itemData.s._mdf || isFirstFrame) {
7929
- var attr1 = styleData.t === 1 ? 'x1' : 'cx';
7930
- var attr2 = attr1 === 'x1' ? 'y1' : 'cy';
7931
- gfill.setAttribute(attr1, pt1[0]);
7932
- gfill.setAttribute(attr2, pt1[1]);
7933
- if (hasOpacity && !itemData.g._collapsable) {
7934
- itemData.of.setAttribute(attr1, pt1[0]);
7935
- itemData.of.setAttribute(attr2, pt1[1]);
7936
- }
7937
- }
7938
- var stops, i, len, stop;
7939
- if (itemData.g._cmdf || isFirstFrame) {
7940
- stops = itemData.cst;
7941
- var cValues = itemData.g.c;
7942
- len = stops.length;
7943
- for (i = 0; i < len; i += 1) {
7944
- stop = stops[i];
7945
- stop.setAttribute('offset', cValues[i * 4] + '%');
7946
- stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');
7947
- }
7948
- }
7949
- if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {
7950
- var oValues = itemData.g.o;
7951
- if (itemData.g._collapsable) {
7952
- stops = itemData.cst;
7953
- } else {
7954
- stops = itemData.ost;
7955
- }
7956
- len = stops.length;
7957
- for (i = 0; i < len; i += 1) {
7958
- stop = stops[i];
7959
- if (!itemData.g._collapsable) {
7960
- stop.setAttribute('offset', oValues[i * 2] + '%');
7961
- }
7962
- stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);
7963
- }
7964
- }
7965
- if (styleData.t === 1) {
7966
- if (itemData.e._mdf || isFirstFrame) {
7967
- gfill.setAttribute('x2', pt2[0]);
7968
- gfill.setAttribute('y2', pt2[1]);
7969
- if (hasOpacity && !itemData.g._collapsable) {
7970
- itemData.of.setAttribute('x2', pt2[0]);
7971
- itemData.of.setAttribute('y2', pt2[1]);
7972
- }
7973
- }
7974
- } else {
7975
- var rad;
7976
- if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {
7977
- rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));
7978
- gfill.setAttribute('r', rad);
7979
- if (hasOpacity && !itemData.g._collapsable) {
7980
- itemData.of.setAttribute('r', rad);
7981
- }
7982
- }
7983
- if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {
7984
- if (!rad) {
7985
- rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));
7986
- }
7987
- var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);
7988
-
7989
- var percent = itemData.h.v >= 1 ? 0.99 : itemData.h.v <= -1 ? -0.99 : itemData.h.v;
7990
- var dist = rad * percent;
7991
- var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];
7992
- var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];
7993
- gfill.setAttribute('fx', x);
7994
- gfill.setAttribute('fy', y);
7995
- if (hasOpacity && !itemData.g._collapsable) {
7996
- itemData.of.setAttribute('fx', x);
7997
- itemData.of.setAttribute('fy', y);
7998
- }
7999
- }
8000
- //gfill.setAttribute('fy','200');
8001
- }
8002
- };
8003
-
8004
- function renderStroke(styleData, itemData, isFirstFrame) {
8005
- var styleElem = itemData.style;
8006
- var d = itemData.d;
8007
- if (d && (d._mdf || isFirstFrame) && d.dashStr) {
8008
- styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);
8009
- styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);
8010
- }
8011
- if (itemData.c && (itemData.c._mdf || isFirstFrame)) {
8012
- styleElem.pElem.setAttribute('stroke', 'rgb(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(itemData.c.v[2]) + ')');
8013
- }
8014
- if (itemData.o._mdf || isFirstFrame) {
8015
- styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);
8016
- }
8017
- if (itemData.w._mdf || isFirstFrame) {
8018
- styleElem.pElem.setAttribute('stroke-width', itemData.w.v);
8019
- if (styleElem.msElem) {
8020
- styleElem.msElem.setAttribute('stroke-width', itemData.w.v);
8021
- }
8022
- }
8023
- };
8024
-
8025
- return ob;
8026
- }())
8027
-
8028
- function ShapeTransformManager() {
8029
- this.sequences = {};
8030
- this.sequenceList = [];
8031
- this.transform_key_count = 0;
8032
- }
8033
-
8034
- ShapeTransformManager.prototype = {
8035
- addTransformSequence: function (transforms) {
8036
- var i, len = transforms.length;
8037
- var key = '_';
8038
- for (i = 0; i < len; i += 1) {
8039
- key += transforms[i].transform.key + '_';
8040
- }
8041
- var sequence = this.sequences[key];
8042
- if (!sequence) {
8043
- sequence = {
8044
- transforms: [].concat(transforms),
8045
- finalTransform: new Matrix(),
8046
- _mdf: false
8047
- };
8048
- this.sequences[key] = sequence;
8049
- this.sequenceList.push(sequence);
8050
- }
8051
- return sequence;
8052
- },
8053
- processSequence: function (sequence, isFirstFrame) {
8054
- var i = 0,
8055
- len = sequence.transforms.length,
8056
- _mdf = isFirstFrame;
8057
- while (i < len && !isFirstFrame) {
8058
- if (sequence.transforms[i].transform.mProps._mdf) {
8059
- _mdf = true;
8060
- break;
8061
- }
8062
- i += 1
8063
- }
8064
- if (_mdf) {
8065
- var props;
8066
- sequence.finalTransform.reset();
8067
- for (i = len - 1; i >= 0; i -= 1) {
8068
- props = sequence.transforms[i].transform.mProps.v.props;
8069
- sequence.finalTransform.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);
8070
- }
8071
- }
8072
- sequence._mdf = _mdf;
8073
-
8074
- },
8075
- processSequences: function (isFirstFrame) {
8076
- var i, len = this.sequenceList.length;
8077
- for (i = 0; i < len; i += 1) {
8078
- this.processSequence(this.sequenceList[i], isFirstFrame);
8079
- }
8080
-
8081
- },
8082
- getNewKey: function () {
8083
- return '_' + this.transform_key_count++;
8084
- }
8085
- }
8086
-
8087
- function CVShapeData(element, data, styles, transformsManager) {
8088
- this.styledShapes = [];
8089
- this.tr = [0, 0, 0, 0, 0, 0];
8090
- var ty = 4;
8091
- if (data.ty == 'rc') {
8092
- ty = 5;
8093
- } else if (data.ty == 'el') {
8094
- ty = 6;
8095
- } else if (data.ty == 'sr') {
8096
- ty = 7;
8097
- }
8098
- this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);
8099
- var i, len = styles.length,
8100
- styledShape;
8101
- for (i = 0; i < len; i += 1) {
8102
- if (!styles[i].closed) {
8103
- styledShape = {
8104
- transforms: transformsManager.addTransformSequence(styles[i].transforms),
8105
- trNodes: []
8106
- }
8107
- this.styledShapes.push(styledShape);
8108
- styles[i].elements.push(styledShape);
8109
- }
8110
- }
8111
- }
8112
-
8113
- CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;
8114
-
8115
- function BaseElement() { }
8116
-
8117
- BaseElement.prototype = {
8118
- checkMasks: function () {
8119
- if (!this.data.hasMask) {
8120
- return false;
8121
- }
8122
- var i = 0,
8123
- len = this.data.masksProperties.length;
8124
- while (i < len) {
8125
- if ((this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false)) {
8126
- return true;
8127
- }
8128
- i += 1;
8129
- }
8130
- return false;
8131
- },
8132
- initExpressions: function () {
8133
- this.layerInterface = LayerExpressionInterface(this);
8134
- if (this.data.hasMask && this.maskManager) {
8135
- this.layerInterface.registerMaskInterface(this.maskManager);
8136
- }
8137
- var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);
8138
- this.layerInterface.registerEffectsInterface(effectsInterface);
8139
-
8140
- if (this.data.ty === 0 || this.data.xt) {
8141
- this.compInterface = CompExpressionInterface(this);
8142
- } else if (this.data.ty === 4) {
8143
- this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);
8144
- this.layerInterface.content = this.layerInterface.shapeInterface;
8145
- } else if (this.data.ty === 5) {
8146
- this.layerInterface.textInterface = TextExpressionInterface(this);
8147
- this.layerInterface.text = this.layerInterface.textInterface;
8148
- }
8149
- },
8150
- setBlendMode: function () {
8151
- var blendModeValue = getBlendMode(this.data.bm);
8152
- var elem = this.baseElement || this.layerElement;
8153
-
8154
- elem.style['mix-blend-mode'] = blendModeValue;
8155
- },
8156
- initBaseData: function (data, globalData, comp) {
8157
- this.globalData = globalData;
8158
- this.comp = comp;
8159
- this.data = data;
8160
- this.layerId = createElementID();
8161
-
8162
- //Stretch factor for old animations missing this property.
8163
- if (!this.data.sr) {
8164
- this.data.sr = 1;
8165
- }
8166
- // effects manager
8167
- this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);
8168
-
8169
- },
8170
- getType: function () {
8171
- return this.type;
8172
- },
8173
- sourceRectAtTime: function () { }
8174
- }
8175
-
8176
- function NullElement(data, globalData, comp) {
8177
- this.initFrame();
8178
- this.initBaseData(data, globalData, comp);
8179
- this.initFrame();
8180
- this.initTransform(data, globalData, comp);
8181
- this.initHierarchy();
8182
- }
8183
-
8184
- NullElement.prototype.prepareFrame = function (num) {
8185
- this.prepareProperties(num, true);
8186
- };
8187
-
8188
- NullElement.prototype.renderFrame = function () { };
8189
-
8190
- NullElement.prototype.getBaseElement = function () {
8191
- return null;
8192
- };
8193
-
8194
- NullElement.prototype.destroy = function () { };
8195
-
8196
- NullElement.prototype.sourceRectAtTime = function () { };
8197
-
8198
- NullElement.prototype.hide = function () { };
8199
-
8200
- extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);
8201
-
8202
- function SVGBaseElement() { }
8203
-
8204
- SVGBaseElement.prototype = {
8205
- initRendererElement: function () {
8206
- this.layerElement = createNS('g');
8207
- },
8208
- createContainerElements: function () {
8209
- this.matteElement = createNS('g');
8210
- this.transformedElement = this.layerElement;
8211
- this.maskedElement = this.layerElement;
8212
- this._sizeChanged = false;
8213
- var layerElementParent = null;
8214
- //If this layer acts as a mask for the following layer
8215
- var filId, fil, gg;
8216
- if (this.data.td) {
8217
- if (this.data.td == 3 || this.data.td == 1) {
8218
- var masker = createNS('mask');
8219
- masker.setAttribute('id', this.layerId);
8220
- masker.setAttribute('mask-type', this.data.td == 3 ? 'luminance' : 'alpha');
8221
- masker.appendChild(this.layerElement);
8222
- layerElementParent = masker;
8223
- this.globalData.defs.appendChild(masker);
8224
- // This is only for IE and Edge when mask if of type alpha
8225
- if (!featureSupport.maskType && this.data.td == 1) {
8226
- masker.setAttribute('mask-type', 'luminance');
8227
- filId = createElementID();
8228
- fil = filtersFactory.createFilter(filId);
8229
- this.globalData.defs.appendChild(fil);
8230
- fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());
8231
- gg = createNS('g');
8232
- gg.appendChild(this.layerElement);
8233
- layerElementParent = gg;
8234
- masker.appendChild(gg);
8235
- gg.setAttribute('filter', 'url(' + locationHref + '#' + filId + ')');
8236
- }
8237
- } else if (this.data.td == 2) {
8238
- var maskGroup = createNS('mask');
8239
- maskGroup.setAttribute('id', this.layerId);
8240
- maskGroup.setAttribute('mask-type', 'alpha');
8241
- var maskGrouper = createNS('g');
8242
- maskGroup.appendChild(maskGrouper);
8243
- filId = createElementID();
8244
- fil = filtersFactory.createFilter(filId);
8245
- ////
8246
-
8247
- // This solution doesn't work on Android when meta tag with viewport attribute is set
8248
- /*var feColorMatrix = createNS('feColorMatrix');
8249
- feColorMatrix.setAttribute('type', 'matrix');
8250
- feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');
8251
- feColorMatrix.setAttribute('values','1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 -1 1');
8252
- fil.appendChild(feColorMatrix);*/
8253
- ////
8254
- var feCTr = createNS('feComponentTransfer');
8255
- feCTr.setAttribute('in', 'SourceGraphic');
8256
- fil.appendChild(feCTr);
8257
- var feFunc = createNS('feFuncA');
8258
- feFunc.setAttribute('type', 'table');
8259
- feFunc.setAttribute('tableValues', '1.0 0.0');
8260
- feCTr.appendChild(feFunc);
8261
- ////
8262
- this.globalData.defs.appendChild(fil);
8263
- var alphaRect = createNS('rect');
8264
- alphaRect.setAttribute('width', this.comp.data.w);
8265
- alphaRect.setAttribute('height', this.comp.data.h);
8266
- alphaRect.setAttribute('x', '0');
8267
- alphaRect.setAttribute('y', '0');
8268
- alphaRect.setAttribute('fill', '#ffffff');
8269
- alphaRect.setAttribute('opacity', '0');
8270
- maskGrouper.setAttribute('filter', 'url(' + locationHref + '#' + filId + ')');
8271
- maskGrouper.appendChild(alphaRect);
8272
- maskGrouper.appendChild(this.layerElement);
8273
- layerElementParent = maskGrouper;
8274
- if (!featureSupport.maskType) {
8275
- maskGroup.setAttribute('mask-type', 'luminance');
8276
- fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());
8277
- gg = createNS('g');
8278
- maskGrouper.appendChild(alphaRect);
8279
- gg.appendChild(this.layerElement);
8280
- layerElementParent = gg;
8281
- maskGrouper.appendChild(gg);
8282
- }
8283
- this.globalData.defs.appendChild(maskGroup);
8284
- }
8285
- } else if (this.data.tt) {
8286
- this.matteElement.appendChild(this.layerElement);
8287
- layerElementParent = this.matteElement;
8288
- this.baseElement = this.matteElement;
8289
- } else {
8290
- this.baseElement = this.layerElement;
8291
- }
8292
- if (this.data.ln) {
8293
- this.layerElement.setAttribute('id', this.data.ln);
8294
- }
8295
- if (this.data.cl) {
8296
- this.layerElement.setAttribute('class', this.data.cl);
8297
- }
8298
- //Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped
8299
- if (this.data.ty === 0 && !this.data.hd) {
8300
- var cp = createNS('clipPath');
8301
- var pt = createNS('path');
8302
- pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0' + ' L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');
8303
- var clipId = createElementID();
8304
- cp.setAttribute('id', clipId);
8305
- cp.appendChild(pt);
8306
- this.globalData.defs.appendChild(cp);
8307
-
8308
- if (this.checkMasks()) {
8309
- var cpGroup = createNS('g');
8310
- cpGroup.setAttribute('clip-path', 'url(' + locationHref + '#' + clipId + ')');
8311
- cpGroup.appendChild(this.layerElement);
8312
- this.transformedElement = cpGroup;
8313
- if (layerElementParent) {
8314
- layerElementParent.appendChild(this.transformedElement);
8315
- } else {
8316
- this.baseElement = this.transformedElement;
8317
- }
8318
- } else {
8319
- this.layerElement.setAttribute('clip-path', 'url(' + locationHref + '#' + clipId + ')');
8320
- }
8321
-
8322
- }
8323
- if (this.data.bm !== 0) {
8324
- this.setBlendMode();
8325
- }
8326
-
8327
- },
8328
- renderElement: function () {
8329
- if (this.finalTransform._matMdf) {
8330
- this.transformedElement.setAttribute('transform', this.finalTransform.mat.to2dCSS());
8331
- }
8332
- if (this.finalTransform._opMdf) {
8333
- this.transformedElement.setAttribute('opacity', this.finalTransform.mProp.o.v);
8334
- }
8335
- },
8336
- destroyBaseElement: function () {
8337
- this.layerElement = null;
8338
- this.matteElement = null;
8339
- this.maskManager.destroy();
8340
- },
8341
- getBaseElement: function () {
8342
- if (this.data.hd) {
8343
- return null;
8344
- }
8345
- return this.baseElement;
8346
- },
8347
- createRenderableComponents: function () {
8348
- this.maskManager = new MaskElement(this.data, this, this.globalData);
8349
- this.renderableEffectsManager = new SVGEffects(this);
8350
- },
8351
- setMatte: function (id) {
8352
- if (!this.matteElement) {
8353
- return;
8354
- }
8355
- this.matteElement.setAttribute("mask", "url(" + locationHref + "#" + id + ")");
8356
- }
8357
- };
8358
-
8359
- function IShapeElement() { }
8360
-
8361
- IShapeElement.prototype = {
8362
- addShapeToModifiers: function (data) {
8363
- var i, len = this.shapeModifiers.length;
8364
- for (i = 0; i < len; i += 1) {
8365
- this.shapeModifiers[i].addShape(data);
8366
- }
8367
- },
8368
- isShapeInAnimatedModifiers: function (data) {
8369
- var i = 0,
8370
- len = this.shapeModifiers.length;
8371
- while (i < len) {
8372
- if (this.shapeModifiers[i].isAnimatedWithShape(data)) {
8373
- return true;
8374
- }
8375
- }
8376
- return false;
8377
- },
8378
- renderModifiers: function () {
8379
- if (!this.shapeModifiers.length) {
8380
- return;
8381
- }
8382
- var i, len = this.shapes.length;
8383
- for (i = 0; i < len; i += 1) {
8384
- this.shapes[i].sh.reset();
8385
- }
8386
-
8387
- len = this.shapeModifiers.length;
8388
- for (i = len - 1; i >= 0; i -= 1) {
8389
- this.shapeModifiers[i].processShapes(this._isFirstFrame);
8390
- }
8391
- },
8392
- lcEnum: {
8393
- '1': 'butt',
8394
- '2': 'round',
8395
- '3': 'square'
8396
- },
8397
- ljEnum: {
8398
- '1': 'miter',
8399
- '2': 'round',
8400
- '3': 'bevel'
8401
- },
8402
- searchProcessedElement: function (elem) {
8403
- var elements = this.processedElements;
8404
- var i = 0,
8405
- len = elements.length;
8406
- while (i < len) {
8407
- if (elements[i].elem === elem) {
8408
- return elements[i].pos;
8409
- }
8410
- i += 1;
8411
- }
8412
- return 0;
8413
- },
8414
- addProcessedElement: function (elem, pos) {
8415
- var elements = this.processedElements;
8416
- var i = elements.length;
8417
- while (i) {
8418
- i -= 1;
8419
- if (elements[i].elem === elem) {
8420
- elements[i].pos = pos;
8421
- return;
8422
- }
8423
- }
8424
- elements.push(new ProcessedElement(elem, pos));
8425
- },
8426
- prepareFrame: function (num) {
8427
- this.prepareRenderableFrame(num);
8428
- this.prepareProperties(num, this.isInRange);
8429
- }
8430
- };
8431
-
8432
- function ITextElement() { }
8433
-
8434
- ITextElement.prototype.initElement = function (data, globalData, comp) {
8435
- this.lettersChangedFlag = true;
8436
- this.initFrame();
8437
- this.initBaseData(data, globalData, comp);
8438
- this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);
8439
- this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);
8440
- this.initTransform(data, globalData, comp);
8441
- this.initHierarchy();
8442
- this.initRenderable();
8443
- this.initRendererElement();
8444
- this.createContainerElements();
8445
- this.createRenderableComponents();
8446
- this.createContent();
8447
- this.hide();
8448
- this.textAnimator.searchProperties(this.dynamicProperties);
8449
- };
8450
-
8451
- ITextElement.prototype.prepareFrame = function (num) {
8452
- this._mdf = false;
8453
- this.prepareRenderableFrame(num);
8454
- this.prepareProperties(num, this.isInRange);
8455
- if (this.textProperty._mdf || this.textProperty._isFirstFrame) {
8456
- this.buildNewText();
8457
- this.textProperty._isFirstFrame = false;
8458
- this.textProperty._mdf = false;
8459
- }
8460
- };
8461
-
8462
- ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {
8463
- var j, jLen = shapes.length;
8464
- var k, kLen, pathNodes;
8465
- var shapeStr = '';
8466
- for (j = 0; j < jLen; j += 1) {
8467
- pathNodes = shapes[j].ks.k;
8468
- shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);
8469
- }
8470
- return shapeStr;
8471
- };
8472
-
8473
- ITextElement.prototype.updateDocumentData = function (newData, index) {
8474
- this.textProperty.updateDocumentData(newData, index);
8475
- };
8476
-
8477
- ITextElement.prototype.canResizeFont = function (_canResize) {
8478
- this.textProperty.canResizeFont(_canResize);
8479
- };
8480
-
8481
- ITextElement.prototype.setMinimumFontSize = function (_fontSize) {
8482
- this.textProperty.setMinimumFontSize(_fontSize);
8483
- };
8484
-
8485
- ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {
8486
- if (documentData.ps) {
8487
- matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);
8488
- }
8489
- matrixHelper.translate(0, -documentData.ls, 0);
8490
- switch (documentData.j) {
8491
- case 1:
8492
- matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);
8493
- break;
8494
- case 2:
8495
- matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);
8496
- break;
8497
- }
8498
- matrixHelper.translate(xPos, yPos, 0);
8499
- };
8500
-
8501
-
8502
- ITextElement.prototype.buildColor = function (colorData) {
8503
- return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';
8504
- };
8505
-
8506
- ITextElement.prototype.emptyProp = new LetterProps();
8507
-
8508
- ITextElement.prototype.destroy = function () {
8509
-
8510
- };
8511
-
8512
- function ICompElement() { }
8513
-
8514
- extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);
8515
-
8516
- ICompElement.prototype.initElement = function (data, globalData, comp) {
8517
- this.initFrame();
8518
- this.initBaseData(data, globalData, comp);
8519
- this.initTransform(data, globalData, comp);
8520
- this.initRenderable();
8521
- this.initHierarchy();
8522
- this.initRendererElement();
8523
- this.createContainerElements();
8524
- this.createRenderableComponents();
8525
- if (this.data.xt || !globalData.progressiveLoad) {
8526
- this.buildAllItems();
8527
- }
8528
- this.hide();
8529
- };
8530
-
8531
- /*ICompElement.prototype.hide = function(){
8532
- if(!this.hidden){
8533
- this.hideElement();
8534
- var i,len = this.elements.length;
8535
- for( i = 0; i < len; i+=1 ){
8536
- if(this.elements[i]){
8537
- this.elements[i].hide();
8538
- }
8539
- }
8540
- }
8541
- };*/
8542
-
8543
- ICompElement.prototype.prepareFrame = function (num) {
8544
- this._mdf = false;
8545
- this.prepareRenderableFrame(num);
8546
- this.prepareProperties(num, this.isInRange);
8547
- if (!this.isInRange && !this.data.xt) {
8548
- return;
8549
- }
8550
-
8551
- if (!this.tm._placeholder) {
8552
- var timeRemapped = this.tm.v;
8553
- if (timeRemapped === this.data.op) {
8554
- timeRemapped = this.data.op - 1;
8555
- }
8556
- this.renderedFrame = timeRemapped;
8557
- } else {
8558
- this.renderedFrame = num / this.data.sr;
8559
- }
8560
- var i, len = this.elements.length;
8561
- if (!this.completeLayers) {
8562
- this.checkLayers(this.renderedFrame);
8563
- }
8564
- //This iteration needs to be backwards because of how expressions connect between each other
8565
- for (i = len - 1; i >= 0; i -= 1) {
8566
- if (this.completeLayers || this.elements[i]) {
8567
- this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);
8568
- if (this.elements[i]._mdf) {
8569
- this._mdf = true;
8570
- }
8571
- }
8572
- }
8573
- };
8574
-
8575
- ICompElement.prototype.renderInnerContent = function () {
8576
- var i, len = this.layers.length;
8577
- for (i = 0; i < len; i += 1) {
8578
- if (this.completeLayers || this.elements[i]) {
8579
- this.elements[i].renderFrame();
8580
- }
8581
- }
8582
- };
8583
-
8584
- ICompElement.prototype.setElements = function (elems) {
8585
- this.elements = elems;
8586
- };
8587
-
8588
- ICompElement.prototype.getElements = function () {
8589
- return this.elements;
8590
- };
8591
-
8592
- ICompElement.prototype.destroyElements = function () {
8593
- var i, len = this.layers.length;
8594
- for (i = 0; i < len; i += 1) {
8595
- if (this.elements[i]) {
8596
- this.elements[i].destroy();
8597
- }
8598
- }
8599
- };
8600
-
8601
- ICompElement.prototype.destroy = function () {
8602
- this.destroyElements();
8603
- this.destroyBaseElement();
8604
- };
8605
-
8606
- function IImageElement(data, globalData, comp) {
8607
- this.assetData = globalData.getAssetData(data.refId);
8608
- this.initElement(data, globalData, comp);
8609
- this.sourceRect = {
8610
- top: 0,
8611
- left: 0,
8612
- width: this.assetData.w,
8613
- height: this.assetData.h
8614
- };
8615
- }
8616
-
8617
- extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);
8618
-
8619
- IImageElement.prototype.createContent = function () {
8620
-
8621
- var assetPath = this.globalData.getAssetsPath(this.assetData);
8622
-
8623
- this.innerElem = createNS('image');
8624
- this.innerElem.setAttribute('width', this.assetData.w + "px");
8625
- this.innerElem.setAttribute('height', this.assetData.h + "px");
8626
- this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);
8627
- this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);
8628
-
8629
- this.layerElement.appendChild(this.innerElem);
8630
- };
8631
-
8632
- IImageElement.prototype.sourceRectAtTime = function () {
8633
- return this.sourceRect;
8634
- }
8635
-
8636
- function ISolidElement(data, globalData, comp) {
8637
- this.initElement(data, globalData, comp);
8638
- }
8639
- extendPrototype([IImageElement], ISolidElement);
8640
-
8641
- ISolidElement.prototype.createContent = function () {
8642
-
8643
- var rect = createNS('rect');
8644
- ////rect.style.width = this.data.sw;
8645
- ////rect.style.height = this.data.sh;
8646
- ////rect.style.fill = this.data.sc;
8647
- rect.setAttribute('width', this.data.sw);
8648
- rect.setAttribute('height', this.data.sh);
8649
- rect.setAttribute('fill', this.data.sc);
8650
- this.layerElement.appendChild(rect);
8651
- };
8652
-
8653
- function SVGCompElement(data, globalData, comp) {
8654
- this.layers = data.layers;
8655
- this.supports3d = true;
8656
- this.completeLayers = false;
8657
- this.pendingElements = [];
8658
- this.elements = this.layers ? createSizedArray(this.layers.length) : [];
8659
- //this.layerElement = createNS('g');
8660
- this.initElement(data, globalData, comp);
8661
- this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {
8662
- _placeholder: true
8663
- };
8664
- }
8665
-
8666
- extendPrototype([SVGRenderer, ICompElement, SVGBaseElement], SVGCompElement);
8667
-
8668
- function SVGTextElement(data, globalData, comp) {
8669
- this.textSpans = [];
8670
- this.renderType = 'svg';
8671
- this.initElement(data, globalData, comp);
8672
- }
8673
-
8674
- extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextElement);
8675
-
8676
- SVGTextElement.prototype.createContent = function () {
8677
-
8678
- if (this.data.singleShape && !this.globalData.fontManager.chars) {
8679
- this.textContainer = createNS('text');
8680
- }
8681
- };
8682
-
8683
- SVGTextElement.prototype.buildTextContents = function (textArray) {
8684
- var i = 0,
8685
- len = textArray.length;
8686
- var textContents = [],
8687
- currentTextContent = '';
8688
- while (i < len) {
8689
- if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {
8690
- textContents.push(currentTextContent);
8691
- currentTextContent = '';
8692
- } else {
8693
- currentTextContent += textArray[i];
8694
- }
8695
- i += 1;
8696
- }
8697
- textContents.push(currentTextContent);
8698
- return textContents;
8699
- }
8700
-
8701
- SVGTextElement.prototype.buildNewText = function () {
8702
- var i, len;
8703
-
8704
- var documentData = this.textProperty.currentData;
8705
- this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);
8706
- if (documentData.fc) {
8707
- this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));
8708
- } else {
8709
- this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');
8710
- }
8711
- if (documentData.sc) {
8712
- this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));
8713
- this.layerElement.setAttribute('stroke-width', documentData.sw);
8714
- }
8715
- this.layerElement.setAttribute('font-size', documentData.finalSize);
8716
- var fontData = this.globalData.fontManager.getFontByName(documentData.f);
8717
- if (fontData.fClass) {
8718
- this.layerElement.setAttribute('class', fontData.fClass);
8719
- } else {
8720
- this.layerElement.setAttribute('font-family', fontData.fFamily);
8721
- var fWeight = documentData.fWeight,
8722
- fStyle = documentData.fStyle;
8723
- this.layerElement.setAttribute('font-style', fStyle);
8724
- this.layerElement.setAttribute('font-weight', fWeight);
8725
- }
8726
- this.layerElement.setAttribute('aria-label', documentData.t);
8727
-
8728
- var letters = documentData.l || [];
8729
- var usesGlyphs = !!this.globalData.fontManager.chars;
8730
- len = letters.length;
8731
-
8732
- var tSpan;
8733
- var matrixHelper = this.mHelper;
8734
- var shapes, shapeStr = '',
8735
- singleShape = this.data.singleShape;
8736
- var xPos = 0,
8737
- yPos = 0,
8738
- firstLine = true;
8739
- var trackingOffset = documentData.tr / 1000 * documentData.finalSize;
8740
- if (singleShape && !usesGlyphs && !documentData.sz) {
8741
- var tElement = this.textContainer;
8742
- var justify = 'start';
8743
- switch (documentData.j) {
8744
- case 1:
8745
- justify = 'end';
8746
- break;
8747
- case 2:
8748
- justify = 'middle';
8749
- break;
8750
- }
8751
- tElement.setAttribute('text-anchor', justify);
8752
- tElement.setAttribute('letter-spacing', trackingOffset);
8753
- var textContent = this.buildTextContents(documentData.finalText);
8754
- len = textContent.length;
8755
- yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;
8756
- for (i = 0; i < len; i += 1) {
8757
- tSpan = this.textSpans[i] || createNS('tspan');
8758
- tSpan.textContent = textContent[i];
8759
- tSpan.setAttribute('x', 0);
8760
- tSpan.setAttribute('y', yPos);
8761
- tSpan.style.display = 'inherit';
8762
- tElement.appendChild(tSpan);
8763
- this.textSpans[i] = tSpan;
8764
- yPos += documentData.finalLineHeight;
8765
- }
8766
-
8767
- this.layerElement.appendChild(tElement);
8768
- } else {
8769
- var cachedSpansLength = this.textSpans.length;
8770
- var shapeData, charData;
8771
- for (i = 0; i < len; i += 1) {
8772
- if (!usesGlyphs || !singleShape || i === 0) {
8773
- tSpan = cachedSpansLength > i ? this.textSpans[i] : createNS(usesGlyphs ? 'path' : 'text');
8774
- if (cachedSpansLength <= i) {
8775
- tSpan.setAttribute('stroke-linecap', 'butt');
8776
- tSpan.setAttribute('stroke-linejoin', 'round');
8777
- tSpan.setAttribute('stroke-miterlimit', '4');
8778
- this.textSpans[i] = tSpan;
8779
- this.layerElement.appendChild(tSpan);
8780
- }
8781
- tSpan.style.display = 'inherit';
8782
- }
8783
-
8784
- matrixHelper.reset();
8785
- matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);
8786
- if (singleShape) {
8787
- if (letters[i].n) {
8788
- xPos = -trackingOffset;
8789
- yPos += documentData.yOffset;
8790
- yPos += firstLine ? 1 : 0;
8791
- firstLine = false;
8792
- }
8793
- this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);
8794
- xPos += letters[i].l || 0;
8795
- //xPos += letters[i].val === ' ' ? 0 : trackingOffset;
8796
- xPos += trackingOffset;
8797
- }
8798
- if (usesGlyphs) {
8799
- charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);
8800
- shapeData = charData && charData.data || {};
8801
- shapes = shapeData.shapes ? shapeData.shapes[0].it : [];
8802
- if (!singleShape) {
8803
- tSpan.setAttribute('d', this.createPathShape(matrixHelper, shapes));
8804
- } else {
8805
- shapeStr += this.createPathShape(matrixHelper, shapes);
8806
- }
8807
- } else {
8808
- if (singleShape) {
8809
- tSpan.setAttribute("transform", "translate(" + matrixHelper.props[12] + "," + matrixHelper.props[13] + ")");
8810
- }
8811
- tSpan.textContent = letters[i].val;
8812
- tSpan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve");
8813
- }
8814
- //
8815
- }
8816
- if (singleShape && tSpan) {
8817
- tSpan.setAttribute('d', shapeStr);
8818
- }
8819
- }
8820
- while (i < this.textSpans.length) {
8821
- this.textSpans[i].style.display = 'none';
8822
- i += 1;
8823
- }
8824
-
8825
- this._sizeChanged = true;
8826
- };
8827
-
8828
- SVGTextElement.prototype.sourceRectAtTime = function (time) {
8829
- this.prepareFrame(this.comp.renderedFrame - this.data.st);
8830
- this.renderInnerContent();
8831
- if (this._sizeChanged) {
8832
- this._sizeChanged = false;
8833
- var textBox = this.layerElement.getBBox();
8834
- this.bbox = {
8835
- top: textBox.y,
8836
- left: textBox.x,
8837
- width: textBox.width,
8838
- height: textBox.height
8839
- };
8840
- }
8841
- return this.bbox;
8842
- };
8843
-
8844
- SVGTextElement.prototype.renderInnerContent = function () {
8845
-
8846
- if (!this.data.singleShape) {
8847
- this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);
8848
- if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {
8849
- this._sizeChanged = true;
8850
- var i, len;
8851
- var renderedLetters = this.textAnimator.renderedLetters;
8852
-
8853
- var letters = this.textProperty.currentData.l;
8854
-
8855
- len = letters.length;
8856
- var renderedLetter, textSpan;
8857
- for (i = 0; i < len; i += 1) {
8858
- if (letters[i].n) {
8859
- continue;
8860
- }
8861
- renderedLetter = renderedLetters[i];
8862
- textSpan = this.textSpans[i];
8863
- if (renderedLetter._mdf.m) {
8864
- textSpan.setAttribute('transform', renderedLetter.m);
8865
- }
8866
- if (renderedLetter._mdf.o) {
8867
- textSpan.setAttribute('opacity', renderedLetter.o);
8868
- }
8869
- if (renderedLetter._mdf.sw) {
8870
- textSpan.setAttribute('stroke-width', renderedLetter.sw);
8871
- }
8872
- if (renderedLetter._mdf.sc) {
8873
- textSpan.setAttribute('stroke', renderedLetter.sc);
8874
- }
8875
- if (renderedLetter._mdf.fc) {
8876
- textSpan.setAttribute('fill', renderedLetter.fc);
8877
- }
8878
- }
8879
- }
8880
- }
8881
- };
8882
-
8883
- function SVGShapeElement(data, globalData, comp) {
8884
- //List of drawable elements
8885
- this.shapes = [];
8886
- // Full shape data
8887
- this.shapesData = data.shapes;
8888
- //List of styles that will be applied to shapes
8889
- this.stylesList = [];
8890
- //List of modifiers that will be applied to shapes
8891
- this.shapeModifiers = [];
8892
- //List of items in shape tree
8893
- this.itemsData = [];
8894
- //List of items in previous shape tree
8895
- this.processedElements = [];
8896
- // List of animated components
8897
- this.animatedContents = [];
8898
- this.initElement(data, globalData, comp);
8899
- //Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.
8900
- // List of elements that have been created
8901
- this.prevViewData = [];
8902
- //Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.
8903
- }
8904
-
8905
- extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);
8906
-
8907
- SVGShapeElement.prototype.initSecondaryElement = function () { };
8908
-
8909
- SVGShapeElement.prototype.identityMatrix = new Matrix();
8910
-
8911
- SVGShapeElement.prototype.buildExpressionInterface = function () { };
8912
-
8913
- SVGShapeElement.prototype.createContent = function () {
8914
- this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);
8915
- this.filterUniqueShapes();
8916
- };
8917
-
8918
- /*
8919
- This method searches for multiple shapes that affect a single element and one of them is animated
8920
- */
8921
- SVGShapeElement.prototype.filterUniqueShapes = function () {
8922
- var i, len = this.shapes.length,
8923
- shape;
8924
- var j, jLen = this.stylesList.length;
8925
- var style, count = 0;
8926
- var tempShapes = [];
8927
- var areAnimated = false;
8928
- for (j = 0; j < jLen; j += 1) {
8929
- style = this.stylesList[j];
8930
- areAnimated = false;
8931
- tempShapes.length = 0;
8932
- for (i = 0; i < len; i += 1) {
8933
- shape = this.shapes[i];
8934
- if (shape.styles.indexOf(style) !== -1) {
8935
- tempShapes.push(shape);
8936
- areAnimated = shape._isAnimated || areAnimated;
8937
- }
8938
- }
8939
- if (tempShapes.length > 1 && areAnimated) {
8940
- this.setShapesAsAnimated(tempShapes);
8941
- }
8942
- }
8943
- }
8944
-
8945
- SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {
8946
- var i, len = shapes.length;
8947
- for (i = 0; i < len; i += 1) {
8948
- shapes[i].setAsAnimated();
8949
- }
8950
- }
8951
-
8952
- SVGShapeElement.prototype.createStyleElement = function (data, level) {
8953
- //TODO: prevent drawing of hidden styles
8954
- var elementData;
8955
- var styleOb = new SVGStyleData(data, level);
8956
-
8957
- var pathElement = styleOb.pElem;
8958
- if (data.ty === 'st') {
8959
- elementData = new SVGStrokeStyleData(this, data, styleOb);
8960
- } else if (data.ty === 'fl') {
8961
- elementData = new SVGFillStyleData(this, data, styleOb);
8962
- } else if (data.ty === 'gf' || data.ty === 'gs') {
8963
- var gradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;
8964
- elementData = new gradientConstructor(this, data, styleOb);
8965
- this.globalData.defs.appendChild(elementData.gf);
8966
- if (elementData.maskId) {
8967
- this.globalData.defs.appendChild(elementData.ms);
8968
- this.globalData.defs.appendChild(elementData.of);
8969
- pathElement.setAttribute('mask', 'url(' + locationHref + '#' + elementData.maskId + ')');
8970
- }
8971
- }
8972
-
8973
- if (data.ty === 'st' || data.ty === 'gs') {
8974
- pathElement.setAttribute('stroke-linecap', this.lcEnum[data.lc] || 'round');
8975
- pathElement.setAttribute('stroke-linejoin', this.ljEnum[data.lj] || 'round');
8976
- pathElement.setAttribute('fill-opacity', '0');
8977
- if (data.lj === 1) {
8978
- pathElement.setAttribute('stroke-miterlimit', data.ml);
8979
- }
8980
- }
8981
-
8982
- if (data.r === 2) {
8983
- pathElement.setAttribute('fill-rule', 'evenodd');
8984
- }
8985
-
8986
- if (data.ln) {
8987
- pathElement.setAttribute('id', data.ln);
8988
- }
8989
- if (data.cl) {
8990
- pathElement.setAttribute('class', data.cl);
8991
- }
8992
- if (data.bm) {
8993
- pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);
8994
- }
8995
- this.stylesList.push(styleOb);
8996
- this.addToAnimatedContents(data, elementData);
8997
- return elementData;
8998
- };
8999
-
9000
- SVGShapeElement.prototype.createGroupElement = function (data) {
9001
- var elementData = new ShapeGroupData();
9002
- if (data.ln) {
9003
- elementData.gr.setAttribute('id', data.ln);
9004
- }
9005
- if (data.cl) {
9006
- elementData.gr.setAttribute('class', data.cl);
9007
- }
9008
- if (data.bm) {
9009
- elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);
9010
- }
9011
- return elementData;
9012
- };
9013
-
9014
- SVGShapeElement.prototype.createTransformElement = function (data, container) {
9015
- var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);
9016
- var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);
9017
- this.addToAnimatedContents(data, elementData);
9018
- return elementData;
9019
- };
9020
-
9021
- SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {
9022
- var ty = 4;
9023
- if (data.ty === 'rc') {
9024
- ty = 5;
9025
- } else if (data.ty === 'el') {
9026
- ty = 6;
9027
- } else if (data.ty === 'sr') {
9028
- ty = 7;
9029
- }
9030
- var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);
9031
- var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);
9032
- this.shapes.push(elementData);
9033
- this.addShapeToModifiers(elementData);
9034
- this.addToAnimatedContents(data, elementData);
9035
- return elementData;
9036
- };
9037
-
9038
- SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {
9039
- var i = 0,
9040
- len = this.animatedContents.length;
9041
- while (i < len) {
9042
- if (this.animatedContents[i].element === element) {
9043
- return;
9044
- }
9045
- i += 1;
9046
- }
9047
- this.animatedContents.push({
9048
- fn: SVGElementsRenderer.createRenderFunction(data),
9049
- element: element,
9050
- data: data
9051
- });
9052
- };
9053
-
9054
- SVGShapeElement.prototype.setElementStyles = function (elementData) {
9055
- var arr = elementData.styles;
9056
- var j, jLen = this.stylesList.length;
9057
- for (j = 0; j < jLen; j += 1) {
9058
- if (!this.stylesList[j].closed) {
9059
- arr.push(this.stylesList[j]);
9060
- }
9061
- }
9062
- };
9063
-
9064
- SVGShapeElement.prototype.reloadShapes = function () {
9065
- this._isFirstFrame = true;
9066
- var i, len = this.itemsData.length;
9067
- for (i = 0; i < len; i += 1) {
9068
- this.prevViewData[i] = this.itemsData[i];
9069
- }
9070
- this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);
9071
- this.filterUniqueShapes();
9072
- len = this.dynamicProperties.length;
9073
- for (i = 0; i < len; i += 1) {
9074
- this.dynamicProperties[i].getValue();
9075
- }
9076
- this.renderModifiers();
9077
- };
9078
-
9079
- SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {
9080
- var ownTransformers = [].concat(transformers);
9081
- var i, len = arr.length - 1;
9082
- var j, jLen;
9083
- var ownStyles = [],
9084
- ownModifiers = [],
9085
- styleOb, currentTransform, modifier, processedPos;
9086
- for (i = len; i >= 0; i -= 1) {
9087
- processedPos = this.searchProcessedElement(arr[i]);
9088
- if (!processedPos) {
9089
- arr[i]._render = render;
9090
- } else {
9091
- itemsData[i] = prevViewData[processedPos - 1];
9092
- }
9093
- if (arr[i].ty == 'fl' || arr[i].ty == 'st' || arr[i].ty == 'gf' || arr[i].ty == 'gs') {
9094
- if (!processedPos) {
9095
- itemsData[i] = this.createStyleElement(arr[i], level);
9096
- } else {
9097
- itemsData[i].style.closed = false;
9098
- }
9099
- if (arr[i]._render) {
9100
- container.appendChild(itemsData[i].style.pElem);
9101
- }
9102
- ownStyles.push(itemsData[i].style);
9103
- } else if (arr[i].ty == 'gr') {
9104
- if (!processedPos) {
9105
- itemsData[i] = this.createGroupElement(arr[i]);
9106
- } else {
9107
- jLen = itemsData[i].it.length;
9108
- for (j = 0; j < jLen; j += 1) {
9109
- itemsData[i].prevViewData[j] = itemsData[i].it[j];
9110
- }
9111
- }
9112
- this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);
9113
- if (arr[i]._render) {
9114
- container.appendChild(itemsData[i].gr);
9115
- }
9116
- } else if (arr[i].ty == 'tr') {
9117
- if (!processedPos) {
9118
- itemsData[i] = this.createTransformElement(arr[i], container);
9119
- }
9120
- currentTransform = itemsData[i].transform;
9121
- ownTransformers.push(currentTransform);
9122
- } else if (arr[i].ty == 'sh' || arr[i].ty == 'rc' || arr[i].ty == 'el' || arr[i].ty == 'sr') {
9123
- if (!processedPos) {
9124
- itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);
9125
- }
9126
- this.setElementStyles(itemsData[i]);
9127
-
9128
- } else if (arr[i].ty == 'tm' || arr[i].ty == 'rd' || arr[i].ty == 'ms') {
9129
- if (!processedPos) {
9130
- modifier = ShapeModifiers.getModifier(arr[i].ty);
9131
- modifier.init(this, arr[i]);
9132
- itemsData[i] = modifier;
9133
- this.shapeModifiers.push(modifier);
9134
- } else {
9135
- modifier = itemsData[i];
9136
- modifier.closed = false;
9137
- }
9138
- ownModifiers.push(modifier);
9139
- } else if (arr[i].ty == 'rp') {
9140
- if (!processedPos) {
9141
- modifier = ShapeModifiers.getModifier(arr[i].ty);
9142
- itemsData[i] = modifier;
9143
- modifier.init(this, arr, i, itemsData);
9144
- this.shapeModifiers.push(modifier);
9145
- render = false;
9146
- } else {
9147
- modifier = itemsData[i];
9148
- modifier.closed = true;
9149
- }
9150
- ownModifiers.push(modifier);
9151
- }
9152
- this.addProcessedElement(arr[i], i + 1);
9153
- }
9154
- len = ownStyles.length;
9155
- for (i = 0; i < len; i += 1) {
9156
- ownStyles[i].closed = true;
9157
- }
9158
- len = ownModifiers.length;
9159
- for (i = 0; i < len; i += 1) {
9160
- ownModifiers[i].closed = true;
9161
- }
9162
- };
9163
-
9164
- SVGShapeElement.prototype.renderInnerContent = function () {
9165
- this.renderModifiers();
9166
- var i, len = this.stylesList.length;
9167
- for (i = 0; i < len; i += 1) {
9168
- this.stylesList[i].reset();
9169
- }
9170
- this.renderShape();
9171
-
9172
- for (i = 0; i < len; i += 1) {
9173
- if (this.stylesList[i]._mdf || this._isFirstFrame) {
9174
- if (this.stylesList[i].msElem) {
9175
- this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d);
9176
- //Adding M0 0 fixes same mask bug on all browsers
9177
- this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;
9178
- }
9179
- this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');
9180
- }
9181
- }
9182
- };
9183
-
9184
- SVGShapeElement.prototype.renderShape = function () {
9185
- var i, len = this.animatedContents.length;
9186
- var animatedContent;
9187
- for (i = 0; i < len; i += 1) {
9188
- animatedContent = this.animatedContents[i];
9189
- if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {
9190
- animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);
9191
- }
9192
- }
9193
- }
9194
-
9195
- SVGShapeElement.prototype.destroy = function () {
9196
- this.destroyBaseElement();
9197
- this.shapesData = null;
9198
- this.itemsData = null;
9199
- };
9200
-
9201
- function SVGTintFilter(filter, filterManager) {
9202
- this.filterManager = filterManager;
9203
- var feColorMatrix = createNS('feColorMatrix');
9204
- feColorMatrix.setAttribute('type', 'matrix');
9205
- feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');
9206
- feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');
9207
- feColorMatrix.setAttribute('result', 'f1');
9208
- filter.appendChild(feColorMatrix);
9209
- feColorMatrix = createNS('feColorMatrix');
9210
- feColorMatrix.setAttribute('type', 'matrix');
9211
- feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');
9212
- feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');
9213
- feColorMatrix.setAttribute('result', 'f2');
9214
- filter.appendChild(feColorMatrix);
9215
- this.matrixFilter = feColorMatrix;
9216
- if (filterManager.effectElements[2].p.v !== 100 || filterManager.effectElements[2].p.k) {
9217
- var feMerge = createNS('feMerge');
9218
- filter.appendChild(feMerge);
9219
- var feMergeNode;
9220
- feMergeNode = createNS('feMergeNode');
9221
- feMergeNode.setAttribute('in', 'SourceGraphic');
9222
- feMerge.appendChild(feMergeNode);
9223
- feMergeNode = createNS('feMergeNode');
9224
- feMergeNode.setAttribute('in', 'f2');
9225
- feMerge.appendChild(feMergeNode);
9226
- }
9227
- }
9228
-
9229
- SVGTintFilter.prototype.renderFrame = function (forceRender) {
9230
- if (forceRender || this.filterManager._mdf) {
9231
- var colorBlack = this.filterManager.effectElements[0].p.v;
9232
- var colorWhite = this.filterManager.effectElements[1].p.v;
9233
- var opacity = this.filterManager.effectElements[2].p.v / 100;
9234
- this.matrixFilter.setAttribute('values', (colorWhite[0] - colorBlack[0]) + ' 0 0 0 ' + colorBlack[0] + ' ' + (colorWhite[1] - colorBlack[1]) + ' 0 0 0 ' + colorBlack[1] + ' ' + (colorWhite[2] - colorBlack[2]) + ' 0 0 0 ' + colorBlack[2] + ' 0 0 0 ' + opacity + ' 0');
9235
- }
9236
- };
9237
-
9238
- function SVGFillFilter(filter, filterManager) {
9239
- this.filterManager = filterManager;
9240
- var feColorMatrix = createNS('feColorMatrix');
9241
- feColorMatrix.setAttribute('type', 'matrix');
9242
- feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');
9243
- feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');
9244
- filter.appendChild(feColorMatrix);
9245
- this.matrixFilter = feColorMatrix;
9246
- }
9247
- SVGFillFilter.prototype.renderFrame = function (forceRender) {
9248
- if (forceRender || this.filterManager._mdf) {
9249
- var color = this.filterManager.effectElements[2].p.v;
9250
- var opacity = this.filterManager.effectElements[6].p.v;
9251
- this.matrixFilter.setAttribute('values', '0 0 0 0 ' + color[0] + ' 0 0 0 0 ' + color[1] + ' 0 0 0 0 ' + color[2] + ' 0 0 0 ' + opacity + ' 0');
9252
- }
9253
- };
9254
-
9255
- function SVGGaussianBlurEffect(filter, filterManager) {
9256
- // Outset the filter region by 100% on all sides to accommodate blur expansion.
9257
- filter.setAttribute('x', '-100%');
9258
- filter.setAttribute('y', '-100%');
9259
- filter.setAttribute('width', '300%');
9260
- filter.setAttribute('height', '300%');
9261
-
9262
- this.filterManager = filterManager;
9263
- var feGaussianBlur = createNS('feGaussianBlur');
9264
- filter.appendChild(feGaussianBlur);
9265
- this.feGaussianBlur = feGaussianBlur;
9266
- }
9267
-
9268
- SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) {
9269
- if (forceRender || this.filterManager._mdf) {
9270
- // Empirical value, matching AE's blur appearance.
9271
- var kBlurrinessToSigma = 0.3;
9272
- var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma;
9273
-
9274
- // Dimensions mapping:
9275
- //
9276
- // 1 -> horizontal & vertical
9277
- // 2 -> horizontal only
9278
- // 3 -> vertical only
9279
- //
9280
- var dimensions = this.filterManager.effectElements[1].p.v;
9281
- var sigmaX = (dimensions == 3) ? 0 : sigma;
9282
- var sigmaY = (dimensions == 2) ? 0 : sigma;
9283
-
9284
- this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + " " + sigmaY);
9285
-
9286
- // Repeat edges mapping:
9287
- //
9288
- // 0 -> off -> duplicate
9289
- // 1 -> on -> wrap
9290
- var edgeMode = (this.filterManager.effectElements[2].p.v == 1) ? 'wrap' : 'duplicate';
9291
- this.feGaussianBlur.setAttribute('edgeMode', edgeMode);
9292
- }
9293
- }
9294
-
9295
- function SVGStrokeEffect(elem, filterManager) {
9296
- this.initialized = false;
9297
- this.filterManager = filterManager;
9298
- this.elem = elem;
9299
- this.paths = [];
9300
- }
9301
-
9302
- SVGStrokeEffect.prototype.initialize = function () {
9303
-
9304
- var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;
9305
- var path, groupPath, i, len;
9306
- if (this.filterManager.effectElements[1].p.v === 1) {
9307
- len = this.elem.maskManager.masksProperties.length;
9308
- i = 0;
9309
- } else {
9310
- i = this.filterManager.effectElements[0].p.v - 1;
9311
- len = i + 1;
9312
- }
9313
- groupPath = createNS('g');
9314
- groupPath.setAttribute('fill', 'none');
9315
- groupPath.setAttribute('stroke-linecap', 'round');
9316
- groupPath.setAttribute('stroke-dashoffset', 1);
9317
- for (i; i < len; i += 1) {
9318
- path = createNS('path');
9319
- groupPath.appendChild(path);
9320
- this.paths.push({
9321
- p: path,
9322
- m: i
9323
- });
9324
- }
9325
- if (this.filterManager.effectElements[10].p.v === 3) {
9326
- var mask = createNS('mask');
9327
- var id = createElementID();
9328
- mask.setAttribute('id', id);
9329
- mask.setAttribute('mask-type', 'alpha');
9330
- mask.appendChild(groupPath);
9331
- this.elem.globalData.defs.appendChild(mask);
9332
- var g = createNS('g');
9333
- g.setAttribute('mask', 'url(' + locationHref + '#' + id + ')');
9334
- while (elemChildren[0]) {
9335
- g.appendChild(elemChildren[0]);
9336
- }
9337
- this.elem.layerElement.appendChild(g);
9338
- this.masker = mask;
9339
- groupPath.setAttribute('stroke', '#fff');
9340
- } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {
9341
- if (this.filterManager.effectElements[10].p.v === 2) {
9342
- elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;
9343
- while (elemChildren.length) {
9344
- this.elem.layerElement.removeChild(elemChildren[0]);
9345
- }
9346
- }
9347
- this.elem.layerElement.appendChild(groupPath);
9348
- this.elem.layerElement.removeAttribute('mask');
9349
- groupPath.setAttribute('stroke', '#fff');
9350
- }
9351
- this.initialized = true;
9352
- this.pathMasker = groupPath;
9353
- };
9354
-
9355
- SVGStrokeEffect.prototype.renderFrame = function (forceRender) {
9356
- if (!this.initialized) {
9357
- this.initialize();
9358
- }
9359
- var i, len = this.paths.length;
9360
- var mask, path;
9361
- for (i = 0; i < len; i += 1) {
9362
- if (this.paths[i].m === -1) {
9363
- continue;
9364
- }
9365
- mask = this.elem.maskManager.viewData[this.paths[i].m];
9366
- path = this.paths[i].p;
9367
- if (forceRender || this.filterManager._mdf || mask.prop._mdf) {
9368
- path.setAttribute('d', mask.lastPath);
9369
- }
9370
- if (forceRender || this.filterManager.effectElements[9].p._mdf || this.filterManager.effectElements[4].p._mdf || this.filterManager.effectElements[7].p._mdf || this.filterManager.effectElements[8].p._mdf || mask.prop._mdf) {
9371
- var dasharrayValue;
9372
- if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {
9373
- var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) / 100;
9374
- var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) / 100;
9375
- var l = path.getTotalLength();
9376
- dasharrayValue = '0 0 0 ' + l * s + ' ';
9377
- var lineLength = l * (e - s);
9378
- var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v / 100;
9379
- var units = Math.floor(lineLength / segment);
9380
- var j;
9381
- for (j = 0; j < units; j += 1) {
9382
- dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v / 100 + ' ';
9383
- }
9384
- dasharrayValue += '0 ' + l * 10 + ' 0 0';
9385
- } else {
9386
- dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v / 100;
9387
- }
9388
- path.setAttribute('stroke-dasharray', dasharrayValue);
9389
- }
9390
- }
9391
- if (forceRender || this.filterManager.effectElements[4].p._mdf) {
9392
- this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);
9393
- }
9394
-
9395
- if (forceRender || this.filterManager.effectElements[6].p._mdf) {
9396
- this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);
9397
- }
9398
- if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {
9399
- if (forceRender || this.filterManager.effectElements[3].p._mdf) {
9400
- var color = this.filterManager.effectElements[3].p.v;
9401
- this.pathMasker.setAttribute('stroke', 'rgb(' + bm_floor(color[0] * 255) + ',' + bm_floor(color[1] * 255) + ',' + bm_floor(color[2] * 255) + ')');
9402
- }
9403
- }
9404
- };
9405
-
9406
- function SVGTritoneFilter(filter, filterManager) {
9407
- this.filterManager = filterManager;
9408
- var feColorMatrix = createNS('feColorMatrix');
9409
- feColorMatrix.setAttribute('type', 'matrix');
9410
- feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');
9411
- feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');
9412
- feColorMatrix.setAttribute('result', 'f1');
9413
- filter.appendChild(feColorMatrix);
9414
- var feComponentTransfer = createNS('feComponentTransfer');
9415
- feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');
9416
- filter.appendChild(feComponentTransfer);
9417
- this.matrixFilter = feComponentTransfer;
9418
- var feFuncR = createNS('feFuncR');
9419
- feFuncR.setAttribute('type', 'table');
9420
- feComponentTransfer.appendChild(feFuncR);
9421
- this.feFuncR = feFuncR;
9422
- var feFuncG = createNS('feFuncG');
9423
- feFuncG.setAttribute('type', 'table');
9424
- feComponentTransfer.appendChild(feFuncG);
9425
- this.feFuncG = feFuncG;
9426
- var feFuncB = createNS('feFuncB');
9427
- feFuncB.setAttribute('type', 'table');
9428
- feComponentTransfer.appendChild(feFuncB);
9429
- this.feFuncB = feFuncB;
9430
- }
9431
-
9432
- SVGTritoneFilter.prototype.renderFrame = function (forceRender) {
9433
- if (forceRender || this.filterManager._mdf) {
9434
- var color1 = this.filterManager.effectElements[0].p.v;
9435
- var color2 = this.filterManager.effectElements[1].p.v;
9436
- var color3 = this.filterManager.effectElements[2].p.v;
9437
- var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];
9438
- var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];
9439
- var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];
9440
- this.feFuncR.setAttribute('tableValues', tableR);
9441
- this.feFuncG.setAttribute('tableValues', tableG);
9442
- this.feFuncB.setAttribute('tableValues', tableB);
9443
- //var opacity = this.filterManager.effectElements[2].p.v/100;
9444
- //this.matrixFilter.setAttribute('values',(colorWhite[0]- colorBlack[0])+' 0 0 0 '+ colorBlack[0] +' '+ (colorWhite[1]- colorBlack[1]) +' 0 0 0 '+ colorBlack[1] +' '+ (colorWhite[2]- colorBlack[2]) +' 0 0 0 '+ colorBlack[2] +' 0 0 0 ' + opacity + ' 0');
9445
- }
9446
- };
9447
-
9448
- function SVGProLevelsFilter(filter, filterManager) {
9449
- this.filterManager = filterManager;
9450
- var effectElements = this.filterManager.effectElements;
9451
- var feComponentTransfer = createNS('feComponentTransfer');
9452
- var feFuncR, feFuncG, feFuncB;
9453
-
9454
- if (effectElements[10].p.k || effectElements[10].p.v !== 0 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 1 || effectElements[13].p.k || effectElements[13].p.v !== 0 || effectElements[14].p.k || effectElements[14].p.v !== 1) {
9455
- this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);
9456
- }
9457
- if (effectElements[17].p.k || effectElements[17].p.v !== 0 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 1 || effectElements[20].p.k || effectElements[20].p.v !== 0 || effectElements[21].p.k || effectElements[21].p.v !== 1) {
9458
- this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);
9459
- }
9460
- if (effectElements[24].p.k || effectElements[24].p.v !== 0 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 1 || effectElements[27].p.k || effectElements[27].p.v !== 0 || effectElements[28].p.k || effectElements[28].p.v !== 1) {
9461
- this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);
9462
- }
9463
- if (effectElements[31].p.k || effectElements[31].p.v !== 0 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 1 || effectElements[34].p.k || effectElements[34].p.v !== 0 || effectElements[35].p.k || effectElements[35].p.v !== 1) {
9464
- this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);
9465
- }
9466
-
9467
- if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {
9468
- feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');
9469
- filter.appendChild(feComponentTransfer);
9470
- feComponentTransfer = createNS('feComponentTransfer');
9471
- }
9472
-
9473
- if (effectElements[3].p.k || effectElements[3].p.v !== 0 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 1 || effectElements[6].p.k || effectElements[6].p.v !== 0 || effectElements[7].p.k || effectElements[7].p.v !== 1) {
9474
-
9475
- feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');
9476
- filter.appendChild(feComponentTransfer);
9477
- this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);
9478
- this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);
9479
- this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);
9480
- }
9481
- }
9482
-
9483
- SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {
9484
- var feFunc = createNS(type);
9485
- feFunc.setAttribute('type', 'table');
9486
- feComponentTransfer.appendChild(feFunc);
9487
- return feFunc;
9488
- };
9489
-
9490
- SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {
9491
- var cnt = 0;
9492
- var segments = 256;
9493
- var perc;
9494
- var min = Math.min(inputBlack, inputWhite);
9495
- var max = Math.max(inputBlack, inputWhite);
9496
- var table = Array.call(null, {
9497
- length: segments
9498
- });
9499
- var colorValue;
9500
- var pos = 0;
9501
- var outputDelta = outputWhite - outputBlack;
9502
- var inputDelta = inputWhite - inputBlack;
9503
- while (cnt <= 256) {
9504
- perc = cnt / 256;
9505
- if (perc <= min) {
9506
- colorValue = inputDelta < 0 ? outputWhite : outputBlack;
9507
- } else if (perc >= max) {
9508
- colorValue = inputDelta < 0 ? outputBlack : outputWhite;
9509
- } else {
9510
- colorValue = (outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma));
9511
- }
9512
- table[pos++] = colorValue;
9513
- cnt += 256 / (segments - 1);
9514
- }
9515
- return table.join(' ');
9516
- };
9517
-
9518
- SVGProLevelsFilter.prototype.renderFrame = function (forceRender) {
9519
- if (forceRender || this.filterManager._mdf) {
9520
- var val, cnt, perc, bezier;
9521
- var effectElements = this.filterManager.effectElements;
9522
- if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) {
9523
- val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v);
9524
- this.feFuncRComposed.setAttribute('tableValues', val);
9525
- this.feFuncGComposed.setAttribute('tableValues', val);
9526
- this.feFuncBComposed.setAttribute('tableValues', val);
9527
- }
9528
-
9529
-
9530
- if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) {
9531
- val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v);
9532
- this.feFuncR.setAttribute('tableValues', val);
9533
- }
9534
-
9535
- if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) {
9536
- val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v);
9537
- this.feFuncG.setAttribute('tableValues', val);
9538
- }
9539
-
9540
- if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) {
9541
- val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v);
9542
- this.feFuncB.setAttribute('tableValues', val);
9543
- }
9544
-
9545
- if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) {
9546
- val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);
9547
- this.feFuncA.setAttribute('tableValues', val);
9548
- }
9549
-
9550
- }
9551
- };
9552
-
9553
- function SVGDropShadowEffect(filter, filterManager) {
9554
- var filterSize = filterManager.container.globalData.renderConfig.filterSize
9555
- filter.setAttribute('x', filterSize.x);
9556
- filter.setAttribute('y', filterSize.y);
9557
- filter.setAttribute('width', filterSize.width);
9558
- filter.setAttribute('height', filterSize.height);
9559
- this.filterManager = filterManager;
9560
-
9561
- var feGaussianBlur = createNS('feGaussianBlur');
9562
- feGaussianBlur.setAttribute('in', 'SourceAlpha');
9563
- feGaussianBlur.setAttribute('result', 'drop_shadow_1');
9564
- feGaussianBlur.setAttribute('stdDeviation', '0');
9565
- this.feGaussianBlur = feGaussianBlur;
9566
- filter.appendChild(feGaussianBlur);
9567
-
9568
- var feOffset = createNS('feOffset');
9569
- feOffset.setAttribute('dx', '25');
9570
- feOffset.setAttribute('dy', '0');
9571
- feOffset.setAttribute('in', 'drop_shadow_1');
9572
- feOffset.setAttribute('result', 'drop_shadow_2');
9573
- this.feOffset = feOffset;
9574
- filter.appendChild(feOffset);
9575
- var feFlood = createNS('feFlood');
9576
- feFlood.setAttribute('flood-color', '#00ff00');
9577
- feFlood.setAttribute('flood-opacity', '1');
9578
- feFlood.setAttribute('result', 'drop_shadow_3');
9579
- this.feFlood = feFlood;
9580
- filter.appendChild(feFlood);
9581
-
9582
- var feComposite = createNS('feComposite');
9583
- feComposite.setAttribute('in', 'drop_shadow_3');
9584
- feComposite.setAttribute('in2', 'drop_shadow_2');
9585
- feComposite.setAttribute('operator', 'in');
9586
- feComposite.setAttribute('result', 'drop_shadow_4');
9587
- filter.appendChild(feComposite);
9588
-
9589
-
9590
- var feMerge = createNS('feMerge');
9591
- filter.appendChild(feMerge);
9592
- var feMergeNode;
9593
- feMergeNode = createNS('feMergeNode');
9594
- feMerge.appendChild(feMergeNode);
9595
- feMergeNode = createNS('feMergeNode');
9596
- feMergeNode.setAttribute('in', 'SourceGraphic');
9597
- this.feMergeNode = feMergeNode;
9598
- this.feMerge = feMerge;
9599
- this.originalNodeAdded = false;
9600
- feMerge.appendChild(feMergeNode);
9601
- }
9602
-
9603
- SVGDropShadowEffect.prototype.renderFrame = function (forceRender) {
9604
- if (forceRender || this.filterManager._mdf) {
9605
- if (forceRender || this.filterManager.effectElements[4].p._mdf) {
9606
- this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);
9607
- }
9608
- if (forceRender || this.filterManager.effectElements[0].p._mdf) {
9609
- var col = this.filterManager.effectElements[0].p.v;
9610
- this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));
9611
- }
9612
- if (forceRender || this.filterManager.effectElements[1].p._mdf) {
9613
- this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);
9614
- }
9615
- if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {
9616
- var distance = this.filterManager.effectElements[3].p.v;
9617
- var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;
9618
- var x = distance * Math.cos(angle);
9619
- var y = distance * Math.sin(angle);
9620
- this.feOffset.setAttribute('dx', x);
9621
- this.feOffset.setAttribute('dy', y);
9622
- }
9623
- /*if(forceRender || this.filterManager.effectElements[5].p._mdf){
9624
- if(this.filterManager.effectElements[5].p.v === 1 && this.originalNodeAdded) {
9625
- this.feMerge.removeChild(this.feMergeNode);
9626
- this.originalNodeAdded = false;
9627
- } else if(this.filterManager.effectElements[5].p.v === 0 && !this.originalNodeAdded) {
9628
- this.feMerge.appendChild(this.feMergeNode);
9629
- this.originalNodeAdded = true;
9630
- }
9631
- }*/
9632
- }
9633
- };
9634
- var _svgMatteSymbols = [];
9635
-
9636
- function SVGMatte3Effect(filterElem, filterManager, elem) {
9637
- this.initialized = false;
9638
- this.filterManager = filterManager;
9639
- this.filterElem = filterElem;
9640
- this.elem = elem;
9641
- elem.matteElement = createNS('g');
9642
- elem.matteElement.appendChild(elem.layerElement);
9643
- elem.matteElement.appendChild(elem.transformedElement);
9644
- elem.baseElement = elem.matteElement;
9645
- }
9646
-
9647
- SVGMatte3Effect.prototype.findSymbol = function (mask) {
9648
- var i = 0,
9649
- len = _svgMatteSymbols.length;
9650
- while (i < len) {
9651
- if (_svgMatteSymbols[i] === mask) {
9652
- return _svgMatteSymbols[i];
9653
- }
9654
- i += 1;
9655
- }
9656
- return null;
9657
- };
9658
-
9659
- SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {
9660
- var parentNode = mask.layerElement.parentNode;
9661
- if (!parentNode) {
9662
- return;
9663
- }
9664
- var children = parentNode.children;
9665
- var i = 0,
9666
- len = children.length;
9667
- while (i < len) {
9668
- if (children[i] === mask.layerElement) {
9669
- break;
9670
- }
9671
- i += 1;
9672
- }
9673
- var nextChild;
9674
- if (i <= len - 2) {
9675
- nextChild = children[i + 1];
9676
- }
9677
- var useElem = createNS('use');
9678
- useElem.setAttribute('href', '#' + symbolId);
9679
- if (nextChild) {
9680
- parentNode.insertBefore(useElem, nextChild);
9681
- } else {
9682
- parentNode.appendChild(useElem);
9683
- }
9684
- };
9685
-
9686
- SVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) {
9687
- if (!this.findSymbol(mask)) {
9688
- var symbolId = createElementID();
9689
- var masker = createNS('mask');
9690
- masker.setAttribute('id', mask.layerId);
9691
- masker.setAttribute('mask-type', 'alpha');
9692
- _svgMatteSymbols.push(mask);
9693
- var defs = elem.globalData.defs;
9694
- defs.appendChild(masker);
9695
- var symbol = createNS('symbol');
9696
- symbol.setAttribute('id', symbolId);
9697
- this.replaceInParent(mask, symbolId);
9698
- symbol.appendChild(mask.layerElement);
9699
- defs.appendChild(symbol);
9700
- var useElem = createNS('use');
9701
- useElem.setAttribute('href', '#' + symbolId);
9702
- masker.appendChild(useElem);
9703
- mask.data.hd = false;
9704
- mask.show();
9705
- }
9706
- elem.setMatte(mask.layerId);
9707
- };
9708
-
9709
- SVGMatte3Effect.prototype.initialize = function () {
9710
- var ind = this.filterManager.effectElements[0].p.v;
9711
- var elements = this.elem.comp.elements;
9712
- var i = 0,
9713
- len = elements.length;
9714
- while (i < len) {
9715
- if (elements[i] && elements[i].data.ind === ind) {
9716
- this.setElementAsMask(this.elem, elements[i]);
9717
- }
9718
- i += 1;
9719
- }
9720
- this.initialized = true;
9721
- };
9722
-
9723
- SVGMatte3Effect.prototype.renderFrame = function () {
9724
- if (!this.initialized) {
9725
- this.initialize();
9726
- }
9727
- };
9728
-
9729
- function SVGEffects(elem) {
9730
- var i, len = elem.data.ef ? elem.data.ef.length : 0;
9731
- var filId = createElementID();
9732
- var fil = filtersFactory.createFilter(filId);
9733
- var count = 0;
9734
- this.filters = [];
9735
- var filterManager;
9736
- for (i = 0; i < len; i += 1) {
9737
- filterManager = null;
9738
- if (elem.data.ef[i].ty === 20) {
9739
- count += 1;
9740
- filterManager = new SVGTintFilter(fil, elem.effectsManager.effectElements[i]);
9741
- } else if (elem.data.ef[i].ty === 21) {
9742
- count += 1;
9743
- filterManager = new SVGFillFilter(fil, elem.effectsManager.effectElements[i]);
9744
- } else if (elem.data.ef[i].ty === 22) {
9745
- filterManager = new SVGStrokeEffect(elem, elem.effectsManager.effectElements[i]);
9746
- } else if (elem.data.ef[i].ty === 23) {
9747
- count += 1;
9748
- filterManager = new SVGTritoneFilter(fil, elem.effectsManager.effectElements[i]);
9749
- } else if (elem.data.ef[i].ty === 24) {
9750
- count += 1;
9751
- filterManager = new SVGProLevelsFilter(fil, elem.effectsManager.effectElements[i]);
9752
- } else if (elem.data.ef[i].ty === 25) {
9753
- count += 1;
9754
- filterManager = new SVGDropShadowEffect(fil, elem.effectsManager.effectElements[i]);
9755
- } else if (elem.data.ef[i].ty === 28) {
9756
- //count += 1;
9757
- filterManager = new SVGMatte3Effect(fil, elem.effectsManager.effectElements[i], elem);
9758
- } else if (elem.data.ef[i].ty === 29) {
9759
- count += 1;
9760
- filterManager = new SVGGaussianBlurEffect(fil, elem.effectsManager.effectElements[i]);
9761
- }
9762
- if (filterManager) {
9763
- this.filters.push(filterManager);
9764
- }
9765
- }
9766
- if (count) {
9767
- elem.globalData.defs.appendChild(fil);
9768
- elem.layerElement.setAttribute('filter', 'url(' + locationHref + '#' + filId + ')');
9769
- }
9770
- if (this.filters.length) {
9771
- elem.addRenderableComponent(this);
9772
- }
9773
- }
9774
-
9775
- SVGEffects.prototype.renderFrame = function (_isFirstFrame) {
9776
- var i, len = this.filters.length;
9777
- for (i = 0; i < len; i += 1) {
9778
- this.filters[i].renderFrame(_isFirstFrame);
9779
- }
9780
- };
9781
-
9782
- function CVContextData() {
9783
- this.saved = [];
9784
- this.cArrPos = 0;
9785
- this.cTr = new Matrix();
9786
- this.cO = 1;
9787
- var i, len = 15;
9788
- this.savedOp = createTypedArray('float32', len);
9789
- for (i = 0; i < len; i += 1) {
9790
- this.saved[i] = createTypedArray('float32', 16);
9791
- }
9792
- this._length = len;
9793
- }
9794
-
9795
- CVContextData.prototype.duplicate = function () {
9796
- var newLength = this._length * 2;
9797
- var currentSavedOp = this.savedOp;
9798
- this.savedOp = createTypedArray('float32', newLength);
9799
- this.savedOp.set(currentSavedOp);
9800
- var i = 0;
9801
- for (i = this._length; i < newLength; i += 1) {
9802
- this.saved[i] = createTypedArray('float32', 16);
9803
- }
9804
- this._length = newLength;
9805
- };
9806
-
9807
- CVContextData.prototype.reset = function () {
9808
- this.cArrPos = 0;
9809
- this.cTr.reset();
9810
- this.cO = 1;
9811
- };
9812
-
9813
- function CVBaseElement() { }
9814
-
9815
- CVBaseElement.prototype = {
9816
- createElements: function () { },
9817
- initRendererElement: function () { },
9818
- createContainerElements: function () {
9819
- this.canvasContext = this.globalData.canvasContext;
9820
- this.renderableEffectsManager = new CVEffects(this);
9821
- },
9822
- createContent: function () { },
9823
- setBlendMode: function () {
9824
- var globalData = this.globalData;
9825
- if (globalData.blendMode !== this.data.bm) {
9826
- globalData.blendMode = this.data.bm;
9827
- var blendModeValue = getBlendMode(this.data.bm);
9828
- globalData.canvasContext.globalCompositeOperation = blendModeValue;
9829
- }
9830
- },
9831
- createRenderableComponents: function () {
9832
- this.maskManager = new CVMaskElement(this.data, this);
9833
- },
9834
- hideElement: function () {
9835
- if (!this.hidden && (!this.isInRange || this.isTransparent)) {
9836
- this.hidden = true;
9837
- }
9838
- },
9839
- showElement: function () {
9840
- if (this.isInRange && !this.isTransparent) {
9841
- this.hidden = false;
9842
- this._isFirstFrame = true;
9843
- this.maskManager._isFirstFrame = true;
9844
- }
9845
- },
9846
- renderFrame: function () {
9847
- if (this.hidden || this.data.hd) {
9848
- return;
9849
- }
9850
- this.renderTransform();
9851
- this.renderRenderable();
9852
- this.setBlendMode();
9853
- var forceRealStack = this.data.ty === 0;
9854
- this.globalData.renderer.save(forceRealStack);
9855
- this.globalData.renderer.ctxTransform(this.finalTransform.mat.props);
9856
- this.globalData.renderer.ctxOpacity(this.finalTransform.mProp.o.v);
9857
- this.renderInnerContent();
9858
- this.globalData.renderer.restore(forceRealStack);
9859
- if (this.maskManager.hasMasks) {
9860
- this.globalData.renderer.restore(true);
9861
- }
9862
- if (this._isFirstFrame) {
9863
- this._isFirstFrame = false;
9864
- }
9865
- },
9866
- destroy: function () {
9867
- this.canvasContext = null;
9868
- this.data = null;
9869
- this.globalData = null;
9870
- this.maskManager.destroy();
9871
- },
9872
- mHelper: new Matrix()
9873
- };
9874
- CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;
9875
- CVBaseElement.prototype.show = CVBaseElement.prototype.showElement;
9876
-
9877
- function CVImageElement(data, globalData, comp) {
9878
- this.assetData = globalData.getAssetData(data.refId);
9879
- this.img = globalData.imageLoader.getImage(this.assetData);
9880
- this.initElement(data, globalData, comp);
9881
- }
9882
- extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);
9883
-
9884
- CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;
9885
- CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;
9886
-
9887
- CVImageElement.prototype.createContent = function () {
9888
-
9889
- if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {
9890
- var canvas = createTag('canvas');
9891
- canvas.width = this.assetData.w;
9892
- canvas.height = this.assetData.h;
9893
- var ctx = canvas.getContext('2d');
9894
-
9895
- var imgW = this.img.width;
9896
- var imgH = this.img.height;
9897
- var imgRel = imgW / imgH;
9898
- var canvasRel = this.assetData.w / this.assetData.h;
9899
- var widthCrop, heightCrop;
9900
- var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;
9901
- if ((imgRel > canvasRel && par === 'xMidYMid slice') || (imgRel < canvasRel && par !== 'xMidYMid slice')) {
9902
- heightCrop = imgH;
9903
- widthCrop = heightCrop * canvasRel;
9904
- } else {
9905
- widthCrop = imgW;
9906
- heightCrop = widthCrop / canvasRel;
9907
- }
9908
- ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);
9909
- this.img = canvas;
9910
- }
9911
-
9912
- };
9913
-
9914
- CVImageElement.prototype.renderInnerContent = function (parentMatrix) {
9915
- this.canvasContext.drawImage(this.img, 0, 0);
9916
- };
9917
-
9918
- CVImageElement.prototype.destroy = function () {
9919
- this.img = null;
9920
- };
9921
-
9922
- function CVCompElement(data, globalData, comp) {
9923
- this.completeLayers = false;
9924
- this.layers = data.layers;
9925
- this.pendingElements = [];
9926
- this.elements = createSizedArray(this.layers.length);
9927
- this.initElement(data, globalData, comp);
9928
- this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {
9929
- _placeholder: true
9930
- };
9931
- }
9932
-
9933
- extendPrototype([CanvasRenderer, ICompElement, CVBaseElement], CVCompElement);
9934
-
9935
- CVCompElement.prototype.renderInnerContent = function () {
9936
- var ctx = this.canvasContext;
9937
- ctx.beginPath();
9938
- ctx.moveTo(0, 0);
9939
- ctx.lineTo(this.data.w, 0);
9940
- ctx.lineTo(this.data.w, this.data.h);
9941
- ctx.lineTo(0, this.data.h);
9942
- ctx.lineTo(0, 0);
9943
- ctx.clip();
9944
- var i, len = this.layers.length;
9945
- for (i = len - 1; i >= 0; i -= 1) {
9946
- if (this.completeLayers || this.elements[i]) {
9947
- this.elements[i].renderFrame();
9948
- }
9949
- }
9950
- };
9951
-
9952
- CVCompElement.prototype.destroy = function () {
9953
- var i, len = this.layers.length;
9954
- for (i = len - 1; i >= 0; i -= 1) {
9955
- if (this.elements[i]) {
9956
- this.elements[i].destroy();
9957
- }
9958
- }
9959
- this.layers = null;
9960
- this.elements = null;
9961
- };
9962
-
9963
- function CVMaskElement(data, element) {
9964
- this.data = data;
9965
- this.element = element;
9966
- this.masksProperties = this.data.masksProperties || [];
9967
- this.viewData = createSizedArray(this.masksProperties.length);
9968
- var i, len = this.masksProperties.length,
9969
- hasMasks = false;
9970
- for (i = 0; i < len; i++) {
9971
- if (this.masksProperties[i].mode !== 'n') {
9972
- hasMasks = true;
9973
- }
9974
- this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);
9975
- }
9976
- this.hasMasks = hasMasks;
9977
- if (hasMasks) {
9978
- this.element.addRenderableComponent(this);
9979
- }
9980
- }
9981
-
9982
- CVMaskElement.prototype.renderFrame = function () {
9983
- if (!this.hasMasks) {
9984
- return;
9985
- }
9986
- var transform = this.element.finalTransform.mat;
9987
- var ctx = this.element.canvasContext;
9988
- var i, len = this.masksProperties.length;
9989
- var pt, pts, data;
9990
- ctx.beginPath();
9991
- for (i = 0; i < len; i++) {
9992
- if (this.masksProperties[i].mode !== 'n') {
9993
- if (this.masksProperties[i].inv) {
9994
- ctx.moveTo(0, 0);
9995
- ctx.lineTo(this.element.globalData.compSize.w, 0);
9996
- ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);
9997
- ctx.lineTo(0, this.element.globalData.compSize.h);
9998
- ctx.lineTo(0, 0);
9999
- }
10000
- data = this.viewData[i].v;
10001
- pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);
10002
- ctx.moveTo(pt[0], pt[1]);
10003
- var j, jLen = data._length;
10004
- for (j = 1; j < jLen; j++) {
10005
- pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);
10006
- ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);
10007
- }
10008
- pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);
10009
- ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);
10010
- }
10011
- }
10012
- this.element.globalData.renderer.save(true);
10013
- ctx.clip();
10014
- };
10015
-
10016
- CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;
10017
-
10018
- CVMaskElement.prototype.destroy = function () {
10019
- this.element = null;
10020
- };
10021
-
10022
- function CVShapeElement(data, globalData, comp) {
10023
- this.shapes = [];
10024
- this.shapesData = data.shapes;
10025
- this.stylesList = [];
10026
- this.itemsData = [];
10027
- this.prevViewData = [];
10028
- this.shapeModifiers = [];
10029
- this.processedElements = [];
10030
- this.transformsManager = new ShapeTransformManager();
10031
- this.initElement(data, globalData, comp);
10032
- }
10033
-
10034
- extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);
10035
-
10036
- CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;
10037
-
10038
- CVShapeElement.prototype.transformHelper = {
10039
- opacity: 1,
10040
- _opMdf: false
10041
- };
10042
-
10043
- CVShapeElement.prototype.dashResetter = [];
10044
-
10045
- CVShapeElement.prototype.createContent = function () {
10046
- this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);
10047
- };
10048
-
10049
- CVShapeElement.prototype.createStyleElement = function (data, transforms) {
10050
- var styleElem = {
10051
- data: data,
10052
- type: data.ty,
10053
- preTransforms: this.transformsManager.addTransformSequence(transforms),
10054
- transforms: [],
10055
- elements: [],
10056
- closed: data.hd === true
10057
- };
10058
- var elementData = {};
10059
- if (data.ty == 'fl' || data.ty == 'st') {
10060
- elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);
10061
- if (!elementData.c.k) {
10062
- styleElem.co = 'rgb(' + bm_floor(elementData.c.v[0]) + ',' + bm_floor(elementData.c.v[1]) + ',' + bm_floor(elementData.c.v[2]) + ')';
10063
- }
10064
- } else if (data.ty === 'gf' || data.ty === 'gs') {
10065
- elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);
10066
- elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);
10067
- elementData.h = PropertyFactory.getProp(this, data.h || {
10068
- k: 0
10069
- }, 0, 0.01, this);
10070
- elementData.a = PropertyFactory.getProp(this, data.a || {
10071
- k: 0
10072
- }, 0, degToRads, this);
10073
- elementData.g = new GradientProperty(this, data.g, this);
10074
- }
10075
- elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);
10076
- if (data.ty == 'st' || data.ty == 'gs') {
10077
- styleElem.lc = this.lcEnum[data.lc] || 'round';
10078
- styleElem.lj = this.ljEnum[data.lj] || 'round';
10079
- if (data.lj == 1) {
10080
- styleElem.ml = data.ml;
10081
- }
10082
- elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);
10083
- if (!elementData.w.k) {
10084
- styleElem.wi = elementData.w.v;
10085
- }
10086
- if (data.d) {
10087
- var d = new DashProperty(this, data.d, 'canvas', this);
10088
- elementData.d = d;
10089
- if (!elementData.d.k) {
10090
- styleElem.da = elementData.d.dashArray;
10091
- styleElem.do = elementData.d.dashoffset[0];
10092
- }
10093
- }
10094
- } else {
10095
- styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';
10096
- }
10097
- this.stylesList.push(styleElem);
10098
- elementData.style = styleElem;
10099
- return elementData;
10100
- };
10101
-
10102
- CVShapeElement.prototype.createGroupElement = function (data) {
10103
- var elementData = {
10104
- it: [],
10105
- prevViewData: []
10106
- };
10107
- return elementData;
10108
- };
10109
-
10110
- CVShapeElement.prototype.createTransformElement = function (data) {
10111
- var elementData = {
10112
- transform: {
10113
- opacity: 1,
10114
- _opMdf: false,
10115
- key: this.transformsManager.getNewKey(),
10116
- op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),
10117
- mProps: TransformPropertyFactory.getTransformProperty(this, data, this)
10118
- }
10119
- };
10120
- return elementData;
10121
- };
10122
-
10123
- CVShapeElement.prototype.createShapeElement = function (data) {
10124
- var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);
10125
-
10126
- this.shapes.push(elementData);
10127
- this.addShapeToModifiers(elementData);
10128
- return elementData;
10129
- };
10130
-
10131
- CVShapeElement.prototype.reloadShapes = function () {
10132
- this._isFirstFrame = true;
10133
- var i, len = this.itemsData.length;
10134
- for (i = 0; i < len; i += 1) {
10135
- this.prevViewData[i] = this.itemsData[i];
10136
- }
10137
- this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);
10138
- len = this.dynamicProperties.length;
10139
- for (i = 0; i < len; i += 1) {
10140
- this.dynamicProperties[i].getValue();
10141
- }
10142
- this.renderModifiers();
10143
- this.transformsManager.processSequences(this._isFirstFrame);
10144
- };
10145
-
10146
- CVShapeElement.prototype.addTransformToStyleList = function (transform) {
10147
- var i, len = this.stylesList.length;
10148
- for (i = 0; i < len; i += 1) {
10149
- if (!this.stylesList[i].closed) {
10150
- this.stylesList[i].transforms.push(transform);
10151
- }
10152
- }
10153
- }
10154
-
10155
- CVShapeElement.prototype.removeTransformFromStyleList = function () {
10156
- var i, len = this.stylesList.length;
10157
- for (i = 0; i < len; i += 1) {
10158
- if (!this.stylesList[i].closed) {
10159
- this.stylesList[i].transforms.pop();
10160
- }
10161
- }
10162
- }
10163
-
10164
- CVShapeElement.prototype.closeStyles = function (styles) {
10165
- var i, len = styles.length,
10166
- j, jLen;
10167
- for (i = 0; i < len; i += 1) {
10168
- styles[i].closed = true;
10169
- }
10170
- }
10171
-
10172
- CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {
10173
- var i, len = arr.length - 1;
10174
- var j, jLen;
10175
- var ownStyles = [],
10176
- ownModifiers = [],
10177
- processedPos, modifier, currentTransform;
10178
- var ownTransforms = [].concat(transforms);
10179
- for (i = len; i >= 0; i -= 1) {
10180
- processedPos = this.searchProcessedElement(arr[i]);
10181
- if (!processedPos) {
10182
- arr[i]._shouldRender = shouldRender;
10183
- } else {
10184
- itemsData[i] = prevViewData[processedPos - 1];
10185
- }
10186
- if (arr[i].ty == 'fl' || arr[i].ty == 'st' || arr[i].ty == 'gf' || arr[i].ty == 'gs') {
10187
- if (!processedPos) {
10188
- itemsData[i] = this.createStyleElement(arr[i], ownTransforms);
10189
- } else {
10190
- itemsData[i].style.closed = false;
10191
- }
10192
-
10193
- ownStyles.push(itemsData[i].style);
10194
- } else if (arr[i].ty == 'gr') {
10195
- if (!processedPos) {
10196
- itemsData[i] = this.createGroupElement(arr[i]);
10197
- } else {
10198
- jLen = itemsData[i].it.length;
10199
- for (j = 0; j < jLen; j += 1) {
10200
- itemsData[i].prevViewData[j] = itemsData[i].it[j];
10201
- }
10202
- }
10203
- this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);
10204
- } else if (arr[i].ty == 'tr') {
10205
- if (!processedPos) {
10206
- currentTransform = this.createTransformElement(arr[i]);
10207
- itemsData[i] = currentTransform;
10208
- }
10209
- ownTransforms.push(itemsData[i]);
10210
- this.addTransformToStyleList(itemsData[i]);
10211
- } else if (arr[i].ty == 'sh' || arr[i].ty == 'rc' || arr[i].ty == 'el' || arr[i].ty == 'sr') {
10212
- if (!processedPos) {
10213
- itemsData[i] = this.createShapeElement(arr[i]);
10214
- }
10215
-
10216
- } else if (arr[i].ty == 'tm' || arr[i].ty == 'rd') {
10217
- if (!processedPos) {
10218
- modifier = ShapeModifiers.getModifier(arr[i].ty);
10219
- modifier.init(this, arr[i]);
10220
- itemsData[i] = modifier;
10221
- this.shapeModifiers.push(modifier);
10222
- } else {
10223
- modifier = itemsData[i];
10224
- modifier.closed = false;
10225
- }
10226
- ownModifiers.push(modifier);
10227
- } else if (arr[i].ty == 'rp') {
10228
- if (!processedPos) {
10229
- modifier = ShapeModifiers.getModifier(arr[i].ty);
10230
- itemsData[i] = modifier;
10231
- modifier.init(this, arr, i, itemsData);
10232
- this.shapeModifiers.push(modifier);
10233
- shouldRender = false;
10234
- } else {
10235
- modifier = itemsData[i];
10236
- modifier.closed = true;
10237
- }
10238
- ownModifiers.push(modifier);
10239
- }
10240
- this.addProcessedElement(arr[i], i + 1);
10241
- }
10242
- this.removeTransformFromStyleList();
10243
- this.closeStyles(ownStyles);
10244
- len = ownModifiers.length;
10245
- for (i = 0; i < len; i += 1) {
10246
- ownModifiers[i].closed = true;
10247
- }
10248
- };
10249
-
10250
- CVShapeElement.prototype.renderInnerContent = function () {
10251
- this.transformHelper.opacity = 1;
10252
- this.transformHelper._opMdf = false;
10253
- this.renderModifiers();
10254
- this.transformsManager.processSequences(this._isFirstFrame);
10255
- this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);
10256
- };
10257
-
10258
- CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {
10259
- var props, groupMatrix;
10260
- if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {
10261
- groupTransform.opacity = parentTransform.opacity;
10262
- groupTransform.opacity *= groupTransform.op.v;
10263
- groupTransform._opMdf = true;
10264
- }
10265
- };
10266
-
10267
- CVShapeElement.prototype.drawLayer = function () {
10268
- var i, len = this.stylesList.length;
10269
- var j, jLen, k, kLen, elems, nodes, renderer = this.globalData.renderer,
10270
- ctx = this.globalData.canvasContext,
10271
- type, currentStyle;
10272
- for (i = 0; i < len; i += 1) {
10273
- currentStyle = this.stylesList[i];
10274
- type = currentStyle.type;
10275
-
10276
- //Skipping style when
10277
- //Stroke width equals 0
10278
- //style should not be rendered (extra unused repeaters)
10279
- //current opacity equals 0
10280
- //global opacity equals 0
10281
- if (((type === 'st' || type === 'gs') && currentStyle.wi === 0) || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0) {
10282
- continue;
10283
- }
10284
- renderer.save();
10285
- elems = currentStyle.elements;
10286
- if (type === 'st' || type === 'gs') {
10287
- ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;
10288
- ctx.lineWidth = currentStyle.wi;
10289
- ctx.lineCap = currentStyle.lc;
10290
- ctx.lineJoin = currentStyle.lj;
10291
- ctx.miterLimit = currentStyle.ml || 0;
10292
- } else {
10293
- ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;
10294
- }
10295
- renderer.ctxOpacity(currentStyle.coOp);
10296
- if (type !== 'st' && type !== 'gs') {
10297
- ctx.beginPath();
10298
- }
10299
- renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);
10300
- jLen = elems.length;
10301
- for (j = 0; j < jLen; j += 1) {
10302
- if (type === 'st' || type === 'gs') {
10303
- ctx.beginPath();
10304
- if (currentStyle.da) {
10305
- ctx.setLineDash(currentStyle.da);
10306
- ctx.lineDashOffset = currentStyle.do;
10307
- }
10308
- }
10309
- nodes = elems[j].trNodes;
10310
- kLen = nodes.length;
10311
-
10312
- for (k = 0; k < kLen; k += 1) {
10313
- if (nodes[k].t == 'm') {
10314
- ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);
10315
- } else if (nodes[k].t == 'c') {
10316
- ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);
10317
- } else {
10318
- ctx.closePath();
10319
- }
10320
- }
10321
- if (type === 'st' || type === 'gs') {
10322
- ctx.stroke();
10323
- if (currentStyle.da) {
10324
- ctx.setLineDash(this.dashResetter);
10325
- }
10326
- }
10327
- }
10328
- if (type !== 'st' && type !== 'gs') {
10329
- ctx.fill(currentStyle.r);
10330
- }
10331
- renderer.restore();
10332
- }
10333
- };
10334
-
10335
- CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {
10336
- var i, len = items.length - 1;
10337
- var groupTransform;
10338
- groupTransform = parentTransform;
10339
- for (i = len; i >= 0; i -= 1) {
10340
- if (items[i].ty == 'tr') {
10341
- groupTransform = data[i].transform;
10342
- this.renderShapeTransform(parentTransform, groupTransform);
10343
- } else if (items[i].ty == 'sh' || items[i].ty == 'el' || items[i].ty == 'rc' || items[i].ty == 'sr') {
10344
- this.renderPath(items[i], data[i]);
10345
- } else if (items[i].ty == 'fl') {
10346
- this.renderFill(items[i], data[i], groupTransform);
10347
- } else if (items[i].ty == 'st') {
10348
- this.renderStroke(items[i], data[i], groupTransform);
10349
- } else if (items[i].ty == 'gf' || items[i].ty == 'gs') {
10350
- this.renderGradientFill(items[i], data[i], groupTransform);
10351
- } else if (items[i].ty == 'gr') {
10352
- this.renderShape(groupTransform, items[i].it, data[i].it);
10353
- } else if (items[i].ty == 'tm') {
10354
- //
10355
- }
10356
- }
10357
- if (isMain) {
10358
- this.drawLayer();
10359
- }
10360
-
10361
- };
10362
-
10363
- CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {
10364
- if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {
10365
- var shapeNodes = styledShape.trNodes;
10366
- var paths = shape.paths;
10367
- var i, len, j, jLen = paths._length;
10368
- shapeNodes.length = 0;
10369
- var groupTransformMat = styledShape.transforms.finalTransform;
10370
- for (j = 0; j < jLen; j += 1) {
10371
- var pathNodes = paths.shapes[j];
10372
- if (pathNodes && pathNodes.v) {
10373
- len = pathNodes._length;
10374
- for (i = 1; i < len; i += 1) {
10375
- if (i === 1) {
10376
- shapeNodes.push({
10377
- t: 'm',
10378
- p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)
10379
- });
10380
- }
10381
- shapeNodes.push({
10382
- t: 'c',
10383
- pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i])
10384
- });
10385
- }
10386
- if (len === 1) {
10387
- shapeNodes.push({
10388
- t: 'm',
10389
- p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)
10390
- });
10391
- }
10392
- if (pathNodes.c && len) {
10393
- shapeNodes.push({
10394
- t: 'c',
10395
- pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0])
10396
- });
10397
- shapeNodes.push({
10398
- t: 'z'
10399
- });
10400
- }
10401
- }
10402
- }
10403
- styledShape.trNodes = shapeNodes;
10404
- }
10405
- }
10406
-
10407
- CVShapeElement.prototype.renderPath = function (pathData, itemData) {
10408
- if (pathData.hd !== true && pathData._shouldRender) {
10409
- var i, len = itemData.styledShapes.length;
10410
- for (i = 0; i < len; i += 1) {
10411
- this.renderStyledShape(itemData.styledShapes[i], itemData.sh);
10412
- }
10413
- }
10414
- };
10415
-
10416
- CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {
10417
- var styleElem = itemData.style;
10418
-
10419
- if (itemData.c._mdf || this._isFirstFrame) {
10420
- styleElem.co = 'rgb(' +
10421
- bm_floor(itemData.c.v[0]) + ',' +
10422
- bm_floor(itemData.c.v[1]) + ',' +
10423
- bm_floor(itemData.c.v[2]) + ')';
10424
- }
10425
- if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {
10426
- styleElem.coOp = itemData.o.v * groupTransform.opacity;
10427
- }
10428
- };
10429
-
10430
- CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {
10431
- var styleElem = itemData.style;
10432
- if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || (styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf))) {
10433
- var ctx = this.globalData.canvasContext;
10434
- var grd;
10435
- var pt1 = itemData.s.v,
10436
- pt2 = itemData.e.v;
10437
- if (styleData.t === 1) {
10438
- grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);
10439
- } else {
10440
- var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));
10441
- var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);
10442
-
10443
- var percent = itemData.h.v >= 1 ? 0.99 : itemData.h.v <= -1 ? -0.99 : itemData.h.v;
10444
- var dist = rad * percent;
10445
- var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];
10446
- var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];
10447
- var grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);
10448
- }
10449
-
10450
- var i, len = styleData.g.p;
10451
- var cValues = itemData.g.c;
10452
- var opacity = 1;
10453
-
10454
- for (i = 0; i < len; i += 1) {
10455
- if (itemData.g._hasOpacity && itemData.g._collapsable) {
10456
- opacity = itemData.g.o[i * 2 + 1];
10457
- }
10458
- grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');
10459
- }
10460
- styleElem.grd = grd;
10461
- }
10462
- styleElem.coOp = itemData.o.v * groupTransform.opacity;
10463
-
10464
- };
10465
-
10466
- CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {
10467
- var styleElem = itemData.style;
10468
- var d = itemData.d;
10469
- if (d && (d._mdf || this._isFirstFrame)) {
10470
- styleElem.da = d.dashArray;
10471
- styleElem.do = d.dashoffset[0];
10472
- }
10473
- if (itemData.c._mdf || this._isFirstFrame) {
10474
- styleElem.co = 'rgb(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(itemData.c.v[2]) + ')';
10475
- }
10476
- if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {
10477
- styleElem.coOp = itemData.o.v * groupTransform.opacity;
10478
- }
10479
- if (itemData.w._mdf || this._isFirstFrame) {
10480
- styleElem.wi = itemData.w.v;
10481
- }
10482
- };
10483
-
10484
-
10485
- CVShapeElement.prototype.destroy = function () {
10486
- this.shapesData = null;
10487
- this.globalData = null;
10488
- this.canvasContext = null;
10489
- this.stylesList.length = 0;
10490
- this.itemsData.length = 0;
10491
- };
10492
-
10493
-
10494
- function CVSolidElement(data, globalData, comp) {
10495
- this.initElement(data, globalData, comp);
10496
- }
10497
- extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);
10498
-
10499
- CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;
10500
- CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;
10501
-
10502
- CVSolidElement.prototype.renderInnerContent = function () {
10503
- var ctx = this.canvasContext;
10504
- ctx.fillStyle = this.data.sc;
10505
- ctx.fillRect(0, 0, this.data.sw, this.data.sh);
10506
- //
10507
- };
10508
-
10509
- function CVTextElement(data, globalData, comp) {
10510
- this.textSpans = [];
10511
- this.yOffset = 0;
10512
- this.fillColorAnim = false;
10513
- this.strokeColorAnim = false;
10514
- this.strokeWidthAnim = false;
10515
- this.stroke = false;
10516
- this.fill = false;
10517
- this.justifyOffset = 0;
10518
- this.currentRender = null;
10519
- this.renderType = 'canvas';
10520
- this.values = {
10521
- fill: 'rgba(0,0,0,0)',
10522
- stroke: 'rgba(0,0,0,0)',
10523
- sWidth: 0,
10524
- fValue: ''
10525
- };
10526
- this.initElement(data, globalData, comp);
10527
- }
10528
- extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);
10529
-
10530
- CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');
10531
-
10532
- CVTextElement.prototype.buildNewText = function () {
10533
- var documentData = this.textProperty.currentData;
10534
- this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);
10535
-
10536
- var hasFill = false;
10537
- if (documentData.fc) {
10538
- hasFill = true;
10539
- this.values.fill = this.buildColor(documentData.fc);
10540
- } else {
10541
- this.values.fill = 'rgba(0,0,0,0)';
10542
- }
10543
- this.fill = hasFill;
10544
- var hasStroke = false;
10545
- if (documentData.sc) {
10546
- hasStroke = true;
10547
- this.values.stroke = this.buildColor(documentData.sc);
10548
- this.values.sWidth = documentData.sw;
10549
- }
10550
- var fontData = this.globalData.fontManager.getFontByName(documentData.f);
10551
- var i, len;
10552
- var letters = documentData.l;
10553
- var matrixHelper = this.mHelper;
10554
- this.stroke = hasStroke;
10555
- this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;
10556
- len = documentData.finalText.length;
10557
- //this.tHelper.font = this.values.fValue;
10558
- var charData, shapeData, k, kLen, shapes, j, jLen, pathNodes, commands, pathArr, singleShape = this.data.singleShape;
10559
- var trackingOffset = documentData.tr / 1000 * documentData.finalSize;
10560
- var xPos = 0,
10561
- yPos = 0,
10562
- firstLine = true;
10563
- var cnt = 0;
10564
- for (i = 0; i < len; i += 1) {
10565
- charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);
10566
- shapeData = charData && charData.data || {};
10567
- matrixHelper.reset();
10568
- if (singleShape && letters[i].n) {
10569
- xPos = -trackingOffset;
10570
- yPos += documentData.yOffset;
10571
- yPos += firstLine ? 1 : 0;
10572
- firstLine = false;
10573
- }
10574
-
10575
- shapes = shapeData.shapes ? shapeData.shapes[0].it : [];
10576
- jLen = shapes.length;
10577
- matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);
10578
- if (singleShape) {
10579
- this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);
10580
- }
10581
- commands = createSizedArray(jLen);
10582
- for (j = 0; j < jLen; j += 1) {
10583
- kLen = shapes[j].ks.k.i.length;
10584
- pathNodes = shapes[j].ks.k;
10585
- pathArr = [];
10586
- for (k = 1; k < kLen; k += 1) {
10587
- if (k == 1) {
10588
- pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));
10589
- }
10590
- pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));
10591
- }
10592
- pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));
10593
- commands[j] = pathArr;
10594
- }
10595
- if (singleShape) {
10596
- xPos += letters[i].l;
10597
- xPos += trackingOffset;
10598
- }
10599
- if (this.textSpans[cnt]) {
10600
- this.textSpans[cnt].elem = commands;
10601
- } else {
10602
- this.textSpans[cnt] = {
10603
- elem: commands
10604
- };
10605
- }
10606
- cnt += 1;
10607
- }
10608
- };
10609
-
10610
- CVTextElement.prototype.renderInnerContent = function () {
10611
- var ctx = this.canvasContext;
10612
- var finalMat = this.finalTransform.mat.props;
10613
- ctx.font = this.values.fValue;
10614
- ctx.lineCap = 'butt';
10615
- ctx.lineJoin = 'miter';
10616
- ctx.miterLimit = 4;
10617
-
10618
- if (!this.data.singleShape) {
10619
- this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);
10620
- }
10621
-
10622
- var i, len, j, jLen, k, kLen;
10623
- var renderedLetters = this.textAnimator.renderedLetters;
10624
-
10625
- var letters = this.textProperty.currentData.l;
10626
-
10627
- len = letters.length;
10628
- var renderedLetter;
10629
- var lastFill = null,
10630
- lastStroke = null,
10631
- lastStrokeW = null,
10632
- commands, pathArr;
10633
- for (i = 0; i < len; i += 1) {
10634
- if (letters[i].n) {
10635
- continue;
10636
- }
10637
- renderedLetter = renderedLetters[i];
10638
- if (renderedLetter) {
10639
- this.globalData.renderer.save();
10640
- this.globalData.renderer.ctxTransform(renderedLetter.p);
10641
- this.globalData.renderer.ctxOpacity(renderedLetter.o);
10642
- }
10643
- if (this.fill) {
10644
- if (renderedLetter && renderedLetter.fc) {
10645
- if (lastFill !== renderedLetter.fc) {
10646
- lastFill = renderedLetter.fc;
10647
- ctx.fillStyle = renderedLetter.fc;
10648
- }
10649
- } else if (lastFill !== this.values.fill) {
10650
- lastFill = this.values.fill;
10651
- ctx.fillStyle = this.values.fill;
10652
- }
10653
- commands = this.textSpans[i].elem;
10654
- jLen = commands.length;
10655
- this.globalData.canvasContext.beginPath();
10656
- for (j = 0; j < jLen; j += 1) {
10657
- pathArr = commands[j];
10658
- kLen = pathArr.length;
10659
- this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);
10660
- for (k = 2; k < kLen; k += 6) {
10661
- this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);
10662
- }
10663
- }
10664
- this.globalData.canvasContext.closePath();
10665
- this.globalData.canvasContext.fill();
10666
- ///ctx.fillText(this.textSpans[i].val,0,0);
10667
- }
10668
- if (this.stroke) {
10669
- if (renderedLetter && renderedLetter.sw) {
10670
- if (lastStrokeW !== renderedLetter.sw) {
10671
- lastStrokeW = renderedLetter.sw;
10672
- ctx.lineWidth = renderedLetter.sw;
10673
- }
10674
- } else if (lastStrokeW !== this.values.sWidth) {
10675
- lastStrokeW = this.values.sWidth;
10676
- ctx.lineWidth = this.values.sWidth;
10677
- }
10678
- if (renderedLetter && renderedLetter.sc) {
10679
- if (lastStroke !== renderedLetter.sc) {
10680
- lastStroke = renderedLetter.sc;
10681
- ctx.strokeStyle = renderedLetter.sc;
10682
- }
10683
- } else if (lastStroke !== this.values.stroke) {
10684
- lastStroke = this.values.stroke;
10685
- ctx.strokeStyle = this.values.stroke;
10686
- }
10687
- commands = this.textSpans[i].elem;
10688
- jLen = commands.length;
10689
- this.globalData.canvasContext.beginPath();
10690
- for (j = 0; j < jLen; j += 1) {
10691
- pathArr = commands[j];
10692
- kLen = pathArr.length;
10693
- this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);
10694
- for (k = 2; k < kLen; k += 6) {
10695
- this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);
10696
- }
10697
- }
10698
- this.globalData.canvasContext.closePath();
10699
- this.globalData.canvasContext.stroke();
10700
- ///ctx.strokeText(letters[i].val,0,0);
10701
- }
10702
- if (renderedLetter) {
10703
- this.globalData.renderer.restore();
10704
- }
10705
- }
10706
- };
10707
-
10708
- function CVEffects() {
10709
-
10710
- }
10711
- CVEffects.prototype.renderFrame = function () { };
10712
-
10713
- function HBaseElement(data, globalData, comp) { }
10714
- HBaseElement.prototype = {
10715
- checkBlendMode: function () { },
10716
- initRendererElement: function () {
10717
- this.baseElement = createTag(this.data.tg || 'div');
10718
- if (this.data.hasMask) {
10719
- this.svgElement = createNS('svg');
10720
- this.layerElement = createNS('g');
10721
- this.maskedElement = this.layerElement;
10722
- this.svgElement.appendChild(this.layerElement);
10723
- this.baseElement.appendChild(this.svgElement);
10724
- } else {
10725
- this.layerElement = this.baseElement;
10726
- }
10727
- styleDiv(this.baseElement);
10728
- },
10729
- createContainerElements: function () {
10730
- this.renderableEffectsManager = new CVEffects(this);
10731
- this.transformedElement = this.baseElement;
10732
- this.maskedElement = this.layerElement;
10733
- if (this.data.ln) {
10734
- this.layerElement.setAttribute('id', this.data.ln);
10735
- }
10736
- if (this.data.cl) {
10737
- this.layerElement.setAttribute('class', this.data.cl);
10738
- }
10739
- if (this.data.bm !== 0) {
10740
- this.setBlendMode();
10741
- }
10742
- },
10743
- renderElement: function () {
10744
- if (this.finalTransform._matMdf) {
10745
- this.transformedElement.style.transform = this.transformedElement.style.webkitTransform = this.finalTransform.mat.toCSS();
10746
- }
10747
- if (this.finalTransform._opMdf) {
10748
- this.transformedElement.style.opacity = this.finalTransform.mProp.o.v;
10749
- }
10750
- },
10751
- renderFrame: function () {
10752
- //If it is exported as hidden (data.hd === true) no need to render
10753
- //If it is not visible no need to render
10754
- if (this.data.hd || this.hidden) {
10755
- return;
10756
- }
10757
- this.renderTransform();
10758
- this.renderRenderable();
10759
- this.renderElement();
10760
- this.renderInnerContent();
10761
- if (this._isFirstFrame) {
10762
- this._isFirstFrame = false;
10763
- }
10764
- },
10765
- destroy: function () {
10766
- this.layerElement = null;
10767
- this.transformedElement = null;
10768
- if (this.matteElement) {
10769
- this.matteElement = null;
10770
- }
10771
- if (this.maskManager) {
10772
- this.maskManager.destroy();
10773
- this.maskManager = null;
10774
- }
10775
- },
10776
- createRenderableComponents: function () {
10777
- this.maskManager = new MaskElement(this.data, this, this.globalData);
10778
- },
10779
- addEffects: function () { },
10780
- setMatte: function () { }
10781
- };
10782
- HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement;
10783
- HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy;
10784
- HBaseElement.prototype.buildElementParenting = HybridRenderer.prototype.buildElementParenting;
10785
-
10786
- function HSolidElement(data, globalData, comp) {
10787
- this.initElement(data, globalData, comp);
10788
- }
10789
- extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement);
10790
-
10791
- HSolidElement.prototype.createContent = function () {
10792
- var rect;
10793
- if (this.data.hasMask) {
10794
- rect = createNS('rect');
10795
- rect.setAttribute('width', this.data.sw);
10796
- rect.setAttribute('height', this.data.sh);
10797
- rect.setAttribute('fill', this.data.sc);
10798
- this.svgElement.setAttribute('width', this.data.sw);
10799
- this.svgElement.setAttribute('height', this.data.sh);
10800
- } else {
10801
- rect = createTag('div');
10802
- rect.style.width = this.data.sw + 'px';
10803
- rect.style.height = this.data.sh + 'px';
10804
- rect.style.backgroundColor = this.data.sc;
10805
- }
10806
- this.layerElement.appendChild(rect);
10807
- };
10808
-
10809
- function HCompElement(data, globalData, comp) {
10810
- this.layers = data.layers;
10811
- this.supports3d = !data.hasMask;
10812
- this.completeLayers = false;
10813
- this.pendingElements = [];
10814
- this.elements = this.layers ? createSizedArray(this.layers.length) : [];
10815
- this.initElement(data, globalData, comp);
10816
- this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {
10817
- _placeholder: true
10818
- };
10819
- }
10820
-
10821
- extendPrototype([HybridRenderer, ICompElement, HBaseElement], HCompElement);
10822
- HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements;
10823
-
10824
- HCompElement.prototype.createContainerElements = function () {
10825
- this._createBaseContainerElements();
10826
- //divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';
10827
- if (this.data.hasMask) {
10828
- this.svgElement.setAttribute('width', this.data.w);
10829
- this.svgElement.setAttribute('height', this.data.h);
10830
- this.transformedElement = this.baseElement;
10831
- } else {
10832
- this.transformedElement = this.layerElement;
10833
- }
10834
- };
10835
-
10836
- HCompElement.prototype.addTo3dContainer = function (elem, pos) {
10837
- var j = 0;
10838
- var nextElement;
10839
- while (j < pos) {
10840
- if (this.elements[j] && this.elements[j].getBaseElement) {
10841
- nextElement = this.elements[j].getBaseElement();
10842
- }
10843
- j += 1;
10844
- }
10845
- if (nextElement) {
10846
- this.layerElement.insertBefore(elem, nextElement);
10847
- } else {
10848
- this.layerElement.appendChild(elem);
10849
- }
10850
- }
10851
-
10852
- function HShapeElement(data, globalData, comp) {
10853
- //List of drawable elements
10854
- this.shapes = [];
10855
- // Full shape data
10856
- this.shapesData = data.shapes;
10857
- //List of styles that will be applied to shapes
10858
- this.stylesList = [];
10859
- //List of modifiers that will be applied to shapes
10860
- this.shapeModifiers = [];
10861
- //List of items in shape tree
10862
- this.itemsData = [];
10863
- //List of items in previous shape tree
10864
- this.processedElements = [];
10865
- // List of animated components
10866
- this.animatedContents = [];
10867
- this.shapesContainer = createNS('g');
10868
- this.initElement(data, globalData, comp);
10869
- //Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.
10870
- // List of elements that have been created
10871
- this.prevViewData = [];
10872
- this.currentBBox = {
10873
- x: 999999,
10874
- y: -999999,
10875
- h: 0,
10876
- w: 0
10877
- };
10878
- }
10879
- extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement);
10880
- HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent;
10881
-
10882
- HShapeElement.prototype.createContent = function () {
10883
- var cont;
10884
- this.baseElement.style.fontSize = 0;
10885
- if (this.data.hasMask) {
10886
- this.layerElement.appendChild(this.shapesContainer);
10887
- cont = this.svgElement;
10888
- } else {
10889
- cont = createNS('svg');
10890
- var size = this.comp.data ? this.comp.data : this.globalData.compSize;
10891
- cont.setAttribute('width', size.w);
10892
- cont.setAttribute('height', size.h);
10893
- cont.appendChild(this.shapesContainer);
10894
- this.layerElement.appendChild(cont);
10895
- }
10896
-
10897
- this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true);
10898
- this.filterUniqueShapes();
10899
- this.shapeCont = cont;
10900
- };
10901
-
10902
- HShapeElement.prototype.getTransformedPoint = function (transformers, point) {
10903
- var i, len = transformers.length;
10904
- for (i = 0; i < len; i += 1) {
10905
- point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0);
10906
- }
10907
- return point;
10908
- }
10909
-
10910
- HShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) {
10911
- var shape = item.sh.v;
10912
- var transformers = item.transformers;
10913
- var i, len = shape._length,
10914
- vPoint, oPoint, nextIPoint, nextVPoint, bounds;
10915
- if (len <= 1) {
10916
- return;
10917
- }
10918
- for (i = 0; i < len - 1; i += 1) {
10919
- vPoint = this.getTransformedPoint(transformers, shape.v[i]);
10920
- oPoint = this.getTransformedPoint(transformers, shape.o[i]);
10921
- nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]);
10922
- nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]);
10923
- this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);
10924
- }
10925
- if (shape.c) {
10926
- vPoint = this.getTransformedPoint(transformers, shape.v[i]);
10927
- oPoint = this.getTransformedPoint(transformers, shape.o[i]);
10928
- nextIPoint = this.getTransformedPoint(transformers, shape.i[0]);
10929
- nextVPoint = this.getTransformedPoint(transformers, shape.v[0]);
10930
- this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);
10931
- }
10932
- }
10933
-
10934
- HShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) {
10935
- this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint);
10936
- var bounds = this.shapeBoundingBox;
10937
- boundingBox.x = bm_min(bounds.left, boundingBox.x);
10938
- boundingBox.xMax = bm_max(bounds.right, boundingBox.xMax);
10939
- boundingBox.y = bm_min(bounds.top, boundingBox.y);
10940
- boundingBox.yMax = bm_max(bounds.bottom, boundingBox.yMax);
10941
- }
10942
-
10943
- HShapeElement.prototype.shapeBoundingBox = {
10944
- left: 0,
10945
- right: 0,
10946
- top: 0,
10947
- bottom: 0,
10948
- }
10949
-
10950
- HShapeElement.prototype.tempBoundingBox = {
10951
- x: 0,
10952
- xMax: 0,
10953
- y: 0,
10954
- yMax: 0,
10955
- width: 0,
10956
- height: 0
10957
- }
10958
-
10959
- HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) {
10960
-
10961
- var bounds = [
10962
- [p0[0], p3[0]],
10963
- [p0[1], p3[1]]
10964
- ];
10965
-
10966
- for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) {
10967
-
10968
- b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];
10969
- a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];
10970
- c = 3 * p1[i] - 3 * p0[i];
10971
-
10972
- b = b | 0;
10973
- a = a | 0;
10974
- c = c | 0;
10975
-
10976
- if (a === 0) {
10977
-
10978
- if (b === 0) {
10979
- continue;
10980
- }
10981
-
10982
- t = -c / b;
10983
-
10984
- if (0 < t && t < 1) {
10985
- bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));
10986
- }
10987
- continue;
10988
- }
10989
-
10990
- b2ac = b * b - 4 * c * a;
10991
-
10992
- if (b2ac < 0) {
10993
- continue;
10994
- }
10995
-
10996
- t1 = (-b + bm_sqrt(b2ac)) / (2 * a);
10997
- if (0 < t1 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));
10998
-
10999
- t2 = (-b - bm_sqrt(b2ac)) / (2 * a);
11000
- if (0 < t2 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));
11001
-
11002
- }
11003
-
11004
- this.shapeBoundingBox.left = bm_min.apply(null, bounds[0]);
11005
- this.shapeBoundingBox.top = bm_min.apply(null, bounds[1]);
11006
- this.shapeBoundingBox.right = bm_max.apply(null, bounds[0]);
11007
- this.shapeBoundingBox.bottom = bm_max.apply(null, bounds[1]);
11008
- };
11009
-
11010
- HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {
11011
- return bm_pow(1 - t, 3) * p0[i] +
11012
- 3 * bm_pow(1 - t, 2) * t * p1[i] +
11013
- 3 * (1 - t) * bm_pow(t, 2) * p2[i] +
11014
- bm_pow(t, 3) * p3[i];
11015
- }
11016
-
11017
- HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {
11018
- var i, len = itemsData.length,
11019
- path;
11020
- for (i = 0; i < len; i += 1) {
11021
- if (itemsData[i] && itemsData[i].sh) {
11022
- this.calculateShapeBoundingBox(itemsData[i], boundingBox)
11023
- } else if (itemsData[i] && itemsData[i].it) {
11024
- this.calculateBoundingBox(itemsData[i].it, boundingBox)
11025
- }
11026
- }
11027
- }
11028
-
11029
- HShapeElement.prototype.currentBoxContains = function (box) {
11030
- return this.currentBBox.x <= box.x &&
11031
- this.currentBBox.y <= box.y &&
11032
- this.currentBBox.width + this.currentBBox.x >= box.x + box.width &&
11033
- this.currentBBox.height + this.currentBBox.y >= box.y + box.height
11034
- }
11035
-
11036
- HShapeElement.prototype.renderInnerContent = function () {
11037
- this._renderShapeFrame();
11038
-
11039
- if (!this.hidden && (this._isFirstFrame || this._mdf)) {
11040
- var tempBoundingBox = this.tempBoundingBox;
11041
- var max = 999999;
11042
- tempBoundingBox.x = max;
11043
- tempBoundingBox.xMax = -max;
11044
- tempBoundingBox.y = max;
11045
- tempBoundingBox.yMax = -max;
11046
- this.calculateBoundingBox(this.itemsData, tempBoundingBox);
11047
- tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x;
11048
- tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y;
11049
- //var tempBoundingBox = this.shapeCont.getBBox();
11050
- if (this.currentBoxContains(tempBoundingBox)) {
11051
- return;
11052
- }
11053
- var changed = false;
11054
- if (this.currentBBox.w !== tempBoundingBox.width) {
11055
- this.currentBBox.w = tempBoundingBox.width;
11056
- this.shapeCont.setAttribute('width', tempBoundingBox.width);
11057
- changed = true;
11058
- }
11059
- if (this.currentBBox.h !== tempBoundingBox.height) {
11060
- this.currentBBox.h = tempBoundingBox.height;
11061
- this.shapeCont.setAttribute('height', tempBoundingBox.height);
11062
- changed = true;
11063
- }
11064
- if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) {
11065
- this.currentBBox.w = tempBoundingBox.width;
11066
- this.currentBBox.h = tempBoundingBox.height;
11067
- this.currentBBox.x = tempBoundingBox.x;
11068
- this.currentBBox.y = tempBoundingBox.y;
11069
-
11070
- this.shapeCont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);
11071
- this.shapeCont.style.transform = this.shapeCont.style.webkitTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';
11072
- }
11073
- }
11074
-
11075
- };
11076
-
11077
- function HTextElement(data, globalData, comp) {
11078
- this.textSpans = [];
11079
- this.textPaths = [];
11080
- this.currentBBox = {
11081
- x: 999999,
11082
- y: -999999,
11083
- h: 0,
11084
- w: 0
11085
- };
11086
- this.renderType = 'svg';
11087
- this.isMasked = false;
11088
- this.initElement(data, globalData, comp);
11089
-
11090
- }
11091
- extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement);
11092
-
11093
- HTextElement.prototype.createContent = function () {
11094
- this.isMasked = this.checkMasks();
11095
- if (this.isMasked) {
11096
- this.renderType = 'svg';
11097
- this.compW = this.comp.data.w;
11098
- this.compH = this.comp.data.h;
11099
- this.svgElement.setAttribute('width', this.compW);
11100
- this.svgElement.setAttribute('height', this.compH);
11101
- var g = createNS('g');
11102
- this.maskedElement.appendChild(g);
11103
- this.innerElem = g;
11104
- } else {
11105
- this.renderType = 'html';
11106
- this.innerElem = this.layerElement;
11107
- }
11108
-
11109
- this.checkParenting();
11110
-
11111
- };
11112
-
11113
- HTextElement.prototype.buildNewText = function () {
11114
- var documentData = this.textProperty.currentData;
11115
- this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);
11116
- var innerElemStyle = this.innerElem.style;
11117
- innerElemStyle.color = innerElemStyle.fill = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';
11118
- if (documentData.sc) {
11119
- innerElemStyle.stroke = this.buildColor(documentData.sc);
11120
- innerElemStyle.strokeWidth = documentData.sw + 'px';
11121
- }
11122
- var fontData = this.globalData.fontManager.getFontByName(documentData.f);
11123
- if (!this.globalData.fontManager.chars) {
11124
- innerElemStyle.fontSize = documentData.finalSize + 'px';
11125
- innerElemStyle.lineHeight = documentData.finalSize + 'px';
11126
- if (fontData.fClass) {
11127
- this.innerElem.className = fontData.fClass;
11128
- } else {
11129
- innerElemStyle.fontFamily = fontData.fFamily;
11130
- var fWeight = documentData.fWeight,
11131
- fStyle = documentData.fStyle;
11132
- innerElemStyle.fontStyle = fStyle;
11133
- innerElemStyle.fontWeight = fWeight;
11134
- }
11135
- }
11136
- var i, len;
11137
-
11138
- var letters = documentData.l;
11139
- len = letters.length;
11140
- var tSpan, tParent, tCont;
11141
- var matrixHelper = this.mHelper;
11142
- var shapes, shapeStr = '';
11143
- var cnt = 0;
11144
- for (i = 0; i < len; i += 1) {
11145
- if (this.globalData.fontManager.chars) {
11146
- if (!this.textPaths[cnt]) {
11147
- tSpan = createNS('path');
11148
- tSpan.setAttribute('stroke-linecap', 'butt');
11149
- tSpan.setAttribute('stroke-linejoin', 'round');
11150
- tSpan.setAttribute('stroke-miterlimit', '4');
11151
- } else {
11152
- tSpan = this.textPaths[cnt];
11153
- }
11154
- if (!this.isMasked) {
11155
- if (this.textSpans[cnt]) {
11156
- tParent = this.textSpans[cnt];
11157
- tCont = tParent.children[0];
11158
- } else {
11159
-
11160
- tParent = createTag('div');
11161
- tParent.style.lineHeight = 0;
11162
- tCont = createNS('svg');
11163
- tCont.appendChild(tSpan);
11164
- styleDiv(tParent);
11165
- }
11166
- }
11167
- } else {
11168
- if (!this.isMasked) {
11169
- if (this.textSpans[cnt]) {
11170
- tParent = this.textSpans[cnt];
11171
- tSpan = this.textPaths[cnt];
11172
- } else {
11173
- tParent = createTag('span');
11174
- styleDiv(tParent);
11175
- tSpan = createTag('span');
11176
- styleDiv(tSpan);
11177
- tParent.appendChild(tSpan);
11178
- }
11179
- } else {
11180
- tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text');
11181
- }
11182
- }
11183
- //tSpan.setAttribute('visibility', 'hidden');
11184
- if (this.globalData.fontManager.chars) {
11185
- var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);
11186
- var shapeData;
11187
- if (charData) {
11188
- shapeData = charData.data;
11189
- } else {
11190
- shapeData = null;
11191
- }
11192
- matrixHelper.reset();
11193
- if (shapeData && shapeData.shapes) {
11194
- shapes = shapeData.shapes[0].it;
11195
- matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);
11196
- shapeStr = this.createPathShape(matrixHelper, shapes);
11197
- tSpan.setAttribute('d', shapeStr);
11198
- }
11199
- if (!this.isMasked) {
11200
- this.innerElem.appendChild(tParent);
11201
- if (shapeData && shapeData.shapes) {
11202
-
11203
- //document.body.appendChild is needed to get exact measure of shape
11204
- document.body.appendChild(tCont);
11205
- var boundingBox = tCont.getBBox();
11206
- tCont.setAttribute('width', boundingBox.width + 2);
11207
- tCont.setAttribute('height', boundingBox.height + 2);
11208
- tCont.setAttribute('viewBox', (boundingBox.x - 1) + ' ' + (boundingBox.y - 1) + ' ' + (boundingBox.width + 2) + ' ' + (boundingBox.height + 2));
11209
- tCont.style.transform = tCont.style.webkitTransform = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)';
11210
-
11211
- letters[i].yOffset = boundingBox.y - 1;
11212
-
11213
- } else {
11214
- tCont.setAttribute('width', 1);
11215
- tCont.setAttribute('height', 1);
11216
- }
11217
- tParent.appendChild(tCont);
11218
- } else {
11219
- this.innerElem.appendChild(tSpan);
11220
- }
11221
- } else {
11222
- tSpan.textContent = letters[i].val;
11223
- tSpan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve");
11224
- if (!this.isMasked) {
11225
- this.innerElem.appendChild(tParent);
11226
- //
11227
- tSpan.style.transform = tSpan.style.webkitTransform = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)';
11228
- } else {
11229
- this.innerElem.appendChild(tSpan);
11230
- }
11231
- }
11232
- //
11233
- if (!this.isMasked) {
11234
- this.textSpans[cnt] = tParent;
11235
- } else {
11236
- this.textSpans[cnt] = tSpan;
11237
- }
11238
- this.textSpans[cnt].style.display = 'block';
11239
- this.textPaths[cnt] = tSpan;
11240
- cnt += 1;
11241
- }
11242
- while (cnt < this.textSpans.length) {
11243
- this.textSpans[cnt].style.display = 'none';
11244
- cnt += 1;
11245
- }
11246
- };
11247
-
11248
- HTextElement.prototype.renderInnerContent = function () {
11249
-
11250
- if (this.data.singleShape) {
11251
- if (!this._isFirstFrame && !this.lettersChangedFlag) {
11252
- return;
11253
- } else {
11254
- // Todo Benchmark if using this is better than getBBox
11255
- if (this.isMasked && this.finalTransform._matMdf) {
11256
- this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);
11257
- this.svgElement.style.transform = this.svgElement.style.webkitTransform = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';
11258
- }
11259
- }
11260
- }
11261
-
11262
- this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);
11263
- if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {
11264
- return;
11265
- }
11266
- var i, len, count = 0;
11267
- var renderedLetters = this.textAnimator.renderedLetters;
11268
-
11269
- var letters = this.textProperty.currentData.l;
11270
-
11271
- len = letters.length;
11272
- var renderedLetter, textSpan, textPath;
11273
- for (i = 0; i < len; i += 1) {
11274
- if (letters[i].n) {
11275
- count += 1;
11276
- continue;
11277
- }
11278
- textSpan = this.textSpans[i];
11279
- textPath = this.textPaths[i];
11280
- renderedLetter = renderedLetters[count];
11281
- count += 1;
11282
- if (renderedLetter._mdf.m) {
11283
- if (!this.isMasked) {
11284
- textSpan.style.transform = textSpan.style.webkitTransform = renderedLetter.m;
11285
- } else {
11286
- textSpan.setAttribute('transform', renderedLetter.m);
11287
- }
11288
- }
11289
- ////textSpan.setAttribute('opacity',renderedLetter.o);
11290
- textSpan.style.opacity = renderedLetter.o;
11291
- if (renderedLetter.sw && renderedLetter._mdf.sw) {
11292
- textPath.setAttribute('stroke-width', renderedLetter.sw);
11293
- }
11294
- if (renderedLetter.sc && renderedLetter._mdf.sc) {
11295
- textPath.setAttribute('stroke', renderedLetter.sc);
11296
- }
11297
- if (renderedLetter.fc && renderedLetter._mdf.fc) {
11298
- textPath.setAttribute('fill', renderedLetter.fc);
11299
- textPath.style.color = renderedLetter.fc;
11300
- }
11301
- }
11302
-
11303
- if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) {
11304
- var boundingBox = this.innerElem.getBBox();
11305
-
11306
- if (this.currentBBox.w !== boundingBox.width) {
11307
- this.currentBBox.w = boundingBox.width;
11308
- this.svgElement.setAttribute('width', boundingBox.width);
11309
- }
11310
- if (this.currentBBox.h !== boundingBox.height) {
11311
- this.currentBBox.h = boundingBox.height;
11312
- this.svgElement.setAttribute('height', boundingBox.height);
11313
- }
11314
-
11315
- var margin = 1;
11316
- if (this.currentBBox.w !== (boundingBox.width + margin * 2) || this.currentBBox.h !== (boundingBox.height + margin * 2) || this.currentBBox.x !== (boundingBox.x - margin) || this.currentBBox.y !== (boundingBox.y - margin)) {
11317
- this.currentBBox.w = boundingBox.width + margin * 2;
11318
- this.currentBBox.h = boundingBox.height + margin * 2;
11319
- this.currentBBox.x = boundingBox.x - margin;
11320
- this.currentBBox.y = boundingBox.y - margin;
11321
-
11322
- this.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);
11323
- this.svgElement.style.transform = this.svgElement.style.webkitTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';
11324
- }
11325
- }
11326
- };
11327
-
11328
- function HImageElement(data, globalData, comp) {
11329
- this.assetData = globalData.getAssetData(data.refId);
11330
- this.initElement(data, globalData, comp);
11331
- }
11332
-
11333
- extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement);
11334
-
11335
-
11336
- HImageElement.prototype.createContent = function () {
11337
- var assetPath = this.globalData.getAssetsPath(this.assetData);
11338
- var img = new Image();
11339
-
11340
- if (this.data.hasMask) {
11341
- this.imageElem = createNS('image');
11342
- this.imageElem.setAttribute('width', this.assetData.w + "px");
11343
- this.imageElem.setAttribute('height', this.assetData.h + "px");
11344
- this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);
11345
- this.layerElement.appendChild(this.imageElem);
11346
- this.baseElement.setAttribute('width', this.assetData.w);
11347
- this.baseElement.setAttribute('height', this.assetData.h);
11348
- } else {
11349
- this.layerElement.appendChild(img);
11350
- }
11351
- img.src = assetPath;
11352
- if (this.data.ln) {
11353
- this.baseElement.setAttribute('id', this.data.ln);
11354
- }
11355
- };
11356
-
11357
- function HCameraElement(data, globalData, comp) {
11358
- this.initFrame();
11359
- this.initBaseData(data, globalData, comp);
11360
- this.initHierarchy();
11361
- var getProp = PropertyFactory.getProp;
11362
- this.pe = getProp(this, data.pe, 0, 0, this);
11363
- if (data.ks.p.s) {
11364
- this.px = getProp(this, data.ks.p.x, 1, 0, this);
11365
- this.py = getProp(this, data.ks.p.y, 1, 0, this);
11366
- this.pz = getProp(this, data.ks.p.z, 1, 0, this);
11367
- } else {
11368
- this.p = getProp(this, data.ks.p, 1, 0, this);
11369
- }
11370
- if (data.ks.a) {
11371
- this.a = getProp(this, data.ks.a, 1, 0, this);
11372
- }
11373
- if (data.ks.or.k.length && data.ks.or.k[0].to) {
11374
- var i, len = data.ks.or.k.length;
11375
- for (i = 0; i < len; i += 1) {
11376
- data.ks.or.k[i].to = null;
11377
- data.ks.or.k[i].ti = null;
11378
- }
11379
- }
11380
- this.or = getProp(this, data.ks.or, 1, degToRads, this);
11381
- this.or.sh = true;
11382
- this.rx = getProp(this, data.ks.rx, 0, degToRads, this);
11383
- this.ry = getProp(this, data.ks.ry, 0, degToRads, this);
11384
- this.rz = getProp(this, data.ks.rz, 0, degToRads, this);
11385
- this.mat = new Matrix();
11386
- this._prevMat = new Matrix();
11387
- this._isFirstFrame = true;
11388
-
11389
- // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.
11390
- this.finalTransform = {
11391
- mProp: this
11392
- };
11393
- }
11394
- extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement);
11395
-
11396
- HCameraElement.prototype.setup = function () {
11397
- var i, len = this.comp.threeDElements.length,
11398
- comp;
11399
- for (i = 0; i < len; i += 1) {
11400
- //[perspectiveElem,container]
11401
- comp = this.comp.threeDElements[i];
11402
- if (comp.type === '3d') {
11403
- comp.perspectiveElem.style.perspective = comp.perspectiveElem.style.webkitPerspective = this.pe.v + 'px';
11404
- comp.container.style.transformOrigin = comp.container.style.mozTransformOrigin = comp.container.style.webkitTransformOrigin = "0px 0px 0px";
11405
- comp.perspectiveElem.style.transform = comp.perspectiveElem.style.webkitTransform = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';
11406
- }
11407
- }
11408
- };
11409
-
11410
- HCameraElement.prototype.createElements = function () { };
11411
-
11412
- HCameraElement.prototype.hide = function () { };
11413
-
11414
- HCameraElement.prototype.renderFrame = function () {
11415
- var _mdf = this._isFirstFrame;
11416
- var i, len;
11417
- if (this.hierarchy) {
11418
- len = this.hierarchy.length;
11419
- for (i = 0; i < len; i += 1) {
11420
- _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf;
11421
- }
11422
- }
11423
- if (_mdf || this.pe._mdf || (this.p && this.p._mdf) || (this.px && (this.px._mdf || this.py._mdf || this.pz._mdf)) || this.rx._mdf || this.ry._mdf || this.rz._mdf || this.or._mdf || (this.a && this.a._mdf)) {
11424
- this.mat.reset();
11425
-
11426
- if (this.hierarchy) {
11427
- var mat;
11428
- len = this.hierarchy.length - 1;
11429
- for (i = len; i >= 0; i -= 1) {
11430
- var mTransf = this.hierarchy[i].finalTransform.mProp;
11431
- this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]);
11432
- this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]);
11433
- this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v);
11434
- this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]);
11435
- this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]);
11436
- }
11437
- }
11438
- if (this.p) {
11439
- this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]);
11440
- } else {
11441
- this.mat.translate(-this.px.v, -this.py.v, this.pz.v);
11442
- }
11443
- if (this.a) {
11444
- var diffVector
11445
- if (this.p) {
11446
- diffVector = [this.p.v[0] - this.a.v[0], this.p.v[1] - this.a.v[1], this.p.v[2] - this.a.v[2]];
11447
- } else {
11448
- diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]];
11449
- }
11450
- var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2));
11451
- //var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));
11452
- var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag];
11453
- var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]);
11454
- var m_rotationX = (Math.atan2(lookDir[1], lookLengthOnXZ));
11455
- var m_rotationY = (Math.atan2(lookDir[0], -lookDir[2]));
11456
- this.mat.rotateY(m_rotationY).rotateX(-m_rotationX);
11457
-
11458
- }
11459
- this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);
11460
- this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]);
11461
- this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0);
11462
- this.mat.translate(0, 0, this.pe.v);
11463
-
11464
-
11465
-
11466
-
11467
- var hasMatrixChanged = !this._prevMat.equals(this.mat);
11468
- if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {
11469
- len = this.comp.threeDElements.length;
11470
- var comp;
11471
- for (i = 0; i < len; i += 1) {
11472
- comp = this.comp.threeDElements[i];
11473
- if (comp.type === '3d') {
11474
- if (hasMatrixChanged) {
11475
- comp.container.style.transform = comp.container.style.webkitTransform = this.mat.toCSS();
11476
- }
11477
- if (this.pe._mdf) {
11478
- comp.perspectiveElem.style.perspective = comp.perspectiveElem.style.webkitPerspective = this.pe.v + 'px';
11479
- }
11480
- }
11481
- }
11482
- this.mat.clone(this._prevMat);
11483
- }
11484
- }
11485
- this._isFirstFrame = false;
11486
- };
11487
-
11488
- HCameraElement.prototype.prepareFrame = function (num) {
11489
- this.prepareProperties(num, true);
11490
- };
11491
-
11492
- HCameraElement.prototype.destroy = function () { };
11493
- HCameraElement.prototype.getBaseElement = function () {
11494
- return null;
11495
- };
11496
-
11497
- function HEffects() { }
11498
- HEffects.prototype.renderFrame = function () { };
11499
- var animationManager = (function () {
11500
- var moduleOb = {};
11501
- var registeredAnimations = [];
11502
- var initTime = 0;
11503
- var len = 0;
11504
- var playingAnimationsNum = 0;
11505
- var _stopped = true;
11506
- var _isFrozen = false;
11507
-
11508
- function removeElement(ev) {
11509
- var i = 0;
11510
- var animItem = ev.target;
11511
- while (i < len) {
11512
- if (registeredAnimations[i].animation === animItem) {
11513
- registeredAnimations.splice(i, 1);
11514
- i -= 1;
11515
- len -= 1;
11516
- if (!animItem.isPaused) {
11517
- subtractPlayingCount();
11518
- }
11519
- }
11520
- i += 1;
11521
- }
11522
- }
11523
-
11524
- function registerAnimation(element, animationData) {
11525
- if (!element) {
11526
- return null;
11527
- }
11528
- var i = 0;
11529
- while (i < len) {
11530
- if (registeredAnimations[i].elem == element && registeredAnimations[i].elem !== null) {
11531
- return registeredAnimations[i].animation;
11532
- }
11533
- i += 1;
11534
- }
11535
- var animItem = new AnimationItem();
11536
- setupAnimation(animItem, element);
11537
- animItem.setData(element, animationData);
11538
- return animItem;
11539
- }
11540
-
11541
- function getRegisteredAnimations() {
11542
- var i, len = registeredAnimations.length;
11543
- var animations = [];
11544
- for (i = 0; i < len; i += 1) {
11545
- animations.push(registeredAnimations[i].animation);
11546
- }
11547
- return animations;
11548
- }
11549
-
11550
- function addPlayingCount() {
11551
- playingAnimationsNum += 1;
11552
- activate();
11553
- }
11554
-
11555
- function subtractPlayingCount() {
11556
- playingAnimationsNum -= 1;
11557
- }
11558
-
11559
- function setupAnimation(animItem, element) {
11560
- animItem.addEventListener('destroy', removeElement);
11561
- animItem.addEventListener('_active', addPlayingCount);
11562
- animItem.addEventListener('_idle', subtractPlayingCount);
11563
- registeredAnimations.push({
11564
- elem: element,
11565
- animation: animItem
11566
- });
11567
- len += 1;
11568
- }
11569
-
11570
- function loadAnimation(params) {
11571
- var animItem = new AnimationItem();
11572
- setupAnimation(animItem, null);
11573
- animItem.setParams(params);
11574
- return animItem;
11575
- }
11576
-
11577
-
11578
- function setSpeed(val, animation) {
11579
- var i;
11580
- for (i = 0; i < len; i += 1) {
11581
- registeredAnimations[i].animation.setSpeed(val, animation);
11582
- }
11583
- }
11584
-
11585
- function setDirection(val, animation) {
11586
- var i;
11587
- for (i = 0; i < len; i += 1) {
11588
- registeredAnimations[i].animation.setDirection(val, animation);
11589
- }
11590
- }
11591
-
11592
- function play(animation) {
11593
- var i;
11594
- for (i = 0; i < len; i += 1) {
11595
- registeredAnimations[i].animation.play(animation);
11596
- }
11597
- }
11598
-
11599
- function resume(nowTime) {
11600
- var elapsedTime = nowTime - initTime;
11601
- var i;
11602
- for (i = 0; i < len; i += 1) {
11603
- registeredAnimations[i].animation.advanceTime(elapsedTime);
11604
- }
11605
- initTime = nowTime;
11606
- if (playingAnimationsNum && !_isFrozen) {
11607
- window.requestAnimationFrame(resume);
11608
- } else {
11609
- _stopped = true;
11610
- }
11611
- }
11612
-
11613
- function first(nowTime) {
11614
- initTime = nowTime;
11615
- window.requestAnimationFrame(resume);
11616
- }
11617
-
11618
- function pause(animation) {
11619
- var i;
11620
- for (i = 0; i < len; i += 1) {
11621
- registeredAnimations[i].animation.pause(animation);
11622
- }
11623
- }
11624
-
11625
- function goToAndStop(value, isFrame, animation) {
11626
- var i;
11627
- for (i = 0; i < len; i += 1) {
11628
- registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);
11629
- }
11630
- }
11631
-
11632
- function stop(animation) {
11633
- var i;
11634
- for (i = 0; i < len; i += 1) {
11635
- registeredAnimations[i].animation.stop(animation);
11636
- }
11637
- }
11638
-
11639
- function togglePause(animation) {
11640
- var i;
11641
- for (i = 0; i < len; i += 1) {
11642
- registeredAnimations[i].animation.togglePause(animation);
11643
- }
11644
- }
11645
-
11646
- function destroy(animation) {
11647
- var i;
11648
- for (i = (len - 1); i >= 0; i -= 1) {
11649
- registeredAnimations[i].animation.destroy(animation);
11650
- }
11651
- }
11652
-
11653
- function searchAnimations(animationData, standalone, renderer) {
11654
- var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')),
11655
- [].slice.call(document.getElementsByClassName('bodymovin')));
11656
- var i, len = animElements.length;
11657
- for (i = 0; i < len; i += 1) {
11658
- if (renderer) {
11659
- animElements[i].setAttribute('data-bm-type', renderer);
11660
- }
11661
- registerAnimation(animElements[i], animationData);
11662
- }
11663
- if (standalone && len === 0) {
11664
- if (!renderer) {
11665
- renderer = 'svg';
11666
- }
11667
- var body = document.getElementsByTagName('body')[0];
11668
- body.innerHTML = '';
11669
- var div = createTag('div');
11670
- div.style.width = '100%';
11671
- div.style.height = '100%';
11672
- div.setAttribute('data-bm-type', renderer);
11673
- body.appendChild(div);
11674
- registerAnimation(div, animationData);
11675
- }
11676
- }
11677
-
11678
- function resize() {
11679
- var i;
11680
- for (i = 0; i < len; i += 1) {
11681
- registeredAnimations[i].animation.resize();
11682
- }
11683
- }
11684
-
11685
- function activate() {
11686
- if (!_isFrozen && playingAnimationsNum) {
11687
- if (_stopped) {
11688
- window.requestAnimationFrame(first);
11689
- _stopped = false;
11690
- }
11691
- }
11692
- }
11693
-
11694
- function freeze() {
11695
- _isFrozen = true;
11696
- }
11697
-
11698
- function unfreeze() {
11699
- _isFrozen = false;
11700
- activate();
11701
- }
11702
-
11703
- moduleOb.registerAnimation = registerAnimation;
11704
- moduleOb.loadAnimation = loadAnimation;
11705
- moduleOb.setSpeed = setSpeed;
11706
- moduleOb.setDirection = setDirection;
11707
- moduleOb.play = play;
11708
- moduleOb.pause = pause;
11709
- moduleOb.stop = stop;
11710
- moduleOb.togglePause = togglePause;
11711
- moduleOb.searchAnimations = searchAnimations;
11712
- moduleOb.resize = resize;
11713
- //moduleOb.start = start;
11714
- moduleOb.goToAndStop = goToAndStop;
11715
- moduleOb.destroy = destroy;
11716
- moduleOb.freeze = freeze;
11717
- moduleOb.unfreeze = unfreeze;
11718
- moduleOb.getRegisteredAnimations = getRegisteredAnimations;
11719
- return moduleOb;
11720
- }());
11721
-
11722
- var AnimationItem = function () {
11723
- this._cbs = [];
11724
- this.name = '';
11725
- this.path = '';
11726
- this.isLoaded = false;
11727
- this.currentFrame = 0;
11728
- this.currentRawFrame = 0;
11729
- this.firstFrame = 0;
11730
- this.totalFrames = 0;
11731
- this.frameRate = 0;
11732
- this.frameMult = 0;
11733
- this.playSpeed = 1;
11734
- this.playDirection = 1;
11735
- this.playCount = 0;
11736
- this.animationData = {};
11737
- this.assets = [];
11738
- this.isPaused = true;
11739
- this.autoplay = false;
11740
- this.loop = true;
11741
- this.renderer = null;
11742
- this.animationID = createElementID();
11743
- this.assetsPath = '';
11744
- this.timeCompleted = 0;
11745
- this.segmentPos = 0;
11746
- this.subframeEnabled = subframeEnabled;
11747
- this.segments = [];
11748
- this._idle = true;
11749
- this._completedLoop = false;
11750
- this.projectInterface = ProjectInterface();
11751
- this.imagePreloader = new ImagePreloader();
11752
- };
11753
-
11754
- extendPrototype([BaseEvent], AnimationItem);
11755
-
11756
- AnimationItem.prototype.setParams = function (params) {
11757
- if (params.context) {
11758
- this.context = params.context;
11759
- }
11760
- if (params.wrapper || params.container) {
11761
- this.wrapper = params.wrapper || params.container;
11762
- }
11763
- var animType = params.animType ? params.animType : params.renderer ? params.renderer : 'svg';
11764
- switch (animType) {
11765
- case 'canvas':
11766
- this.renderer = new CanvasRenderer(this, params.rendererSettings);
11767
- break;
11768
- case 'svg':
11769
- this.renderer = new SVGRenderer(this, params.rendererSettings);
11770
- break;
11771
- default:
11772
- this.renderer = new HybridRenderer(this, params.rendererSettings);
11773
- break;
11774
- }
11775
- this.renderer.setProjectInterface(this.projectInterface);
11776
- this.animType = animType;
11777
-
11778
- if (params.loop === '' || params.loop === null) { } else if (params.loop === false) {
11779
- this.loop = false;
11780
- } else if (params.loop === true) {
11781
- this.loop = true;
11782
- } else {
11783
- this.loop = parseInt(params.loop);
11784
- }
11785
- this.autoplay = 'autoplay' in params ? params.autoplay : true;
11786
- this.name = params.name ? params.name : '';
11787
- this.autoloadSegments = params.hasOwnProperty('autoloadSegments') ? params.autoloadSegments : true;
11788
- this.assetsPath = params.assetsPath;
11789
- if (params.animationData) {
11790
- this.configAnimation(params.animationData);
11791
- } else if (params.path) {
11792
-
11793
- if (params.path.lastIndexOf('\\') !== -1) {
11794
- this.path = params.path.substr(0, params.path.lastIndexOf('\\') + 1);
11795
- } else {
11796
- this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);
11797
- }
11798
- this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);
11799
- this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));
11800
-
11801
- assetLoader.load(params.path, this.configAnimation.bind(this), function () {
11802
- this.trigger('data_failed');
11803
- }.bind(this));
11804
- }
11805
-
11806
- this.initialSegment = params.initialSegment;
11807
- };
11808
-
11809
- AnimationItem.prototype.setData = function (wrapper, animationData) {
11810
- var params = {
11811
- wrapper: wrapper,
11812
- animationData: animationData ? (typeof animationData === "object") ? animationData : JSON.parse(animationData) : null
11813
- };
11814
- var wrapperAttributes = wrapper.attributes;
11815
-
11816
- params.path = wrapperAttributes.getNamedItem('data-animation-path') ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';
11817
- params.animType = wrapperAttributes.getNamedItem('data-anim-type') ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : 'canvas';
11818
-
11819
- var loop = wrapperAttributes.getNamedItem('data-anim-loop') ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';
11820
- if (loop === '') { } else if (loop === 'false') {
11821
- params.loop = false;
11822
- } else if (loop === 'true') {
11823
- params.loop = true;
11824
- } else {
11825
- params.loop = parseInt(loop);
11826
- }
11827
- var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true;
11828
- params.autoplay = autoplay !== "false";
11829
-
11830
- params.name = wrapperAttributes.getNamedItem('data-name') ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';
11831
- var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : '';
11832
-
11833
- if (prerender === 'false') {
11834
- params.prerender = false;
11835
- }
11836
- this.setParams(params);
11837
- };
11838
-
11839
- AnimationItem.prototype.includeLayers = function (data) {
11840
- if (data.op > this.animationData.op) {
11841
- this.animationData.op = data.op;
11842
- this.totalFrames = Math.floor(data.op - this.animationData.ip);
11843
- }
11844
- var layers = this.animationData.layers;
11845
- var i, len = layers.length;
11846
- var newLayers = data.layers;
11847
- var j, jLen = newLayers.length;
11848
- for (j = 0; j < jLen; j += 1) {
11849
- i = 0;
11850
- while (i < len) {
11851
- if (layers[i].id == newLayers[j].id) {
11852
- layers[i] = newLayers[j];
11853
- break;
11854
- }
11855
- i += 1;
11856
- }
11857
- }
11858
- if (data.chars || data.fonts) {
11859
- this.renderer.globalData.fontManager.addChars(data.chars);
11860
- this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);
11861
- }
11862
- if (data.assets) {
11863
- len = data.assets.length;
11864
- for (i = 0; i < len; i += 1) {
11865
- this.animationData.assets.push(data.assets[i]);
11866
- }
11867
- }
11868
- this.animationData.__complete = false;
11869
- dataManager.completeData(this.animationData, this.renderer.globalData.fontManager);
11870
- this.renderer.includeLayers(data.layers);
11871
- if (expressionsPlugin) {
11872
- expressionsPlugin.initExpressions(this);
11873
- }
11874
- this.loadNextSegment();
11875
- };
11876
-
11877
- AnimationItem.prototype.loadNextSegment = function () {
11878
- var segments = this.animationData.segments;
11879
- if (!segments || segments.length === 0 || !this.autoloadSegments) {
11880
- this.trigger('data_ready');
11881
- this.timeCompleted = this.totalFrames;
11882
- return;
11883
- }
11884
- var segment = segments.shift();
11885
- this.timeCompleted = segment.time * this.frameRate;
11886
- var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';
11887
- this.segmentPos += 1;
11888
- assetLoader.load(segmentPath, this.includeLayers.bind(this), function () {
11889
- this.trigger('data_failed');
11890
- }.bind(this));
11891
- };
11892
-
11893
- AnimationItem.prototype.loadSegments = function () {
11894
- var segments = this.animationData.segments;
11895
- if (!segments) {
11896
- this.timeCompleted = this.totalFrames;
11897
- }
11898
- this.loadNextSegment();
11899
- };
11900
-
11901
- AnimationItem.prototype.imagesLoaded = function () {
11902
- this.trigger('loaded_images');
11903
- this.checkLoaded()
11904
- }
11905
-
11906
- AnimationItem.prototype.preloadImages = function () {
11907
- this.imagePreloader.setAssetsPath(this.assetsPath);
11908
- this.imagePreloader.setPath(this.path);
11909
- this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));
11910
- }
11911
-
11912
- AnimationItem.prototype.configAnimation = function (animData) {
11913
- if (!this.renderer) {
11914
- return;
11915
- }
11916
- try {
11917
- this.animationData = animData;
11918
-
11919
- if (this.initialSegment) {
11920
- this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);
11921
- this.firstFrame = Math.round(this.initialSegment[0]);
11922
- } else {
11923
- this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);
11924
- this.firstFrame = Math.round(this.animationData.ip);
11925
- }
11926
- this.renderer.configAnimation(animData);
11927
- if (!animData.assets) {
11928
- animData.assets = [];
11929
- }
11930
-
11931
- this.assets = this.animationData.assets;
11932
- this.frameRate = this.animationData.fr;
11933
- this.frameMult = this.animationData.fr / 1000;
11934
- this.renderer.searchExtraCompositions(animData.assets);
11935
- this.trigger('config_ready');
11936
- this.preloadImages();
11937
- this.loadSegments();
11938
- this.updaFrameModifier();
11939
- this.waitForFontsLoaded();
11940
- } catch (error) {
11941
- this.triggerConfigError(error);
11942
- }
11943
- };
11944
-
11945
- AnimationItem.prototype.waitForFontsLoaded = function () {
11946
- if (!this.renderer) {
11947
- return;
11948
- }
11949
- if (this.renderer.globalData.fontManager.loaded()) {
11950
- this.checkLoaded();
11951
- } else {
11952
- setTimeout(this.waitForFontsLoaded.bind(this), 20);
11953
- }
11954
- }
11955
-
11956
- AnimationItem.prototype.checkLoaded = function () {
11957
- if (!this.isLoaded && this.renderer.globalData.fontManager.loaded() && (this.imagePreloader.loaded() || this.renderer.rendererType !== 'canvas')) {
11958
- this.isLoaded = true;
11959
- dataManager.completeData(this.animationData, this.renderer.globalData.fontManager);
11960
- if (expressionsPlugin) {
11961
- expressionsPlugin.initExpressions(this);
11962
- }
11963
- this.renderer.initItems();
11964
- setTimeout(function () {
11965
- this.trigger('DOMLoaded');
11966
- }.bind(this), 0);
11967
- this.gotoFrame();
11968
- if (this.autoplay) {
11969
- this.play();
11970
- }
11971
- }
11972
- };
11973
-
11974
- AnimationItem.prototype.resize = function () {
11975
- this.renderer.updateContainerSize();
11976
- };
11977
-
11978
- AnimationItem.prototype.setSubframe = function (flag) {
11979
- this.subframeEnabled = flag ? true : false;
11980
- };
11981
-
11982
- AnimationItem.prototype.gotoFrame = function () {
11983
- this.currentFrame = this.subframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame;
11984
-
11985
- if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {
11986
- this.currentFrame = this.timeCompleted;
11987
- }
11988
- this.trigger('enterFrame');
11989
- this.renderFrame();
11990
- };
11991
-
11992
- AnimationItem.prototype.renderFrame = function () {
11993
- if (this.isLoaded === false) {
11994
- return;
11995
- }
11996
- try {
11997
- this.renderer.renderFrame(this.currentFrame + this.firstFrame);
11998
- } catch (error) {
11999
- this.triggerRenderFrameError(error);
12000
- }
12001
- };
12002
-
12003
- AnimationItem.prototype.play = function (name) {
12004
- if (name && this.name != name) {
12005
- return;
12006
- }
12007
- if (this.isPaused === true) {
12008
- this.isPaused = false;
12009
- if (this._idle) {
12010
- this._idle = false;
12011
- this.trigger('_active');
12012
- }
12013
- }
12014
- };
12015
-
12016
- AnimationItem.prototype.pause = function (name) {
12017
- if (name && this.name != name) {
12018
- return;
12019
- }
12020
- if (this.isPaused === false) {
12021
- this.isPaused = true;
12022
- this._idle = true;
12023
- this.trigger('_idle');
12024
- }
12025
- };
12026
-
12027
- AnimationItem.prototype.togglePause = function (name) {
12028
- if (name && this.name != name) {
12029
- return;
12030
- }
12031
- if (this.isPaused === true) {
12032
- this.play();
12033
- } else {
12034
- this.pause();
12035
- }
12036
- };
12037
-
12038
- AnimationItem.prototype.stop = function (name) {
12039
- if (name && this.name != name) {
12040
- return;
12041
- }
12042
- this.pause();
12043
- this.playCount = 0;
12044
- this._completedLoop = false;
12045
- this.setCurrentRawFrameValue(0);
12046
- };
12047
-
12048
- AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {
12049
- if (name && this.name != name) {
12050
- return;
12051
- }
12052
- if (isFrame) {
12053
- this.setCurrentRawFrameValue(value);
12054
- } else {
12055
- this.setCurrentRawFrameValue(value * this.frameModifier);
12056
- }
12057
- this.pause();
12058
- };
12059
-
12060
- AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {
12061
- this.goToAndStop(value, isFrame, name);
12062
- this.play();
12063
- };
12064
-
12065
- AnimationItem.prototype.advanceTime = function (value) {
12066
- if (this.isPaused === true || this.isLoaded === false) {
12067
- return;
12068
- }
12069
- var nextValue = this.currentRawFrame + value * this.frameModifier;
12070
- var _isComplete = false;
12071
- // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.
12072
- // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.
12073
- if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {
12074
- if (!this.loop || this.playCount === this.loop) {
12075
- if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {
12076
- _isComplete = true;
12077
- nextValue = this.totalFrames - 1;
12078
- }
12079
- } else if (nextValue >= this.totalFrames) {
12080
- this.playCount += 1;
12081
- if (!this.checkSegments(nextValue % this.totalFrames)) {
12082
- this.setCurrentRawFrameValue(nextValue % this.totalFrames);
12083
- this._completedLoop = true;
12084
- this.trigger('loopComplete');
12085
- }
12086
- } else {
12087
- this.setCurrentRawFrameValue(nextValue);
12088
- }
12089
- } else if (nextValue < 0) {
12090
- if (!this.checkSegments(nextValue % this.totalFrames)) {
12091
- if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {
12092
- this.setCurrentRawFrameValue(this.totalFrames + (nextValue % this.totalFrames));
12093
- if (!this._completedLoop) {
12094
- this._completedLoop = true;
12095
- } else {
12096
- this.trigger('loopComplete');
12097
- }
12098
- } else {
12099
- _isComplete = true;
12100
- nextValue = 0;
12101
- }
12102
- }
12103
- } else {
12104
- this.setCurrentRawFrameValue(nextValue);
12105
- }
12106
- if (_isComplete) {
12107
- this.setCurrentRawFrameValue(nextValue);
12108
- this.pause();
12109
- this.trigger('complete');
12110
- }
12111
- };
12112
-
12113
- AnimationItem.prototype.adjustSegment = function (arr, offset) {
12114
- this.playCount = 0;
12115
- if (arr[1] < arr[0]) {
12116
- if (this.frameModifier > 0) {
12117
- if (this.playSpeed < 0) {
12118
- this.setSpeed(-this.playSpeed);
12119
- } else {
12120
- this.setDirection(-1);
12121
- }
12122
- }
12123
- this.timeCompleted = this.totalFrames = arr[0] - arr[1];
12124
- this.firstFrame = arr[1];
12125
- this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);
12126
- } else if (arr[1] > arr[0]) {
12127
- if (this.frameModifier < 0) {
12128
- if (this.playSpeed < 0) {
12129
- this.setSpeed(-this.playSpeed);
12130
- } else {
12131
- this.setDirection(1);
12132
- }
12133
- }
12134
- this.timeCompleted = this.totalFrames = arr[1] - arr[0];
12135
- this.firstFrame = arr[0];
12136
- this.setCurrentRawFrameValue(0.001 + offset);
12137
- }
12138
- this.trigger('segmentStart');
12139
- };
12140
- AnimationItem.prototype.setSegment = function (init, end) {
12141
- var pendingFrame = -1;
12142
- if (this.isPaused) {
12143
- if (this.currentRawFrame + this.firstFrame < init) {
12144
- pendingFrame = init;
12145
- } else if (this.currentRawFrame + this.firstFrame > end) {
12146
- pendingFrame = end - init;
12147
- }
12148
- }
12149
-
12150
- this.firstFrame = init;
12151
- this.timeCompleted = this.totalFrames = end - init;
12152
- if (pendingFrame !== -1) {
12153
- this.goToAndStop(pendingFrame, true);
12154
- }
12155
- };
12156
-
12157
- AnimationItem.prototype.playSegments = function (arr, forceFlag) {
12158
- if (forceFlag) {
12159
- this.segments.length = 0;
12160
- }
12161
- if (typeof arr[0] === 'object') {
12162
- var i, len = arr.length;
12163
- for (i = 0; i < len; i += 1) {
12164
- this.segments.push(arr[i]);
12165
- }
12166
- } else {
12167
- this.segments.push(arr);
12168
- }
12169
- if (this.segments.length && forceFlag) {
12170
- this.adjustSegment(this.segments.shift(), 0);
12171
- }
12172
- if (this.isPaused) {
12173
- this.play();
12174
- }
12175
- };
12176
-
12177
- AnimationItem.prototype.resetSegments = function (forceFlag) {
12178
- this.segments.length = 0;
12179
- this.segments.push([this.animationData.ip, this.animationData.op]);
12180
- //this.segments.push([this.animationData.ip*this.frameRate,Math.floor(this.animationData.op - this.animationData.ip+this.animationData.ip*this.frameRate)]);
12181
- if (forceFlag) {
12182
- this.checkSegments(0);
12183
- }
12184
- };
12185
- AnimationItem.prototype.checkSegments = function (offset) {
12186
- if (this.segments.length) {
12187
- this.adjustSegment(this.segments.shift(), offset);
12188
- return true;
12189
- }
12190
- return false;
12191
- };
12192
-
12193
- AnimationItem.prototype.destroy = function (name) {
12194
- if ((name && this.name != name) || !this.renderer) {
12195
- return;
12196
- }
12197
- this.renderer.destroy();
12198
- this.imagePreloader.destroy();
12199
- this.trigger('destroy');
12200
- this._cbs = null;
12201
- this.onEnterFrame = this.onLoopComplete = this.onComplete = this.onSegmentStart = this.onDestroy = null;
12202
- this.renderer = null;
12203
- };
12204
-
12205
- AnimationItem.prototype.setCurrentRawFrameValue = function (value) {
12206
- this.currentRawFrame = value;
12207
- this.gotoFrame();
12208
- };
12209
-
12210
- AnimationItem.prototype.setSpeed = function (val) {
12211
- this.playSpeed = val;
12212
- this.updaFrameModifier();
12213
- };
12214
-
12215
- AnimationItem.prototype.setDirection = function (val) {
12216
- this.playDirection = val < 0 ? -1 : 1;
12217
- this.updaFrameModifier();
12218
- };
12219
-
12220
- AnimationItem.prototype.updaFrameModifier = function () {
12221
- this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;
12222
- };
12223
-
12224
- AnimationItem.prototype.getPath = function () {
12225
- return this.path;
12226
- };
12227
-
12228
- AnimationItem.prototype.getAssetsPath = function (assetData) {
12229
- var path = '';
12230
- if (assetData.e) {
12231
- path = assetData.p;
12232
- } else if (this.assetsPath) {
12233
- var imagePath = assetData.p;
12234
- if (imagePath.indexOf('images/') !== -1) {
12235
- imagePath = imagePath.split('/')[1];
12236
- }
12237
- path = this.assetsPath + imagePath;
12238
- } else {
12239
- path = this.path;
12240
- path += assetData.u ? assetData.u : '';
12241
- path += assetData.p;
12242
- }
12243
- return path;
12244
- };
12245
-
12246
- AnimationItem.prototype.getAssetData = function (id) {
12247
- var i = 0,
12248
- len = this.assets.length;
12249
- while (i < len) {
12250
- if (id == this.assets[i].id) {
12251
- return this.assets[i];
12252
- }
12253
- i += 1;
12254
- }
12255
- };
12256
-
12257
- AnimationItem.prototype.hide = function () {
12258
- this.renderer.hide();
12259
- };
12260
-
12261
- AnimationItem.prototype.show = function () {
12262
- this.renderer.show();
12263
- };
12264
-
12265
- AnimationItem.prototype.getDuration = function (isFrame) {
12266
- return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;
12267
- };
12268
-
12269
- AnimationItem.prototype.trigger = function (name) {
12270
- if (this._cbs && this._cbs[name]) {
12271
- switch (name) {
12272
- case 'enterFrame':
12273
- this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));
12274
- break;
12275
- case 'loopComplete':
12276
- this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));
12277
- break;
12278
- case 'complete':
12279
- this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));
12280
- break;
12281
- case 'segmentStart':
12282
- this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));
12283
- break;
12284
- case 'destroy':
12285
- this.triggerEvent(name, new BMDestroyEvent(name, this));
12286
- break;
12287
- default:
12288
- this.triggerEvent(name);
12289
- }
12290
- }
12291
- if (name === 'enterFrame' && this.onEnterFrame) {
12292
- this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));
12293
- }
12294
- if (name === 'loopComplete' && this.onLoopComplete) {
12295
- this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));
12296
- }
12297
- if (name === 'complete' && this.onComplete) {
12298
- this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));
12299
- }
12300
- if (name === 'segmentStart' && this.onSegmentStart) {
12301
- this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));
12302
- }
12303
- if (name === 'destroy' && this.onDestroy) {
12304
- this.onDestroy.call(this, new BMDestroyEvent(name, this));
12305
- }
12306
- };
12307
-
12308
- AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {
12309
-
12310
- var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);
12311
- this.triggerEvent('error', error);
12312
-
12313
- if (this.onError) {
12314
- this.onError.call(this, error);
12315
- }
12316
- }
12317
-
12318
- AnimationItem.prototype.triggerConfigError = function (nativeError) {
12319
-
12320
- var error = new BMConfigErrorEvent(nativeError, this.currentFrame);
12321
- this.triggerEvent('error', error);
12322
-
12323
- if (this.onError) {
12324
- this.onError.call(this, error);
12325
- }
12326
- }
12327
- var Expressions = (function () {
12328
- var ob = {};
12329
- ob.initExpressions = initExpressions;
12330
-
12331
-
12332
- function initExpressions(animation) {
12333
-
12334
- var stackCount = 0;
12335
- var registers = [];
12336
-
12337
- function pushExpression() {
12338
- stackCount += 1;
12339
- }
12340
-
12341
- function popExpression() {
12342
- stackCount -= 1;
12343
- if (stackCount === 0) {
12344
- releaseInstances();
12345
- }
12346
- }
12347
-
12348
- function registerExpressionProperty(expression) {
12349
- if (registers.indexOf(expression) === -1) {
12350
- registers.push(expression)
12351
- }
12352
- }
12353
-
12354
- function releaseInstances() {
12355
- var i, len = registers.length;
12356
- for (i = 0; i < len; i += 1) {
12357
- registers[i].release();
12358
- }
12359
- registers.length = 0;
12360
- }
12361
-
12362
- animation.renderer.compInterface = CompExpressionInterface(animation.renderer);
12363
- animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);
12364
- animation.renderer.globalData.pushExpression = pushExpression;
12365
- animation.renderer.globalData.popExpression = popExpression;
12366
- animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;
12367
- }
12368
- return ob;
12369
- }());
12370
-
12371
- expressionsPlugin = Expressions;
12372
-
12373
- var ExpressionManager = (function () {
12374
- 'use strict';
12375
- var ob = {};
12376
- var Math = BMMath;
12377
- var window = null;
12378
- var document = null;
12379
-
12380
- function $bm_isInstanceOfArray(arr) {
12381
- return arr.constructor === Array || arr.constructor === Float32Array;
12382
- }
12383
-
12384
- function isNumerable(tOfV, v) {
12385
- return tOfV === 'number' || tOfV === 'boolean' || tOfV === 'string' || v instanceof Number;
12386
- }
12387
-
12388
- function $bm_neg(a) {
12389
- var tOfA = typeof a;
12390
- if (tOfA === 'number' || tOfA === 'boolean' || a instanceof Number) {
12391
- return -a;
12392
- }
12393
- if ($bm_isInstanceOfArray(a)) {
12394
- var i, lenA = a.length;
12395
- var retArr = [];
12396
- for (i = 0; i < lenA; i += 1) {
12397
- retArr[i] = -a[i];
12398
- }
12399
- return retArr;
12400
- }
12401
- if (a.propType) {
12402
- return a.v;
12403
- }
12404
- }
12405
-
12406
- var easeInBez = BezierFactory.getBezierEasing(0.333, 0, .833, .833, 'easeIn').get;
12407
- var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, .667, 1, 'easeOut').get;
12408
- var easeInOutBez = BezierFactory.getBezierEasing(.33, 0, .667, 1, 'easeInOut').get;
12409
-
12410
- function sum(a, b) {
12411
- var tOfA = typeof a;
12412
- var tOfB = typeof b;
12413
- if (tOfA === 'string' || tOfB === 'string') {
12414
- return a + b;
12415
- }
12416
- if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {
12417
- return a + b;
12418
- }
12419
- if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {
12420
- a = a.slice(0);
12421
- a[0] = a[0] + b;
12422
- return a;
12423
- }
12424
- if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {
12425
- b = b.slice(0);
12426
- b[0] = a + b[0];
12427
- return b;
12428
- }
12429
- if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {
12430
-
12431
- var i = 0,
12432
- lenA = a.length,
12433
- lenB = b.length;
12434
- var retArr = [];
12435
- while (i < lenA || i < lenB) {
12436
- if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {
12437
- retArr[i] = a[i] + b[i];
12438
- } else {
12439
- retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];
12440
- }
12441
- i += 1;
12442
- }
12443
- return retArr;
12444
- }
12445
- return 0;
12446
- }
12447
- var add = sum;
12448
-
12449
- function sub(a, b) {
12450
- var tOfA = typeof a;
12451
- var tOfB = typeof b;
12452
- if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {
12453
- if (tOfA === 'string') {
12454
- a = parseInt(a);
12455
- }
12456
- if (tOfB === 'string') {
12457
- b = parseInt(b);
12458
- }
12459
- return a - b;
12460
- }
12461
- if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {
12462
- a = a.slice(0);
12463
- a[0] = a[0] - b;
12464
- return a;
12465
- }
12466
- if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {
12467
- b = b.slice(0);
12468
- b[0] = a - b[0];
12469
- return b;
12470
- }
12471
- if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {
12472
- var i = 0,
12473
- lenA = a.length,
12474
- lenB = b.length;
12475
- var retArr = [];
12476
- while (i < lenA || i < lenB) {
12477
- if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {
12478
- retArr[i] = a[i] - b[i];
12479
- } else {
12480
- retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];
12481
- }
12482
- i += 1;
12483
- }
12484
- return retArr;
12485
- }
12486
- return 0;
12487
- }
12488
-
12489
- function mul(a, b) {
12490
- var tOfA = typeof a;
12491
- var tOfB = typeof b;
12492
- var arr;
12493
- if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {
12494
- return a * b;
12495
- }
12496
-
12497
- var i, len;
12498
- if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {
12499
- len = a.length;
12500
- arr = createTypedArray('float32', len);
12501
- for (i = 0; i < len; i += 1) {
12502
- arr[i] = a[i] * b;
12503
- }
12504
- return arr;
12505
- }
12506
- if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {
12507
- len = b.length;
12508
- arr = createTypedArray('float32', len);
12509
- for (i = 0; i < len; i += 1) {
12510
- arr[i] = a * b[i];
12511
- }
12512
- return arr;
12513
- }
12514
- return 0;
12515
- }
12516
-
12517
- function div(a, b) {
12518
- var tOfA = typeof a;
12519
- var tOfB = typeof b;
12520
- var arr;
12521
- if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {
12522
- return a / b;
12523
- }
12524
- var i, len;
12525
- if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {
12526
- len = a.length;
12527
- arr = createTypedArray('float32', len);
12528
- for (i = 0; i < len; i += 1) {
12529
- arr[i] = a[i] / b;
12530
- }
12531
- return arr;
12532
- }
12533
- if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {
12534
- len = b.length;
12535
- arr = createTypedArray('float32', len);
12536
- for (i = 0; i < len; i += 1) {
12537
- arr[i] = a / b[i];
12538
- }
12539
- return arr;
12540
- }
12541
- return 0;
12542
- }
12543
-
12544
- function mod(a, b) {
12545
- if (typeof a === 'string') {
12546
- a = parseInt(a);
12547
- }
12548
- if (typeof b === 'string') {
12549
- b = parseInt(b);
12550
- }
12551
- return a % b;
12552
- }
12553
- var $bm_sum = sum;
12554
- var $bm_sub = sub;
12555
- var $bm_mul = mul;
12556
- var $bm_div = div;
12557
- var $bm_mod = mod;
12558
-
12559
- function clamp(num, min, max) {
12560
- if (min > max) {
12561
- var mm = max;
12562
- max = min;
12563
- min = mm;
12564
- }
12565
- return Math.min(Math.max(num, min), max);
12566
- }
12567
-
12568
- function radiansToDegrees(val) {
12569
- return val / degToRads;
12570
- }
12571
- var radians_to_degrees = radiansToDegrees;
12572
-
12573
- function degreesToRadians(val) {
12574
- return val * degToRads;
12575
- }
12576
- var degrees_to_radians = radiansToDegrees;
12577
-
12578
- var helperLengthArray = [0, 0, 0, 0, 0, 0];
12579
-
12580
- function length(arr1, arr2) {
12581
- if (typeof arr1 === 'number' || arr1 instanceof Number) {
12582
- arr2 = arr2 || 0;
12583
- return Math.abs(arr1 - arr2);
12584
- }
12585
- if (!arr2) {
12586
- arr2 = helperLengthArray;
12587
- }
12588
- var i, len = Math.min(arr1.length, arr2.length);
12589
- var addedLength = 0;
12590
- for (i = 0; i < len; i += 1) {
12591
- addedLength += Math.pow(arr2[i] - arr1[i], 2);
12592
- }
12593
- return Math.sqrt(addedLength);
12594
- }
12595
-
12596
- function normalize(vec) {
12597
- return div(vec, length(vec));
12598
- }
12599
-
12600
- function rgbToHsl(val) {
12601
- var r = val[0];
12602
- var g = val[1];
12603
- var b = val[2];
12604
- var max = Math.max(r, g, b),
12605
- min = Math.min(r, g, b);
12606
- var h, s, l = (max + min) / 2;
12607
-
12608
- if (max == min) {
12609
- h = s = 0; // achromatic
12610
- } else {
12611
- var d = max - min;
12612
- s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
12613
- switch (max) {
12614
- case r:
12615
- h = (g - b) / d + (g < b ? 6 : 0);
12616
- break;
12617
- case g:
12618
- h = (b - r) / d + 2;
12619
- break;
12620
- case b:
12621
- h = (r - g) / d + 4;
12622
- break;
12623
- }
12624
- h /= 6;
12625
- }
12626
-
12627
- return [h, s, l, val[3]];
12628
- }
12629
-
12630
- function hue2rgb(p, q, t) {
12631
- if (t < 0) t += 1;
12632
- if (t > 1) t -= 1;
12633
- if (t < 1 / 6) return p + (q - p) * 6 * t;
12634
- if (t < 1 / 2) return q;
12635
- if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
12636
- return p;
12637
- }
12638
-
12639
- function hslToRgb(val) {
12640
- var h = val[0];
12641
- var s = val[1];
12642
- var l = val[2];
12643
-
12644
- var r, g, b;
12645
-
12646
- if (s === 0) {
12647
- r = g = b = l; // achromatic
12648
- } else {
12649
-
12650
- var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
12651
- var p = 2 * l - q;
12652
- r = hue2rgb(p, q, h + 1 / 3);
12653
- g = hue2rgb(p, q, h);
12654
- b = hue2rgb(p, q, h - 1 / 3);
12655
- }
12656
-
12657
- return [r, g, b, val[3]];
12658
- }
12659
-
12660
- function linear(t, tMin, tMax, value1, value2) {
12661
- if (value1 === undefined || value2 === undefined) {
12662
- value1 = tMin;
12663
- value2 = tMax;
12664
- tMin = 0;
12665
- tMax = 1;
12666
- }
12667
- if (tMax < tMin) {
12668
- var _tMin = tMax;
12669
- tMax = tMin;
12670
- tMin = _tMin;
12671
- }
12672
- if (t <= tMin) {
12673
- return value1;
12674
- } else if (t >= tMax) {
12675
- return value2;
12676
- }
12677
- var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);
12678
- if (!value1.length) {
12679
- return value1 + (value2 - value1) * perc;
12680
- }
12681
- var i, len = value1.length;
12682
- var arr = createTypedArray('float32', len);
12683
- for (i = 0; i < len; i += 1) {
12684
- arr[i] = value1[i] + (value2[i] - value1[i]) * perc;
12685
- }
12686
- return arr;
12687
- }
12688
-
12689
- function random(min, max) {
12690
- if (max === undefined) {
12691
- if (min === undefined) {
12692
- min = 0;
12693
- max = 1;
12694
- } else {
12695
- max = min;
12696
- min = undefined;
12697
- }
12698
- }
12699
- if (max.length) {
12700
- var i, len = max.length;
12701
- if (!min) {
12702
- min = createTypedArray('float32', len);
12703
- }
12704
- var arr = createTypedArray('float32', len);
12705
- var rnd = BMMath.random();
12706
- for (i = 0; i < len; i += 1) {
12707
- arr[i] = min[i] + rnd * (max[i] - min[i]);
12708
- }
12709
- return arr;
12710
- }
12711
- if (min === undefined) {
12712
- min = 0;
12713
- }
12714
- var rndm = BMMath.random();
12715
- return min + rndm * (max - min);
12716
- }
12717
-
12718
- function createPath(points, inTangents, outTangents, closed) {
12719
- var i, len = points.length;
12720
- var path = shape_pool.newElement();
12721
- path.setPathData(!!closed, len);
12722
- var arrPlaceholder = [0, 0],
12723
- inVertexPoint, outVertexPoint;
12724
- for (i = 0; i < len; i += 1) {
12725
- inVertexPoint = (inTangents && inTangents[i]) ? inTangents[i] : arrPlaceholder;
12726
- outVertexPoint = (outTangents && outTangents[i]) ? outTangents[i] : arrPlaceholder;
12727
- path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);
12728
- }
12729
- return path;
12730
- }
12731
-
12732
- function initiateExpression(elem, data, property) {
12733
- var val = data.x;
12734
- var needsVelocity = /velocity(?![\w\d])/.test(val);
12735
- var _needsRandom = val.indexOf('random') !== -1;
12736
- var elemType = elem.data.ty;
12737
- var transform, $bm_transform, content, effect;
12738
- var thisProperty = property;
12739
- thisProperty.valueAtTime = thisProperty.getValueAtTime;
12740
- Object.defineProperty(thisProperty, 'value', {
12741
- get: function () {
12742
- return thisProperty.v
12743
- }
12744
- })
12745
- elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;
12746
- elem.comp.displayStartTime = 0;
12747
- var inPoint = elem.data.ip / elem.comp.globalData.frameRate;
12748
- var outPoint = elem.data.op / elem.comp.globalData.frameRate;
12749
- var width = elem.data.sw ? elem.data.sw : 0;
12750
- var height = elem.data.sh ? elem.data.sh : 0;
12751
- var name = elem.data.nm;
12752
- var loopIn, loop_in, loopOut, loop_out, smooth;
12753
- var toWorld, fromWorld, fromComp, toComp, fromCompToSurface, position, rotation, anchorPoint, scale, thisLayer, thisComp, mask, valueAtTime, velocityAtTime;
12754
- var __expression_functions = [];
12755
- if (data.xf) {
12756
- var i, len = data.xf.length;
12757
- for (i = 0; i < len; i += 1) {
12758
- __expression_functions[i] = eval('(function(){ return ' + data.xf[i] + '}())');
12759
- }
12760
- }
12761
-
12762
- var scoped_bm_rt;
12763
- var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}' + ']')[0];
12764
- var numKeys = property.kf ? data.k.length : 0;
12765
-
12766
- var active = !this.data || this.data.hd !== true;
12767
-
12768
- var wiggle = function wiggle(freq, amp) {
12769
- var i, j, len = this.pv.length ? this.pv.length : 1;
12770
- var addedAmps = createTypedArray('float32', len);
12771
- freq = 5;
12772
- var iterations = Math.floor(time * freq);
12773
- i = 0;
12774
- j = 0;
12775
- while (i < iterations) {
12776
- //var rnd = BMMath.random();
12777
- for (j = 0; j < len; j += 1) {
12778
- addedAmps[j] += -amp + amp * 2 * BMMath.random();
12779
- //addedAmps[j] += -amp + amp*2*rnd;
12780
- }
12781
- i += 1;
12782
- }
12783
- //var rnd2 = BMMath.random();
12784
- var periods = time * freq;
12785
- var perc = periods - Math.floor(periods);
12786
- var arr = createTypedArray('float32', len);
12787
- if (len > 1) {
12788
- for (j = 0; j < len; j += 1) {
12789
- arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc;
12790
- //arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;
12791
- //arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);
12792
- }
12793
- return arr;
12794
- } else {
12795
- return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;
12796
- }
12797
- }.bind(this);
12798
-
12799
- if (thisProperty.loopIn) {
12800
- loopIn = thisProperty.loopIn.bind(thisProperty);
12801
- loop_in = loopIn;
12802
- }
12803
-
12804
- if (thisProperty.loopOut) {
12805
- loopOut = thisProperty.loopOut.bind(thisProperty);
12806
- loop_out = loopOut;
12807
- }
12808
-
12809
- if (thisProperty.smooth) {
12810
- smooth = thisProperty.smooth.bind(thisProperty);
12811
- }
12812
-
12813
- function loopInDuration(type, duration) {
12814
- return loopIn(type, duration, true);
12815
- }
12816
-
12817
- function loopOutDuration(type, duration) {
12818
- return loopOut(type, duration, true);
12819
- }
12820
-
12821
- if (this.getValueAtTime) {
12822
- valueAtTime = this.getValueAtTime.bind(this);
12823
- }
12824
-
12825
- if (this.getVelocityAtTime) {
12826
- velocityAtTime = this.getVelocityAtTime.bind(this);
12827
- }
12828
-
12829
- var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);
12830
-
12831
- function lookAt(elem1, elem2) {
12832
- var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];
12833
- var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;
12834
- var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;
12835
- return [yaw, pitch, 0];
12836
- }
12837
-
12838
- function easeOut(t, tMin, tMax, val1, val2) {
12839
- return applyEase(easeOutBez, t, tMin, tMax, val1, val2);
12840
- }
12841
-
12842
- function easeIn(t, tMin, tMax, val1, val2) {
12843
- return applyEase(easeInBez, t, tMin, tMax, val1, val2);
12844
- }
12845
-
12846
- function ease(t, tMin, tMax, val1, val2) {
12847
- return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);
12848
- }
12849
-
12850
- function applyEase(fn, t, tMin, tMax, val1, val2) {
12851
- if (val1 === undefined) {
12852
- val1 = tMin;
12853
- val2 = tMax;
12854
- } else {
12855
- t = (t - tMin) / (tMax - tMin);
12856
- }
12857
- t = t > 1 ? 1 : t < 0 ? 0 : t;
12858
- var mult = fn(t);
12859
- if ($bm_isInstanceOfArray(val1)) {
12860
- var i, len = val1.length;
12861
- var arr = createTypedArray('float32', len);
12862
- for (i = 0; i < len; i += 1) {
12863
- arr[i] = (val2[i] - val1[i]) * mult + val1[i];
12864
- }
12865
- return arr;
12866
- } else {
12867
- return (val2 - val1) * mult + val1;
12868
- }
12869
- }
12870
-
12871
- function nearestKey(time) {
12872
- var i, len = data.k.length,
12873
- index, keyTime;
12874
- if (!data.k.length || typeof (data.k[0]) === 'number') {
12875
- index = 0;
12876
- keyTime = 0;
12877
- } else {
12878
- index = -1;
12879
- time *= elem.comp.globalData.frameRate;
12880
- if (time < data.k[0].t) {
12881
- index = 1;
12882
- keyTime = data.k[0].t;
12883
- } else {
12884
- for (i = 0; i < len - 1; i += 1) {
12885
- if (time === data.k[i].t) {
12886
- index = i + 1;
12887
- keyTime = data.k[i].t;
12888
- break;
12889
- } else if (time > data.k[i].t && time < data.k[i + 1].t) {
12890
- if (time - data.k[i].t > data.k[i + 1].t - time) {
12891
- index = i + 2;
12892
- keyTime = data.k[i + 1].t;
12893
- } else {
12894
- index = i + 1;
12895
- keyTime = data.k[i].t;
12896
- }
12897
- break;
12898
- }
12899
- }
12900
- if (index === -1) {
12901
- index = i + 1;
12902
- keyTime = data.k[i].t;
12903
- }
12904
- }
12905
-
12906
- }
12907
- var ob = {};
12908
- ob.index = index;
12909
- ob.time = keyTime / elem.comp.globalData.frameRate;
12910
- return ob;
12911
- }
12912
-
12913
- function key(ind) {
12914
- var ob, i, len;
12915
- if (!data.k.length || typeof (data.k[0]) === 'number') {
12916
- throw new Error('The property has no keyframe at index ' + ind);
12917
- }
12918
- ind -= 1;
12919
- ob = {
12920
- time: data.k[ind].t / elem.comp.globalData.frameRate,
12921
- value: []
12922
- };
12923
- var arr = data.k[ind].hasOwnProperty('s') ? data.k[ind].s : data.k[ind - 1].e;
12924
-
12925
- len = arr.length;
12926
- for (i = 0; i < len; i += 1) {
12927
- ob[i] = arr[i];
12928
- ob.value[i] = arr[i]
12929
- }
12930
- return ob;
12931
- }
12932
-
12933
- function framesToTime(frames, fps) {
12934
- if (!fps) {
12935
- fps = elem.comp.globalData.frameRate;
12936
- }
12937
- return frames / fps;
12938
- }
12939
-
12940
- function timeToFrames(t, fps) {
12941
- if (!t && t !== 0) {
12942
- t = time;
12943
- }
12944
- if (!fps) {
12945
- fps = elem.comp.globalData.frameRate;
12946
- }
12947
- return t * fps;
12948
- }
12949
-
12950
- function seedRandom(seed) {
12951
- BMMath.seedrandom(randSeed + seed);
12952
- }
12953
-
12954
- function sourceRectAtTime() {
12955
- return elem.sourceRectAtTime();
12956
- }
12957
-
12958
- function substring(init, end) {
12959
- if (typeof value === 'string') {
12960
- if (end === undefined) {
12961
- return value.substring(init)
12962
- }
12963
- return value.substring(init, end)
12964
- }
12965
- return '';
12966
- }
12967
-
12968
- function substr(init, end) {
12969
- if (typeof value === 'string') {
12970
- if (end === undefined) {
12971
- return value.substr(init)
12972
- }
12973
- return value.substr(init, end)
12974
- }
12975
- return '';
12976
- }
12977
-
12978
- function posterizeTime(framesPerSecond) {
12979
- time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond
12980
- value = valueAtTime(time)
12981
- }
12982
-
12983
- var time, velocity, value, text, textIndex, textTotal, selectorValue;
12984
- var index = elem.data.ind;
12985
- var hasParent = !!(elem.hierarchy && elem.hierarchy.length);
12986
- var parent;
12987
- var randSeed = Math.floor(Math.random() * 1000000);
12988
- var globalData = elem.globalData;
12989
-
12990
- function executeExpression(_value) {
12991
- // globalData.pushExpression();
12992
- value = _value;
12993
- if (_needsRandom) {
12994
- seedRandom(randSeed);
12995
- }
12996
- if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {
12997
- return value;
12998
- }
12999
- if (this.propType === 'textSelector') {
13000
- textIndex = this.textIndex;
13001
- textTotal = this.textTotal;
13002
- selectorValue = this.selectorValue;
13003
- }
13004
- if (!thisLayer) {
13005
- text = elem.layerInterface.text;
13006
- thisLayer = elem.layerInterface;
13007
- thisComp = elem.comp.compInterface;
13008
- toWorld = thisLayer.toWorld.bind(thisLayer);
13009
- fromWorld = thisLayer.fromWorld.bind(thisLayer);
13010
- fromComp = thisLayer.fromComp.bind(thisLayer);
13011
- toComp = thisLayer.toComp.bind(thisLayer);
13012
- mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;
13013
- fromCompToSurface = fromComp;
13014
- }
13015
- if (!transform) {
13016
- transform = elem.layerInterface("ADBE Transform Group");
13017
- $bm_transform = transform;
13018
- if (transform) {
13019
- anchorPoint = transform.anchorPoint;
13020
- /*position = transform.position;
13021
- rotation = transform.rotation;
13022
- scale = transform.scale;*/
13023
- }
13024
- }
13025
-
13026
- if (elemType === 4 && !content) {
13027
- content = thisLayer("ADBE Root Vectors Group");
13028
- }
13029
- if (!effect) {
13030
- effect = thisLayer(4);
13031
- }
13032
- hasParent = !!(elem.hierarchy && elem.hierarchy.length);
13033
- if (hasParent && !parent) {
13034
- parent = elem.hierarchy[0].layerInterface;
13035
- }
13036
- time = this.comp.renderedFrame / this.comp.globalData.frameRate;
13037
- if (needsVelocity) {
13038
- velocity = velocityAtTime(time);
13039
- }
13040
- expression_function();
13041
- this.frameExpressionId = elem.globalData.frameId;
13042
-
13043
-
13044
- //TODO: Check if it's possible to return on ShapeInterface the .v value
13045
- if (scoped_bm_rt.propType === "shape") {
13046
- scoped_bm_rt = scoped_bm_rt.v;
13047
- }
13048
- // globalData.popExpression();
13049
- return scoped_bm_rt;
13050
- }
13051
- return executeExpression;
13052
- }
13053
-
13054
- ob.initiateExpression = initiateExpression;
13055
- return ob;
13056
- }());
13057
- var expressionHelpers = (function () {
13058
-
13059
- function searchExpressions(elem, data, prop) {
13060
- if (data.x) {
13061
- prop.k = true;
13062
- prop.x = true;
13063
- prop.initiateExpression = ExpressionManager.initiateExpression;
13064
- prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));
13065
- }
13066
- }
13067
-
13068
- function getValueAtTime(frameNum) {
13069
- frameNum *= this.elem.globalData.frameRate;
13070
- frameNum -= this.offsetTime;
13071
- if (frameNum !== this._cachingAtTime.lastFrame) {
13072
- this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;
13073
- this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);
13074
- this._cachingAtTime.lastFrame = frameNum;
13075
- }
13076
- return this._cachingAtTime.value;
13077
-
13078
- }
13079
-
13080
- function getSpeedAtTime(frameNum) {
13081
- var delta = -0.01;
13082
- var v1 = this.getValueAtTime(frameNum);
13083
- var v2 = this.getValueAtTime(frameNum + delta);
13084
- var speed = 0;
13085
- if (v1.length) {
13086
- var i;
13087
- for (i = 0; i < v1.length; i += 1) {
13088
- speed += Math.pow(v2[i] - v1[i], 2);
13089
- }
13090
- speed = Math.sqrt(speed) * 100;
13091
- } else {
13092
- speed = 0;
13093
- }
13094
- return speed;
13095
- }
13096
-
13097
- function getVelocityAtTime(frameNum) {
13098
- if (this.vel !== undefined) {
13099
- return this.vel;
13100
- }
13101
- var delta = -0.001;
13102
- //frameNum += this.elem.data.st;
13103
- var v1 = this.getValueAtTime(frameNum);
13104
- var v2 = this.getValueAtTime(frameNum + delta);
13105
- var velocity;
13106
- if (v1.length) {
13107
- velocity = createTypedArray('float32', v1.length);
13108
- var i;
13109
- for (i = 0; i < v1.length; i += 1) {
13110
- //removing frameRate
13111
- //if needed, don't add it here
13112
- //velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);
13113
- velocity[i] = (v2[i] - v1[i]) / delta;
13114
- }
13115
- } else {
13116
- velocity = (v2 - v1) / delta;
13117
- }
13118
- return velocity;
13119
- }
13120
-
13121
- function getStaticValueAtTime() {
13122
- return this.pv;
13123
- }
13124
-
13125
- function setGroupProperty(propertyGroup) {
13126
- this.propertyGroup = propertyGroup;
13127
- }
13128
-
13129
- return {
13130
- searchExpressions: searchExpressions,
13131
- getSpeedAtTime: getSpeedAtTime,
13132
- getVelocityAtTime: getVelocityAtTime,
13133
- getValueAtTime: getValueAtTime,
13134
- getStaticValueAtTime: getStaticValueAtTime,
13135
- setGroupProperty: setGroupProperty,
13136
- }
13137
- }());
13138
- (function addPropertyDecorator() {
13139
-
13140
- function loopOut(type, duration, durationFlag) {
13141
- if (!this.k || !this.keyframes) {
13142
- return this.pv;
13143
- }
13144
- type = type ? type.toLowerCase() : '';
13145
- var currentFrame = this.comp.renderedFrame;
13146
- var keyframes = this.keyframes;
13147
- var lastKeyFrame = keyframes[keyframes.length - 1].t;
13148
- if (currentFrame <= lastKeyFrame) {
13149
- return this.pv;
13150
- } else {
13151
- var cycleDuration, firstKeyFrame;
13152
- if (!durationFlag) {
13153
- if (!duration || duration > keyframes.length - 1) {
13154
- duration = keyframes.length - 1;
13155
- }
13156
- firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;
13157
- cycleDuration = lastKeyFrame - firstKeyFrame;
13158
- } else {
13159
- if (!duration) {
13160
- cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);
13161
- } else {
13162
- cycleDuration = Math.abs(lastKeyFrame - elem.comp.globalData.frameRate * duration);
13163
- }
13164
- firstKeyFrame = lastKeyFrame - cycleDuration;
13165
- }
13166
- var i, len, ret;
13167
- if (type === 'pingpong') {
13168
- var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);
13169
- if (iterations % 2 !== 0) {
13170
- return this.getValueAtTime(((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0);
13171
- }
13172
- } else if (type === 'offset') {
13173
- var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);
13174
- var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);
13175
- var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);
13176
- var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);
13177
- if (this.pv.length) {
13178
- ret = new Array(initV.length);
13179
- len = ret.length;
13180
- for (i = 0; i < len; i += 1) {
13181
- ret[i] = (endV[i] - initV[i]) * repeats + current[i];
13182
- }
13183
- return ret;
13184
- }
13185
- return (endV - initV) * repeats + current;
13186
- } else if (type === 'continue') {
13187
- var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);
13188
- var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);
13189
- if (this.pv.length) {
13190
- ret = new Array(lastValue.length);
13191
- len = ret.length;
13192
- for (i = 0; i < len; i += 1) {
13193
- ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005;
13194
- }
13195
- return ret;
13196
- }
13197
- return lastValue + (lastValue - nextLastValue) * (((currentFrame - lastKeyFrame)) / 0.001);
13198
- }
13199
- return this.getValueAtTime((((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0);
13200
- }
13201
- }
13202
-
13203
- function loopIn(type, duration, durationFlag) {
13204
- if (!this.k) {
13205
- return this.pv;
13206
- }
13207
- type = type ? type.toLowerCase() : '';
13208
- var currentFrame = this.comp.renderedFrame;
13209
- var keyframes = this.keyframes;
13210
- var firstKeyFrame = keyframes[0].t;
13211
- if (currentFrame >= firstKeyFrame) {
13212
- return this.pv;
13213
- } else {
13214
- var cycleDuration, lastKeyFrame;
13215
- if (!durationFlag) {
13216
- if (!duration || duration > keyframes.length - 1) {
13217
- duration = keyframes.length - 1;
13218
- }
13219
- lastKeyFrame = keyframes[duration].t;
13220
- cycleDuration = lastKeyFrame - firstKeyFrame;
13221
- } else {
13222
- if (!duration) {
13223
- cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);
13224
- } else {
13225
- cycleDuration = Math.abs(elem.comp.globalData.frameRate * duration);
13226
- }
13227
- lastKeyFrame = firstKeyFrame + cycleDuration;
13228
- }
13229
- var i, len, ret;
13230
- if (type === 'pingpong') {
13231
- var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);
13232
- if (iterations % 2 === 0) {
13233
- return this.getValueAtTime((((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0);
13234
- }
13235
- } else if (type === 'offset') {
13236
- var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);
13237
- var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);
13238
- var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);
13239
- var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;
13240
- if (this.pv.length) {
13241
- ret = new Array(initV.length);
13242
- len = ret.length;
13243
- for (i = 0; i < len; i += 1) {
13244
- ret[i] = current[i] - (endV[i] - initV[i]) * repeats;
13245
- }
13246
- return ret;
13247
- }
13248
- return current - (endV - initV) * repeats;
13249
- } else if (type === 'continue') {
13250
- var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);
13251
- var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);
13252
- if (this.pv.length) {
13253
- ret = new Array(firstValue.length);
13254
- len = ret.length;
13255
- for (i = 0; i < len; i += 1) {
13256
- ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001;
13257
- }
13258
- return ret;
13259
- }
13260
- return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001;
13261
- }
13262
- return this.getValueAtTime(((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0);
13263
- }
13264
- }
13265
-
13266
- function smooth(width, samples) {
13267
- if (!this.k) {
13268
- return this.pv;
13269
- }
13270
- width = (width || 0.4) * 0.5;
13271
- samples = Math.floor(samples || 5);
13272
- if (samples <= 1) {
13273
- return this.pv;
13274
- }
13275
- var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;
13276
- var initFrame = currentTime - width;
13277
- var endFrame = currentTime + width;
13278
- var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;
13279
- var i = 0,
13280
- j = 0;
13281
- var value;
13282
- if (this.pv.length) {
13283
- value = createTypedArray('float32', this.pv.length);
13284
- } else {
13285
- value = 0;
13286
- }
13287
- var sampleValue;
13288
- while (i < samples) {
13289
- sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);
13290
- if (this.pv.length) {
13291
- for (j = 0; j < this.pv.length; j += 1) {
13292
- value[j] += sampleValue[j];
13293
- }
13294
- } else {
13295
- value += sampleValue;
13296
- }
13297
- i += 1;
13298
- }
13299
- if (this.pv.length) {
13300
- for (j = 0; j < this.pv.length; j += 1) {
13301
- value[j] /= samples;
13302
- }
13303
- } else {
13304
- value /= samples;
13305
- }
13306
- return value;
13307
- }
13308
-
13309
- function getValueAtTime(frameNum) {
13310
- frameNum *= this.elem.globalData.frameRate;
13311
- frameNum -= this.offsetTime;
13312
- if (frameNum !== this._cachingAtTime.lastFrame) {
13313
- this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;
13314
- this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);
13315
- this._cachingAtTime.lastFrame = frameNum;
13316
- }
13317
- return this._cachingAtTime.value;
13318
-
13319
- }
13320
-
13321
- function getTransformValueAtTime(time) {
13322
- console.warn('Transform at time not supported');
13323
- }
13324
-
13325
- function getTransformStaticValueAtTime(time) {
13326
-
13327
- }
13328
-
13329
- var getTransformProperty = TransformPropertyFactory.getTransformProperty;
13330
- TransformPropertyFactory.getTransformProperty = function (elem, data, container) {
13331
- var prop = getTransformProperty(elem, data, container);
13332
- if (prop.dynamicProperties.length) {
13333
- prop.getValueAtTime = getTransformValueAtTime.bind(prop);
13334
- } else {
13335
- prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);
13336
- }
13337
- prop.setGroupProperty = expressionHelpers.setGroupProperty;
13338
- return prop;
13339
- };
13340
-
13341
- var propertyGetProp = PropertyFactory.getProp;
13342
- PropertyFactory.getProp = function (elem, data, type, mult, container) {
13343
- var prop = propertyGetProp(elem, data, type, mult, container);
13344
- //prop.getVelocityAtTime = getVelocityAtTime;
13345
- //prop.loopOut = loopOut;
13346
- //prop.loopIn = loopIn;
13347
- if (prop.kf) {
13348
- prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);
13349
- } else {
13350
- prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);
13351
- }
13352
- prop.setGroupProperty = expressionHelpers.setGroupProperty;
13353
- prop.loopOut = loopOut;
13354
- prop.loopIn = loopIn;
13355
- prop.smooth = smooth;
13356
- prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);
13357
- prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);
13358
- prop.numKeys = data.a === 1 ? data.k.length : 0;
13359
- prop.propertyIndex = data.ix;
13360
- var value = 0;
13361
- if (type !== 0) {
13362
- value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);
13363
- }
13364
- prop._cachingAtTime = {
13365
- lastFrame: initialDefaultFrame,
13366
- lastIndex: 0,
13367
- value: value
13368
- };
13369
- expressionHelpers.searchExpressions(elem, data, prop);
13370
- if (prop.k) {
13371
- container.addDynamicProperty(prop);
13372
- }
13373
-
13374
- return prop;
13375
- };
13376
-
13377
- function getShapeValueAtTime(frameNum) {
13378
- //For now this caching object is created only when needed instead of creating it when the shape is initialized.
13379
- if (!this._cachingAtTime) {
13380
- this._cachingAtTime = {
13381
- shapeValue: shape_pool.clone(this.pv),
13382
- lastIndex: 0,
13383
- lastTime: initialDefaultFrame
13384
- };
13385
- }
13386
-
13387
- frameNum *= this.elem.globalData.frameRate;
13388
- frameNum -= this.offsetTime;
13389
- if (frameNum !== this._cachingAtTime.lastTime) {
13390
- this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;
13391
- this._cachingAtTime.lastTime = frameNum;
13392
- this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);
13393
- }
13394
- return this._cachingAtTime.shapeValue;
13395
- }
13396
-
13397
- var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();
13398
- var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();
13399
-
13400
- function ShapeExpressions() { }
13401
- ShapeExpressions.prototype = {
13402
- vertices: function (prop, time) {
13403
- if (this.k) {
13404
- this.getValue();
13405
- }
13406
- var shapePath = this.v;
13407
- if (time !== undefined) {
13408
- shapePath = this.getValueAtTime(time, 0);
13409
- }
13410
- var i, len = shapePath._length;
13411
- var vertices = shapePath[prop];
13412
- var points = shapePath.v;
13413
- var arr = createSizedArray(len);
13414
- for (i = 0; i < len; i += 1) {
13415
- if (prop === 'i' || prop === 'o') {
13416
- arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];
13417
- } else {
13418
- arr[i] = [vertices[i][0], vertices[i][1]];
13419
- }
13420
-
13421
- }
13422
- return arr;
13423
- },
13424
- points: function (time) {
13425
- return this.vertices('v', time);
13426
- },
13427
- inTangents: function (time) {
13428
- return this.vertices('i', time);
13429
- },
13430
- outTangents: function (time) {
13431
- return this.vertices('o', time);
13432
- },
13433
- isClosed: function () {
13434
- return this.v.c;
13435
- },
13436
- pointOnPath: function (perc, time) {
13437
- var shapePath = this.v;
13438
- if (time !== undefined) {
13439
- shapePath = this.getValueAtTime(time, 0);
13440
- }
13441
- if (!this._segmentsLength) {
13442
- this._segmentsLength = bez.getSegmentsLength(shapePath);
13443
- }
13444
-
13445
- var segmentsLength = this._segmentsLength;
13446
- var lengths = segmentsLength.lengths;
13447
- var lengthPos = segmentsLength.totalLength * perc;
13448
- var i = 0,
13449
- len = lengths.length;
13450
- var j = 0,
13451
- jLen;
13452
- var accumulatedLength = 0,
13453
- pt;
13454
- while (i < len) {
13455
- if (accumulatedLength + lengths[i].addedLength > lengthPos) {
13456
- var initIndex = i;
13457
- var endIndex = (shapePath.c && i === len - 1) ? 0 : i + 1;
13458
- var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;
13459
- pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);
13460
- break;
13461
- } else {
13462
- accumulatedLength += lengths[i].addedLength;
13463
- }
13464
- i += 1;
13465
- }
13466
- if (!pt) {
13467
- pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];
13468
- }
13469
- return pt;
13470
- },
13471
- vectorOnPath: function (perc, time, vectorType) {
13472
- //perc doesn't use triple equality because it can be a Number object as well as a primitive.
13473
- perc = perc == 1 ? this.v.c ? 0 : 0.999 : perc;
13474
- var pt1 = this.pointOnPath(perc, time);
13475
- var pt2 = this.pointOnPath(perc + 0.001, time);
13476
- var xLength = pt2[0] - pt1[0];
13477
- var yLength = pt2[1] - pt1[1];
13478
- var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));
13479
- if (magnitude === 0) {
13480
- return [0, 0];
13481
- }
13482
- var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];
13483
- return unitVector;
13484
- },
13485
- tangentOnPath: function (perc, time) {
13486
- return this.vectorOnPath(perc, time, 'tangent');
13487
- },
13488
- normalOnPath: function (perc, time) {
13489
- return this.vectorOnPath(perc, time, 'normal');
13490
- },
13491
- setGroupProperty: expressionHelpers.setGroupProperty,
13492
- getValueAtTime: expressionHelpers.getStaticValueAtTime
13493
- };
13494
- extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);
13495
- extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);
13496
- KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;
13497
- KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;
13498
-
13499
- var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;
13500
- ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {
13501
- var prop = propertyGetShapeProp(elem, data, type, arr, trims);
13502
- prop.propertyIndex = data.ix;
13503
- prop.lock = false;
13504
- if (type === 3) {
13505
- expressionHelpers.searchExpressions(elem, data.pt, prop);
13506
- } else if (type === 4) {
13507
- expressionHelpers.searchExpressions(elem, data.ks, prop);
13508
- }
13509
- if (prop.k) {
13510
- elem.addDynamicProperty(prop);
13511
- }
13512
- return prop;
13513
- };
13514
- }());
13515
- (function addDecorator() {
13516
-
13517
- function searchExpressions() {
13518
- if (this.data.d.x) {
13519
- this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);
13520
- this.addEffect(this.getExpressionValue.bind(this));
13521
- return true;
13522
- }
13523
- }
13524
-
13525
- TextProperty.prototype.getExpressionValue = function (currentValue, text) {
13526
- var newValue = this.calculateExpression(text);
13527
- if (currentValue.t !== newValue) {
13528
- var newData = {};
13529
- this.copyData(newData, currentValue);
13530
- newData.t = newValue.toString();
13531
- newData.__complete = false;
13532
- return newData;
13533
- }
13534
- return currentValue;
13535
- }
13536
-
13537
- TextProperty.prototype.searchProperty = function () {
13538
-
13539
- var isKeyframed = this.searchKeyframes();
13540
- var hasExpressions = this.searchExpressions();
13541
- this.kf = isKeyframed || hasExpressions;
13542
- return this.kf;
13543
- };
13544
-
13545
- TextProperty.prototype.searchExpressions = searchExpressions;
13546
-
13547
- }());
13548
- var ShapeExpressionInterface = (function () {
13549
-
13550
- function iterateElements(shapes, view, propertyGroup) {
13551
- var arr = [];
13552
- var i, len = shapes ? shapes.length : 0;
13553
- for (i = 0; i < len; i += 1) {
13554
- if (shapes[i].ty == 'gr') {
13555
- arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));
13556
- } else if (shapes[i].ty == 'fl') {
13557
- arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));
13558
- } else if (shapes[i].ty == 'st') {
13559
- arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));
13560
- } else if (shapes[i].ty == 'tm') {
13561
- arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));
13562
- } else if (shapes[i].ty == 'tr') {
13563
- //arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));
13564
- } else if (shapes[i].ty == 'el') {
13565
- arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));
13566
- } else if (shapes[i].ty == 'sr') {
13567
- arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));
13568
- } else if (shapes[i].ty == 'sh') {
13569
- arr.push(pathInterfaceFactory(shapes[i], view[i], propertyGroup));
13570
- } else if (shapes[i].ty == 'rc') {
13571
- arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));
13572
- } else if (shapes[i].ty == 'rd') {
13573
- arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));
13574
- } else if (shapes[i].ty == 'rp') {
13575
- arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));
13576
- }
13577
- }
13578
- return arr;
13579
- }
13580
-
13581
- function contentsInterfaceFactory(shape, view, propertyGroup) {
13582
- var interfaces;
13583
- var interfaceFunction = function _interfaceFunction(value) {
13584
- var i = 0,
13585
- len = interfaces.length;
13586
- while (i < len) {
13587
- if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {
13588
- return interfaces[i];
13589
- }
13590
- i += 1;
13591
- }
13592
- if (typeof value === 'number') {
13593
- return interfaces[value - 1];
13594
- }
13595
- };
13596
- interfaceFunction.propertyGroup = function (val) {
13597
- if (val === 1) {
13598
- return interfaceFunction;
13599
- } else {
13600
- return propertyGroup(val - 1);
13601
- }
13602
- };
13603
- interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);
13604
- interfaceFunction.numProperties = interfaces.length;
13605
- interfaceFunction.propertyIndex = shape.cix;
13606
- interfaceFunction._name = shape.nm;
13607
-
13608
- return interfaceFunction;
13609
- }
13610
-
13611
- function groupInterfaceFactory(shape, view, propertyGroup) {
13612
- var interfaceFunction = function _interfaceFunction(value) {
13613
- switch (value) {
13614
- case 'ADBE Vectors Group':
13615
- case 'Contents':
13616
- case 2:
13617
- return interfaceFunction.content;
13618
- //Not necessary for now. Keeping them here in case a new case appears
13619
- //case 'ADBE Vector Transform Group':
13620
- //case 3:
13621
- default:
13622
- return interfaceFunction.transform;
13623
- }
13624
- };
13625
- interfaceFunction.propertyGroup = function (val) {
13626
- if (val === 1) {
13627
- return interfaceFunction;
13628
- } else {
13629
- return propertyGroup(val - 1);
13630
- }
13631
- };
13632
- var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);
13633
- var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);
13634
- interfaceFunction.content = content;
13635
- interfaceFunction.transform = transformInterface;
13636
- Object.defineProperty(interfaceFunction, '_name', {
13637
- get: function () {
13638
- return shape.nm;
13639
- }
13640
- });
13641
- //interfaceFunction.content = interfaceFunction;
13642
- interfaceFunction.numProperties = shape.np;
13643
- interfaceFunction.propertyIndex = shape.ix;
13644
- interfaceFunction.nm = shape.nm;
13645
- interfaceFunction.mn = shape.mn;
13646
- return interfaceFunction;
13647
- }
13648
-
13649
- function fillInterfaceFactory(shape, view, propertyGroup) {
13650
- function interfaceFunction(val) {
13651
- if (val === 'Color' || val === 'color') {
13652
- return interfaceFunction.color;
13653
- } else if (val === 'Opacity' || val === 'opacity') {
13654
- return interfaceFunction.opacity;
13655
- }
13656
- }
13657
- Object.defineProperties(interfaceFunction, {
13658
- 'color': {
13659
- get: ExpressionPropertyInterface(view.c)
13660
- },
13661
- 'opacity': {
13662
- get: ExpressionPropertyInterface(view.o)
13663
- },
13664
- '_name': {
13665
- value: shape.nm
13666
- },
13667
- 'mn': {
13668
- value: shape.mn
13669
- }
13670
- });
13671
-
13672
- view.c.setGroupProperty(propertyGroup);
13673
- view.o.setGroupProperty(propertyGroup);
13674
- return interfaceFunction;
13675
- }
13676
-
13677
- function strokeInterfaceFactory(shape, view, propertyGroup) {
13678
- function _propertyGroup(val) {
13679
- if (val === 1) {
13680
- return ob;
13681
- } else {
13682
- return propertyGroup(val - 1);
13683
- }
13684
- }
13685
-
13686
- function _dashPropertyGroup(val) {
13687
- if (val === 1) {
13688
- return dashOb;
13689
- } else {
13690
- return _propertyGroup(val - 1);
13691
- }
13692
- }
13693
-
13694
- function addPropertyToDashOb(i) {
13695
- Object.defineProperty(dashOb, shape.d[i].nm, {
13696
- get: ExpressionPropertyInterface(view.d.dataProps[i].p)
13697
- });
13698
- }
13699
- var i, len = shape.d ? shape.d.length : 0;
13700
- var dashOb = {};
13701
- for (i = 0; i < len; i += 1) {
13702
- addPropertyToDashOb(i);
13703
- view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);
13704
- }
13705
-
13706
- function interfaceFunction(val) {
13707
- if (val === 'Color' || val === 'color') {
13708
- return interfaceFunction.color;
13709
- } else if (val === 'Opacity' || val === 'opacity') {
13710
- return interfaceFunction.opacity;
13711
- } else if (val === 'Stroke Width' || val === 'stroke width') {
13712
- return interfaceFunction.strokeWidth;
13713
- }
13714
- }
13715
- Object.defineProperties(interfaceFunction, {
13716
- 'color': {
13717
- get: ExpressionPropertyInterface(view.c)
13718
- },
13719
- 'opacity': {
13720
- get: ExpressionPropertyInterface(view.o)
13721
- },
13722
- 'strokeWidth': {
13723
- get: ExpressionPropertyInterface(view.w)
13724
- },
13725
- 'dash': {
13726
- get: function () {
13727
- return dashOb;
13728
- }
13729
- },
13730
- '_name': {
13731
- value: shape.nm
13732
- },
13733
- 'mn': {
13734
- value: shape.mn
13735
- }
13736
- });
13737
-
13738
- view.c.setGroupProperty(_propertyGroup);
13739
- view.o.setGroupProperty(_propertyGroup);
13740
- view.w.setGroupProperty(_propertyGroup);
13741
- return interfaceFunction;
13742
- }
13743
-
13744
- function trimInterfaceFactory(shape, view, propertyGroup) {
13745
- function _propertyGroup(val) {
13746
- if (val == 1) {
13747
- return interfaceFunction;
13748
- } else {
13749
- return propertyGroup(--val);
13750
- }
13751
- }
13752
- interfaceFunction.propertyIndex = shape.ix;
13753
-
13754
- view.s.setGroupProperty(_propertyGroup);
13755
- view.e.setGroupProperty(_propertyGroup);
13756
- view.o.setGroupProperty(_propertyGroup);
13757
-
13758
- function interfaceFunction(val) {
13759
- if (val === shape.e.ix || val === 'End' || val === 'end') {
13760
- return interfaceFunction.end;
13761
- }
13762
- if (val === shape.s.ix) {
13763
- return interfaceFunction.start;
13764
- }
13765
- if (val === shape.o.ix) {
13766
- return interfaceFunction.offset;
13767
- }
13768
- }
13769
- interfaceFunction.propertyIndex = shape.ix;
13770
- interfaceFunction.propertyGroup = propertyGroup;
13771
-
13772
- Object.defineProperties(interfaceFunction, {
13773
- 'start': {
13774
- get: ExpressionPropertyInterface(view.s)
13775
- },
13776
- 'end': {
13777
- get: ExpressionPropertyInterface(view.e)
13778
- },
13779
- 'offset': {
13780
- get: ExpressionPropertyInterface(view.o)
13781
- },
13782
- '_name': {
13783
- value: shape.nm
13784
- }
13785
- });
13786
- interfaceFunction.mn = shape.mn;
13787
- return interfaceFunction;
13788
- }
13789
-
13790
- function transformInterfaceFactory(shape, view, propertyGroup) {
13791
- function _propertyGroup(val) {
13792
- if (val == 1) {
13793
- return interfaceFunction;
13794
- } else {
13795
- return propertyGroup(--val);
13796
- }
13797
- }
13798
- view.transform.mProps.o.setGroupProperty(_propertyGroup);
13799
- view.transform.mProps.p.setGroupProperty(_propertyGroup);
13800
- view.transform.mProps.a.setGroupProperty(_propertyGroup);
13801
- view.transform.mProps.s.setGroupProperty(_propertyGroup);
13802
- view.transform.mProps.r.setGroupProperty(_propertyGroup);
13803
- if (view.transform.mProps.sk) {
13804
- view.transform.mProps.sk.setGroupProperty(_propertyGroup);
13805
- view.transform.mProps.sa.setGroupProperty(_propertyGroup);
13806
- }
13807
- view.transform.op.setGroupProperty(_propertyGroup);
13808
-
13809
- function interfaceFunction(value) {
13810
- if (shape.a.ix === value || value === 'Anchor Point') {
13811
- return interfaceFunction.anchorPoint;
13812
- }
13813
- if (shape.o.ix === value || value === 'Opacity') {
13814
- return interfaceFunction.opacity;
13815
- }
13816
- if (shape.p.ix === value || value === 'Position') {
13817
- return interfaceFunction.position;
13818
- }
13819
- if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {
13820
- return interfaceFunction.rotation;
13821
- }
13822
- if (shape.s.ix === value || value === 'Scale') {
13823
- return interfaceFunction.scale;
13824
- }
13825
- if (shape.sk && shape.sk.ix === value || value === 'Skew') {
13826
- return interfaceFunction.skew;
13827
- }
13828
- if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') {
13829
- return interfaceFunction.skewAxis;
13830
- }
13831
-
13832
- }
13833
- Object.defineProperties(interfaceFunction, {
13834
- 'opacity': {
13835
- get: ExpressionPropertyInterface(view.transform.mProps.o)
13836
- },
13837
- 'position': {
13838
- get: ExpressionPropertyInterface(view.transform.mProps.p)
13839
- },
13840
- 'anchorPoint': {
13841
- get: ExpressionPropertyInterface(view.transform.mProps.a)
13842
- },
13843
- 'scale': {
13844
- get: ExpressionPropertyInterface(view.transform.mProps.s)
13845
- },
13846
- 'rotation': {
13847
- get: ExpressionPropertyInterface(view.transform.mProps.r)
13848
- },
13849
- 'skew': {
13850
- get: ExpressionPropertyInterface(view.transform.mProps.sk)
13851
- },
13852
- 'skewAxis': {
13853
- get: ExpressionPropertyInterface(view.transform.mProps.sa)
13854
- },
13855
- '_name': {
13856
- value: shape.nm
13857
- }
13858
- });
13859
- interfaceFunction.ty = 'tr';
13860
- interfaceFunction.mn = shape.mn;
13861
- interfaceFunction.propertyGroup = propertyGroup;
13862
- return interfaceFunction;
13863
- }
13864
-
13865
- function ellipseInterfaceFactory(shape, view, propertyGroup) {
13866
- function _propertyGroup(val) {
13867
- if (val == 1) {
13868
- return interfaceFunction;
13869
- } else {
13870
- return propertyGroup(--val);
13871
- }
13872
- }
13873
- interfaceFunction.propertyIndex = shape.ix;
13874
- var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;
13875
- prop.s.setGroupProperty(_propertyGroup);
13876
- prop.p.setGroupProperty(_propertyGroup);
13877
-
13878
- function interfaceFunction(value) {
13879
- if (shape.p.ix === value) {
13880
- return interfaceFunction.position;
13881
- }
13882
- if (shape.s.ix === value) {
13883
- return interfaceFunction.size;
13884
- }
13885
- }
13886
-
13887
- Object.defineProperties(interfaceFunction, {
13888
- 'size': {
13889
- get: ExpressionPropertyInterface(prop.s)
13890
- },
13891
- 'position': {
13892
- get: ExpressionPropertyInterface(prop.p)
13893
- },
13894
- '_name': {
13895
- value: shape.nm
13896
- }
13897
- });
13898
- interfaceFunction.mn = shape.mn;
13899
- return interfaceFunction;
13900
- }
13901
-
13902
- function starInterfaceFactory(shape, view, propertyGroup) {
13903
- function _propertyGroup(val) {
13904
- if (val == 1) {
13905
- return interfaceFunction;
13906
- } else {
13907
- return propertyGroup(--val);
13908
- }
13909
- }
13910
- var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;
13911
- interfaceFunction.propertyIndex = shape.ix;
13912
- prop.or.setGroupProperty(_propertyGroup);
13913
- prop.os.setGroupProperty(_propertyGroup);
13914
- prop.pt.setGroupProperty(_propertyGroup);
13915
- prop.p.setGroupProperty(_propertyGroup);
13916
- prop.r.setGroupProperty(_propertyGroup);
13917
- if (shape.ir) {
13918
- prop.ir.setGroupProperty(_propertyGroup);
13919
- prop.is.setGroupProperty(_propertyGroup);
13920
- }
13921
-
13922
- function interfaceFunction(value) {
13923
- if (shape.p.ix === value) {
13924
- return interfaceFunction.position;
13925
- }
13926
- if (shape.r.ix === value) {
13927
- return interfaceFunction.rotation;
13928
- }
13929
- if (shape.pt.ix === value) {
13930
- return interfaceFunction.points;
13931
- }
13932
- if (shape.or.ix === value || 'ADBE Vector Star Outer Radius' === value) {
13933
- return interfaceFunction.outerRadius;
13934
- }
13935
- if (shape.os.ix === value) {
13936
- return interfaceFunction.outerRoundness;
13937
- }
13938
- if (shape.ir && (shape.ir.ix === value || 'ADBE Vector Star Inner Radius' === value)) {
13939
- return interfaceFunction.innerRadius;
13940
- }
13941
- if (shape.is && shape.is.ix === value) {
13942
- return interfaceFunction.innerRoundness;
13943
- }
13944
-
13945
- }
13946
-
13947
- Object.defineProperties(interfaceFunction, {
13948
- 'position': {
13949
- get: ExpressionPropertyInterface(prop.p)
13950
- },
13951
- 'rotation': {
13952
- get: ExpressionPropertyInterface(prop.r)
13953
- },
13954
- 'points': {
13955
- get: ExpressionPropertyInterface(prop.pt)
13956
- },
13957
- 'outerRadius': {
13958
- get: ExpressionPropertyInterface(prop.or)
13959
- },
13960
- 'outerRoundness': {
13961
- get: ExpressionPropertyInterface(prop.os)
13962
- },
13963
- 'innerRadius': {
13964
- get: ExpressionPropertyInterface(prop.ir)
13965
- },
13966
- 'innerRoundness': {
13967
- get: ExpressionPropertyInterface(prop.is)
13968
- },
13969
- '_name': {
13970
- value: shape.nm
13971
- }
13972
- });
13973
- interfaceFunction.mn = shape.mn;
13974
- return interfaceFunction;
13975
- }
13976
-
13977
- function rectInterfaceFactory(shape, view, propertyGroup) {
13978
- function _propertyGroup(val) {
13979
- if (val == 1) {
13980
- return interfaceFunction;
13981
- } else {
13982
- return propertyGroup(--val);
13983
- }
13984
- }
13985
- var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;
13986
- interfaceFunction.propertyIndex = shape.ix;
13987
- prop.p.setGroupProperty(_propertyGroup);
13988
- prop.s.setGroupProperty(_propertyGroup);
13989
- prop.r.setGroupProperty(_propertyGroup);
13990
-
13991
- function interfaceFunction(value) {
13992
- if (shape.p.ix === value) {
13993
- return interfaceFunction.position;
13994
- }
13995
- if (shape.r.ix === value) {
13996
- return interfaceFunction.roundness;
13997
- }
13998
- if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {
13999
- return interfaceFunction.size;
14000
- }
14001
-
14002
- }
14003
- Object.defineProperties(interfaceFunction, {
14004
- 'position': {
14005
- get: ExpressionPropertyInterface(prop.p)
14006
- },
14007
- 'roundness': {
14008
- get: ExpressionPropertyInterface(prop.r)
14009
- },
14010
- 'size': {
14011
- get: ExpressionPropertyInterface(prop.s)
14012
- },
14013
- '_name': {
14014
- value: shape.nm
14015
- }
14016
- });
14017
- interfaceFunction.mn = shape.mn;
14018
- return interfaceFunction;
14019
- }
14020
-
14021
- function roundedInterfaceFactory(shape, view, propertyGroup) {
14022
- function _propertyGroup(val) {
14023
- if (val == 1) {
14024
- return interfaceFunction;
14025
- } else {
14026
- return propertyGroup(--val);
14027
- }
14028
- }
14029
- var prop = view;
14030
- interfaceFunction.propertyIndex = shape.ix;
14031
- prop.rd.setGroupProperty(_propertyGroup);
14032
-
14033
- function interfaceFunction(value) {
14034
- if (shape.r.ix === value || 'Round Corners 1' === value) {
14035
- return interfaceFunction.radius;
14036
- }
14037
-
14038
- }
14039
- Object.defineProperties(interfaceFunction, {
14040
- 'radius': {
14041
- get: ExpressionPropertyInterface(prop.rd)
14042
- },
14043
- '_name': {
14044
- value: shape.nm
14045
- }
14046
- });
14047
- interfaceFunction.mn = shape.mn;
14048
- return interfaceFunction;
14049
- }
14050
-
14051
- function repeaterInterfaceFactory(shape, view, propertyGroup) {
14052
- function _propertyGroup(val) {
14053
- if (val == 1) {
14054
- return interfaceFunction;
14055
- } else {
14056
- return propertyGroup(--val);
14057
- }
14058
- }
14059
- var prop = view;
14060
- interfaceFunction.propertyIndex = shape.ix;
14061
- prop.c.setGroupProperty(_propertyGroup);
14062
- prop.o.setGroupProperty(_propertyGroup);
14063
-
14064
- function interfaceFunction(value) {
14065
- if (shape.c.ix === value || 'Copies' === value) {
14066
- return interfaceFunction.copies;
14067
- } else if (shape.o.ix === value || 'Offset' === value) {
14068
- return interfaceFunction.offset;
14069
- }
14070
-
14071
- }
14072
- Object.defineProperties(interfaceFunction, {
14073
- 'copies': {
14074
- get: ExpressionPropertyInterface(prop.c)
14075
- },
14076
- 'offset': {
14077
- get: ExpressionPropertyInterface(prop.o)
14078
- },
14079
- '_name': {
14080
- value: shape.nm
14081
- }
14082
- });
14083
- interfaceFunction.mn = shape.mn;
14084
- return interfaceFunction;
14085
- }
14086
-
14087
- function pathInterfaceFactory(shape, view, propertyGroup) {
14088
- var prop = view.sh;
14089
-
14090
- function _propertyGroup(val) {
14091
- if (val == 1) {
14092
- return interfaceFunction;
14093
- } else {
14094
- return propertyGroup(--val);
14095
- }
14096
- }
14097
- prop.setGroupProperty(_propertyGroup);
14098
-
14099
- function interfaceFunction(val) {
14100
- if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {
14101
- return interfaceFunction.path;
14102
- }
14103
- }
14104
- Object.defineProperties(interfaceFunction, {
14105
- 'path': {
14106
- get: function () {
14107
- if (prop.k) {
14108
- prop.getValue();
14109
- }
14110
- return prop;
14111
- }
14112
- },
14113
- 'shape': {
14114
- get: function () {
14115
- if (prop.k) {
14116
- prop.getValue();
14117
- }
14118
- return prop;
14119
- }
14120
- },
14121
- '_name': {
14122
- value: shape.nm
14123
- },
14124
- 'ix': {
14125
- value: shape.ix
14126
- },
14127
- 'propertyIndex': {
14128
- value: shape.ix
14129
- },
14130
- 'mn': {
14131
- value: shape.mn
14132
- }
14133
- });
14134
- return interfaceFunction;
14135
- }
14136
-
14137
- return function (shapes, view, propertyGroup) {
14138
- var interfaces;
14139
-
14140
- function _interfaceFunction(value) {
14141
- if (typeof value === 'number') {
14142
- return interfaces[value - 1];
14143
- } else {
14144
- var i = 0,
14145
- len = interfaces.length;
14146
- while (i < len) {
14147
- if (interfaces[i]._name === value) {
14148
- return interfaces[i];
14149
- }
14150
- i += 1;
14151
- }
14152
- }
14153
- }
14154
- _interfaceFunction.propertyGroup = propertyGroup;
14155
- interfaces = iterateElements(shapes, view, _interfaceFunction);
14156
- _interfaceFunction.numProperties = interfaces.length;
14157
- return _interfaceFunction;
14158
- };
14159
- }());
14160
-
14161
- var TextExpressionInterface = (function () {
14162
- return function (elem) {
14163
- var _prevValue, _sourceText;
14164
-
14165
- function _thisLayerFunction() { }
14166
- Object.defineProperty(_thisLayerFunction, "sourceText", {
14167
- get: function () {
14168
- elem.textProperty.getValue()
14169
- var stringValue = elem.textProperty.currentData.t;
14170
- if (stringValue !== _prevValue) {
14171
- elem.textProperty.currentData.t = _prevValue;
14172
- _sourceText = new String(stringValue);
14173
- //If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive
14174
- _sourceText.value = stringValue ? stringValue : new String(stringValue);
14175
- }
14176
- return _sourceText;
14177
- }
14178
- });
14179
- return _thisLayerFunction;
14180
- };
14181
- }());
14182
- var LayerExpressionInterface = (function () {
14183
- function toWorld(arr, time) {
14184
- var toWorldMat = new Matrix();
14185
- toWorldMat.reset();
14186
- var transformMat;
14187
- if (time) {
14188
- //Todo implement value at time on transform properties
14189
- //transformMat = this._elem.finalTransform.mProp.getValueAtTime(time);
14190
- transformMat = this._elem.finalTransform.mProp;
14191
- } else {
14192
- transformMat = this._elem.finalTransform.mProp;
14193
- }
14194
- transformMat.applyToMatrix(toWorldMat);
14195
- if (this._elem.hierarchy && this._elem.hierarchy.length) {
14196
- var i, len = this._elem.hierarchy.length;
14197
- for (i = 0; i < len; i += 1) {
14198
- this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);
14199
- }
14200
- return toWorldMat.applyToPointArray(arr[0], arr[1], arr[2] || 0);
14201
- }
14202
- return toWorldMat.applyToPointArray(arr[0], arr[1], arr[2] || 0);
14203
- }
14204
-
14205
- function fromWorld(arr, time) {
14206
- var toWorldMat = new Matrix();
14207
- toWorldMat.reset();
14208
- var transformMat;
14209
- if (time) {
14210
- //Todo implement value at time on transform properties
14211
- //transformMat = this._elem.finalTransform.mProp.getValueAtTime(time);
14212
- transformMat = this._elem.finalTransform.mProp;
14213
- } else {
14214
- transformMat = this._elem.finalTransform.mProp;
14215
- }
14216
- transformMat.applyToMatrix(toWorldMat);
14217
- if (this._elem.hierarchy && this._elem.hierarchy.length) {
14218
- var i, len = this._elem.hierarchy.length;
14219
- for (i = 0; i < len; i += 1) {
14220
-