shaka-player 2.5.4 → 2.5.5

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 (102) hide show
  1. package/.csslintrc +13 -0
  2. package/CHANGELOG.md +56 -0
  3. package/build/build.py +4 -1
  4. package/build/check.py +17 -0
  5. package/build/compiler.py +40 -0
  6. package/build/types/core +1 -0
  7. package/build/types/ui +4 -1
  8. package/demo/asset_card.js +41 -11
  9. package/demo/cast_receiver/receiver_app.css +19 -13
  10. package/demo/close_button.js +0 -6
  11. package/demo/common/asset.js +6 -1
  12. package/demo/common/assets.js +72 -14
  13. package/demo/demo.less +105 -16
  14. package/demo/index.html +8 -5
  15. package/demo/load.js +5 -7
  16. package/demo/main.js +81 -16
  17. package/dist/.csslintstamp +0 -0
  18. package/dist/controls.css +1 -1
  19. package/dist/controls.css.map +1 -1
  20. package/dist/demo.compiled.debug.js +46 -39
  21. package/dist/demo.compiled.debug.map +3 -3
  22. package/dist/demo.compiled.js +46 -39
  23. package/dist/demo.compiled.map +3 -3
  24. package/dist/demo.css +1 -1
  25. package/dist/demo.css.map +1 -1
  26. package/dist/deps.js +11 -7
  27. package/dist/receiver.compiled.debug.js +10 -6
  28. package/dist/receiver.compiled.debug.map +3 -3
  29. package/dist/receiver.compiled.js +10 -6
  30. package/dist/receiver.compiled.map +3 -3
  31. package/dist/shaka-player.compiled.debug.externs.js +123 -92
  32. package/dist/shaka-player.compiled.debug.js +113 -105
  33. package/dist/shaka-player.compiled.debug.map +4 -4
  34. package/dist/shaka-player.compiled.externs.js +123 -92
  35. package/dist/shaka-player.compiled.js +551 -548
  36. package/dist/shaka-player.compiled.map +4 -4
  37. package/dist/shaka-player.ui.debug.externs.js +170 -101
  38. package/dist/shaka-player.ui.debug.js +187 -188
  39. package/dist/shaka-player.ui.debug.map +4 -4
  40. package/dist/shaka-player.ui.externs.js +170 -101
  41. package/dist/shaka-player.ui.js +651 -651
  42. package/dist/shaka-player.ui.map +3 -3
  43. package/docs/tutorials/drm-config.md +1 -0
  44. package/docs/tutorials/fairplay.md +77 -0
  45. package/docs/tutorials/index.json +1 -0
  46. package/docs/tutorials/ui-customization.md +3 -0
  47. package/docs/tutorials/ui.md +3 -1
  48. package/externs/mediasession.js +16 -1
  49. package/externs/shaka/net.js +5 -1
  50. package/externs/shaka/player.js +136 -90
  51. package/externs/webkitmediakeys.js +4 -0
  52. package/lib/dash/content_protection.js +33 -1
  53. package/lib/dash/dash_parser.js +12 -4
  54. package/lib/hls/hls_parser.js +20 -4
  55. package/lib/media/drm_engine.js +29 -2
  56. package/lib/media/media_source_engine.js +7 -3
  57. package/lib/media/playhead.js +8 -3
  58. package/lib/media/streaming_engine.js +24 -8
  59. package/lib/media/video_wrapper.js +8 -3
  60. package/lib/net/networking_engine.js +1 -0
  61. package/lib/player.js +3 -2
  62. package/lib/polyfill/patchedmediakeys_apple.js +2 -72
  63. package/lib/util/error.js +12 -0
  64. package/lib/util/fairplay_utils.js +122 -0
  65. package/lib/util/player_configuration.js +5 -0
  66. package/lib/util/pssh.js +41 -0
  67. package/package.json +4 -3
  68. package/shaka-player.uncompiled.js +5 -1
  69. package/test/dash/dash_parser_content_protection_unit.js +35 -1
  70. package/test/dash/dash_parser_manifest_unit.js +31 -0
  71. package/test/hls/hls_live_unit.js +7 -1
  72. package/test/hls/hls_parser_unit.js +50 -0
  73. package/test/media/media_source_engine_integration.js +12 -0
  74. package/test/media/playhead_unit.js +2 -0
  75. package/test/player_external.js +3 -2
  76. package/test/player_integration.js +75 -0
  77. package/test/test/externs/jasmine.js +6 -0
  78. package/test/test/util/test_scheme.js +32 -1
  79. package/test/test/util/ui_utils.js +41 -0
  80. package/test/ui/ui_unit.js +129 -3
  81. package/ui/audio_language_selection.js +17 -96
  82. package/ui/big_play_button.js +61 -0
  83. package/ui/controls.js +111 -86
  84. package/ui/controls.less +3 -5
  85. package/ui/externs/ui.js +14 -2
  86. package/ui/fullscreen_button.js +2 -52
  87. package/ui/less/buttons.less +8 -8
  88. package/ui/less/containers.less +21 -21
  89. package/ui/less/general.less +11 -0
  90. package/ui/less/other_elements.less +2 -1
  91. package/ui/less/overflow_menu.less +11 -10
  92. package/ui/less/range_elements.less +6 -0
  93. package/ui/less/spinner.less +2 -0
  94. package/ui/pip_button.js +1 -1
  95. package/ui/{play_pause_button.js → play_button.js} +17 -47
  96. package/ui/resolution_selection.js +41 -104
  97. package/ui/seek_bar.js +15 -17
  98. package/ui/settings_menu.js +113 -0
  99. package/ui/small_play_button.js +73 -0
  100. package/ui/text_displayer.js +2 -2
  101. package/ui/text_selection.js +39 -105
  102. package/ui/ui.js +12 -0
package/demo/demo.less CHANGED
@@ -26,12 +26,10 @@
26
26
  @drawer-width: 550px;
27
27
 
