@cloudnest/redxplyr 1.0.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 (127) hide show
  1. package/.editorconfig +10 -0
  2. package/.gitpod.yml +6 -0
  3. package/.node-version +1 -0
  4. package/.prettierrc +7 -0
  5. package/.stickler.yml +5 -0
  6. package/.stylelintrc.json +26 -0
  7. package/CHANGELOG.md +16 -0
  8. package/CONTRIBUTING.md +34 -0
  9. package/CONTROLS.md +49 -0
  10. package/Dockerfile +32 -0
  11. package/LICENSE.md +22 -0
  12. package/README.md +194 -0
  13. package/cspell.json +48 -0
  14. package/dist/redxplyr.css +1 -0
  15. package/dist/redxplyr.js +8801 -0
  16. package/dist/redxplyr.min.js +2 -0
  17. package/dist/redxplyr.min.js.map +1 -0
  18. package/dist/redxplyr.min.mjs +1 -0
  19. package/dist/redxplyr.min.mjs.map +1 -0
  20. package/dist/redxplyr.mjs +8793 -0
  21. package/dist/redxplyr.polyfilled.js +9294 -0
  22. package/dist/redxplyr.polyfilled.min.js +2 -0
  23. package/dist/redxplyr.polyfilled.min.js.map +1 -0
  24. package/dist/redxplyr.polyfilled.min.mjs +1 -0
  25. package/dist/redxplyr.polyfilled.min.mjs.map +1 -0
  26. package/dist/redxplyr.polyfilled.mjs +9286 -0
  27. package/dist/redxplyr.svg +1 -0
  28. package/eslint.config.mjs +39 -0
  29. package/gulpfile.js +8 -0
  30. package/package.json +114 -0
  31. package/pnpm-workspace.yaml +8 -0
  32. package/src/js/captions.js +411 -0
  33. package/src/js/config/defaults.js +459 -0
  34. package/src/js/config/states.js +10 -0
  35. package/src/js/config/types.js +34 -0
  36. package/src/js/console.js +28 -0
  37. package/src/js/controls.js +1870 -0
  38. package/src/js/fullscreen.js +305 -0
  39. package/src/js/html5.js +148 -0
  40. package/src/js/listeners.js +854 -0
  41. package/src/js/media.js +61 -0
  42. package/src/js/plugins/ads.js +647 -0
  43. package/src/js/plugins/preview-thumbnails.js +706 -0
  44. package/src/js/plugins/vimeo.js +443 -0
  45. package/src/js/plugins/youtube.js +451 -0
  46. package/src/js/plyr.d.ts +729 -0
  47. package/src/js/plyr.js +1291 -0
  48. package/src/js/plyr.polyfilled.js +13 -0
  49. package/src/js/source.js +155 -0
  50. package/src/js/storage.js +70 -0
  51. package/src/js/support.js +100 -0
  52. package/src/js/ui.js +297 -0
  53. package/src/js/utils/animation.js +33 -0
  54. package/src/js/utils/arrays.js +23 -0
  55. package/src/js/utils/browser.js +21 -0
  56. package/src/js/utils/elements.js +263 -0
  57. package/src/js/utils/events.js +116 -0
  58. package/src/js/utils/fetch.js +45 -0
  59. package/src/js/utils/i18n.js +47 -0
  60. package/src/js/utils/is.js +81 -0
  61. package/src/js/utils/load-image.js +19 -0
  62. package/src/js/utils/load-script.js +14 -0
  63. package/src/js/utils/load-sprite.js +77 -0
  64. package/src/js/utils/numbers.js +17 -0
  65. package/src/js/utils/objects.js +43 -0
  66. package/src/js/utils/promise.js +14 -0
  67. package/src/js/utils/strings.js +80 -0
  68. package/src/js/utils/style.js +148 -0
  69. package/src/js/utils/time.js +36 -0
  70. package/src/js/utils/urls.js +40 -0
  71. package/src/sass/base.scss +69 -0
  72. package/src/sass/components/badges.scss +12 -0
  73. package/src/sass/components/captions.scss +58 -0
  74. package/src/sass/components/control.scss +52 -0
  75. package/src/sass/components/controls.scss +65 -0
  76. package/src/sass/components/menus.scss +205 -0
  77. package/src/sass/components/poster.scss +27 -0
  78. package/src/sass/components/progress.scss +107 -0
  79. package/src/sass/components/sliders.scss +99 -0
  80. package/src/sass/components/times.scss +20 -0
  81. package/src/sass/components/tooltips.scss +91 -0
  82. package/src/sass/components/volume.scss +18 -0
  83. package/src/sass/lib/animation.scss +31 -0
  84. package/src/sass/lib/css-vars.scss +103 -0
  85. package/src/sass/lib/functions.scss +3 -0
  86. package/src/sass/lib/mixins.scss +82 -0
  87. package/src/sass/plugins/ads.scss +53 -0
  88. package/src/sass/plugins/preview-thumbnails/index.scss +121 -0
  89. package/src/sass/plugins/preview-thumbnails/settings.scss +17 -0
  90. package/src/sass/plyr.scss +46 -0
  91. package/src/sass/settings/badges.scss +7 -0
  92. package/src/sass/settings/breakpoints.scss +9 -0
  93. package/src/sass/settings/captions.scss +10 -0
  94. package/src/sass/settings/colors.scss +18 -0
  95. package/src/sass/settings/controls.scss +30 -0
  96. package/src/sass/settings/cosmetics.scss +5 -0
  97. package/src/sass/settings/helpers.scss +7 -0
  98. package/src/sass/settings/menus.scss +13 -0
  99. package/src/sass/settings/progress.scss +18 -0
  100. package/src/sass/settings/sliders.scss +39 -0
  101. package/src/sass/settings/tooltips.scss +11 -0
  102. package/src/sass/settings/type.scss +16 -0
  103. package/src/sass/states/fullscreen.scss +15 -0
  104. package/src/sass/types/audio.scss +61 -0
  105. package/src/sass/types/video.scss +170 -0
  106. package/src/sass/utils/animation.scss +7 -0
  107. package/src/sass/utils/hidden.scss +28 -0
  108. package/src/sprite/plyr-airplay.svg +8 -0
  109. package/src/sprite/plyr-captions-off.svg +7 -0
  110. package/src/sprite/plyr-captions-on.svg +7 -0
  111. package/src/sprite/plyr-download.svg +8 -0
  112. package/src/sprite/plyr-enter-fullscreen.svg +4 -0
  113. package/src/sprite/plyr-exit-fullscreen.svg +4 -0
  114. package/src/sprite/plyr-fast-forward.svg +3 -0
  115. package/src/sprite/plyr-logo-vimeo.svg +6 -0
  116. package/src/sprite/plyr-logo-youtube.svg +6 -0
  117. package/src/sprite/plyr-muted.svg +8 -0
  118. package/src/sprite/plyr-pause.svg +8 -0
  119. package/src/sprite/plyr-pip.svg +6 -0
  120. package/src/sprite/plyr-play.svg +5 -0
  121. package/src/sprite/plyr-restart.svg +5 -0
  122. package/src/sprite/plyr-rewind.svg +3 -0
  123. package/src/sprite/plyr-settings.svg +5 -0
  124. package/src/sprite/plyr-volume.svg +11 -0
  125. package/tasks/build.js +226 -0
  126. package/tasks/deploy.js +216 -0
  127. package/tasks/utils/publish.js +34 -0
