zoomora 1.1.0 → 1.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.
package/src/zoomora.js CHANGED
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Zoomora Lightbox Plugin v1.1.0
2
+ * Zoomora Lightbox Plugin v1.2.1
3
3
  * A modern, responsive lightbox plugin with zoom, fullscreen, and gallery features
4
4
  *
5
- * Copyright (c) 2025 Faruk Ahmed (FrontTheme)
5
+ * Copyright (c) 2026 Faruk Ahmed (FrontTheme)
6
6
  * Licensed under MIT License
7
7
  */
8
8
 
@@ -46,6 +46,7 @@ import './styles/zoomora.scss';
46
46
  maxZoomScale: 3, // Maximum zoom scale
47
47
  zoomStep: 0.1, // Zoom step for scroll wheel
48
48
  animationDuration: 300, // Animation duration in ms
49
+ closeOnBackgroundClick: true, // Close lightbox when clicking on background
49
50
  onOpen: null, // Callback when lightbox opens
50
51
  onClose: null, // Callback when lightbox closes
51
52
  onNext: null, // Callback when navigating to next item
@@ -160,21 +161,27 @@ import './styles/zoomora.scss';
160
161
  <div class="zoomora" id="zoomoraLightbox">
161
162
  <div class="zoomora-container">
162
163
  <div class="zoomora-header" id="zoomoraHeader">
163
- <div class="zoomora-counter" id="zoomoraCounter">1 / 1</div>
164
+ <div class="zoomora-counter" id="zoomoraCounter" ${!this.options.showCounter ? 'style="opacity:0;visibility:hidden;"' : ''}>1 / 1</div>
164
165
  <div class="zoomora-controls">
165
- <button class="zoomora-btn" id="zoomoraThumbnailBtn" title="Toggle Thumbnails">
166
- <i class="zoomorai-thumbnails"></i>
167
- </button>
166
+ ${this.options.showThumbnails ? `
167
+ <button class="zoomora-btn" id="zoomoraThumbnailBtn" title="Toggle Thumbnails">
168
+ <i class="zoomorai-thumbnails"></i>
169
+ </button>
170
+ ` : ''}
168
171
  ${autoHideButtonHTML}
169
- <button class="zoomora-btn" id="zoomoraZoomBtn" title="Zoom">
170
- <i class="zoomorai-zoom"></i>
171
- </button>
172
- <button class="zoomora-btn" id="zoomoraFullscreenBtn" title="Fullscreen">
173
- <i class="zoomorai-expand"></i>
174
- </button>
175
- <button class="zoomora-btn" id="zoomoraCollapseBtn" title="Exit Fullscreen" style="display: none;">
176
- <i class="zoomorai-collapse"></i>
177
- </button>
172
+ ${this.options.showZoom ? `
173
+ <button class="zoomora-btn" id="zoomoraZoomBtn" title="Zoom">
174
+ <i class="zoomorai-zoom"></i>
175
+ </button>
176
+ ` : ''}
177
+ ${this.options.showFullscreen ? `
178
+ <button class="zoomora-btn" id="zoomoraFullscreenBtn" title="Fullscreen">
179
+ <i class="zoomorai-expand"></i>
180
+ </button>
181
+ <button class="zoomora-btn" id="zoomoraCollapseBtn" title="Exit Fullscreen" style="display: none;">
182
+ <i class="zoomorai-collapse"></i>
183
+ </button>
184
+ ` : ''}
178
185
  <button class="zoomora-btn" id="zoomoraCloseBtn" title="Close">
179
186
  <i class="zoomorai-close"></i>
180
187
  </button>
@@ -193,8 +200,8 @@ import './styles/zoomora.scss';
193
200
  <i class="zoomorai-arrow-right"></i>
194
201
  </button>
195
202
 
196
- <div class="zoomora-caption" id="zoomoraCaption"></div>
197
- <div class="zoomora-thumbnails" id="zoomoraThumbs"></div>
203
+ <div class="zoomora-caption" id="zoomoraCaption" ${!this.options.showThumbnails ? 'style="bottom:20px;"' : ''}></div>
204
+ <div class="zoomora-thumbnails" id="zoomoraThumbs" ${!this.options.showThumbnails ? 'style="display:none;"' : ''}></div>
198
205
  </div>
199
206
  </div>
