rook-cli 1.3.9 → 1.3.10
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.
package/package.json
CHANGED
|
@@ -805,6 +805,7 @@
|
|
|
805
805
|
|
|
806
806
|
.rk-modal__media--video,
|
|
807
807
|
.rk-modal__media--embed {
|
|
808
|
+
position: relative;
|
|
808
809
|
width: min(90vw, 1200px);
|
|
809
810
|
max-height: 90vh;
|
|
810
811
|
border-radius: var(--rk-radius-sm, 4px);
|
|
@@ -826,6 +827,120 @@
|
|
|
826
827
|
border: none;
|
|
827
828
|
}
|
|
828
829
|
|
|
830
|
+
/* Tap overlay — click to play/pause */
|
|
831
|
+
.rk-modal__tap-overlay {
|
|
832
|
+
position: absolute;
|
|
833
|
+
inset: 0 0 48px 0;
|
|
834
|
+
z-index: 1;
|
|
835
|
+
cursor: pointer;
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
/* Custom controls — Instagram style */
|
|
839
|
+
.rk-modal__controls {
|
|
840
|
+
position: absolute;
|
|
841
|
+
bottom: 0;
|
|
842
|
+
left: 0;
|
|
843
|
+
right: 0;
|
|
844
|
+
z-index: 2;
|
|
845
|
+
display: flex;
|
|
846
|
+
align-items: center;
|
|
847
|
+
gap: 10px;
|
|
848
|
+
padding: 10px 14px;
|
|
849
|
+
background: linear-gradient(transparent, rgba(0, 0, 0, 0.65));
|
|
850
|
+
color: #fff;
|
|
851
|
+
opacity: 1;
|
|
852
|
+
transition: opacity 0.25s ease;
|
|
853
|
+
}
|
|
854
|
+
|
|
855
|
+
.rk-modal__media--video:hover .rk-modal__controls,
|
|
856
|
+
.rk-modal__controls:focus-within {
|
|
857
|
+
opacity: 1;
|
|
858
|
+
}
|
|
859
|
+
|
|
860
|
+
/* Control buttons */
|
|
861
|
+
.rk-modal__ctrl-btn {
|
|
862
|
+
display: flex;
|
|
863
|
+
align-items: center;
|
|
864
|
+
justify-content: center;
|
|
865
|
+
width: 32px;
|
|
866
|
+
height: 32px;
|
|
867
|
+
flex-shrink: 0;
|
|
868
|
+
padding: 0;
|
|
869
|
+
background: none;
|
|
870
|
+
border: none;
|
|
871
|
+
color: #fff;
|
|
872
|
+
cursor: pointer;
|
|
873
|
+
border-radius: 50%;
|
|
874
|
+
transition: background-color 0.15s ease;
|
|
875
|
+
}
|
|
876
|
+
|
|
877
|
+
.rk-modal__ctrl-btn:hover {
|
|
878
|
+
background-color: rgba(255, 255, 255, 0.15);
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
.rk-modal__ctrl-icon {
|
|
882
|
+
width: 18px;
|
|
883
|
+
height: 18px;
|
|
884
|
+
display: none;
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
/* Play/pause icon toggle */
|
|
888
|
+
.rk-modal__controls.is-paused .rk-modal__ctrl-icon--play,
|
|
889
|
+
.rk-modal__controls:not(.is-playing):not(.is-paused) .rk-modal__ctrl-icon--play {
|
|
890
|
+
display: block;
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
.rk-modal__controls.is-playing .rk-modal__ctrl-icon--pause {
|
|
894
|
+
display: block;
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
/* Mute icon toggle */
|
|
898
|
+
.rk-modal__controls.is-muted .rk-modal__ctrl-icon--muted {
|
|
899
|
+
display: block;
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
.rk-modal__controls.is-unmuted .rk-modal__ctrl-icon--unmuted {
|
|
903
|
+
display: block;
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
.rk-modal__controls:not(.is-muted):not(.is-unmuted) .rk-modal__ctrl-icon--muted {
|
|
907
|
+
display: block;
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
/* Progress bar */
|
|
911
|
+
.rk-modal__progress {
|
|
912
|
+
flex: 1;
|
|
913
|
+
height: 3px;
|
|
914
|
+
background: rgba(255, 255, 255, 0.3);
|
|
915
|
+
border-radius: 2px;
|
|
916
|
+
cursor: pointer;
|
|
917
|
+
position: relative;
|
|
918
|
+
transition: height 0.15s ease;
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
.rk-modal__progress:hover {
|
|
922
|
+
height: 5px;
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
.rk-modal__progress-bar {
|
|
926
|
+
height: 100%;
|
|
927
|
+
width: 0%;
|
|
928
|
+
background: #fff;
|
|
929
|
+
border-radius: 2px;
|
|
930
|
+
transition: none;
|
|
931
|
+
pointer-events: none;
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
/* Time display */
|
|
935
|
+
.rk-modal__time {
|
|
936
|
+
font-size: 12px;
|
|
937
|
+
font-variant-numeric: tabular-nums;
|
|
938
|
+
min-width: 32px;
|
|
939
|
+
text-align: center;
|
|
940
|
+
opacity: 0.85;
|
|
941
|
+
user-select: none;
|
|
942
|
+
}
|
|
943
|
+
|
|
829
944
|
.rk-modal__media--html {
|
|
830
945
|
background: #fff;
|
|
831
946
|
border-radius: var(--rk-radius);
|
|
@@ -841,6 +956,21 @@
|
|
|
841
956
|
width: 100vw;
|
|
842
957
|
border-radius: 0;
|
|
843
958
|
}
|
|
959
|
+
|
|
960
|
+
.rk-modal__controls {
|
|
961
|
+
padding: 8px 10px;
|
|
962
|
+
gap: 8px;
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
.rk-modal__ctrl-btn {
|
|
966
|
+
width: 28px;
|
|
967
|
+
height: 28px;
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
.rk-modal__ctrl-icon {
|
|
971
|
+
width: 16px;
|
|
972
|
+
height: 16px;
|
|
973
|
+
}
|
|
844
974
|
}
|
|
845
975
|
|
|
846
976
|
/* --------------------------------------------------------------------------
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
Rook UI Core — Modal Media Lightbox Controller
|
|
3
3
|
Web Component: <rk-modal-element>
|
|
4
4
|
|
|
5
|
-
Handles image zoom, hosted video
|
|
6
|
-
in a fullscreen lightbox overlay.
|
|
5
|
+
Handles image zoom, hosted video (with custom Instagram-style controls),
|
|
6
|
+
YouTube/Vimeo embeds, and raw HTML in a fullscreen lightbox overlay.
|
|
7
7
|
========================================================================== */
|
|
8
8
|
|
|
9
9
|
if (!customElements.get('rk-modal-element')) {
|
|
@@ -13,6 +13,7 @@ if (!customElements.get('rk-modal-element')) {
|
|
|
13
13
|
this.modal = null;
|
|
14
14
|
this.content = null;
|
|
15
15
|
this.previousFocus = null;
|
|
16
|
+
this._raf = null;
|
|
16
17
|
|
|
17
18
|
this._onKeyDown = this._onKeyDown.bind(this);
|
|
18
19
|
}
|
|
@@ -25,6 +26,11 @@ if (!customElements.get('rk-modal-element')) {
|
|
|
25
26
|
|
|
26
27
|
this._bindEvents();
|
|
27
28
|
this._setupOpenTriggers();
|
|
29
|
+
this._setupVideoControls();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
disconnectedCallback() {
|
|
33
|
+
if (this._raf) cancelAnimationFrame(this._raf);
|
|
28
34
|
}
|
|
29
35
|
|
|
30
36
|
/* ------------------------------------------------------------------ */
|
|
@@ -49,6 +55,132 @@ if (!customElements.get('rk-modal-element')) {
|
|
|
49
55
|
});
|
|
50
56
|
}
|
|
51
57
|
|
|
58
|
+
/* ------------------------------------------------------------------ */
|
|
59
|
+
/* Custom video controls (Instagram-style) */
|
|
60
|
+
/* ------------------------------------------------------------------ */
|
|
61
|
+
|
|
62
|
+
_setupVideoControls() {
|
|
63
|
+
const video = this.querySelector('.rk-modal__video');
|
|
64
|
+
if (!video) return;
|
|
65
|
+
|
|
66
|
+
this._video = video;
|
|
67
|
+
this._controls = this.querySelector('.rk-modal__controls');
|
|
68
|
+
this._progressBar = this.querySelector('.rk-modal__progress-bar');
|
|
69
|
+
this._progressTrack = this.querySelector('[data-ctrl="progress"]');
|
|
70
|
+
this._timeDisplay = this.querySelector('[data-ctrl="time"]');
|
|
71
|
+
this._playPauseBtn = this.querySelector('[data-ctrl="play-pause"]');
|
|
72
|
+
this._muteBtn = this.querySelector('[data-ctrl="mute"]');
|
|
73
|
+
this._tapOverlay = this.querySelector('[data-ctrl="tap"]');
|
|
74
|
+
|
|
75
|
+
// Play/pause button
|
|
76
|
+
if (this._playPauseBtn) {
|
|
77
|
+
this._playPauseBtn.addEventListener('click', (e) => {
|
|
78
|
+
e.stopPropagation();
|
|
79
|
+
this._togglePlay();
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Mute button
|
|
84
|
+
if (this._muteBtn) {
|
|
85
|
+
this._muteBtn.addEventListener('click', (e) => {
|
|
86
|
+
e.stopPropagation();
|
|
87
|
+
this._toggleMute();
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Tap overlay — toggle play/pause
|
|
92
|
+
if (this._tapOverlay) {
|
|
93
|
+
this._tapOverlay.addEventListener('click', (e) => {
|
|
94
|
+
e.stopPropagation();
|
|
95
|
+
this._togglePlay();
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Progress bar click — seek
|
|
100
|
+
if (this._progressTrack) {
|
|
101
|
+
this._progressTrack.addEventListener('click', (e) => {
|
|
102
|
+
e.stopPropagation();
|
|
103
|
+
this._seek(e);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Sync UI with video state
|
|
108
|
+
video.addEventListener('play', () => this._syncPlayState());
|
|
109
|
+
video.addEventListener('pause', () => this._syncPlayState());
|
|
110
|
+
video.addEventListener('volumechange', () => this._syncMuteState());
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
_togglePlay() {
|
|
114
|
+
if (!this._video) return;
|
|
115
|
+
if (this._video.paused) {
|
|
116
|
+
this._video.play().catch(() => {});
|
|
117
|
+
} else {
|
|
118
|
+
this._video.pause();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
_toggleMute() {
|
|
123
|
+
if (!this._video) return;
|
|
124
|
+
this._video.muted = !this._video.muted;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
_seek(e) {
|
|
128
|
+
if (!this._video || !this._progressTrack) return;
|
|
129
|
+
const rect = this._progressTrack.getBoundingClientRect();
|
|
130
|
+
const ratio = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width));
|
|
131
|
+
this._video.currentTime = ratio * this._video.duration;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
_syncPlayState() {
|
|
135
|
+
if (!this._video || !this._controls) return;
|
|
136
|
+
const playing = !this._video.paused;
|
|
137
|
+
this._controls.classList.toggle('is-playing', playing);
|
|
138
|
+
this._controls.classList.toggle('is-paused', !playing);
|
|
139
|
+
|
|
140
|
+
if (playing) {
|
|
141
|
+
this._startProgressLoop();
|
|
142
|
+
} else {
|
|
143
|
+
this._stopProgressLoop();
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
_syncMuteState() {
|
|
148
|
+
if (!this._video || !this._controls) return;
|
|
149
|
+
this._controls.classList.toggle('is-muted', this._video.muted);
|
|
150
|
+
this._controls.classList.toggle('is-unmuted', !this._video.muted);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
_startProgressLoop() {
|
|
154
|
+
const update = () => {
|
|
155
|
+
if (!this._video || this._video.paused) return;
|
|
156
|
+
|
|
157
|
+
const pct = (this._video.currentTime / this._video.duration) * 100 || 0;
|
|
158
|
+
if (this._progressBar) {
|
|
159
|
+
this._progressBar.style.width = pct + '%';
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if (this._timeDisplay) {
|
|
163
|
+
this._timeDisplay.textContent = this._formatTime(this._video.currentTime);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
this._raf = requestAnimationFrame(update);
|
|
167
|
+
};
|
|
168
|
+
this._raf = requestAnimationFrame(update);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
_stopProgressLoop() {
|
|
172
|
+
if (this._raf) {
|
|
173
|
+
cancelAnimationFrame(this._raf);
|
|
174
|
+
this._raf = null;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
_formatTime(seconds) {
|
|
179
|
+
const m = Math.floor(seconds / 60);
|
|
180
|
+
const s = Math.floor(seconds % 60);
|
|
181
|
+
return m + ':' + (s < 10 ? '0' : '') + s;
|
|
182
|
+
}
|
|
183
|
+
|
|
52
184
|
/* ------------------------------------------------------------------ */
|
|
53
185
|
/* Public API */
|
|
54
186
|
/* ------------------------------------------------------------------ */
|
|
@@ -68,9 +200,13 @@ if (!customElements.get('rk-modal-element')) {
|
|
|
68
200
|
// Load lazy iframes (YouTube/Vimeo)
|
|
69
201
|
this._loadIframes();
|
|
70
202
|
|
|
71
|
-
// Autoplay video
|
|
72
|
-
|
|
73
|
-
|
|
203
|
+
// Autoplay hosted video (muted)
|
|
204
|
+
this._playMedia();
|
|
205
|
+
|
|
206
|
+
// Sync initial state
|
|
207
|
+
if (this._video) {
|
|
208
|
+
this._syncPlayState();
|
|
209
|
+
this._syncMuteState();
|
|
74
210
|
}
|
|
75
211
|
|
|
76
212
|
// Focus close button
|
|
@@ -96,6 +232,7 @@ if (!customElements.get('rk-modal-element')) {
|
|
|
96
232
|
|
|
97
233
|
// Stop all media
|
|
98
234
|
this._stopMedia();
|
|
235
|
+
this._stopProgressLoop();
|
|
99
236
|
|
|
100
237
|
if (this.previousFocus) {
|
|
101
238
|
this.previousFocus.focus();
|
|
@@ -117,14 +254,7 @@ if (!customElements.get('rk-modal-element')) {
|
|
|
117
254
|
_loadIframes() {
|
|
118
255
|
this.querySelectorAll('iframe[data-src]').forEach((iframe) => {
|
|
119
256
|
if (!iframe.src || iframe.src === 'about:blank') {
|
|
120
|
-
|
|
121
|
-
if (this.dataset.autoplay === 'true' && src.includes('youtube.com')) {
|
|
122
|
-
iframe.src = src + (src.includes('?') ? '&' : '?') + 'autoplay=1';
|
|
123
|
-
} else if (this.dataset.autoplay === 'true' && src.includes('vimeo.com')) {
|
|
124
|
-
iframe.src = src + (src.includes('?') ? '&' : '?') + 'autoplay=1';
|
|
125
|
-
} else {
|
|
126
|
-
iframe.src = src;
|
|
127
|
-
}
|
|
257
|
+
iframe.src = iframe.dataset.src;
|
|
128
258
|
}
|
|
129
259
|
});
|
|
130
260
|
}
|
|
@@ -132,8 +262,10 @@ if (!customElements.get('rk-modal-element')) {
|
|
|
132
262
|
_playMedia() {
|
|
133
263
|
const video = this.querySelector('video[data-autoplay]');
|
|
134
264
|
if (video) {
|
|
265
|
+
video.muted = true;
|
|
266
|
+
video.currentTime = 0;
|
|
135
267
|
video.play().catch(() => {
|
|
136
|
-
/* autoplay blocked
|
|
268
|
+
/* autoplay blocked — silent fail */
|
|
137
269
|
});
|
|
138
270
|
}
|
|
139
271
|
}
|
|
@@ -154,7 +286,7 @@ if (!customElements.get('rk-modal-element')) {
|
|
|
154
286
|
}
|
|
155
287
|
|
|
156
288
|
/* ------------------------------------------------------------------ */
|
|
157
|
-
/* Keyboard (ESC)
|
|
289
|
+
/* Keyboard (ESC + Space for play/pause) */
|
|
158
290
|
/* ------------------------------------------------------------------ */
|
|
159
291
|
|
|
160
292
|
_onKeyDown(e) {
|
|
@@ -163,6 +295,20 @@ if (!customElements.get('rk-modal-element')) {
|
|
|
163
295
|
if (e.key === 'Escape') {
|
|
164
296
|
e.preventDefault();
|
|
165
297
|
this.close();
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
// Space toggles play/pause on video
|
|
302
|
+
if (e.key === ' ' && this._video) {
|
|
303
|
+
e.preventDefault();
|
|
304
|
+
this._togglePlay();
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
// M toggles mute on video
|
|
309
|
+
if (e.key === 'm' && this._video) {
|
|
310
|
+
e.preventDefault();
|
|
311
|
+
this._toggleMute();
|
|
166
312
|
}
|
|
167
313
|
}
|
|
168
314
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Snippet: RkModal
|
|
3
3
|
Renders a media lightbox for images, videos, and embedded content.
|
|
4
4
|
Uses Web Component <rk-modal-element> for behaviour.
|
|
5
|
+
Videos use custom Instagram-style controls (autoplay + muted by default).
|
|
5
6
|
|
|
6
7
|
@param {string} id - Unique modal id (required)
|
|
7
8
|
@param {string} [type] - 'image' | 'video' | 'youtube' | 'vimeo' | 'html' (default: 'image')
|
|
@@ -12,7 +13,6 @@
|
|
|
12
13
|
@param {string} [content] - Raw HTML content (when type is 'html')
|
|
13
14
|
@param {string} [alt] - Alt text for images / aria-label for media
|
|
14
15
|
@param {string} [aspect_ratio] - Aspect ratio for video (e.g. '16/9', default: '16/9')
|
|
15
|
-
@param {boolean} [autoplay] - Autoplay video on open (default: true)
|
|
16
16
|
@param {string} [custom_class] - Extra CSS classes
|
|
17
17
|
|
|
18
18
|
@example — Image lightbox
|
|
@@ -28,14 +28,12 @@
|
|
|
28
28
|
{%- liquid
|
|
29
29
|
assign modal_type = type | default: 'image'
|
|
30
30
|
assign modal_aspect = aspect_ratio | default: '16/9'
|
|
31
|
-
assign modal_autoplay = autoplay | default: true
|
|
32
31
|
assign modal_alt = alt | default: ''
|
|
33
32
|
-%}
|
|
34
33
|
|
|
35
34
|
<rk-modal-element
|
|
36
35
|
data-modal-id="{{ id }}"
|
|
37
36
|
data-type="{{ modal_type }}"
|
|
38
|
-
{% if modal_autoplay %}data-autoplay="true"{% endif %}
|
|
39
37
|
>
|
|
40
38
|
<div id="{{ id }}" class="rk-modal{% if custom_class %} {{ custom_class }}{% endif %}">
|
|
41
39
|
{%- comment -%} Overlay {%- endcomment -%}
|
|
@@ -75,21 +73,52 @@
|
|
|
75
73
|
<div class="rk-modal__media rk-modal__media--video" style="aspect-ratio: {{ modal_aspect }};">
|
|
76
74
|
<video
|
|
77
75
|
class="rk-modal__video"
|
|
78
|
-
controls
|
|
79
76
|
playsinline
|
|
77
|
+
muted
|
|
78
|
+
loop
|
|
80
79
|
preload="metadata"
|
|
81
|
-
|
|
80
|
+
data-autoplay
|
|
82
81
|
{% if modal_alt != blank %}aria-label="{{ modal_alt }}"{% endif %}
|
|
83
82
|
>
|
|
84
83
|
<source src="{{ video_url }}" type="video/mp4">
|
|
85
84
|
</video>
|
|
85
|
+
|
|
86
|
+
{%- comment -%} Custom controls — Instagram style {%- endcomment -%}
|
|
87
|
+
<div class="rk-modal__controls">
|
|
88
|
+
<button type="button" class="rk-modal__ctrl-btn" data-ctrl="play-pause" aria-label="Play / Pause">
|
|
89
|
+
<svg class="rk-modal__ctrl-icon rk-modal__ctrl-icon--play" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
|
90
|
+
<path d="M6.3 3.24A1 1 0 0 0 5 4.13v11.74a1 1 0 0 0 1.5.87l10-5.87a1 1 0 0 0 0-1.74l-10-5.87-.2-.02Z"/>
|
|
91
|
+
</svg>
|
|
92
|
+
<svg class="rk-modal__ctrl-icon rk-modal__ctrl-icon--pause" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
|
93
|
+
<path d="M5 3h3v14H5V3Zm7 0h3v14h-3V3Z"/>
|
|
94
|
+
</svg>
|
|
95
|
+
</button>
|
|
96
|
+
|
|
97
|
+
<div class="rk-modal__progress" data-ctrl="progress">
|
|
98
|
+
<div class="rk-modal__progress-bar"></div>
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
<span class="rk-modal__time" data-ctrl="time">0:00</span>
|
|
102
|
+
|
|
103
|
+
<button type="button" class="rk-modal__ctrl-btn" data-ctrl="mute" aria-label="Mudo / Som">
|
|
104
|
+
<svg class="rk-modal__ctrl-icon rk-modal__ctrl-icon--muted" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
|
105
|
+
<path d="M10 3.5a.5.5 0 0 0-.8-.4L5.38 6H2.5a.5.5 0 0 0-.5.5v7a.5.5 0 0 0 .5.5h2.88l3.82 2.9a.5.5 0 0 0 .8-.4v-13ZM14.15 6.15a.5.5 0 0 1 .7 0l1.65 1.65 1.65-1.65a.5.5 0 0 1 .7.7L17.2 8.5l1.65 1.65a.5.5 0 0 1-.7.7L16.5 9.2l-1.65 1.65a.5.5 0 0 1-.7-.7l1.65-1.65-1.65-1.65a.5.5 0 0 1 0-.7Z"/>
|
|
106
|
+
</svg>
|
|
107
|
+
<svg class="rk-modal__ctrl-icon rk-modal__ctrl-icon--unmuted" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
|
108
|
+
<path d="M10 3.5a.5.5 0 0 0-.8-.4L5.38 6H2.5a.5.5 0 0 0-.5.5v7a.5.5 0 0 0 .5.5h2.88l3.82 2.9a.5.5 0 0 0 .8-.4v-13ZM13.54 6.16a.5.5 0 0 1 .7 0A6.47 6.47 0 0 1 16 10.5a6.47 6.47 0 0 1-1.76 4.34.5.5 0 0 1-.7-.7A5.47 5.47 0 0 0 15 10.5c0-1.5-.52-2.88-1.46-3.64a.5.5 0 0 1 0-.7Zm-1.08 2.3a.5.5 0 0 1 .7 0c.55.5.84 1.24.84 2.04s-.29 1.54-.84 2.04a.5.5 0 0 1-.7-.7c.35-.32.54-.79.54-1.34s-.19-1.02-.54-1.34a.5.5 0 0 1 0-.7Z"/>
|
|
109
|
+
</svg>
|
|
110
|
+
</button>
|
|
111
|
+
</div>
|
|
112
|
+
|
|
113
|
+
{%- comment -%} Tap-to-toggle play overlay {%- endcomment -%}
|
|
114
|
+
<div class="rk-modal__tap-overlay" data-ctrl="tap"></div>
|
|
86
115
|
</div>
|
|
87
116
|
|
|
88
117
|
{%- when 'youtube' -%}
|
|
89
118
|
<div class="rk-modal__media rk-modal__media--embed" style="aspect-ratio: {{ modal_aspect }};">
|
|
90
119
|
<iframe
|
|
91
120
|
class="rk-modal__iframe"
|
|
92
|
-
data-src="https://www.youtube.com/embed/{{ youtube_id }}?rel=0&enablejsapi=1"
|
|
121
|
+
data-src="https://www.youtube.com/embed/{{ youtube_id }}?rel=0&enablejsapi=1&mute=1&autoplay=1"
|
|
93
122
|
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
|
94
123
|
allowfullscreen
|
|
95
124
|
loading="lazy"
|
|
@@ -101,7 +130,7 @@
|
|
|
101
130
|
<div class="rk-modal__media rk-modal__media--embed" style="aspect-ratio: {{ modal_aspect }};">
|
|
102
131
|
<iframe
|
|
103
132
|
class="rk-modal__iframe"
|
|
104
|
-
data-src="https://player.vimeo.com/video/{{ vimeo_id }}?title=0&byline=0&portrait=0"
|
|
133
|
+
data-src="https://player.vimeo.com/video/{{ vimeo_id }}?title=0&byline=0&portrait=0&muted=1&autoplay=1"
|
|
105
134
|
allow="autoplay; fullscreen; picture-in-picture"
|
|
106
135
|
allowfullscreen
|
|
107
136
|
loading="lazy"
|
package/src/utils/logger.js
CHANGED
|
@@ -49,7 +49,7 @@ export class Logger {
|
|
|
49
49
|
banner() {
|
|
50
50
|
console.log('');
|
|
51
51
|
console.log(pc.bold(pc.white(' ╔══════════════════════════════╗')));
|
|
52
|
-
console.log(pc.bold(pc.white(' ║ ♟️ ROOK CLI v1.3.
|
|
52
|
+
console.log(pc.bold(pc.white(' ║ ♟️ ROOK CLI v1.3.10 ║')));
|
|
53
53
|
console.log(pc.bold(pc.white(' ║ Shopify Component Tool ║')));
|
|
54
54
|
console.log(pc.bold(pc.white(' ╚══════════════════════════════╝')));
|
|
55
55
|
console.log('');
|