@francofantomius/material-components 0.1.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +550 -90
  3. package/custom-elements.json +21010 -2354
  4. package/dist/chunks/badge-G4EjcMoy.js +89 -0
  5. package/dist/chunks/badge-G4EjcMoy.js.map +1 -0
  6. package/dist/chunks/button-B4TSZ7Sl.js +250 -0
  7. package/dist/chunks/button-B4TSZ7Sl.js.map +1 -0
  8. package/dist/chunks/card-DVffdPpv.js +163 -0
  9. package/dist/chunks/card-DVffdPpv.js.map +1 -0
  10. package/dist/chunks/checkbox-BqlboAHd.js +194 -0
  11. package/dist/chunks/checkbox-BqlboAHd.js.map +1 -0
  12. package/dist/chunks/chip-CI1ZINnr.js +169 -0
  13. package/dist/chunks/chip-CI1ZINnr.js.map +1 -0
  14. package/dist/chunks/code-C5UFBkCh.js +1830 -0
  15. package/dist/chunks/code-C5UFBkCh.js.map +1 -0
  16. package/dist/chunks/decorate-DXuynaiA.js +39 -0
  17. package/dist/chunks/decorate-DXuynaiA.js.map +1 -0
  18. package/dist/chunks/dialog-DGVEE5m_.js +158 -0
  19. package/dist/chunks/dialog-DGVEE5m_.js.map +1 -0
  20. package/dist/chunks/divider-DNepwoZv.js +82 -0
  21. package/dist/chunks/divider-DNepwoZv.js.map +1 -0
  22. package/dist/chunks/fab-C9j3WBHE.js +150 -0
  23. package/dist/chunks/fab-C9j3WBHE.js.map +1 -0
  24. package/dist/chunks/focus-ring-CuiJuM-y.js +71 -0
  25. package/dist/chunks/focus-ring-CuiJuM-y.js.map +1 -0
  26. package/dist/chunks/{form-associated-fKbeX_2P.js → form-associated-Cty_ZaS9.js} +26 -27
  27. package/dist/chunks/form-associated-Cty_ZaS9.js.map +1 -0
  28. package/dist/chunks/icon-DrNqcNEL.js +62 -0
  29. package/dist/chunks/icon-DrNqcNEL.js.map +1 -0
  30. package/dist/chunks/icon-button-BdSc7eot.js +188 -0
  31. package/dist/chunks/icon-button-BdSc7eot.js.map +1 -0
  32. package/dist/chunks/list-D8olR7oZ.js +204 -0
  33. package/dist/chunks/list-D8olR7oZ.js.map +1 -0
  34. package/dist/chunks/navigation-drawer-CKl44Ef5.js +531 -0
  35. package/dist/chunks/navigation-drawer-CKl44Ef5.js.map +1 -0
  36. package/dist/chunks/player-C4ydiIpr.js +1582 -0
  37. package/dist/chunks/player-C4ydiIpr.js.map +1 -0
  38. package/dist/chunks/progress-LQmLMDjX.js +266 -0
  39. package/dist/chunks/progress-LQmLMDjX.js.map +1 -0
  40. package/dist/chunks/radio-Bily78NT.js +205 -0
  41. package/dist/chunks/radio-Bily78NT.js.map +1 -0
  42. package/dist/chunks/ripple-squbKHhj.js +135 -0
  43. package/dist/chunks/ripple-squbKHhj.js.map +1 -0
  44. package/dist/chunks/search-bar-TXnqJ-gd.js +698 -0
  45. package/dist/chunks/search-bar-TXnqJ-gd.js.map +1 -0
  46. package/dist/chunks/snackbar-Wsz3BzEY.js +161 -0
  47. package/dist/chunks/snackbar-Wsz3BzEY.js.map +1 -0
  48. package/dist/chunks/switch-DdukrvXb.js +190 -0
  49. package/dist/chunks/switch-DdukrvXb.js.map +1 -0
  50. package/dist/chunks/table-aRTYzDyE.js +773 -0
  51. package/dist/chunks/table-aRTYzDyE.js.map +1 -0
  52. package/dist/chunks/tabs-BfOtoeir.js +191 -0
  53. package/dist/chunks/tabs-BfOtoeir.js.map +1 -0
  54. package/dist/chunks/text-field-hN6-2HQy.js +338 -0
  55. package/dist/chunks/text-field-hN6-2HQy.js.map +1 -0
  56. package/dist/chunks/top-app-bar-Dgbp6CFv.js +228 -0
  57. package/dist/chunks/top-app-bar-Dgbp6CFv.js.map +1 -0
  58. package/dist/components/account-menu/account-menu.css.d.ts +3 -0
  59. package/dist/components/account-menu/account-menu.css.d.ts.map +1 -0
  60. package/dist/components/account-menu/account-menu.d.ts +111 -0
  61. package/dist/components/account-menu/account-menu.d.ts.map +1 -0
  62. package/dist/components/app-drawer/app-drawer.css.d.ts +3 -0
  63. package/dist/components/app-drawer/app-drawer.css.d.ts.map +1 -0
  64. package/dist/components/app-drawer/app-drawer.d.ts +173 -0
  65. package/dist/components/app-drawer/app-drawer.d.ts.map +1 -0
  66. package/dist/components/badge/badge.js +2 -91
  67. package/dist/components/button/button.js +2 -261
  68. package/dist/components/card/card.js +2 -167
  69. package/dist/components/checkbox/checkbox.css.d.ts.map +1 -1
  70. package/dist/components/checkbox/checkbox.js +2 -186
  71. package/dist/components/chip/chip.js +3 -172
  72. package/dist/components/code/code.css.d.ts +2 -0
  73. package/dist/components/code/code.css.d.ts.map +1 -0
  74. package/dist/components/code/code.d.ts +106 -0
  75. package/dist/components/code/code.d.ts.map +1 -0
  76. package/dist/components/code/code.js +5 -0
  77. package/dist/components/code/highlighter.d.ts +8 -0
  78. package/dist/components/code/highlighter.d.ts.map +1 -0
  79. package/dist/components/code/linter.d.ts +44 -0
  80. package/dist/components/code/linter.d.ts.map +1 -0
  81. package/dist/components/dialog/dialog.js +2 -165
  82. package/dist/components/divider/divider.js +2 -79
  83. package/dist/components/fab/fab.js +2 -153
  84. package/dist/components/icon/icon.js +2 -68
  85. package/dist/components/icon-button/icon-button.css.d.ts.map +1 -1
  86. package/dist/components/icon-button/icon-button.js +1 -189
  87. package/dist/components/list/list.css.d.ts.map +1 -1
  88. package/dist/components/list/list.d.ts.map +1 -1
  89. package/dist/components/list/list.js +3 -188
  90. package/dist/components/navigation-drawer/navigation-drawer.css.d.ts +3 -0
  91. package/dist/components/navigation-drawer/navigation-drawer.css.d.ts.map +1 -0
  92. package/dist/components/navigation-drawer/navigation-drawer.d.ts +76 -0
  93. package/dist/components/navigation-drawer/navigation-drawer.d.ts.map +1 -0
  94. package/dist/components/navigation-drawer/navigation-drawer.js +8 -0
  95. package/dist/components/player/player.css.d.ts +2 -0
  96. package/dist/components/player/player.css.d.ts.map +1 -0
  97. package/dist/components/player/player.d.ts +99 -0
  98. package/dist/components/player/player.d.ts.map +1 -0
  99. package/dist/components/player/player.js +7 -0
  100. package/dist/components/progress/progress.css.d.ts.map +1 -1
  101. package/dist/components/progress/progress.d.ts +2 -0
  102. package/dist/components/progress/progress.d.ts.map +1 -1
  103. package/dist/components/progress/progress.js +3 -181
  104. package/dist/components/radio/radio.css.d.ts.map +1 -1
  105. package/dist/components/radio/radio.js +3 -203
  106. package/dist/components/search-bar/search-bar.css.d.ts +2 -0
  107. package/dist/components/search-bar/search-bar.css.d.ts.map +1 -0
  108. package/dist/components/search-bar/search-bar.d.ts +81 -0
  109. package/dist/components/search-bar/search-bar.d.ts.map +1 -0
  110. package/dist/components/search-bar/search-bar.js +5 -0
  111. package/dist/components/snackbar/snackbar.js +2 -162
  112. package/dist/components/switch/switch.css.d.ts.map +1 -1
  113. package/dist/components/switch/switch.js +2 -169
  114. package/dist/components/table/table.css.d.ts +8 -0
  115. package/dist/components/table/table.css.d.ts.map +1 -0
  116. package/dist/components/table/table.d.ts +158 -0
  117. package/dist/components/table/table.d.ts.map +1 -0
  118. package/dist/components/table/table.js +13 -0
  119. package/dist/components/tabs/tabs.js +3 -198
  120. package/dist/components/text-field/text-field.css.d.ts.map +1 -1
  121. package/dist/components/text-field/text-field.d.ts +1 -1
  122. package/dist/components/text-field/text-field.d.ts.map +1 -1
  123. package/dist/components/text-field/text-field.js +2 -325
  124. package/dist/components/top-app-bar/top-app-bar.css.d.ts +2 -0
  125. package/dist/components/top-app-bar/top-app-bar.css.d.ts.map +1 -0
  126. package/dist/components/top-app-bar/top-app-bar.d.ts +29 -0
  127. package/dist/components/top-app-bar/top-app-bar.d.ts.map +1 -0
  128. package/dist/components/top-app-bar/top-app-bar.js +5 -0
  129. package/dist/index.d.ts +8 -0
  130. package/dist/index.d.ts.map +1 -1
  131. package/dist/index.js +2264 -58
  132. package/dist/index.js.map +1 -1
  133. package/dist/internal/focus-ring/focus-ring.d.ts.map +1 -1
  134. package/dist/internal/focus-ring/focus-ring.js +4 -0
  135. package/dist/internal/ripple/ripple.css.d.ts.map +1 -1
  136. package/dist/internal/ripple/ripple.d.ts +0 -3
  137. package/dist/internal/ripple/ripple.d.ts.map +1 -1
  138. package/dist/internal/ripple/ripple.js +2 -142
  139. package/dist/tokens/index.js +336 -11
  140. package/dist/tokens/index.js.map +1 -1
  141. package/package.json +118 -12
  142. package/dist/chunks/base-component-DQTjlEVL.js +0 -34
  143. package/dist/chunks/base-component-DQTjlEVL.js.map +0 -1
  144. package/dist/chunks/focus-ring-Dl-XoEKK.js +0 -71
  145. package/dist/chunks/focus-ring-Dl-XoEKK.js.map +0 -1
  146. package/dist/chunks/form-associated-fKbeX_2P.js.map +0 -1
  147. package/dist/chunks/theme.css-DV3DRha-.js +0 -263
  148. package/dist/chunks/theme.css-DV3DRha-.js.map +0 -1
  149. package/dist/components/badge/badge.js.map +0 -1
  150. package/dist/components/button/button.js.map +0 -1
  151. package/dist/components/card/card.js.map +0 -1
  152. package/dist/components/checkbox/checkbox.js.map +0 -1
  153. package/dist/components/chip/chip.js.map +0 -1
  154. package/dist/components/dialog/dialog.js.map +0 -1
  155. package/dist/components/divider/divider.js.map +0 -1
  156. package/dist/components/fab/fab.js.map +0 -1
  157. package/dist/components/icon/icon.js.map +0 -1
  158. package/dist/components/icon-button/icon-button.js.map +0 -1
  159. package/dist/components/list/list.js.map +0 -1
  160. package/dist/components/progress/progress.js.map +0 -1
  161. package/dist/components/radio/radio.js.map +0 -1
  162. package/dist/components/snackbar/snackbar.js.map +0 -1
  163. package/dist/components/switch/switch.js.map +0 -1
  164. package/dist/components/tabs/tabs.js.map +0 -1
  165. package/dist/components/text-field/text-field.js.map +0 -1
  166. package/dist/internal/ripple/ripple.js.map +0 -1
