@gcorevideo/player 2.26.2 → 2.26.4

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.
@@ -49865,8 +49865,10 @@ class SpinnerThreeBounce extends UIContainerPlugin {
49865
49865
  */
49866
49866
  render() {
49867
49867
  this.$el.html(this.template());
49868
- this.el.firstElementChild?.addEventListener('animationiteration', () => {
49869
- this.trigger(SpinnerEvents.SYNC);
49868
+ this.el.firstElementChild?.addEventListener('animationiteration', (event) => {
49869
+ this.trigger(SpinnerEvents.SYNC, {
49870
+ elapsedTime: event.elapsedTime,
49871
+ });
49870
49872
  });
49871
49873
  this.container.$el.append(this.$el[0]);
49872
49874
  if (this.container.buffering) {
@@ -50065,20 +50067,29 @@ class SourceController extends CorePlugin {
50065
50067
  break;
50066
50068
  }
50067
50069
  });
50068
- this.core.activePlayback.on(Events$1.PLAYBACK_PLAY, () => {
50069
- trace(`${T$1} on PLAYBACK_PLAY`, {
50070
+ // this.core.activePlayback.on(Events.PLAYBACK_PLAY, () => {
50071
+ // trace(`${T} on PLAYBACK_PLAY`, {
50072
+ // currentSource: this.sourcesList[this.currentSourceIndex],
50073
+ // retrying: this.active,
50074
+ // })
50075
+ // if (this.active) {
50076
+ // this.reset()
50077
+ // this.core.activeContainer?.getPlugin('poster')?.enable()
50078
+ // this.core.activeContainer?.getPlugin('spinner')?.hide()
50079
+ // }
50080
+ // })
50081
+ this.listenTo(this.core.activeContainer, Events$1.CONTAINER_PLAY, (_, { autoPlay }) => {
50082
+ trace(`${T$1} onContainerPlay`, {
50070
50083
  currentSource: this.sourcesList[this.currentSourceIndex],
50071
50084
  retrying: this.active,
50072
50085
  });
50086
+ this.autoPlay = !!autoPlay;
50073
50087
  if (this.active) {
50074
50088
  this.reset();
50075
50089
  this.core.activeContainer?.getPlugin('poster')?.enable();
50076
50090
  this.core.activeContainer?.getPlugin('spinner')?.hide();
50077
50091
  }
50078
50092
  });
50079
- this.listenTo(this.core.activeContainer, Events$1.CONTAINER_PLAY, (_, { autoPlay }) => {
50080
- this.autoPlay = !!autoPlay;
50081
- });
50082
50093
  }
50083
50094
  reset() {
50084
50095
  this.active = false;
@@ -50099,8 +50110,7 @@ class SourceController extends CorePlugin {
50099
50110
  this.core.load(nextSource.source, nextSource.mimeType);
50100
50111
  setTimeout(() => {
50101
50112
  trace(`${T$1} retryPlayback playing`, {
50102
- autoPlay: this.autoPlay,
50103
- });
50113
+ autoPlay: this.autoPlay});
50104
50114
  this.core.activeContainer.play({
50105
50115
  autoPlay: this.autoPlay,
50106
50116
  });
package/dist/index.js CHANGED
@@ -43259,7 +43259,7 @@ class Player {
43259
43259
  }
43260
43260
  }
43261
43261
 
43262
- var version$1 = "2.26.2";
43262
+ var version$1 = "2.26.4";
43263
43263
 
43264
43264
  var packages = {
43265
43265
  "node_modules/@clappr/core": {
@@ -51214,8 +51214,10 @@ class SpinnerThreeBounce extends UIContainerPlugin {
51214
51214
  */
51215
51215
  render() {
51216
51216
  this.$el.html(this.template());
51217
- this.el.firstElementChild?.addEventListener('animationiteration', () => {
51218
- this.trigger(SpinnerEvents.SYNC);
51217
+ this.el.firstElementChild?.addEventListener('animationiteration', (event) => {
51218
+ this.trigger(SpinnerEvents.SYNC, {
51219
+ elapsedTime: event.elapsedTime,
51220
+ });
51219
51221
  });
51220
51222
  this.container.$el.append(this.$el[0]);
51221
51223
  if (this.container.buffering) {
@@ -51414,23 +51416,30 @@ class SourceController extends CorePlugin {
51414
51416
  break;
51415
51417
  }
51416
51418
  });
51417
- this.core.activePlayback.on(Events$1.PLAYBACK_PLAY, () => {
51418
- trace(`${T$4} on PLAYBACK_PLAY`, {
51419
+ // this.core.activePlayback.on(Events.PLAYBACK_PLAY, () => {
51420
+ // trace(`${T} on PLAYBACK_PLAY`, {
51421
+ // currentSource: this.sourcesList[this.currentSourceIndex],
51422
+ // retrying: this.active,
51423
+ // })
51424
+ // if (this.active) {
51425
+ // this.reset()
51426
+ // this.core.activeContainer?.getPlugin('poster')?.enable()
51427
+ // this.core.activeContainer?.getPlugin('spinner')?.hide()
51428
+ // }
51429
+ // })
51430
+ this.listenTo(this.core.activeContainer, Events$1.CONTAINER_PLAY, (_, { autoPlay }) => {
51431
+ trace(`${T$4} onContainerPlay`, {
51432
+ autoPlay,
51419
51433
  currentSource: this.sourcesList[this.currentSourceIndex],
51420
51434
  retrying: this.active,
51421
51435
  });
51436
+ this.autoPlay = !!autoPlay;
51422
51437
  if (this.active) {
51423
51438
  this.reset();
51424
51439
  this.core.activeContainer?.getPlugin('poster')?.enable();
51425
51440
  this.core.activeContainer?.getPlugin('spinner')?.hide();
51426
51441
  }
51427
51442
  });
51428
- this.listenTo(this.core.activeContainer, Events$1.CONTAINER_PLAY, (_, { autoPlay }) => {
51429
- trace(`${T$4} onContainerPlay`, {
51430
- autoPlay,
51431
- });
51432
- this.autoPlay = !!autoPlay;
51433
- });
51434
51443
  }
51435
51444
  reset() {
51436
51445
  this.active = false;
@@ -51458,6 +51467,7 @@ class SourceController extends CorePlugin {
51458
51467
  setTimeout(() => {
51459
51468
  trace(`${T$4} retryPlayback playing`, {
51460
51469
  autoPlay: this.autoPlay,
51470
+ nextSource,
51461
51471
  });
51462
51472
  this.core.activeContainer.play({
51463
51473
  autoPlay: this.autoPlay,
@@ -1 +1 @@
1
- {"version":3,"file":"SourceController.d.ts","sourceRoot":"","sources":["../../../src/plugins/source-controller/SourceController.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EACV,KAAK,IAAI,IAAI,UAAU,EACxB,MAAM,cAAc,CAAA;AAwBrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,qBAAa,gBAAiB,SAAQ,UAAU;IAwC9C,OAAO,CAAC,WAAW,CAA8B;IAEjD,OAAO,CAAC,kBAAkB,CAAI;IAE9B,OAAO,CAAC,YAAY,CAA6B;IAEjD,OAAO,CAAC,MAAM,CAAQ;IAEtB,OAAO,CAAC,QAAQ,CAAQ;IAExB,OAAO,CAAC,SAAS,CAAQ;IAEzB,OAAO,CAAC,IAAI,CAAiB;IAE7B;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;gBACS,IAAI,EAAE,UAAU;IAW5B;;OAEG;IACM,UAAU;IAWnB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,wBAAwB;IAgBhC,OAAO,CAAC,2BAA2B;IAqDnC,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,aAAa;IA+BrB,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;CACF"}
1
+ {"version":3,"file":"SourceController.d.ts","sourceRoot":"","sources":["../../../src/plugins/source-controller/SourceController.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EACV,KAAK,IAAI,IAAI,UAAU,EACxB,MAAM,cAAc,CAAA;AAwBrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,qBAAa,gBAAiB,SAAQ,UAAU;IAwC9C,OAAO,CAAC,WAAW,CAA8B;IAEjD,OAAO,CAAC,kBAAkB,CAAI;IAE9B,OAAO,CAAC,YAAY,CAA6B;IAEjD,OAAO,CAAC,MAAM,CAAQ;IAEtB,OAAO,CAAC,QAAQ,CAAQ;IAExB,OAAO,CAAC,SAAS,CAAQ;IAEzB,OAAO,CAAC,IAAI,CAAiB;IAE7B;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;gBACS,IAAI,EAAE,UAAU;IAW5B;;OAEG;IACM,UAAU;IAWnB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,wBAAwB;IAgBhC,OAAO,CAAC,2BAA2B;IA4DnC,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,aAAa;IAgCrB,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;CACF"}
@@ -191,23 +191,30 @@ export class SourceController extends CorePlugin {
191
191
  break;
192
192
  }
193
193
  });
194
- this.core.activePlayback.on(Events.PLAYBACK_PLAY, () => {
195
- trace(`${T} on PLAYBACK_PLAY`, {
194
+ // this.core.activePlayback.on(Events.PLAYBACK_PLAY, () => {
195
+ // trace(`${T} on PLAYBACK_PLAY`, {
196
+ // currentSource: this.sourcesList[this.currentSourceIndex],
197
+ // retrying: this.active,
198
+ // })
199
+ // if (this.active) {
200
+ // this.reset()
201
+ // this.core.activeContainer?.getPlugin('poster')?.enable()
202
+ // this.core.activeContainer?.getPlugin('spinner')?.hide()
203
+ // }
204
+ // })
205
+ this.listenTo(this.core.activeContainer, Events.CONTAINER_PLAY, (_, { autoPlay }) => {
206
+ trace(`${T} onContainerPlay`, {
207
+ autoPlay,
196
208
  currentSource: this.sourcesList[this.currentSourceIndex],
197
209
  retrying: this.active,
198
210
  });
211
+ this.autoPlay = !!autoPlay;
199
212
  if (this.active) {
200
213
  this.reset();
201
214
  this.core.activeContainer?.getPlugin('poster')?.enable();
202
215
  this.core.activeContainer?.getPlugin('spinner')?.hide();
203
216
  }
204
217
  });
205
- this.listenTo(this.core.activeContainer, Events.CONTAINER_PLAY, (_, { autoPlay }) => {
206
- trace(`${T} onContainerPlay`, {
207
- autoPlay,
208
- });
209
- this.autoPlay = !!autoPlay;
210
- });
211
218
  }
212
219
  reset() {
213
220
  this.active = false;
@@ -235,6 +242,7 @@ export class SourceController extends CorePlugin {
235
242
  setTimeout(() => {
236
243
  trace(`${T} retryPlayback playing`, {
237
244
  autoPlay: this.autoPlay,
245
+ nextSource,
238
246
  });
239
247
  this.core.activeContainer.play({
240
248
  autoPlay: this.autoPlay,
@@ -1 +1 @@
1
- {"version":3,"file":"SpinnerThreeBounce.d.ts","sourceRoot":"","sources":["../../../src/plugins/spinner-three-bounce/SpinnerThreeBounce.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,SAAS,EAET,iBAAiB,EAElB,MAAM,cAAc,CAAA;AAKrB,OAAO,mDAAmD,CAAA;AAM1D;;;GAGG;AACH,oBAAY,aAAa;IACvB;;;OAGG;IACH,IAAI,yBAAyB;CAC9B;AAED;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,SAAQ,iBAAiB;IACvD,OAAO,CAAC,SAAS,CAAQ;IAEzB;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,IAAa,UAAU;;;MAKtB;IAED,OAAO,CAAC,WAAW,CAAuB;IAE1C,OAAO,CAAC,QAAQ,CAAwB;IAExC,OAAO,CAAC,aAAa,CAAQ;IAE7B,OAAO,CAAC,YAAY,CAAQ;gBAEhB,SAAS,EAAE,SAAS;IAmBhC,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,OAAO;IAKf;;;;;;OAMG;IACH,IAAI,CAAC,KAAK,SAAM;IAKhB;;OAEG;IACH,IAAI;IAKJ,OAAO,CAAC,KAAK;IASb,OAAO,CAAC,KAAK;IAYb;;OAEG;IACM,MAAM;CAchB"}
1
+ {"version":3,"file":"SpinnerThreeBounce.d.ts","sourceRoot":"","sources":["../../../src/plugins/spinner-three-bounce/SpinnerThreeBounce.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,SAAS,EAET,iBAAiB,EAElB,MAAM,cAAc,CAAA;AAKrB,OAAO,mDAAmD,CAAA;AAM1D;;;GAGG;AACH,oBAAY,aAAa;IACvB;;;OAGG;IACH,IAAI,yBAAyB;CAC9B;AAED;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,SAAQ,iBAAiB;IACvD,OAAO,CAAC,SAAS,CAAQ;IAEzB;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,IAAa,UAAU;;;MAKtB;IAED,OAAO,CAAC,WAAW,CAAuB;IAE1C,OAAO,CAAC,QAAQ,CAAwB;IAExC,OAAO,CAAC,aAAa,CAAQ;IAE7B,OAAO,CAAC,YAAY,CAAQ;gBAEhB,SAAS,EAAE,SAAS;IAmBhC,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,OAAO;IAKf;;;;;;OAMG;IACH,IAAI,CAAC,KAAK,SAAM;IAKhB;;OAEG;IACH,IAAI;IAKJ,OAAO,CAAC,KAAK;IASb,OAAO,CAAC,KAAK;IAYb;;OAEG;IACM,MAAM;CAgBhB"}
@@ -130,8 +130,10 @@ export class SpinnerThreeBounce extends UIContainerPlugin {
130
130
  */
131
131
  render() {
132
132
  this.$el.html(this.template());
133
- this.el.firstElementChild?.addEventListener('animationiteration', () => {
134
- this.trigger(SpinnerEvents.SYNC);
133
+ this.el.firstElementChild?.addEventListener('animationiteration', (event) => {
134
+ this.trigger(SpinnerEvents.SYNC, {
135
+ elapsedTime: event.elapsedTime,
136
+ });
135
137
  });
136
138
  this.container.$el.append(this.$el[0]);
137
139
  if (this.container.buffering) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gcorevideo/player",
3
- "version": "2.26.2",
3
+ "version": "2.26.4",
4
4
  "description": "Gcore JavaScript video player",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -225,25 +225,32 @@ export class SourceController extends CorePlugin {
225
225
  }
226
226
  },
227
227
  )
228
- this.core.activePlayback.on(Events.PLAYBACK_PLAY, () => {
229
- trace(`${T} on PLAYBACK_PLAY`, {
230
- currentSource: this.sourcesList[this.currentSourceIndex],
231
- retrying: this.active,
232
- })
233
- if (this.active) {
234
- this.reset()
235
- this.core.activeContainer?.getPlugin('poster')?.enable()
236
- this.core.activeContainer?.getPlugin('spinner')?.hide()
237
- }
238
- })
228
+ // this.core.activePlayback.on(Events.PLAYBACK_PLAY, () => {
229
+ // trace(`${T} on PLAYBACK_PLAY`, {
230
+ // currentSource: this.sourcesList[this.currentSourceIndex],
231
+ // retrying: this.active,
232
+ // })
233
+ // if (this.active) {
234
+ // this.reset()
235
+ // this.core.activeContainer?.getPlugin('poster')?.enable()
236
+ // this.core.activeContainer?.getPlugin('spinner')?.hide()
237
+ // }
238
+ // })
239
239
  this.listenTo(
240
240
  this.core.activeContainer,
241
241
  Events.CONTAINER_PLAY,
242
242
  (_: string, { autoPlay }: { autoPlay?: boolean }) => {
243
243
  trace(`${T} onContainerPlay`, {
244
244
  autoPlay,
245
+ currentSource: this.sourcesList[this.currentSourceIndex],
246
+ retrying: this.active,
245
247
  })
246
248
  this.autoPlay = !!autoPlay
249
+ if (this.active) {
250
+ this.reset()
251
+ this.core.activeContainer?.getPlugin('poster')?.enable()
252
+ this.core.activeContainer?.getPlugin('spinner')?.hide()
253
+ }
247
254
  },
248
255
  )
249
256
  }
@@ -275,6 +282,7 @@ export class SourceController extends CorePlugin {
275
282
  setTimeout(() => {
276
283
  trace(`${T} retryPlayback playing`, {
277
284
  autoPlay: this.autoPlay,
285
+ nextSource,
278
286
  })
279
287
  this.core.activeContainer.play({
280
288
  autoPlay: this.autoPlay,
@@ -4,11 +4,14 @@ import FakeTimers from '@sinonjs/fake-timers'
4
4
  import { SourceController } from '../SourceController'
5
5
  import { PlaybackErrorCode } from '../../../playback.types.js'
6
6
  import {
7
+ createMockContainer,
7
8
  createMockCore,
8
9
  createMockPlayback,
9
10
  createMockPlugin,
10
11
  createSpinnerPlugin,
11
12
  } from '../../../testUtils.js'
13
+ import { Events } from '@clappr/core'
14
+ import { SpinnerEvents } from '../../spinner-three-bounce/SpinnerThreeBounce.js'
12
15
 
13
16
  // import { LogTracer, Logger, setTracer } from '@gcorevideo/utils'
14
17
 
@@ -77,19 +80,22 @@ describe('SourceController', () => {
77
80
  describe('on fatal playback failure', () => {
78
81
  let core: any
79
82
  let nextPlayback: any
83
+ let nextContainer: any
80
84
  describe('basically', () => {
81
85
  beforeEach(() => {
82
86
  core = createMockCore({
83
87
  sources: MOCK_SOURCES,
84
88
  })
85
89
  const _ = new SourceController(core)
86
- core.emit('core:ready')
87
- core.emit('core:active:container:changed')
88
- core.activePlayback.emit('playback:error', {
90
+ core.emit(Events.CORE_READY)
91
+ core.emit(Events.CORE_ACTIVE_CONTAINER_CHANGED)
92
+ core.activePlayback.emit(Events.PLAYBACK_ERROR, {
89
93
  code: PlaybackErrorCode.MediaSourceUnavailable,
90
94
  })
91
- nextPlayback = createMockPlayback()
95
+ nextContainer = createMockContainer()
96
+ nextPlayback = nextContainer.playback
92
97
  core.activePlayback = nextPlayback
98
+ core.activeContainer = nextContainer
93
99
  })
94
100
  it('should load the next source after a delay', async () => {
95
101
  expect(core.load).not.toHaveBeenCalled()
@@ -124,7 +130,7 @@ describe('SourceController', () => {
124
130
  return spinner
125
131
  }
126
132
  })
127
- core.emit('core:active:container:changed')
133
+ core.emit(Events.CORE_ACTIVE_CONTAINER_CHANGED)
128
134
  })
129
135
  it('should disable the poster', async () => {
130
136
  expect(poster.disable).toHaveBeenCalled()
@@ -147,18 +153,22 @@ describe('SourceController', () => {
147
153
  }
148
154
  })
149
155
  const _ = new SourceController(core)
150
- core.emit('core:ready')
151
- core.emit('core:active:container:changed')
152
- core.activePlayback.emit('playback:error', {
156
+ core.emit(Events.CORE_READY)
157
+ core.emit(Events.CORE_ACTIVE_CONTAINER_CHANGED)
158
+ core.activePlayback.emit(Events.PLAYBACK_ERROR, {
153
159
  code: PlaybackErrorCode.MediaSourceUnavailable,
154
160
  })
155
- nextPlayback = createMockPlayback()
161
+ nextContainer = createMockContainer()
162
+ nextPlayback = nextContainer.playback
156
163
  core.activePlayback = nextPlayback
164
+ core.activeContainer = nextContainer
157
165
  })
158
166
  it('should sync with the spinner before reloading the source', async () => {
159
167
  await clock.tickAsync(1000)
160
168
  expect(core.load).not.toHaveBeenCalled()
161
- spinner.emit('plugins:spinner:sync')
169
+ spinner.emit(SpinnerEvents.SYNC, {
170
+ elapsedTime: 1000,
171
+ })
162
172
  expect(core.load).toHaveBeenCalled()
163
173
  })
164
174
  })
@@ -171,14 +181,16 @@ describe('SourceController', () => {
171
181
  sources: MOCK_SOURCES,
172
182
  })
173
183
  const _ = new SourceController(core)
174
- core.emit('core:ready')
175
- core.emit('core:active:container:changed')
176
- core.activePlayback.emit('playback:error', {
184
+ core.emit(Events.CORE_READY)
185
+ core.emit(Events.CORE_ACTIVE_CONTAINER_CHANGED)
186
+ core.activePlayback.emit(Events.PLAYBACK_ERROR, {
177
187
  code: PlaybackErrorCode.MediaSourceUnavailable,
178
188
  })
179
189
  await clock.tickAsync(1000)
180
- nextPlayback = createMockPlayback()
190
+ nextContainer = createMockContainer()
191
+ nextPlayback = nextContainer.playback
181
192
  core.activePlayback = nextPlayback
193
+ core.activeContainer = nextContainer
182
194
  poster = createMockPlugin()
183
195
  spinner = createSpinnerPlugin()
184
196
  core.activeContainer.getPlugin.mockImplementation((name: string) => {
@@ -189,9 +201,10 @@ describe('SourceController', () => {
189
201
  return spinner
190
202
  }
191
203
  })
192
- core.emit('core:ready')
193
- core.emit('core:active:container:changed')
194
- nextPlayback.emit('playback:play')
204
+ core.emit(Events.CORE_READY)
205
+ core.emit(Events.CORE_ACTIVE_CONTAINER_CHANGED)
206
+ nextPlayback.emit(Events.PLAYBACK_PLAY)
207
+ nextContainer.emit(Events.CONTAINER_PLAY, 'Container', {})
195
208
  })
196
209
  it('should enable the poster', async () => {
197
210
  expect(poster.enable).toHaveBeenCalled()
@@ -206,7 +219,7 @@ describe('SourceController', () => {
206
219
  it('should do nothing', async () => {
207
220
  nextPlayback.emit(event)
208
221
  await clock.tickAsync(1000)
209
- nextPlayback.emit('playback:play')
222
+ nextPlayback.emit(Events.PLAYBACK_PLAY)
210
223
  await clock.tickAsync(1000)
211
224
  expect(poster.enable).toHaveBeenCalledTimes(1)
212
225
  expect(spinner.hide).toHaveBeenCalledTimes(1)
@@ -166,8 +166,10 @@ export class SpinnerThreeBounce extends UIContainerPlugin {
166
166
  */
167
167
  override render() {
168
168
  this.$el.html(this.template())
169
- this.el.firstElementChild?.addEventListener('animationiteration', () => {
170
- this.trigger(SpinnerEvents.SYNC)
169
+ this.el.firstElementChild?.addEventListener('animationiteration', (event) => {
170
+ this.trigger(SpinnerEvents.SYNC, {
171
+ elapsedTime: (event as AnimationEvent).elapsedTime,
172
+ })
171
173
  })
172
174
  this.container.$el.append(this.$el[0])
173
175
  if (this.container.buffering) {