200
207
  `;
@@ -230,10 +237,16 @@ import './styles/zoomora.scss';
230
237
  this.addEventListener(document.getElementById('zoomoraCloseBtn'), 'click', () => this.close());
231
238
  this.addEventListener(document.getElementById('zoomoraPrevBtn'), 'click', () => this.prev());
232
239
  this.addEventListener(document.getElementById('zoomoraNextBtn'), 'click', () => this.next());
233
- this.addEventListener(document.getElementById('zoomoraZoomBtn'), 'click', () => this.toggleZoom());
234
- this.addEventListener(document.getElementById('zoomoraFullscreenBtn'), 'click', () => this.toggleFullscreen());
235
- this.addEventListener(document.getElementById('zoomoraCollapseBtn'), 'click', () => this.exitFullscreen());
236
- this.addEventListener(document.getElementById('zoomoraThumbnailBtn'), 'click', () => this.toggleThumbnails());
240
+ if (this.options.showZoom) {
241
+ this.addEventListener(document.getElementById('zoomoraZoomBtn'), 'click', () => this.toggleZoom());
242
+ }
243
+ if (this.options.showFullscreen) {
244
+ this.addEventListener(document.getElementById('zoomoraFullscreenBtn'), 'click', () => this.toggleFullscreen());
245
+ this.addEventListener(document.getElementById('zoomoraCollapseBtn'), 'click', () => this.exitFullscreen());
246
+ }
247
+ if (this.options.showThumbnails) {
248
+ this.addEventListener(document.getElementById('zoomoraThumbnailBtn'), 'click', () => this.toggleThumbnails());
249
+ }
237
250
 
238
251
  // Fullscreen change events
239
252
  this.addEventListener(document, 'fullscreenchange', this.boundMethods.handleFullscreenChange);
@@ -247,7 +260,7 @@ import './styles/zoomora.scss';
247
260
  // Lightbox click to close
248
261
  this.addEventListener(this.zoomora, 'click', this.boundMethods.handleZoomoraClick);
249
262
 
250
- // Content click for zoom toggle
263
+ // Content click for zoom toggle and background click
251
264
  this.addEventListener(this.content, 'click', this.boundMethods.handleContentClick);
252
265
 
253
266
  // Mouse drag events
@@ -344,16 +357,25 @@ import './styles/zoomora.scss';
344
357
  * Handle fullscreen change events
345
358
  */
346
359
  handleFullscreenChange() {
347
- const isInFullscreen = document.fullscreenElement ||
360
+ const isInFullscreen = !!(
361
+ document.fullscreenElement ||
348
362
  document.webkitFullscreenElement ||
349
363
  document.mozFullScreenElement ||
350
- document.msFullscreenElement;
364
+ document.msFullscreenElement
365
+ );
351
366
 
367
+ // Only update if state changed from fullscreen to not fullscreen
352
368
  if (!isInFullscreen && this.isFullscreen) {
353
369
  this.isFullscreen = false;
354
370
  this.zoomora.classList.remove('fullscreen');
355
371
  this.updateButtons();
356
372
  }
373
+ // Update if entering fullscreen
374
+ else if (isInFullscreen && !this.isFullscreen) {
375
+ this.isFullscreen = true;
376
+ this.zoomora.classList.add('fullscreen');
377
+ this.updateButtons();
378
+ }
357
379
  }
358
380
 
359
381
  /**
@@ -361,7 +383,7 @@ import './styles/zoomora.scss';
361
383
  * @param {Event} e - Click event
362
384
  */
363
385
  handleZoomoraClick(e) {
364
- if (e.target === this.zoomora) {
386
+ if (e.target === this.zoomora && this.options.closeOnBackgroundClick) {
365
387
  this.close();
366
388
  }
367
389
  }
@@ -376,9 +398,60 @@ import './styles/zoomora.scss';
376
398
  return;
377
399
  }
378
400
 
379
- const media = e.target.closest('.zoomora-media');
380
- if (media && !media.classList.contains('no-zoom')) {
381
- this.toggleZoom();
401
+ // Don't close on header clicks
402
+ if (this.header && this.header.contains(e.target)) {
403
+ return;
404
+ }
405
+
406
+ // Don't close on button clicks
407
+ if (e.target.closest('button')) {
408
+ return;
409
+ }
410
+
411
+ // Check if click is directly on actual media element (img, video, iframe)
412
+ const mediaElement = e.target.closest('.zoomora-media, .zoomora-video, .zoomora-iframe');
413
+
414
+ if (mediaElement) {
415
+ // Only toggle zoom for images
416
+ if (mediaElement.classList.contains('zoomora-media') && !mediaElement.classList.contains('no-zoom')) {
417
+ this.toggleZoom();
418
+ }
419
+ return;
420
+ }
421
+
422
+ // Check if clicking inside video container but not on video itself
423
+ const videoContainer = e.target.closest('.zoomora-video-container');
424
+ if (videoContainer) {
425
+ // If clicking on the play button, don't close
426
+ if (e.target.closest('.zoomora-play-button')) {
427
+ return;
428
+ }
429
+ // If clicking on background area of video container, close
430
+ if (this.options.closeOnBackgroundClick) {
431
+ this.close();
432
+ }
433
+ return;
434
+ }
435
+
436
+ // Check if clicking on background elements (including when zoomed)
437
+ // This checks the actual target element, not just closest()
438
+ const clickedElement = e.target;
439
+ const isBackgroundElement =
440
+ clickedElement.classList.contains('zoomora-content') ||
441
+ clickedElement.classList.contains('zoomora-slide-container') ||
442
+ clickedElement.classList.contains('zoomora-slide') ||
443
+ clickedElement.classList.contains('zoomora-slides-container') ||
444
+ clickedElement.id === 'zoomoraContent' ||
445
+ clickedElement.id === 'zoomoraSlidesContainer';
446
+
447
+ if (isBackgroundElement && this.options.closeOnBackgroundClick) {
448
+ this.close();
449
+ return;
450
+ }
451
+
452
+ // If we reach here and no media was clicked, close
453
+ if (this.options.closeOnBackgroundClick) {
454
+ this.close();
382
455
  }
383
456
  }
384
457
 
@@ -970,11 +1043,6 @@ import './styles/zoomora.scss';
970
1043
  }
971
1044
  }
972
1045
 
973
- /**
974
- * Calculate zoom levels for an image
975
- * @param {HTMLImageElement} img - Image element
976
- * @returns {Object} Zoom configuration
977
- */
978
1046
  /**
979
1047
  * Calculate zoom levels for an image
980
1048
  * @param {HTMLImageElement} img - Image element
@@ -1151,7 +1219,6 @@ import './styles/zoomora.scss';
1151
1219
  const zoomConfig = this.calculateZoomLevels(media);
1152
1220
 
1153
1221
  if (!zoomConfig.canZoom) {
1154
- console.log('Image cannot be zoomed (already at full size or larger)');
1155
1222
  return;
1156
1223
  }
1157
1224
 
@@ -1193,8 +1260,6 @@ import './styles/zoomora.scss';
1193
1260
  media.style.transform = `translate(0px, 0px) scale(${targetScale})`;
1194
1261
  media.style.cursor = 'grab';
1195
1262
  media.classList.add('zoomed');
1196
-
1197
- console.log(`Zoomed to level ${currentLevel}/${zoomConfig.levels.length - 1} (${(targetScale * 100).toFixed(0)}%)`);
1198
1263
  }
1199
1264
  }
1200
1265
 
@@ -1231,21 +1296,50 @@ import './styles/zoomora.scss';
1231
1296
  */
1232
1297
  enterFullscreen() {
1233
1298
  const element = this.zoomora;
1234
- const requestFullscreen = element.requestFullscreen ||
1235
- element.webkitRequestFullscreen ||
1236
- element.mozRequestFullScreen ||
1237
- element.msRequestFullscreen;
1238
1299
 
1239
- if (requestFullscreen) {
1240
- requestFullscreen.call(element).then(() => {
1300
+ try {
1301
+ // Try standard API first
1302
+ if (element.requestFullscreen) {
1303
+ element.requestFullscreen()
1304
+ .then(() => {
1305
+ this.isFullscreen = true;
1306
+ this.zoomora.classList.add('fullscreen');
1307
+ this.updateButtons();
1308
+ })
1309
+ .catch(err => {
1310
+ console.warn('Zoomora: Fullscreen request failed:', err.message);
1311
+ this.fallbackFullscreen();
1312
+ });
1313
+ }
1314
+ // Try webkit (Safari, older Chrome)
1315
+ else if (element.webkitRequestFullscreen) {
1316
+ element.webkitRequestFullscreen();
1317
+ // Webkit doesn't return a promise, so set state immediately
1318
+ this.isFullscreen = true;
1319
+ this.zoomora.classList.add('fullscreen');
1320
+ this.updateButtons();
1321
+ }
1322
+ // Try moz (Firefox)
1323
+ else if (element.mozRequestFullScreen) {
1324
+ element.mozRequestFullScreen();
1241
1325
  this.isFullscreen = true;
1242
1326
  this.zoomora.classList.add('fullscreen');
1243
1327
  this.updateButtons();
1244
- }).catch(err => {
1245
- console.warn('Zoomora: Could not enter fullscreen:', err);
1328
+ }
1329
+ // Try ms (IE11)
1330
+ else if (element.msRequestFullscreen) {
1331
+ element.msRequestFullscreen();
1332
+ this.isFullscreen = true;
1333
+ this.zoomora.classList.add('fullscreen');
1334
+ this.updateButtons();
1335
+ }
1336
+ // Fallback to CSS fullscreen
1337
+ else {
1338
+ console.warn('Zoomora: Fullscreen API not supported, using CSS fallback');
1246
1339
  this.fallbackFullscreen();
1247
- });
1248
- } else {
1340
+ }
1341
+ } catch (error) {
1342
+ console.error('Zoomora: Error entering fullscreen:', error);
1249
1343
  this.fallbackFullscreen();
1250
1344
  }
1251
1345
  }
@@ -1254,30 +1348,61 @@ import './styles/zoomora.scss';
1254
1348
  * Exit fullscreen mode
1255
1349
  */
1256
1350
  exitFullscreen() {
1257
- const isInFullscreen = document.fullscreenElement ||
1351
+ // First check if we're actually in fullscreen
1352
+ const isInFullscreen = !!(
1353
+ document.fullscreenElement ||
1258
1354
  document.webkitFullscreenElement ||
1259
1355
  document.mozFullScreenElement ||
1260
- document.msFullscreenElement;
1261
-
1262
- if (isInFullscreen) {
1263
- const exitFullscreen = document.exitFullscreen ||
1264
- document.webkitExitFullscreen ||
1265
- document.mozCancelFullScreen ||
1266
- document.msExitFullscreen;
1267
-
1268
- if (exitFullscreen) {
1269
- exitFullscreen.call(document).then(() => {
1270
- this.isFullscreen = false;
1271
- this.zoomora.classList.remove('fullscreen');
1272
- this.updateButtons();
1273
- }).catch(err => {
1274
- console.warn('Zoomora: Could not exit fullscreen:', err);
1275
- this.fallbackExitFullscreen();
1276
- });
1277
- } else {
1356
+ document.msFullscreenElement
1357
+ );
1358
+
1359
+ if (!isInFullscreen) {
1360
+ // Not in real fullscreen, just exit CSS fullscreen
1361
+ this.fallbackExitFullscreen();
1362
+ return;
1363
+ }
1364
+
1365
+ try {
1366
+ // Try standard API first
1367
+ if (document.exitFullscreen) {
1368
+ document.exitFullscreen()
1369
+ .then(() => {
1370
+ this.isFullscreen = false;
1371
+ this.zoomora.classList.remove('fullscreen');
1372
+ this.updateButtons();
1373
+ })
1374
+ .catch(err => {
1375
+ console.warn('Zoomora: Exit fullscreen failed:', err.message);
1376
+ this.fallbackExitFullscreen();
1377
+ });
1378
+ }
1379
+ // Try webkit
1380
+ else if (document.webkitExitFullscreen) {
1381
+ document.webkitExitFullscreen();
1382
+ this.isFullscreen = false;
1383
+ this.zoomora.classList.remove('fullscreen');
1384
+ this.updateButtons();
1385
+ }
1386
+ // Try moz
1387
+ else if (document.mozCancelFullScreen) {
1388
+ document.mozCancelFullScreen();
1389
+ this.isFullscreen = false;
1390
+ this.zoomora.classList.remove('fullscreen');
1391
+ this.updateButtons();
1392
+ }
1393
+ // Try ms
1394
+ else if (document.msExitFullscreen) {
1395
+ document.msExitFullscreen();
1396
+ this.isFullscreen = false;
1397
+ this.zoomora.classList.remove('fullscreen');
1398
+ this.updateButtons();
1399
+ }
1400
+ // Fallback
1401
+ else {
1278
1402
  this.fallbackExitFullscreen();
1279
1403
  }
1280
- } else {
1404
+ } catch (error) {
1405
+ console.error('Zoomora: Error exiting fullscreen:', error);
1281
1406
  this.fallbackExitFullscreen();
1282
1407
  }
1283
1408
  }
Binary file
@@ -1,19 +0,0 @@
1
- <?xml version="1.0" standalone="no"?>
2
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
- <svg xmlns="http://www.w3.org/2000/svg">
4
- <metadata>Generated by IcoMoon</metadata>
5
- <defs>
6
- <font id="Zoomora" horiz-adv-x="1024">
7
- <font-face units-per-em="1024" ascent="960" descent="-64" />
8
- <missing-glyph horiz-adv-x="1024" />
9
- <glyph unicode="&#x20;" horiz-adv-x="512" d="" />
10
- <glyph unicode="&#xe900;" glyph-name="thumbnails" d="M816 960h-608c-114.7 0-208-93.3-208-208v-608c0-114.7 93.3-208 208-208h608c114.7 0 208 93.3 208 208v608c0 114.7-93.3 208-208 208zM928 144c0-61.76-50.24-112-112-112h-608c-61.76 0-112 50.24-112 112v608c0 61.76 50.24 112 112 112h608c61.76 0 112-50.24 112-112v-608zM600.78 167.84c0-26.5-21.5-48-48-48h-81.54c-26.5 0-48 21.5-48 48s21.5 48 48 48h81.54c26.5 0 48-21.5 48-48zM752.94 172.56c0.16-1.56 0.24-3.16 0.24-4.72s-0.080-3.16-0.24-4.72c-0.16-1.56-0.38-3.12-0.7-4.66-0.3-1.52-0.7-3.060-1.14-4.56-0.46-1.48-1-2.98-1.6-4.42s-1.26-2.88-2-4.24c-0.74-1.38-1.54-2.74-2.42-4.040-0.86-1.32-1.8-2.58-2.8-3.8-0.98-1.22-2.060-2.4-3.16-3.5s-2.28-2.18-3.5-3.18c-1.22-0.98-2.5-1.92-3.8-2.78s-2.66-1.68-4.040-2.42c-1.36-0.72-2.8-1.4-4.24-2s-2.94-1.14-4.42-1.58c-1.5-0.46-3.040-0.84-4.56-1.16-1.54-0.3-3.1-0.54-4.66-0.7s-3.16-0.24-4.72-0.24-3.16 0.080-4.72 0.24-3.12 0.4-4.66 0.7c-1.52 0.32-3.060 0.7-4.56 1.16-1.48 0.44-2.98 0.98-4.42 1.58s-2.88 1.28-4.24 2c-1.38 0.74-2.74 1.56-4.040 2.42-1.32 0.86-2.58 1.8-3.8 2.78-1.22 1-2.4 2.080-3.5 3.18s-2.18 2.28-3.18 3.5c-0.98 1.22-1.92 2.48-2.78 3.8-0.88 1.3-1.68 2.66-2.42 4.040-0.72 1.36-1.4 2.8-2 4.24s-1.14 2.94-1.58 4.42c-0.46 1.5-0.84 3.040-1.16 4.56-0.3 1.54-0.54 3.1-0.7 4.66s-0.24 3.16-0.24 4.72 0.080 3.16 0.24 4.72 0.4 3.12 0.7 4.66c0.32 1.52 0.7 3.060 1.16 4.56 0.44 1.5 0.98 2.98 1.58 4.42s1.28 2.88 2 4.24c0.74 1.38 1.54 2.74 2.42 4.040 0.86 1.32 1.8 2.58 2.78 3.8 1 1.22 2.080 2.4 3.18 3.5s2.28 2.18 3.5 3.18c1.22 0.98 2.48 1.92 3.8 2.8 1.3 0.86 2.66 1.66 4.040 2.4 1.36 0.74 2.8 1.4 4.24 2s2.94 1.14 4.42 1.6c1.5 0.44 3.040 0.84 4.56 1.14 1.54 0.32 3.1 0.54 4.66 0.7 3.14 0.32 6.32 0.32 9.44 0 1.56-0.16 3.12-0.38 4.66-0.7 1.52-0.3 3.060-0.7 4.56-1.14 1.48-0.46 2.98-1 4.42-1.6s2.88-1.26 4.24-2c1.38-0.74 2.74-1.54 4.040-2.4 1.3-0.88 2.58-1.82 3.8-2.8 1.22-1 2.4-2.080 3.5-3.18s2.18-2.28 3.16-3.5c1-1.22 1.94-2.48 2.8-3.8 0.88-1.3 1.68-2.66 2.42-4.040 0.74-1.36 1.4-2.8 2-4.24s1.14-2.92 1.6-4.42c0.44-1.5 0.84-3.040 1.14-4.56 0.32-1.54 0.54-3.1 0.7-4.66zM366.58 172.56c0.16-1.56 0.24-3.16 0.24-4.72s-0.080-3.16-0.24-4.72c-0.14-1.56-0.38-3.12-0.7-4.66-0.3-1.52-0.7-3.060-1.14-4.56-0.46-1.48-1-2.98-1.6-4.42s-1.26-2.86-2-4.24c-0.74-1.38-1.54-2.74-2.4-4.040-0.88-1.32-1.82-2.58-2.8-3.8-1-1.22-2.060-2.4-3.18-3.5-1.1-1.1-2.28-2.18-3.5-3.18-1.2-0.98-2.48-1.92-3.8-2.78-1.28-0.88-2.64-1.68-4.020-2.42-1.38-0.72-2.82-1.4-4.26-2s-2.92-1.14-4.42-1.58c-1.5-0.46-3.020-0.86-4.56-1.16s-3.1-0.54-4.66-0.7-3.14-0.24-4.72-0.24-3.14 0.080-4.72 0.24c-1.54 0.16-3.12 0.4-4.66 0.7-1.52 0.3-3.060 0.7-4.54 1.16-1.5 0.44-2.98 0.98-4.44 1.58-1.44 0.6-2.86 1.28-4.24 2-1.38 0.74-2.74 1.54-4.040 2.42-1.3 0.86-2.58 1.8-3.78 2.78-1.22 1-2.4 2.080-3.52 3.18-1.1 1.1-2.16 2.28-3.16 3.5s-1.94 2.48-2.8 3.8c-0.86 1.3-1.68 2.66-2.4 4.040-0.74 1.38-1.42 2.8-2.020 4.24s-1.12 2.94-1.58 4.42c-0.46 1.5-0.84 3.040-1.16 4.56-0.3 1.54-0.54 3.1-0.7 4.66s-0.24 3.16-0.24 4.72 0.080 3.16 0.24 4.72 0.4 3.12 0.7 4.66c0.32 1.52 0.7 3.060 1.16 4.56 0.46 1.48 0.98 2.98 1.58 4.42s1.28 2.88 2.020 4.24c0.72 1.38 1.54 2.74 2.4 4.040 0.86 1.32 1.8 2.58 2.8 3.8s2.060 2.4 3.16 3.5c1.12 1.12 2.3 2.18 3.52 3.18 1.2 0.98 2.48 1.92 3.78 2.8 1.3 0.86 2.66 1.66 4.040 2.4s2.8 1.4 4.24 2c1.46 0.6 2.94 1.14 4.44 1.58 1.48 0.46 3.020 0.86 4.54 1.16 1.54 0.3 3.12 0.54 4.66 0.7 3.14 0.32 6.32 0.32 9.44 0 1.56-0.16 3.12-0.4 4.66-0.7s3.060-0.7 4.56-1.16c1.5-0.44 2.98-0.98 4.42-1.58s2.88-1.26 4.26-2c1.38-0.74 2.74-1.54 4.020-2.4 1.32-0.88 2.6-1.82 3.8-2.8 1.22-1 2.4-2.060 3.5-3.18 1.12-1.1 2.18-2.28 3.18-3.5 0.98-1.22 1.92-2.48 2.8-3.8 0.86-1.3 1.66-2.66 2.4-4.040 0.74-1.36 1.4-2.8 2-4.24s1.14-2.94 1.6-4.42c0.44-1.5 0.84-3.040 1.14-4.56 0.32-1.54 0.56-3.1 0.7-4.66z" />
11
- <glyph unicode="&#xe901;" glyph-name="arrow-left" d="M1024 448c0-26.5-21.5-48-48-48h-928c-1.5 0-2.98 0.080-4.44 0.22-0.080 0-0.16 0-0.24 0-1.46 0.14-2.9 0.36-4.32 0.62-0.1 0-0.18 0.040-0.28 0.040-1.42 0.28-2.82 0.62-4.18 1.020-0.12 0.040-0.22 0.060-0.34 0.1-1.36 0.4-2.68 0.88-3.98 1.4-0.16 0.060-0.3 0.12-0.46 0.18-1.28 0.52-2.52 1.1-3.74 1.74-0.18 0.1-0.36 0.18-0.54 0.28-1.22 0.64-2.4 1.36-3.56 2.1-0.16 0.1-0.34 0.22-0.5 0.32-1.2 0.8-2.36 1.66-3.48 2.56-0.1 0.080-0.22 0.16-0.32 0.24-1.24 1-2.42 2.080-3.54 3.2 0 0 0 0 0 0s0 0 0 0c-1.12 1.12-2.2 2.3-3.2 3.54-0.080 0.1-0.16 0.22-0.24 0.32-0.9 1.12-1.76 2.28-2.56 3.48-0.12 0.16-0.22 0.34-0.32 0.5-0.74 1.16-1.46 2.34-2.1 3.56-0.1 0.18-0.18 0.36-0.28 0.54-0.64 1.22-1.22 2.48-1.74 3.76-0.060 0.14-0.12 0.3-0.18 0.44-0.52 1.3-1 2.64-1.4 4-0.040 0.1-0.060 0.22-0.1 0.32-0.4 1.38-0.74 2.78-1.020 4.2 0 0.080-0.020 0.16-0.040 0.26-0.28 1.42-0.48 2.86-0.62 4.34 0 0.080 0 0.14 0 0.22-0.14 1.46-0.22 2.94-0.22 4.44s0.080 2.98 0.22 4.44c0 0.080 0 0.14 0 0.22 0.14 1.46 0.36 2.92 0.62 4.34 0 0.080 0.020 0.16 0.040 0.26 0.28 1.42 0.62 2.82 1.020 4.2 0.040 0.1 0.060 0.22 0.1 0.32 0.4 1.36 0.88 2.7 1.4 4 0.060 0.14 0.12 0.3 0.18 0.44 0.52 1.28 1.12 2.54 1.74 3.76 0.1 0.18 0.18 0.36 0.28 0.54 0.64 1.22 1.36 2.4 2.1 3.56 0.1 0.16 0.22 0.34 0.32 0.5 0.8 1.2 1.66 2.36 2.56 3.48 0.080 0.1 0.16 0.22 0.24 0.32 1 1.24 2.080 2.42 3.2 3.54 0 0 0 0 0 0l354.76 354.86c18.74 18.74 49.14 18.74 67.88 0s18.74-49.14 0-67.88l-272.84-272.84h812.12c26.5 0 48-21.5 48-48zM246.58 317.3c-18.74 18.74-49.14 18.74-67.88 0s-18.74-49.14 0-67.88l190.14-190.14c9.38-9.38 21.66-14.060 33.94-14.060s24.56 4.68 33.94 14.060c18.74 18.74 18.74 49.14 0 67.88l-190.14 190.14z" />
12
- <glyph unicode="&#xe902;" glyph-name="arrow-right" d="M1009.96 414.060s0 0 0 0l-354.78-354.78c-9.38-9.38-21.66-14.060-33.94-14.060s-24.56 4.68-33.94 14.060c-18.74 18.74-18.74 49.14 0 67.88l272.84 272.84h-812.14c-26.5 0-48 21.48-48 48s21.5 48 48 48h928c1.5 0 2.98-0.080 4.44-0.22 0.080 0 0.14 0 0.22 0 1.46-0.14 2.92-0.36 4.34-0.62 0.080 0 0.16-0.020 0.26-0.040 1.42-0.28 2.84-0.62 4.22-1.020 0.1-0.040 0.22-0.060 0.32-0.1 1.36-0.4 2.7-0.88 4-1.4 0.14-0.060 0.3-0.12 0.44-0.18 1.28-0.52 2.54-1.12 3.76-1.74 0.18-0.1 0.36-0.18 0.54-0.28 1.22-0.66 2.4-1.36 3.56-2.1 0.16-0.1 0.34-0.2 0.5-0.32 1.2-0.8 2.36-1.66 3.5-2.56 0.1-0.080 0.22-0.16 0.32-0.24 1.24-1 2.42-2.080 3.54-3.2 0 0 0 0 0 0s0 0 0 0c1.12-1.12 2.2-2.3 3.2-3.54 0.080-0.1 0.16-0.22 0.26-0.32 0.9-1.12 1.76-2.28 2.56-3.48 0.12-0.18 0.22-0.34 0.32-0.52 0.74-1.14 1.44-2.34 2.1-3.54 0.1-0.18 0.18-0.36 0.28-0.56 0.62-1.22 1.2-2.46 1.74-3.74 0.060-0.16 0.12-0.32 0.18-0.46 0.52-1.3 0.98-2.62 1.4-3.98 0.040-0.12 0.060-0.24 0.1-0.34 0.4-1.38 0.74-2.76 1.020-4.18 0-0.1 0.040-0.2 0.060-0.28 0.26-1.42 0.48-2.84 0.62-4.3 0-0.080 0-0.16 0-0.26 0.14-1.46 0.22-2.92 0.22-4.42v0c0-1.52-0.080-2.98-0.22-4.44 0-0.080 0-0.16 0-0.26-0.14-1.46-0.36-2.88-0.62-4.3 0-0.1-0.040-0.2-0.060-0.28-0.28-1.42-0.62-2.82-1.020-4.18-0.040-0.12-0.060-0.24-0.1-0.34-0.4-1.36-0.88-2.68-1.4-3.98-0.060-0.16-0.12-0.32-0.18-0.46-0.52-1.28-1.1-2.52-1.74-3.74-0.1-0.18-0.18-0.36-0.28-0.56-0.64-1.22-1.34-2.4-2.1-3.54-0.12-0.18-0.22-0.34-0.32-0.52-0.8-1.2-1.66-2.36-2.56-3.48-0.080-0.1-0.16-0.22-0.26-0.32-1-1.24-2.080-2.42-3.2-3.54zM777.42 578.7c9.38-9.38 21.66-14.060 33.94-14.060s24.56 4.68 33.94 14.060c18.74 18.74 18.74 49.14 0 67.88l-190.14 190.14c-18.74 18.74-49.14 18.74-67.88 0s-18.74-49.14 0-67.88l190.14-190.14z" />
13
- <glyph unicode="&#xe903;" glyph-name="controls-on" d="M1024 565.18c0 181.6-147.74 329.36-329.36 329.36h-365.28c-181.62 0-329.36-147.76-329.36-329.36s147.74-329.36 329.36-329.36h11l-19.56-33.52c-24.4-41.8-24.58-91.82-0.48-133.8s67.38-67.040 115.8-67.040h151.8c48.4 0 91.7 25.060 115.8 67.040s23.92 92-0.48 133.8l-19.56 33.52h11c181.6 0 329.36 147.74 329.36 329.36zM96 565.18c0 128.68 104.68 233.36 233.36 233.36h365.28c128.68 0 233.36-104.68 233.36-233.36s-104.68-233.36-233.36-233.36h-93.7c-0.28 0-0.56 0-0.84 0h-176.42c-0.2 0-0.4 0-0.6 0h-93.74c-128.68 0-233.36 104.68-233.36 233.36zM620.3 153.9c9.88-16.94 3.38-31.94 0.14-37.6-3.26-5.66-12.94-18.84-32.54-18.84h-151.8c-19.6 0-29.28 13.18-32.54 18.84s-9.74 20.66 0.14 37.6l47.82 81.92h120.96l47.82-81.92zM600.88 565.18c0 26.5 21.5 48 48 48h147.1c26.5 0 48-21.5 48-48s-21.5-48-48-48h-147.1c-26.5 0-48 21.5-48 48zM512.54 565.18c0 99.42-80.58 180-180 180s-180-80.58-180-180 80.58-180 180-180 180 80.58 180 180zM248.54 565.18c0 46.32 37.68 84 84 84s84-37.68 84-84-37.68-84-84-84-84 37.68-84 84z" />
14
- <glyph unicode="&#xe904;" glyph-name="zoom" d="M739 833.2c-81.74 81.76-190.44 126.8-306.040 126.8s-224.3-45.040-306.040-126.8c-81.74-81.78-126.76-190.5-126.76-306.14s45.020-224.36 126.76-306.12c81.74-81.78 190.44-126.8 306.040-126.8s224.3 45.040 306.040 126.8c81.74 81.76 126.76 190.48 126.76 306.12s-45.020 224.36-126.76 306.12zM432.96 190.14c-185.72 0-336.8 151.14-336.8 336.94s151.080 336.92 336.8 336.92 336.8-151.14 336.8-336.94-151.080-336.94-336.8-336.94zM1010.8 16.88c-0.34 0.36-35.060 37.26-70.2 73.5-20.82 21.46-37.8 38.58-50.44 50.86-24.96 24.24-41.44 40.24-68.82 34.58-25.96-5.38-42.64-30.78-37.28-56.74 2.96-14.32 13.92-22.36 23.92-32.36 16.86-14.4 80.44-79.86 132.9-135.62 9.44-10.040 22.2-15.12 34.98-15.12 11.78 0 23.6 4.32 32.88 13.040 19.32 18.16 20.24 48.54 2.080 67.84zM635.12 527.060c0-26.5-21.5-48-48-48h-106.16v-106.22c0-26.5-21.5-48-48-48s-48 21.5-48 48v106.22h-106.16c-26.5 0-48 21.5-48 48s21.5 48 48 48h106.16v106.22c0 26.5 21.5 48 48 48s48-21.5 48-48v-106.22h106.16c26.5 0 48-21.5 48-48z" />
15
- <glyph unicode="&#xe905;" glyph-name="controls-off" d="M1024 565.18c0 181.6-147.74 329.36-329.36 329.36h-365.3c-181.6 0-329.34-147.76-329.34-329.36s147.74-329.36 329.36-329.36h11l-19.56-33.52c-24.4-41.8-24.58-91.82-0.5-133.8 24.1-41.98 67.38-67.040 115.8-67.040h151.8c48.4 0 91.7 25.060 115.8 67.040s23.92 92-0.48 133.8l-19.56 33.52h11c181.6 0 329.36 147.74 329.36 329.36zM96 565.18c0 128.68 104.68 233.36 233.36 233.36h365.3c128.68 0 233.36-104.68 233.36-233.36s-104.68-233.36-233.36-233.36h-93.76c-0.16 0-0.3 0-0.46 0h-176.96c-0.12 0-0.24 0-0.36 0h-93.76c-128.68 0-233.36 104.68-233.36 233.36zM620.3 153.9c9.88-16.92 3.38-31.94 0.14-37.6s-12.94-18.84-32.54-18.84h-151.8c-19.6 0-29.28 13.18-32.54 18.84s-9.74 20.66 0.14 37.6l47.82 81.92h120.96l47.82-81.92zM511.46 565.18c0 99.42 80.58 180 180 180s180-80.58 180-180-80.58-180-180-180-180 80.58-180 180z" />
16
- <glyph unicode="&#xe906;" glyph-name="expand" d="M381.84-16c0-26.5-21.5-48-48-48h-125.84c-114.7 0-208 93.3-208 208v125.84c0 26.5 21.5 48 48 48s48-21.5 48-48v-125.84c0-61.76 50.24-112 112-112h125.84c26.5 0 48-21.5 48-48zM976 317.84c-26.5 0-48-21.5-48-48v-125.84c0-61.76-50.24-112-112-112h-125.84c-26.5 0-48-21.5-48-48s21.5-48 48-48h125.84c114.7 0 208 93.3 208 208v125.84c0 26.5-21.5 48-48 48zM333.84 960h-125.84c-114.7 0-208-93.3-208-208v-125.84c0-26.5 21.5-48 48-48s48 21.5 48 48v125.84c0 61.76 50.24 112 112 112h125.84c26.5 0 48 21.5 48 48s-21.5 48-48 48zM816 960h-125.84c-26.5 0-48-21.5-48-48s21.5-48 48-48h125.84c61.76 0 112-50.24 112-112v-125.84c0-26.5 21.5-48 48-48s48 21.5 48 48v125.84c0 114.7-93.3 208-208 208z" />
17
- <glyph unicode="&#xe907;" glyph-name="collapse" d="M381.84 109.84v-125.84c0-26.5-21.5-48-48-48s-48 21.5-48 48v125.84c0 61.76-50.24 112-112 112h-125.84c-26.5 0-48 21.5-48 48s21.5 48 48 48h125.84c114.7 0 208-93.3 208-208zM976 317.84h-125.84c-114.7 0-208-93.3-208-208v-125.84c0-26.5 21.5-48 48-48s48 21.5 48 48v125.84c0 61.76 50.24 112 112 112h125.84c26.5 0 48 21.5 48 48s-21.5 48-48 48zM333.84 960c-26.5 0-48-21.5-48-48v-125.84c0-61.76-50.24-112-112-112h-125.84c-26.5 0-48-21.5-48-48s21.5-48 48-48h125.84c114.7 0 208 93.3 208 208v125.84c0 26.5-21.5 48-48 48zM850.16 578.16h125.84c26.5 0 48 21.5 48 48s-21.5 48-48 48h-125.84c-61.76 0-112 50.24-112 112v125.84c0 26.5-21.5 48-48 48s-48-21.5-48-48v-125.84c0-114.7 93.3-208 208-208z" />
18
- <glyph unicode="&#xe908;" glyph-name="close" d="M925.16 102.72c18.74-18.74 18.74-49.14 0-67.88-9.38-9.38-21.66-14.060-33.94-14.060s-24.56 4.68-33.94 14.060l-345.28 345.28-345.28-345.28c-9.38-9.38-21.66-14.060-33.94-14.060s-24.56 4.68-33.94 14.060c-18.74 18.74-18.74 49.14 0 67.88l345.28 345.28-345.28 345.28c-18.74 18.74-18.74 49.14 0 67.88s49.14 18.74 67.88 0l379.22-379.22s0 0 0 0 0 0 0 0l379.22-379.22zM632.78 520.78c12.28 0 24.56 4.68 33.94 14.060l258.44 258.44c18.74 18.74 18.74 49.14 0 67.88s-49.14 18.74-67.88 0l-258.44-258.44c-18.74-18.74-18.74-49.14 0-67.88 9.38-9.38 21.66-14.060 33.94-14.060z" />
19
- </font></defs></svg>