eb-player 1.54.57 → 2.0.1
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/README.md +2 -6
- package/dist/build/default.js +1 -1
- package/dist/build/eb-player.css +2066 -0
- package/dist/build/ebplayer-engines.bundle.js +2393 -0
- package/dist/build/ebplayer-engines.bundle.js.map +1 -0
- package/dist/build/ebplayer.bundle.js +6603 -0
- package/dist/build/ebplayer.bundle.js.map +1 -0
- package/dist/build/theme-forja.css +10 -0
- package/dist/build/theme-forja.js +1 -0
- package/dist/build/theme-modern.css +520 -0
- package/dist/build/theme-radio.css +11 -0
- package/dist/build/theme-radio.js +1 -0
- package/dist/build/theme-snrt.css +11 -0
- package/dist/build/theme-snrt.js +1 -0
- package/dist/build/theme-v2.css +661 -0
- package/dist/build/types/config.d.ts +139 -0
- package/dist/build/types/config.d.ts.map +1 -0
- package/dist/build/types/core/command-handler.d.ts +49 -0
- package/dist/build/types/core/command-handler.d.ts.map +1 -0
- package/dist/build/types/core/config.d.ts +174 -0
- package/dist/build/types/core/config.d.ts.map +1 -0
- package/dist/build/types/core/css/theme-forja.entry.d.ts +2 -0
- package/dist/build/types/core/css/theme-forja.entry.d.ts.map +1 -0
- package/dist/build/types/core/css/theme-radio.entry.d.ts +2 -0
- package/dist/build/types/core/css/theme-radio.entry.d.ts.map +1 -0
- package/dist/build/types/core/css/theme-snrt.entry.d.ts +2 -0
- package/dist/build/types/core/css/theme-snrt.entry.d.ts.map +1 -0
- package/dist/build/types/core/engine-state-sync.d.ts +38 -0
- package/dist/build/types/core/engine-state-sync.d.ts.map +1 -0
- package/dist/build/types/core/event-bus.d.ts +87 -0
- package/dist/build/types/core/event-bus.d.ts.map +1 -0
- package/dist/build/types/core/fsm.d.ts +27 -0
- package/dist/build/types/core/fsm.d.ts.map +1 -0
- package/dist/build/types/core/i18n.d.ts +51 -0
- package/dist/build/types/core/i18n.d.ts.map +1 -0
- package/dist/build/types/core/index.d.ts +23 -0
- package/dist/build/types/core/index.d.ts.map +1 -0
- package/dist/build/types/core/lifecycle.d.ts +96 -0
- package/dist/build/types/core/lifecycle.d.ts.map +1 -0
- package/dist/build/types/core/player-state.d.ts +15 -0
- package/dist/build/types/core/player-state.d.ts.map +1 -0
- package/dist/build/types/core/types.d.ts +84 -0
- package/dist/build/types/core/types.d.ts.map +1 -0
- package/dist/build/types/eb-player-standalone.d.ts +12 -0
- package/dist/build/types/eb-player-standalone.d.ts.map +1 -0
- package/dist/build/types/eb-player.d.ts +43 -0
- package/dist/build/types/eb-player.d.ts.map +1 -0
- package/dist/build/types/engine-state-sync.d.ts +38 -0
- package/dist/build/types/engine-state-sync.d.ts.map +1 -0
- package/dist/build/types/engines/abr/dash.d.ts +56 -0
- package/dist/build/types/engines/abr/dash.d.ts.map +1 -0
- package/dist/build/types/engines/abr/hls.d.ts +105 -0
- package/dist/build/types/engines/abr/hls.d.ts.map +1 -0
- package/dist/build/types/engines/base-engine.d.ts +56 -0
- package/dist/build/types/engines/base-engine.d.ts.map +1 -0
- package/dist/build/types/engines/cdn-loader.d.ts +20 -0
- package/dist/build/types/engines/cdn-loader.d.ts.map +1 -0
- package/dist/build/types/engines/cdn-token-manager.d.ts +136 -0
- package/dist/build/types/engines/cdn-token-manager.d.ts.map +1 -0
- package/dist/build/types/engines/dash.d.ts +79 -0
- package/dist/build/types/engines/dash.d.ts.map +1 -0
- package/dist/build/types/engines/drm.d.ts +54 -0
- package/dist/build/types/engines/drm.d.ts.map +1 -0
- package/dist/build/types/engines/hls-discontinuity-patch.d.ts +43 -0
- package/dist/build/types/engines/hls-discontinuity-patch.d.ts.map +1 -0
- package/dist/build/types/engines/hls.d.ts +45 -0
- package/dist/build/types/engines/hls.d.ts.map +1 -0
- package/dist/build/types/engines/index.d.ts +26 -0
- package/dist/build/types/engines/index.d.ts.map +1 -0
- package/dist/build/types/engines/ios/hls.d.ts +20 -0
- package/dist/build/types/engines/ios/hls.d.ts.map +1 -0
- package/dist/build/types/engines/poster/hls.d.ts +35 -0
- package/dist/build/types/engines/poster/hls.d.ts.map +1 -0
- package/dist/build/types/engines/retry/dash.d.ts +39 -0
- package/dist/build/types/engines/retry/dash.d.ts.map +1 -0
- package/dist/build/types/engines/retry/hls.d.ts +35 -0
- package/dist/build/types/engines/retry/hls.d.ts.map +1 -0
- package/dist/build/types/engines/snapshot/dash.d.ts +55 -0
- package/dist/build/types/engines/snapshot/dash.d.ts.map +1 -0
- package/dist/build/types/engines/snapshot/hls.d.ts +108 -0
- package/dist/build/types/engines/snapshot/hls.d.ts.map +1 -0
- package/dist/build/types/engines/stall-watchdog.d.ts +41 -0
- package/dist/build/types/engines/stall-watchdog.d.ts.map +1 -0
- package/dist/build/types/event-bus.d.ts +54 -0
- package/dist/build/types/event-bus.d.ts.map +1 -0
- package/dist/build/types/fsm.d.ts +27 -0
- package/dist/build/types/fsm.d.ts.map +1 -0
- package/dist/build/types/i18n.d.ts +51 -0
- package/dist/build/types/i18n.d.ts.map +1 -0
- package/dist/build/types/index.d.ts +21 -0
- package/dist/build/types/index.d.ts.map +1 -0
- package/dist/build/types/integrations/ads-manager.d.ts +32 -0
- package/dist/build/types/integrations/ads-manager.d.ts.map +1 -0
- package/dist/build/types/integrations/chromecast-manager.d.ts +50 -0
- package/dist/build/types/integrations/chromecast-manager.d.ts.map +1 -0
- package/dist/build/types/integrations/epg-manager.d.ts +22 -0
- package/dist/build/types/integrations/epg-manager.d.ts.map +1 -0
- package/dist/build/types/integrations/index.d.ts +6 -0
- package/dist/build/types/integrations/index.d.ts.map +1 -0
- package/dist/build/types/integrations/p2p-manager.d.ts +33 -0
- package/dist/build/types/integrations/p2p-manager.d.ts.map +1 -0
- package/dist/build/types/integrations/playlist-manager.d.ts +21 -0
- package/dist/build/types/integrations/playlist-manager.d.ts.map +1 -0
- package/dist/build/types/lifecycle.d.ts +64 -0
- package/dist/build/types/lifecycle.d.ts.map +1 -0
- package/dist/build/types/player-state.d.ts +15 -0
- package/dist/build/types/player-state.d.ts.map +1 -0
- package/dist/build/types/skin/bars/bottom-bar.d.ts +16 -0
- package/dist/build/types/skin/bars/bottom-bar.d.ts.map +1 -0
- package/dist/build/types/skin/bars/middle-bar.d.ts +16 -0
- package/dist/build/types/skin/bars/middle-bar.d.ts.map +1 -0
- package/dist/build/types/skin/bars/top-bar.d.ts +15 -0
- package/dist/build/types/skin/bars/top-bar.d.ts.map +1 -0
- package/dist/build/types/skin/base-component.d.ts +69 -0
- package/dist/build/types/skin/base-component.d.ts.map +1 -0
- package/dist/build/types/skin/brand/forja-playlist-bar.d.ts +15 -0
- package/dist/build/types/skin/brand/forja-playlist-bar.d.ts.map +1 -0
- package/dist/build/types/skin/brand/snrt-radio-carousel.d.ts +16 -0
- package/dist/build/types/skin/brand/snrt-radio-carousel.d.ts.map +1 -0
- package/dist/build/types/skin/component-registry.d.ts +16 -0
- package/dist/build/types/skin/component-registry.d.ts.map +1 -0
- package/dist/build/types/skin/controllers/auto-hide.d.ts +27 -0
- package/dist/build/types/skin/controllers/auto-hide.d.ts.map +1 -0
- package/dist/build/types/skin/controllers/keyboard.d.ts +29 -0
- package/dist/build/types/skin/controllers/keyboard.d.ts.map +1 -0
- package/dist/build/types/skin/controls/cast-button.d.ts +15 -0
- package/dist/build/types/skin/controls/cast-button.d.ts.map +1 -0
- package/dist/build/types/skin/controls/forward-button.d.ts +15 -0
- package/dist/build/types/skin/controls/forward-button.d.ts.map +1 -0
- package/dist/build/types/skin/controls/fullscreen-button.d.ts +17 -0
- package/dist/build/types/skin/controls/fullscreen-button.d.ts.map +1 -0
- package/dist/build/types/skin/controls/info-button.d.ts +10 -0
- package/dist/build/types/skin/controls/info-button.d.ts.map +1 -0
- package/dist/build/types/skin/controls/live-sync-button.d.ts +20 -0
- package/dist/build/types/skin/controls/live-sync-button.d.ts.map +1 -0
- package/dist/build/types/skin/controls/pip-button.d.ts +21 -0
- package/dist/build/types/skin/controls/pip-button.d.ts.map +1 -0
- package/dist/build/types/skin/controls/play-pause-button.d.ts +14 -0
- package/dist/build/types/skin/controls/play-pause-button.d.ts.map +1 -0
- package/dist/build/types/skin/controls/rewind-button.d.ts +15 -0
- package/dist/build/types/skin/controls/rewind-button.d.ts.map +1 -0
- package/dist/build/types/skin/controls/seekbar.d.ts +43 -0
- package/dist/build/types/skin/controls/seekbar.d.ts.map +1 -0
- package/dist/build/types/skin/controls/settings-panel.d.ts +45 -0
- package/dist/build/types/skin/controls/settings-panel.d.ts.map +1 -0
- package/dist/build/types/skin/controls/share-button.d.ts +11 -0
- package/dist/build/types/skin/controls/share-button.d.ts.map +1 -0
- package/dist/build/types/skin/controls/time-display.d.ts +19 -0
- package/dist/build/types/skin/controls/time-display.d.ts.map +1 -0
- package/dist/build/types/skin/controls/volume-control.d.ts +21 -0
- package/dist/build/types/skin/controls/volume-control.d.ts.map +1 -0
- package/dist/build/types/skin/icons/icons-modern.d.ts +10 -0
- package/dist/build/types/skin/icons/icons-modern.d.ts.map +1 -0
- package/dist/build/types/skin/icons/icons.d.ts +10 -0
- package/dist/build/types/skin/icons/icons.d.ts.map +1 -0
- package/dist/build/types/skin/icons/sprite.d.ts +39 -0
- package/dist/build/types/skin/icons/sprite.d.ts.map +1 -0
- package/dist/build/types/skin/index.d.ts +24 -0
- package/dist/build/types/skin/index.d.ts.map +1 -0
- package/dist/build/types/skin/overlays/error-message.d.ts +14 -0
- package/dist/build/types/skin/overlays/error-message.d.ts.map +1 -0
- package/dist/build/types/skin/overlays/info-overlay.d.ts +15 -0
- package/dist/build/types/skin/overlays/info-overlay.d.ts.map +1 -0
- package/dist/build/types/skin/overlays/loading-spinner.d.ts +17 -0
- package/dist/build/types/skin/overlays/loading-spinner.d.ts.map +1 -0
- package/dist/build/types/skin/overlays/socials-overlay.d.ts +17 -0
- package/dist/build/types/skin/overlays/socials-overlay.d.ts.map +1 -0
- package/dist/build/types/skin/overlays/toast-notification.d.ts +18 -0
- package/dist/build/types/skin/overlays/toast-notification.d.ts.map +1 -0
- package/dist/build/types/skin/skin-root.d.ts +80 -0
- package/dist/build/types/skin/skin-root.d.ts.map +1 -0
- package/dist/build/types/types.d.ts +41 -0
- package/dist/build/types/types.d.ts.map +1 -0
- package/dist/build/types/utils/chapters.d.ts +16 -0
- package/dist/build/types/utils/chapters.d.ts.map +1 -0
- package/dist/build/types/utils/format-duration.d.ts +9 -0
- package/dist/build/types/utils/format-duration.d.ts.map +1 -0
- package/dist/build/types/utils/format-wall-clock.d.ts +6 -0
- package/dist/build/types/utils/format-wall-clock.d.ts.map +1 -0
- package/dist/build/types/utils/settings-helpers.d.ts +41 -0
- package/dist/build/types/utils/settings-helpers.d.ts.map +1 -0
- package/dist/dev/default.js +6451 -0
- package/dist/dev/default.js.map +1 -0
- package/dist/dev/easybroadcast.js +6677 -0
- package/dist/dev/easybroadcast.js.map +1 -0
- package/dist/dev/index.html +24 -0
- package/dist/eb-player.css +2066 -0
- package/dist/players/default/default.js +400 -1
- package/dist/players/default/index.html +1 -5
- package/dist/players/forja/forja.js +310 -0
- package/dist/players/forja/index.html +1 -0
- package/dist/players/videos/equipe/EB_lequipe-preprod.js +1 -0
- package/dist/players/videos/equipe/EB_lequipe.js +1 -1
- package/dist/players/videos/equipe/equipe.js +1 -1
- package/dist/theme-forja.css +10 -0
- package/dist/theme-modern.css +520 -0
- package/dist/theme-radio.css +11 -0
- package/dist/theme-snrt.css +11 -0
- package/dist/theme-v2.css +661 -0
- package/package.json +34 -3
- package/dist/build/forja.js +0 -1
- package/dist/players/videos/equipe/EB_lequipe-preprod copy.js +0 -1
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { html as litHtml } from 'lit-html';
|
|
2
|
+
import type { TemplateResult } from 'lit-html';
|
|
3
|
+
/**
|
|
4
|
+
* Injects the SVG sprite into document.body.
|
|
5
|
+
*
|
|
6
|
+
* Calling this multiple times is safe — if the sprite is already injected
|
|
7
|
+
* and no extra icons are provided, it returns early.
|
|
8
|
+
*
|
|
9
|
+
* If extraIcons are provided, the sprite innerHTML is updated with the
|
|
10
|
+
* merged symbol set.
|
|
11
|
+
*
|
|
12
|
+
* @param extraIcons - Additional SVG symbol strings to merge with DEFAULT_ICONS
|
|
13
|
+
*/
|
|
14
|
+
export declare function injectSprite(extraIcons?: Record<string, string>): void;
|
|
15
|
+
/**
|
|
16
|
+
* Returns a lit-html TemplateResult for an SVG icon using the sprite.
|
|
17
|
+
*
|
|
18
|
+
* The icon is referenced via <use href="#eb-{name}">.
|
|
19
|
+
* The sprite must be injected before icons are rendered to screen.
|
|
20
|
+
*
|
|
21
|
+
* @param name - Icon name (e.g. 'play', 'pause', 'fullscreen')
|
|
22
|
+
* @param className - Optional additional CSS class
|
|
23
|
+
*/
|
|
24
|
+
export declare function icon(name: string, className?: string): TemplateResult;
|
|
25
|
+
/**
|
|
26
|
+
* Merges additional brand-specific SVG symbols into the sprite.
|
|
27
|
+
* Calling this updates the #eb-sprite element with the new symbols.
|
|
28
|
+
*
|
|
29
|
+
* @param extras - Record mapping icon names to SVG symbol strings
|
|
30
|
+
*/
|
|
31
|
+
export declare function registerBrandIcons(extras: Record<string, string>): void;
|
|
32
|
+
/**
|
|
33
|
+
* Resets the sprite back to DEFAULT_ICONS, discarding any brand overrides.
|
|
34
|
+
* The DOM sprite element is updated immediately.
|
|
35
|
+
*/
|
|
36
|
+
export declare function resetSprite(): void;
|
|
37
|
+
export type { TemplateResult };
|
|
38
|
+
export { litHtml as html };
|
|
39
|
+
//# sourceMappingURL=sprite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sprite.d.ts","sourceRoot":"","sources":["../../../../../src/skin/icons/sprite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,UAAU,CAAA;AAE1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAiB9C;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAwBtE;AAED;;;;;;;;GAQG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,CAGrE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAEvE;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAOlC;AAGD,YAAY,EAAE,cAAc,EAAE,CAAA;AAG9B,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import './css/skin.css';
|
|
2
|
+
export { BaseComponent } from './base-component';
|
|
3
|
+
export { SkinRoot } from './skin-root';
|
|
4
|
+
export { TopBar } from './bars/top-bar';
|
|
5
|
+
export { BottomBar } from './bars/bottom-bar';
|
|
6
|
+
export { MiddleBar } from './bars/middle-bar';
|
|
7
|
+
export { PlayPauseButton } from './controls/play-pause-button';
|
|
8
|
+
export { VolumeControl } from './controls/volume-control';
|
|
9
|
+
export { TimeDisplay } from './controls/time-display';
|
|
10
|
+
export { LiveSyncButton } from './controls/live-sync-button';
|
|
11
|
+
export { FullscreenButton } from './controls/fullscreen-button';
|
|
12
|
+
export { PipButton } from './controls/pip-button';
|
|
13
|
+
export { CastButton } from './controls/cast-button';
|
|
14
|
+
export { SettingsPanel } from './controls/settings-panel';
|
|
15
|
+
export { Seekbar } from './controls/seekbar';
|
|
16
|
+
export { LoadingSpinner } from './overlays/loading-spinner';
|
|
17
|
+
export { ErrorMessage } from './overlays/error-message';
|
|
18
|
+
export { SocialsOverlay } from './overlays/socials-overlay';
|
|
19
|
+
export { InfoOverlay } from './overlays/info-overlay';
|
|
20
|
+
export { AutoHideController } from './controllers/auto-hide';
|
|
21
|
+
export { KeyboardController } from './controllers/keyboard';
|
|
22
|
+
export { SnrtRadioCarousel } from './brand/snrt-radio-carousel';
|
|
23
|
+
export { ForjaPlaylistBar } from './brand/forja-playlist-bar';
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/skin/index.ts"],"names":[],"mappings":"AACA,OAAO,gBAAgB,CAAA;AAGvB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAGhD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAGtC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAG7C,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAG5C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAGrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAG3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { TemplateResult } from 'lit-html';
|
|
2
|
+
import { BaseComponent } from '../base-component';
|
|
3
|
+
/**
|
|
4
|
+
* Error message overlay.
|
|
5
|
+
*
|
|
6
|
+
* Visible when state.error is not null.
|
|
7
|
+
* Shows the error string (raw text — i18n lookup can be applied at a higher level).
|
|
8
|
+
* Has a retry button that emits 'request-reload'.
|
|
9
|
+
*/
|
|
10
|
+
export declare class ErrorMessage extends BaseComponent {
|
|
11
|
+
protected onConnect(): void;
|
|
12
|
+
protected template(): TemplateResult;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=error-message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-message.d.ts","sourceRoot":"","sources":["../../../../../src/skin/overlays/error-message.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD;;;;;;GAMG;AACH,qBAAa,YAAa,SAAQ,aAAa;IAC7C,SAAS,CAAC,SAAS,IAAI,IAAI;IAK3B,SAAS,CAAC,QAAQ,IAAI,cAAc;CAmBrC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { TemplateResult } from 'lit-html';
|
|
2
|
+
import { BaseComponent } from '../base-component';
|
|
3
|
+
/**
|
|
4
|
+
* Info overlay.
|
|
5
|
+
*
|
|
6
|
+
* Visible when state.infoOpen is true.
|
|
7
|
+
* Renders config.about text (using unsafeHTML would allow HTML, but we use
|
|
8
|
+
* textContent binding here to avoid XSS from consumer-provided strings).
|
|
9
|
+
* Close button sets state.infoOpen = false.
|
|
10
|
+
*/
|
|
11
|
+
export declare class InfoOverlay extends BaseComponent {
|
|
12
|
+
protected onConnect(): void;
|
|
13
|
+
protected template(): TemplateResult;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=info-overlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info-overlay.d.ts","sourceRoot":"","sources":["../../../../../src/skin/overlays/info-overlay.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD;;;;;;;GAOG;AACH,qBAAa,WAAY,SAAQ,aAAa;IAC5C,SAAS,CAAC,SAAS,IAAI,IAAI;IAK3B,SAAS,CAAC,QAAQ,IAAI,cAAc;CAsBrC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { TemplateResult } from 'lit-html';
|
|
2
|
+
import { BaseComponent } from '../base-component';
|
|
3
|
+
/**
|
|
4
|
+
* Buffering/loading spinner overlay.
|
|
5
|
+
*
|
|
6
|
+
* Shows in two modes:
|
|
7
|
+
* - Buffering: visible when state.playbackState === 'buffering' (no text)
|
|
8
|
+
* - Reconnecting: visible when state.reconnecting === true (shows "Reconnecting..." text)
|
|
9
|
+
*
|
|
10
|
+
* Hidden when not buffering and not reconnecting.
|
|
11
|
+
* CSS in skin.css handles the spin animation on .eb-loading.
|
|
12
|
+
*/
|
|
13
|
+
export declare class LoadingSpinner extends BaseComponent {
|
|
14
|
+
protected onConnect(): void;
|
|
15
|
+
protected template(): TemplateResult;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=loading-spinner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loading-spinner.d.ts","sourceRoot":"","sources":["../../../../../src/skin/overlays/loading-spinner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGjD;;;;;;;;;GASG;AACH,qBAAa,cAAe,SAAQ,aAAa;IAC/C,SAAS,CAAC,SAAS,IAAI,IAAI;IAM3B,SAAS,CAAC,QAAQ,IAAI,cAAc;CAiBrC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { TemplateResult } from 'lit-html';
|
|
2
|
+
import { BaseComponent } from '../base-component';
|
|
3
|
+
/**
|
|
4
|
+
* Social sharing overlay.
|
|
5
|
+
*
|
|
6
|
+
* Visible when state.socialsOpen is true.
|
|
7
|
+
* Shows sharing links from config.socials (Record<string, string>).
|
|
8
|
+
* Close button sets state.socialsOpen = false.
|
|
9
|
+
*
|
|
10
|
+
* If config.socials is false, no links are rendered.
|
|
11
|
+
* Each link opens in a new tab.
|
|
12
|
+
*/
|
|
13
|
+
export declare class SocialsOverlay extends BaseComponent {
|
|
14
|
+
protected onConnect(): void;
|
|
15
|
+
protected template(): TemplateResult;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=socials-overlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socials-overlay.d.ts","sourceRoot":"","sources":["../../../../../src/skin/overlays/socials-overlay.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD;;;;;;;;;GASG;AACH,qBAAa,cAAe,SAAQ,aAAa;IAC/C,SAAS,CAAC,SAAS,IAAI,IAAI;IAK3B,SAAS,CAAC,QAAQ,IAAI,cAAc;CAqCrC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { TemplateResult } from 'lit-html';
|
|
2
|
+
import { BaseComponent } from '../base-component';
|
|
3
|
+
/**
|
|
4
|
+
* Toast notification overlay.
|
|
5
|
+
*
|
|
6
|
+
* Renders a dismissible status message when state.toast is not null.
|
|
7
|
+
* Hidden (aria-hidden) when state.toast is null.
|
|
8
|
+
*
|
|
9
|
+
* The toast message is set by CommandHandler (e.g., 'cast.failed' message)
|
|
10
|
+
* and auto-clears after 3 seconds via CommandHandler's showToast() method.
|
|
11
|
+
*
|
|
12
|
+
* Positioning and fade animation handled by skin.css (.eb-toast class).
|
|
13
|
+
*/
|
|
14
|
+
export declare class ToastNotification extends BaseComponent {
|
|
15
|
+
protected onConnect(): void;
|
|
16
|
+
protected template(): TemplateResult;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=toast-notification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toast-notification.d.ts","sourceRoot":"","sources":["../../../../../src/skin/overlays/toast-notification.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD;;;;;;;;;;GAUG;AACH,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,SAAS,CAAC,SAAS,IAAI,IAAI;IAK3B,SAAS,CAAC,QAAQ,IAAI,cAAc;CASrC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { TemplateResult } from 'lit-html';
|
|
2
|
+
import { BaseComponent } from './base-component';
|
|
3
|
+
/**
|
|
4
|
+
* SkinRoot is the master DOM scaffold component for the player.
|
|
5
|
+
*
|
|
6
|
+
* It creates the full player container structure:
|
|
7
|
+
* - video element
|
|
8
|
+
* - overlay zone (loading, error, poster, radio, socials, info)
|
|
9
|
+
* - ads container (for IMA SDK)
|
|
10
|
+
* - top-bar zone
|
|
11
|
+
* - middle-bar zone (conditional: config.middlebar)
|
|
12
|
+
* - bottom-bar zone
|
|
13
|
+
* - 4 extension zones (top-extra, bottom-extra, overlay, controls-extra)
|
|
14
|
+
*
|
|
15
|
+
* Handles RTL direction, iOS native controls fallback, and no-UI mode.
|
|
16
|
+
* Exposes getVideoElement() and getAdsContainer() for integration wiring.
|
|
17
|
+
*/
|
|
18
|
+
export declare class SkinRoot extends BaseComponent {
|
|
19
|
+
private videoElement;
|
|
20
|
+
private adsContainerElement;
|
|
21
|
+
private posterVideoElement;
|
|
22
|
+
private extensionCleanups;
|
|
23
|
+
private childComponents;
|
|
24
|
+
/**
|
|
25
|
+
* Returns the created HTMLVideoElement.
|
|
26
|
+
* Returns null before connect() or after disconnect().
|
|
27
|
+
*/
|
|
28
|
+
getVideoElement(): HTMLVideoElement | null;
|
|
29
|
+
/**
|
|
30
|
+
* Returns the ads container HTMLElement used by IMA SDK's AdDisplayContainer.
|
|
31
|
+
* Returns null before connect() or after disconnect().
|
|
32
|
+
*/
|
|
33
|
+
getAdsContainer(): HTMLElement | null;
|
|
34
|
+
/**
|
|
35
|
+
* Returns the poster video HTMLVideoElement for poster stream playback.
|
|
36
|
+
* Returns null before connect(), after disconnect(), or when config.posterStream is falsy.
|
|
37
|
+
*/
|
|
38
|
+
getPosterVideoElement(): HTMLVideoElement | null;
|
|
39
|
+
protected onConnect(): void;
|
|
40
|
+
protected template(): TemplateResult;
|
|
41
|
+
/**
|
|
42
|
+
* Connects all child components into their respective DOM zones.
|
|
43
|
+
* Only called when config.noUi is false (UI mode).
|
|
44
|
+
* Child components are tracked in this.childComponents for cleanup on disconnect().
|
|
45
|
+
*
|
|
46
|
+
* Component placement is driven by config.layout (falls back to DEFAULT_LAYOUT).
|
|
47
|
+
*/
|
|
48
|
+
private connectChildComponents;
|
|
49
|
+
private renderNoUiTemplate;
|
|
50
|
+
private bindElementRefs;
|
|
51
|
+
private subscribeToState;
|
|
52
|
+
/**
|
|
53
|
+
* Toggles poster image visibility based on playbackState.
|
|
54
|
+
* Uses direct DOM manipulation instead of full re-render to avoid
|
|
55
|
+
* interfering with child component render roots.
|
|
56
|
+
*/
|
|
57
|
+
private updatePosterVisibility;
|
|
58
|
+
/**
|
|
59
|
+
* Toggles iOS-specific class and native controls attribute without full re-render.
|
|
60
|
+
*/
|
|
61
|
+
private updateIOSState;
|
|
62
|
+
/**
|
|
63
|
+
* Toggles radio overlay visibility without full re-render.
|
|
64
|
+
* Creates or removes the radio overlay element as needed.
|
|
65
|
+
*/
|
|
66
|
+
private updateRadioOverlay;
|
|
67
|
+
/**
|
|
68
|
+
* Toggles eb-controls-visible / eb-controls-hidden class on the player container.
|
|
69
|
+
* CSS handles opacity transition and pointer-events on bars.
|
|
70
|
+
*/
|
|
71
|
+
private updateControlsVisibility;
|
|
72
|
+
/**
|
|
73
|
+
* Applies or removes the dir=rtl attribute without full re-render.
|
|
74
|
+
* More efficient than re-rendering the entire template for a simple attribute change.
|
|
75
|
+
*/
|
|
76
|
+
private applyRtl;
|
|
77
|
+
private invokeExtensions;
|
|
78
|
+
disconnect(): void;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=skin-root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skin-root.d.ts","sourceRoot":"","sources":["../../../../src/skin/skin-root.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAwChD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,QAAS,SAAQ,aAAa;IACzC,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,mBAAmB,CAA2B;IACtD,OAAO,CAAC,kBAAkB,CAAgC;IAC1D,OAAO,CAAC,iBAAiB,CAAwB;IACjD,OAAO,CAAC,eAAe,CAAsB;IAE7C;;;OAGG;IACH,eAAe,IAAI,gBAAgB,GAAG,IAAI;IAI1C;;;OAGG;IACH,eAAe,IAAI,WAAW,GAAG,IAAI;IAIrC;;;OAGG;IACH,qBAAqB,IAAI,gBAAgB,GAAG,IAAI;IAIhD,SAAS,CAAC,SAAS,IAAI,IAAI;IA6B3B,SAAS,CAAC,QAAQ,IAAI,cAAc;IAgFpC;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IA4G9B,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,gBAAgB;IAsCxB;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAW9B;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA0B1B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAQhC;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,gBAAgB;IA4BxB,UAAU,IAAI,IAAI;CAiBnB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { PlaybackState } from './fsm';
|
|
2
|
+
/**
|
|
3
|
+
* The complete map of all reactive state properties in the player.
|
|
4
|
+
* Used by PlayerState (Proxy-based reactive store).
|
|
5
|
+
*/
|
|
6
|
+
export interface StateMap {
|
|
7
|
+
playbackState: PlaybackState;
|
|
8
|
+
volume: number;
|
|
9
|
+
currentTime: number;
|
|
10
|
+
duration: number;
|
|
11
|
+
muted: boolean;
|
|
12
|
+
bufferedEnd: number;
|
|
13
|
+
isLive: boolean;
|
|
14
|
+
qualityLevels: unknown[];
|
|
15
|
+
currentQuality: number;
|
|
16
|
+
audioTracks: unknown[];
|
|
17
|
+
currentAudioTrack: number;
|
|
18
|
+
subtitleTracks: unknown[];
|
|
19
|
+
currentSubtitleTrack: number;
|
|
20
|
+
playbackRate: number;
|
|
21
|
+
error: string | null;
|
|
22
|
+
src: string;
|
|
23
|
+
isFullscreen: boolean;
|
|
24
|
+
isPip: boolean;
|
|
25
|
+
isCasting: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Per-property subscriber callback type.
|
|
29
|
+
* Receives the new value and the previous value.
|
|
30
|
+
*/
|
|
31
|
+
export type Listener<T> = (value: T, prev: T) => void;
|
|
32
|
+
/**
|
|
33
|
+
* The public interface for the player state object.
|
|
34
|
+
* Combines all state properties with the subscription method.
|
|
35
|
+
*/
|
|
36
|
+
export type PlayerState = StateMap & {
|
|
37
|
+
on: <K extends keyof StateMap>(key: K, listener: Listener<StateMap[K]>, options?: {
|
|
38
|
+
signal?: AbortSignal;
|
|
39
|
+
}) => void;
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,aAAa,EAAE,aAAa,CAAA;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,OAAO,CAAA;IACf,aAAa,EAAE,OAAO,EAAE,CAAA;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,OAAO,EAAE,CAAA;IACtB,iBAAiB,EAAE,MAAM,CAAA;IACzB,cAAc,EAAE,OAAO,EAAE,CAAA;IACzB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,YAAY,EAAE,OAAO,CAAA;IACrB,KAAK,EAAE,OAAO,CAAA;IACd,SAAS,EAAE,OAAO,CAAA;CACnB;AAED;;;GAGG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;AAErD;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG;IACnC,EAAE,EAAE,CAAC,CAAC,SAAS,MAAM,QAAQ,EAC3B,GAAG,EAAE,CAAC,EACN,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAC/B,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,KAC/B,IAAI,CAAA;CACV,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface ChapterMark {
|
|
2
|
+
title: string;
|
|
3
|
+
startTime: number;
|
|
4
|
+
endTime: number;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Parses a WebVTT string into an array of ChapterMark objects.
|
|
8
|
+
* Returns an empty array if the content is empty or contains no parseable cues.
|
|
9
|
+
*/
|
|
10
|
+
export declare function parseChapters(vttContent: string): ChapterMark[];
|
|
11
|
+
/**
|
|
12
|
+
* Fetches a WebVTT chapters file from a URL and parses it.
|
|
13
|
+
* Returns an empty array if the fetch or parse fails.
|
|
14
|
+
*/
|
|
15
|
+
export declare function fetchChapters(url: string): Promise<ChapterMark[]>;
|
|
16
|
+
//# sourceMappingURL=chapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chapters.d.ts","sourceRoot":"","sources":["../../../../src/utils/chapters.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,EAAE,CAY/D;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAUvE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formats a duration in seconds to a human-readable time string.
|
|
3
|
+
*
|
|
4
|
+
* - Invalid input (NaN, negative, Infinity) → "0:00"
|
|
5
|
+
* - < 3600 seconds → "M:SS"
|
|
6
|
+
* - >= 3600 seconds → "H:MM:SS"
|
|
7
|
+
*/
|
|
8
|
+
export declare function formatDuration(seconds: number): string;
|
|
9
|
+
//# sourceMappingURL=format-duration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-duration.d.ts","sourceRoot":"","sources":["../../../../src/utils/format-duration.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAmBtD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-wall-clock.d.ts","sourceRoot":"","sources":["../../../../src/utils/format-wall-clock.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE3D"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export interface SettingsMenuItem {
|
|
2
|
+
label: string;
|
|
3
|
+
value: number;
|
|
4
|
+
selected: boolean;
|
|
5
|
+
}
|
|
6
|
+
interface QualityLevel {
|
|
7
|
+
height?: number;
|
|
8
|
+
bitrate?: number;
|
|
9
|
+
}
|
|
10
|
+
interface AudioTrack {
|
|
11
|
+
name?: string;
|
|
12
|
+
lang?: string;
|
|
13
|
+
}
|
|
14
|
+
interface SubtitleTrack {
|
|
15
|
+
name?: string;
|
|
16
|
+
lang?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Builds quality menu items from engine level descriptors.
|
|
20
|
+
* Levels with no height (or height 0) show bitrate in kbps instead.
|
|
21
|
+
* Always appends an "Auto" item at value -1.
|
|
22
|
+
*/
|
|
23
|
+
export declare function getQualityItems(levels: QualityLevel[], currentQuality: number): SettingsMenuItem[];
|
|
24
|
+
/**
|
|
25
|
+
* Builds audio track menu items from engine audio track descriptors.
|
|
26
|
+
* Falls back to lang, then "Track N" when name is missing.
|
|
27
|
+
*/
|
|
28
|
+
export declare function getAudioItems(tracks: AudioTrack[], currentTrack: number): SettingsMenuItem[];
|
|
29
|
+
/**
|
|
30
|
+
* Builds subtitle track menu items from engine subtitle track descriptors.
|
|
31
|
+
* Falls back to lang, then "Track N" when name is missing.
|
|
32
|
+
* Always appends an "Off" item at value -1.
|
|
33
|
+
*/
|
|
34
|
+
export declare function getSubtitleItems(tracks: SubtitleTrack[], currentTrack: number): SettingsMenuItem[];
|
|
35
|
+
/**
|
|
36
|
+
* Builds playback speed menu items from a fixed set of speed values.
|
|
37
|
+
* Speed 1 is labeled "Normal"; all others use the format "Nx".
|
|
38
|
+
*/
|
|
39
|
+
export declare function getSpeedItems(currentRate: number): SettingsMenuItem[];
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=settings-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-helpers.d.ts","sourceRoot":"","sources":["../../../../src/utils/settings-helpers.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAID;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,cAAc,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAYlG;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAM5F;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAUlG;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAMrE"}
|