@@ -0,0 +1,205 @@
1
+ // --------------------------------------------------------------
2
+ // Menus
3
+ // --------------------------------------------------------------
4
+
5
+ .plyr__menu {
6
+ display: flex; // Edge fix
7
+ position: relative;
8
+
9
+ // Animate the icon
10
+ .plyr__control svg {
11
+ transition: transform 0.3s ease;
12
+ }
13
+
14
+ .plyr__control[aria-expanded='true'] {
15
+ svg {
16
+ transform: rotate(90deg);
17
+ }
18
+
19
+ // Hide tooltip
20
+ .plyr__tooltip {
21
+ display: none;
22
+ }
23
+ }
24
+
25
+ // The actual menu container
26
+ &__container {
27
+ animation: plyr-popup 0.2s ease;
28
+ background: $plyr-menu-background;
29
+ border-radius: $plyr-menu-radius;
30
+ bottom: 100%;
31
+ box-shadow: $plyr-menu-shadow;
32
+ color: $plyr-menu-color;
33
+ font-size: $plyr-font-size-base;
34
+ margin-bottom: 10px;
35
+ position: absolute;
36
+ right: -3px;
37
+ text-align: left;
38
+ white-space: nowrap;
39
+ z-index: 3;
40
+
41
+ > div {
42
+ overflow: hidden;
43
+ transition:
44
+ height 0.35s cubic-bezier(0.4, 0, 0.2, 1),
45
+ width 0.35s cubic-bezier(0.4, 0, 0.2, 1);
46
+ }
47
+
48
+ // Arrow
49
+ &::after {
50
+ border: $plyr-menu-arrow-size solid transparent;
51
+ border-top-color: $plyr-menu-background;
52
+ content: '';
53
+ height: 0;
54
+ position: absolute;
55
+ right: calc(((#{$plyr-control-icon-size} / 2) + #{$plyr-control-padding}) - (#{$plyr-menu-arrow-size} / 2));
56
+ top: 100%;
57
+ width: 0;
58
+ }
59
+
60
+ [role='menu'] {
61
+ padding: $plyr-control-padding;
62
+ }
63
+
64
+ [role='menuitem'],
65
+ [role='menuitemradio'] {
66
+ margin-top: 2px;
67
+
68
+ &:first-child {
69
+ margin-top: 0;
70
+ }
71
+ }
72
+
73
+ // Options
74
+ .plyr__control {
75
+ align-items: center;
76
+ color: $plyr-menu-color;
77
+ display: flex;
78
+ font-size: $plyr-font-size-menu;
79
+ padding: calc(#{$plyr-control-padding} / 1.5) calc(#{$plyr-control-padding} * 1.5);
80
+ user-select: none;
81
+ width: 100%;
82
+
83
+ > span {
84
+ align-items: inherit;
85
+ display: flex;
86
+ width: 100%;
87
+ }
88
+
89
+ &::after {
90
+ border: $plyr-menu-item-arrow-size solid transparent;
91
+ content: '';
92
+ position: absolute;
93
+ top: 50%;
94
+ transform: translateY(-50%);
95
+ }
96
+
97
+ &--forward {
98
+ padding-right: calc(#{$plyr-control-padding} * 4);
99
+
100
+ &::after {
101
+ border-left-color: $plyr-menu-item-arrow-color;
102
+ right: calc((#{$plyr-control-padding} * 1.5) - #{$plyr-menu-item-arrow-size});
103
+ }
104
+
105
+ &:focus-visible::after,
106
+ &:hover::after {
107
+ border-left-color: currentColor;
108
+ }
109
+ }
110
+
111
+ &--back {
112
+ font-weight: $plyr-font-weight-regular;
113
+ margin: $plyr-control-padding;
114
+ margin-bottom: calc(#{$plyr-control-padding} / 2);
115
+ padding-left: calc(#{$plyr-control-padding} * 4);
116
+ position: relative;
117
+ width: calc(100% - (#{$plyr-control-padding} * 2));
118
+
119
+ &::after {
120
+ border-right-color: $plyr-menu-item-arrow-color;
121
+ left: calc((#{$plyr-control-padding} * 1.5) - #{$plyr-menu-item-arrow-size});
122
+ }
123
+
124
+ &::before {
125
+ background: $plyr-menu-back-border-color;
126
+ box-shadow: 0 1px 0 $plyr-menu-back-border-shadow-color;
127
+ content: '';
128
+ height: 1px;
129
+ left: 0;
130
+ margin-top: calc(#{$plyr-control-padding} / 2);
131
+ overflow: hidden;
132
+ position: absolute;
133
+ right: 0;
134
+ top: 100%;
135
+ }
136
+
137
+ &:focus-visible::after,
138
+ &:hover::after {
139
+ border-right-color: currentColor;
140
+ }
141
+ }
142
+ }
143
+
144
+ .plyr__control[role='menuitemradio'] {
145
+ padding-left: $plyr-control-padding;
146
+
147
+ &::before,
148
+ &::after {
149
+ border-radius: 100%;
150
+ }
151
+
152
+ &::before {
153
+ background: rgba(#000, 0.1);
154
+ content: '';
155
+ display: block;
156
+ flex-shrink: 0;
157
+ height: 16px;
158
+ margin-right: $plyr-control-spacing;
159
+ transition: all 0.3s ease;
160
+ width: 16px;
161
+ }
162
+
163
+ &::after {
164
+ background: #fff;
165
+ border: 0;
166
+ height: 6px;
167
+ left: 12px;
168
+ opacity: 0;
169
+ top: 50%;
170
+ transform: translateY(-50%) scale(0);
171
+ transition:
172
+ transform 0.3s ease,
173
+ opacity 0.3s ease;
174
+ width: 6px;
175
+ }
176
+
177
+ &[aria-checked='true'] {
178
+ &::before {
179
+ background: $plyr-control-toggle-checked-background;
180
+ }
181
+
182
+ &::after {
183
+ opacity: 1;
184
+ transform: translateY(-50%) scale(1);
185
+ }
186
+ }
187
+
188
+ &:focus-visible::before,
189
+ &:hover::before {
190
+ background: rgba($plyr-color-gray-900, 0.1);
191
+ }
192
+ }
193
+
194
+ // Option value
195
+ .plyr__menu__value {
196
+ align-items: center;
197
+ display: flex;
198
+ margin-left: auto;
199
+ margin-right: calc((#{$plyr-control-padding} - 2px) * -1);
200
+ overflow: hidden;
201
+ padding-left: calc(#{$plyr-control-padding} * 3.5);
202
+ pointer-events: none;
203
+ }
204
+ }
205
+ }
@@ -0,0 +1,27 @@
1
+ // --------------------------------------------------------------
2
+ // Faux poster overlay
3
+ // --------------------------------------------------------------
4
+
5
+ .plyr__poster {
6
+ background-color: var(--plyr-video-background, $plyr-video-background);
7
+ background-position: 50% 50%;
8
+ background-repeat: no-repeat;
9
+ background-size: contain;
10
+ height: 100%;
11
+ left: 0;
12
+ opacity: 0;
13
+ position: absolute;
14
+ top: 0;
15
+ transition: opacity 0.2s ease;
16
+ width: 100%;
17
+ z-index: 1;
18
+ }
19
+
20
+ .plyr--stopped.plyr__poster-enabled .plyr__poster {
21
+ opacity: 1;
22
+ }
23
+
24
+ // Allow interaction with YouTube controls while paused
25
+ .plyr--youtube.plyr--paused.plyr__poster-enabled:not(.plyr--stopped) .plyr__poster {
26
+ display: none;
27
+ }
@@ -0,0 +1,107 @@
1
+ // --------------------------------------------------------------
2
+ // Playback progress
3
+ // --------------------------------------------------------------
4
+
5
+ // Offset the range thumb in order to be able to calculate the relative progress (#954)
6
+ $plyr-progress-offset: $plyr-range-thumb-height;
7
+
8
+ .plyr__progress {
9
+ left: calc(#{$plyr-progress-offset} * 0.5);
10
+ margin-right: $plyr-progress-offset;
11
+ position: relative;
12
+
13
+ input[type='range'],
14
+ &__buffer {
15
+ margin-left: calc(#{$plyr-progress-offset} * -0.5);
16
+ margin-right: calc(#{$plyr-progress-offset} * -0.5);
17
+ width: calc(100% + #{$plyr-progress-offset});
18
+ }
19
+
20
+ input[type='range'] {
21
+ position: relative;
22
+ z-index: 2;
23
+ }
24
+
25
+ // Seek tooltip to show time
26
+ .plyr__tooltip {
27
+ left: 0;
28
+ max-width: 120px;
29
+ overflow-wrap: break-word;
30
+ }
31
+ }
32
+
33
+ .plyr__progress__buffer {
34
+ -webkit-appearance: none; /* stylelint-disable-line */
35
+ background: transparent;
36
+ border: 0;
37
+ border-radius: 100px;
38
+ height: $plyr-range-track-height;
39
+ left: 0;
40
+ margin-top: calc((#{$plyr-range-track-height} / 2) * -1);
41
+ padding: 0;
42
+ position: absolute;
43
+ top: 50%;
44
+
45
+ &::-webkit-progress-bar {
46
+ background: transparent;
47
+ }
48
+
49
+ &::-webkit-progress-value {
50
+ background: currentColor;
51
+ border-radius: 100px;
52
+ min-width: $plyr-range-track-height;
53
+ transition: width 0.2s ease;
54
+ }
55
+
56
+ // Mozilla
57
+ &::-moz-progress-bar {
58
+ background: currentColor;
59
+ border-radius: 100px;
60
+ min-width: $plyr-range-track-height;
61
+ transition: width 0.2s ease;
62
+ }
63
+
64
+ // Microsoft
65
+ &::-ms-fill {
66
+ border-radius: 100px;
67
+ transition: width 0.2s ease;
68
+ }
69
+ }
70
+
71
+ // Loading state
72
+ .plyr--loading .plyr__progress__buffer {
73
+ animation: plyr-progress 1s linear infinite;
74
+ background-image: linear-gradient(
75
+ -45deg,
76
+ $plyr-progress-loading-background 25%,
77
+ transparent 25%,
78
+ transparent 50%,
79
+ $plyr-progress-loading-background 50%,
80
+ $plyr-progress-loading-background 75%,
81
+ transparent 75%,
82
+ transparent
83
+ );
84
+ background-repeat: repeat-x;
85
+ background-size: $plyr-progress-loading-size $plyr-progress-loading-size;
86
+ color: transparent;
87
+ }
88
+
89
+ .plyr--video.plyr--loading .plyr__progress__buffer {
90
+ background-color: $plyr-video-progress-buffered-background;
91
+ }
92
+
93
+ .plyr--audio.plyr--loading .plyr__progress__buffer {
94
+ background-color: $plyr-audio-progress-buffered-background;
95
+ }
96
+
97
+ // Markers
98
+ .plyr__progress__marker {
99
+ background-color: $plyr-progress-marker-background;
100
+ border-radius: 1px;
101
+ height: $plyr-range-track-height;
102
+ position: absolute;
103
+ top: 50%;
104
+ transform: translate(-50%, -50%);
105
+ width: $plyr-progress-marker-width;
106
+ z-index: 3;
107
+ }
@@ -0,0 +1,99 @@
1
+ // --------------------------------------------------------------
2
+ // Slider inputs - <input type="range">
3
+ // --------------------------------------------------------------
4
+
5
+ .plyr--full-ui input[type='range'] {
6
+ appearance: none;
7
+ background: transparent;
8
+ border: 0;
9
+ border-radius: calc(#{$plyr-range-thumb-height} * 2);
10
+
11
+ // `color` property is used in JS to populate lower fill for WebKit
12
+ color: $plyr-range-fill-background;
13
+ display: block;
14
+ height: calc((#{$plyr-range-thumb-active-shadow-width} * 2) + #{$plyr-range-thumb-height});
15
+ margin: 0;
16
+ min-width: 0;
17
+ padding: 0;
18
+ transition: box-shadow 0.3s ease;
19
+ width: 100%;
20
+
21
+ &::-webkit-slider-runnable-track {
22
+ @include plyr-range-track;
23
+
24
+ background-image: linear-gradient(to right, currentColor var(--value, 0%), transparent var(--value, 0%));
25
+ }
26
+
27
+ &::-webkit-slider-thumb {
28
+ @include plyr-range-thumb;
29
+
30
+ appearance: none;
31
+ margin-top: calc(((#{$plyr-range-thumb-height} - #{$plyr-range-track-height}) / 2) * -1);
32
+ }
33
+
34
+ // Mozilla
35
+ &::-moz-range-track {
36
+ @include plyr-range-track;
37
+ }
38
+
39
+ &::-moz-range-thumb {
40
+ @include plyr-range-thumb;
41
+ }
42
+
43
+ &::-moz-range-progress {
44
+ background: currentColor;
45
+ border-radius: calc(#{$plyr-range-track-height} / 2);
46
+ height: $plyr-range-track-height;
47
+ }
48
+
49
+ // Microsoft
50
+ &::-ms-track {
51
+ @include plyr-range-track;
52
+
53
+ color: transparent;
54
+ }
55
+
56
+ &::-ms-fill-upper {
57
+ @include plyr-range-track;
58
+ }
59
+
60
+ &::-ms-fill-lower {
61
+ @include plyr-range-track;
62
+
63
+ background: currentColor;
64
+ }
65
+
66
+ &::-ms-thumb {
67
+ @include plyr-range-thumb;
68
+
69
+ // For some reason, Edge uses the -webkit margin above
70
+ margin-top: 0;
71
+ }
72
+
73
+ &::-ms-tooltip {
74
+ display: none;
75
+ }
76
+
77
+ // Focus styles
78
+ &::-moz-focus-outer {
79
+ border: 0;
80
+ }
81
+
82
+ &:focus {
83
+ outline: 0;
84
+ }
85
+
86
+ &:focus-visible {
87
+ &::-webkit-slider-runnable-track {
88
+ @include plyr-focus-visible;
89
+ }
90
+
91
+ &::-moz-range-track {
92
+ @include plyr-focus-visible;
93
+ }
94
+
95
+ &::-ms-track {
96
+ @include plyr-focus-visible;
97
+ }
98
+ }
99
+ }
@@ -0,0 +1,20 @@
1
+ // --------------------------------------------------------------
2
+ // Time
3
+ // --------------------------------------------------------------
4
+
5
+ .plyr__time {
6
+ font-size: $plyr-font-size-time;
7
+ }
8
+
9
+ // Media duration hidden on small screens
10
+ .plyr__time + .plyr__time {
11
+ // Add a slash in before
12
+ &::before {
13
+ content: '\2044';
14
+ margin-right: $plyr-control-spacing;
15
+ }
16
+
17
+ @media (max-width: ($plyr-bp-md - 1px)) {
18
+ display: none;
19
+ }
20
+ }
@@ -0,0 +1,91 @@
1
+ /* stylelint-disable selector-max-compound-selectors */
2
+ // --------------------------------------------------------------
3
+ // Tooltips
4
+ // --------------------------------------------------------------
5
+
6
+ .plyr__tooltip {
7
+ background: $plyr-tooltip-background;
8
+ border-radius: $plyr-tooltip-radius;
9
+ bottom: 100%;
10
+ box-shadow: $plyr-tooltip-shadow;
11
+ color: $plyr-tooltip-color;
12
+ font-size: $plyr-font-size-small;
13
+ font-weight: $plyr-font-weight-regular;
14
+ left: 50%;
15
+ line-height: 1.3;
16
+ margin-bottom: calc(#{$plyr-tooltip-padding} * 2);
17
+ opacity: 0;
18
+ padding: $plyr-tooltip-padding calc(#{$plyr-tooltip-padding} * 1.5);
19
+ pointer-events: none;
20
+ position: absolute;
21
+ transform: translate(-50%, 10px) scale(0.8);
22
+ transform-origin: 50% 100%;
23
+ transition:
24
+ transform 0.2s 0.1s ease,
25
+ opacity 0.2s 0.1s ease;
26
+ white-space: nowrap;
27
+ z-index: 2;
28
+
29
+ // The background triangle
30
+ &::before {
31
+ border-left: $plyr-tooltip-arrow-size solid transparent;
32
+ border-right: $plyr-tooltip-arrow-size solid transparent;
33
+ border-top: $plyr-tooltip-arrow-size solid $plyr-tooltip-background;
34
+ bottom: calc(#{$plyr-tooltip-arrow-size} * -1);
35
+ content: '';
36
+ height: 0;
37
+ left: 50%;
38
+ position: absolute;
39
+ transform: translateX(-50%);
40
+ width: 0;
41
+ z-index: 2;
42
+ }
43
+ }
44
+
45
+ // Displaying
46
+ .plyr .plyr__control:hover .plyr__tooltip,
47
+ .plyr .plyr__control:focus-visible .plyr__tooltip,
48
+ .plyr__tooltip--visible {
49
+ opacity: 1;
50
+ transform: translate(-50%, 0) scale(1);
51
+ }
52
+
53
+ .plyr .plyr__control:hover .plyr__tooltip {
54
+ z-index: 3;
55
+ }
56
+
57
+ // First tooltip
58
+ .plyr__controls > .plyr__control:first-child .plyr__tooltip,
59
+ .plyr__controls > .plyr__control:first-child + .plyr__control .plyr__tooltip {
60
+ left: 0;
61
+ transform: translate(0, 10px) scale(0.8);
62
+ transform-origin: 0 100%;
63
+
64
+ &::before {
65
+ left: calc((#{$plyr-control-icon-size} / 2) + #{$plyr-control-padding});
66
+ }
67
+ }
68
+
69
+ // Last tooltip
70
+ .plyr__controls > .plyr__control:last-child .plyr__tooltip {
71
+ left: auto;
72
+ right: 0;
73
+ transform: translate(0, 10px) scale(0.8);
74
+ transform-origin: 100% 100%;
75
+
76
+ &::before {
77
+ left: auto;
78
+ right: calc((#{$plyr-control-icon-size} / 2) + #{$plyr-control-padding});
79
+ transform: translateX(50%);
80
+ }
81
+ }
82
+
83
+ .plyr__controls > .plyr__control:first-child,
84
+ .plyr__controls > .plyr__control:first-child + .plyr__control,
85
+ .plyr__controls > .plyr__control:last-child {
86
+ &:hover .plyr__tooltip,
87
+ &:focus-visible .plyr__tooltip,
88
+ .plyr__tooltip--visible {
89
+ transform: translate(0, 0) scale(1);
90
+ }
91
+ }
@@ -0,0 +1,18 @@
1
+ // --------------------------------------------------------------
2
+ // Volume
3
+ // --------------------------------------------------------------
4
+
5
+ .plyr__volume {
6
+ align-items: center;
7
+ display: flex;
8
+ position: relative;
9
+
10
+ input[type='range'] {
11
+ margin-left: calc(#{$plyr-control-spacing} / 2);
12
+ margin-right: calc(#{$plyr-control-spacing} / 2);
13
+ max-width: 90px;
14
+ min-width: 60px;
15
+ position: relative;
16
+ z-index: 2;
17
+ }
18
+ }
@@ -0,0 +1,31 @@
1
+ // --------------------------------------------------------------
2
+ // Animations
3
+ // --------------------------------------------------------------
4
+
5
+ @keyframes plyr-progress {
6
+ to {
7
+ background-position: $plyr-progress-loading-size 0;
8
+ }
9
+ }
10
+
11
+ @keyframes plyr-popup {
12
+ 0% {
13
+ opacity: 0.5;
14
+ transform: translateY(10px);
15
+ }
16
+
17
+ to {
18
+ opacity: 1;
19
+ transform: translateY(0);
20
+ }
21
+ }
22
+
23
+ @keyframes plyr-fade-in {
24
+ from {
25
+ opacity: 0;
26
+ }
27
+
28
+ to {
29
+ opacity: 1;
30
+ }
31
+ }
@@ -0,0 +1,103 @@
1
+ // Downloaded from https://github.com/malyw/css-vars (and modified)
2
+
3
+ @use 'sass:list';
4
+ @use 'sass:map';
5
+
6
+ // global map to be filled via variables
7
+ $css-vars: ();
8
+
9
+ // the variable may be set to "true" anywhere in the code,
10
+ // so native CSS custom properties will be used instead of the Sass global map
11
+ $css-vars-use-native: false !default;
12
+
13
+ ///
14
+ // Assigns a variable to the global map
15
+ ///
16
+ @function css-var-assign($varName: null, $varValue: null) {
17
+ @return map-merge(
18
+ $css-vars,
19
+ (
20
+ $varName: $varValue,
21
+ )
22
+ );
23
+ }
24
+
25
+ ///
26
+ // Emulates var() CSS native function behavior
27
+ // $args[0] {String} "--" + variable name
28
+ // [$args[1]] Optional default value if variable is not assigned yet
29
+ // E.G.:
30
+ // color: var(--main-color);
31
+ // background: var(--main-background, green);
32
+ ///
33
+ @function var($args...) {
34
+ // CHECK PARAMS
35
+ @if length($args) == 0 {
36
+ @error 'Variable name is expected to be passed to the var() function';
37
+ }
38
+
39
+ @if str-length(nth($args, 1)) < 2 or str-slice(nth($args, 1), 0, 2) != '--' {
40
+ @error "Variable name is expected to start from '--'";
41
+ }
42
+
43
+ // PROCESS
44
+ $var-name: list.nth($args, 1);
45
+ $var-value: map.get($css-vars, $var-name);
46
+
47
+ @if $css-vars-use-native {
48
+ // CSS variables
49
+ // Native CSS: don't process function in case of native
50
+ @return unquote('var(' + $args + ')');
51
+ } @else {
52
+ @if not $var-value {
53
+ // variable is not provided so far
54
+ @if length($args) == 2 {
55
+ $var-value: list.nth($args, 2);
56
+ }
57
+ }
58
+
59
+ // Sass: return value from the map
60
+ @return $var-value;
61
+ }
62
+ }
63
+
64
+ ///
65
+ // Sass mixin to provide variables
66
+ // E.G.:
67
+ // @include css-vars((
68
+ // --color: rebeccapurple,
69
+ // --height: 68px,
70
+ // --margin-top: calc(2vh + 20px)
71
+ // ));
72
+ ///
73
+ @mixin css-vars($var-map: null) {
74
+ // CHECK PARAMS
75
+ @if not $var-map {
76
+ @error 'Map of variables is expected, instead got: null';
77
+ }
78
+
79
+ @if type_of($var-map) != map {
80
+ @error 'Map of variables is expected, instead got another type passed: #{type_of($var, ap)}';
81
+ }
82
+
83
+ // PROCESS
84
+ @if $css-vars-use-native {
85
+ // CSS variables
86
+ // Native CSS: assign CSS custom properties to the global scope
87
+ @at-root :root {
88
+ @each $var-name, $var-value in $var-map {
89
+ @if type_of($var-value) == string {
90
+ #{$var-name}: $var-value; // to prevent quotes interpolation
91
+ } @else {
92
+ #{$var-name}: #{$var-value};
93
+ }
94
+ }
95
+ }
96
+ } @else {
97
+ // Sass or debug
98
+ // merge variables and values to the global map (provides no output)
99
+ @each $var-name, $var-value in $var-map {
100
+ $css-vars: css-var-assign($varName, $varValue) !global; // store in global variable
101
+ }
102
+ }
103
+ }
@@ -0,0 +1,3 @@
1
+ @function to-percentage($input) {
2
+ @return $input * 1%;
3
+ }