@microsoft/live-share-media 1.0.0-preview.11 → 1.0.0-preview.13

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.
Files changed (100) hide show
  1. package/README.md +1 -1
  2. package/bin/EphemeralMediaSession.d.ts +102 -0
  3. package/bin/EphemeralMediaSession.d.ts.map +1 -0
  4. package/bin/EphemeralMediaSession.js +226 -0
  5. package/bin/EphemeralMediaSession.js.map +1 -0
  6. package/bin/EphemeralMediaSessionCoordinator.d.ts +228 -0
  7. package/bin/EphemeralMediaSessionCoordinator.d.ts.map +1 -0
  8. package/bin/EphemeralMediaSessionCoordinator.js +396 -0
  9. package/bin/EphemeralMediaSessionCoordinator.js.map +1 -0
  10. package/bin/EphemeralMediaSessionCoordinatorSuspension.d.ts +20 -0
  11. package/bin/EphemeralMediaSessionCoordinatorSuspension.d.ts.map +1 -0
  12. package/bin/EphemeralMediaSessionCoordinatorSuspension.js +28 -0
  13. package/bin/EphemeralMediaSessionCoordinatorSuspension.js.map +1 -0
  14. package/bin/IMediaPlayer.d.ts +21 -0
  15. package/bin/IMediaPlayer.d.ts.map +1 -0
  16. package/bin/IMediaPlayer.js +7 -0
  17. package/bin/IMediaPlayer.js.map +1 -0
  18. package/bin/LiveMediaSession.d.ts +96 -0
  19. package/bin/LiveMediaSession.d.ts.map +1 -0
  20. package/bin/LiveMediaSession.js +236 -0
  21. package/bin/LiveMediaSession.js.map +1 -0
  22. package/bin/LiveMediaSessionCoordinator.d.ts +239 -0
  23. package/bin/LiveMediaSessionCoordinator.d.ts.map +1 -0
  24. package/bin/LiveMediaSessionCoordinator.js +477 -0
  25. package/bin/LiveMediaSessionCoordinator.js.map +1 -0
  26. package/bin/LiveMediaSessionCoordinatorSuspension.d.ts +20 -0
  27. package/bin/LiveMediaSessionCoordinatorSuspension.d.ts.map +1 -0
  28. package/bin/LiveMediaSessionCoordinatorSuspension.js +28 -0
  29. package/bin/LiveMediaSessionCoordinatorSuspension.js.map +1 -0
  30. package/bin/MediaPlayerSynchronizer.d.ts +174 -0
  31. package/bin/MediaPlayerSynchronizer.d.ts.map +1 -0
  32. package/bin/MediaPlayerSynchronizer.js +492 -0
  33. package/bin/MediaPlayerSynchronizer.js.map +1 -0
  34. package/bin/MediaSessionActionThrottler.d.ts +12 -0
  35. package/bin/MediaSessionActionThrottler.d.ts.map +1 -0
  36. package/bin/MediaSessionActionThrottler.js +14 -0
  37. package/bin/MediaSessionActionThrottler.js.map +1 -0
  38. package/bin/MediaSessionExtensions.d.ts +35 -0
  39. package/bin/MediaSessionExtensions.d.ts.map +1 -0
  40. package/bin/MediaSessionExtensions.js +13 -0
  41. package/bin/MediaSessionExtensions.js.map +1 -0
  42. package/bin/RepeatedActionThrottler.d.ts +20 -0
  43. package/bin/RepeatedActionThrottler.d.ts.map +1 -0
  44. package/bin/RepeatedActionThrottler.js +63 -0
  45. package/bin/RepeatedActionThrottler.js.map +1 -0
  46. package/bin/VolumeLimiter.d.ts +70 -0
  47. package/bin/VolumeLimiter.d.ts.map +1 -0
  48. package/bin/VolumeLimiter.js +170 -0
  49. package/bin/VolumeLimiter.js.map +1 -0
  50. package/bin/VolumeManager.d.ts +84 -0
  51. package/bin/VolumeManager.d.ts.map +1 -0
  52. package/bin/VolumeManager.js +175 -0
  53. package/bin/VolumeManager.js.map +1 -0
  54. package/bin/index.d.ts +14 -0
  55. package/bin/index.d.ts.map +1 -0
  56. package/bin/index.js +30 -0
  57. package/bin/index.js.map +1 -0
  58. package/bin/internals/GroupCoordinatorState.d.ts +94 -0
  59. package/bin/internals/GroupCoordinatorState.d.ts.map +1 -0
  60. package/bin/internals/GroupCoordinatorState.js +408 -0
  61. package/bin/internals/GroupCoordinatorState.js.map +1 -0
  62. package/bin/internals/GroupPlaybackPosition.d.ts +68 -0
  63. package/bin/internals/GroupPlaybackPosition.d.ts.map +1 -0
  64. package/bin/internals/GroupPlaybackPosition.js +167 -0
  65. package/bin/internals/GroupPlaybackPosition.js.map +1 -0
  66. package/bin/internals/GroupPlaybackTrack.d.ts +46 -0
  67. package/bin/internals/GroupPlaybackTrack.d.ts.map +1 -0
  68. package/bin/internals/GroupPlaybackTrack.js +122 -0
  69. package/bin/internals/GroupPlaybackTrack.js.map +1 -0
  70. package/bin/internals/GroupPlaybackTrackData.d.ts +40 -0
  71. package/bin/internals/GroupPlaybackTrackData.d.ts.map +1 -0
  72. package/bin/internals/GroupPlaybackTrackData.js +70 -0
  73. package/bin/internals/GroupPlaybackTrackData.js.map +1 -0
  74. package/bin/internals/GroupTransportState.d.ts +50 -0
  75. package/bin/internals/GroupTransportState.d.ts.map +1 -0
  76. package/bin/internals/GroupTransportState.js +112 -0
  77. package/bin/internals/GroupTransportState.js.map +1 -0
  78. package/bin/internals/consts.d.ts +76 -0
  79. package/bin/internals/consts.d.ts.map +1 -0
  80. package/bin/internals/consts.js +85 -0
  81. package/bin/internals/consts.js.map +1 -0
  82. package/bin/internals/index.d.ts +11 -0
  83. package/bin/internals/index.d.ts.map +1 -0
  84. package/bin/internals/index.js +27 -0
  85. package/bin/internals/index.js.map +1 -0
  86. package/package.json +4 -4
  87. package/src/LiveMediaSession.ts +24 -12
  88. package/src/LiveMediaSessionCoordinator.ts +101 -29
  89. package/src/MediaPlayerSynchronizer.ts +30 -14
  90. package/src/internals/GroupCoordinatorState.ts +49 -35
  91. package/src/internals/GroupPlaybackPosition.ts +6 -2
  92. package/src/internals/GroupPlaybackTrack.ts +2 -2
  93. package/src/internals/GroupPlaybackTrackData.ts +2 -2
  94. package/src/internals/GroupTransportState.ts +11 -4
  95. package/src/internals/consts.ts +4 -0
  96. package/src/test/GroupPlaybackPosition.spec.ts +0 -600
  97. package/src/test/GroupPlaybackTrack.spec.ts +0 -122
  98. package/src/test/SharedMediaSession.spec.ts +0 -149
  99. package/src/test/SharedMediaSessionCoordinator.spec.ts +0 -271
  100. package/src/test/VolumeManager.spec.ts +0 -219
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupPlaybackPosition.js","sourceRoot":"","sources":["../../src/internals/GroupPlaybackPosition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the Microsoft Live Share SDK License.
4
+ */
5
+ /// <reference types="node" />
6
+ import { ILiveEvent } from "@microsoft/live-share";
7
+ import EventEmitter from "events";
8
+ import { IMediaPlayerState } from "../LiveMediaSessionCoordinator";
9
+ import { CoordinationWaitPoint, ExtendedMediaMetadata } from "../MediaSessionExtensions";
10
+ /**
11
+ * @hidden
12
+ */
13
+ export interface IPlaybackTrack {
14
+ metadata: ExtendedMediaMetadata | null;
15
+ waitPoints: CoordinationWaitPoint[];
16
+ timestamp: number;
17
+ clientId: string;
18
+ }
19
+ /**
20
+ * @hidden
21
+ */
22
+ export declare enum GroupPlaybackTrackEvents {
23
+ trackChange = "trackChange"
24
+ }
25
+ /**
26
+ * @hidden
27
+ */
28
+ export interface IPlaybackTrackChangeEvent extends ILiveEvent {
29
+ metadata: ExtendedMediaMetadata | null;
30
+ }
31
+ /**
32
+ * @hidden
33
+ */
34
+ export declare class GroupPlaybackTrack extends EventEmitter {
35
+ private readonly _getMediaPlayerState;
36
+ private _current;
37
+ constructor(getMediaPlayerState: () => IMediaPlayerState);
38
+ get current(): Readonly<IPlaybackTrack>;
39
+ get metadata(): ExtendedMediaMetadata | null;
40
+ addWaitPoint(waitPoint: CoordinationWaitPoint): boolean;
41
+ findNextWaitPoint(lastWaitPoint: CoordinationWaitPoint | undefined): CoordinationWaitPoint | undefined;
42
+ updateTrack(track: IPlaybackTrack): boolean;
43
+ compare(metadata: ExtendedMediaMetadata | null): boolean;
44
+ static compareMetadata(current: ExtendedMediaMetadata | null, metadata: ExtendedMediaMetadata | null): boolean;
45
+ }
46
+ //# sourceMappingURL=GroupPlaybackTrack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupPlaybackTrack.d.ts","sourceRoot":"","sources":["../../src/internals/GroupPlaybackTrack.ts"],"names":[],"mappings":"AAAA;;;GAGG;;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EACH,qBAAqB,EACrB,qBAAqB,EACxB,MAAM,2BAA2B,CAAC;AAEnC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACvC,UAAU,EAAE,qBAAqB,EAAE,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,oBAAY,wBAAwB;IAChC,WAAW,gBAAgB;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,UAAU;IACzD,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAAC;CAC1C;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAChD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA0B;IAC/D,OAAO,CAAC,QAAQ,CAAiB;gBAErB,mBAAmB,EAAE,MAAM,iBAAiB;IAWxD,IAAW,OAAO,IAAI,QAAQ,CAAC,cAAc,CAAC,CAO7C;IAED,IAAW,QAAQ,IAAI,qBAAqB,GAAG,IAAI,CAElD;IAEM,YAAY,CAAC,SAAS,EAAE,qBAAqB,GAAG,OAAO;IAkBvD,iBAAiB,CACpB,aAAa,EAAE,qBAAqB,GAAG,SAAS,GACjD,qBAAqB,GAAG,SAAS;IAa7B,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO;IAsD3C,OAAO,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,GAAG,OAAO;WAOjD,eAAe,CACzB,OAAO,EAAE,qBAAqB,GAAG,IAAI,EACrC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,GACvC,OAAO;CAUb"}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) Microsoft Corporation. All rights reserved.
4
+ * Licensed under the Microsoft Live Share SDK License.
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.GroupPlaybackTrack = exports.GroupPlaybackTrackEvents = void 0;
11
+ const events_1 = __importDefault(require("events"));
12
+ /**
13
+ * @hidden
14
+ */
15
+ var GroupPlaybackTrackEvents;
16
+ (function (GroupPlaybackTrackEvents) {
17
+ GroupPlaybackTrackEvents["trackChange"] = "trackChange";
18
+ })(GroupPlaybackTrackEvents = exports.GroupPlaybackTrackEvents || (exports.GroupPlaybackTrackEvents = {}));
19
+ /**
20
+ * @hidden
21
+ */
22
+ class GroupPlaybackTrack extends events_1.default {
23
+ constructor(getMediaPlayerState) {
24
+ super();
25
+ this._current = {
26
+ metadata: null,
27
+ waitPoints: [],
28
+ timestamp: 0,
29
+ clientId: "",
30
+ };
31
+ this._getMediaPlayerState = getMediaPlayerState;
32
+ }
33
+ get current() {
34
+ // Populate with sessions current metadata if null
35
+ if (!this._current.metadata) {
36
+ this._current.metadata = this._getMediaPlayerState().metadata;
37
+ }
38
+ return this._current;
39
+ }
40
+ get metadata() {
41
+ return this.current.metadata;
42
+ }
43
+ addWaitPoint(waitPoint) {
44
+ for (let i = 0; i < this._current.waitPoints.length; i++) {
45
+ const current = this._current.waitPoints[i];
46
+ if (current.position == waitPoint.position) {
47
+ // Already exists
48
+ return false;
49
+ }
50
+ else if (current.position > waitPoint.position) {
51
+ // Insert before current position
52
+ this._current.waitPoints.splice(i, 0, waitPoint);
53
+ return true;
54
+ }
55
+ }
56
+ // Append to list
57
+ this._current.waitPoints.push(waitPoint);
58
+ return true;
59
+ }
60
+ findNextWaitPoint(lastWaitPoint) {
61
+ const waitPoints = this._current.waitPoints || [];
62
+ for (const waitPoint of waitPoints) {
63
+ if (lastWaitPoint && waitPoint.position <= lastWaitPoint.position) {
64
+ continue;
65
+ }
66
+ return waitPoint;
67
+ }
68
+ return undefined;
69
+ }
70
+ updateTrack(track) {
71
+ // Guard against missing waitPoints collection
72
+ if (!Array.isArray(track.waitPoints)) {
73
+ track.waitPoints = [];
74
+ }
75
+ // Is this the same track?
76
+ const current = this.current;
77
+ if (GroupPlaybackTrack.compareMetadata(this.current.metadata, track.metadata)) {
78
+ // Add any dynamic wait points.
79
+ track.waitPoints.forEach((waitPoint) => {
80
+ this.addWaitPoint(waitPoint);
81
+ });
82
+ // Ignore if same playback state
83
+ if (track.timestamp == current.timestamp &&
84
+ track.clientId == current.clientId) {
85
+ return false;
86
+ }
87
+ }
88
+ // Ignore state changes that are older
89
+ if (track.timestamp < current.timestamp) {
90
+ return false;
91
+ }
92
+ // Ignore state changes that are from a clientId that sorts higher then the current one.
93
+ // - current.clientId should not be empty if current.timestamp != 0
94
+ if (track.timestamp == current.timestamp &&
95
+ track.clientId.localeCompare(current.clientId) > 0) {
96
+ return false;
97
+ }
98
+ // Update current track
99
+ this._current = track;
100
+ // Notify listeners
101
+ this.emit(GroupPlaybackTrackEvents.trackChange, {
102
+ name: GroupPlaybackTrackEvents.trackChange,
103
+ metadata: track.metadata,
104
+ });
105
+ return true;
106
+ }
107
+ compare(metadata) {
108
+ return GroupPlaybackTrack.compareMetadata(this.current.metadata, metadata);
109
+ }
110
+ static compareMetadata(current, metadata) {
111
+ // Only compare when we have two metadata instances
112
+ if (current && metadata) {
113
+ return JSON.stringify(current) == JSON.stringify(metadata);
114
+ }
115
+ else if (!current && metadata) {
116
+ return false;
117
+ }
118
+ return true;
119
+ }
120
+ }
121
+ exports.GroupPlaybackTrack = GroupPlaybackTrack;
122
+ //# sourceMappingURL=GroupPlaybackTrack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupPlaybackTrack.js","sourceRoot":"","sources":["../../src/internals/GroupPlaybackTrack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the Microsoft Live Share SDK License.
4
+ */
5
+ /// <reference types="node" />
6
+ import { ILiveEvent } from "@microsoft/live-share";
7
+ import EventEmitter from "events";
8
+ import { GroupPlaybackTrack } from "./GroupPlaybackTrack";
9
+ /**
10
+ * @hidden
11
+ */
12
+ export interface IPlaybackTrackData {
13
+ data: object | null;
14
+ timestamp: number;
15
+ clientId: string;
16
+ }
17
+ /**
18
+ * @hidden
19
+ */
20
+ export declare enum PlaybackTrackDataEvents {
21
+ dataChange = "dataChange"
22
+ }
23
+ /**
24
+ * @hidden
25
+ */
26
+ export interface IPlaybackTrackDataChangeEvent extends ILiveEvent {
27
+ data: object | null;
28
+ }
29
+ /**
30
+ * @hidden
31
+ */
32
+ export declare class GroupPlaybackTrackData extends EventEmitter {
33
+ private _track;
34
+ private _current;
35
+ constructor(track: GroupPlaybackTrack);
36
+ get current(): Readonly<IPlaybackTrackData>;
37
+ get data(): object | null;
38
+ updateData(event: IPlaybackTrackData): boolean;
39
+ }
40
+ //# sourceMappingURL=GroupPlaybackTrackData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupPlaybackTrackData.d.ts","sourceRoot":"","sources":["../../src/internals/GroupPlaybackTrackData.ts"],"names":[],"mappings":"AAAA;;;GAGG;;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EACH,kBAAkB,EAErB,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,oBAAY,uBAAuB;IAC/B,UAAU,eAAe;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,6BAA8B,SAAQ,UAAU;IAC7D,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,YAAY;IACpD,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,QAAQ,CAAqB;gBAEzB,KAAK,EAAE,kBAAkB;IAgBrC,IAAW,OAAO,IAAI,QAAQ,CAAC,kBAAkB,CAAC,CAEjD;IAED,IAAW,IAAI,IAAI,MAAM,GAAG,IAAI,CAE/B;IAEM,UAAU,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO;CA+BxD"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) Microsoft Corporation. All rights reserved.
4
+ * Licensed under the Microsoft Live Share SDK License.
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.GroupPlaybackTrackData = exports.PlaybackTrackDataEvents = void 0;
11
+ const events_1 = __importDefault(require("events"));
12
+ const GroupPlaybackTrack_1 = require("./GroupPlaybackTrack");
13
+ /**
14
+ * @hidden
15
+ */
16
+ var PlaybackTrackDataEvents;
17
+ (function (PlaybackTrackDataEvents) {
18
+ PlaybackTrackDataEvents["dataChange"] = "dataChange";
19
+ })(PlaybackTrackDataEvents = exports.PlaybackTrackDataEvents || (exports.PlaybackTrackDataEvents = {}));
20
+ /**
21
+ * @hidden
22
+ */
23
+ class GroupPlaybackTrackData extends events_1.default {
24
+ constructor(track) {
25
+ super();
26
+ this._track = track;
27
+ this._current = { data: null, timestamp: 0, clientId: "" };
28
+ // Listen for track changes
29
+ this._track.on(GroupPlaybackTrack_1.GroupPlaybackTrackEvents.trackChange, () => {
30
+ // Track changed so reset state to empty object
31
+ this._current = {
32
+ data: null,
33
+ timestamp: this._track.current.timestamp,
34
+ clientId: this._track.current.clientId,
35
+ };
36
+ });
37
+ }
38
+ get current() {
39
+ return this._current;
40
+ }
41
+ get data() {
42
+ return this.current.data;
43
+ }
44
+ updateData(event) {
45
+ // Ignore state changes that are older
46
+ const current = this.current;
47
+ if (event.timestamp < current.timestamp) {
48
+ return false;
49
+ }
50
+ // Ignore state changes that have the same timestamp and the clientId sorts higher.
51
+ if (event.timestamp == current.timestamp &&
52
+ event.clientId.localeCompare(current.clientId) > 0) {
53
+ return false;
54
+ }
55
+ // Ignore state changes for same data object
56
+ if (JSON.stringify(current.data) == JSON.stringify(event.data)) {
57
+ return false;
58
+ }
59
+ // Update current data
60
+ this._current = event;
61
+ // Notify listeners
62
+ this.emit(PlaybackTrackDataEvents.dataChange, {
63
+ type: PlaybackTrackDataEvents.dataChange,
64
+ data: event.data,
65
+ });
66
+ return true;
67
+ }
68
+ }
69
+ exports.GroupPlaybackTrackData = GroupPlaybackTrackData;
70
+ //# sourceMappingURL=GroupPlaybackTrackData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupPlaybackTrackData.js","sourceRoot":"","sources":["../../src/internals/GroupPlaybackTrackData.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;AAGH,oDAAkC;AAClC,6DAG8B;AAW9B;;GAEG;AACH,IAAY,uBAEX;AAFD,WAAY,uBAAuB;IAC/B,oDAAyB,CAAA;AAC7B,CAAC,EAFW,uBAAuB,GAAvB,+BAAuB,KAAvB,+BAAuB,QAElC;AASD;;GAEG;AACH,MAAa,sBAAuB,SAAQ,gBAAY;IAIpD,YAAY,KAAyB;QACjC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QAE3D,2BAA2B;QAC3B,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,6CAAwB,CAAC,WAAW,EAAE,GAAG,EAAE;YACtD,+CAA+C;YAC/C,IAAI,CAAC,QAAQ,GAAG;gBACZ,IAAI,EAAE,IAAI;gBACV,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS;gBACxC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ;aACzC,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAED,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;IAEM,UAAU,CAAC,KAAyB;QACvC,sCAAsC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE;YACrC,OAAO,KAAK,CAAC;SAChB;QAED,mFAAmF;QACnF,IACI,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS;YACpC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EACpD;YACE,OAAO,KAAK,CAAC;SAChB;QAED,4CAA4C;QAC5C,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAC5D,OAAO,KAAK,CAAC;SAChB;QAED,sBAAsB;QACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAEtB,mBAAmB;QACnB,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE;YAC1C,IAAI,EAAE,uBAAuB,CAAC,UAAU;YACxC,IAAI,EAAE,KAAK,CAAC,IAAI;SACnB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AA3DD,wDA2DC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the Microsoft Live Share SDK License.
4
+ */
5
+ /// <reference types="node" />
6
+ import { ILiveEvent, LiveShareRuntime } from "@microsoft/live-share";
7
+ import EventEmitter from "events";
8
+ import { IMediaPlayerState } from "../LiveMediaSessionCoordinator";
9
+ import { ExtendedMediaSessionPlaybackState, ExtendedMediaSessionAction } from "../MediaSessionExtensions";
10
+ import { GroupPlaybackTrack } from "./GroupPlaybackTrack";
11
+ /**
12
+ * @hidden
13
+ */
14
+ export interface ITransportState {
15
+ playbackState: ExtendedMediaSessionPlaybackState;
16
+ startPosition: number;
17
+ timestamp: number;
18
+ clientId: string;
19
+ }
20
+ /**
21
+ * @hidden
22
+ */
23
+ export declare enum GroupTransportStateEvents {
24
+ transportStateChange = "transportStateChange"
25
+ }
26
+ /**
27
+ * @hidden
28
+ */
29
+ export interface ITransportStateChangeEvent extends ILiveEvent {
30
+ action: ExtendedMediaSessionAction;
31
+ seekTime?: number;
32
+ }
33
+ /**
34
+ * @hidden
35
+ */
36
+ export declare class GroupTransportState extends EventEmitter {
37
+ private readonly _getMediaPlayerState;
38
+ private _track;
39
+ private readonly _liveRuntime;
40
+ private _current;
41
+ constructor(track: GroupPlaybackTrack, getMediaPlayerState: () => IMediaPlayerState, liveRuntime: LiveShareRuntime);
42
+ get current(): Readonly<ITransportState>;
43
+ get playbackState(): ExtendedMediaSessionPlaybackState;
44
+ get startPosition(): number;
45
+ get timestamp(): number;
46
+ get track(): GroupPlaybackTrack;
47
+ compare(state: ITransportState): boolean;
48
+ updateState(state: ITransportState): boolean;
49
+ }
50
+ //# sourceMappingURL=GroupTransportState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupTransportState.d.ts","sourceRoot":"","sources":["../../src/internals/GroupTransportState.ts"],"names":[],"mappings":"AAAA;;;GAGG;;AAEH,OAAO,EACH,UAAU,EACV,gBAAgB,EAEnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EACH,iCAAiC,EACjC,0BAA0B,EAC7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACH,kBAAkB,EAErB,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,aAAa,EAAE,iCAAiC,CAAC;IACjD,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,oBAAY,yBAAyB;IACjC,oBAAoB,yBAAyB;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,UAAU;IAC1D,MAAM,EAAE,0BAA0B,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,YAAY;IACjD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA0B;IAC/D,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;IAChD,OAAO,CAAC,QAAQ,CAAkB;gBAG9B,KAAK,EAAE,kBAAkB,EACzB,mBAAmB,EAAE,MAAM,iBAAiB,EAC5C,WAAW,EAAE,gBAAgB;IAyBjC,IAAW,OAAO,IAAI,QAAQ,CAAC,eAAe,CAAC,CAE9C;IAED,IAAW,aAAa,IAAI,iCAAiC,CAE5D;IAED,IAAW,aAAa,IAAI,MAAM,CAEjC;IAED,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,IAAW,KAAK,IAAI,kBAAkB,CAErC;IAEM,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO;IAOxC,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO;CAqDtD"}
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) Microsoft Corporation. All rights reserved.
4
+ * Licensed under the Microsoft Live Share SDK License.
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.GroupTransportState = exports.GroupTransportStateEvents = void 0;
11
+ const events_1 = __importDefault(require("events"));
12
+ const GroupPlaybackTrack_1 = require("./GroupPlaybackTrack");
13
+ /**
14
+ * @hidden
15
+ */
16
+ var GroupTransportStateEvents;
17
+ (function (GroupTransportStateEvents) {
18
+ GroupTransportStateEvents["transportStateChange"] = "transportStateChange";
19
+ })(GroupTransportStateEvents = exports.GroupTransportStateEvents || (exports.GroupTransportStateEvents = {}));
20
+ /**
21
+ * @hidden
22
+ */
23
+ class GroupTransportState extends events_1.default {
24
+ constructor(track, getMediaPlayerState, liveRuntime) {
25
+ super();
26
+ this._liveRuntime = liveRuntime;
27
+ this._getMediaPlayerState = getMediaPlayerState;
28
+ this._track = track;
29
+ this._current = {
30
+ playbackState: "none",
31
+ startPosition: 0.0,
32
+ timestamp: 0,
33
+ clientId: "",
34
+ };
35
+ // Listen for track changes
36
+ this._track.on(GroupPlaybackTrack_1.GroupPlaybackTrackEvents.trackChange, () => {
37
+ // Track changed so reset state to stopped ad position 0.0
38
+ this._current = {
39
+ playbackState: "none",
40
+ startPosition: 0.0,
41
+ timestamp: this._track.current.timestamp,
42
+ clientId: this._track.current.clientId,
43
+ };
44
+ });
45
+ }
46
+ get current() {
47
+ return this._current;
48
+ }
49
+ get playbackState() {
50
+ return this.current.playbackState;
51
+ }
52
+ get startPosition() {
53
+ return this.current.startPosition;
54
+ }
55
+ get timestamp() {
56
+ return this.current.timestamp;
57
+ }
58
+ get track() {
59
+ return this._track;
60
+ }
61
+ compare(state) {
62
+ return (this.current.playbackState == state.playbackState &&
63
+ this.current.startPosition == state.startPosition);
64
+ }
65
+ updateState(state) {
66
+ // Ignore if same playback state and start position
67
+ if (this.compare(state)) {
68
+ return false;
69
+ }
70
+ // Ignore state changes that are older
71
+ const originalState = this.current;
72
+ if (state.timestamp < originalState.timestamp) {
73
+ return false;
74
+ }
75
+ // Ignore state changes that have the same timestamp and the clientId sorts higher.
76
+ if (state.timestamp == originalState.timestamp &&
77
+ state.clientId.localeCompare(originalState.clientId) > 0) {
78
+ return false;
79
+ }
80
+ // Update playback state
81
+ this._current = state;
82
+ // Trigger transport change
83
+ const playerState = this._getMediaPlayerState().playbackState;
84
+ if (originalState.playbackState == state.playbackState &&
85
+ playerState != "ended") {
86
+ this.emit(GroupTransportStateEvents.transportStateChange, {
87
+ type: GroupTransportStateEvents.transportStateChange,
88
+ action: "seekto",
89
+ seekTime: state.startPosition,
90
+ });
91
+ }
92
+ else if (state.playbackState == "playing") {
93
+ const now = this._liveRuntime.getTimestamp();
94
+ const projectedPosition = state.startPosition + (now - state.timestamp) / 1000;
95
+ this.emit(GroupTransportStateEvents.transportStateChange, {
96
+ type: GroupTransportStateEvents.transportStateChange,
97
+ action: "play",
98
+ seekTime: projectedPosition,
99
+ });
100
+ }
101
+ else {
102
+ this.emit(GroupTransportStateEvents.transportStateChange, {
103
+ type: GroupTransportStateEvents.transportStateChange,
104
+ action: "pause",
105
+ seekTime: state.startPosition,
106
+ });
107
+ }
108
+ return true;
109
+ }
110
+ }
111
+ exports.GroupTransportState = GroupTransportState;
112
+ //# sourceMappingURL=GroupTransportState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupTransportState.js","sourceRoot":"","sources":["../../src/internals/GroupTransportState.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the Microsoft Live Share SDK License.
4
+ */
5
+ /**
6
+ * @hidden
7
+ * List of telemetry events. Wrap with a call to transmit() if the event should be transmitted to
8
+ * the telemetry service.
9
+ */
10
+ export declare const TelemetryEvents: {
11
+ MediaPlayerSynchronizer: {
12
+ SynchronizationStarted: string;
13
+ PlayerEvent: string;
14
+ PlayAction: string;
15
+ PauseAction: string;
16
+ SeekToAction: string;
17
+ CatchupAction: string;
18
+ SetTrackAction: string;
19
+ DataChangeAction: string;
20
+ UserTappedVideoToPlay: string;
21
+ UserTappedVideoToPlayError: string;
22
+ PlaybackRateChangeBlocked: string;
23
+ PlayerBlockedOperation: string;
24
+ SeekingPlayerToStartPosition: string;
25
+ BeginSeekCalled: string;
26
+ EndSeekCalled: string;
27
+ PlayCalled: string;
28
+ PauseCalled: string;
29
+ SeekToCalled: string;
30
+ SetTrackCalled: string;
31
+ SetTrackDataCalled: string;
32
+ };
33
+ MediaSession: {
34
+ PlayAction: string;
35
+ PauseAction: string;
36
+ SeekToAction: string;
37
+ CatchUpAction: string;
38
+ SetTrackAction: string;
39
+ DataChangeAction: string;
40
+ BeginPositionUpdateTimer: string;
41
+ };
42
+ SessionCoordinator: {
43
+ PlayCalled: string;
44
+ PauseCalled: string;
45
+ SeekToCalled: string;
46
+ SetTrackCalled: string;
47
+ SetTrackDataCalled: string;
48
+ BeginSuspension: string;
49
+ BeginSuspensionAndWait: string;
50
+ EndSuspension: string;
51
+ EndSuspensionAndWait: string;
52
+ RemoteJoinReceived: string;
53
+ RemoteSetTrackReceived: string;
54
+ RemoteSetTrackDataReceived: string;
55
+ RemotePlayReceived: string;
56
+ RemotePauseReceived: string;
57
+ RemoteSeekToReceived: string;
58
+ PositionUpdateEventError: string;
59
+ SendJoinedEventError: string;
60
+ };
61
+ GroupCoordinator: {
62
+ TrackChanged: string;
63
+ TrackChangeDelayed: string;
64
+ TrackDataChanged: string;
65
+ TrackDataChangeDelayed: string;
66
+ TransportStateChanged: string;
67
+ TransportStateChangeDelayed: string;
68
+ BeginSoftSuspension: string;
69
+ CheckingForSyncIssues: string;
70
+ TrackOutOfSync: string;
71
+ TrackDataOutOfSync: string;
72
+ TransportOutOfSync: string;
73
+ PositionOutOfSync: string;
74
+ };
75
+ };
76
+ //# sourceMappingURL=consts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../src/internals/consts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoF3B,CAAC"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) Microsoft Corporation. All rights reserved.
4
+ * Licensed under the Microsoft Live Share SDK License.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.TelemetryEvents = void 0;
8
+ /**
9
+ * @hidden
10
+ * List of telemetry events. Wrap with a call to transmit() if the event should be transmitted to
11
+ * the telemetry service.
12
+ */
13
+ exports.TelemetryEvents = {
14
+ MediaPlayerSynchronizer: {
15
+ SynchronizationStarted: "MediaPlayerSynchronizer:SynchronizationStarted",
16
+ PlayerEvent: "MediaPlayerSynchronizer:PlayerEvent",
17
+ PlayAction: "MediaPlayerSynchronizer:PlayAction",
18
+ PauseAction: "MediaPlayerSynchronizer:PauseAction",
19
+ SeekToAction: "MediaPlayerSynchronizer:SeekToAction",
20
+ CatchupAction: "MediaPlayerSynchronizer:CatchupAction",
21
+ SetTrackAction: "MediaPlayerSynchronizer:SetTrackAction",
22
+ DataChangeAction: "MediaPlayerSynchronizer:DataChangeAction",
23
+ UserTappedVideoToPlay: transmit("MediaPlayerSynchronizer:UserTappedVideoToPlay"),
24
+ UserTappedVideoToPlayError: "MediaPlayerSynchronizer:UserTappedVideoToPlayError",
25
+ PlaybackRateChangeBlocked: "MediaPlayerSynchronizer:PlaybackRateChangeBlocked",
26
+ PlayerBlockedOperation: transmit("MediaPlayerSynchronizer:PlayerBlockedOperation"),
27
+ SeekingPlayerToStartPosition: "MediaPlayerSynchronizer:SeekingPlayerToStartPosition",
28
+ BeginSeekCalled: "MediaPlayerSynchronizer:BeginSeekCalled",
29
+ EndSeekCalled: "MediaPlayerSynchronizer:EndSeekCalled",
30
+ PlayCalled: "MediaPlayerSynchronizer:PlayCalled",
31
+ PauseCalled: "MediaPlayerSynchronizer:PauseCalled",
32
+ SeekToCalled: "MediaPlayerSynchronizer:SeekToCalled",
33
+ SetTrackCalled: "MediaPlayerSynchronizer:SetTrackCalled",
34
+ SetTrackDataCalled: "MediaPlayerSynchronizer:SetTrackDataCalled",
35
+ },
36
+ MediaSession: {
37
+ PlayAction: transmit("MediaSession:PlayAction"),
38
+ PauseAction: transmit("MediaSession:PauseAction"),
39
+ SeekToAction: transmit("MediaSession:SeekToAction"),
40
+ CatchUpAction: transmit("MediaSession:CatchUpAction"),
41
+ SetTrackAction: transmit("MediaSession:SetTrackAction"),
42
+ DataChangeAction: "MediaSession:DataChangeAction",
43
+ BeginPositionUpdateTimer: "MediaSession:BeginPositionUpdateTimer",
44
+ },
45
+ SessionCoordinator: {
46
+ PlayCalled: transmit("SessionCoordinator:PlayCalled"),
47
+ PauseCalled: transmit("SessionCoordinator:PauseCalled"),
48
+ SeekToCalled: transmit("SessionCoordinator:SeekToCalled"),
49
+ SetTrackCalled: transmit("SessionCoordinator:SetTrackCalled"),
50
+ SetTrackDataCalled: "SessionCoordinator:SetTrackDataCalled",
51
+ BeginSuspension: "SessionCoordinator:BeginSuspension",
52
+ BeginSuspensionAndWait: transmit("SessionCoordinator:BeginSuspensionAndWait"),
53
+ EndSuspension: "SessionCoordinator:EndSuspension",
54
+ EndSuspensionAndWait: transmit("SessionCoordinator:EndSuspensionAndWait"),
55
+ RemoteJoinReceived: "SessionCoordinator:RemoteJoinReceived",
56
+ RemoteSetTrackReceived: transmit("SessionCoordinator:RemoteSetTrackReceived"),
57
+ RemoteSetTrackDataReceived: transmit("SessionCoordinator:RemoteSetTrackDataReceived"),
58
+ RemotePlayReceived: transmit("SessionCoordinator:RemotePlayReceived"),
59
+ RemotePauseReceived: transmit("SessionCoordinator:RemotePauseReceived"),
60
+ RemoteSeekToReceived: transmit("SessionCoordinator:RemoteSeekToReceived"),
61
+ PositionUpdateEventError: "SessionCoordinator:PositionUpdateEventError",
62
+ SendJoinedEventError: "SessionCoordinator:SendJoinedEventError",
63
+ },
64
+ GroupCoordinator: {
65
+ TrackChanged: "GroupCoordinator:TrackChanged",
66
+ TrackChangeDelayed: "GroupCoordinator:TrackChangeDelayed",
67
+ TrackDataChanged: "GroupCoordinator:TrackDataChanged",
68
+ TrackDataChangeDelayed: "GroupCoordinator:TrackDataChangeDelayed",
69
+ TransportStateChanged: "GroupCoordinator:TransportStateChanged",
70
+ TransportStateChangeDelayed: "GroupCoordinator:TransportStateChangeDelayed",
71
+ BeginSoftSuspension: "GroupCoordinator:BeginSoftSuspension",
72
+ CheckingForSyncIssues: "GroupCoordinator:CheckingForSyncIssues",
73
+ TrackOutOfSync: transmit("GroupCoordinator:TrackOutOfSync"),
74
+ TrackDataOutOfSync: transmit("GroupCoordinator:TrackDataOutOfSync"),
75
+ TransportOutOfSync: transmit("GroupCoordinator:TransportOutOfSync"),
76
+ PositionOutOfSync: transmit("GroupCoordinator:PositionOutOfSync"),
77
+ },
78
+ };
79
+ /**
80
+ * @hidden
81
+ */
82
+ function transmit(eventName) {
83
+ return `${eventName}#transmit`;
84
+ }
85
+ //# sourceMappingURL=consts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consts.js","sourceRoot":"","sources":["../../src/internals/consts.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH;;;;GAIG;AACU,QAAA,eAAe,GAAG;IAC3B,uBAAuB,EAAE;QACrB,sBAAsB,EAClB,gDAAgD;QACpD,WAAW,EAAE,qCAAqC;QAClD,UAAU,EAAE,oCAAoC;QAChD,WAAW,EAAE,qCAAqC;QAClD,YAAY,EAAE,sCAAsC;QACpD,aAAa,EAAE,uCAAuC;QACtD,cAAc,EAAE,wCAAwC;QACxD,gBAAgB,EAAE,0CAA0C;QAC5D,qBAAqB,EAAE,QAAQ,CAC3B,+CAA+C,CAClD;QACD,0BAA0B,EACtB,oDAAoD;QACxD,yBAAyB,EACrB,mDAAmD;QACvD,sBAAsB,EAAE,QAAQ,CAC5B,gDAAgD,CACnD;QACD,4BAA4B,EACxB,sDAAsD;QAC1D,eAAe,EAAE,yCAAyC;QAC1D,aAAa,EAAE,uCAAuC;QACtD,UAAU,EAAE,oCAAoC;QAChD,WAAW,EAAE,qCAAqC;QAClD,YAAY,EAAE,sCAAsC;QACpD,cAAc,EAAE,wCAAwC;QACxD,kBAAkB,EAAE,4CAA4C;KACnE;IACD,YAAY,EAAE;QACV,UAAU,EAAE,QAAQ,CAAC,yBAAyB,CAAC;QAC/C,WAAW,EAAE,QAAQ,CAAC,0BAA0B,CAAC;QACjD,YAAY,EAAE,QAAQ,CAAC,2BAA2B,CAAC;QACnD,aAAa,EAAE,QAAQ,CAAC,4BAA4B,CAAC;QACrD,cAAc,EAAE,QAAQ,CAAC,6BAA6B,CAAC;QACvD,gBAAgB,EAAE,+BAA+B;QACjD,wBAAwB,EAAE,uCAAuC;KACpE;IACD,kBAAkB,EAAE;QAChB,UAAU,EAAE,QAAQ,CAAC,+BAA+B,CAAC;QACrD,WAAW,EAAE,QAAQ,CAAC,gCAAgC,CAAC;QACvD,YAAY,EAAE,QAAQ,CAAC,iCAAiC,CAAC;QACzD,cAAc,EAAE,QAAQ,CAAC,mCAAmC,CAAC;QAC7D,kBAAkB,EAAE,uCAAuC;QAC3D,eAAe,EAAE,oCAAoC;QACrD,sBAAsB,EAAE,QAAQ,CAC5B,2CAA2C,CAC9C;QACD,aAAa,EAAE,kCAAkC;QACjD,oBAAoB,EAAE,QAAQ,CAC1B,yCAAyC,CAC5C;QACD,kBAAkB,EAAE,uCAAuC;QAC3D,sBAAsB,EAAE,QAAQ,CAC5B,2CAA2C,CAC9C;QACD,0BAA0B,EAAE,QAAQ,CAChC,+CAA+C,CAClD;QACD,kBAAkB,EAAE,QAAQ,CAAC,uCAAuC,CAAC;QACrE,mBAAmB,EAAE,QAAQ,CAAC,wCAAwC,CAAC;QACvE,oBAAoB,EAAE,QAAQ,CAC1B,yCAAyC,CAC5C;QACD,wBAAwB,EAAE,6CAA6C;QACvE,oBAAoB,EAAE,yCAAyC;KAClE;IACD,gBAAgB,EAAE;QACd,YAAY,EAAE,+BAA+B;QAC7C,kBAAkB,EAAE,qCAAqC;QACzD,gBAAgB,EAAE,mCAAmC;QACrD,sBAAsB,EAAE,yCAAyC;QACjE,qBAAqB,EAAE,wCAAwC;QAC/D,2BAA2B,EACvB,8CAA8C;QAClD,mBAAmB,EAAE,sCAAsC;QAC3D,qBAAqB,EAAE,wCAAwC;QAC/D,cAAc,EAAE,QAAQ,CAAC,iCAAiC,CAAC;QAC3D,kBAAkB,EAAE,QAAQ,CAAC,qCAAqC,CAAC;QACnE,kBAAkB,EAAE,QAAQ,CAAC,qCAAqC,CAAC;QACnE,iBAAiB,EAAE,QAAQ,CAAC,oCAAoC,CAAC;KACpE;CACJ,CAAC;AAEF;;GAEG;AACH,SAAS,QAAQ,CAAC,SAAiB;IAC/B,OAAO,GAAG,SAAS,WAAW,CAAC;AACnC,CAAC"}