28
28
  @mdl-footer-link-color: #9e9e9e; /* copied from MDL stylesheet */
29
- @mdl-button-color: rgb(68,138,255); /* copied from MDL stylesheet */
29
+ @mdl-button-color: rgb(63,81,181); /* copied from MDL stylesheet */
30
30
 
31
- /* The default color from MDL is too low-contrast on a white background. */
32
- .mdl-button--accent.mdl-button--accent {
33
- color: darken(@mdl-button-color, 20%);
34
- }
31
+ @progress-circle-size: 45px;
32
+ @progress-circle-thickness: 5px;
35
33
 
36
34
  /* This is a less mixin only, rather than a CSS class. MDL has an equivalent
37
35
  * class with the same name, which can be used in the application directly. */
@@ -53,6 +51,7 @@
53
51
  position: absolute;
54
52
  top: 10px;
55
53
  right: 10px;
54
+
56
55
  /* Give the button a round background, meant to look like the play button. */
57
56
  border-radius: 50%;
58
57
  width: 32px;
@@ -67,11 +66,16 @@ html, body {
67
66
 
68
67
  /* Give the FAB a drop shadow, that expands a little bit when moused over. */
69
68
  .mdl-button--fab {
70
- filter: drop-shadow(0 2px 5px #333333);
69
+ filter: drop-shadow(0 2px 5px #333);
71
70
  transition: 0.2s ease-in-out;
72
71
  }
72
+
73
73
  .mdl-button--fab:hover {
74
- filter: drop-shadow(0 2px 8px #333333);
74
+ filter: drop-shadow(0 2px 8px #333);
75
+ }
76
+
77
+ .input-container-label {
78
+ padding-right: 1em;
75
79
  }
76
80
 
77
81
  /* Remove vertical padding on MDL text fields, but only while they are in
@@ -81,22 +85,27 @@ html, body {
81
85
  // The default width of 300px is a bit too wide for us.
82
86
  width: 200px;
83
87
  }
88
+
84
89
  .hamburger-menu .mdl-textfield__label {
85
90
  top: 4px;
86
91
  }
92
+
87
93
  .hamburger-menu .mdl-textfield__label:after {
88
94
  bottom: 0;
89
95
  }
96
+
90
97
  .hamburger-menu .mdl-layout-title {
91
98
  /* The line-height style in mdl-layout-title looks weird on narrow displays,
92
99
  * so remove it in the hamburger menu. */
93
100
  line-height: unset;
94
101
  }
102
+
95
103
  .hamburger-menu .input-container-label {
96
104
  /* Give the labels for input rows a left margin. This keeps them from directly
97
105
  * touching the left side of the screen, for improved readability. */
98
106
  margin-left: 1em;
99
107
  }
108
+
100
109
  .hamburger-menu .mdl-button--raised {
101
110
  /* Left-align the text content of the section header buttons. */
102
111
  text-align: left;
@@ -113,8 +122,9 @@ html, body {
113
122
 
114
123
  #error-display-link {
115
124
  color: white;
116
- display: block;
117
- padding: 0 2em;
125
+ display: inline-block;
126
+ margin-left: auto;
127
+ margin-right: auto;
118
128
  }
119
129
 
120
130
  .input-disabled {
@@ -126,9 +136,10 @@ html, body {
126
136
  color: white;
127
137
  position: relative;
128
138
  padding: 0 0;
129
- top: 0em;
130
- right: 2em;
139
+ top: 0;
140
+ right: 1em;
131
141
  float: right;
142
+ font-size: 24px;
132
143
  font-weight: bold;
133
144
  text-decoration: none;
134
145
  cursor: pointer;
@@ -139,6 +150,7 @@ html, body {
139
150
  display: inline-block;
140
151
  margin: 1em;
141
152
  }
153
+
142
154
  .asset-card-unsupported {
143
155
  display: inline-block;
144
156
  margin: 1em;
@@ -152,41 +164,53 @@ html, body {
152
164
  background-size: contain;
153
165
  background-repeat: no-repeat;
154
166
  display: inline-block;
167
+
155
168
  /* features */
156
169
  &[icon="high_definition"] {
157
170
  background-image: data-uri('icons/custom_high_definition.svg');
158
171
  }
172
+
159
173
  &[icon="ultra_high_definition"] {
160
174
  background-image: data-uri('icons/custom_ultra_high_definition.svg');
161
175
  }
176
+
162
177
  &[icon="subtitles"] {
163
178
  background-image: data-uri('icons/baseline-subtitles-24px.svg');
164
179
  }
180
+
165
181
  &[icon="closed_caption"] {
166
182
  background-image: data-uri('icons/baseline-closed_caption-24px.svg');
167
183
  }
184
+
168
185
  &[icon="live"] {
169
186
  background-image: data-uri('icons/baseline-live_tv-24px.svg');
170
187
  }
188
+
171
189
  &[icon="trick_mode"] {
172
190
  background-image: data-uri('icons/baseline-fast_forward-24px.svg');
173
191
  }
192
+
174
193
  &[icon="surround_sound"] {
175
194
  background-image: data-uri('icons/baseline-surround_sound-24px.svg');
176
195
  }
196
+
177
197
  &[icon="multiple_languages"] {
178
198
  background-image: data-uri('icons/baseline-language-24px.svg');
179
199
  }
200
+
180
201
  &[icon="audio_only"] {
181
202
  background-image: data-uri('icons/baseline-audiotrack-24px.svg');
182
203
  }
204
+
183
205
  /* key systems */
184
206
  &[icon="widevine"] {
185
207
  background-image: data-uri('icons/custom_widevine.svg');
186
208
  }
209
+
187
210
  &[icon="clear_key"] {
188
211
  background-image: data-uri('icons/custom_clear_key.svg');
189
212
  }
213
+
190
214
  &[icon="playready"] {
191
215
  background-image: data-uri('icons/custom_playready.svg');
192
216
  }
@@ -207,6 +231,48 @@ html, body {
207
231
  right: 5px;
208
232
  }
209
233
 
234
+ .progress-circle {
235
+ position: absolute;
236
+ top: 0;
237
+ right: 14px;
238
+ width: @progress-circle-size;
239
+ height: @progress-circle-size;
240
+
241
+ /* This should be unclickable, so that you can click the button beneath. */
242
+ pointer-events: none;
243
+ }
244
+
245
+ .progress-circle-svg {
246
+ /* In rotation, 0 degrees is the right side. That means that the progress
247
+ * circle "starts at" the right side. Normally, you expect the circle to
248
+ * "start at" the top, like a clock; this rotates the circle, so it behaves
249
+ * thusly. */
250
+ transform: rotate(-90deg);
251
+ }
252
+
253
+ .progress-circle-circle() {
254
+ /* Set the position and radius of the circle, so it is in the center of the
255
+ * svg's canvas. */
256
+ cx: @progress-circle-size / 2;
257
+ cy: @progress-circle-size / 2;
258
+ r: (@progress-circle-size - @progress-circle-thickness) / 2;
259
+ fill: none;
260
+ stroke-width: @progress-circle-thickness;
261
+ }
262
+
263
+ .progress-circle-bar {
264
+ .progress-circle-circle();
265
+
266
+ stroke: @mdl-button-color;
267
+ stroke-linecap: round;
268
+ }
269
+
270
+ .progress-circle-back {
271
+ .progress-circle-circle();
272
+
273
+ stroke: #eee;
274
+ }
275
+
210
276
  .asset-card .mdl-card__title {
211
277
  /* The maximum width of the title should be narrower than the width of the
212
278
  * card itself, so that the title doesn't overlap with the store button. */
@@ -222,9 +288,9 @@ html, body {
222
288
  .asset-card img {
223
289
  /* Icons are 300px by 210px (10:7 aspect ratio). */
224
290
  width: 300px;
291
+
225
292
  /* Constrain to space if necessary. */
226
293
  max-width: 100%;
227
-
228
294
  display: block;
229
295
  margin-left: auto;
230
296
  margin-right: auto;
@@ -253,6 +319,7 @@ html, body {
253
319
  height: auto;
254
320
  flex-wrap: wrap;
255
321
  }
322
+
256
323
  /* The spacer should be hidden in this mode, so that the version number is no
257
324
  * longer being forced to the right. */
258
325
  .app-header .mdl-layout-spacer {
@@ -295,6 +362,7 @@ footer .mdl-mega-footer__link-list {
295
362
  /* The default color was low-contrast on this dark background. */
296
363
  color: lighten(@mdl-footer-link-color, 20%);
297
364
  }
365
+
298
366
  a[disabled] {
299
367
  /* Making the disabled version even darker would be even worse in terms of
300
368
  * contrast, so use a strikethrough style instead. */
@@ -364,6 +432,7 @@ footer .mdl-mega-footer__link-list {
364
432
  /* The video bar fills the horizontal space, but its height depends on the
365
433
  * contents. */
366
434
  width: 100%;
435
+
367
436
  /* Add a little bit of padding on top, to make the video not look cropped. */
368
437
  padding-top: 1em;
369
438
  }
@@ -381,6 +450,24 @@ footer .mdl-mega-footer__link-list {
381
450
  max-width: 100%;
382
451
  }
383
452
 
453
+ #video-bar.no-input-sized {
454
+ /* Add some additional padding so that TV overscan doesn't cut off the version
455
+ * number or other information we might need. */
456
+ padding: 2.5em 2em;
457
+
458
+ /* Constrain the body to its size minus margin and padding, so that nested
459
+ * elements can constrain to the body. */
460
+ width: 100%;
461
+ width: calc(100% - 4em);
462
+ height: 100%;
463
+ height: calc(100% - 5em);
464
+ }
465
+
466
+ .video-container.no-input-sized {
467
+ width: 100%;
468
+ height: 100%;
469
+ }
470
+
384
471
  #video {
385
472
  /* Fill whatever space we're given, whether fullscreen or not. */
386
473
  width: 100%;
@@ -398,26 +485,28 @@ footer .mdl-mega-footer__link-list {
398
485
  .input-container-row {
399
486
  display: inline-block;
400
487
  }
488
+
401
489
  .input-container-style-flex {
402
490
  display: flex;
403
491
  flex-wrap: wrap;
404
492
  }
493
+
405
494
  .input-container-style-vertical {
406
495
  text-align: left;
407
496
  }
497
+
408
498
  .input-container-style-accordion {
409
499
  text-align: left;
410
500
  opacity: 0;
411
- max-height: 0px;
501
+ max-height: 0;
412
502
  transition: 0.3s ease-in-out;
413
503
  }
504
+
414
505
  .input-container-style-accordion.show {
415
506
  opacity: 1;
507
+
416
508
  /* If the max-height is too high (e.g. set to 100%), the "sliding out"
417
509
  * animation is too fast to make out with the eye.
418
510
  * So give it a fixed maximum instead. */
419
511
  max-height: 1000px;
420
512
  }
421
- .input-container-label {
422
- padding-right: 1em;
423
- }
package/demo/index.html CHANGED
@@ -84,18 +84,21 @@ UNCOMPILED_JS = [
84
84
  </head>
85
85
  <body>
86
86
  <div id="main-layout" class="mdl-layout mdl-js-layout mdl-layout--fixed-header">
87
- <header class="app-header mdl-layout__header">
87
+ <header class="app-header mdl-layout__header should-hide-in-no-input-mode">
88
88
  <header class="mdl-layout__header-row" id="nav-button-container">
89
89
  <img alt="Shaka Player Logo" src="shaka_logo_trans.png" class="logo" />
90
90
  <button id="nav-button-front" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail" defaultselected>HOME</button>
91
91
  <button id="nav-button-search" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail">SEARCH</button>
92
92
  <button id="nav-button-custom" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail">CUSTOM CONTENT</button>
93
93
  <div class="mdl-layout-spacer"></div>
94
- <div id="version-block">
95
- <span id="version-string"></span>
94
+ <div class="version-block">
95
+ <span class="version-string"></span>
96
96
  </div>
97
97
  </header>
98
98
  </header>
99
+ <div class="version-block hidden should-show-in-no-input-mode">
100
+ <span class="version-string"></span>
101
+ </div>
99
102
  <div class="mdl-layout__drawer hamburger-menu">
100
103
  <div id="hamburger-menu-title" class="mdl-layout-title">
101
104
  Shaka Player Demo Config
@@ -115,8 +118,8 @@ UNCOMPILED_JS = [
115
118
  <video data-shaka-player autoplay playsinline id="video"></video>
116
119
  </div>
117
120
  </div>
118
- <div id="contents"></div>
119
- <footer class="mdl-mega-footer">
121
+ <div id="contents" class="should-hide-in-no-input-mode"></div>
122
+ <footer class="mdl-mega-footer should-hide-in-no-input-mode">
120
123
  <div class="mdl-mega-footer__middle-section">
121
124
 
122
125
  <div class="mdl-mega-footer__drop-down-section">
package/demo/load.js CHANGED
@@ -87,40 +87,34 @@ function shakaUncompiledModeSupported() {
87
87
  fragments = fragments ? fragments.split(';') : [];
88
88
  var combined = fields.concat(fragments);
89
89
 
90
- var scripts = window['UNCOMPILED_JS'];
91
90
  var buildType = 'uncompiled';
92
91
  var buildSpecified = false;
93
92
 
94
93
  if (!shakaUncompiledModeSupported()) {
95
94
  // If uncompiled mode is not supported, default to the compiled debug
96
95
  // version, which should still work.
97
- scripts = window['COMPILED_DEBUG_JS'];
98
96
  buildType = 'debug_compiled';
99
97
  }
100
98
 
101
99
  if (!navigator.onLine) {
102
100
  // If we're offline, default to the compiled version, which may have been
103
101
  // cached by the service worker.
104
- scripts = window['COMPILED_JS'];
105
102
  buildType = 'compiled';
106
103
  }
107
104
 
108
105
  // Very old browsers do not have Array.prototype.indexOf, so we loop.
109
106
  for (var i = 0; i < combined.length; ++i) {
110
107
  if (combined[i] == 'build=compiled') {
111
- scripts = window['COMPILED_JS'];
112
108
  buildType = 'compiled';
113
109
  buildSpecified = true;
114
110
  break;
115
111
  }
116
112
  if (combined[i] == 'build=debug_compiled') {
117
- scripts = window['COMPILED_DEBUG_JS'];
118
113
  buildType = 'debug_compiled';
119
114
  buildSpecified = true;
120
115
  break;
121
116
  }
122
117
  if (combined[i] == 'build=uncompiled') {
123
- scripts = window['UNCOMPILED_JS'];
124
118
  buildType = 'uncompiled';
125
119
  buildSpecified = true;
126
120
  break;
@@ -131,7 +125,6 @@ function shakaUncompiledModeSupported() {
131
125
  // The URL says uncompiled, but we know it won't work. This URL was
132
126
  // probably copied from some other browser, but it won't work in this one.
133
127
  // Force the use of the compiled debug build and update the hash.
134
- scripts = window['COMPILED_DEBUG_JS'];
135
128
  buildType = 'debug_compiled';
136
129
 
137
130
  // Replace the build type in either the hash or the URL parameters.
@@ -159,6 +152,11 @@ function shakaUncompiledModeSupported() {
159
152
 
160
153
  // The application must define its list of compiled and uncompiled sources
161
154
  // before including this loader. The URLs should be relative to the page.
155
+ var scripts = {
156
+ 'compiled': window['COMPILED_JS'],
157
+ 'debug_compiled': window['COMPILED_DEBUG_JS'],
158
+ 'uncompiled': window['UNCOMPILED_JS'],
159
+ }[buildType];
162
160
  for (var j = 0; j < scripts.length; ++j) {
163
161
  loadRelativeScript(scripts[j]);
164
162
  }
package/demo/main.js CHANGED
@@ -65,6 +65,9 @@ shakaDemo.Main = class {
65
65
 
66
66
  /** @private {string} */
67
67
  this.uiLocale_ = '';
68
+
69
+ /** @private {boolean} */
70
+ this.noInput_ = false;
68
71
  }
69
72
 
70
73
  /**
@@ -91,8 +94,8 @@ shakaDemo.Main = class {
91
94
  document.getElementById('error-display-close-button').addEventListener(
92
95
  'click', (event) => this.closeError_());
93
96
 
94
- // Set up version string.
95
- this.setUpVersionString_();
97
+ // Set up version strings in the appropriate divs.
98
+ this.setUpVersionStrings_();
96
99
  }
97
100
 
98
101
  /**
@@ -155,16 +158,40 @@ shakaDemo.Main = class {
155
158
  }
156
159
  }
157
160
 
161
+ // Optionally enter noinput mode. This has to happen before setting up the
162
+ // player.
163
+ this.noInput_ = 'noinput' in this.getParams_();
158
164
  this.setupPlayer_();
159
165
  this.readHash_();
160
166
  window.addEventListener('hashchange', () => this.hashChanged_());
161
167
 
162
168
  await this.setupStorage_();
163
169
 
170
+ if (this.noInput_) {
171
+ // Set the page to noInput mode, disabling the header and footer.
172
+ const hideClass = 'should-hide-in-no-input-mode';
173
+ for (const element of document.getElementsByClassName(hideClass)) {
174
+ this.hideNode_(element);
175
+ }
176
+ const showClass = 'should-show-in-no-input-mode';
177
+ for (const element of document.getElementsByClassName(showClass)) {
178
+ this.showNode_(element);
179
+ }
180
+ // Also fullscreen the container.
181
+ this.container_.classList.add('no-input-sized');
182
+ document.getElementById('video-bar').classList.add('no-input-sized');
183
+ }
184
+
164
185
  // The main page is loaded. Dispatch an event, so the various
165
186
  // configurations will load themselves.
166
187
  this.dispatchEventWithName_('shaka-main-loaded');
167
188
 
189
+ // Wait for one interruptor cycle, so that the tabs have time to load.
190
+ // This ensures that, for example, if there is an asset playing at page
191
+ // load time, the video will scroll into view second, and the page won't
192
+ // scroll away from the video.
193
+ await Promise.resolve();
194
+
168
195
  // Update the componentHandler, to account for any new MDL elements added.
169
196
  componentHandler.upgradeDom();
170
197
 
@@ -186,14 +213,19 @@ shakaDemo.Main = class {
186
213
  const ui = video['ui'];
187
214
  this.player_ = ui.getControls().getPlayer();
188
215
 
189
- // Register custom controls to the UI.
190
- const factory = new shakaDemo.CloseButton.Factory();
191
- shaka.ui.Controls.registerElement('close', factory);
216
+ if (!this.noInput_) {
217
+ // Don't add the close button if in noInput mode; it doesn't make much
218
+ // sense to stop playing a video if you can't start playing other videos.
192
219
 
193
- // Configure UI.
194
- const uiConfig = ui.getConfiguration();
195
- uiConfig.controlPanelElements.push('close');
196
- ui.configure(uiConfig);
220
+ // Register custom controls to the UI.
221
+ const factory = new shakaDemo.CloseButton.Factory();
222
+ shaka.ui.Controls.registerElement('close', factory);
223
+
224
+ // Configure UI.
225
+ const uiConfig = ui.getConfiguration();
226
+ uiConfig.controlPanelElements.push('close');
227
+ ui.configure(uiConfig);
228
+ }
197
229
 
198
230
  // Add application-level default configs here. These are not the library
199
231
  // defaults, but they are the application defaults. This will affect the
@@ -457,7 +489,7 @@ shakaDemo.Main = class {
457
489
  return 'This asset cannot be downloaded.';
458
490
  }
459
491
 
460
- if (!asset.drm.includes(shakaAssets.KeySystem.CLEAR)) {
492
+ if (!asset.isClear()) {
461
493
  const hasSupportedDRM = asset.drm.some((drm) => {
462
494
  return this.support_.drm[drm];
463
495
  });
@@ -816,11 +848,22 @@ shakaDemo.Main = class {
816
848
  this.hideNode_(videoBar);
817
849
  this.video_.poster = shakaDemo.Main.mainPoster_;
818
850
 
851
+ if (document.fullscreenElement) {
852
+ document.exitFullscreen();
853
+ }
854
+ if (document.pictureInPictureElement) {
855
+ document.exitPictureInPicture();
856
+ }
819
857
  this.player_.unload();
820
858
 
821
859
  // The currently-selected asset changed, so update asset cards.
822
860
  this.dispatchEventWithName_('shaka-main-selected-asset-changed');
823
861
 
862
+ // Unset media session title, but only if the browser supports that API.
863
+ if (navigator.mediaSession) {
864
+ navigator.mediaSession.metadata = null;
865
+ }
866
+
824
867
  // Remake hash, to change the current asset.
825
868
  this.remakeHash();
826
869
  }
@@ -942,6 +985,18 @@ shakaDemo.Main = class {
942
985
  if (this.player_.isAudioOnly()) {
943
986
  this.video_.poster = shakaDemo.Main.audioOnlyPoster_;
944
987
  }
988
+
989
+ // Set media session title, but only if the browser supports that API.
990
+ if (navigator.mediaSession) {
991
+ const metadata = {
992
+ title: asset.name,
993
+ artwork: [{src: asset.iconUri}],
994
+ };
995
+ if (asset.source != shakaAssets.Source.UNKNOWN) {
996
+ metadata.artist = asset.source;
997
+ }
998
+ navigator.mediaSession.metadata = new MediaMetadata(metadata);
999
+ }
945
1000
  } catch (reason) {
946
1001
  const error = /** @type {!shaka.util.Error} */ (reason);
947
1002
  if (error.code == shaka.util.Error.Code.LOAD_INTERRUPTED) {
@@ -1024,6 +1079,10 @@ shakaDemo.Main = class {
1024
1079
  }
1025
1080
  }
1026
1081
 
1082
+ if (this.noInput_) {
1083
+ params.push('noinput');
1084
+ }
1085
+
1027
1086
  if (this.nativeControlsEnabled_) {
1028
1087
  params.push('nativecontrols');
1029
1088
  }
@@ -1160,8 +1219,12 @@ shakaDemo.Main = class {
1160
1219
  document.dispatchEvent(event);
1161
1220
  }
1162
1221
 
1163
- /** @private */
1164
- setUpVersionString_() {
1222
+ /**
1223
+ * Sets the "version-string" divs to a version string.
1224
+ * For example, "v2.5.4-master (uncompiled)".
1225
+ * @private
1226
+ */
1227
+ setUpVersionStrings_() {
1165
1228
  const version = shaka.Player.version;
1166
1229
  let split = version.split('-');
1167
1230
  let inParen = [];
@@ -1176,10 +1239,12 @@ shakaDemo.Main = class {
1176
1239
  }
1177
1240
 
1178
1241
  // Put the version into the version string div.
1179
- const versionStringDiv = document.getElementById('version-string');
1180
- versionStringDiv.textContent = split.join('-');
1181
- if (inParen.length > 0) {
1182
- versionStringDiv.textContent += ' (' + inParen.join(', ') + ')';
1242
+ const versionStringDivs = document.getElementsByClassName('version-string');
1243
+ for (const div of versionStringDivs) {
1244
+ div.textContent = split.join('-');
1245
+ if (inParen.length > 0) {
1246
+ div.textContent += ' (' + inParen.join(', ') + ')';
1247
+ }
1183
1248
  }
1184
1249
  }
1185
1250
 
File without changes
package/dist/controls.css CHANGED
@@ -14,4 +14,4 @@
14
14
  * See the License for the specific language governing permissions and
15
15
  * limitations under the License.
16
16
  */
17
- .shaka-video-container{position:relative;top:0;left:0;display:flex}.shaka-video-container .material-icons{font-family:'Material Icons'}.shaka-video-container *{font-family:Roboto-Regular,Roboto,sans-serif}.shaka-video-container:fullscreen{width:100%;height:100%;background-color:#000}.shaka-video-container:fullscreen .shaka-text-container{font-size:4.4vh}.shaka-video-container:-webkit-full-screen{width:100%;height:100%;background-color:#000}.shaka-video-container:-webkit-full-screen .shaka-text-container{font-size:4.4vh}.shaka-video-container:-moz-full-screen{width:100%;height:100%;background-color:#000}.shaka-video-container:-moz-full-screen .shaka-text-container{font-size:4.4vh}.shaka-video-container:-ms-fullscreen{width:100%;height:100%;background-color:#000}.shaka-video-container:-ms-fullscreen .shaka-text-container{font-size:4.4vh}.shaka-controls-container{position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:0;width:100%;height:100%;box-sizing:border-box;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;background:linear-gradient(to top,#000 0,rgba(0,0,0,0) 92px);opacity:0;transition:opacity cubic-bezier(.4,0,.6,1) .6s;z-index:1}.shaka-controls-container *{flex-shrink:0}.shaka-controls-container[shown=true]{opacity:1}.shaka-controls-container[casting=true]{opacity:1}.shaka-controls-container[casting=true] .shaka-fullscreen-button{display:none}.shaka-bottom-controls{width:98%;padding:0;padding-left:2%;padding-bottom:2.5%;z-index:1}.shaka-controls-button-panel{width:98.5%;padding:0;margin:0;display:flex;flex-direction:row;justify-content:flex-end;align-items:center;overflow:hidden;min-width:48px;font-size:12px;font-weight:400;font-style:normal;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.shaka-controls-button-panel>*{color:#fff;height:32px;margin:1px 6px;padding:0;background:0 0;border:0;cursor:pointer}.shaka-play-button-container{margin:0;width:100%;height:100%;flex-shrink:1;display:flex;justify-content:center;align-items:center;position:absolute;top:0;left:0}.shaka-text-container{bottom:15%;top:0;left:0;width:100%;min-width:48px;display:flex;justify-content:center;align-items:flex-end;overflow:hidden;text-align:center;position:absolute;font-size:20px;line-height:1.4}.shaka-text-container span{background-color:rgba(0,0,0,.8);color:#fff;display:block;max-width:95%}.shaka-spinner-container{position:absolute;width:100%;height:100%;flex-shrink:1;display:flex;justify-content:center;align-items:center}.shaka-spinner{position:relative;top:0;left:0;margin:0;box-sizing:border-box;padding:7.8%;width:0;height:0}.shaka-play-button{box-sizing:border-box;padding:7.5%;width:0;height:0;margin:0;border-radius:50%;box-shadow:rgba(0,0,0,.1) 0 0 20px 0;border:none;background-size:50%;background-repeat:no-repeat;background-position:center center;background-color:rgba(255,255,255,.9)}.shaka-play-button[icon=play]{background-image:url(data:image/svg+xml,%3Csvg%20fill%3D%22%23000000%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20width%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20d%3D%22M8%205v14l11-7z%22%2F%3E%0A%20%20%20%20%3Cpath%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%0A%3C%2Fsvg%3E)}.shaka-play-button[icon=pause]{background-image:url(data:image/svg+xml,%3Csvg%20fill%3D%22%23000000%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20width%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20d%3D%22M6%2019h4V5H6v14zm8-14v14h4V5h-4z%22%2F%3E%0A%20%20%20%20%3Cpath%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%0A%3C%2Fsvg%3E)}.shaka-current-time{font-size:14px;color:#fff;height:auto;cursor:pointer}.shaka-current-time[disabled]{background-color:transparent;color:#fff;cursor:default}.shaka-controls-container button:focus,.shaka-controls-container input:focus{outline:1px solid Highlight;outline:1px solid -webkit-focus-ring-color}.shaka-controls-container button::-moz-focus-inner,.shaka-controls-container input::-moz-focus-outer{outline:0;border:0}.shaka-controls-container:not(.shaka-keyboard-navigation) button:focus,.shaka-controls-container:not(.shaka-keyboard-navigation) input:focus{outline:0;border:0}.shaka-mobile .shaka-volume-bar-container{display:none}.shaka-range-container{position:relative;top:0;left:0;margin:4px 6px;height:4px;border-radius:4px;background:#fff}.shaka-volume-bar-container{width:100px}@media screen and (max-width:550px){.shaka-volume-bar-container{display:none}}.shaka-seek-bar-container{width:96.5%}.shaka-range-element{-webkit-appearance:none;background:0 0;position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:0;width:100%;height:100%;height:12px;top:-4px;z-index:1}.shaka-range-element::-webkit-slider-runnable-track{width:100%;height:12px;background:0 0;color:transparent;border:none}.shaka-range-element::-webkit-slider-thumb{-webkit-appearance:none;border:none;border-radius:12px;height:12px;width:12px;background:#fff}.shaka-range-element::-moz-range-track{width:100%;height:12px;background:0 0;color:transparent;border:none}.shaka-range-element::-moz-range-thumb{-webkit-appearance:none;border:none;border-radius:12px;height:12px;width:12px;background:#fff}.shaka-range-element::-ms-track{width:100%;height:12px;background:0 0;color:transparent;border:none}.shaka-range-element::-ms-thumb{-webkit-appearance:none;border:none;border-radius:12px;height:12px;width:12px;background:#fff}.shaka-range-element::-ms-tooltip{display:none}.shaka-range-element::-ms-fill-lower{display:none}.shaka-range-element::-ms-fill-upper{display:none}.shaka-spinner-svg{position:absolute;top:0;left:0;right:0;bottom:0;animation:rotate 2s linear infinite;transform-origin:center center;width:100%;height:100%;margin:0;padding:0}.shaka-spinner-path{stroke:#202124;stroke-dasharray:20,200;stroke-dashoffset:0;animation:dash 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{100%{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-124px}}.shaka-spacer{cursor:default;flex-shrink:1;flex-grow:1;margin:0}.shaka-settings-menu{overflow-x:hidden;overflow-y:auto;white-space:nowrap;background:#fff;box-shadow:0 1px 9px 0 rgba(0,0,0,.4);border-radius:2px;max-height:250px;min-width:180px;display:none;flex-direction:column;position:absolute;z-index:2;right:15px;bottom:30px}.shaka-settings-menu button{font-size:14px;background:0 0;color:#000;border:none;min-height:30px;padding:3.5px 6px;display:flex;align-items:center}.shaka-settings-menu button:hover{background:#e0e0e0}.shaka-keyboard-navigation .shaka-settings-menu button:focus{background:#e0e0e0}.shaka-settings-menu i{padding-left:10px}.shaka-settings-menu.shaka-low-position{bottom:15px}.shaka-overflow-menu span{text-align:left;position:relative;left:13px}.shaka-overflow-button-label{position:relative;display:flex;flex-direction:column}.shaka-current-selection-span{color:rgba(0,0,0,.54)}.shaka-audio-languages span,.shaka-resolutions span,.shaka-text-languages span{margin-left:54px}.shaka-back-to-overflow-button span{margin-left:0}.shaka-back-to-overflow-button i{padding-right:20px}.shaka-auto-span{left:17px}.shaka-captions-on{color:#000}.shaka-captions-off{color:grey}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:local('Roboto'),local('Roboto-Regular'),url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu4mxP.ttf) format('truetype')}@font-face{font-family:'Material Icons';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/materialicons/v47/flUhRq6tzZclQEJ-Vdg-IuiaDsNZ.ttf) format('truetype')}.material-icons{font-family:'Material Icons';font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr}.shaka-cast-receiver-name{display:none;background-color:rgba(0,0,0,.5);color:#fff;font-size:150%;padding:5px;bottom:50px;left:0;right:0;margin:auto;width:max-content}.shaka-cast-connected-button{display:none}.shaka-hidden,button.shaka-hidden{display:none}.shaka-displayed,button.shaka-displayed{display:flex}/*# sourceMappingURL=controls.css.map */
17
+ .shaka-video-container{position:relative;top:0;left:0;display:flex}.shaka-video-container .material-icons{font-family:'Material Icons'}.shaka-video-container *{font-family:Roboto-Regular,Roboto,sans-serif}.shaka-video-container:fullscreen{width:100%;height:100%;background-color:#000}.shaka-video-container:fullscreen .shaka-text-container{font-size:4.4vmin}.shaka-video-container:-webkit-full-screen{width:100%;height:100%;background-color:#000}.shaka-video-container:-webkit-full-screen .shaka-text-container{font-size:4.4vmin}.shaka-video-container:-moz-full-screen{width:100%;height:100%;background-color:#000}.shaka-video-container:-moz-full-screen .shaka-text-container{font-size:4.4vmin}.shaka-video-container:-ms-fullscreen{width:100%;height:100%;background-color:#000}.shaka-video-container:-ms-fullscreen .shaka-text-container{font-size:4.4vmin}.shaka-controls-container{position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:0;width:100%;height:100%;box-sizing:border-box;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;background:linear-gradient(to top,#000 0,rgba(0,0,0,0) 92px);opacity:0;transition:opacity cubic-bezier(.4,0,.6,1) .6s;z-index:1}.shaka-controls-container *{flex-shrink:0}.shaka-controls-container[shown=true]{opacity:1}.shaka-controls-container[casting=true]{opacity:1}.shaka-controls-container[casting=true] .shaka-fullscreen-button{display:none}.shaka-bottom-controls{width:98%;padding:0;padding-left:2%;padding-bottom:2.5%;z-index:1}.shaka-controls-button-panel{width:98.5%;padding:0;margin:0;display:flex;flex-direction:row;justify-content:flex-end;align-items:center;overflow:hidden;min-width:48px;font-size:12px;font-weight:400;font-style:normal;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.shaka-controls-button-panel>*{color:#fff;height:32px;margin:1px 6px;padding:0;background:0 0;border:0;cursor:pointer}.shaka-play-button-container{margin:0;width:100%;height:100%;flex-shrink:1;position:absolute;left:0;right:0;top:0;bottom:0;display:flex;justify-content:center;align-items:center}.shaka-text-container{position:absolute;left:0;right:0;top:0;bottom:0;bottom:15%;width:100%;min-width:48px;text-align:center;display:flex;justify-content:center;align-items:flex-end;overflow:hidden;font-size:20px;line-height:1.4}.shaka-text-container span{background-color:rgba(0,0,0,.8);color:#fff;display:block;max-width:95%}.shaka-spinner-container{position:absolute;left:0;right:0;top:0;bottom:0;width:100%;height:100%;flex-shrink:1;display:flex;justify-content:center;align-items:center}.shaka-spinner{position:relative;top:0;left:0;margin:0;box-sizing:border-box;padding:7.8%;width:0;height:0}.shaka-play-button{box-sizing:border-box;padding:7.5%;width:0;height:0;margin:0;border-radius:50%;box-shadow:rgba(0,0,0,.1) 0 0 20px 0;border:none;background-size:50%;background-repeat:no-repeat;background-position:center center;background-color:rgba(255,255,255,.9)}.shaka-play-button[icon=play]{background-image:url(data:image/svg+xml,%3Csvg%20fill%3D%22%23000000%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20width%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20d%3D%22M8%205v14l11-7z%22%2F%3E%0A%20%20%20%20%3Cpath%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%0A%3C%2Fsvg%3E)}.shaka-play-button[icon=pause]{background-image:url(data:image/svg+xml,%3Csvg%20fill%3D%22%23000000%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20width%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20d%3D%22M6%2019h4V5H6v14zm8-14v14h4V5h-4z%22%2F%3E%0A%20%20%20%20%3Cpath%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%0A%3C%2Fsvg%3E)}.shaka-current-time{font-size:14px;color:#fff;height:auto;cursor:pointer}.shaka-current-time[disabled]{background-color:transparent;color:#fff;cursor:default}.shaka-controls-container button:focus,.shaka-controls-container input:focus{outline:1px solid Highlight;outline:1px solid -webkit-focus-ring-color}.shaka-controls-container button:-moz-focus-inner,.shaka-controls-container input:-moz-focus-outer{outline:0;border:0}.shaka-controls-container:not(.shaka-keyboard-navigation) button:focus,.shaka-controls-container:not(.shaka-keyboard-navigation) input:focus{outline:0;border:0}.shaka-mobile .shaka-volume-bar-container{display:none}.shaka-range-container{position:relative;top:0;left:0;margin:4px 6px;height:4px;border-radius:4px;background:#fff}.shaka-volume-bar-container{width:100px}@media screen and (max-width:550px){.shaka-volume-bar-container{display:none}}.shaka-seek-bar-container{width:96.5%}.shaka-range-element{-webkit-appearance:none;background:0 0;position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:0;width:100%;height:100%;height:12px;top:-4px;z-index:1}.shaka-range-element::-webkit-slider-runnable-track{width:100%;height:12px;background:0 0;color:transparent;border:none}.shaka-range-element::-webkit-slider-thumb{-webkit-appearance:none;border:none;border-radius:12px;height:12px;width:12px;background:#fff}.shaka-range-element::-moz-range-track{width:100%;height:12px;background:0 0;color:transparent;border:none}.shaka-range-element::-moz-range-thumb{-webkit-appearance:none;border:none;border-radius:12px;height:12px;width:12px;background:#fff}.shaka-range-element::-ms-track{width:100%;height:12px;background:0 0;color:transparent;border:none}.shaka-range-element::-ms-thumb{-webkit-appearance:none;border:none;border-radius:12px;height:12px;width:12px;background:#fff}.shaka-range-element::-ms-tooltip{display:none}.shaka-range-element::-ms-fill-lower{display:none}.shaka-range-element::-ms-fill-upper{display:none}.shaka-spinner-svg{position:absolute;top:0;left:0;right:0;bottom:0;animation:rotate 2s linear infinite;transform-origin:center center;width:100%;height:100%;margin:0;padding:0}.shaka-spinner-path{stroke:#202124;stroke-dasharray:20,200;stroke-dashoffset:0;animation:dash 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{100%{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-124px}}.shaka-spacer{cursor:default;flex-shrink:1;flex-grow:1;margin:0}.shaka-settings-menu{overflow-x:hidden;overflow-y:auto;white-space:nowrap;background:#fff;box-shadow:0 1px 9px 0 rgba(0,0,0,.4);border-radius:2px;max-height:250px;min-width:180px;display:none;flex-direction:column;position:absolute;z-index:2;right:15px;bottom:30px}.shaka-settings-menu button{font-size:14px;background:0 0;color:#000;border:none;min-height:30px;padding:3.5px 6px;display:flex;align-items:center}.shaka-settings-menu button:hover{background:#e0e0e0}.shaka-keyboard-navigation .shaka-settings-menu button:focus{background:#e0e0e0}.shaka-settings-menu i{padding-left:10px}.shaka-settings-menu.shaka-low-position{bottom:15px}.shaka-overflow-menu span{text-align:left;position:relative;left:13px}.shaka-overflow-button-label{position:relative;display:flex;flex-direction:column}.shaka-current-selection-span{color:rgba(0,0,0,.54)}.shaka-audio-languages span,.shaka-resolutions span,.shaka-text-languages span{margin-left:54px}.shaka-back-to-overflow-button span{margin-left:0}.shaka-back-to-overflow-button i{padding-right:20px}.shaka-auto-span{left:17px}.shaka-captions-on{color:#000}.shaka-captions-off{color:grey}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:local('Roboto'),local('Roboto-Regular'),url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu4mxP.ttf) format('truetype')}@font-face{font-family:'Material Icons';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/materialicons/v48/flUhRq6tzZclQEJ-Vdg-IuiaDsNZ.ttf) format('truetype')}.material-icons{font-family:'Material Icons';font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr}.shaka-cast-receiver-name{display:none;background-color:rgba(0,0,0,.5);color:#fff;font-size:150%;padding:5px;bottom:50px;left:0;right:0;margin:auto;width:max-content}.shaka-cast-connected-button{display:none}.shaka-hidden,button.shaka-hidden{display:none}.shaka-displayed,button.shaka-displayed{display:flex}/*# sourceMappingURL=controls.css.map */
@@ -1 +1 @@
1
- {"version":3,"sources":["../ui/less/containers.less","$stdin","../ui/less/general.less","../ui/less/buttons.less","../ui/less/range_elements.less","../ui/less/spinner.less","../ui/less/other_elements.less","../ui/less/overflow_menu.less","../ui/https:/fonts.googleapis.com/css?family=Roboto","../ui/https:/fonts.googleapis.com/icon?family=Material+Icons","../ui/controls.less"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../ui/less/containers.less","$stdin","../ui/less/general.less","../ui/less/buttons.less","../ui/less/range_elements.less","../ui/less/spinner.less","../ui/less/other_elements.less","../ui/less/overflow_menu.less","../ui/https:/fonts.googleapis.com/css?family=Roboto","../ui/https:/fonts.googleapis.com/icon?family=Material+Icons","../ui/controls.less"],"names":[],"mappings":"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"}