@gentomiyano/optimized-web-audio-player 0.1.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.
Files changed (53) hide show
  1. package/README.md +159 -0
  2. package/dist/config/index.d.ts +37 -0
  3. package/dist/config/index.js +280 -0
  4. package/dist/config/index.js.map +1 -0
  5. package/dist/consumer/index.d.ts +27 -0
  6. package/dist/consumer/index.js +38 -0
  7. package/dist/consumer/index.js.map +1 -0
  8. package/dist/consumer-smoke/node_modules/.modules.yaml +30 -0
  9. package/dist/consumer-smoke/node_modules/.package-map.json +1 -0
  10. package/dist/consumer-smoke/node_modules/.pnpm/lock.yaml +57 -0
  11. package/dist/consumer-smoke/node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/LICENSE +21 -0
  12. package/dist/consumer-smoke/node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/README.md +9 -0
  13. package/dist/consumer-smoke/node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/cjs/scheduler-unstable_mock.development.js +414 -0
  14. package/dist/consumer-smoke/node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/cjs/scheduler-unstable_mock.production.js +406 -0
  15. package/dist/consumer-smoke/node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/cjs/scheduler-unstable_post_task.development.js +150 -0
  16. package/dist/consumer-smoke/node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/cjs/scheduler-unstable_post_task.production.js +140 -0
  17. package/dist/consumer-smoke/node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/cjs/scheduler.development.js +364 -0
  18. package/dist/consumer-smoke/node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/cjs/scheduler.native.development.js +350 -0
  19. package/dist/consumer-smoke/node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/cjs/scheduler.native.production.js +330 -0
  20. package/dist/consumer-smoke/node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/cjs/scheduler.production.js +340 -0
  21. package/dist/consumer-smoke/node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/index.js +7 -0
  22. package/dist/consumer-smoke/node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/index.native.js +7 -0
  23. package/dist/consumer-smoke/node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/package.json +27 -0
  24. package/dist/consumer-smoke/node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/unstable_mock.js +7 -0
  25. package/dist/consumer-smoke/node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/unstable_post_task.js +7 -0
  26. package/dist/consumer-smoke/node_modules/.pnpm-workspace-state-v1.json +29 -0
  27. package/dist/contracts/index.d.ts +15 -0
  28. package/dist/contracts/index.js +3 -0
  29. package/dist/contracts/index.js.map +1 -0
  30. package/dist/index.d.ts +6 -0
  31. package/dist/index.js +368 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/media-delivery/index.d.ts +185 -0
  34. package/dist/media-delivery/index.js +91 -0
  35. package/dist/media-delivery/index.js.map +1 -0
  36. package/dist/media-element-C9dis4aG.d.ts +40 -0
  37. package/dist/player-DE9Vqztu.d.ts +212 -0
  38. package/dist/ports/index.d.ts +32 -0
  39. package/dist/ports/index.js +3 -0
  40. package/dist/ports/index.js.map +1 -0
  41. package/dist/react/index.d.ts +86 -0
  42. package/dist/react/index.js +2393 -0
  43. package/dist/react/index.js.map +1 -0
  44. package/dist/testing/index.d.ts +36 -0
  45. package/dist/testing/index.js +365 -0
  46. package/dist/testing/index.js.map +1 -0
  47. package/dist/ui/index.d.ts +143 -0
  48. package/dist/ui/index.js +1344 -0
  49. package/dist/ui/index.js.map +1 -0
  50. package/dist/ui/player-tokens.css +572 -0
  51. package/dist/ui/player-views.css +654 -0
  52. package/dist/ui/styles.css +2 -0
  53. package/package.json +97 -0