@@ -0,0 +1,1582 @@
1
+ import { n as v, t as o } from "./decorate-DXuynaiA.js";
2
+ import "./ripple-squbKHhj.js";
3
+ import "./focus-ring-CuiJuM-y.js";
4
+ import "./icon-DrNqcNEL.js";
5
+ import { css as w, html as a, nothing as n } from "lit";
6
+ import { customElement as h, property as s, query as b, state as d } from "lit/decorators.js";
7
+ var k = w`
8
+ :host {
9
+ display: block;
10
+ width: 100%;
11
+ box-sizing: border-box;
12
+ font-family: var(--md-sys-typescale-font-family, 'Roboto', -apple-system, BlinkMacSystemFont, sans-serif);
13
+ position: relative;
14
+ border-radius: var(--md-sys-shape-corner-extra-large, 24px);
15
+ overflow: hidden;
16
+ color: var(--md-sys-color-on-surface, #1D1B20);
17
+ transition: box-shadow 200ms cubic-bezier(0.2, 0, 0, 1),
18
+ background-color 200ms cubic-bezier(0.2, 0, 0, 1);
19
+ }
20
+
21
+ *, *::before, *::after {
22
+ box-sizing: inherit;
23
+ }
24
+
25
+ /* --- Variants --- */
26
+ :host(:not([variant])),
27
+ :host([variant="elevated"]),
28
+ :host([variant="full"]) {
29
+ background-color: var(--md-sys-color-surface-container-low, #F7F2FA);
30
+ box-shadow: var(--md-sys-elevation-level1, 0px 1px 3px 1px rgba(0, 0, 0, 0.15));
31
+ }
32
+
33
+ :host([variant="filled"]) {
34
+ background-color: var(--md-sys-color-surface-container-highest, #E6E0E9);
35
+ box-shadow: var(--md-sys-elevation-level0, none);
36
+ }
37
+
38
+ :host([variant="outlined"]) {
39
+ background-color: var(--md-sys-color-surface, #FEF7FF);
40
+ border: 1px solid var(--md-sys-color-outline-variant, #CAC4D0);
41
+ box-shadow: var(--md-sys-elevation-level0, none);
42
+ }
43
+
44
+ :host([variant="compact"]),
45
+ :host([compact]) {
46
+ border-radius: var(--md-sys-shape-corner-large, 16px);
47
+ }
48
+
49
+ .player-container {
50
+ display: flex;
51
+ flex-direction: column;
52
+ width: 100%;
53
+ position: relative;
54
+ }
55
+
56
+ /* Hidden native media element */
57
+ .native-media {
58
+ display: none;
59
+ }
60
+
61
+ /* --- Video Mode Layout --- */
62
+ :host([type="video"]) .video-viewport {
63
+ position: relative;
64
+ width: 100%;
65
+ aspect-ratio: 16 / 9;
66
+ background-color: #000;
67
+ overflow: hidden;
68
+ display: flex;
69
+ align-items: center;
70
+ justify-content: center;
71
+ }
72
+
73
+ :host([type="video"]) video,
74
+ :host([type="video"]) ::slotted(video) {
75
+ width: 100%;
76
+ height: 100%;
77
+ object-fit: contain;
78
+ display: block;
79
+ }
80
+
81
+ /* Fullscreen Video Viewport (Scoped exclusively to the video viewport) */
82
+ .video-viewport:fullscreen {
83
+ width: 100vw !important;
84
+ height: 100vh !important;
85
+ max-width: 100vw !important;
86
+ max-height: 100vh !important;
87
+ aspect-ratio: auto !important;
88
+ background-color: #000 !important;
89
+ display: flex !important;
90
+ align-items: center !important;
91
+ justify-content: center !important;
92
+ border-radius: 0 !important;
93
+ margin: 0 !important;
94
+ padding: 0 !important;
95
+ }
96
+
97
+ .video-viewport:-webkit-full-screen {
98
+ width: 100vw !important;
99
+ height: 100vh !important;
100
+ max-width: 100vw !important;
101
+ max-height: 100vh !important;
102
+ aspect-ratio: auto !important;
103
+ background-color: #000 !important;
104
+ display: flex !important;
105
+ align-items: center !important;
106
+ justify-content: center !important;
107
+ border-radius: 0 !important;
108
+ margin: 0 !important;
109
+ padding: 0 !important;
110
+ }
111
+
112
+ .video-overlay {
113
+ position: absolute;
114
+ inset: 0;
115
+ display: flex;
116
+ flex-direction: column;
117
+ justify-content: space-between;
118
+ background: linear-gradient(
119
+ to bottom,
120
+ rgba(0, 0, 0, 0.65) 0%,
121
+ rgba(0, 0, 0, 0) 25%,
122
+ rgba(0, 0, 0, 0) 60%,
123
+ rgba(0, 0, 0, 0.8) 100%
124
+ );
125
+ opacity: 1;
126
+ transition: opacity 250ms cubic-bezier(0.2, 0, 0, 1);
127
+ color: #fff;
128
+ padding: 16px 20px;
129
+ pointer-events: none;
130
+ }
131
+
132
+ .video-overlay * {
133
+ pointer-events: auto;
134
+ }
135
+
136
+ .video-viewport:not(:hover):not(.controls-visible) .video-overlay.auto-hide {
137
+ opacity: 0;
138
+ }
139
+
140
+ .video-top-bar {
141
+ display: flex;
142
+ align-items: center;
143
+ justify-content: space-between;
144
+ gap: 12px;
145
+ }
146
+
147
+ .video-top-actions {
148
+ display: flex;
149
+ align-items: center;
150
+ gap: 8px;
151
+ }
152
+
153
+ .video-title {
154
+ font-size: var(--md-sys-typescale-title-medium-size, 16px);
155
+ font-weight: 500;
156
+ overflow: hidden;
157
+ text-overflow: ellipsis;
158
+ white-space: nowrap;
159
+ }
160
+
161
+ .video-center-controls {
162
+ display: flex;
163
+ align-items: center;
164
+ justify-content: center;
165
+ gap: 16px;
166
+ }
167
+
168
+ /* --- Audio Layout (Large Screen Default) --- */
169
+ .audio-layout {
170
+ display: flex;
171
+ flex-direction: column;
172
+ width: 100%;
173
+ padding: 20px 24px;
174
+ gap: 16px;
175
+ }
176
+
177
+ .audio-main-row {
178
+ display: flex;
179
+ align-items: center;
180
+ justify-content: space-between;
181
+ width: 100%;
182
+ gap: 16px;
183
+ }
184
+
185
+ .audio-header {
186
+ display: flex;
187
+ align-items: center;
188
+ gap: 16px;
189
+ min-width: 0;
190
+ flex: 1;
191
+ }
192
+
193
+ .artwork-container {
194
+ width: 64px;
195
+ height: 64px;
196
+ border-radius: var(--md-sys-shape-corner-medium, 12px);
197
+ background-color: var(--md-sys-color-surface-container-high, #ECE6F0);
198
+ overflow: hidden;
199
+ flex-shrink: 0;
200
+ display: flex;
201
+ align-items: center;
202
+ justify-content: center;
203
+ box-shadow: var(--md-sys-elevation-level1, 0px 1px 2px rgba(0, 0, 0, 0.1));
204
+ }
205
+
206
+ .artwork-img {
207
+ width: 100%;
208
+ height: 100%;
209
+ object-fit: cover;
210
+ display: block;
211
+ }
212
+
213
+ .artwork-fallback {
214
+ color: var(--md-sys-color-primary, #6750A4);
215
+ font-size: 32px;
216
+ }
217
+
218
+ .track-info {
219
+ flex: 1;
220
+ min-width: 0;
221
+ display: flex;
222
+ flex-direction: column;
223
+ justify-content: center;
224
+ gap: 2px;
225
+ }
226
+
227
+ .track-title {
228
+ font-size: var(--md-sys-typescale-title-medium-size, 16px);
229
+ font-weight: 600;
230
+ color: var(--md-sys-color-on-surface, #1D1B20);
231
+ overflow: hidden;
232
+ text-overflow: ellipsis;
233
+ white-space: nowrap;
234
+ line-height: 22px;
235
+ }
236
+
237
+ .track-artist {
238
+ font-size: var(--md-sys-typescale-body-medium-size, 14px);
239
+ color: var(--md-sys-color-on-surface-variant, #49454F);
240
+ overflow: hidden;
241
+ text-overflow: ellipsis;
242
+ white-space: nowrap;
243
+ line-height: 18px;
244
+ }
245
+
246
+ .track-album {
247
+ font-size: 12px;
248
+ color: var(--md-sys-color-outline, #79747E);
249
+ overflow: hidden;
250
+ text-overflow: ellipsis;
251
+ white-space: nowrap;
252
+ }
253
+
254
+ /* Compact controls (on right side) - hidden on large screens */
255
+ .compact-controls-right {
256
+ display: none;
257
+ align-items: center;
258
+ gap: 4px;
259
+ flex-shrink: 0;
260
+ margin-left: auto;
261
+ }
262
+
263
+ /* Full player scrubber and controls sections */
264
+ .full-player-scrubber {
265
+ display: flex;
266
+ flex-direction: column;
267
+ width: 100%;
268
+ }
269
+
270
+ .full-player-controls {
271
+ display: flex;
272
+ flex-direction: column;
273
+ width: 100%;
274
+ }
275
+
276
+ /* --- Small Screen / Compact Variant Layout --- */
277
+ /* Hide scrollbar/scrubber and show: Image | text (left) and Previous | Play/Pause | Next (right) */
278
+ @media (max-width: 600px) {
279
+ :host([type="audio"]:not([variant="full"])) .audio-layout {
280
+ padding: 10px 14px;
281
+ gap: 0;
282
+ }
283
+
284
+ :host([type="audio"]:not([variant="full"])) .audio-header {
285
+ gap: 12px;
286
+ }
287
+
288
+ :host([type="audio"]:not([variant="full"])) .artwork-container {
289
+ width: 44px;
290
+ height: 44px;
291
+ border-radius: var(--md-sys-shape-corner-small, 8px);
292
+ }
293
+
294
+ :host([type="audio"]:not([variant="full"])) .track-title {
295
+ font-size: 14px;
296
+ line-height: 18px;
297
+ }
298
+
299
+ :host([type="audio"]:not([variant="full"])) .track-artist {
300
+ font-size: 12px;
301
+ line-height: 16px;
302
+ }
303
+
304
+ :host([type="audio"]:not([variant="full"])) .track-album {
305
+ display: none;
306
+ }
307
+
308
+ :host([type="audio"]:not([variant="full"])) .compact-controls-right {
309
+ display: flex;
310
+ }
311
+
312
+ :host([type="audio"]:not([variant="full"])) .full-player-scrubber {
313
+ display: none !important;
314
+ }
315
+
316
+ :host([type="audio"]:not([variant="full"])) .full-player-controls {
317
+ display: none !important;
318
+ }
319
+ }
320
+
321
+ /* Explicit compact mode (forced compact on any screen width) */
322
+ :host([compact]) .audio-layout,
323
+ :host([variant="compact"]) .audio-layout {
324
+ padding: 10px 14px;
325
+ gap: 0;
326
+ }
327
+
328
+ :host([compact]) .audio-header,
329
+ :host([variant="compact"]) .audio-header {
330
+ gap: 12px;
331
+ }
332
+
333
+ :host([compact]) .artwork-container,
334
+ :host([variant="compact"]) .artwork-container {
335
+ width: 44px;
336
+ height: 44px;
337
+ border-radius: var(--md-sys-shape-corner-small, 8px);
338
+ }
339
+
340
+ :host([compact]) .track-title,
341
+ :host([variant="compact"]) .track-title {
342
+ font-size: 14px;
343
+ line-height: 18px;
344
+ }
345
+
346
+ :host([compact]) .track-artist,
347
+ :host([variant="compact"]) .track-artist {
348
+ font-size: 12px;
349
+ line-height: 16px;
350
+ }
351
+
352
+ :host([compact]) .track-album,
353
+ :host([variant="compact"]) .track-album {
354
+ display: none;
355
+ }
356
+
357
+ :host([compact]) .compact-controls-right,
358
+ :host([variant="compact"]) .compact-controls-right {
359
+ display: flex;
360
+ }
361
+
362
+ :host([compact]) .full-player-scrubber,
363
+ :host([variant="compact"]) .full-player-scrubber {
364
+ display: none !important;
365
+ }
366
+
367
+ :host([compact]) .full-player-controls,
368
+ :host([variant="compact"]) .full-player-controls {
369
+ display: none !important;
370
+ }
371
+
372
+ /* --- Progress / Scrubber Section --- */
373
+ .scrubber-section {
374
+ display: flex;
375
+ flex-direction: column;
376
+ gap: 4px;
377
+ width: 100%;
378
+ }
379
+
380
+ .progress-slider-container {
381
+ position: relative;
382
+ height: 24px;
383
+ display: flex;
384
+ align-items: center;
385
+ cursor: pointer;
386
+ touch-action: none;
387
+ user-select: none;
388
+ }
389
+
390
+ .slider-track-bg {
391
+ position: absolute;
392
+ left: 0;
393
+ right: 0;
394
+ height: 6px;
395
+ border-radius: 3px;
396
+ background-color: var(--md-sys-color-surface-variant, #E7E0EC);
397
+ overflow: hidden;
398
+ clip-path: inset(0 0 0 0%);
399
+ transition: clip-path 300ms cubic-bezier(0.2, 0, 0, 1);
400
+ }
401
+
402
+ .progress-slider-container.playing-wave .slider-track-bg {
403
+ clip-path: inset(0 0 0 var(--progress-percent, 0%));
404
+ }
405
+
406
+ .slider-buffer-bar {
407
+ position: absolute;
408
+ top: 0;
409
+ bottom: 0;
410
+ left: 0;
411
+ background-color: var(--md-sys-color-secondary-container, #E8DEF8);
412
+ transition: width 150ms linear;
413
+ }
414
+
415
+ .slider-active-bar {
416
+ position: absolute;
417
+ top: 0;
418
+ bottom: 0;
419
+ left: 0;
420
+ background-color: var(--md-sys-color-primary, #6750A4);
421
+ border-radius: 3px;
422
+ opacity: 1;
423
+ transition: opacity 250ms cubic-bezier(0.2, 0, 0, 1);
424
+ }
425
+
426
+ .progress-slider-container.playing-wave .slider-active-bar {
427
+ opacity: 0;
428
+ }
429
+
430
+ .slider-sinus-wave {
431
+ position: absolute;
432
+ left: 0;
433
+ top: 50%;
434
+ transform: translateY(-50%) scaleY(0.2);
435
+ height: 20px;
436
+ background-color: var(--md-sys-color-primary, #6750A4);
437
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 20'%3E%3Cpath d='M 0 10 C 4.5 4.5, 11.5 4.5, 16 10 S 27.5 15.5, 32 10' fill='none' stroke='black' stroke-width='4' stroke-linecap='round'/%3E%3C/svg%3E");
438
+ mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 20'%3E%3Cpath d='M 0 10 C 4.5 4.5, 11.5 4.5, 16 10 S 27.5 15.5, 32 10' fill='none' stroke='black' stroke-width='4' stroke-linecap='round'/%3E%3C/svg%3E");
439
+ -webkit-mask-repeat: repeat-x;
440
+ mask-repeat: repeat-x;
441
+ -webkit-mask-size: 32px 20px;
442
+ mask-size: 32px 20px;
443
+ animation: sinus-wave-anim 1.2s linear infinite;
444
+ animation-play-state: paused;
445
+ opacity: 0;
446
+ pointer-events: none;
447
+ z-index: 1;
448
+ transition: transform 300ms cubic-bezier(0.2, 0, 0, 1),
449
+ opacity 250ms cubic-bezier(0.2, 0, 0, 1);
450
+ }
451
+
452
+ .progress-slider-container.playing-wave .slider-sinus-wave {
453
+ opacity: 1;
454
+ transform: translateY(-50%) scaleY(1);
455
+ animation-play-state: running;
456
+ }
457
+
458
+ @keyframes sinus-wave-anim {
459
+ 0% {
460
+ -webkit-mask-position: 0 0;
461
+ mask-position: 0 0;
462
+ }
463
+ 100% {
464
+ -webkit-mask-position: -32px 0;
465
+ mask-position: -32px 0;
466
+ }
467
+ }
468
+
469
+ @media (prefers-reduced-motion: reduce) {
470
+ .slider-sinus-wave {
471
+ animation: none;
472
+ transition: none;
473
+ }
474
+ .slider-track-bg {
475
+ transition: none;
476
+ }
477
+ .slider-active-bar {
478
+ transition: none;
479
+ }
480
+ }
481
+
482
+ .slider-thumb {
483
+ position: absolute;
484
+ width: 16px;
485
+ height: 16px;
486
+ border-radius: 50%;
487
+ background-color: var(--md-sys-color-primary, #6750A4);
488
+ box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);
489
+ top: 50%;
490
+ transform: translate(-50%, -50%) scale(0.85);
491
+ transition: transform 120ms cubic-bezier(0.2, 0, 0, 1), background-color 120ms ease;
492
+ z-index: 2;
493
+ }
494
+
495
+ .progress-slider-container:hover .slider-thumb,
496
+ .progress-slider-container:active .slider-thumb,
497
+ .progress-slider-container.dragging .slider-thumb {
498
+ transform: translate(-50%, -50%) scale(1.2);
499
+ }
500
+
501
+ .time-display {
502
+ display: flex;
503
+ justify-content: space-between;
504
+ font-size: 12px;
505
+ font-variant-numeric: tabular-nums;
506
+ color: var(--md-sys-color-on-surface-variant, #49454F);
507
+ font-weight: 500;
508
+ }
509
+
510
+ /* --- Main Controls Row --- */
511
+ .controls-row {
512
+ display: flex;
513
+ align-items: center;
514
+ justify-content: space-between;
515
+ gap: 8px;
516
+ width: 100%;
517
+ }
518
+
519
+ .controls-group-left,
520
+ .controls-group-right {
521
+ display: flex;
522
+ align-items: center;
523
+ gap: 6px;
524
+ flex: 1;
525
+ }
526
+
527
+ .controls-group-right {
528
+ justify-content: flex-end;
529
+ }
530
+
531
+ .controls-group-center {
532
+ display: flex;
533
+ align-items: center;
534
+ justify-content: center;
535
+ gap: 8px;
536
+ }
537
+
538
+ /* Play / Pause Primary Button */
539
+ .play-pause-btn {
540
+ width: 48px;
541
+ height: 48px;
542
+ border-radius: var(--md-sys-shape-corner-full, 9999px);
543
+ background-color: var(--md-sys-color-primary, #6750A4);
544
+ color: var(--md-sys-color-on-primary, #FFFFFF);
545
+ border: none;
546
+ display: inline-flex;
547
+ align-items: center;
548
+ justify-content: center;
549
+ cursor: pointer;
550
+ position: relative;
551
+ overflow: hidden;
552
+ outline: none;
553
+ box-shadow: var(--md-sys-elevation-level1, 0px 1px 3px rgba(0, 0, 0, 0.2));
554
+ transition: transform 120ms cubic-bezier(0.2, 0, 0, 1),
555
+ background-color 150ms ease,
556
+ box-shadow 150ms ease;
557
+ }
558
+
559
+ .play-pause-btn.compact-play-btn {
560
+ width: 40px;
561
+ height: 40px;
562
+ }
563
+
564
+ .play-pause-btn.compact-play-btn md-icon {
565
+ font-size: 24px;
566
+ }
567
+
568
+ .play-pause-btn:hover {
569
+ background-color: var(--md-sys-color-primary-container, #EADDFF);
570
+ color: var(--md-sys-color-on-primary-container, #21005D);
571
+ box-shadow: var(--md-sys-elevation-level2, 0px 2px 6px rgba(0, 0, 0, 0.25));
572
+ transform: scale(1.04);
573
+ }
574
+
575
+ .play-pause-btn:active {
576
+ transform: scale(0.96);
577
+ }
578
+
579
+ .play-pause-btn md-icon {
580
+ font-size: 28px;
581
+ }
582
+
583
+ /* Control Icon Button */
584
+ .ctrl-btn {
585
+ width: 36px;
586
+ height: 36px;
587
+ border-radius: var(--md-sys-shape-corner-full, 9999px);
588
+ background: transparent;
589
+ border: none;
590
+ color: var(--md-sys-color-on-surface-variant, #49454F);
591
+ display: inline-flex;
592
+ align-items: center;
593
+ justify-content: center;
594
+ cursor: pointer;
595
+ position: relative;
596
+ overflow: hidden;
597
+ outline: none;
598
+ transition: background-color 120ms ease, color 120ms ease;
599
+ }
600
+
601
+ .ctrl-btn:hover {
602
+ background-color: var(--md-sys-color-surface-container-highest, rgba(0, 0, 0, 0.08));
603
+ color: var(--md-sys-color-on-surface, #1D1B20);
604
+ }
605
+
606
+ .ctrl-btn.active {
607
+ color: var(--md-sys-color-primary, #6750A4);
608
+ background-color: var(--md-sys-color-primary-container, #EADDFF);
609
+ }
610
+
611
+ .ctrl-btn md-icon {
612
+ font-size: 20px;
613
+ }
614
+
615
+ /* Playback Speed Badge / Pill */
616
+ .speed-btn {
617
+ min-width: 32px;
618
+ height: 28px;
619
+ padding: 0 6px;
620
+ border-radius: var(--md-sys-shape-corner-small, 8px);
621
+ font-size: 11px;
622
+ font-weight: 600;
623
+ background: transparent;
624
+ border: 1px solid var(--md-sys-color-outline-variant, #CAC4D0);
625
+ color: var(--md-sys-color-on-surface-variant, #49454F);
626
+ cursor: pointer;
627
+ display: inline-flex;
628
+ align-items: center;
629
+ justify-content: center;
630
+ position: relative;
631
+ outline: none;
632
+ transition: all 120ms ease;
633
+ }
634
+
635
+ .speed-btn:hover {
636
+ background-color: var(--md-sys-color-surface-container-highest, #E6E0E9);
637
+ border-color: var(--md-sys-color-outline, #79747E);
638
+ color: var(--md-sys-color-on-surface, #1D1B20);
639
+ }
640
+
641
+ /* Volume slider widget - Always visible in full player */
642
+ .volume-container {
643
+ display: flex;
644
+ align-items: center;
645
+ position: relative;
646
+ gap: 6px;
647
+ }
648
+
649
+ .volume-slider-wrapper {
650
+ width: 72px;
651
+ opacity: 1;
652
+ display: flex;
653
+ align-items: center;
654
+ }
655
+
656
+ .volume-slider {
657
+ -webkit-appearance: none;
658
+ appearance: none;
659
+ width: 72px;
660
+ height: 4px;
661
+ border-radius: 2px;
662
+ background: linear-gradient(
663
+ to right,
664
+ var(--md-sys-color-primary, #6750A4) 0%,
665
+ var(--md-sys-color-primary, #6750A4) var(--volume-percent, 100%),
666
+ var(--md-sys-color-surface-variant, #E7E0EC) var(--volume-percent, 100%),
667
+ var(--md-sys-color-surface-variant, #E7E0EC) 100%
668
+ );
669
+ accent-color: var(--md-sys-color-primary, #6750A4);
670
+ outline: none;
671
+ cursor: pointer;
672
+ }
673
+
674
+ .volume-slider::-webkit-slider-thumb {
675
+ -webkit-appearance: none;
676
+ appearance: none;
677
+ width: 12px;
678
+ height: 12px;
679
+ border-radius: 50%;
680
+ background: var(--md-sys-color-primary, #6750A4);
681
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
682
+ cursor: pointer;
683
+ transition: transform 100ms ease;
684
+ }
685
+
686
+ .volume-slider::-webkit-slider-thumb:hover {
687
+ transform: scale(1.25);
688
+ }
689
+
690
+ .volume-slider::-moz-range-thumb {
691
+ width: 12px;
692
+ height: 12px;
693
+ border-radius: 50%;
694
+ background: var(--md-sys-color-primary, #6750A4);
695
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
696
+ cursor: pointer;
697
+ border: none;
698
+ }
699
+
700
+ .volume-slider::-moz-range-progress {
701
+ background-color: var(--md-sys-color-primary, #6750A4);
702
+ border-radius: 2px;
703
+ height: 4px;
704
+ }
705
+
706
+ /* Video controls bar inside video viewport */
707
+ .video-bottom-bar {
708
+ display: flex;
709
+ flex-direction: column;
710
+ gap: 8px;
711
+ width: 100%;
712
+ }
713
+
714
+ .video-bottom-bar .controls-row {
715
+ color: #fff;
716
+ }
717
+
718
+ .video-bottom-bar .ctrl-btn {
719
+ color: #fff;
720
+ }
721
+
722
+ .video-bottom-bar .ctrl-btn:hover {
723
+ background-color: rgba(255, 255, 255, 0.2);
724
+ color: #fff;
725
+ }
726
+
727
+ .video-bottom-bar .ctrl-btn.active {
728
+ background-color: var(--md-sys-color-primary, #6750A4);
729
+ color: #fff;
730
+ }
731
+
732
+ .video-bottom-bar .time-display {
733
+ color: rgba(255, 255, 255, 0.85);
734
+ }
735
+
736
+ .video-bottom-bar .speed-btn {
737
+ border-color: rgba(255, 255, 255, 0.4);
738
+ color: #fff;
739
+ }
740
+
741
+ .video-bottom-bar .speed-btn:hover {
742
+ background-color: rgba(255, 255, 255, 0.2);
743
+ }
744
+
745
+ .video-bottom-bar .volume-slider {
746
+ background: linear-gradient(
747
+ to right,
748
+ var(--md-sys-color-primary, #6750A4) 0%,
749
+ var(--md-sys-color-primary, #6750A4) var(--volume-percent, 100%),
750
+ rgba(255, 255, 255, 0.35) var(--volume-percent, 100%),
751
+ rgba(255, 255, 255, 0.35) 100%
752
+ );
753
+ }
754
+
755
+ .video-bottom-bar .volume-slider::-webkit-slider-thumb {
756
+ background: var(--md-sys-color-primary, #6750A4);
757
+ border: 1.5px solid #fff;
758
+ }
759
+
760
+ .video-bottom-bar .volume-slider::-moz-range-thumb {
761
+ background: var(--md-sys-color-primary, #6750A4);
762
+ border: 1.5px solid #fff;
763
+ }
764
+
765
+ /* Extra content / footer slot */
766
+ .extra-content {
767
+ border-top: 1px solid var(--md-sys-color-outline-variant, #CAC4D0);
768
+ padding: 12px 24px;
769
+ font-size: var(--md-sys-typescale-body-medium-size, 14px);
770
+ color: var(--md-sys-color-on-surface-variant, #49454F);
771
+ }
772
+
773
+ .extra-content[hidden],
774
+ .extra-content:empty {
775
+ display: none !important;
776
+ }
777
+
778
+ :host([compact]) .extra-content,
779
+ :host([variant="compact"]) .extra-content {
780
+ padding: 8px 16px;
781
+ }
782
+ `, m = [
783
+ 0.5,
784
+ 0.75,
785
+ 1,
786
+ 1.25,
787
+ 1.5,
788
+ 2
789
+ ];
790
+ function p(c) {
791
+ if (isNaN(c) || c < 0 || !isFinite(c)) return "0:00";
792
+ const e = Math.floor(c), t = Math.floor(e / 3600), r = Math.floor(e % 3600 / 60), l = e % 60, u = l < 10 ? `0${l}` : `${l}`;
793
+ return t > 0 ? `${t}:${r < 10 ? `0${r}` : `${r}`}:${u}` : `${r}:${u}`;
794
+ }
795
+ var i = class extends v {
796
+ constructor(...e) {
797
+ super(...e), this.type = "audio", this.variant = "elevated", this.src = "", this.trackTitle = "", this.artist = "", this.album = "", this.poster = "", this.currentTime = 0, this.duration = 0, this.volume = 1, this.muted = !1, this.playbackRate = 1, this.paused = !0, this.loop = !1, this.autoplay = !1, this.preload = "metadata", this.compact = !1, this.showSkip = !0, this.showSeek = !0, this.showVolume = !0, this.showPlaybackRate = !0, this.showQueue = !0, this.seekStep = 10, this.shuffle = !1, this.buffered = 0, this.crossorigin = "", this.isDraggingScrubber = !1, this.scrubFraction = 0, this.isFullscreen = !1, this.queueOpen = !1, this.controlsVisible = !0, this.hasExtraContent = !1, this.slottedMediaEl = null, this.controlsHideTimeout = null, this.handleDefaultSlotChange = (t) => {
798
+ const r = t.target.assignedNodes({ flatten: !0 });
799
+ this.hasExtraContent = r.some((l) => l.nodeType === Node.ELEMENT_NODE || l.textContent && l.textContent.trim().length > 0);
800
+ }, this.handleMediaSlotChange = (t) => {
801
+ const r = t.target.assignedElements().find((l) => l instanceof HTMLAudioElement || l instanceof HTMLVideoElement);
802
+ r ? (this.slottedMediaEl = r, this.bindMediaEvents(this.slottedMediaEl), this.syncMediaProperties()) : this.slottedMediaEl = null;
803
+ }, this.handleFullscreenChange = (t) => {
804
+ if (t && (t instanceof CustomEvent || t.detail !== void 0)) return;
805
+ if (this.type !== "video") {
806
+ this.isFullscreen = !1;
807
+ return;
808
+ }
809
+ const r = this.videoViewportEl || this.shadowRoot?.querySelector(".video-viewport"), l = !!(document.fullscreenElement === r || document.fullscreenElement === this || this.shadowRoot && this.shadowRoot.fullscreenElement === r || document.webkitFullscreenElement === r || document.webkitFullscreenElement === this || document.mozFullScreenElement === r);
810
+ this.isFullscreen = l, this.emitEvent("fullscreenchange", { fullscreen: l }, { bubbles: !1 });
811
+ }, this.handleMouseMove = () => {
812
+ this.controlsVisible = !0, this.controlsHideTimeout && clearTimeout(this.controlsHideTimeout), !this.paused && this.type === "video" && (this.controlsHideTimeout = setTimeout(() => {
813
+ this.controlsVisible = !1;
814
+ }, 3e3));
815
+ }, this.handleVolumeSliderInput = (t) => {
816
+ const r = t.target, l = parseFloat(r.value);
817
+ this.setVolume(l);
818
+ }, this.handleScrubberPointerDown = (t) => {
819
+ t.preventDefault(), this.sliderContainerEl && (this.isDraggingScrubber = !0, this.sliderContainerEl.classList.add("dragging"), this.sliderContainerEl.setPointerCapture(t.pointerId), this.updateScrubberFromPointer(t));
820
+ }, this.handleScrubberPointerMove = (t) => {
821
+ this.isDraggingScrubber && this.updateScrubberFromPointer(t);
822
+ }, this.handleScrubberPointerUp = (t) => {
823
+ if (this.isDraggingScrubber) {
824
+ if (this.isDraggingScrubber = !1, this.sliderContainerEl) {
825
+ this.sliderContainerEl.classList.remove("dragging");
826
+ try {
827
+ this.sliderContainerEl.releasePointerCapture(t.pointerId);
828
+ } catch {
829
+ }
830
+ }
831
+ const r = (this.duration || 0) * this.scrubFraction;
832
+ this.seek(r);
833
+ }
834
+ }, this.handleKeyDown = (t) => {
835
+ const r = t.target;
836
+ if (!(r.tagName === "INPUT" || r.tagName === "TEXTAREA"))
837
+ switch (t.key) {
838
+ case " ":
839
+ case "k":
840
+ case "K":
841
+ t.preventDefault(), this.togglePlay();
842
+ break;
843
+ case "ArrowLeft":
844
+ case "j":
845
+ case "J":
846
+ t.preventDefault(), this.seekBy(-this.seekStep);
847
+ break;
848
+ case "ArrowRight":
849
+ case "l":
850
+ case "L":
851
+ t.preventDefault(), this.seekBy(this.seekStep);
852
+ break;
853
+ case "ArrowUp":
854
+ t.preventDefault(), this.setVolume(Math.min(1, this.volume + 0.1));
855
+ break;
856
+ case "ArrowDown":
857
+ t.preventDefault(), this.setVolume(Math.max(0, this.volume - 0.1));
858
+ break;
859
+ case "m":
860
+ case "M":
861
+ t.preventDefault(), this.toggleMute();
862
+ break;
863
+ case "f":
864
+ case "F":
865
+ this.type === "video" && (t.preventDefault(), this.toggleFullscreen());
866
+ }
867
+ };
868
+ }
869
+ static {
870
+ this.styles = [v.styles, k];
871
+ }
872
+ connectedCallback() {
873
+ super.connectedCallback(), this.setAttribute("role", "region"), this.setAttribute("aria-label", this.trackTitle ? `Media Player: ${this.trackTitle}` : "Media Player"), document.addEventListener("fullscreenchange", this.handleFullscreenChange), document.addEventListener("webkitfullscreenchange", this.handleFullscreenChange), document.addEventListener("mozfullscreenchange", this.handleFullscreenChange), document.addEventListener("MSFullscreenChange", this.handleFullscreenChange);
874
+ }
875
+ disconnectedCallback() {
876
+ super.disconnectedCallback(), document.removeEventListener("fullscreenchange", this.handleFullscreenChange), document.removeEventListener("webkitfullscreenchange", this.handleFullscreenChange), document.removeEventListener("mozfullscreenchange", this.handleFullscreenChange), document.removeEventListener("MSFullscreenChange", this.handleFullscreenChange), this.controlsHideTimeout && clearTimeout(this.controlsHideTimeout);
877
+ }
878
+ firstUpdated() {
879
+ this.syncMediaProperties();
880
+ }
881
+ updated(e) {
882
+ super.updated(e), e.has("trackTitle") && this.setAttribute("aria-label", this.trackTitle ? `Media Player: ${this.trackTitle}` : "Media Player");
883
+ const t = this.getMediaElement();
884
+ t && (e.has("src") && this.src && t.src !== this.src && (t.src = this.src, t.load?.()), e.has("volume") && (t.volume = Math.max(0, Math.min(1, this.volume))), e.has("muted") && (t.muted = this.muted), e.has("playbackRate") && (t.playbackRate = this.playbackRate), e.has("loop") && (t.loop = this.loop));
885
+ }
886
+ getMediaElement() {
887
+ return this.slottedMediaEl ? this.slottedMediaEl : this.internalMediaEl || null;
888
+ }
889
+ syncMediaProperties() {
890
+ const e = this.getMediaElement();
891
+ e && (e.volume = this.volume, e.muted = this.muted, e.playbackRate = this.playbackRate, e.loop = this.loop, e.autoplay = this.autoplay, e.preload = this.preload);
892
+ }
893
+ bindMediaEvents(e) {
894
+ e.onplay = () => {
895
+ this.paused = !1, this.emitEvent("play");
896
+ }, e.onpause = () => {
897
+ this.paused = !0, this.emitEvent("pause");
898
+ }, e.ontimeupdate = () => {
899
+ this.isDraggingScrubber || (this.currentTime = e.currentTime || 0), this.emitEvent("timeupdate", {
900
+ currentTime: this.currentTime,
901
+ duration: this.duration,
902
+ progress: this.duration > 0 ? this.currentTime / this.duration : 0
903
+ });
904
+ }, e.ondurationchange = () => {
905
+ this.duration = e.duration || 0;
906
+ }, e.onloadedmetadata = () => {
907
+ this.duration = e.duration || 0, this.currentTime = e.currentTime || 0;
908
+ }, e.onprogress = () => {
909
+ if (e.buffered && e.buffered.length > 0) {
910
+ const t = e.buffered.end(e.buffered.length - 1);
911
+ this.buffered = this.duration > 0 ? t / this.duration : 0;
912
+ }
913
+ }, e.onvolumechange = () => {
914
+ this.volume = e.volume, this.muted = e.muted, this.emitEvent("volumechange", {
915
+ volume: this.volume,
916
+ muted: this.muted
917
+ });
918
+ }, e.onratechange = () => {
919
+ this.playbackRate = e.playbackRate, this.emitEvent("ratechange", { playbackRate: this.playbackRate });
920
+ }, e.onended = () => {
921
+ this.paused = !0, this.emitEvent("ended");
922
+ }, e.onseeking = () => {
923
+ this.emitEvent("seeking", { currentTime: e.currentTime });
924
+ }, e.onseeked = () => {
925
+ this.emitEvent("seeked", { currentTime: e.currentTime });
926
+ }, e.onerror = (t) => {
927
+ this.emitEvent("error", { error: t });
928
+ };
929
+ }
930
+ async play() {
931
+ const e = this.getMediaElement();
932
+ if (e) try {
933
+ await e.play();
934
+ } catch {
935
+ this.paused = !1;
936
+ }
937
+ else this.paused = !1;
938
+ this.paused = !1, this.emitEvent("play");
939
+ }
940
+ pause() {
941
+ const e = this.getMediaElement();
942
+ e && e.pause(), this.paused = !0, this.emitEvent("pause");
943
+ }
944
+ togglePlay() {
945
+ this.paused ? this.play() : this.pause();
946
+ }
947
+ seek(e) {
948
+ const t = Math.max(0, Math.min(this.duration || 1 / 0, e));
949
+ this.currentTime = t;
950
+ const r = this.getMediaElement();
951
+ r && (r.currentTime = t), this.emitEvent("seeked", { currentTime: t });
952
+ }
953
+ seekBy(e) {
954
+ this.seek(this.currentTime + e);
955
+ }
956
+ setVolume(e) {
957
+ const t = Math.max(0, Math.min(1, e));
958
+ this.volume = t, t > 0 && this.muted && (this.muted = !1);
959
+ const r = this.getMediaElement();
960
+ r && (r.volume = t, r.muted = this.muted), this.emitEvent("volumechange", {
961
+ volume: this.volume,
962
+ muted: this.muted
963
+ });
964
+ }
965
+ toggleMute() {
966
+ this.muted = !this.muted;
967
+ const e = this.getMediaElement();
968
+ e && (e.muted = this.muted), this.emitEvent("volumechange", {
969
+ volume: this.volume,
970
+ muted: this.muted
971
+ });
972
+ }
973
+ setPlaybackRate(e) {
974
+ this.playbackRate = e;
975
+ const t = this.getMediaElement();
976
+ t && (t.playbackRate = e), this.emitEvent("ratechange", { playbackRate: e });
977
+ }
978
+ cyclePlaybackRate() {
979
+ const e = (m.indexOf(this.playbackRate) + 1) % m.length, t = m[e] ?? 1;
980
+ this.setPlaybackRate(t);
981
+ }
982
+ toggleLoop() {
983
+ this.loop = !this.loop;
984
+ const e = this.getMediaElement();
985
+ e && (e.loop = this.loop);
986
+ }
987
+ toggleShuffle() {
988
+ this.shuffle = !this.shuffle, this.emitEvent("shuffle", { shuffle: this.shuffle });
989
+ }
990
+ toggleQueue() {
991
+ this.queueOpen = !this.queueOpen, this.emitEvent("queue", { open: this.queueOpen });
992
+ }
993
+ restart() {
994
+ this.seek(0), this.play();
995
+ }
996
+ async toggleFullscreen() {
997
+ if (this.type !== "video") return;
998
+ const e = this.videoViewportEl || this.shadowRoot?.querySelector(".video-viewport") || this;
999
+ if (document.fullscreenElement === e || document.fullscreenElement === this || this.shadowRoot && this.shadowRoot.fullscreenElement === e || document.webkitFullscreenElement === e || document.webkitFullscreenElement === this || document.mozFullScreenElement === e || document.msFullscreenElement === e) try {
1000
+ document.exitFullscreen ? await document.exitFullscreen() : document.webkitExitFullscreen ? await document.webkitExitFullscreen() : document.mozCancelFullScreen ? await document.mozCancelFullScreen() : document.msExitFullscreen && await document.msExitFullscreen(), this.isFullscreen = !1;
1001
+ } catch {
1002
+ this.isFullscreen = !1;
1003
+ }
1004
+ else try {
1005
+ if (e.requestFullscreen) await e.requestFullscreen();
1006
+ else if (e.webkitRequestFullscreen) await e.webkitRequestFullscreen();
1007
+ else if (e.mozRequestFullScreen) await e.mozRequestFullScreen();
1008
+ else if (e.msRequestFullscreen) await e.msRequestFullscreen();
1009
+ else {
1010
+ const t = this.getMediaElement();
1011
+ t && t.webkitEnterFullscreen && t.webkitEnterFullscreen();
1012
+ }
1013
+ this.isFullscreen = !0;
1014
+ } catch {
1015
+ this.isFullscreen = !0;
1016
+ }
1017
+ this.emitEvent("fullscreenchange", { fullscreen: this.isFullscreen }, { bubbles: !1 });
1018
+ }
1019
+ async togglePictureInPicture() {
1020
+ const e = this.getMediaElement();
1021
+ e instanceof HTMLVideoElement && "requestPictureInPicture" in e && (document.pictureInPictureElement ? await document.exitPictureInPicture() : await e.requestPictureInPicture());
1022
+ }
1023
+ previous() {
1024
+ this.emitEvent("previous");
1025
+ }
1026
+ next() {
1027
+ this.emitEvent("next");
1028
+ }
1029
+ updateScrubberFromPointer(e) {
1030
+ if (!this.sliderContainerEl) return;
1031
+ const t = this.sliderContainerEl.getBoundingClientRect(), r = Math.max(0, Math.min(t.width, e.clientX - t.left)), l = t.width > 0 ? r / t.width : 0;
1032
+ this.scrubFraction = Math.max(0, Math.min(1, l)), this.isDraggingScrubber && (this.currentTime = (this.duration || 0) * this.scrubFraction);
1033
+ }
1034
+ getVolumeIcon() {
1035
+ return this.muted || this.volume === 0 ? "volume_off" : this.volume < 0.5 ? "volume_down" : "volume_up";
1036
+ }
1037
+ renderScrubber(e = !1) {
1038
+ const t = this.duration > 0 ? Math.min(1, Math.max(0, this.currentTime / this.duration)) : 0, r = (this.isDraggingScrubber ? this.scrubFraction : t) * 100, l = Math.min(1, Math.max(0, this.buffered)) * 100, u = !e && this.type !== "video", x = u && !this.paused;
1039
+ return a`
1040
+ <div class="scrubber-section">
1041
+ <div
1042
+ class="progress-slider-container ${x ? "playing-wave" : ""}"
1043
+ role="slider"
1044
+ aria-label="Seek track position"
1045
+ aria-valuemin="0"
1046
+ aria-valuemax=${this.duration || 100}
1047
+ aria-valuenow=${this.currentTime}
1048
+ aria-valuetext="${p(this.currentTime)} of ${p(this.duration)}"
1049
+ tabindex="0"
1050
+ style="--progress-percent: ${r}%;"
1051
+ @pointerdown=${this.handleScrubberPointerDown}
1052
+ @pointermove=${this.handleScrubberPointerMove}
1053
+ @pointerup=${this.handleScrubberPointerUp}
1054
+ @pointercancel=${this.handleScrubberPointerUp}
1055
+ >
1056
+ <div class="slider-track-bg">
1057
+ <div class="slider-buffer-bar" style="width: ${l}%"></div>
1058
+ <div class="slider-active-bar" style="width: ${r}%"></div>
1059
+ </div>
1060
+ ${u ? a`<div class="slider-sinus-wave" style="width: ${r}%"></div>` : n}
1061
+ <div class="slider-thumb" style="left: ${r}%"></div>
1062
+ </div>
1063
+
1064
+ <div class="time-display">
1065
+ <span class="time-current">${p(this.currentTime)}</span>
1066
+ <span class="time-duration">${p(this.duration)}</span>
1067
+ </div>
1068
+ </div>
1069
+ `;
1070
+ }
1071
+ renderControls(e = !1) {
1072
+ return a`
1073
+ <div class="controls-row">
1074
+ <!-- Left Group -->
1075
+ <div class="controls-group-left">
1076
+ ${e ? n : a`
1077
+ <button
1078
+ class="ctrl-btn ${this.shuffle ? "active" : ""}"
1079
+ type="button"
1080
+ aria-label="Toggle shuffle"
1081
+ aria-pressed=${this.shuffle}
1082
+ @click=${this.toggleShuffle}
1083
+ >
1084
+ <md-ripple></md-ripple>
1085
+ <md-focus-ring></md-focus-ring>
1086
+ <md-icon name="shuffle"></md-icon>
1087
+ </button>
1088
+ `}
1089
+
1090
+ ${this.showVolume ? a`
1091
+ <div class="volume-container">
1092
+ <button
1093
+ class="ctrl-btn"
1094
+ type="button"
1095
+ aria-label=${this.muted ? "Unmute" : "Mute"}
1096
+ @click=${this.toggleMute}
1097
+ >
1098
+ <md-ripple></md-ripple>
1099
+ <md-focus-ring></md-focus-ring>
1100
+ <md-icon name=${this.getVolumeIcon()}></md-icon>
1101
+ </button>
1102
+ <div class="volume-slider-wrapper">
1103
+ <input
1104
+ class="volume-slider"
1105
+ type="range"
1106
+ min="0"
1107
+ max="1"
1108
+ step="0.05"
1109
+ aria-label="Volume level"
1110
+ style="--volume-percent: ${(this.muted ? 0 : this.volume) * 100}%;"
1111
+ .value=${String(this.muted ? 0 : this.volume)}
1112
+ @input=${this.handleVolumeSliderInput}
1113
+ />
1114
+ </div>
1115
+ </div>
1116
+ ` : n}
1117
+ </div>
1118
+
1119
+ <!-- Center Group (Primary controls) -->
1120
+ <div class="controls-group-center">
1121
+ ${this.showSkip ? a`
1122
+ <button
1123
+ class="ctrl-btn"
1124
+ type="button"
1125
+ aria-label="Previous track"
1126
+ @click=${this.previous}
1127
+ >
1128
+ <md-ripple></md-ripple>
1129
+ <md-focus-ring></md-focus-ring>
1130
+ <md-icon name="skip_previous"></md-icon>
1131
+ </button>
1132
+ ` : n}
1133
+
1134
+ ${this.showSeek ? a`
1135
+ <button
1136
+ class="ctrl-btn"
1137
+ type="button"
1138
+ aria-label="Rewind ${this.seekStep} seconds"
1139
+ @click=${() => this.seekBy(-this.seekStep)}
1140
+ >
1141
+ <md-ripple></md-ripple>
1142
+ <md-focus-ring></md-focus-ring>
1143
+ <md-icon name="replay_10"></md-icon>
1144
+ </button>
1145
+ ` : n}
1146
+
1147
+ <button
1148
+ class="play-pause-btn"
1149
+ type="button"
1150
+ aria-label=${this.paused ? "Play" : "Pause"}
1151
+ @click=${this.togglePlay}
1152
+ >
1153
+ <md-ripple></md-ripple>
1154
+ <md-focus-ring></md-focus-ring>
1155
+ <md-icon name=${this.paused ? "play_arrow" : "pause"}></md-icon>
1156
+ </button>
1157
+
1158
+ ${this.showSeek ? a`
1159
+ <button
1160
+ class="ctrl-btn"
1161
+ type="button"
1162
+ aria-label="Forward ${this.seekStep} seconds"
1163
+ @click=${() => this.seekBy(this.seekStep)}
1164
+ >
1165
+ <md-ripple></md-ripple>
1166
+ <md-focus-ring></md-focus-ring>
1167
+ <md-icon name="forward_10"></md-icon>
1168
+ </button>
1169
+ ` : n}
1170
+
1171
+ ${this.showSkip ? a`
1172
+ <button
1173
+ class="ctrl-btn"
1174
+ type="button"
1175
+ aria-label="Next track"
1176
+ @click=${this.next}
1177
+ >
1178
+ <md-ripple></md-ripple>
1179
+ <md-focus-ring></md-focus-ring>
1180
+ <md-icon name="skip_next"></md-icon>
1181
+ </button>
1182
+ ` : n}
1183
+ </div>
1184
+
1185
+ <!-- Right Group -->
1186
+ <div class="controls-group-right">
1187
+ ${this.showPlaybackRate ? a`
1188
+ <button
1189
+ class="speed-btn"
1190
+ type="button"
1191
+ aria-label="Change playback speed, current speed ${this.playbackRate}x"
1192
+ @click=${this.cyclePlaybackRate}
1193
+ >
1194
+ <md-ripple></md-ripple>
1195
+ <md-focus-ring></md-focus-ring>
1196
+ ${this.playbackRate}x
1197
+ </button>
1198
+ ` : n}
1199
+
1200
+ ${e ? n : a`
1201
+ <button
1202
+ class="ctrl-btn ${this.loop ? "active" : ""}"
1203
+ type="button"
1204
+ aria-label="Toggle repeat"
1205
+ aria-pressed=${this.loop}
1206
+ @click=${this.toggleLoop}
1207
+ >
1208
+ <md-ripple></md-ripple>
1209
+ <md-focus-ring></md-focus-ring>
1210
+ <md-icon name=${this.loop ? "repeat_one" : "repeat"}></md-icon>
1211
+ </button>
1212
+ `}
1213
+
1214
+ ${!e && this.showQueue ? a`
1215
+ <button
1216
+ class="ctrl-btn ${this.queueOpen ? "active" : ""}"
1217
+ type="button"
1218
+ aria-label="Play queue"
1219
+ aria-pressed=${this.queueOpen}
1220
+ @click=${this.toggleQueue}
1221
+ >
1222
+ <md-ripple></md-ripple>
1223
+ <md-focus-ring></md-focus-ring>
1224
+ <md-icon name="queue_music"></md-icon>
1225
+ </button>
1226
+ ` : n}
1227
+
1228
+ ${e ? a`
1229
+ <button
1230
+ class="ctrl-btn fullscreen-bottom-btn"
1231
+ type="button"
1232
+ aria-label="Fullscreen"
1233
+ @click=${(t) => {
1234
+ t.stopPropagation(), this.toggleFullscreen();
1235
+ }}
1236
+ >
1237
+ <md-ripple></md-ripple>
1238
+ <md-focus-ring></md-focus-ring>
1239
+ <md-icon name=${this.isFullscreen ? "fullscreen_exit" : "fullscreen"}></md-icon>
1240
+ </button>
1241
+ ` : n}
1242
+
1243
+ <slot name="actions"></slot>
1244
+ </div>
1245
+ </div>
1246
+ `;
1247
+ }
1248
+ renderAudioLayout() {
1249
+ return a`
1250
+ <div class="audio-layout">
1251
+ <!-- Main Row: Image | text on left, and on small screens Previous | Stop/Play | Next on right -->
1252
+ <div class="audio-main-row">
1253
+ <!-- Left section: Image | text -->
1254
+ <div class="audio-header">
1255
+ <slot name="artwork">
1256
+ <div class="artwork-container">
1257
+ ${this.poster ? a`<img class="artwork-img" src=${this.poster} alt=${this.trackTitle || "Track artwork"} />` : a`<md-icon class="artwork-fallback" name="music_note"></md-icon>`}
1258
+ </div>
1259
+ </slot>
1260
+
1261
+ <div class="track-info">
1262
+ <slot name="title">
1263
+ <span class="track-title">${this.trackTitle || "Unknown Title"}</span>
1264
+ </slot>
1265
+ <slot name="artist">
1266
+ ${this.artist ? a`<span class="track-artist">${this.artist}</span>` : n}
1267
+ </slot>
1268
+ ${this.album ? a`<span class="track-album">${this.album}</span>` : n}
1269
+ </div>
1270
+ </div>
1271
+
1272
+ <!-- Small screen compact controls: Previous song | Stop/Play | Next song on right -->
1273
+ <div class="compact-controls-right">
1274
+ ${this.showSkip ? a`
1275
+ <button
1276
+ class="ctrl-btn"
1277
+ type="button"
1278
+ aria-label="Previous song"
1279
+ @click=${this.previous}
1280
+ >
1281
+ <md-ripple></md-ripple>
1282
+ <md-focus-ring></md-focus-ring>
1283
+ <md-icon name="skip_previous"></md-icon>
1284
+ </button>
1285
+ ` : n}
1286
+
1287
+ <button
1288
+ class="play-pause-btn compact-play-btn"
1289
+ type="button"
1290
+ aria-label=${this.paused ? "Play" : "Pause"}
1291
+ @click=${this.togglePlay}
1292
+ >
1293
+ <md-ripple></md-ripple>
1294
+ <md-focus-ring></md-focus-ring>
1295
+ <md-icon name=${this.paused ? "play_arrow" : "pause"}></md-icon>
1296
+ </button>
1297
+
1298
+ ${this.showSkip ? a`
1299
+ <button
1300
+ class="ctrl-btn"
1301
+ type="button"
1302
+ aria-label="Next song"
1303
+ @click=${this.next}
1304
+ >
1305
+ <md-ripple></md-ripple>
1306
+ <md-focus-ring></md-focus-ring>
1307
+ <md-icon name="skip_next"></md-icon>
1308
+ </button>
1309
+ ` : n}
1310
+ </div>
1311
+ </div>
1312
+
1313
+ <!-- Full Player: Scrubber Section (Hidden on small screen / compact) -->
1314
+ <div class="full-player-scrubber">
1315
+ ${this.renderScrubber()}
1316
+ </div>
1317
+
1318
+ <!-- Full Player: Controls Row (Hidden on small screen / compact) -->
1319
+ <div class="full-player-controls">
1320
+ ${this.renderControls(!1)}
1321
+ </div>
1322
+ </div>
1323
+ `;
1324
+ }
1325
+ renderVideoLayout() {
1326
+ return a`
1327
+ <div
1328
+ class="video-viewport ${this.controlsVisible ? "controls-visible" : ""}"
1329
+ @mousemove=${this.handleMouseMove}
1330
+ @click=${(e) => {
1331
+ const t = e.target;
1332
+ t.closest("button") || t.closest("input") || t.closest(".progress-slider-container") || this.togglePlay();
1333
+ }}
1334
+ >
1335
+ <slot name="media" @slotchange=${this.handleMediaSlotChange}>
1336
+ ${this.src ? a`
1337
+ <video
1338
+ src=${this.src}
1339
+ poster=${this.poster || n}
1340
+ ?autoplay=${this.autoplay}
1341
+ ?loop=${this.loop}
1342
+ preload=${this.preload}
1343
+ crossorigin=${this.crossorigin || n}
1344
+ @play=${() => {
1345
+ this.paused = !1, this.emitEvent("play");
1346
+ }}
1347
+ @pause=${() => {
1348
+ this.paused = !0, this.emitEvent("pause");
1349
+ }}
1350
+ @timeupdate=${() => {
1351
+ !this.isDraggingScrubber && this.internalMediaEl && (this.currentTime = this.internalMediaEl.currentTime);
1352
+ }}
1353
+ @durationchange=${() => {
1354
+ this.internalMediaEl && (this.duration = this.internalMediaEl.duration);
1355
+ }}
1356
+ @loadedmetadata=${() => {
1357
+ this.internalMediaEl && (this.duration = this.internalMediaEl.duration, this.currentTime = this.internalMediaEl.currentTime);
1358
+ }}
1359
+ @progress=${() => {
1360
+ if (this.internalMediaEl?.buffered?.length) {
1361
+ const e = this.internalMediaEl.buffered.end(this.internalMediaEl.buffered.length - 1);
1362
+ this.buffered = this.duration > 0 ? e / this.duration : 0;
1363
+ }
1364
+ }}
1365
+ @ended=${() => {
1366
+ this.paused = !0, this.emitEvent("ended");
1367
+ }}
1368
+ ></video>
1369
+ ` : n}
1370
+ </slot>
1371
+
1372
+ <div class="video-overlay ${this.paused ? "" : "auto-hide"}">
1373
+ <div class="video-top-bar">
1374
+ <slot name="title">
1375
+ <span class="video-title">${this.trackTitle || ""}</span>
1376
+ </slot>
1377
+ <div class="video-top-actions">
1378
+ <button
1379
+ class="ctrl-btn"
1380
+ type="button"
1381
+ aria-label="Picture in picture"
1382
+ @click=${(e) => {
1383
+ e.stopPropagation(), this.togglePictureInPicture();
1384
+ }}
1385
+ >
1386
+ <md-ripple></md-ripple>
1387
+ <md-focus-ring></md-focus-ring>
1388
+ <md-icon name="picture_in_picture_alt"></md-icon>
1389
+ </button>
1390
+ <button
1391
+ class="ctrl-btn fullscreen-top-btn"
1392
+ type="button"
1393
+ aria-label="Fullscreen"
1394
+ @click=${(e) => {
1395
+ e.stopPropagation(), this.toggleFullscreen();
1396
+ }}
1397
+ >
1398
+ <md-ripple></md-ripple>
1399
+ <md-focus-ring></md-focus-ring>
1400
+ <md-icon name=${this.isFullscreen ? "fullscreen_exit" : "fullscreen"}></md-icon>
1401
+ </button>
1402
+ </div>
1403
+ </div>
1404
+
1405
+ <div class="video-center-controls">
1406
+ <button
1407
+ class="play-pause-btn"
1408
+ type="button"
1409
+ aria-label=${this.paused ? "Play" : "Pause"}
1410
+ @click=${(e) => {
1411
+ e.stopPropagation(), this.togglePlay();
1412
+ }}
1413
+ >
1414
+ <md-ripple></md-ripple>
1415
+ <md-focus-ring></md-focus-ring>
1416
+ <md-icon name=${this.paused ? "play_arrow" : "pause"}></md-icon>
1417
+ </button>
1418
+ </div>
1419
+
1420
+ <div class="video-bottom-bar" @click=${(e) => e.stopPropagation()}>
1421
+ ${this.renderScrubber(!0)}
1422
+ ${this.renderControls(!0)}
1423
+ </div>
1424
+ </div>
1425
+ </div>
1426
+ `;
1427
+ }
1428
+ render() {
1429
+ return a`
1430
+ <div class="player-container" @keydown=${this.handleKeyDown}>
1431
+ <!-- Hidden Native Audio when in audio mode with src -->
1432
+ ${this.type === "audio" && this.src ? a`
1433
+ <audio
1434
+ class="native-media"
1435
+ src=${this.src}
1436
+ ?autoplay=${this.autoplay}
1437
+ ?loop=${this.loop}
1438
+ preload=${this.preload}
1439
+ crossorigin=${this.crossorigin || n}
1440
+ @play=${() => {
1441
+ this.paused = !1, this.emitEvent("play");
1442
+ }}
1443
+ @pause=${() => {
1444
+ this.paused = !0, this.emitEvent("pause");
1445
+ }}
1446
+ @timeupdate=${() => {
1447
+ !this.isDraggingScrubber && this.internalMediaEl && (this.currentTime = this.internalMediaEl.currentTime);
1448
+ }}
1449
+ @durationchange=${() => {
1450
+ this.internalMediaEl && (this.duration = this.internalMediaEl.duration);
1451
+ }}
1452
+ @loadedmetadata=${() => {
1453
+ this.internalMediaEl && (this.duration = this.internalMediaEl.duration, this.currentTime = this.internalMediaEl.currentTime);
1454
+ }}
1455
+ @progress=${() => {
1456
+ if (this.internalMediaEl?.buffered?.length) {
1457
+ const e = this.internalMediaEl.buffered.end(this.internalMediaEl.buffered.length - 1);
1458
+ this.buffered = this.duration > 0 ? e / this.duration : 0;
1459
+ }
1460
+ }}
1461
+ @ended=${() => {
1462
+ this.paused = !0, this.emitEvent("ended");
1463
+ }}
1464
+ ></audio>
1465
+ ` : n}
1466
+
1467
+ <!-- Audio Mode Slot Container (for slotted native audio) -->
1468
+ ${this.type === "audio" ? a`<div style="display:none;"><slot name="media" @slotchange=${this.handleMediaSlotChange}></slot></div>` : n}
1469
+
1470
+ ${this.type === "video" ? this.renderVideoLayout() : this.renderAudioLayout()}
1471
+
1472
+ <div class="extra-content" ?hidden=${!this.hasExtraContent}>
1473
+ <slot @slotchange=${this.handleDefaultSlotChange}></slot>
1474
+ </div>
1475
+ </div>
1476
+ `;
1477
+ }
1478
+ };
1479
+ o([s({
1480
+ type: String,
1481
+ reflect: !0
1482
+ })], i.prototype, "type", void 0);
1483
+ o([s({
1484
+ type: String,
1485
+ reflect: !0
1486
+ })], i.prototype, "variant", void 0);
1487
+ o([s({ type: String })], i.prototype, "src", void 0);
1488
+ o([s({
1489
+ type: String,
1490
+ attribute: "track-title"
1491
+ })], i.prototype, "trackTitle", void 0);
1492
+ o([s({ type: String })], i.prototype, "artist", void 0);
1493
+ o([s({ type: String })], i.prototype, "album", void 0);
1494
+ o([s({ type: String })], i.prototype, "poster", void 0);
1495
+ o([s({ type: Number })], i.prototype, "currentTime", void 0);
1496
+ o([s({ type: Number })], i.prototype, "duration", void 0);
1497
+ o([s({ type: Number })], i.prototype, "volume", void 0);
1498
+ o([s({
1499
+ type: Boolean,
1500
+ reflect: !0
1501
+ })], i.prototype, "muted", void 0);
1502
+ o([s({
1503
+ type: Number,
1504
+ attribute: "playback-rate"
1505
+ })], i.prototype, "playbackRate", void 0);
1506
+ o([s({
1507
+ type: Boolean,
1508
+ reflect: !0
1509
+ })], i.prototype, "paused", void 0);
1510
+ o([s({
1511
+ type: Boolean,
1512
+ reflect: !0
1513
+ })], i.prototype, "loop", void 0);
1514
+ o([s({
1515
+ type: Boolean,
1516
+ reflect: !0
1517
+ })], i.prototype, "autoplay", void 0);
1518
+ o([s({ type: String })], i.prototype, "preload", void 0);
1519
+ o([s({
1520
+ type: Boolean,
1521
+ reflect: !0
1522
+ })], i.prototype, "compact", void 0);
1523
+ o([s({
1524
+ type: Boolean,
1525
+ attribute: "show-skip"
1526
+ })], i.prototype, "showSkip", void 0);
1527
+ o([s({
1528
+ type: Boolean,
1529
+ attribute: "show-seek"
1530
+ })], i.prototype, "showSeek", void 0);
1531
+ o([s({
1532
+ type: Boolean,
1533
+ attribute: "show-volume"
1534
+ })], i.prototype, "showVolume", void 0);
1535
+ o([s({
1536
+ type: Boolean,
1537
+ attribute: "show-playback-rate"
1538
+ })], i.prototype, "showPlaybackRate", void 0);
1539
+ o([s({
1540
+ type: Boolean,
1541
+ attribute: "show-queue"
1542
+ })], i.prototype, "showQueue", void 0);
1543
+ o([s({
1544
+ type: Number,
1545
+ attribute: "seek-step"
1546
+ })], i.prototype, "seekStep", void 0);
1547
+ o([s({
1548
+ type: Boolean,
1549
+ reflect: !0
1550
+ })], i.prototype, "shuffle", void 0);
1551
+ o([s({ type: Number })], i.prototype, "buffered", void 0);
1552
+ o([s({ type: String })], i.prototype, "crossorigin", void 0);
1553
+ o([d()], i.prototype, "isDraggingScrubber", void 0);
1554
+ o([d()], i.prototype, "scrubFraction", void 0);
1555
+ o([d()], i.prototype, "isFullscreen", void 0);
1556
+ o([d()], i.prototype, "queueOpen", void 0);
1557
+ o([d()], i.prototype, "controlsVisible", void 0);
1558
+ o([d()], i.prototype, "hasExtraContent", void 0);
1559
+ o([b(".native-media")], i.prototype, "internalMediaEl", void 0);
1560
+ o([b(".progress-slider-container")], i.prototype, "sliderContainerEl", void 0);
1561
+ o([b(".video-viewport")], i.prototype, "videoViewportEl", void 0);
1562
+ i = o([h("md-player")], i);
1563
+ var f = class extends i {
1564
+ };
1565
+ f = o([h("md-media-player")], f);
1566
+ var y = class extends i {
1567
+ };
1568
+ y = o([h("md-audio-player")], y);
1569
+ var g = class extends i {
1570
+ constructor(...e) {
1571
+ super(...e), this.type = "video";
1572
+ }
1573
+ };
1574
+ g = o([h("md-video-player")], g);
1575
+ export {
1576
+ g as i,
1577
+ f as n,
1578
+ i as r,
1579
+ y as t
1580
+ };
1581
+
1582
+ //# sourceMappingURL=player-C4ydiIpr.js.map