@mux/mux-player 2.3.3 → 2.4.0

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.
@@ -46,10 +46,6 @@ var gerwig_default = `<template id="media-theme-gerwig">
46
46
  --media-control-background: var(--_secondary-color);
47
47
  --media-control-hover-background: var(--_accent-color);
48
48
  --media-time-buffered-color: rgba(255, 255, 255, 0.4);
49
- --media-preview-thumbnail-border: 0;
50
- --media-preview-thumbnail-border-radius: 2px 2px 0 0;
51
- --media-preview-time-border-radius: 0 0 2px 2px;
52
- --media-preview-time-margin: 0 0 8px;
53
49
  --media-preview-time-text-shadow: none;
54
50
  --media-control-height: 14px;
55
51
  --media-control-padding: 6px;
@@ -62,8 +58,6 @@ var gerwig_default = `<template id="media-theme-gerwig">
62
58
 
63
59
  :host([audio]) {
64
60
  --_secondary-color: var(--media-secondary-color, black);
65
- --media-preview-time-border-radius: 3px;
66
- --media-preview-time-margin: 0 0 5px;
67
61
  --media-preview-time-text-shadow: none;
68
62
  }
69
63
 
@@ -102,6 +96,8 @@ var gerwig_default = `<template id="media-theme-gerwig">
102
96
  }
103
97
 
104
98
  media-time-range {
99
+ --media-box-padding-left: 6px;
100
+ --media-box-padding-right: 6px;
105
101
  --media-range-bar-color: var(--_accent-color);
106
102
  --media-time-range-buffered-color: var(--_primary-color);
107
103
  --media-range-track-color: transparent;
@@ -118,41 +114,27 @@ var gerwig_default = `<template id="media-theme-gerwig">
118
114
  --media-range-thumb-transform: scale(0);
119
115
  --media-range-thumb-transition: transform 0.3s;
120
116
  --media-range-thumb-opacity: 1;
121
- --media-preview-thumbnail-background: var(--_primary-color);
117
+ --media-preview-background: var(--_primary-color);
118
+ --media-box-arrow-background: var(--_primary-color);
122
119
  --media-preview-thumbnail-border: 5px solid var(--_primary-color);
123
- --media-preview-thumbnail-border-radius: 5px 5px 0 0;
124
- --media-preview-time-background: var(--_primary-color);
125
- --media-preview-time-border-radius: 0 0 5px 5px;
126
- --media-preview-time-margin: 0 0 10px;
127
- --media-preview-time-padding: 2px 0 6px;
120
+ --media-preview-border-radius: 5px;
128
121
  --media-text-color: var(--_text-color);
129
- --media-preview-thumbnail-max-width: 150px;
130
- --media-range-track-pointer-border-right: 2px solid #000;
131
122
  --media-control-hover-background: transparent;
132
123
  color: var(--_accent-color);
133
124
  padding: 0 6px;
134
125
  }
135
126
 
136
127
  :host([audio]) media-time-range {
137
- --media-preview-time-border-radius: 5px;
138
- --media-preview-time-padding: 5px;
128
+ --media-preview-time-padding: 1.5px 6px;
129
+ --media-preview-box-margin: 0 0 -5px;
139
130
  }
140
131
 
141
132
  media-time-range:hover {
142
133
  --media-range-thumb-transform: scale(1);
143
134
  }
144
135
 
