ngx-edge-slider 2.2.0 → 2.2.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.
@@ -0,0 +1,413 @@
1
+ :host {
2
+ display: block;
3
+ position: relative;
4
+ }
5
+
6
+ /* ---------------- Main Slider ---------------- */
7
+ .slider-main-product {
8
+ display: inline-flex;
9
+ height: 520px;
10
+ }
11
+
12
+ .slider-main {
13
+ width: 100%;
14
+ height: 600px;
15
+ justify-content: center;
16
+ display: flex;
17
+ }
18
+
19
+ @media (max-width: 577px) {
20
+ .slider-main {
21
+ height: 100%;
22
+ display: block;
23
+ }
24
+ }
25
+ .slider--main {
26
+ height: 100%;
27
+ overflow: hidden;
28
+ }
29
+ .slider--main .slider__wrapper {
30
+ display: flex;
31
+ will-change: transform;
32
+ }
33
+ .slider--main .slider__wrapper .slide {
34
+ flex: 0 0 100%;
35
+ }
36
+ .slider--main .slider__wrapper .slide .slide-content,
37
+ .slider--main .slider__wrapper .slide picture {
38
+ position: relative;
39
+ width: 100%;
40
+ height: 100%;
41
+ display: flex;
42
+ align-items: center;
43
+ justify-content: center;
44
+ }
45
+ .slider--main .slider__wrapper .slide .slide-content .drag-handle,
46
+ .slider--main .slider__wrapper .slide picture .drag-handle {
47
+ width: 100%;
48
+ height: 100%;
49
+ cursor: grab;
50
+ z-index: 10;
51
+ pointer-events: all;
52
+ }
53
+ .slider--main .slider__wrapper .slide .slide-content img,
54
+ .slider--main .slider__wrapper .slide picture img {
55
+ max-width: 100%;
56
+ max-height: 100%;
57
+ object-fit: contain;
58
+ display: block;
59
+ transform-origin: center;
60
+ transform: translateZ(0);
61
+ pointer-events: none;
62
+ }
63
+
64
+ /* ---------------- Thumbs Slider ---------------- */
65
+ .slider--thumbs {
66
+ margin-top: 24px;
67
+ margin-bottom: 36px;
68
+ height: 70px !important;
69
+ }
70
+ .slider--thumbs .slider__wrapper {
71
+ display: flex;
72
+ gap: 8px;
73
+ will-change: transform;
74
+ transform: translateZ(0);
75
+ }
76
+ .slider--thumbs .slide {
77
+ flex: 0 0 auto;
78
+ pointer-events: auto;
79
+ }
80
+ .slider--thumbs .slide .slide-content {
81
+ width: 54px;
82
+ height: 68px;
83
+ display: flex;
84
+ align-items: center;
85
+ justify-content: center;
86
+ border: 1px solid #ebebeb;
87
+ cursor: pointer;
88
+ }
89
+ .slider--thumbs .slide .slide-content img {
90
+ max-width: 100%;
91
+ max-height: 100%;
92
+ object-fit: contain;
93
+ display: block;
94
+ transform: scale(0.9);
95
+ }
96
+ .slider--thumbs .slide .slide-content.slide--current {
97
+ border-color: #212121;
98
+ }
99
+
100
+ /* ---------------- Main Slider Container ---------------- */
101
+ .slider {
102
+ width: 100%;
103
+ height: 100%;
104
+ overflow: hidden;
105
+ position: relative;
106
+ touch-action: none;
107
+ cursor: grab;
108
+ user-select: none;
109
+ -webkit-user-drag: none;
110
+ -webkit-tap-highlight-color: transparent;
111
+ }
112
+ .slider.slider-can-drag {
113
+ cursor: grab;
114
+ }
115
+ .slider.slider-is-dragging {
116
+ cursor: grabbing;
117
+ }
118
+ .slider.slider-dragged {
119
+ /* optional, e.g., subtle shadow after drag */
120
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
121
+ }
122
+ .slider.slider-drag-prevent-click {
123
+ pointer-events: none; /* prevent accidental clicks while dragging */
124
+ }
125
+ .slider .slider__wrapper {
126
+ display: flex;
127
+ transition: transform 300ms cubic-bezier(0.25, 0.46, 0.45, 0.84);
128
+ will-change: transform;
129
+ transform: none;
130
+ width: auto;
131
+ height: 100%;
132
+ }
133
+ .slider .slide {
134
+ display: flex;
135
+ align-items: center;
136
+ justify-content: center;
137
+ height: 100%;
138
+ overflow: hidden;
139
+ flex-shrink: 0;
140
+ position: relative;
141
+ transition: transform 300ms cubic-bezier(0.25, 0.46, 0.45, 0.84);
142
+ }
143
+
144
+ @media (min-width: 1441px) {
145
+ .slider--thumbs .slide {
146
+ flex: 0 0 20%;
147
+ }
148
+ }
149
+ @media (max-width: 1024px) {
150
+ .slider--thumbs .slide {
151
+ flex: 0 0 33.333%;
152
+ }
153
+ }
154
+ @media (max-width: 1023px) {
155
+ .slider--thumbs .slide {
156
+ flex: 0 0 50%;
157
+ }
158
+ }
159
+ /* ---------------- Optional Arrows ---------------- */
160
+ .slider-arrow-next,
161
+ .slider-arrow-prev {
162
+ position: absolute;
163
+ top: 50%;
164
+ transform: translateY(-50%);
165
+ width: 32px;
166
+ height: 32px;
167
+ background: rgba(255, 255, 255, 0.8) no-repeat center center;
168
+ cursor: pointer;
169
+ z-index: 10;
170
+ }
171
+ .slider-arrow-next.next,
172
+ .slider-arrow-prev.next {
173
+ right: 10px;
174
+ }
175
+ .slider-arrow-next.prev,
176
+ .slider-arrow-prev.prev {
177
+ left: 10px;
178
+ }
179
+
180
+ /* ---------------- Arrows L/R on Thumbs ---------------- */
181
+ .thumbs-wrapper {
182
+ position: relative;
183
+ }
184
+
185
+ .thumb-nav {
186
+ position: absolute;
187
+ top: 50%;
188
+ transform: translateY(-50%);
189
+ z-index: 20;
190
+ width: 48px;
191
+ height: 48px;
192
+ background: rgba(255, 255, 255, 0.9)
193
+ url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='4.51 0.01 10.99 19.97'%3E%3Cpath fill='%23000' d='m4.508 18.968 1.006 1.006 9.983-9.984L5.514.005 4.508 1.011l8.984 8.984-8.984 8.973Z'/%3E%3C/svg%3E")
194
+ no-repeat center center/11px 18px;
195
+ font-size: 36px;
196
+ line-height: 56px;
197
+ opacity: 0;
198
+ pointer-events: none;
199
+ transition: opacity 200ms ease;
200
+ }
201
+ .thumb-nav.activeArrow {
202
+ opacity: 1;
203
+ pointer-events: all;
204
+ }
205
+ .thumb-nav--left {
206
+ left: -73px;
207
+ transform: translateY(-50%) rotate(180deg) !important;
208
+ }
209
+ .thumb-nav--right {
210
+ right: -65px;
211
+ }
212
+
213
+ .slider-pagination .thumb-dots-wrapper {
214
+ display: flex;
215
+ align-items: center;
216
+ justify-content: center;
217
+ gap: 7px;
218
+ }
219
+ .slider-pagination .thumb-dots-wrapper .thumb-dot {
220
+ display: inline-block;
221
+ width: 4px;
222
+ height: 4px;
223
+ margin: 0 0 0 8px;
224
+ border-radius: 50%;
225
+ background: #b3b3b3;
226
+ }
227
+ .slider-pagination .thumb-dots-wrapper .thumb-dot.active {
228
+ background: #212121;
229
+ border: 1px solid #212121;
230
+ }
231
+ .slider-pagination .thumb-dots-wrapper .thumb-dot:hover {
232
+ background: #212121;
233
+ border: 1px solid #212121;
234
+ }
235
+ .slider-pagination .thumb-dots-wrapper .thumb-dot.hidden {
236
+ opacity: 0;
237
+ pointer-events: none;
238
+ }
239
+
240
+ .slider-container {
241
+ position: relative;
242
+ z-index: 10;
243
+ }
244
+ .slider-container .slider {
245
+ position: relative;
246
+ z-index: 1;
247
+ }
248
+ .slider-container .slider.slider-is-dragging {
249
+ pointer-events: none;
250
+ }
251
+ .slider-container .slider-nav {
252
+ position: absolute;
253
+ inset: 0;
254
+ pointer-events: none;
255
+ z-index: 20;
256
+ }
257
+ .slider-container .slider-nav .nav-btn {
258
+ pointer-events: auto;
259
+ z-index: 30;
260
+ position: absolute;
261
+ width: 42px;
262
+ height: 42px;
263
+ border-radius: 2px;
264
+ display: inline-flex;
265
+ align-items: center;
266
+ justify-content: center;
267
+ border: 0;
268
+ cursor: pointer;
269
+ background: transparent;
270
+ font-size: 32px;
271
+ line-height: 1;
272
+ transition:
273
+ transform 0.15s ease,
274
+ opacity 0.15s ease;
275
+ }
276
+ .slider-container .slider-nav .nav-btn:hover {
277
+ transform: translateY(-1px);
278
+ background: rgba(0, 0, 0, 0.6);
279
+ }
280
+ .slider-container .slider-nav .nav-btn.is-hidden {
281
+ color: rgba(160, 160, 165, 0.5529411765);
282
+ opacity: 0.3;
283
+ cursor: not-allowed;
284
+ pointer-events: auto;
285
+ }
286
+ .slider-container .slider-nav.nav--top-left .nav-btn--prev {
287
+ top: -50px;
288
+ left: -20px;
289
+ }
290
+ .slider-container .slider-nav.nav--top-left .nav-btn--next {
291
+ top: -50px;
292
+ left: 42px;
293
+ }
294
+ .slider-container .slider-nav.nav--top-center .nav-btn--prev {
295
+ top: -50px;
296
+ left: 50%;
297
+ transform: translateX(-50px);
298
+ }
299
+ .slider-container .slider-nav.nav--top-center .nav-btn--next {
300
+ top: -50px;
301
+ left: 50%;
302
+ transform: translateX(10px);
303
+ }
304
+ .slider-container .slider-nav.nav--top-right .nav-btn--prev {
305
+ top: -50px;
306
+ right: 42px;
307
+ }
308
+ .slider-container .slider-nav.nav--top-right .nav-btn--next {
309
+ top: -50px;
310
+ right: -20px;
311
+ }
312
+ .slider-container .slider-nav.nav--bottom-left .nav-btn--prev {
313
+ bottom: 30px;
314
+ left: -20px;
315
+ }
316
+ .slider-container .slider-nav.nav--bottom-left .nav-btn--next {
317
+ bottom: 30px;
318
+ left: 42px;
319
+ }
320
+ .slider-container .slider-nav.nav--bottom-center .nav-btn--prev {
321
+ bottom: 30px;
322
+ left: 50%;
323
+ transform: translateX(-50px);
324
+ }
325
+ .slider-container .slider-nav.nav--bottom-center .nav-btn--next {
326
+ bottom: 30px;
327
+ left: 50%;
328
+ transform: translateX(10px);
329
+ }
330
+ .slider-container .slider-nav.nav--bottom-right .nav-btn--prev {
331
+ bottom: 30px;
332
+ right: 42px;
333
+ }
334
+ .slider-container .slider-nav.nav--bottom-right .nav-btn--next {
335
+ bottom: 30px;
336
+ right: -20px;
337
+ }
338
+ .slider-container .slider-nav.nav--center-sides .nav-btn {
339
+ background: rgba(0, 0, 0, 0.7);
340
+ color: white;
341
+ }
342
+ .slider-container .slider-nav.nav--center-sides .nav-btn--prev {
343
+ top: 50%;
344
+ left: -50px;
345
+ transform: translateY(-50%);
346
+ }
347
+ .slider-container .slider-nav.nav--center-sides .nav-btn--next {
348
+ top: 50%;
349
+ right: -50px;
350
+ transform: translateY(-50%);
351
+ }
352
+ @media (max-width: 1024px) {
353
+ .slider-container .slider-nav .nav--top-left .nav-btn--prev,
354
+ .slider-container .slider-nav .nav--top-center .nav-btn--prev,
355
+ .slider-container .slider-nav .nav--top-right .nav-btn--prev,
356
+ .slider-container .slider-nav .nav--bottom-left .nav-btn--prev,
357
+ .slider-container .slider-nav .nav--bottom-center .nav-btn--prev,
358
+ .slider-container .slider-nav .nav--bottom-right .nav-btn--prev,
359
+ .slider-container .slider-nav .nav--center-sides .nav-btn--prev {
360
+ left: clamp(8px, 5%, 40px);
361
+ right: auto;
362
+ }
363
+ .slider-container .slider-nav .nav--top-left .nav-btn--next,
364
+ .slider-container .slider-nav .nav--top-center .nav-btn--next,
365
+ .slider-container .slider-nav .nav--top-right .nav-btn--next,
366
+ .slider-container .slider-nav .nav--bottom-left .nav-btn--next,
367
+ .slider-container .slider-nav .nav--bottom-center .nav-btn--next,
368
+ .slider-container .slider-nav .nav--bottom-right .nav-btn--next,
369
+ .slider-container .slider-nav .nav--center-sides .nav-btn--next {
370
+ right: clamp(8px, 5%, 20px);
371
+ left: auto;
372
+ }
373
+ }
374
+ @media (max-width: 768px) {
375
+ .slider-container .slider-nav .nav-btn {
376
+ width: 36px;
377
+ height: 36px;
378
+ font-size: 24px;
379
+ }
380
+ }
381
+ @media (max-width: 480px) {
382
+ .slider-container .slider-nav .slider-container .slider-nav.nav--center-sides {
383
+ pointer-events: auto;
384
+ }
385
+ .slider-container .slider-nav .slider-container .slider-nav.nav--center-sides .nav-btn {
386
+ width: 32px;
387
+ height: 32px;
388
+ font-size: 20px;
389
+ pointer-events: auto;
390
+ z-index: 20;
391
+ background: rgba(0, 0, 0, 0.7);
392
+ color: white;
393
+ }
394
+ .slider-container .slider-nav .slider-container .slider__wrapper {
395
+ position: relative;
396
+ }
397
+ .slider-container .slider-nav .slider-container .slider__wrapper .slide-content {
398
+ pointer-events: auto;
399
+ }
400
+ .slider-container .slider-nav .nav-btn {
401
+ width: 32px;
402
+ height: 32px;
403
+ font-size: 20px;
404
+ }
405
+ .slider-container .slider-nav .nav-btn--prev {
406
+ left: 8px !important;
407
+ right: auto !important;
408
+ }
409
+ .slider-container .slider-nav .nav-btn--next {
410
+ right: 8px !important;
411
+ left: auto !important;
412
+ }
413
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-edge-slider",
3
- "version": "2.2.0",
3
+ "version": "2.2.1",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=18.0.0",
6
6
  "@angular/core": ">=18.0.0",