@ptcwebops/ptcw-design 0.4.6 → 0.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/dist/cjs/{icon-asset_4.cjs.entry.js → icon-asset_8.cjs.entry.js} +299 -220
- package/dist/cjs/{interfaces-0ecd8027.js → interfaces-574e6df7.js} +9 -9
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/lottie-player.cjs.entry.js +354 -354
- package/dist/cjs/my-component.cjs.entry.js +13 -13
- package/dist/cjs/ptc-breadcrumb.cjs.entry.js +12 -12
- package/dist/cjs/ptc-button.cjs.entry.js +65 -65
- package/dist/cjs/ptc-card-bottom.cjs.entry.js +31 -31
- package/dist/cjs/ptc-card-content.cjs.entry.js +31 -31
- package/dist/cjs/ptc-card-plm.cjs.entry.js +16 -16
- package/dist/cjs/ptc-card.cjs.entry.js +68 -68
- package/dist/cjs/ptc-countdown.cjs.entry.js +8 -8
- package/dist/cjs/ptc-date.cjs.entry.js +48 -48
- package/dist/cjs/ptc-footer.cjs.entry.js +8 -8
- package/dist/cjs/ptc-form.cjs.entry.js +104 -104
- package/dist/cjs/ptc-hero.cjs.entry.js +18 -18
- package/dist/cjs/ptc-img_2.cjs.entry.js +169 -169
- package/dist/cjs/ptc-input.cjs.entry.js +20 -20
- package/dist/cjs/ptc-link.cjs.entry.js +42 -42
- package/dist/cjs/ptc-list.cjs.entry.js +20 -20
- package/dist/cjs/ptc-lottie.cjs.entry.js +12 -12
- package/dist/cjs/ptc-modal.cjs.entry.js +103 -103
- package/dist/cjs/ptc-nav-item.cjs.entry.js +83 -83
- package/dist/cjs/ptc-nav.cjs.entry.js +8 -8
- package/dist/cjs/ptc-para.cjs.entry.js +39 -39
- package/dist/cjs/ptc-picture.cjs.entry.js +158 -158
- package/dist/cjs/ptc-responsive-wrapper.cjs.entry.js +54 -54
- package/dist/cjs/ptc-select.cjs.entry.js +24 -24
- package/dist/cjs/ptc-social-share.cjs.entry.js +64 -64
- package/dist/cjs/ptc-spacer.cjs.entry.js +35 -35
- package/dist/cjs/ptc-span.cjs.entry.js +23 -23
- package/dist/cjs/ptc-title.cjs.entry.js +44 -44
- package/dist/cjs/ptcw-design.cjs.js +1 -1
- package/dist/collection/collection-manifest.json +3 -0
- package/dist/collection/components/icon-asset/icon-asset.css +4 -4
- package/dist/collection/components/icon-asset/icon-asset.js +199 -178
- package/dist/collection/components/icon-asset/media/brands.svg +1381 -1381
- package/dist/collection/components/icon-asset/media/designer.svg +316 -316
- package/dist/collection/components/icon-asset/media/regular.svg +463 -463
- package/dist/collection/components/icon-asset/media/solid.svg +3013 -3013
- package/dist/collection/components/icon-asset/media/svg-with-js.min.css +4 -4
- package/dist/collection/components/list-item/list-item.css +31 -0
- package/dist/collection/components/list-item/list-item.js +103 -84
- package/dist/collection/components/my-component/my-component.css +3 -3
- package/dist/collection/components/my-component/my-component.js +73 -73
- package/dist/collection/components/ptc-announcement/ptc-announcement.js +170 -170
- package/dist/collection/components/ptc-breadcrumb/ptc-breadcrumb.js +21 -21
- package/dist/collection/components/ptc-button/ptc-button.js +293 -293
- package/dist/collection/components/ptc-card/ptc-card.js +282 -282
- package/dist/collection/components/ptc-card-bottom/ptc-card-bottom.js +105 -105
- package/dist/collection/components/ptc-card-content/ptc-card-content.js +105 -105
- package/dist/collection/components/ptc-card-plm/ptc-card-plm.js +97 -97
- package/dist/collection/components/ptc-countdown/ptc-countdown.js +15 -15
- package/dist/collection/components/ptc-date/ptc-date.js +201 -201
- package/dist/collection/components/ptc-footer/ptc-footer.js +25 -25
- package/dist/collection/components/ptc-form/ptc-form.js +118 -118
- package/dist/collection/components/ptc-form/validation/FormValidation.js +4234 -4234
- package/dist/collection/components/ptc-hero/ptc-hero.js +67 -67
- package/dist/collection/components/ptc-img/ptc-img.js +314 -314
- package/dist/collection/components/ptc-input/ptc-input.js +133 -133
- package/dist/collection/components/ptc-link/ptc-link.js +198 -198
- package/dist/collection/components/ptc-list/ptc-list.js +63 -63
- package/dist/collection/components/ptc-lottie/ptc-lottie.css +5 -5
- package/dist/collection/components/ptc-lottie/ptc-lottie.js +58 -58
- package/dist/collection/components/ptc-minimized-footer/ptc-minimized-footer.css +44 -0
- package/dist/collection/components/ptc-minimized-footer/ptc-minimized-footer.js +17 -0
- package/dist/collection/components/ptc-minimized-header/ptc-minimized-header.css +77 -0
- package/dist/collection/components/ptc-minimized-header/ptc-minimized-header.js +80 -0
- package/dist/collection/components/ptc-mobile-select/ptc-mobile-select.css +1 -0
- package/dist/collection/components/ptc-mobile-select/ptc-mobile-select.js +221 -220
- package/dist/collection/components/ptc-modal/ptc-modal.js +252 -252
- package/dist/collection/components/ptc-nav/ptc-nav.js +21 -21
- package/dist/collection/components/ptc-nav-item/ptc-nav-item.js +252 -252
- package/dist/collection/components/ptc-overlay/ptc-overlay.js +99 -99
- package/dist/collection/components/ptc-para/ptc-para.js +157 -157
- package/dist/collection/components/ptc-picture/ptc-picture.js +428 -428
- package/dist/collection/components/ptc-previous-url/ptc-previous-url.css +29 -0
- package/dist/collection/components/ptc-previous-url/ptc-previous-url.js +54 -0
- package/dist/collection/components/ptc-responsive-wrapper/ptc-responsive-wrapper.css +3 -3
- package/dist/collection/components/ptc-responsive-wrapper/ptc-responsive-wrapper.js +62 -62
- package/dist/collection/components/ptc-select/ptc-select.js +105 -105
- package/dist/collection/components/ptc-social-share/ptc-social-share.js +206 -206
- package/dist/collection/components/ptc-spacer/ptc-spacer.css +322 -322
- package/dist/collection/components/ptc-spacer/ptc-spacer.js +99 -99
- package/dist/collection/components/ptc-span/ptc-span.js +89 -89
- package/dist/collection/components/ptc-svg-btn/ptc-svg-btn.css +22 -0
- package/dist/collection/components/ptc-svg-btn/ptc-svg-btn.js +71 -69
- package/dist/collection/components/ptc-title/ptc-title.js +231 -231
- package/dist/collection/index.js +1 -1
- package/dist/collection/media/svg-imgs/Back-arrow.svg +11 -0
- package/dist/collection/media/svg-imgs/close.svg +10 -10
- package/dist/collection/media/svg-imgs/slider-arrow-left.svg +18 -18
- package/dist/collection/media/svg-imgs/slider-arrow-right.svg +18 -18
- package/dist/collection/utils/interfaces.js +11 -11
- package/dist/collection/utils/utils.js +3 -3
- package/dist/custom-elements/index.d.ts +18 -0
- package/dist/custom-elements/index.js +2058 -1993
- package/dist/esm/{icon-asset_4.entry.js → icon-asset_8.entry.js} +296 -221
- package/dist/esm/{interfaces-c1c73092.js → interfaces-7c0243be.js} +9 -9
- package/dist/esm/loader.js +1 -1
- package/dist/esm/lottie-player.entry.js +354 -354
- package/dist/esm/my-component.entry.js +13 -13
- package/dist/esm/polyfills/core-js.js +0 -0
- package/dist/esm/polyfills/dom.js +0 -0
- package/dist/esm/polyfills/es5-html-element.js +0 -0
- package/dist/esm/polyfills/index.js +0 -0
- package/dist/esm/polyfills/system.js +0 -0
- package/dist/esm/ptc-breadcrumb.entry.js +12 -12
- package/dist/esm/ptc-button.entry.js +65 -65
- package/dist/esm/ptc-card-bottom.entry.js +31 -31
- package/dist/esm/ptc-card-content.entry.js +31 -31
- package/dist/esm/ptc-card-plm.entry.js +16 -16
- package/dist/esm/ptc-card.entry.js +68 -68
- package/dist/esm/ptc-countdown.entry.js +8 -8
- package/dist/esm/ptc-date.entry.js +48 -48
- package/dist/esm/ptc-footer.entry.js +8 -8
- package/dist/esm/ptc-form.entry.js +104 -104
- package/dist/esm/ptc-hero.entry.js +18 -18
- package/dist/esm/ptc-img_2.entry.js +169 -169
- package/dist/esm/ptc-input.entry.js +20 -20
- package/dist/esm/ptc-link.entry.js +42 -42
- package/dist/esm/ptc-list.entry.js +20 -20
- package/dist/esm/ptc-lottie.entry.js +12 -12
- package/dist/esm/ptc-modal.entry.js +103 -103
- package/dist/esm/ptc-nav-item.entry.js +83 -83
- package/dist/esm/ptc-nav.entry.js +8 -8
- package/dist/esm/ptc-para.entry.js +39 -39
- package/dist/esm/ptc-picture.entry.js +158 -158
- package/dist/esm/ptc-responsive-wrapper.entry.js +54 -54
- package/dist/esm/ptc-select.entry.js +24 -24
- package/dist/esm/ptc-social-share.entry.js +64 -64
- package/dist/esm/ptc-spacer.entry.js +35 -35
- package/dist/esm/ptc-span.entry.js +23 -23
- package/dist/esm/ptc-title.entry.js +44 -44
- package/dist/esm/ptcw-design.js +1 -1
- package/dist/ptcw-design/media/brands.svg +1381 -1381
- package/dist/ptcw-design/media/designer.svg +316 -316
- package/dist/ptcw-design/media/regular.svg +463 -463
- package/dist/ptcw-design/media/solid.svg +3013 -3013
- package/dist/ptcw-design/media/svg-with-js.min.css +4 -4
- package/dist/ptcw-design/{p-1e39bc14.entry.js → p-894e8c85.entry.js} +1 -1
- package/dist/ptcw-design/p-c2f4cf52.entry.js +7 -0
- package/dist/ptcw-design/{p-27538cac.entry.js → p-f2f1c015.entry.js} +1 -1
- package/dist/ptcw-design/ptcw-design.css +1 -1
- package/dist/ptcw-design/ptcw-design.esm.js +1 -1
- package/dist/ptcw-design/validation/FormValidation.js +4234 -4234
- package/dist/types/components/icon-asset/icon-asset.d.ts +36 -32
- package/dist/types/components/list-item/list-item.d.ts +8 -7
- package/dist/types/components/my-component/my-component.d.ts +16 -16
- package/dist/types/components/ptc-announcement/ptc-announcement.d.ts +35 -35
- package/dist/types/components/ptc-breadcrumb/ptc-breadcrumb.d.ts +4 -4
- package/dist/types/components/ptc-button/ptc-button.d.ts +56 -56
- package/dist/types/components/ptc-card/ptc-card.d.ts +50 -50
- package/dist/types/components/ptc-card-bottom/ptc-card-bottom.d.ts +15 -15
- package/dist/types/components/ptc-card-content/ptc-card-content.d.ts +15 -15
- package/dist/types/components/ptc-card-plm/ptc-card-plm.d.ts +8 -8
- package/dist/types/components/ptc-countdown/ptc-countdown.d.ts +3 -3
- package/dist/types/components/ptc-date/ptc-date.d.ts +41 -41
- package/dist/types/components/ptc-footer/ptc-footer.d.ts +3 -3
- package/dist/types/components/ptc-form/ptc-form.d.ts +11 -11
- package/dist/types/components/ptc-hero/ptc-hero.d.ts +12 -12
- package/dist/types/components/ptc-img/ptc-img.d.ts +51 -51
- package/dist/types/components/ptc-input/ptc-input.d.ts +19 -19
- package/dist/types/components/ptc-link/ptc-link.d.ts +36 -36
- package/dist/types/components/ptc-list/ptc-list.d.ts +6 -6
- package/dist/types/components/ptc-lottie/ptc-lottie.d.ts +12 -12
- package/dist/types/components/ptc-minimized-footer/ptc-minimized-footer.d.ts +3 -0
- package/dist/types/components/ptc-minimized-header/ptc-minimized-header.d.ts +6 -0
- package/dist/types/components/ptc-mobile-select/ptc-mobile-select.d.ts +40 -40
- package/dist/types/components/ptc-modal/ptc-modal.d.ts +46 -46
- package/dist/types/components/ptc-nav/ptc-nav.d.ts +3 -3
- package/dist/types/components/ptc-nav-item/ptc-nav-item.d.ts +53 -53
- package/dist/types/components/ptc-overlay/ptc-overlay.d.ts +20 -20
- package/dist/types/components/ptc-para/ptc-para.d.ts +28 -28
- package/dist/types/components/ptc-picture/ptc-picture.d.ts +82 -82
- package/dist/types/components/ptc-previous-url/ptc-previous-url.d.ts +5 -0
- package/dist/types/components/ptc-responsive-wrapper/ptc-responsive-wrapper.d.ts +8 -8
- package/dist/types/components/ptc-select/ptc-select.d.ts +9 -9
- package/dist/types/components/ptc-social-share/ptc-social-share.d.ts +25 -25
- package/dist/types/components/ptc-spacer/ptc-spacer.d.ts +16 -16
- package/dist/types/components/ptc-span/ptc-span.d.ts +16 -16
- package/dist/types/components/ptc-svg-btn/ptc-svg-btn.d.ts +12 -12
- package/dist/types/components/ptc-title/ptc-title.d.ts +41 -41
- package/dist/types/components.d.ts +85 -26
- package/dist/types/global.d.ts +1072 -1072
- package/dist/types/index.d.ts +1 -1
- package/dist/types/utils/interfaces.d.ts +14 -14
- package/dist/types/utils/utils.d.ts +1 -1
- package/package.json +58 -58
- package/readme.md +11 -11
- package/dist/cjs/list-item.cjs.entry.js +0 -29
- package/dist/esm/list-item.entry.js +0 -25
- package/dist/ptcw-design/p-439c9e49.entry.js +0 -7
- package/dist/ptcw-design/p-80c03571.entry.js +0 -1
- /package/dist/ptcw-design/{p-50e52c88.js → p-ee1183b2.js} +0 -0
|
@@ -13100,360 +13100,360 @@ var PlayMode;
|
|
|
13100
13100
|
|
|
13101
13101
|
const lottiePlayerCss = ":host{--lottie-player-toolbar-height:35px;--lottie-player-toolbar-background-color:transparent;--lottie-player-toolbar-icon-color:#999;--lottie-player-toolbar-icon-hover-color:#222;--lottie-player-toolbar-icon-active-color:#555;--lottie-player-seeker-track-color:#CCC;--lottie-player-seeker-thumb-color:rgba(0, 107, 120, 0.8);display:block;width:100%;height:100%}.main{box-sizing:border-box;display:inline-grid;grid-auto-columns:auto;grid-template-rows:auto;position:relative;height:inherit;width:inherit}.main.controls{grid-template-rows:1fr var(--lottie-player-toolbar-height)}.animation{overflow:hidden;height:calc(1fr - var(--lottie-player-toolbar-height))}.toolbar{display:grid;grid-template-columns:32px 32px 1fr 32px 32px;align-items:center;justify-items:center;background-color:var(--lottie-player-toolbar-background-color)}.toolbar button{cursor:pointer;fill:var(--lottie-player-toolbar-icon-color);display:flex;background:none;border:0;padding:0;outline:none;height:100%}.toolbar button:hover{fill:var(--lottie-player-toolbar-icon-hover-color)}.toolbar button.active{fill:var(--lottie-player-toolbar-icon-active-color)}.toolbar button.disabled svg{display:none}.toolbar a{filter:grayscale(100%);display:flex;transition:filter .5s, opacity 0.5s;opacity:0.4;height:100%;align-items:center}.toolbar a:hover{filter:none;display:flex;opacity:1}.seeker{-webkit-appearance:none;width:95%;outline:none}.seeker::-webkit-slider-runnable-track{width:100%;height:5px;cursor:pointer;background:var(--lottie-player-seeker-track-color);border-radius:3px}.seeker::-webkit-slider-thumb{height:15px;width:15px;border-radius:50%;background:var(--lottie-player-seeker-thumb-color);cursor:pointer;-webkit-appearance:none;margin-top:-5px}.seeker:focus::-webkit-slider-runnable-track{background:#999}.seeker::-moz-range-track{width:100%;height:5px;cursor:pointer;background:var(--lottie-player-seeker-track-color);border-radius:3px}.seeker::-moz-range-thumb{height:15px;width:15px;border-radius:50%;background:var(--lottie-player-seeker-thumb-color);cursor:pointer}.seeker::-ms-track{width:100%;height:5px;cursor:pointer;background:transparent;border-color:transparent;color:transparent}.seeker::-ms-fill-lower{background:var(--lottie-player-seeker-track-color);border-radius:3px}.seeker::-ms-fill-upper{background:var(--lottie-player-seeker-track-color);border-radius:3px}.seeker::-ms-thumb{border:0;height:15px;width:15px;border-radius:50%;background:var(--lottie-player-seeker-thumb-color);cursor:pointer}.seeker:focus::-ms-fill-lower{background:var(--lottie-player-seeker-track-color)}.seeker:focus::-ms-fill-upper{background:var(--lottie-player-seeker-track-color)}.error{display:flex;justify-content:center;height:100%;align-items:center}";
|
|
13102
13102
|
|
|
13103
|
-
let LottiePlayer = class {
|
|
13104
|
-
constructor(hostRef) {
|
|
13105
|
-
registerInstance(this, hostRef);
|
|
13106
|
-
this.error = createEvent(this, "error", 7);
|
|
13107
|
-
this.frame = createEvent(this, "frame", 7);
|
|
13108
|
-
this.complete = createEvent(this, "complete", 7);
|
|
13109
|
-
this.looped = createEvent(this, "looped", 7);
|
|
13110
|
-
this.ready = createEvent(this, "ready", 7);
|
|
13111
|
-
this.loaded = createEvent(this, "loaded", 7);
|
|
13112
|
-
this.playing = createEvent(this, "playing", 7);
|
|
13113
|
-
this.paused = createEvent(this, "paused", 7);
|
|
13114
|
-
this.stopped = createEvent(this, "stopped", 7);
|
|
13115
|
-
this.freezed = createEvent(this, "freezed", 7);
|
|
13116
|
-
/**
|
|
13117
|
-
* Play mode.
|
|
13118
|
-
*/
|
|
13119
|
-
this.mode = PlayMode.Normal;
|
|
13120
|
-
/**
|
|
13121
|
-
* Autoplay animation on load
|
|
13122
|
-
*/
|
|
13123
|
-
this.autoplay = false;
|
|
13124
|
-
/**
|
|
13125
|
-
* Background color.
|
|
13126
|
-
*/
|
|
13127
|
-
this.background = 'transparent';
|
|
13128
|
-
/**
|
|
13129
|
-
* Show controls.
|
|
13130
|
-
*/
|
|
13131
|
-
this.controls = false;
|
|
13132
|
-
/**
|
|
13133
|
-
* Direction of animation
|
|
13134
|
-
*/
|
|
13135
|
-
this.direction = 1;
|
|
13136
|
-
/**
|
|
13137
|
-
* Whether to play on mouse hover
|
|
13138
|
-
*/
|
|
13139
|
-
this.hover = false;
|
|
13140
|
-
/**
|
|
13141
|
-
* Whether to loop animation
|
|
13142
|
-
*/
|
|
13143
|
-
this.loop = false;
|
|
13144
|
-
/**
|
|
13145
|
-
* Renderer to use.
|
|
13146
|
-
*/
|
|
13147
|
-
this.renderer = 'svg';
|
|
13148
|
-
/**
|
|
13149
|
-
* Animation speed.
|
|
13150
|
-
*/
|
|
13151
|
-
this.speed = 1;
|
|
13152
|
-
/**
|
|
13153
|
-
* Player state.
|
|
13154
|
-
*/
|
|
13155
|
-
this.currentState = PlayerState.Loading;
|
|
13156
|
-
this.intermission = 1;
|
|
13157
|
-
this._counter = 0;
|
|
13158
|
-
}
|
|
13159
|
-
componentDidLoad() {
|
|
13160
|
-
// Add intersection observer for detecting component being out-of-view.
|
|
13161
|
-
if ('IntersectionObserver' in window) {
|
|
13162
|
-
this._io = new IntersectionObserver((entries) => {
|
|
13163
|
-
if (entries[0].isIntersecting) {
|
|
13164
|
-
if (this.currentState === PlayerState.Frozen) {
|
|
13165
|
-
this.play();
|
|
13166
|
-
}
|
|
13167
|
-
}
|
|
13168
|
-
else if (this.currentState === PlayerState.Playing) {
|
|
13169
|
-
this.freeze();
|
|
13170
|
-
}
|
|
13171
|
-
});
|
|
13172
|
-
this._io.observe(this.container);
|
|
13173
|
-
}
|
|
13174
|
-
// Add listener for Visibility API's change event.
|
|
13175
|
-
if (typeof document.hidden !== 'undefined') {
|
|
13176
|
-
document.addEventListener('visibilitychange', () => this.onVisibilityChange());
|
|
13177
|
-
}
|
|
13178
|
-
// Setup lottie player
|
|
13179
|
-
if (this.src) {
|
|
13180
|
-
this.load(this.src);
|
|
13181
|
-
}
|
|
13182
|
-
}
|
|
13183
|
-
load(src) {
|
|
13184
|
-
const options = {
|
|
13185
|
-
container: this.container,
|
|
13186
|
-
loop: false,
|
|
13187
|
-
autoplay: false,
|
|
13188
|
-
renderer: this.renderer,
|
|
13189
|
-
rendererSettings: {
|
|
13190
|
-
scaleMode: 'noScale',
|
|
13191
|
-
clearCanvas: false,
|
|
13192
|
-
progressiveLoad: true,
|
|
13193
|
-
hideOnTransparent: true,
|
|
13194
|
-
},
|
|
13195
|
-
};
|
|
13196
|
-
try {
|
|
13197
|
-
const srcParsed = parseSrc(src);
|
|
13198
|
-
const srcAttrib = typeof srcParsed === 'string' ? 'path' : 'animationData';
|
|
13199
|
-
// Clear previous animation, if any
|
|
13200
|
-
if (this._lottie) {
|
|
13201
|
-
this._lottie.destroy();
|
|
13202
|
-
}
|
|
13203
|
-
// Initialize lottie player and load animation
|
|
13204
|
-
this._lottie = lottie_svg.loadAnimation(Object.assign(Object.assign({}, options), { [srcAttrib]: srcParsed }));
|
|
13205
|
-
}
|
|
13206
|
-
catch (err) {
|
|
13207
|
-
this.currentState = PlayerState.Error;
|
|
13208
|
-
this.error.emit();
|
|
13209
|
-
return;
|
|
13210
|
-
}
|
|
13211
|
-
if (this._lottie) {
|
|
13212
|
-
// Calculate and save the current progress of the animation
|
|
13213
|
-
this._lottie.addEventListener('enterFrame', () => {
|
|
13214
|
-
this.seeker = (this._lottie.currentFrame / this._lottie.totalFrames) * 100;
|
|
13215
|
-
this.frame.emit({
|
|
13216
|
-
frame: this._lottie.currentFrame,
|
|
13217
|
-
seeker: this.seeker
|
|
13218
|
-
});
|
|
13219
|
-
});
|
|
13220
|
-
// Handle animation play complete
|
|
13221
|
-
this._lottie.addEventListener('complete', () => {
|
|
13222
|
-
if (this.currentState !== PlayerState.Playing) {
|
|
13223
|
-
this.complete.emit();
|
|
13224
|
-
return;
|
|
13225
|
-
}
|
|
13226
|
-
if (!this.loop || (this.count && this._counter >= this.count)) {
|
|
13227
|
-
this.complete.emit();
|
|
13228
|
-
return;
|
|
13229
|
-
}
|
|
13230
|
-
if (this.mode === PlayMode.Bounce) {
|
|
13231
|
-
if (this.count) {
|
|
13232
|
-
this._counter += 0.5;
|
|
13233
|
-
}
|
|
13234
|
-
setTimeout(() => {
|
|
13235
|
-
this.looped.emit();
|
|
13236
|
-
if (this.currentState === PlayerState.Playing) {
|
|
13237
|
-
this._lottie.setDirection(this._lottie.playDirection * -1);
|
|
13238
|
-
this._lottie.play();
|
|
13239
|
-
}
|
|
13240
|
-
}, this.intermission);
|
|
13241
|
-
}
|
|
13242
|
-
else {
|
|
13243
|
-
if (this.count) {
|
|
13244
|
-
this._counter += 1;
|
|
13245
|
-
}
|
|
13246
|
-
window.setTimeout(() => {
|
|
13247
|
-
this.looped.emit();
|
|
13248
|
-
if (this.currentState === PlayerState.Playing) {
|
|
13249
|
-
this._lottie.stop();
|
|
13250
|
-
this._lottie.play();
|
|
13251
|
-
}
|
|
13252
|
-
}, this.intermission);
|
|
13253
|
-
}
|
|
13254
|
-
});
|
|
13255
|
-
// Handle lottie-web ready event
|
|
13256
|
-
this._lottie.addEventListener('DOMLoaded', () => {
|
|
13257
|
-
this.ready.emit();
|
|
13258
|
-
});
|
|
13259
|
-
// Handle animation data load complete
|
|
13260
|
-
this._lottie.addEventListener('data_ready', () => {
|
|
13261
|
-
this.loaded.emit();
|
|
13262
|
-
});
|
|
13263
|
-
// Set error state when animation load fail event triggers
|
|
13264
|
-
this._lottie.addEventListener('data_failed', () => {
|
|
13265
|
-
this.currentState = PlayerState.Error;
|
|
13266
|
-
this.error.emit();
|
|
13267
|
-
});
|
|
13268
|
-
// Set handlers to auto play animation on hover if enabled
|
|
13269
|
-
this.container.addEventListener('mouseenter', () => {
|
|
13270
|
-
if (this.hover && this.currentState !== PlayerState.Playing) {
|
|
13271
|
-
this.play();
|
|
13272
|
-
}
|
|
13273
|
-
});
|
|
13274
|
-
this.container.addEventListener('mouseleave', () => {
|
|
13275
|
-
if (this.hover && this.currentState === PlayerState.Playing) {
|
|
13276
|
-
this.stop();
|
|
13277
|
-
}
|
|
13278
|
-
});
|
|
13279
|
-
// Set initial playback speed and direction
|
|
13280
|
-
this.setSpeed(this.speed);
|
|
13281
|
-
this.setDirection(this.direction);
|
|
13282
|
-
// Start playing if autoplay is enabled
|
|
13283
|
-
if (this.autoplay) {
|
|
13284
|
-
this.play();
|
|
13285
|
-
}
|
|
13286
|
-
}
|
|
13287
|
-
}
|
|
13288
|
-
/**
|
|
13289
|
-
* Start playing animation.
|
|
13290
|
-
*/
|
|
13291
|
-
async play() {
|
|
13292
|
-
if (!this._lottie) {
|
|
13293
|
-
return;
|
|
13294
|
-
}
|
|
13295
|
-
this._lottie.play();
|
|
13296
|
-
this.currentState = PlayerState.Playing;
|
|
13297
|
-
this.playing.emit();
|
|
13298
|
-
}
|
|
13299
|
-
/**
|
|
13300
|
-
* Stop playing animation.
|
|
13301
|
-
*/
|
|
13302
|
-
async pause() {
|
|
13303
|
-
if (!this._lottie) {
|
|
13304
|
-
return;
|
|
13305
|
-
}
|
|
13306
|
-
this._lottie.pause();
|
|
13307
|
-
this.currentState = PlayerState.Paused;
|
|
13308
|
-
this.paused.emit();
|
|
13309
|
-
}
|
|
13310
|
-
/**
|
|
13311
|
-
* Stops animation play.
|
|
13312
|
-
*/
|
|
13313
|
-
async stop() {
|
|
13314
|
-
if (!this._lottie) {
|
|
13315
|
-
return;
|
|
13316
|
-
}
|
|
13317
|
-
this._counter = 0;
|
|
13318
|
-
this._lottie.stop();
|
|
13319
|
-
this.currentState = PlayerState.Stopped;
|
|
13320
|
-
this.stopped.emit();
|
|
13321
|
-
}
|
|
13322
|
-
/**
|
|
13323
|
-
* Seek to a given frame.
|
|
13324
|
-
*/
|
|
13325
|
-
async seek(value) {
|
|
13326
|
-
if (!this._lottie) {
|
|
13327
|
-
return;
|
|
13328
|
-
}
|
|
13329
|
-
// Extract frame number from either number or percentage value
|
|
13330
|
-
const matches = value.toString().match(/^([0-9]+)(%?)$/);
|
|
13331
|
-
if (!matches) {
|
|
13332
|
-
return;
|
|
13333
|
-
}
|
|
13334
|
-
// Calculate and set the frame number
|
|
13335
|
-
const frame = matches[2] === '%'
|
|
13336
|
-
? this._lottie.totalFrames * Number(matches[1]) / 100
|
|
13337
|
-
: matches[1];
|
|
13338
|
-
// Set seeker to new frame number
|
|
13339
|
-
this.seeker = frame;
|
|
13340
|
-
// Send lottie player to the new frame
|
|
13341
|
-
if (this.currentState === PlayerState.Playing) {
|
|
13342
|
-
this._lottie.goToAndPlay(frame, true);
|
|
13343
|
-
}
|
|
13344
|
-
else {
|
|
13345
|
-
this._lottie.goToAndStop(frame, true);
|
|
13346
|
-
this._lottie.pause();
|
|
13347
|
-
}
|
|
13348
|
-
}
|
|
13349
|
-
/**
|
|
13350
|
-
* Freeze animation play.
|
|
13351
|
-
* This internal state pauses animation and is used to differentiate between
|
|
13352
|
-
* user requested pauses and component instigated pauses.
|
|
13353
|
-
*/
|
|
13354
|
-
freeze() {
|
|
13355
|
-
if (!this._lottie) {
|
|
13356
|
-
return;
|
|
13357
|
-
}
|
|
13358
|
-
this.currentState = PlayerState.Frozen;
|
|
13359
|
-
this.freezed.emit();
|
|
13360
|
-
}
|
|
13361
|
-
async getLottie() {
|
|
13362
|
-
return this._lottie;
|
|
13363
|
-
}
|
|
13364
|
-
/**
|
|
13365
|
-
* Sets animation play speed
|
|
13366
|
-
* @param value Playback speed.
|
|
13367
|
-
*/
|
|
13368
|
-
async setSpeed(value = 1) {
|
|
13369
|
-
if (!this._lottie) {
|
|
13370
|
-
return;
|
|
13371
|
-
}
|
|
13372
|
-
this._lottie.setSpeed(value);
|
|
13373
|
-
}
|
|
13374
|
-
/**
|
|
13375
|
-
* Animation play direction.
|
|
13376
|
-
* @param value Direction values.
|
|
13377
|
-
*/
|
|
13378
|
-
async setDirection(value) {
|
|
13379
|
-
if (!this._lottie) {
|
|
13380
|
-
return;
|
|
13381
|
-
}
|
|
13382
|
-
this._lottie.setDirection(value);
|
|
13383
|
-
}
|
|
13384
|
-
/**
|
|
13385
|
-
* Sets the looping of the animation.
|
|
13386
|
-
*
|
|
13387
|
-
* @param value Whether to enable looping. Boolean true enables looping.
|
|
13388
|
-
*/
|
|
13389
|
-
async setLooping(value) {
|
|
13390
|
-
if (this._lottie) {
|
|
13391
|
-
this.loop = value;
|
|
13392
|
-
this._lottie.loop = value;
|
|
13393
|
-
}
|
|
13394
|
-
}
|
|
13395
|
-
/**
|
|
13396
|
-
* Toggle playing state.
|
|
13397
|
-
*/
|
|
13398
|
-
async togglePlay() {
|
|
13399
|
-
return this.currentState === PlayerState.Playing
|
|
13400
|
-
? this.pause()
|
|
13401
|
-
: this.play();
|
|
13402
|
-
}
|
|
13403
|
-
/**
|
|
13404
|
-
* Toggles animation looping.
|
|
13405
|
-
*/
|
|
13406
|
-
async toggleLooping() {
|
|
13407
|
-
this.setLooping(!this.loop);
|
|
13408
|
-
}
|
|
13409
|
-
renderButtonIcon(isPlaying) {
|
|
13410
|
-
if (isPlaying) {
|
|
13411
|
-
return (h("svg", { width: "24", height: "24" }, h("path", { d: "M14.016 5.016H18v13.969h-3.984V5.016zM6 18.984V5.015h3.984v13.969H6z" })));
|
|
13412
|
-
}
|
|
13413
|
-
return (h("svg", { width: "24", height: "24" }, h("path", { d: "M8.016 5.016L18.985 12 8.016 18.984V5.015z" })));
|
|
13414
|
-
}
|
|
13415
|
-
renderControls() {
|
|
13416
|
-
const isPlaying = this.currentState === PlayerState.Playing;
|
|
13417
|
-
const isPaused = this.currentState === PlayerState.Paused;
|
|
13418
|
-
const isStopped = this.currentState === PlayerState.Stopped;
|
|
13419
|
-
return (h("div", { class: 'toolbar' }, h("button", { class: {
|
|
13420
|
-
active: isPlaying || isPaused
|
|
13421
|
-
}, onClick: () => this.togglePlay() }, this.renderButtonIcon(isPlaying)), h("button", { class: {
|
|
13422
|
-
active: isStopped
|
|
13423
|
-
}, onClick: () => this.stop() }, h("svg", { width: "24", height: "24" }, h("path", { d: "M6 6h12v12H6V6z" }))), h("input", { class: "seeker", type: "range", min: "0", step: "1", max: "100", value: this.seeker, onInput: e => this.handleSeekChange(e), onMouseDown: () => { this._prevState = this.currentState; this.freeze(); }, onMouseUp: () => { this._prevState === PlayerState.Playing && this.play(); } }), h("button", { class: {
|
|
13424
|
-
'active': this.loop
|
|
13425
|
-
}, onClick: () => this.toggleLooping() }, h("svg", { width: "24", height: "24" }, h("path", { d: "M17.016 17.016v-4.031h1.969v6h-12v3l-3.984-3.984 3.984-3.984v3h10.031zM6.984 6.984v4.031H5.015v-6h12v-3l3.984 3.984-3.984 3.984v-3H6.984z" }))), h("a", { href: "https://www.lottiefiles.com/", target: "_blank" }, h("svg", { width: "24", height: "24", viewBox: "0 0 320 320", "fill-rule": "nonzero" }, h("rect", { fill: "#adadad", x: ".5", y: ".5", width: "100%", height: "100%", rx: "26.73" }), h("path", { d: "M251.304 65.44a16.55 16.55 0 0 1 13.927 18.789c-1.333 9.04-9.73 15.292-18.762 13.954-15.992-2.37-39.95 22.534-66.77 73.74-34.24 65.37-66.113 96.517-99.667 94.032-9.102-.674-15.93-8.612-15.258-17.723s8.592-15.96 17.695-15.286c16.57 1.227 40.908-24.737 67.97-76.4 34.46-65.79 66.764-96.157 100.866-91.105z", fill: "#fff" })))));
|
|
13426
|
-
}
|
|
13427
|
-
render() {
|
|
13428
|
-
return (h("div", { class: {
|
|
13429
|
-
main: true,
|
|
13430
|
-
controls: this.controls
|
|
13431
|
-
} }, h("div", { class: "animation", style: {
|
|
13432
|
-
background: this.background
|
|
13433
|
-
}, ref: ref => this.container = ref }, this.currentState === PlayerState.Error ? h("div", { class: "error" }, "\u26A0\uFE0F") : undefined), this.controls ? this.renderControls() : undefined));
|
|
13434
|
-
}
|
|
13435
|
-
/**
|
|
13436
|
-
* Handle visibility change events.
|
|
13437
|
-
*/
|
|
13438
|
-
onVisibilityChange() {
|
|
13439
|
-
if (document.hidden === true && this.currentState === PlayerState.Playing) {
|
|
13440
|
-
this.freeze();
|
|
13441
|
-
}
|
|
13442
|
-
else if (this.currentState === PlayerState.Frozen) {
|
|
13443
|
-
this.play();
|
|
13444
|
-
}
|
|
13445
|
-
}
|
|
13446
|
-
/**
|
|
13447
|
-
* Handles click and drag actions on the progress track.
|
|
13448
|
-
*/
|
|
13449
|
-
handleSeekChange(e) {
|
|
13450
|
-
if (!this._lottie || isNaN(e.target.value)) {
|
|
13451
|
-
return;
|
|
13452
|
-
}
|
|
13453
|
-
const frame = ((e.target.value / 100) * this._lottie.totalFrames);
|
|
13454
|
-
this.seek(frame);
|
|
13455
|
-
}
|
|
13456
|
-
};
|
|
13103
|
+
let LottiePlayer = class {
|
|
13104
|
+
constructor(hostRef) {
|
|
13105
|
+
registerInstance(this, hostRef);
|
|
13106
|
+
this.error = createEvent(this, "error", 7);
|
|
13107
|
+
this.frame = createEvent(this, "frame", 7);
|
|
13108
|
+
this.complete = createEvent(this, "complete", 7);
|
|
13109
|
+
this.looped = createEvent(this, "looped", 7);
|
|
13110
|
+
this.ready = createEvent(this, "ready", 7);
|
|
13111
|
+
this.loaded = createEvent(this, "loaded", 7);
|
|
13112
|
+
this.playing = createEvent(this, "playing", 7);
|
|
13113
|
+
this.paused = createEvent(this, "paused", 7);
|
|
13114
|
+
this.stopped = createEvent(this, "stopped", 7);
|
|
13115
|
+
this.freezed = createEvent(this, "freezed", 7);
|
|
13116
|
+
/**
|
|
13117
|
+
* Play mode.
|
|
13118
|
+
*/
|
|
13119
|
+
this.mode = PlayMode.Normal;
|
|
13120
|
+
/**
|
|
13121
|
+
* Autoplay animation on load
|
|
13122
|
+
*/
|
|
13123
|
+
this.autoplay = false;
|
|
13124
|
+
/**
|
|
13125
|
+
* Background color.
|
|
13126
|
+
*/
|
|
13127
|
+
this.background = 'transparent';
|
|
13128
|
+
/**
|
|
13129
|
+
* Show controls.
|
|
13130
|
+
*/
|
|
13131
|
+
this.controls = false;
|
|
13132
|
+
/**
|
|
13133
|
+
* Direction of animation
|
|
13134
|
+
*/
|
|
13135
|
+
this.direction = 1;
|
|
13136
|
+
/**
|
|
13137
|
+
* Whether to play on mouse hover
|
|
13138
|
+
*/
|
|
13139
|
+
this.hover = false;
|
|
13140
|
+
/**
|
|
13141
|
+
* Whether to loop animation
|
|
13142
|
+
*/
|
|
13143
|
+
this.loop = false;
|
|
13144
|
+
/**
|
|
13145
|
+
* Renderer to use.
|
|
13146
|
+
*/
|
|
13147
|
+
this.renderer = 'svg';
|
|
13148
|
+
/**
|
|
13149
|
+
* Animation speed.
|
|
13150
|
+
*/
|
|
13151
|
+
this.speed = 1;
|
|
13152
|
+
/**
|
|
13153
|
+
* Player state.
|
|
13154
|
+
*/
|
|
13155
|
+
this.currentState = PlayerState.Loading;
|
|
13156
|
+
this.intermission = 1;
|
|
13157
|
+
this._counter = 0;
|
|
13158
|
+
}
|
|
13159
|
+
componentDidLoad() {
|
|
13160
|
+
// Add intersection observer for detecting component being out-of-view.
|
|
13161
|
+
if ('IntersectionObserver' in window) {
|
|
13162
|
+
this._io = new IntersectionObserver((entries) => {
|
|
13163
|
+
if (entries[0].isIntersecting) {
|
|
13164
|
+
if (this.currentState === PlayerState.Frozen) {
|
|
13165
|
+
this.play();
|
|
13166
|
+
}
|
|
13167
|
+
}
|
|
13168
|
+
else if (this.currentState === PlayerState.Playing) {
|
|
13169
|
+
this.freeze();
|
|
13170
|
+
}
|
|
13171
|
+
});
|
|
13172
|
+
this._io.observe(this.container);
|
|
13173
|
+
}
|
|
13174
|
+
// Add listener for Visibility API's change event.
|
|
13175
|
+
if (typeof document.hidden !== 'undefined') {
|
|
13176
|
+
document.addEventListener('visibilitychange', () => this.onVisibilityChange());
|
|
13177
|
+
}
|
|
13178
|
+
// Setup lottie player
|
|
13179
|
+
if (this.src) {
|
|
13180
|
+
this.load(this.src);
|
|
13181
|
+
}
|
|
13182
|
+
}
|
|
13183
|
+
load(src) {
|
|
13184
|
+
const options = {
|
|
13185
|
+
container: this.container,
|
|
13186
|
+
loop: false,
|
|
13187
|
+
autoplay: false,
|
|
13188
|
+
renderer: this.renderer,
|
|
13189
|
+
rendererSettings: {
|
|
13190
|
+
scaleMode: 'noScale',
|
|
13191
|
+
clearCanvas: false,
|
|
13192
|
+
progressiveLoad: true,
|
|
13193
|
+
hideOnTransparent: true,
|
|
13194
|
+
},
|
|
13195
|
+
};
|
|
13196
|
+
try {
|
|
13197
|
+
const srcParsed = parseSrc(src);
|
|
13198
|
+
const srcAttrib = typeof srcParsed === 'string' ? 'path' : 'animationData';
|
|
13199
|
+
// Clear previous animation, if any
|
|
13200
|
+
if (this._lottie) {
|
|
13201
|
+
this._lottie.destroy();
|
|
13202
|
+
}
|
|
13203
|
+
// Initialize lottie player and load animation
|
|
13204
|
+
this._lottie = lottie_svg.loadAnimation(Object.assign(Object.assign({}, options), { [srcAttrib]: srcParsed }));
|
|
13205
|
+
}
|
|
13206
|
+
catch (err) {
|
|
13207
|
+
this.currentState = PlayerState.Error;
|
|
13208
|
+
this.error.emit();
|
|
13209
|
+
return;
|
|
13210
|
+
}
|
|
13211
|
+
if (this._lottie) {
|
|
13212
|
+
// Calculate and save the current progress of the animation
|
|
13213
|
+
this._lottie.addEventListener('enterFrame', () => {
|
|
13214
|
+
this.seeker = (this._lottie.currentFrame / this._lottie.totalFrames) * 100;
|
|
13215
|
+
this.frame.emit({
|
|
13216
|
+
frame: this._lottie.currentFrame,
|
|
13217
|
+
seeker: this.seeker
|
|
13218
|
+
});
|
|
13219
|
+
});
|
|
13220
|
+
// Handle animation play complete
|
|
13221
|
+
this._lottie.addEventListener('complete', () => {
|
|
13222
|
+
if (this.currentState !== PlayerState.Playing) {
|
|
13223
|
+
this.complete.emit();
|
|
13224
|
+
return;
|
|
13225
|
+
}
|
|
13226
|
+
if (!this.loop || (this.count && this._counter >= this.count)) {
|
|
13227
|
+
this.complete.emit();
|
|
13228
|
+
return;
|
|
13229
|
+
}
|
|
13230
|
+
if (this.mode === PlayMode.Bounce) {
|
|
13231
|
+
if (this.count) {
|
|
13232
|
+
this._counter += 0.5;
|
|
13233
|
+
}
|
|
13234
|
+
setTimeout(() => {
|
|
13235
|
+
this.looped.emit();
|
|
13236
|
+
if (this.currentState === PlayerState.Playing) {
|
|
13237
|
+
this._lottie.setDirection(this._lottie.playDirection * -1);
|
|
13238
|
+
this._lottie.play();
|
|
13239
|
+
}
|
|
13240
|
+
}, this.intermission);
|
|
13241
|
+
}
|
|
13242
|
+
else {
|
|
13243
|
+
if (this.count) {
|
|
13244
|
+
this._counter += 1;
|
|
13245
|
+
}
|
|
13246
|
+
window.setTimeout(() => {
|
|
13247
|
+
this.looped.emit();
|
|
13248
|
+
if (this.currentState === PlayerState.Playing) {
|
|
13249
|
+
this._lottie.stop();
|
|
13250
|
+
this._lottie.play();
|
|
13251
|
+
}
|
|
13252
|
+
}, this.intermission);
|
|
13253
|
+
}
|
|
13254
|
+
});
|
|
13255
|
+
// Handle lottie-web ready event
|
|
13256
|
+
this._lottie.addEventListener('DOMLoaded', () => {
|
|
13257
|
+
this.ready.emit();
|
|
13258
|
+
});
|
|
13259
|
+
// Handle animation data load complete
|
|
13260
|
+
this._lottie.addEventListener('data_ready', () => {
|
|
13261
|
+
this.loaded.emit();
|
|
13262
|
+
});
|
|
13263
|
+
// Set error state when animation load fail event triggers
|
|
13264
|
+
this._lottie.addEventListener('data_failed', () => {
|
|
13265
|
+
this.currentState = PlayerState.Error;
|
|
13266
|
+
this.error.emit();
|
|
13267
|
+
});
|
|
13268
|
+
// Set handlers to auto play animation on hover if enabled
|
|
13269
|
+
this.container.addEventListener('mouseenter', () => {
|
|
13270
|
+
if (this.hover && this.currentState !== PlayerState.Playing) {
|
|
13271
|
+
this.play();
|
|
13272
|
+
}
|
|
13273
|
+
});
|
|
13274
|
+
this.container.addEventListener('mouseleave', () => {
|
|
13275
|
+
if (this.hover && this.currentState === PlayerState.Playing) {
|
|
13276
|
+
this.stop();
|
|
13277
|
+
}
|
|
13278
|
+
});
|
|
13279
|
+
// Set initial playback speed and direction
|
|
13280
|
+
this.setSpeed(this.speed);
|
|
13281
|
+
this.setDirection(this.direction);
|
|
13282
|
+
// Start playing if autoplay is enabled
|
|
13283
|
+
if (this.autoplay) {
|
|
13284
|
+
this.play();
|
|
13285
|
+
}
|
|
13286
|
+
}
|
|
13287
|
+
}
|
|
13288
|
+
/**
|
|
13289
|
+
* Start playing animation.
|
|
13290
|
+
*/
|
|
13291
|
+
async play() {
|
|
13292
|
+
if (!this._lottie) {
|
|
13293
|
+
return;
|
|
13294
|
+
}
|
|
13295
|
+
this._lottie.play();
|
|
13296
|
+
this.currentState = PlayerState.Playing;
|
|
13297
|
+
this.playing.emit();
|
|
13298
|
+
}
|
|
13299
|
+
/**
|
|
13300
|
+
* Stop playing animation.
|
|
13301
|
+
*/
|
|
13302
|
+
async pause() {
|
|
13303
|
+
if (!this._lottie) {
|
|
13304
|
+
return;
|
|
13305
|
+
}
|
|
13306
|
+
this._lottie.pause();
|
|
13307
|
+
this.currentState = PlayerState.Paused;
|
|
13308
|
+
this.paused.emit();
|
|
13309
|
+
}
|
|
13310
|
+
/**
|
|
13311
|
+
* Stops animation play.
|
|
13312
|
+
*/
|
|
13313
|
+
async stop() {
|
|
13314
|
+
if (!this._lottie) {
|
|
13315
|
+
return;
|
|
13316
|
+
}
|
|
13317
|
+
this._counter = 0;
|
|
13318
|
+
this._lottie.stop();
|
|
13319
|
+
this.currentState = PlayerState.Stopped;
|
|
13320
|
+
this.stopped.emit();
|
|
13321
|
+
}
|
|
13322
|
+
/**
|
|
13323
|
+
* Seek to a given frame.
|
|
13324
|
+
*/
|
|
13325
|
+
async seek(value) {
|
|
13326
|
+
if (!this._lottie) {
|
|
13327
|
+
return;
|
|
13328
|
+
}
|
|
13329
|
+
// Extract frame number from either number or percentage value
|
|
13330
|
+
const matches = value.toString().match(/^([0-9]+)(%?)$/);
|
|
13331
|
+
if (!matches) {
|
|
13332
|
+
return;
|
|
13333
|
+
}
|
|
13334
|
+
// Calculate and set the frame number
|
|
13335
|
+
const frame = matches[2] === '%'
|
|
13336
|
+
? this._lottie.totalFrames * Number(matches[1]) / 100
|
|
13337
|
+
: matches[1];
|
|
13338
|
+
// Set seeker to new frame number
|
|
13339
|
+
this.seeker = frame;
|
|
13340
|
+
// Send lottie player to the new frame
|
|
13341
|
+
if (this.currentState === PlayerState.Playing) {
|
|
13342
|
+
this._lottie.goToAndPlay(frame, true);
|
|
13343
|
+
}
|
|
13344
|
+
else {
|
|
13345
|
+
this._lottie.goToAndStop(frame, true);
|
|
13346
|
+
this._lottie.pause();
|
|
13347
|
+
}
|
|
13348
|
+
}
|
|
13349
|
+
/**
|
|
13350
|
+
* Freeze animation play.
|
|
13351
|
+
* This internal state pauses animation and is used to differentiate between
|
|
13352
|
+
* user requested pauses and component instigated pauses.
|
|
13353
|
+
*/
|
|
13354
|
+
freeze() {
|
|
13355
|
+
if (!this._lottie) {
|
|
13356
|
+
return;
|
|
13357
|
+
}
|
|
13358
|
+
this.currentState = PlayerState.Frozen;
|
|
13359
|
+
this.freezed.emit();
|
|
13360
|
+
}
|
|
13361
|
+
async getLottie() {
|
|
13362
|
+
return this._lottie;
|
|
13363
|
+
}
|
|
13364
|
+
/**
|
|
13365
|
+
* Sets animation play speed
|
|
13366
|
+
* @param value Playback speed.
|
|
13367
|
+
*/
|
|
13368
|
+
async setSpeed(value = 1) {
|
|
13369
|
+
if (!this._lottie) {
|
|
13370
|
+
return;
|
|
13371
|
+
}
|
|
13372
|
+
this._lottie.setSpeed(value);
|
|
13373
|
+
}
|
|
13374
|
+
/**
|
|
13375
|
+
* Animation play direction.
|
|
13376
|
+
* @param value Direction values.
|
|
13377
|
+
*/
|
|
13378
|
+
async setDirection(value) {
|
|
13379
|
+
if (!this._lottie) {
|
|
13380
|
+
return;
|
|
13381
|
+
}
|
|
13382
|
+
this._lottie.setDirection(value);
|
|
13383
|
+
}
|
|
13384
|
+
/**
|
|
13385
|
+
* Sets the looping of the animation.
|
|
13386
|
+
*
|
|
13387
|
+
* @param value Whether to enable looping. Boolean true enables looping.
|
|
13388
|
+
*/
|
|
13389
|
+
async setLooping(value) {
|
|
13390
|
+
if (this._lottie) {
|
|
13391
|
+
this.loop = value;
|
|
13392
|
+
this._lottie.loop = value;
|
|
13393
|
+
}
|
|
13394
|
+
}
|
|
13395
|
+
/**
|
|
13396
|
+
* Toggle playing state.
|
|
13397
|
+
*/
|
|
13398
|
+
async togglePlay() {
|
|
13399
|
+
return this.currentState === PlayerState.Playing
|
|
13400
|
+
? this.pause()
|
|
13401
|
+
: this.play();
|
|
13402
|
+
}
|
|
13403
|
+
/**
|
|
13404
|
+
* Toggles animation looping.
|
|
13405
|
+
*/
|
|
13406
|
+
async toggleLooping() {
|
|
13407
|
+
this.setLooping(!this.loop);
|
|
13408
|
+
}
|
|
13409
|
+
renderButtonIcon(isPlaying) {
|
|
13410
|
+
if (isPlaying) {
|
|
13411
|
+
return (h("svg", { width: "24", height: "24" }, h("path", { d: "M14.016 5.016H18v13.969h-3.984V5.016zM6 18.984V5.015h3.984v13.969H6z" })));
|
|
13412
|
+
}
|
|
13413
|
+
return (h("svg", { width: "24", height: "24" }, h("path", { d: "M8.016 5.016L18.985 12 8.016 18.984V5.015z" })));
|
|
13414
|
+
}
|
|
13415
|
+
renderControls() {
|
|
13416
|
+
const isPlaying = this.currentState === PlayerState.Playing;
|
|
13417
|
+
const isPaused = this.currentState === PlayerState.Paused;
|
|
13418
|
+
const isStopped = this.currentState === PlayerState.Stopped;
|
|
13419
|
+
return (h("div", { class: 'toolbar' }, h("button", { class: {
|
|
13420
|
+
active: isPlaying || isPaused
|
|
13421
|
+
}, onClick: () => this.togglePlay() }, this.renderButtonIcon(isPlaying)), h("button", { class: {
|
|
13422
|
+
active: isStopped
|
|
13423
|
+
}, onClick: () => this.stop() }, h("svg", { width: "24", height: "24" }, h("path", { d: "M6 6h12v12H6V6z" }))), h("input", { class: "seeker", type: "range", min: "0", step: "1", max: "100", value: this.seeker, onInput: e => this.handleSeekChange(e), onMouseDown: () => { this._prevState = this.currentState; this.freeze(); }, onMouseUp: () => { this._prevState === PlayerState.Playing && this.play(); } }), h("button", { class: {
|
|
13424
|
+
'active': this.loop
|
|
13425
|
+
}, onClick: () => this.toggleLooping() }, h("svg", { width: "24", height: "24" }, h("path", { d: "M17.016 17.016v-4.031h1.969v6h-12v3l-3.984-3.984 3.984-3.984v3h10.031zM6.984 6.984v4.031H5.015v-6h12v-3l3.984 3.984-3.984 3.984v-3H6.984z" }))), h("a", { href: "https://www.lottiefiles.com/", target: "_blank" }, h("svg", { width: "24", height: "24", viewBox: "0 0 320 320", "fill-rule": "nonzero" }, h("rect", { fill: "#adadad", x: ".5", y: ".5", width: "100%", height: "100%", rx: "26.73" }), h("path", { d: "M251.304 65.44a16.55 16.55 0 0 1 13.927 18.789c-1.333 9.04-9.73 15.292-18.762 13.954-15.992-2.37-39.95 22.534-66.77 73.74-34.24 65.37-66.113 96.517-99.667 94.032-9.102-.674-15.93-8.612-15.258-17.723s8.592-15.96 17.695-15.286c16.57 1.227 40.908-24.737 67.97-76.4 34.46-65.79 66.764-96.157 100.866-91.105z", fill: "#fff" })))));
|
|
13426
|
+
}
|
|
13427
|
+
render() {
|
|
13428
|
+
return (h("div", { class: {
|
|
13429
|
+
main: true,
|
|
13430
|
+
controls: this.controls
|
|
13431
|
+
} }, h("div", { class: "animation", style: {
|
|
13432
|
+
background: this.background
|
|
13433
|
+
}, ref: ref => this.container = ref }, this.currentState === PlayerState.Error ? h("div", { class: "error" }, "\u26A0\uFE0F") : undefined), this.controls ? this.renderControls() : undefined));
|
|
13434
|
+
}
|
|
13435
|
+
/**
|
|
13436
|
+
* Handle visibility change events.
|
|
13437
|
+
*/
|
|
13438
|
+
onVisibilityChange() {
|
|
13439
|
+
if (document.hidden === true && this.currentState === PlayerState.Playing) {
|
|
13440
|
+
this.freeze();
|
|
13441
|
+
}
|
|
13442
|
+
else if (this.currentState === PlayerState.Frozen) {
|
|
13443
|
+
this.play();
|
|
13444
|
+
}
|
|
13445
|
+
}
|
|
13446
|
+
/**
|
|
13447
|
+
* Handles click and drag actions on the progress track.
|
|
13448
|
+
*/
|
|
13449
|
+
handleSeekChange(e) {
|
|
13450
|
+
if (!this._lottie || isNaN(e.target.value)) {
|
|
13451
|
+
return;
|
|
13452
|
+
}
|
|
13453
|
+
const frame = ((e.target.value / 100) * this._lottie.totalFrames);
|
|
13454
|
+
this.seek(frame);
|
|
13455
|
+
}
|
|
13456
|
+
};
|
|
13457
13457
|
LottiePlayer.style = lottiePlayerCss;
|
|
13458
13458
|
|
|
13459
13459
|
export { LottiePlayer as lottie_player };
|