145
- media-time-range::part(preview-box)::after {
146
- position: absolute;
147
- content: '';
148
- width: 0;
149
- height: 0;
150
- border-style: solid;
151
- border-width: 10px 8.5px 0 8.5px;
152
- border-color: var(--_primary-color) transparent transparent transparent;
153
- top: 100%;
154
- left: 50%;
155
- transform: translate(-50%, -10px);
136
+ media-preview-thumbnail {
137
+ border-bottom-width: 0;
156
138
  }
157
139
 
158
140
  [part~='listbox'] {
@@ -243,12 +225,20 @@ var gerwig_default = `<template id="media-theme-gerwig">
243
225
  pointer-events: none;
244
226
  }
245
227
 
228
+ media-control-bar {
229
+ --gradient-steps: hsl(0 0% 0% / 0) 0%, hsl(0 0% 0% / 0.013) 8.1%, hsl(0 0% 0% / 0.049) 15.5%,
230
+ hsl(0 0% 0% / 0.104) 22.5%, hsl(0 0% 0% / 0.175) 29%, hsl(0 0% 0% / 0.259) 35.3%, hsl(0 0% 0% / 0.352) 41.2%,
231
+ hsl(0 0% 0% / 0.45) 47.1%, hsl(0 0% 0% / 0.55) 52.9%, hsl(0 0% 0% / 0.648) 58.8%, hsl(0 0% 0% / 0.741) 64.7%,
232
+ hsl(0 0% 0% / 0.825) 71%, hsl(0 0% 0% / 0.896) 77.5%, hsl(0 0% 0% / 0.951) 84.5%, hsl(0 0% 0% / 0.987) 91.9%,
233
+ hsl(0 0% 0%) 100%;
234
+ }
235
+
246
236
  :host([title]:not([audio])) media-control-bar[slot='top-chrome']::before {
247
237
  content: '';
248
238
  position: absolute;
249
239
  width: 100%;
250
240
  padding-bottom: min(100px, 25%);
251
- background: linear-gradient(#000, transparent);
241
+ background: linear-gradient(to top, var(--gradient-steps));
252
242
  opacity: 0.8;
253
243
  pointer-events: none;
254
244
  }
@@ -260,7 +250,7 @@ var gerwig_default = `<template id="media-theme-gerwig">
260
250
  bottom: 0;
261
251
  left: 0;
262
252
  padding-bottom: min(100px, 25%);
263
- background: linear-gradient(transparent, #000);
253
+ background: linear-gradient(to bottom, var(--gradient-steps));
264
254
  opacity: 0.8;
265
255
  z-index: 1;
266
256
  pointer-events: none;
@@ -410,7 +400,7 @@ var gerwig_default = `<template id="media-theme-gerwig">
410
400
  }
411
401
 
412
402
  /* Intentionally don't target the div for transition but the children
413
- of the div. Prevents messing with media-chrome's autohide feature. */
403
+ of the div. Prevents messing with media-chrome's autohide feature. */
414
404
  media-loading-indicator + div * {
415
405
  transition: opacity 0.15s;
416
406
  opacity: 1;
@@ -807,7 +797,12 @@ var gerwig_default = `<template id="media-theme-gerwig">
807
797
  </template>
808
798
 
809
799
  <template partial="TimeRange">
810
- <media-time-range part="bottom time range" disabled="{{disabled}}" aria-disabled="{{disabled}}"></media-time-range>
800
+ <media-time-range part="bottom time range" disabled="{{disabled}}" aria-disabled="{{disabled}}">
801
+ <media-preview-thumbnail slot="preview"></media-preview-thumbnail>
802
+ <media-preview-chapter-display slot="preview"></media-preview-chapter-display>
803
+ <media-preview-time-display slot="preview"></media-preview-time-display>
804
+ <div slot="preview" part="arrow"></div>
805
+ </media-time-range>
811
806
  </template>
812
807
 
813
808
  <template partial="AudioTrackSelect">
@@ -897,6 +892,8 @@ var gerwig_default = `<template id="media-theme-gerwig">
897
892
  noautoseektolive="{{noautoseektolive}}"
898
893
  defaultsubtitles="{{defaultsubtitles}}"
899
894
  defaultduration="{{defaultduration ?? false}}"
895
+ keyboardforwardseekoffset="{{forwardseekoffset}}"
896
+ keyboardbackwardseekoffset="{{backwardseekoffset}}"
900
897
  exportparts="layer, media-layer, poster-layer, vertical-layer, centered-layer, gesture-layer"
901
898
  style="--_pre-playback-place:{{preplaybackplace ?? 'center'}}"
902
899
  >
@@ -1116,21 +1113,35 @@ var MediaUIProps = {
1116
1113
  MEDIA_AUDIO_TRACK_ENABLED: "mediaAudioTrackEnabled",
1117
1114
  MEDIA_CHAPTERS_CUES: "mediaChaptersCues"
1118
1115
  };
1119
- var MediaUIPropsEntries = Object.entries(MediaUIProps);
1120
- var MediaUIAttributes = MediaUIPropsEntries.reduce((dictObj, [key, propName]) => {
1121
- dictObj[key] = `${propName.toLowerCase()}`;
1122
- return dictObj;
1123
- }, {});
1124
- var MediaStateChangeEvents = MediaUIPropsEntries.reduce(
1125
- (dictObj, [key, propName]) => {
1126
- dictObj[key] = `${propName.toLowerCase()}`;
1127
- return dictObj;
1128
- },
1129
- {
1130
- USER_INACTIVE: "userinactivechange",
1131
- BREAKPOINTS_CHANGE: "breakpointchange",
1132
- BREAKPOINTS_COMPUTED: "breakpointscomputed"
1133
- }
1116
+ var MediaUIPropsEntries = (
1117
+ /** @type {[keyof MediaUIProps, string][]} */
1118
+ Object.entries(MediaUIProps)
1119
+ );
1120
+ var MediaUIAttributes = (
1121
+ /** @type {{ [k in keyof MediaUIProps]: string }} */
1122
+ MediaUIPropsEntries.reduce(
1123
+ (dictObj, [key, propName]) => {
1124
+ dictObj[key] = `${propName.toLowerCase()}`;
1125
+ return dictObj;
1126
+ },
1127
+ /** @type {Partial<{ [k in keyof MediaUIProps]: string }>} */
1128
+ {}
1129
+ )
1130
+ );
1131
+ var MediaStateChangeEvents = (
1132
+ /** @type {{ [k in keyof MediaUIProps | 'USER_INACTIVE' | 'BREAKPOINTS_CHANGE' | 'BREAKPOINTS_COMPUTED']: string }} */
1133
+ MediaUIPropsEntries.reduce(
1134
+ (dictObj, [key, propName]) => {
1135
+ dictObj[key] = `${propName.toLowerCase()}`;
1136
+ return dictObj;
1137
+ },
1138
+ /** @type {Partial<{ [k in keyof MediaUIProps | 'USER_INACTIVE' | 'BREAKPOINTS_CHANGE' | 'BREAKPOINTS_COMPUTED']: string }>} */
1139
+ {
1140
+ USER_INACTIVE: "userinactivechange",
1141
+ BREAKPOINTS_CHANGE: "breakpointchange",
1142
+ BREAKPOINTS_COMPUTED: "breakpointscomputed"
1143
+ }
1144
+ )
1134
1145
  );
1135
1146
  var StateChangeEventToAttributeMap = Object.entries(
1136
1147
  MediaStateChangeEvents
@@ -1167,6 +1178,8 @@ var EventTarget2 = class {
1167
1178
  return true;
1168
1179
  }
1169
1180
  };
1181
+ var Node = class extends EventTarget2 {
1182
+ };
1170
1183
  var ResizeObserver = class {
1171
1184
  observe() {
1172
1185
  }
@@ -1185,12 +1198,22 @@ var documentShim = {
1185
1198
  addEventListener() {
1186
1199
  },
1187
1200
  removeEventListener() {
1201
+ },
1202
+ /**
1203
+ *
1204
+ * @param {Event} event
1205
+ * @returns {boolean}
1206
+ */
1207
+ dispatchEvent(event) {
1208
+ return false;
1188
1209
  }
1210
+ // eslint-disable-line no-unused-vars
1189
1211
  };
1190
1212
  var globalThisShim2 = {
1191
1213
  ResizeObserver,
1192
1214
  document: documentShim,
1193
- HTMLElement: class HTMLElement2 extends EventTarget2 {
1215
+ Node,
1216
+ HTMLElement: class HTMLElement2 extends Node {
1194
1217
  },
1195
1218
  DocumentFragment: class DocumentFragment2 extends EventTarget2 {
1196
1219
  },
@@ -1202,6 +1225,29 @@ var globalThisShim2 = {
1202
1225
  whenDefined: function() {
1203
1226
  }
1204
1227
  },
1228
+ localStorage: {
1229
+ /**
1230
+ * @param {string} key
1231
+ * @returns {string|null}
1232
+ */
1233
+ getItem(key) {
1234
+ return null;
1235
+ },
1236
+ // eslint-disable-line no-unused-vars
1237
+ /**
1238
+ * @param {string} key
1239
+ * @param {string} value
1240
+ */
1241
+ setItem(key, value) {
1242
+ },
1243
+ // eslint-disable-line no-unused-vars
1244
+ /**
1245
+ * @param {string} key
1246
+ */
1247
+ removeItem(key) {
1248
+ }
1249
+ // eslint-disable-line no-unused-vars
1250
+ },
1205
1251
  CustomEvent: function CustomEvent2() {
1206
1252
  },
1207
1253
  getComputedStyle: function() {
@@ -1212,6 +1258,9 @@ var globalThisShim2 = {
1212
1258
  return "";
1213
1259
  }
1214
1260
  },
1261
+ /**
1262
+ * @param {string} media
1263
+ */
1215
1264
  matchMedia(media) {
1216
1265
  return {
1217
1266
  matches: false,
@@ -1455,6 +1504,7 @@ var AttrPart = class extends Part {
1455
1504
  );
1456
1505
  }
1457
1506
  }
1507
+ /** @type boolean */
1458
1508
  get booleanValue() {
1459
1509
  return __privateGet2(this, _element).hasAttributeNS(
1460
1510
  __privateGet2(this, _namespaceURI),
@@ -1496,6 +1546,7 @@ var ChildNodePart = class extends Part {
1496
1546
  get previousSibling() {
1497
1547
  return __privateGet2(this, _nodes)[0].previousSibling;
1498
1548
  }
1549
+ // FIXME: not sure why do we need string serialization here? Just because parent class has type DOMString?
1499
1550
  get value() {
1500
1551
  return __privateGet2(this, _nodes).map((node) => node.textContent).join("");
1501
1552
  }
@@ -1839,7 +1890,8 @@ var observedMediaAttributes = {
1839
1890
  mediastreamtype: "streamtype"
1840
1891
  };
1841
1892
  var prependTemplate = Document.createElement("template");
1842
- prependTemplate.innerHTML = `
1893
+ prependTemplate.innerHTML = /*html*/
1894
+ `
1843
1895
  <style>
1844
1896
  :host {
1845
1897
  display: inline-block;
@@ -1885,7 +1937,10 @@ var MediaThemeElement = class extends GlobalThis.HTMLElement {
1885
1937
  if (this.mediaController && !((_a2 = this.mediaController) == null ? void 0 : _a2.breakpointsComputed))
1886
1938
  return;
1887
1939
  if (mutationList.some((mutation) => {
1888
- const target = mutation.target;
1940
+ const target = (
1941
+ /** @type {HTMLElement} */
1942
+ mutation.target
1943
+ );
1889
1944
  if (target === this)
1890
1945
  return true;
1891
1946
  if (target.localName !== "media-controller")
@@ -1907,6 +1962,7 @@ var MediaThemeElement = class extends GlobalThis.HTMLElement {
1907
1962
  this.addEventListener(MediaStateChangeEvents.BREAKPOINTS_COMPUTED, this.render);
1908
1963
  __privateMethod(this, _upgradeProperty, upgradeProperty_fn).call(this, "template");
1909
1964
  }
1965
+ /** @type {HTMLElement & { breakpointsComputed?: boolean }} */
1910
1966
  get mediaController() {
1911
1967
  return this.renderRoot.querySelector("media-controller");
1912
1968
  }
@@ -1956,6 +2012,7 @@ var MediaThemeElement = class extends GlobalThis.HTMLElement {
1956
2012
  this.renderer = new TemplateInstance(
1957
2013
  this.template,
1958
2014
  this.props,
2015
+ // @ts-ignore
1959
2016
  this.constructor.processor
1960
2017
  );
1961
2018
  this.renderRoot.textContent = "";
@@ -1987,7 +2044,10 @@ updateTemplate_fn = function() {
1987
2044
  const templateId = this.getAttribute("template");
1988
2045
  if (!templateId || templateId === __privateGet3(this, _prevTemplateId))
1989
2046
  return;
1990
- const rootNode = this.getRootNode();
2047
+ const rootNode = (
2048
+ /** @type HTMLDocument | ShadowRoot */
2049
+ this.getRootNode()
2050
+ );
1991
2051
  const template2 = (_a2 = rootNode == null ? void 0 : rootNode.getElementById) == null ? void 0 : _a2.call(rootNode, templateId);
1992
2052
  if (template2) {
1993
2053
  __privateSet3(this, _prevTemplateId, templateId);
@@ -27,6 +27,8 @@ var EventTarget = class {
27
27
  return true;
28
28
  }
29
29
  };
30
+ var Node = class extends EventTarget {
31
+ };
30
32
  var ResizeObserver = class {
31
33
  observe() {
32
34
  }
@@ -45,12 +47,22 @@ var documentShim = {
45
47
  addEventListener() {
46
48
  },
47
49
  removeEventListener() {
50
+ },
51
+ /**
52
+ *
53
+ * @param {Event} event
54
+ * @returns {boolean}
55
+ */
56
+ dispatchEvent(event) {
57
+ return false;
48
58
  }
59
+ // eslint-disable-line no-unused-vars
49
60
  };
50
61
  var globalThisShim = {
51
62
  ResizeObserver,
52
63
  document: documentShim,
53
- HTMLElement: class HTMLElement extends EventTarget {
64
+ Node,
65
+ HTMLElement: class HTMLElement extends Node {
54
66
  },
55
67
  DocumentFragment: class DocumentFragment extends EventTarget {
56
68
  },
@@ -62,6 +74,29 @@ var globalThisShim = {
62
74
  whenDefined: function() {
63
75
  }
64
76
  },
77
+ localStorage: {
78
+ /**
79
+ * @param {string} key
80
+ * @returns {string|null}
81
+ */
82
+ getItem(key) {
83
+ return null;
84
+ },
85
+ // eslint-disable-line no-unused-vars
86
+ /**
87
+ * @param {string} key
88
+ * @param {string} value
89
+ */
90
+ setItem(key, value) {
91
+ },
92
+ // eslint-disable-line no-unused-vars
93
+ /**
94
+ * @param {string} key
95
+ */
96
+ removeItem(key) {
97
+ }
98
+ // eslint-disable-line no-unused-vars
99
+ },
65
100
  CustomEvent: function CustomEvent() {
66
101
  },
67
102
  getComputedStyle: function() {
@@ -72,6 +107,9 @@ var globalThisShim = {
72
107
  return "";
73
108
  }
74
109
  },
110
+ /**
111
+ * @param {string} media
112
+ */
75
113
  matchMedia(media) {
76
114
  return {
77
115
  matches: false,
@@ -124,21 +162,35 @@ var MediaUIProps = {
124
162
  MEDIA_AUDIO_TRACK_ENABLED: "mediaAudioTrackEnabled",
125
163
  MEDIA_CHAPTERS_CUES: "mediaChaptersCues"
126
164
  };
127
- var MediaUIPropsEntries = Object.entries(MediaUIProps);
128
- var MediaUIAttributes = MediaUIPropsEntries.reduce((dictObj, [key, propName]) => {
129
- dictObj[key] = `${propName.toLowerCase()}`;
130
- return dictObj;
131
- }, {});
132
- var MediaStateChangeEvents = MediaUIPropsEntries.reduce(
133
- (dictObj, [key, propName]) => {
134
- dictObj[key] = `${propName.toLowerCase()}`;
135
- return dictObj;
136
- },
137
- {
138
- USER_INACTIVE: "userinactivechange",
139
- BREAKPOINTS_CHANGE: "breakpointchange",
140
- BREAKPOINTS_COMPUTED: "breakpointscomputed"
141
- }
165
+ var MediaUIPropsEntries = (
166
+ /** @type {[keyof MediaUIProps, string][]} */
167
+ Object.entries(MediaUIProps)
168
+ );
169
+ var MediaUIAttributes = (
170
+ /** @type {{ [k in keyof MediaUIProps]: string }} */
171
+ MediaUIPropsEntries.reduce(
172
+ (dictObj, [key, propName]) => {
173
+ dictObj[key] = `${propName.toLowerCase()}`;
174
+ return dictObj;
175
+ },
176
+ /** @type {Partial<{ [k in keyof MediaUIProps]: string }>} */
177
+ {}
178
+ )
179
+ );
180
+ var MediaStateChangeEvents = (
181
+ /** @type {{ [k in keyof MediaUIProps | 'USER_INACTIVE' | 'BREAKPOINTS_CHANGE' | 'BREAKPOINTS_COMPUTED']: string }} */
182
+ MediaUIPropsEntries.reduce(
183
+ (dictObj, [key, propName]) => {
184
+ dictObj[key] = `${propName.toLowerCase()}`;
185
+ return dictObj;
186
+ },
187
+ /** @type {Partial<{ [k in keyof MediaUIProps | 'USER_INACTIVE' | 'BREAKPOINTS_CHANGE' | 'BREAKPOINTS_COMPUTED']: string }>} */
188
+ {
189
+ USER_INACTIVE: "userinactivechange",
190
+ BREAKPOINTS_CHANGE: "breakpointchange",
191
+ BREAKPOINTS_COMPUTED: "breakpointscomputed"
192
+ }
193
+ )
142
194
  );
143
195
  var StateChangeEventToAttributeMap = Object.entries(
144
196
  MediaStateChangeEvents
@@ -396,6 +448,7 @@ var AttrPart = class extends Part {
396
448
  );
397
449
  }
398
450
  }
451
+ /** @type boolean */
399
452
  get booleanValue() {
400
453
  return __privateGet(this, _element).hasAttributeNS(
401
454
  __privateGet(this, _namespaceURI),
@@ -437,6 +490,7 @@ var ChildNodePart = class extends Part {
437
490
  get previousSibling() {
438
491
  return __privateGet(this, _nodes)[0].previousSibling;
439
492
  }
493
+ // FIXME: not sure why do we need string serialization here? Just because parent class has type DOMString?
440
494
  get value() {
441
495
  return __privateGet(this, _nodes).map((node) => node.textContent).join("");
442
496
  }
@@ -780,7 +834,8 @@ var observedMediaAttributes = {
780
834
  mediastreamtype: "streamtype"
781
835
  };
782
836
  var prependTemplate = Document.createElement("template");
783
- prependTemplate.innerHTML = `
837
+ prependTemplate.innerHTML = /*html*/
838
+ `
784
839
  <style>
785
840
  :host {
786
841
  display: inline-block;
@@ -826,7 +881,10 @@ var MediaThemeElement = class extends GlobalThis.HTMLElement {
826
881
  if (this.mediaController && !((_a = this.mediaController) == null ? void 0 : _a.breakpointsComputed))
827
882
  return;
828
883
  if (mutationList.some((mutation) => {
829
- const target = mutation.target;
884
+ const target = (
885
+ /** @type {HTMLElement} */
886
+ mutation.target
887
+ );
830
888
  if (target === this)
831
889
  return true;
832
890
  if (target.localName !== "media-controller")
@@ -848,6 +906,7 @@ var MediaThemeElement = class extends GlobalThis.HTMLElement {
848
906
  this.addEventListener(MediaStateChangeEvents.BREAKPOINTS_COMPUTED, this.render);
849
907
  __privateMethod(this, _upgradeProperty, upgradeProperty_fn).call(this, "template");
850
908
  }
909
+ /** @type {HTMLElement & { breakpointsComputed?: boolean }} */
851
910
  get mediaController() {
852
911
  return this.renderRoot.querySelector("media-controller");
853
912
  }
@@ -897,6 +956,7 @@ var MediaThemeElement = class extends GlobalThis.HTMLElement {
897
956
  this.renderer = new TemplateInstance(
898
957
  this.template,
899
958
  this.props,
959
+ // @ts-ignore
900
960
  this.constructor.processor
901
961
  );
902
962
  this.renderRoot.textContent = "";
@@ -928,7 +988,10 @@ updateTemplate_fn = function() {
928
988
  const templateId = this.getAttribute("template");
929
989
  if (!templateId || templateId === __privateGet2(this, _prevTemplateId))
930
990
  return;
931
- const rootNode = this.getRootNode();
991
+ const rootNode = (
992
+ /** @type HTMLDocument | ShadowRoot */
993
+ this.getRootNode()
994
+ );
932
995
  const template2 = (_a = rootNode == null ? void 0 : rootNode.getElementById) == null ? void 0 : _a.call(rootNode, templateId);
933
996
  if (template2) {
934
997
  __privateSet2(this, _prevTemplateId, templateId);
@@ -979,7 +1042,8 @@ var __publicField3 = (obj, key, value) => {
979
1042
  return value;
980
1043
  };
981
1044
  var template = Document.createElement("template");
982
- template.innerHTML = `
1045
+ template.innerHTML = /*html*/
1046
+ `
983
1047
  <style>
984
1048
  :host {
985
1049
  --_primary-color: var(--media-primary-color, rgb(255 255 255 / .9));
@@ -1033,7 +1097,8 @@ template.innerHTML = `
1033
1097
 
1034
1098
  media-loading-indicator {
1035
1099
  place-self: center;
1036
- ${""}
1100
+ ${/* Stack the grid items on top of each other */
1101
+ ""}
1037
1102
  grid-area: 1 / 1;
1038
1103
  }
1039
1104
 
@@ -1156,7 +1221,7 @@ template.innerHTML = `
1156
1221
  --media-range-padding-left: 0;
1157
1222
  --media-range-padding-right: 0;
1158
1223
  --media-preview-time-background: var(--_secondary-color);
1159
- --media-preview-time-margin: 0 0 8px;
1224
+ --media-preview-box-margin: 0 0 3px;
1160
1225
 
1161
1226
  display: var(--controls, var(--time-range, inline-block));
1162
1227
  width: 100%;
@@ -1180,7 +1245,8 @@ template.innerHTML = `
1180
1245
  width: 7px;
1181
1246
  }
1182
1247
 
1183
- ${""}
1248
+ ${/* Turn some buttons off by default */
1249
+ ""}
1184
1250
  media-seek-backward-button {
1185
1251
  display: var(--media-control-display, var(--media-seek-backward-button-display, none));
1186
1252
  }
@@ -1383,6 +1449,7 @@ template.innerHTML = `
1383
1449
  </template>
1384
1450
 
1385
1451
  <media-controller
1452
+ nodefaultstore="{{nodefaultstore}}"
1386
1453
  defaultsubtitles="{{defaultsubtitles}}"
1387
1454
  style="--_control-bar-place-self:{{controlbarplace ?? 'unset'}}"
1388
1455
  gesturesdisabled="{{disabled}}"