@@ -0,0 +1,572 @@
1
+ :where(.player-surface, .player-debug-panel) {
2
+ --player-bg: #050505;
3
+ --player-panel: #0b0c0d;
4
+ --player-panel-soft: #111315;
5
+ --player-text: #f7f7f3;
6
+ --player-muted: rgb(247 247 243 / 0.58);
7
+ --player-faint: rgb(247 247 243 / 0.18);
8
+ --player-rule: rgb(247 247 243 / 0.22);
9
+ --player-brand: #477fa7;
10
+ --player-progress: #477fa7;
11
+ --player-waveform-rest: rgb(247 247 243 / 0.27);
12
+ --player-seek-track: rgb(247 247 243 / 0.3);
13
+ --player-active-wash: rgb(71 127 167 / 0.1);
14
+ --player-accent: var(--player-brand);
15
+ --player-accent-contrast: #fff;
16
+ --player-danger: #c76d67;
17
+ --player-focus: #77a9cc;
18
+ --player-control-bg: transparent;
19
+ --player-font-sans:
20
+ Inter, "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif;
21
+ --player-font-title:
22
+ var(
23
+ --player-font-title-override,
24
+ Bahnschrift,
25
+ "DIN Alternate",
26
+ "Arial Narrow",
27
+ "Roboto Condensed",
28
+ "Helvetica Neue",
29
+ Arial,
30
+ sans-serif
31
+ );
32
+ --player-font-title-japanese:
33
+ var(
34
+ --player-font-title-japanese-override,
35
+ "IBM Plex Sans JP",
36
+ "Yu Gothic",
37
+ YuGothic,
38
+ "Hiragino Sans",
39
+ "Hiragino Kaku Gothic ProN",
40
+ "Noto Sans JP",
41
+ "BIZ UDPGothic",
42
+ Meiryo,
43
+ sans-serif
44
+ );
45
+ --player-font-digital:
46
+ "Roboto Mono", "IBM Plex Mono", "SFMono-Regular", Consolas, monospace;
47
+ --player-hit: 44px;
48
+ color: var(--player-text);
49
+ font-family: var(--player-font-sans);
50
+ }
51
+
52
+ :where(.player-surface, .player-debug-panel)[data-appearance="light"] {
53
+ --player-bg: #f7f6f0;
54
+ --player-panel: #ecece5;
55
+ --player-panel-soft: #e1e3da;
56
+ --player-text: #11120f;
57
+ --player-muted: rgb(17 18 15 / 0.64);
58
+ --player-faint: rgb(17 18 15 / 0.14);
59
+ --player-rule: rgb(17 18 15 / 0.23);
60
+ --player-brand: #477fa7;
61
+ --player-progress: #001f3f;
62
+ --player-waveform-rest: rgb(34 53 63 / 0.38);
63
+ --player-seek-track: rgb(17 18 15 / 0.28);
64
+ --player-active-wash: rgb(71 127 167 / 0.08);
65
+ --player-accent: var(--player-brand);
66
+ --player-accent-contrast: #fff;
67
+ --player-danger: #9f453f;
68
+ --player-focus: #2f668e;
69
+ --player-control-bg: transparent;
70
+ --player-lcd: #d3d2c2;
71
+ --player-lcd-rule: rgb(66 68 57 / 0.26);
72
+ }
73
+
74
+ .player-surface {
75
+ box-sizing: border-box;
76
+ width: 100%;
77
+ max-width: 100%;
78
+ min-width: 0;
79
+ overflow: hidden;
80
+ border: 1px solid var(--player-rule);
81
+ border-radius: 2px;
82
+ background: var(--player-bg);
83
+ color: var(--player-text);
84
+ }
85
+
86
+ .player-surface *,
87
+ .player-debug-panel * {
88
+ box-sizing: border-box;
89
+ }
90
+
91
+ .player-visually-hidden {
92
+ position: absolute;
93
+ width: 1px;
94
+ height: 1px;
95
+ padding: 0;
96
+ overflow: hidden;
97
+ clip: rect(0, 0, 0, 0);
98
+ white-space: nowrap;
99
+ border: 0;
100
+ }
101
+
102
+ .player-artwork {
103
+ position: relative;
104
+ display: block;
105
+ width: 100%;
106
+ height: 100%;
107
+ min-width: 0;
108
+ overflow: hidden;
109
+ border: 0;
110
+ background: var(--player-panel-soft);
111
+ }
112
+
113
+ .player-artwork__image {
114
+ display: block;
115
+ width: 100%;
116
+ height: 100%;
117
+ object-fit: cover;
118
+ }
119
+
120
+ .player-artwork--image::after {
121
+ position: absolute;
122
+ inset: 0;
123
+ box-shadow: inset 0 0 4px 1px var(--player-bg);
124
+ content: "";
125
+ opacity: 0.36;
126
+ pointer-events: none;
127
+ }
128
+
129
+ .player-artwork--fallback {
130
+ background: var(--player-panel-soft);
131
+ }
132
+
133
+ .player-artwork--fallback::before,
134
+ .player-artwork--fallback::after,
135
+ .player-artwork--fallback > span::before {
136
+ position: absolute;
137
+ content: "";
138
+ background: var(--player-rule);
139
+ }
140
+
141
+ .player-artwork--fallback::before {
142
+ inset: 18% 46% 18% auto;
143
+ width: 1px;
144
+ }
145
+
146
+ .player-artwork--fallback::after {
147
+ inset: 46% 18% auto;
148
+ height: 1px;
149
+ }
150
+
151
+ .player-artwork--fallback > span::before {
152
+ inset: 28%;
153
+ border: 1px solid var(--player-rule);
154
+ background: transparent;
155
+ }
156
+
157
+ .player-metadata {
158
+ display: grid;
159
+ min-width: 0;
160
+ gap: 0.22rem;
161
+ }
162
+
163
+ .player-kicker,
164
+ .player-status,
165
+ .player-time,
166
+ .player-queue-number,
167
+ .player-queue-count {
168
+ font-family: var(--player-font-digital);
169
+ font-size: 0.68rem;
170
+ font-variant-numeric: tabular-nums;
171
+ letter-spacing: 0.09em;
172
+ text-transform: uppercase;
173
+ }
174
+
175
+ .player-kicker,
176
+ .player-status {
177
+ color: var(--player-accent);
178
+ }
179
+
180
+ .player-title,
181
+ .player-creator,
182
+ .player-collection {
183
+ min-width: 0;
184
+ overflow: hidden;
185
+ text-overflow: ellipsis;
186
+ white-space: nowrap;
187
+ }
188
+
189
+ .player-title {
190
+ display: block;
191
+ position: relative;
192
+ width: 100%;
193
+ font-size: clamp(0.94rem, 1.8vw, 1.25rem);
194
+ font-family: var(--player-font-title);
195
+ font-stretch: semi-condensed;
196
+ font-weight: 350;
197
+ font-variation-settings: "wght" 340, "wdth" 88;
198
+ letter-spacing: 0.025em;
199
+ }
200
+
201
+ .player-title__text {
202
+ display: inline-block;
203
+ min-width: max-content;
204
+ white-space: nowrap;
205
+ }
206
+
207
+ .player-title[data-script="japanese"] {
208
+ font-family: var(--player-font-title-japanese);
209
+ font-feature-settings: "palt" 1;
210
+ font-stretch: normal;
211
+ font-variation-settings: normal;
212
+ font-weight:
213
+ var(--player-font-title-japanese-weight-override, 300);
214
+ letter-spacing:
215
+ var(
216
+ --player-font-title-japanese-letter-spacing-override,
217
+ 0.025em
218
+ );
219
+ }
220
+
221
+ .player-title[data-scroll="true"] .player-title__text {
222
+ animation:
223
+ player-title-marquee var(--player-title-scroll-duration) linear
224
+ infinite;
225
+ will-change: transform;
226
+ }
227
+
228
+ .player-creator,
229
+ .player-collection {
230
+ color: var(--player-muted);
231
+ font-size: 0.76rem;
232
+ }
233
+
234
+ .player-icon-button,
235
+ .player-error button {
236
+ display: inline-flex;
237
+ align-items: center;
238
+ justify-content: center;
239
+ min-width: var(--player-hit);
240
+ min-height: var(--player-hit);
241
+ padding: 0;
242
+ border: 0;
243
+ border-radius: 1px;
244
+ background: var(--player-control-bg);
245
+ color: var(--player-text);
246
+ cursor: pointer;
247
+ }
248
+
249
+ .player-icon-button:hover:not(:disabled),
250
+ .player-icon-button[aria-pressed="true"] {
251
+ color: var(--player-brand);
252
+ }
253
+
254
+ .player-icon-button:active:not(:disabled) {
255
+ background: var(--player-active-wash);
256
+ }
257
+
258
+ .player-icon-button:disabled {
259
+ cursor: not-allowed;
260
+ opacity: 0.32;
261
+ }
262
+
263
+ .player-icon-button:focus-visible,
264
+ .player-error button:focus-visible,
265
+ .player-surface input:focus-visible,
266
+ .player-debug-panel button:focus-visible,
267
+ .player-debug-panel input:focus-visible,
268
+ .player-debug-panel select:focus-visible,
269
+ .player-debug-panel textarea:focus-visible {
270
+ outline: 2px solid var(--player-focus);
271
+ outline-offset: 3px;
272
+ }
273
+
274
+ .player-play-button {
275
+ min-width: 50px;
276
+ min-height: 50px;
277
+ border: 1px solid var(--player-rule);
278
+ border-radius: 50%;
279
+ color: var(--player-text);
280
+ }
281
+
282
+ .player-play-button:hover:not(:disabled),
283
+ .player-play-button--active {
284
+ border-color: var(--player-brand);
285
+ background: transparent;
286
+ color: var(--player-brand);
287
+ }
288
+
289
+ .player-transport {
290
+ display: flex;
291
+ align-items: center;
292
+ justify-content: center;
293
+ min-width: 0;
294
+ gap: clamp(0.1rem, 1vw, 0.55rem);
295
+ }
296
+
297
+ .player-transport--compact {
298
+ gap: 0;
299
+ }
300
+
301
+ .player-transport--compact .player-play-button {
302
+ min-width: var(--player-hit);
303
+ min-height: var(--player-hit);
304
+ border: 1px solid var(--player-rule);
305
+ border-radius: 50%;
306
+ }
307
+
308
+ .player-time {
309
+ display: flex;
310
+ align-items: center;
311
+ justify-content: space-between;
312
+ gap: 0.5rem;
313
+ color: var(--player-muted);
314
+ }
315
+
316
+ .player-waveform {
317
+ display: block;
318
+ width: 100%;
319
+ height: 42px;
320
+ overflow: visible;
321
+ color: var(--player-waveform-rest);
322
+ }
323
+
324
+ .player-waveform__base {
325
+ fill: none;
326
+ stroke: currentColor;
327
+ stroke-width: 0.5;
328
+ vector-effect: non-scaling-stroke;
329
+ }
330
+
331
+ .player-waveform__played {
332
+ fill: none;
333
+ stroke: var(--player-progress);
334
+ stroke-width: 0.5;
335
+ vector-effect: non-scaling-stroke;
336
+ }
337
+
338
+ .player-seek {
339
+ position: relative;
340
+ display: flex;
341
+ align-items: center;
342
+ width: 100%;
343
+ min-width: 0;
344
+ min-height: var(--player-hit);
345
+ cursor: pointer;
346
+ }
347
+
348
+ .player-seek::before,
349
+ .player-seek__progress {
350
+ position: absolute;
351
+ top: 50%;
352
+ left: 0;
353
+ height: 1px;
354
+ pointer-events: none;
355
+ content: "";
356
+ }
357
+
358
+ .player-seek::before {
359
+ width: 100%;
360
+ background: var(--player-seek-track);
361
+ }
362
+
363
+ .player-seek__progress {
364
+ background: var(--player-progress);
365
+ }
366
+
367
+ .player-seek[data-disabled="true"] {
368
+ cursor: not-allowed;
369
+ opacity: 0.38;
370
+ }
371
+
372
+ .player-seek input,
373
+ .player-volume input {
374
+ position: relative;
375
+ z-index: 1;
376
+ width: 100%;
377
+ height: var(--player-hit);
378
+ margin: 0;
379
+ cursor: inherit;
380
+ appearance: none;
381
+ background: transparent;
382
+ }
383
+
384
+ .player-seek input {
385
+ touch-action: pan-y;
386
+ user-select: none;
387
+ }
388
+
389
+ .player-seek input::-webkit-slider-runnable-track {
390
+ height: 1px;
391
+ background: transparent;
392
+ }
393
+
394
+ .player-seek input::-moz-range-track {
395
+ height: 1px;
396
+ border: 0;
397
+ background: transparent;
398
+ }
399
+
400
+ .player-volume input::-webkit-slider-runnable-track {
401
+ height: 1px;
402
+ background: var(--player-seek-track);
403
+ }
404
+
405
+ .player-volume input::-moz-range-track {
406
+ height: 1px;
407
+ border: 0;
408
+ background: var(--player-seek-track);
409
+ }
410
+
411
+ .player-seek input::-webkit-slider-thumb,
412
+ .player-volume input::-webkit-slider-thumb {
413
+ width: 10px;
414
+ height: 10px;
415
+ margin-top: -4px;
416
+ appearance: none;
417
+ border: 0;
418
+ border-radius: 50%;
419
+ background: var(--player-brand);
420
+ }
421
+
422
+ .player-seek input::-moz-range-thumb,
423
+ .player-volume input::-moz-range-thumb {
424
+ width: 10px;
425
+ height: 10px;
426
+ border: 0;
427
+ border-radius: 50%;
428
+ background: var(--player-brand);
429
+ }
430
+
431
+ .player-volume {
432
+ display: flex;
433
+ align-items: center;
434
+ min-width: 0;
435
+ }
436
+
437
+ .player-volume label {
438
+ width: min(120px, 18vw);
439
+ }
440
+
441
+ .player-volume-popover {
442
+ position: relative;
443
+ display: flex;
444
+ flex: none;
445
+ align-items: center;
446
+ justify-content: center;
447
+ }
448
+
449
+ .player-volume-popover__panel {
450
+ position: absolute;
451
+ z-index: 10;
452
+ bottom: calc(100% + 0.45rem);
453
+ left: 50%;
454
+ display: grid;
455
+ width: 54px;
456
+ min-height: 136px;
457
+ padding: 0.55rem 0.35rem 0.4rem;
458
+ transform: translateX(-50%);
459
+ border: 1px solid var(--player-rule);
460
+ border-radius: 2px;
461
+ background: var(--player-panel);
462
+ place-items: center;
463
+ }
464
+
465
+ .player-volume-popover__panel label {
466
+ display: flex;
467
+ width: var(--player-hit);
468
+ height: 102px;
469
+ align-items: center;
470
+ justify-content: center;
471
+ }
472
+
473
+ .player-volume-popover__panel input {
474
+ width: var(--player-hit);
475
+ height: 102px;
476
+ margin: 0;
477
+ cursor: pointer;
478
+ appearance: none;
479
+ background: transparent;
480
+ direction: rtl;
481
+ writing-mode: vertical-lr;
482
+ }
483
+
484
+ .player-volume-popover__panel input::-webkit-slider-runnable-track {
485
+ width: 2px;
486
+ height: 100%;
487
+ background: var(--player-rule);
488
+ }
489
+
490
+ .player-volume-popover__panel input::-moz-range-track {
491
+ width: 2px;
492
+ height: 100%;
493
+ border: 0;
494
+ background: var(--player-rule);
495
+ }
496
+
497
+ .player-volume-popover__panel input::-webkit-slider-thumb {
498
+ width: 10px;
499
+ height: 10px;
500
+ margin-left: -4px;
501
+ appearance: none;
502
+ border: 0;
503
+ border-radius: 50%;
504
+ background: var(--player-accent);
505
+ }
506
+
507
+ .player-volume-popover__panel input::-moz-range-thumb {
508
+ width: 10px;
509
+ height: 10px;
510
+ border: 0;
511
+ border-radius: 50%;
512
+ background: var(--player-accent);
513
+ }
514
+
515
+ .player-volume-popover__panel output {
516
+ color: var(--player-muted);
517
+ font-family: var(--player-font-digital);
518
+ font-size: 0.62rem;
519
+ font-variant-numeric: tabular-nums;
520
+ }
521
+
522
+ .player-error {
523
+ display: flex;
524
+ align-items: center;
525
+ justify-content: space-between;
526
+ gap: 1rem;
527
+ padding: 0.65rem 0.8rem;
528
+ border-top: 1px solid var(--player-danger);
529
+ color: var(--player-danger);
530
+ font-size: 0.78rem;
531
+ }
532
+
533
+ .player-error button {
534
+ gap: 0.35rem;
535
+ min-height: 36px;
536
+ padding: 0 0.6rem;
537
+ color: inherit;
538
+ font: inherit;
539
+ }
540
+
541
+ @media (prefers-reduced-motion: reduce) {
542
+ :where(.player-surface, .player-debug-panel) *,
543
+ :where(.player-surface, .player-debug-panel) *::before,
544
+ :where(.player-surface, .player-debug-panel) *::after {
545
+ scroll-behavior: auto !important;
546
+ transition-duration: 0.01ms !important;
547
+ animation-duration: 0.01ms !important;
548
+ animation-iteration-count: 1 !important;
549
+ }
550
+
551
+ .player-title[data-scroll="true"] .player-title__text {
552
+ animation-duration: var(--player-title-scroll-duration) !important;
553
+ animation-iteration-count: infinite !important;
554
+ }
555
+ }
556
+
557
+ @keyframes player-title-marquee {
558
+ 0%,
559
+ 12% {
560
+ transform: translateX(0);
561
+ }
562
+
563
+ 82%,
564
+ 94% {
565
+ transform: translateX(var(--player-title-scroll-offset));
566
+ }
567
+
568
+ 94.01%,
569
+ 100% {
570
+ transform: translateX(0);
571
+ }
572
+ }