senangwebs-tour 1.0.3 → 1.0.5

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.
@@ -136,6 +136,27 @@
136
136
  URL.revokeObjectURL(url);
137
137
  }
138
138
 
139
+ /**
140
+ * Copy text to clipboard
141
+ */
142
+ async function copyToClipboard(text) {
143
+ try {
144
+ await navigator.clipboard.writeText(text);
145
+ return true;
146
+ } catch (err) {
147
+ // Fallback for older browsers
148
+ const textarea = document.createElement('textarea');
149
+ textarea.value = text;
150
+ textarea.style.position = 'fixed';
151
+ textarea.style.opacity = '0';
152
+ document.body.appendChild(textarea);
153
+ textarea.select();
154
+ const success = document.execCommand('copy');
155
+ document.body.removeChild(textarea);
156
+ return success;
157
+ }
158
+ }
159
+
139
160
  /**
140
161
  * Debounce function
141
162
  */
@@ -183,6 +204,7 @@
183
204
 
184
205
  var utils = /*#__PURE__*/Object.freeze({
185
206
  __proto__: null,
207
+ copyToClipboard: copyToClipboard,
186
208
  debounce: debounce,
187
209
  deepClone: deepClone$1,
188
210
  downloadTextAsFile: downloadTextAsFile,
@@ -591,66 +613,15 @@
591
613
  constructor(editor) {
592
614
  this.editor = editor;
593
615
  this.currentHotspotIndex = -1;
594
- this.placementMode = false;
595
616
  }
596
617
 
597
- /**
598
- * Enable hotspot placement mode
599
- */
600
- enablePlacementMode() {
601
- const scene = this.editor.sceneManager.getCurrentScene();
602
- if (!scene) {
603
- showToast$1('Please select a scene first', 'error');
604
- return false;
605
- }
606
-
607
- this.placementMode = true;
608
-
609
- // Visual feedback
610
- document.body.style.cursor = 'crosshair';
611
- const preview = document.getElementById('preview');
612
- if (preview) {
613
- preview.style.border = '3px solid #4CC3D9';
614
- preview.style.boxShadow = '0 0 20px rgba(76, 195, 217, 0.5)';
615
- }
616
-
617
- // Update button state
618
- const btn = document.getElementById('addHotspotBtn');
619
- if (btn) {
620
- btn.textContent = 'Click on Preview...';
621
- btn.classList.add('btn-active');
622
- }
623
-
624
- showToast$1('Click on the 360° preview to place hotspot', 'info', 5000);
625
- return true;
626
- }
627
-
628
- /**
629
- * Disable hotspot placement mode
630
- */
631
- disablePlacementMode() {
632
- this.placementMode = false;
633
- document.body.style.cursor = 'default';
634
-
635
- // Remove visual feedback
636
- const preview = document.getElementById('preview');
637
- if (preview) {
638
- preview.style.border = '';
639
- preview.style.boxShadow = '';
640
- }
641
-
642
- // Reset button state
643
- const btn = document.getElementById('addHotspotBtn');
644
- if (btn) {
645
- btn.textContent = '+ Add Hotspot';
646
- btn.classList.remove('btn-active');
647
- }
648
- }
649
-
650
618
  /**
651
619
  * Add hotspot at position
620
+ * @param {Object} position - The 3D position {x, y, z}
621
+ * @param {string} targetSceneId - Target scene ID for navigation
622
+ * @param {Object} cameraOrientation - Camera orientation at creation {pitch, yaw} in radians
652
623
  */
653
- addHotspot(position, targetSceneId = '') {
624
+ addHotspot(position, targetSceneId = '', cameraOrientation = null) {
654
625
  const scene = this.editor.sceneManager.getCurrentScene();
655
626
  if (!scene) {
656
627
  showToast$1('No scene selected', 'error');
@@ -661,17 +632,18 @@
661
632
  id: generateId('hotspot'),
662
633
  type: 'navigation',
663
634
  position: position,
635
+ cameraOrientation: cameraOrientation, // Store camera pitch/yaw for reliable pointing
664
636
  targetSceneId: targetSceneId,
665
637
  title: 'New Hotspot',
666
638
  description: '',
667
639
  color: '#00ff00',
668
- icon: ''
640
+ icon: '',
641
+ scale: '1 1 1'
669
642
  };
670
643
 
671
644
  scene.hotspots.push(hotspot);
672
645
  this.currentHotspotIndex = scene.hotspots.length - 1;
673
646
 
674
- this.disablePlacementMode();
675
647
  showToast$1('Hotspot added', 'success');
676
648
 
677
649
  return hotspot;
@@ -787,6 +759,9 @@
787
759
  y: original.position.y,
788
760
  z: original.position.z
789
761
  };
762
+
763
+ // Clear camera orientation since position changed - will fallback to position-based calculation
764
+ duplicate.cameraOrientation = null;
790
765
 
791
766
  scene.hotspots.push(duplicate);
792
767
  this.currentHotspotIndex = scene.hotspots.length - 1;
@@ -993,6 +968,7 @@
993
968
  name: s.name,
994
969
  panorama: s.imageUrl,
995
970
  hotspots: sceneHotspots,
971
+ startingPosition: s.startingPosition || null,
996
972
  };
997
973
  });
998
974
 
@@ -1000,10 +976,6 @@
1000
976
  title: scene.name,
1001
977
  initialScene: scene.id,
1002
978
  scenes: allScenes,
1003
- settings: {
1004
- autoRotate: false,
1005
- showCompass: false,
1006
- },
1007
979
  };
1008
980
 
1009
981
  try {
@@ -1040,15 +1012,18 @@
1040
1012
  // Hide loading animation after scene loads
1041
1013
  this.hideLoading();
1042
1014
 
1043
- // Restore camera rotation if preserved
1015
+ // Handle camera rotation after scene loads
1044
1016
  if (savedRotation && preserveCameraRotation) {
1017
+ // Restore previous camera rotation
1045
1018
  this.setCameraRotation(savedRotation);
1019
+ } else if (scene.startingPosition) {
1020
+ // Set camera to scene's starting position immediately
1021
+ this.setCameraRotation({
1022
+ x: scene.startingPosition.pitch,
1023
+ y: scene.startingPosition.yaw,
1024
+ z: 0
1025
+ });
1046
1026
  }
1047
-
1048
- // Setup click handler after a short delay to ensure A-Frame is ready
1049
- setTimeout(() => {
1050
- this.setupClickHandler();
1051
- }, 500);
1052
1027
  } catch (error) {
1053
1028
  console.error("Failed to load preview:", error);
1054
1029
  showToast$1("Failed to load preview: " + error.message, "error");
@@ -1058,76 +1033,73 @@
1058
1033
  }
1059
1034
 
1060
1035
  /**
1061
- * Setup click handler for hotspot placement
1036
+ * Get the current cursor intersection point with the sky sphere.
1037
+ * Raycasts from the camera center (where the A-Cursor points) to find the intersection.
1038
+ * @returns {Object|null} The 3D position {x, y, z} or null if no intersection
1062
1039
  */
1063
- setupClickHandler() {
1064
- if (!this.tour) {
1065
- return;
1066
- }
1067
-
1068
- const aframeScene = this.previewContainer.querySelector("a-scene");
1040
+ getCursorIntersection() {
1041
+ const aframeScene = this.previewContainer?.querySelector("a-scene");
1069
1042
  if (!aframeScene) {
1070
- setTimeout(() => this.setupClickHandler(), 200); // Retry
1071
- return;
1072
- }
1073
-
1074
- // Remove any existing click handler to avoid duplicates
1075
- if (this.clickHandler) {
1076
- aframeScene.removeEventListener("click", this.clickHandler);
1043
+ return null;
1077
1044
  }
1078
1045
 
1079
- // Create and store the click handler
1080
- this.clickHandler = (evt) => {
1081
- if (!this.editor.hotspotEditor.placementMode) {
1082
- return;
1083
- }
1084
-
1085
- // Try to get intersection from event detail first
1086
- let intersection = evt.detail?.intersection;
1087
-
1088
- // If no intersection, perform manual raycasting
1089
- if (!intersection) {
1090
- const camera = aframeScene.querySelector("[camera]");
1091
- const sky = aframeScene.querySelector("a-sky");
1092
-
1093
- if (!camera || !sky) {
1094
- showToast$1("Scene not ready, please try again", "warning");
1095
- return;
1096
- }
1097
-
1098
- // Get mouse position relative to canvas
1099
- const canvas = aframeScene.canvas;
1100
- const rect = canvas.getBoundingClientRect();
1101
- const mouse = {
1102
- x: ((evt.clientX - rect.left) / rect.width) * 2 - 1,
1103
- y: -((evt.clientY - rect.top) / rect.height) * 2 + 1,
1104
- };
1046
+ const camera = aframeScene.querySelector("[camera]");
1047
+ const sky = aframeScene.querySelector("a-sky");
1105
1048
 
1106
- // Perform raycasting
1107
- const raycaster = new THREE.Raycaster();
1108
- const cameraEl = camera.object3D;
1109
- raycaster.setFromCamera(mouse, cameraEl.children[0]); // Get the actual camera
1049
+ if (!camera || !sky) {
1050
+ return null;
1051
+ }
1110
1052
 
1111
- // Raycast against the sky sphere
1112
- const intersects = raycaster.intersectObject(sky.object3D, true);
1053
+ // Get pitch and yaw from look-controls (the authoritative source in A-Frame)
1054
+ const lookControls = camera.components?.["look-controls"];
1055
+ let pitch = 0;
1056
+ let yaw = 0;
1113
1057
 
1114
- if (intersects.length > 0) {
1115
- intersection = intersects[0];
1116
- } else {
1117
- showToast$1("Click on the panorama image", "warning");
1118
- return;
1119
- }
1120
- }
1058
+ if (lookControls && lookControls.pitchObject && lookControls.yawObject) {
1059
+ pitch = lookControls.pitchObject.rotation.x;
1060
+ yaw = lookControls.yawObject.rotation.y;
1061
+ } else {
1062
+ // Fallback to object3D rotation
1063
+ pitch = camera.object3D.rotation.x;
1064
+ yaw = camera.object3D.rotation.y;
1065
+ }
1121
1066
 
1122
- const point = intersection.point;
1123
- const position = {
1067
+ // Calculate direction vector from pitch/yaw
1068
+ // In A-Frame/Three.js coordinate system:
1069
+ // - Looking forward is -Z
1070
+ // - Yaw rotates around Y axis
1071
+ // - Pitch rotates around X axis
1072
+ const direction = new THREE.Vector3();
1073
+ direction.x = -Math.sin(yaw) * Math.cos(pitch);
1074
+ direction.y = Math.sin(pitch);
1075
+ direction.z = -Math.cos(yaw) * Math.cos(pitch);
1076
+ direction.normalize();
1077
+
1078
+ // Create raycaster from camera position in the direction we're looking
1079
+ const raycaster = new THREE.Raycaster();
1080
+ const origin = new THREE.Vector3(0, 0, 0); // Camera is typically at origin in 360 viewer
1081
+ raycaster.set(origin, direction);
1082
+
1083
+ // Raycast against the sky sphere
1084
+ const intersects = raycaster.intersectObject(sky.object3D, true);
1085
+
1086
+ if (intersects.length > 0) {
1087
+ const point = intersects[0].point;
1088
+
1089
+ // Calculate an upward offset to center the hotspot visual on the cursor
1090
+ // The offset is applied along the "up" direction relative to the sphere surface
1091
+ // For a sphere, we shift the point slightly in the Y direction (vertical up in world space)
1092
+ // The offset compensates for the hotspot visual being centered, so the top aligns with cursor
1093
+ const offsetAmount = 200; // Adjust this value to fine-tune alignment
1094
+
1095
+ return {
1124
1096
  x: parseFloat(point.x.toFixed(2)),
1125
- y: parseFloat(point.y.toFixed(2)),
1097
+ y: parseFloat((point.y + offsetAmount).toFixed(2)),
1126
1098
  z: parseFloat(point.z.toFixed(2)),
1127
1099
  };
1128
- this.editor.addHotspotAtPosition(position);
1129
- };
1130
- aframeScene.addEventListener("click", this.clickHandler);
1100
+ }
1101
+
1102
+ return null;
1131
1103
  }
1132
1104
 
1133
1105
  /**
@@ -1233,10 +1205,12 @@
1233
1205
  }
1234
1206
 
1235
1207
  /**
1236
- * Point camera to hotspot position
1208
+ * Point camera to hotspot
1209
+ * Uses stored camera orientation if available, otherwise calculates from position
1210
+ * @param {Object} hotspot - The hotspot object with position and optional cameraOrientation
1237
1211
  */
1238
- pointCameraToHotspot(hotspotPosition) {
1239
- if (!hotspotPosition) {
1212
+ pointCameraToHotspot(hotspot) {
1213
+ if (!hotspot) {
1240
1214
  return;
1241
1215
  }
1242
1216
 
@@ -1250,25 +1224,36 @@
1250
1224
  return;
1251
1225
  }
1252
1226
 
1253
- // Get camera position (usually at origin 0,0,0)
1254
- const cameraPos = camera.object3D.position;
1255
-
1256
- // Calculate direction vector from camera to hotspot
1257
- const direction = new THREE.Vector3(
1258
- hotspotPosition.x - cameraPos.x,
1259
- hotspotPosition.y - cameraPos.y,
1260
- hotspotPosition.z - cameraPos.z
1261
- );
1227
+ let pitch, yaw;
1228
+
1229
+ // Use stored camera orientation if available (more reliable)
1230
+ if (hotspot.cameraOrientation) {
1231
+ // Stored values are in radians, convert to degrees for animateCameraRotation
1232
+ pitch = hotspot.cameraOrientation.pitch * (180 / Math.PI);
1233
+ yaw = hotspot.cameraOrientation.yaw * (180 / Math.PI);
1234
+ } else if (hotspot.position) {
1235
+ // Fallback: calculate from position (for legacy hotspots without cameraOrientation)
1236
+ const hotspotPosition = hotspot.position;
1237
+ const cameraPos = camera.object3D.position;
1238
+
1239
+ // Calculate direction vector from camera to hotspot
1240
+ const direction = new THREE.Vector3(
1241
+ hotspotPosition.x - cameraPos.x,
1242
+ hotspotPosition.y - cameraPos.y,
1243
+ hotspotPosition.z - cameraPos.z
1244
+ );
1262
1245
 
1263
- // Calculate spherical coordinates (yaw and pitch)
1264
- const distance = direction.length();
1246
+ // Calculate spherical coordinates (yaw and pitch)
1247
+ const distance = direction.length();
1265
1248
 
1266
- // Pitch (up/down rotation around X-axis) - in degrees
1267
- const pitch = Math.asin(direction.y / distance) * (180 / Math.PI);
1249
+ // Pitch (up/down rotation around X-axis) - in degrees
1250
+ pitch = Math.asin(direction.y / distance) * (180 / Math.PI);
1268
1251
 
1269
- // Yaw (left/right rotation around Y-axis) - in degrees
1270
- // Using atan2 to get correct quadrant
1271
- const yaw = Math.atan2(direction.x, direction.z) * (180 / Math.PI);
1252
+ // Yaw (left/right rotation around Y-axis) - in degrees
1253
+ yaw = Math.atan2(direction.x, direction.z) * (180 / Math.PI);
1254
+ } else {
1255
+ return;
1256
+ }
1272
1257
 
1273
1258
  // Apply smooth rotation with animation
1274
1259
  this.animateCameraRotation(camera, { x: pitch, y: yaw, z: 0 });
@@ -1276,15 +1261,29 @@
1276
1261
 
1277
1262
  /**
1278
1263
  * Animate camera rotation smoothly
1264
+ * Uses look-controls internal pitchObject/yawObject to avoid being overwritten
1279
1265
  */
1280
1266
  animateCameraRotation(camera, targetRotation, duration = 800) {
1281
1267
  if (!camera || !camera.object3D) return;
1282
1268
 
1283
- const startRotation = {
1284
- x: camera.object3D.rotation.x * (180 / Math.PI),
1285
- y: camera.object3D.rotation.y * (180 / Math.PI),
1286
- z: camera.object3D.rotation.z * (180 / Math.PI),
1287
- };
1269
+ // Get look-controls component
1270
+ const lookControls = camera.components?.["look-controls"];
1271
+
1272
+ // Get current rotation - prefer look-controls internal state
1273
+ let startRotation;
1274
+ if (lookControls && lookControls.pitchObject && lookControls.yawObject) {
1275
+ startRotation = {
1276
+ x: lookControls.pitchObject.rotation.x * (180 / Math.PI),
1277
+ y: lookControls.yawObject.rotation.y * (180 / Math.PI),
1278
+ z: 0,
1279
+ };
1280
+ } else {
1281
+ startRotation = {
1282
+ x: camera.object3D.rotation.x * (180 / Math.PI),
1283
+ y: camera.object3D.rotation.y * (180 / Math.PI),
1284
+ z: 0,
1285
+ };
1286
+ }
1288
1287
 
1289
1288
  // Handle angle wrapping for smooth rotation
1290
1289
  let deltaY = targetRotation.y - startRotation.y;
@@ -1307,19 +1306,22 @@
1307
1306
  ? 2 * progress * progress
1308
1307
  : 1 - Math.pow(-2 * progress + 2, 2) / 2;
1309
1308
 
1310
- // Interpolate rotation
1311
- const currentRotation = {
1312
- x: startRotation.x + (targetRotation.x - startRotation.x) * eased,
1313
- y: startRotation.y + (endRotationY - startRotation.y) * eased,
1314
- z: startRotation.z + (targetRotation.z - startRotation.z) * eased,
1315
- };
1309
+ // Interpolate rotation (in degrees)
1310
+ const currentX = startRotation.x + (targetRotation.x - startRotation.x) * eased;
1311
+ const currentY = startRotation.y + (endRotationY - startRotation.y) * eased;
1316
1312
 
1317
- // Apply rotation (convert degrees to radians)
1318
- camera.object3D.rotation.set(
1319
- currentRotation.x * (Math.PI / 180),
1320
- currentRotation.y * (Math.PI / 180),
1321
- currentRotation.z * (Math.PI / 180)
1322
- );
1313
+ // Apply rotation using look-controls internal objects (in radians)
1314
+ if (lookControls && lookControls.pitchObject && lookControls.yawObject) {
1315
+ lookControls.pitchObject.rotation.x = currentX * (Math.PI / 180);
1316
+ lookControls.yawObject.rotation.y = currentY * (Math.PI / 180);
1317
+ } else {
1318
+ // Fallback to direct rotation
1319
+ camera.object3D.rotation.set(
1320
+ currentX * (Math.PI / 180),
1321
+ currentY * (Math.PI / 180),
1322
+ 0
1323
+ );
1324
+ }
1323
1325
 
1324
1326
  if (progress < 1) {
1325
1327
  requestAnimationFrame(animate);
@@ -1391,8 +1393,2564 @@
1391
1393
  }
1392
1394
  };
1393
1395
 
1396
+ var iconsData = [
1397
+ {
1398
+ name: "Bars 3",
1399
+ slug: "bars-3",
1400
+ src: "M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5",
1401
+ tags: [
1402
+ "menu",
1403
+ "hamburger",
1404
+ "navigation",
1405
+ "bars-3"
1406
+ ]
1407
+ },
1408
+ {
1409
+ name: "X Mark",
1410
+ slug: "x-mark",
1411
+ src: "M6 18L18 6M6 6l12 12",
1412
+ tags: [
1413
+ "close",
1414
+ "delete",
1415
+ "remove",
1416
+ "cancel",
1417
+ "x-mark"
1418
+ ]
1419
+ },
1420
+ {
1421
+ name: "Check",
1422
+ slug: "check",
1423
+ src: "M4.5 12.75l6 6 9-13.5",
1424
+ tags: [
1425
+ "tick",
1426
+ "success",
1427
+ "confirm",
1428
+ "done",
1429
+ "check"
1430
+ ]
1431
+ },
1432
+ {
1433
+ name: "Double Tick",
1434
+ slug: "double-tick",
1435
+ src: "M4.5 12.75l6 6 9-13.5m-12.5 3.75 3 3 4.6-6.8",
1436
+ tags: [
1437
+ "check",
1438
+ "done",
1439
+ "success",
1440
+ "double-tick"
1441
+ ]
1442
+ },
1443
+ {
1444
+ name: "Plus",
1445
+ slug: "plus",
1446
+ src: "M12 4.5v15m7.5-7.5h-15",
1447
+ tags: [
1448
+ "add",
1449
+ "create",
1450
+ "new",
1451
+ "plus"
1452
+ ]
1453
+ },
1454
+ {
1455
+ name: "Minus",
1456
+ slug: "minus",
1457
+ src: "M5 12h14",
1458
+ tags: [
1459
+ "subtract",
1460
+ "delete",
1461
+ "remove",
1462
+ "minus"
1463
+ ]
1464
+ },
1465
+ {
1466
+ name: "Magnifying Glass",
1467
+ slug: "magnifying-glass",
1468
+ src: "M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z",
1469
+ tags: [
1470
+ "search",
1471
+ "find",
1472
+ "zoom",
1473
+ "magnifying-glass",
1474
+ "senangwebs",
1475
+ "sw-index"
1476
+ ]
1477
+ },
1478
+ {
1479
+ name: "Magnifying Glass Focus",
1480
+ slug: "magnifying-glass-focus",
1481
+ src: "M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607zM10 7.5 7.5 7.5V10M13.5 11 13.5 13.5H11",
1482
+ tags: [
1483
+ "search",
1484
+ "find",
1485
+ "zoom fit",
1486
+ "magnifying-glass-focus"
1487
+ ]
1488
+ },
1489
+ {
1490
+ name: "Magnifying Glass Plus",
1491
+ slug: "magnifying-glass-plus",
1492
+ src: "M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607zM10.5 7.4v6m3-2.9h-6",
1493
+ tags: [
1494
+ "search",
1495
+ "find",
1496
+ "zoom in",
1497
+ "magnifying-glass-plus",
1498
+ "plus"
1499
+ ]
1500
+ },
1501
+ {
1502
+ name: "Magnifying Glass Minus",
1503
+ slug: "magnifying-glass-minus",
1504
+ src: "M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607zM13.5 10.5H7.5",
1505
+ tags: [
1506
+ "search",
1507
+ "find",
1508
+ "zoom out",
1509
+ "magnifying-glass-minus",
1510
+ "minus"
1511
+ ]
1512
+ },
1513
+ {
1514
+ name: "Home",
1515
+ slug: "home",
1516
+ src: "M2.25 12l8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25",
1517
+ tags: [
1518
+ "house",
1519
+ "dashboard",
1520
+ "main",
1521
+ "home"
1522
+ ]
1523
+ },
1524
+ {
1525
+ name: "Cog 6 Tooth",
1526
+ slug: "cog-6-tooth",
1527
+ src: "M9.90 5.32 L9.14 2.94 A9.5 9.5 0 0 1 14.86 2.94 L14.10 5.32 A7 7 0 0 1 16.73 6.84 L18.42 5.00 A9.5 9.5 0 0 1 21.27 9.94 L18.83 10.48 A7 7 0 0 1 18.83 13.52 L21.27 14.06 A9.5 9.5 0 0 1 18.42 19.00 L16.73 17.16 A7 7 0 0 1 14.10 18.68 L14.86 21.06 A9.5 9.5 0 0 1 9.14 21.06 L9.90 18.68 A7 7 0 0 1 7.27 17.16 L5.58 19.00 A9.5 9.5 0 0 1 2.73 14.06 L5.17 13.52 A7 7 0 0 1 5.17 10.48 L2.73 9.94 A9.5 9.5 0 0 1 5.58 5.00 L7.27 6.84 A7 7 0 0 1 9.90 5.32 Z M14.5 12 A2.5 2.5 0 1 0 9.5 12 A2.5 2.5 0 1 0 14.5 12 Z",
1528
+ tags: [
1529
+ "settings",
1530
+ "gear",
1531
+ "options",
1532
+ "config",
1533
+ "cog-6-tooth"
1534
+ ]
1535
+ },
1536
+ {
1537
+ name: "Trash",
1538
+ slug: "trash",
1539
+ src: "M18.2 18 14 18m5.228-12.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0M5.8 18 14 18",
1540
+ tags: [
1541
+ "delete",
1542
+ "remove",
1543
+ "bin",
1544
+ "garbage",
1545
+ "trash"
1546
+ ]
1547
+ },
1548
+ {
1549
+ name: "Arrow Left",
1550
+ slug: "arrow-left",
1551
+ src: "M10.5 19.5L3 12m0 0l7.5-7.5M3 12h18",
1552
+ tags: [
1553
+ "back",
1554
+ "previous",
1555
+ "direction",
1556
+ "arrow-left"
1557
+ ]
1558
+ },
1559
+ {
1560
+ name: "Arrow Right",
1561
+ slug: "arrow-right",
1562
+ src: "M13.5 4.5L21 12m0 0l-7.5 7.5M21 12H3",
1563
+ tags: [
1564
+ "forward",
1565
+ "next",
1566
+ "direction",
1567
+ "arrow-right"
1568
+ ]
1569
+ },
1570
+ {
1571
+ name: "Arrow Up",
1572
+ slug: "arrow-up",
1573
+ src: "M4.5 10.5L12 3m0 0l7.5 7.5M12 3v18",
1574
+ tags: [
1575
+ "top",
1576
+ "direction",
1577
+ "arrow-up"
1578
+ ]
1579
+ },
1580
+ {
1581
+ name: "Arrow Down",
1582
+ slug: "arrow-down",
1583
+ src: "M19.5 13.5L12 21m0 0l-7.5-7.5M12 21V3",
1584
+ tags: [
1585
+ "bottom",
1586
+ "direction",
1587
+ "arrow-down"
1588
+ ]
1589
+ },
1590
+ {
1591
+ name: "Arrow Long Left",
1592
+ slug: "arrow-long-left",
1593
+ src: "M6.75 15.75L3 12m0 0l3.75-3.75M3 12h18",
1594
+ tags: [
1595
+ "back",
1596
+ "previous",
1597
+ "direction",
1598
+ "arrow-long-left"
1599
+ ]
1600
+ },
1601
+ {
1602
+ name: "Arrow Long Right",
1603
+ slug: "arrow-long-right",
1604
+ src: "M17.25 8.25L21 12m0 0l-3.75 3.75M21 12H3",
1605
+ tags: [
1606
+ "forward",
1607
+ "next",
1608
+ "direction",
1609
+ "arrow-long-right"
1610
+ ]
1611
+ },
1612
+ {
1613
+ name: "Arrow Long Up",
1614
+ slug: "arrow-long-up",
1615
+ src: "M8.25 6.75L12 3m0 0l3.75 3.75M12 3v18",
1616
+ tags: [
1617
+ "top",
1618
+ "direction",
1619
+ "arrow-long-up"
1620
+ ]
1621
+ },
1622
+ {
1623
+ name: "Arrow Long Down",
1624
+ slug: "arrow-long-down",
1625
+ src: "M15.75 17.25L12 21m0 0l-3.75-3.75M12 21V3",
1626
+ tags: [
1627
+ "bottom",
1628
+ "direction",
1629
+ "arrow-long-down"
1630
+ ]
1631
+ },
1632
+ {
1633
+ name: "Arrow Path",
1634
+ slug: "arrow-path",
1635
+ src: "M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99",
1636
+ tags: [
1637
+ "refresh",
1638
+ "reload",
1639
+ "cycle",
1640
+ "loop",
1641
+ "arrow-path",
1642
+ "senangwebs",
1643
+ "sw-loading"
1644
+ ]
1645
+ },
1646
+ {
1647
+ name: "Arrow Rotate Cw",
1648
+ slug: "arrow-rotate-cw",
1649
+ src: "M20.25 12a8.25 8.25 0 11-8.25-8.25c2.3 0 4.5 1 6 2.5L20.25 8.5m0-4.5v4.5h-4.5",
1650
+ tags: [
1651
+ "rotate",
1652
+ "refresh",
1653
+ "reload",
1654
+ "arrow-rotate-cw"
1655
+ ]
1656
+ },
1657
+ {
1658
+ name: "Arrow Rotate Ccw",
1659
+ slug: "arrow-rotate-ccw",
1660
+ src: "M3.75 12a8.25 8.25 0 108.25-8.25c-2.3 0-4.5 1-6 2.5L3.75 8.5m0-4.5v4.5h4.5",
1661
+ tags: [
1662
+ "rotate",
1663
+ "undo",
1664
+ "arrow-rotate-ccw"
1665
+ ]
1666
+ },
1667
+ {
1668
+ name: "Arrow Top Right On Square",
1669
+ slug: "arrow-top-right-on-square",
1670
+ src: "M13.5 6H5.25A2.25 2.25 0 003 8.25v10.5A2.25 2.25 0 005.25 21h10.5A2.25 2.25 0 0018 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25",
1671
+ tags: [
1672
+ "external",
1673
+ "link",
1674
+ "open",
1675
+ "arrow-top-right-on-square"
1676
+ ]
1677
+ },
1678
+ {
1679
+ name: "Arrow Right On Rectangle",
1680
+ slug: "arrow-right-on-rectangle",
1681
+ src: "M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15M12 9l-3 3m0 0l3 3m-3-3h12.75",
1682
+ tags: [
1683
+ "logout",
1684
+ "exit",
1685
+ "signout",
1686
+ "arrow-right-on-rectangle"
1687
+ ]
1688
+ },
1689
+ {
1690
+ name: "Arrow Left On Rectangle",
1691
+ slug: "arrow-left-on-rectangle",
1692
+ src: "M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15m3 0l3-3m0 0l-3-3m3 3H9",
1693
+ tags: [
1694
+ "login",
1695
+ "enter",
1696
+ "signin",
1697
+ "arrow-left-on-rectangle"
1698
+ ]
1699
+ },
1700
+ {
1701
+ name: "Chevron Left",
1702
+ slug: "chevron-left",
1703
+ src: "M15.75 19.5L8.25 12l7.5-7.5",
1704
+ tags: [
1705
+ "back",
1706
+ "previous",
1707
+ "chevron-left"
1708
+ ]
1709
+ },
1710
+ {
1711
+ name: "Chevron Right",
1712
+ slug: "chevron-right",
1713
+ src: "M8.25 4.5l7.5 7.5-7.5 7.5",
1714
+ tags: [
1715
+ "forward",
1716
+ "next",
1717
+ "chevron-right"
1718
+ ]
1719
+ },
1720
+ {
1721
+ name: "Chevron Up",
1722
+ slug: "chevron-up",
1723
+ src: "M19.5 15.75l-7.5-7.5-7.5 7.5",
1724
+ tags: [
1725
+ "top",
1726
+ "collapse",
1727
+ "chevron-up"
1728
+ ]
1729
+ },
1730
+ {
1731
+ name: "Chevron Down",
1732
+ slug: "chevron-down",
1733
+ src: "M4.5 8.25l7.5 7.5 7.5-7.5",
1734
+ tags: [
1735
+ "bottom",
1736
+ "expand",
1737
+ "chevron-down"
1738
+ ]
1739
+ },
1740
+ {
1741
+ name: "Chevron Double Left",
1742
+ slug: "chevron-double-left",
1743
+ src: "M18.75 19.5l-7.5-7.5 7.5-7.5m-6 15L5.25 12l7.5-7.5",
1744
+ tags: [
1745
+ "back",
1746
+ "previous",
1747
+ "fast",
1748
+ "chevron-double-left"
1749
+ ]
1750
+ },
1751
+ {
1752
+ name: "Chevron Double Right",
1753
+ slug: "chevron-double-right",
1754
+ src: "M11.25 4.5l7.5 7.5-7.5 7.5m-6-15l7.5 7.5-7.5 7.5",
1755
+ tags: [
1756
+ "forward",
1757
+ "next",
1758
+ "fast",
1759
+ "chevron-double-right"
1760
+ ]
1761
+ },
1762
+ {
1763
+ name: "Envelope",
1764
+ slug: "envelope",
1765
+ src: "M21.75 6.75v10.5a2.25 2.25 0 01-2.25 2.25h-15a2.25 2.25 0 01-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0019.5 4.5h-15a2.25 2.25 0 00-2.25 2.25m19.5 0v.243a2.25 2.25 0 01-1.07 1.916l-7.5 4.615a2.25 2.25 0 01-2.36 0L3.32 8.91a2.25 2.25 0 01-1.07-1.916V6.75",
1766
+ tags: [
1767
+ "mail",
1768
+ "email",
1769
+ "message",
1770
+ "contact",
1771
+ "envelope"
1772
+ ]
1773
+ },
1774
+ {
1775
+ name: "Envelope Open",
1776
+ slug: "envelope-open",
1777
+ src: "M21.75 9v.906a2.25 2.25 0 01-1.183 1.981l-6.478 3.488M2.25 9v.906a2.25 2.25 0 001.183 1.981l6.478 3.488m8.839 2.51l-4.66-2.51m0 0l-1.023-.55a2.25 2.25 0 00-2.134 0l-1.022.55m0 0l-4.661 2.51m16.5 1.615a2.25 2.25 0 01-2.25 2.25h-15a2.25 2.25 0 01-2.25-2.25V8.844a2.25 2.25 0 011.183-1.98l7.5-4.04a2.25 2.25 0 012.134 0l7.5 4.04a2.25 2.25 0 011.183 1.98V19.5z",
1778
+ tags: [
1779
+ "mail",
1780
+ "email",
1781
+ "read",
1782
+ "envelope-open"
1783
+ ]
1784
+ },
1785
+ {
1786
+ name: "Chat Bubble Left",
1787
+ slug: "chat-bubble-left",
1788
+ src: "M7.5 8.25h9m-9 3H12M2.25 12.76c0 1.6 1.123 2.994 2.707 3.227 1.087.16 2.185.283 3.293.369V21l4.076-4.076a1.526 1.526 0 011.037-.443 48.282 48.282 0 005.68-.494c1.584-.233 2.707-1.626 2.707-3.228V6.741c0-1.602-1.123-2.995-2.707-3.228A48.394 48.394 0 0012 3c-2.392 0-4.744.175-7.043.513C3.373 3.746 2.25 5.14 2.25 6.741v6.018z",
1789
+ tags: [
1790
+ "message",
1791
+ "comment",
1792
+ "talk",
1793
+ "chat-bubble-left"
1794
+ ]
1795
+ },
1796
+ {
1797
+ name: "Chat Bubble Right",
1798
+ slug: "chat-bubble-right",
1799
+ src: "M7.5 8.25h9m0 3H12M21.75 12.76c0 1.6-1.123 2.994-2.707 3.227-1.087.16-2.185.283-3.293.369V21l-4.076-4.076a1.526 1.526 0 01-1.037-.443 48.282 48.282 0 00-5.68-.494c-1.584-.233-2.707-1.626-2.707-3.228V6.741c0-1.602 1.123-2.995 2.707-3.228A48.394 48.394 0 0112 3c2.392 0 4.744.175 7.043.513 1.584.233 2.707 1.627 2.707 3.228v6.018z",
1800
+ tags: [
1801
+ "message",
1802
+ "comment",
1803
+ "talk",
1804
+ "chat-bubble-right"
1805
+ ]
1806
+ },
1807
+ {
1808
+ name: "Chat Bubble Left Ellipsis",
1809
+ slug: "chat-bubble-left-ellipsis",
1810
+ src: "M7.8 9.8a.75.75 0 11-1.6 0 .75.75 0 011.6 0M12.8 9.8a.75.75 0 11-1.6 0 .75.75 0 011.6-0M17.8 9.8a.75.75 0 11-1.6 0 .75.75 0 011.6 0M2.25 12.76c0 1.6 1.123 2.994 2.707 3.227 1.087.16 2.185.283 3.293.369V21l4.076-4.076a1.526 1.526 0 011.037-.443 48.282 48.282 0 005.68-.494c1.584-.233 2.707-1.626 2.707-3.228V6.741c0-1.602-1.123-2.995-2.707-3.228A48.394 48.394 0 0012 3c-2.392 0-4.744.175-7.043.513C3.373 3.746 2.25 5.14 2.25 6.741v6.018z",
1811
+ tags: [
1812
+ "message",
1813
+ "comment",
1814
+ "typing",
1815
+ "chat-bubble-left-ellipsis"
1816
+ ]
1817
+ },
1818
+ {
1819
+ name: "Chat Bubble Right Ellipsis",
1820
+ slug: "chat-bubble-right-ellipsis",
1821
+ src: "M7.8 9.8a.75.75 0 11-1.6 0 .75.75 0 011.6 0M12.8 9.8a.75.75 0 11-1.6 0 .75.75 0 011.6 0M17.8 9.8a.75.75 0 11-1.6 0 .75.75 0 011.6 0M21.75 12.76c0 1.6-1.123 2.994-2.707 3.227-1.087.16-2.185.283-3.293.369V21l-4.076-4.076a1.526 1.526 0 01-1.037-.443 48.282 48.282 0 00-5.68-.494c-1.584-.233-2.707-1.626-2.707-3.228V6.741c0-1.602 1.123-2.995 2.707-3.228A48.394 48.394 0 0112 3c2.392 0 4.744.175 7.043.513 1.584.233 2.707 1.627 2.707 3.228v6.018z",
1822
+ tags: [
1823
+ "message",
1824
+ "comment",
1825
+ "typing",
1826
+ "chat-bubble-right-ellipsis"
1827
+ ]
1828
+ },
1829
+ {
1830
+ name: "Chat Bubble Left Right",
1831
+ slug: "chat-bubble-left-right",
1832
+ src: "M20.25 8.511c.884.284 1.5 1.128 1.5 2.097v4.286c0 1.136-.847 2.1-1.98 2.193-.34.027-.68.052-1.02.072v3.091l-3-3c-1.354 0-2.694-.055-4.02-.163a2.115 2.115 0 01-.825-.242m9.345-8.334a2.126 2.126 0 00-.476-.095 48.64 48.64 0 00-8.048 0c-1.131.094-1.976 1.057-1.976 2.192v4.286c0 .837.46 1.58 1.155 1.951m9.345-8.334V6.637c0-1.621-1.152-3.026-2.76-3.235A48.455 48.455 0 0011.25 3c-2.115 0-4.198.137-6.24.402-1.608.209-2.76 1.614-2.76 3.235v6.226c0 1.621 1.152 3.026 2.76 3.235.577.075 1.157.14 1.74.194V21l4.155-4.155",
1833
+ tags: [
1834
+ "conversation",
1835
+ "exchange",
1836
+ "chat-bubble-left-right"
1837
+ ]
1838
+ },
1839
+ {
1840
+ name: "Phone",
1841
+ slug: "phone",
1842
+ src: "M2.25 6.75c0 8.284 6.716 15 15 15h2.25a2.25 2.25 0 002.25-2.25v-1.372c0-.516-.351-.966-.852-1.091l-4.423-1.106c-.44-.11-.902.055-1.173.417l-.97 1.293c-.282.376-.769.542-1.21.38a12.035 12.035 0 01-7.143-7.143c-.162-.441.004-.928.38-1.21l1.293-.97c.363-.271.527-.734.417-1.173L6.963 3.102a1.125 1.125 0 00-1.091-.852H4.5A2.25 2.25 0 002.25 4.5v2.25z",
1843
+ tags: [
1844
+ "call",
1845
+ "contact",
1846
+ "mobile",
1847
+ "phone"
1848
+ ]
1849
+ },
1850
+ {
1851
+ name: "Phone X Mark",
1852
+ slug: "phone-x-mark",
1853
+ src: "M14.25 9.75v-4.5m0 4.5h4.5m-4.5 0l6-6m-3 18c-8.284 0-15-6.716-15-15V4.5A2.25 2.25 0 014.5 2.25h1.372c.516 0 .966.351 1.091.852l1.106 4.423c.11.44-.055.902-.417 1.173l-1.293.97a1.062 1.062 0 00-.38 1.21 12.035 12.035 0 007.143 7.143c.441.162.928-.004 1.21-.38l.97-1.293a1.125 1.125 0 011.173-.417l4.423 1.106c.5.125.852.575.852 1.091V19.5a2.25 2.25 0 01-2.25 2.25h-2.25z",
1854
+ tags: [
1855
+ "missed call",
1856
+ "hang up",
1857
+ "phone-x-mark"
1858
+ ]
1859
+ },
1860
+ {
1861
+ name: "User",
1862
+ slug: "user",
1863
+ src: "M15.75 6a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0zM4.501 20.118a7.5 7.5 0 0114.998 0A17.933 17.933 0 0112 21.75c-2.676 0-5.216-.584-7.499-1.632z",
1864
+ tags: [
1865
+ "person",
1866
+ "profile",
1867
+ "account",
1868
+ "user"
1869
+ ]
1870
+ },
1871
+ {
1872
+ name: "User Circle",
1873
+ slug: "user-circle",
1874
+ src: "M17.982 18.725A7.488 7.488 0 0012 15.75a7.488 7.488 0 00-5.982 2.975m11.963 0a9 9 0 10-11.963 0m11.963 0A8.966 8.966 0 0112 21a8.966 8.966 0 01-5.982-2.275M15 9.75a3 3 0 11-6 0 3 3 0 016 0z",
1875
+ tags: [
1876
+ "person",
1877
+ "profile",
1878
+ "account",
1879
+ "user-circle"
1880
+ ]
1881
+ },
1882
+ {
1883
+ name: "User Plus",
1884
+ slug: "user-plus",
1885
+ src: "M19 7.5v3m0 0v3m0-3h3m-3 0h-3m-2.25-4.125a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zM4 19.235v-.11a6.375 6.375 0 0112.75 0v.109A12.318 12.318 0 0110.374 21c-2.331 0-4.512-.645-6.374-1.766z",
1886
+ tags: [
1887
+ "add user",
1888
+ "register",
1889
+ "user-plus"
1890
+ ]
1891
+ },
1892
+ {
1893
+ name: "User Minus",
1894
+ slug: "user-minus",
1895
+ src: "m19 10.5m0 0h3M19 10.5h-3m-2.25-4.125a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zM4 19.235v-.11a6.375 6.375 0 0112.75 0v.109A12.318 12.318 0 0110.374 21c-2.331 0-4.512-.645-6.374-1.766z",
1896
+ tags: [
1897
+ "remove user",
1898
+ "user-minus"
1899
+ ]
1900
+ },
1901
+ {
1902
+ name: "User Group",
1903
+ slug: "user-group",
1904
+ src: "M18 18.72a9.094 9.094 0 003.741-.479 3 3 0 00-4.682-2.72m.94 3.198l.001.031c0 .225-.012.447-.037.666A11.944 11.944 0 0112 21c-2.17 0-4.207-.576-5.963-1.584A6.062 6.062 0 016 18.719m12 0a5.971 5.971 0 00-.941-3.197m0 0A5.995 5.995 0 0012 12.75a5.995 5.995 0 00-5.058 2.772m0 0a3 3 0 00-4.681 2.72 8.986 8.986 0 003.74.477m.94-3.197a5.971 5.971 0 00-.94 3.197M15 6.75a3 3 0 11-6 0 3 3 0 016 0zm6 3a2.25 2.25 0 11-4.5 0 2.25 2.25 0 014.5 0zm-13.5 0a2.25 2.25 0 11-4.5 0 2.25 2.25 0 014.5 0z",
1905
+ tags: [
1906
+ "people",
1907
+ "team",
1908
+ "community",
1909
+ "user-group"
1910
+ ]
1911
+ },
1912
+ {
1913
+ name: "Users",
1914
+ slug: "users",
1915
+ src: "M15 19.128a9.38 9.38 0 002.625.372 9.337 9.337 0 004.121-.952 4.125 4.125 0 00-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 018.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0111.964-3.07M12 6.375a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zm8.25 2.25a2.625 2.625 0 11-5.25 0 2.625 2.625 0 015.25 0z",
1916
+ tags: [
1917
+ "people",
1918
+ "team",
1919
+ "community",
1920
+ "users"
1921
+ ]
1922
+ },
1923
+ {
1924
+ name: "Alert",
1925
+ slug: "alert",
1926
+ src: "M3 8.25V18a2.25 2.25 0 002.25 2.25h13.5A2.25 2.25 0 0021 18V8.25m-18 0V6a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 6v2.25m-18 0h18zM8 13.3h8v3H8z",
1927
+ tags: [
1928
+ "warning",
1929
+ "danger",
1930
+ "notification",
1931
+ "alert",
1932
+ "senangwebs",
1933
+ "popup",
1934
+ "sw-modals"
1935
+ ]
1936
+ },
1937
+ {
1938
+ name: "Play",
1939
+ slug: "play",
1940
+ src: "M5.25 5.653c0-.856.917-1.398 1.667-.986l11.54 6.348a1.125 1.125 0 010 1.971l-11.54 6.347a1.125 1.125 0 01-1.667-.985V5.653z",
1941
+ tags: [
1942
+ "start",
1943
+ "media",
1944
+ "video",
1945
+ "play"
1946
+ ]
1947
+ },
1948
+ {
1949
+ name: "Pause",
1950
+ slug: "pause",
1951
+ src: "M9 5.25v13.5m6-13.5v13.5",
1952
+ tags: [
1953
+ "stop",
1954
+ "media",
1955
+ "video",
1956
+ "pause"
1957
+ ]
1958
+ },
1959
+ {
1960
+ name: "Stop",
1961
+ slug: "stop",
1962
+ src: "M4.5 7.5a3 3 0 013-3h9a3 3 0 013 3v9a3 3 0 01-3 3h-9a3 3 0 01-3-3v-9z",
1963
+ tags: [
1964
+ "media",
1965
+ "video",
1966
+ "stop"
1967
+ ]
1968
+ },
1969
+ {
1970
+ name: "Play Circle",
1971
+ slug: "play-circle",
1972
+ src: "M21 12a9 9 0 11-18 0 9 9 0 0118 0zM15.91 11.672a.375.375 0 010 .656l-5.603 3.113a.375.375 0 01-.557-.328V8.887c0-.286.307-.466.557-.327l5.603 3.112z",
1973
+ tags: [
1974
+ "start",
1975
+ "media",
1976
+ "play-circle"
1977
+ ]
1978
+ },
1979
+ {
1980
+ name: "Pause Circle",
1981
+ slug: "pause-circle",
1982
+ src: "M14.25 9v6m-4.5 0V9M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z",
1983
+ tags: [
1984
+ "stop",
1985
+ "media",
1986
+ "pause-circle"
1987
+ ]
1988
+ },
1989
+ {
1990
+ name: "Speaker Wave",
1991
+ slug: "speaker-wave",
1992
+ src: "M19.114 5.636a9 9 0 010 12.728M16.463 8.288a5.25 5.25 0 010 7.424M6.75 8.25l4.72-4.72a.75.75 0 011.28.53v15.88a.75.75 0 01-1.28.53l-4.72-4.72H4.51c-.88 0-1.704-.507-1.938-1.354A9.01 9.01 0 012.25 12c0-.83.112-1.633.322-2.396C2.806 8.756 3.63 8.25 4.51 8.25H6.75z",
1993
+ tags: [
1994
+ "sound",
1995
+ "volume",
1996
+ "audio",
1997
+ "speaker-wave"
1998
+ ]
1999
+ },
2000
+ {
2001
+ name: "Speaker X Mark",
2002
+ slug: "speaker-x-mark",
2003
+ src: "M17.25 9.75L19.5 12m0 0l2.25 2.25M19.5 12l2.25-2.25M19.5 12l-2.25 2.25m-10.5-6l4.72-4.72a.75.75 0 011.28.53v15.88a.75.75 0 01-1.28.53l-4.72-4.72H4.51c-.88 0-1.704-.507-1.938-1.354A9.01 9.01 0 012.25 12c0-.83.112-1.633.322-2.396C2.806 8.756 3.63 8.25 4.51 8.25H6.75z",
2004
+ tags: [
2005
+ "mute",
2006
+ "silent",
2007
+ "audio",
2008
+ "speaker-x-mark"
2009
+ ]
2010
+ },
2011
+ {
2012
+ name: "Microphone",
2013
+ slug: "microphone",
2014
+ src: "M12 18.75a6 6 0 006-6v-1.5m-6 7.5a6 6 0 01-6-6v-1.5m6 7.5v3.75m-3.75 0h7.5M12 15.75a3 3 0 01-3-3V4.5a3 3 0 116 0v8.25a3 3 0 01-3 3z",
2015
+ tags: [
2016
+ "record",
2017
+ "audio",
2018
+ "voice",
2019
+ "microphone"
2020
+ ]
2021
+ },
2022
+ {
2023
+ name: "Microphone Mute",
2024
+ slug: "microphone-mute",
2025
+ src: "M3.75 3.75l16.5 16.5M12 18.75a6 6 0 006-6v-1.5m-6 7.5a6 6 0 01-6-6v-1.5m6 7.5v3.75m-3.75 0h7.5M15 10.932V4.5a3 3 0 00-6 0v3.068m0 0v5.182a3 3 0 003 3c.944 0 1.794-.437 2.347-1.118",
2026
+ tags: [
2027
+ "mute",
2028
+ "silent",
2029
+ "voice",
2030
+ "microphone-mute"
2031
+ ]
2032
+ },
2033
+ {
2034
+ name: "Video Camera",
2035
+ slug: "video-camera",
2036
+ src: "M15.75 10.5l4.72-4.72a.75.75 0 011.28.53v11.38a.75.75 0 01-1.28.53l-4.72-4.72M4.5 18.75h9a2.25 2.25 0 002.25-2.25v-9a2.25 2.25 0 00-2.25-2.25h-9A2.25 2.25 0 002.25 7.5v9a2.25 2.25 0 002.25 2.25z",
2037
+ tags: [
2038
+ "movie",
2039
+ "film",
2040
+ "record",
2041
+ "video-camera"
2042
+ ]
2043
+ },
2044
+ {
2045
+ name: "Camera",
2046
+ slug: "camera",
2047
+ src: "M6.827 6.175A2.31 2.31 0 015.186 7.23c-.38.054-.757.112-1.134.175C2.999 7.58 2.25 8.507 2.25 9.574V18a2.25 2.25 0 002.25 2.25h15A2.25 2.25 0 0021.75 18V9.574c0-1.067-.75-1.994-1.802-2.169a47.865 47.865 0 00-1.134-.175 2.31 2.31 0 01-1.64-1.055l-.822-1.316a2.192 2.192 0 00-1.736-1.039 48.774 48.774 0 00-5.232 0 2.192 2.192 0 00-1.736 1.039l-.821 1.316zM16.5 12.75a4.5 4.5 0 11-9 0 4.5 4.5 0 019 0z",
2048
+ tags: [
2049
+ "photo",
2050
+ "picture",
2051
+ "image",
2052
+ "camera"
2053
+ ]
2054
+ },
2055
+ {
2056
+ name: "Photo",
2057
+ slug: "photo",
2058
+ src: "M2.25 15.75l5.159-5.159a2.25 2.25 0 013.182 0l5.159 5.159m-1.5-1.5l1.409-1.409a2.25 2.25 0 013.182 0l2.909 2.909m-18 4.5h16.5a2.25 2.25 0 002.25-2.25V6a2.25 2.25 0 00-2.25-2.25H3.75A2.25 2.25 0 001.5 6v12a2.25 2.25 0 002.25 2.25zm10.5-11.25h.008v.008h-.008V8.25zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0z",
2059
+ tags: [
2060
+ "image",
2061
+ "picture",
2062
+ "gallery",
2063
+ "photo",
2064
+ "senangwebs",
2065
+ "lightbox",
2066
+ "sw-gallery"
2067
+ ]
2068
+ },
2069
+ {
2070
+ name: "Panorama",
2071
+ slug: "panorama",
2072
+ src: "M2 5C8 9 16 9 22 5V19C16 15 8 15 2 19V5ZM8 13 12 11 12 13 16 11",
2073
+ tags: [
2074
+ "image",
2075
+ "picture",
2076
+ "wide",
2077
+ "panorama",
2078
+ "senangwebs",
2079
+ "vr",
2080
+ "sw-tour"
2081
+ ]
2082
+ },
2083
+ {
2084
+ name: "Musical Note",
2085
+ slug: "musical-note",
2086
+ src: "M9 9l10.5-3m0 6.553v3.75a2.25 2.25 0 01-1.632 2.163l-1.32.377a1.803 1.803 0 11-.99-3.467l2.31-.66a2.25 2.25 0 001.632-2.163zm0 0V2.25L9 5.25v10.303m0 0v3.75a2.25 2.25 0 01-1.632 2.163l-1.32.377a1.803 1.803 0 11-.99-3.467l2.31-.66A2.25 2.25 0 009 15.553z",
2087
+ tags: [
2088
+ "audio",
2089
+ "song",
2090
+ "sound",
2091
+ "musical-note"
2092
+ ]
2093
+ },
2094
+ {
2095
+ name: "Code",
2096
+ slug: "code",
2097
+ src: "M17.25 6.75L22.5 12l-5.25 5.25M6.75 17.25L1.5 12l5.25-5.25M14.25 3.75l-4.5 16.5",
2098
+ tags: [
2099
+ "coding",
2100
+ "programming",
2101
+ "developer",
2102
+ "code"
2103
+ ]
2104
+ },
2105
+ {
2106
+ name: "Console",
2107
+ slug: "console",
2108
+ src: "M2.25 6A2.25 2.25 0 014.5 3.75h15A2.25 2.25 0 0121.75 6v12a2.25 2.25 0 01-2.25 2.25h-15A2.25 2.25 0 012.25 18V6zM7 9l3 3-3 3M12 15h5",
2109
+ tags: [
2110
+ "terminal",
2111
+ "cli",
2112
+ "command",
2113
+ "prompt",
2114
+ "console"
2115
+ ]
2116
+ },
2117
+ {
2118
+ name: "Horizontal 3 Dots",
2119
+ slug: "horizontal-3-dots",
2120
+ src: "M6.75 12a.75.75 0 11-1.5 0 .75.75 0 011.5 0zM12.75 12a.75.75 0 11-1.5 0 .75.75 0 011.5 0zM18.75 12a.75.75 0 11-1.5 0 .75.75 0 011.5 0z",
2121
+ tags: [
2122
+ "menu",
2123
+ "more",
2124
+ "options",
2125
+ "ellipsis",
2126
+ "horizontal-3-dots"
2127
+ ]
2128
+ },
2129
+ {
2130
+ name: "Vertical 3 Dots",
2131
+ slug: "vertical-3-dots",
2132
+ src: "M12 6.75a.75.75 0 110-1.5.75.75 0 010 1.5zM12 12.75a.75.75 0 110-1.5.75.75 0 010 1.5zM12 18.75a.75.75 0 110-1.5.75.75 0 010 1.5z",
2133
+ tags: [
2134
+ "menu",
2135
+ "more",
2136
+ "options",
2137
+ "ellipsis",
2138
+ "vertical-3-dots"
2139
+ ]
2140
+ },
2141
+ {
2142
+ name: "Save",
2143
+ slug: "save",
2144
+ src: "M19 21A2.25 2.25 0 0021 19V7L17 3H5A2.25 2.25 0 003 5V19A2.25 2.25 0 005 21H17ZM12 18A3.75 3.75 0 1012 10.25 3.75 3.75 0 0012 18ZM7 3H13V7H7V5.8Z",
2145
+ tags: [
2146
+ "disk",
2147
+ "floppy",
2148
+ "store",
2149
+ "save"
2150
+ ]
2151
+ },
2152
+ {
2153
+ name: "Computer Laptop",
2154
+ slug: "computer-laptop",
2155
+ src: "M 2.25 15 h 19.5 v 1.5 a 2.25 2.25 0 0 1 -2.25 2.25 h -15 A 2.25 2.25 0 0 1 2.25 16.5 V 15 Z m 2.25 0 V 6.75 A 2.25 2.25 0 0 1 6.75 4.5 h 10.5 a 2.25 2.25 0 0 1 2.25 2.25 V 15",
2156
+ tags: [
2157
+ "device",
2158
+ "macbook",
2159
+ "pc",
2160
+ "computer-laptop"
2161
+ ]
2162
+ },
2163
+ {
2164
+ name: "Computer Code",
2165
+ slug: "computer-code",
2166
+ src: "M 2.25 15 h 19.5 v 1.5 a 2.25 2.25 0 0 1 -2.25 2.25 h -15 A 2.25 2.25 0 0 1 2.25 16.5 V 15 Z m 2.25 0 V 6.75 A 2.25 2.25 0 0 1 6.75 4.5 h 10.5 a 2.25 2.25 0 0 1 2.25 2.25 V 15 M 10 8 L 8 10 l 2 2 m 4 -4 l 2 2 l -2 2",
2167
+ tags: [
2168
+ "develop",
2169
+ "program",
2170
+ "syntax",
2171
+ "computer-code",
2172
+ "senangwebs",
2173
+ "code",
2174
+ "sw-one"
2175
+ ]
2176
+ },
2177
+ {
2178
+ name: "Computer Desktop",
2179
+ slug: "computer-desktop",
2180
+ src: "M9 17.25v1.007a3 3 0 01-.879 2.122L7.5 21h9l-.621-.621A3 3 0 0115 18.257V17.25m6-12V15a2.25 2.25 0 01-2.25 2.25H5.25A2.25 2.25 0 013 15V5.25m18 0A2.25 2.25 0 0018.75 3H5.25A2.25 2.25 0 003 5.25m18 0V12a2.25 2.25 0 01-2.25 2.25H5.25A2.25 2.25 0 013 12V5.25",
2181
+ tags: [
2182
+ "monitor",
2183
+ "screen",
2184
+ "pc",
2185
+ "computer-desktop"
2186
+ ]
2187
+ },
2188
+ {
2189
+ name: "Device Phone Mobile",
2190
+ slug: "device-phone-mobile",
2191
+ src: "M10.5 1.5H8.25A2.25 2.25 0 006 3.75v16.5a2.25 2.25 0 002.25 2.25h7.5A2.25 2.25 0 0018 20.25V3.75a2.25 2.25 0 00-2.25-2.25H13.5m-3 0V3h3V1.5m-3 0h3m-3 18.75h3",
2192
+ tags: [
2193
+ "iphone",
2194
+ "smartphone",
2195
+ "cell",
2196
+ "device-phone-mobile",
2197
+ "senangwebs",
2198
+ "sw-roll"
2199
+ ]
2200
+ },
2201
+ {
2202
+ name: "Device Tablet",
2203
+ slug: "device-tablet",
2204
+ src: "M10.5 19.5h3m-6.75 2.25h10.5a2.25 2.25 0 002.25-2.25v-15a2.25 2.25 0 00-2.25-2.25H6.75A2.25 2.25 0 004.5 4.5v15a2.25 2.25 0 002.25 2.25z",
2205
+ tags: [
2206
+ "ipad",
2207
+ "kindle",
2208
+ "device-tablet"
2209
+ ]
2210
+ },
2211
+ {
2212
+ name: "Battery 0",
2213
+ slug: "battery-0",
2214
+ src: "M21 10.5h.375c.621 0 1.125.504 1.125 1.125v2.25c0 .621-.504 1.125-1.125 1.125H21M3.75 18h15A2.25 2.25 0 0021 15.75v-6a2.25 2.25 0 00-2.25-2.25h-15A2.25 2.25 0 001.5 9.75v6A2.25 2.25 0 003.75 18z",
2215
+ tags: [
2216
+ "power",
2217
+ "empty",
2218
+ "charge",
2219
+ "battery-0"
2220
+ ]
2221
+ },
2222
+ {
2223
+ name: "Battery 10",
2224
+ slug: "battery-10",
2225
+ src: "M21 10.5h.375c.621 0 1.125.504 1.125 1.125v2.25c0 .621-.504 1.125-1.125 1.125H21M3.75 18h15A2.25 2.25 0 0021 15.75v-6a2.25 2.25 0 00-2.25-2.25h-15A2.25 2.25 0 001.5 9.75v6A2.25 2.25 0 003.75 18zM4.5 10.5h3L7.5 15 4.5 15 4.5 10.5",
2226
+ tags: [
2227
+ "power",
2228
+ "low",
2229
+ "battery-10"
2230
+ ]
2231
+ },
2232
+ {
2233
+ name: "Battery 50",
2234
+ slug: "battery-50",
2235
+ src: "M21 10.5h.375c.621 0 1.125.504 1.125 1.125v2.25c0 .621-.504 1.125-1.125 1.125H21M3.75 18h15A2.25 2.25 0 0021 15.75v-6a2.25 2.25 0 00-2.25-2.25h-15A2.25 2.25 0 001.5 9.75v6A2.25 2.25 0 003.75 18zM4.5 10.5h7.5L12 15 4.5 15 4.5 10.5",
2236
+ tags: [
2237
+ "power",
2238
+ "half",
2239
+ "battery-50"
2240
+ ]
2241
+ },
2242
+ {
2243
+ name: "Battery 100",
2244
+ slug: "battery-100",
2245
+ src: "M21 10.5h.375c.621 0 1.125.504 1.125 1.125v2.25c0 .621-.504 1.125-1.125 1.125H21M3.75 18h15A2.25 2.25 0 0021 15.75v-6a2.25 2.25 0 00-2.25-2.25h-15A2.25 2.25 0 001.5 9.75v6A2.25 2.25 0 003.75 18zM4.5 10.5h13.5L18 15 4.5 15 4.5 10.5",
2246
+ tags: [
2247
+ "power",
2248
+ "full",
2249
+ "battery-100"
2250
+ ]
2251
+ },
2252
+ {
2253
+ name: "Controller",
2254
+ slug: "controller",
2255
+ src: "M12 2V6M5 6H19C20.6569 6 22 7.34315 22 9V15C22 16.6569 20.6569 18 19 18H5C3.34315 18 2 16.6569 2 15V9C2 7.34315 3.34315 6 5 6Z M6 12H10M8 10V14 M18 12a2 2 0 1 1-4 0 2 2 0 0 1 4 0z",
2256
+ tags: [
2257
+ "game",
2258
+ "play",
2259
+ "joystick",
2260
+ "controller",
2261
+ "senangwebs",
2262
+ "vr",
2263
+ "sw-verse"
2264
+ ]
2265
+ },
2266
+ {
2267
+ name: "Game",
2268
+ slug: "game",
2269
+ src: "M 13 13 L 13 4 A 9 9 0 1 0 22 13 Z M 20 8 a 2 2 0 1 1 -4 0 a 2 2 0 0 1 4 0 z M 10 12 a 1.5 1.5 0 1 1 -3 0 a 1.5 1.5 0 0 1 3 0 z",
2270
+ tags: [
2271
+ "controller",
2272
+ "play",
2273
+ "joystick",
2274
+ "game",
2275
+ "senangwebs",
2276
+ "2d",
2277
+ "sw-xperience"
2278
+ ]
2279
+ },
2280
+ {
2281
+ name: "Window",
2282
+ slug: "window",
2283
+ src: "M3 8.25V18a2.25 2.25 0 002.25 2.25h13.5A2.25 2.25 0 0021 18V8.25m-18 0V6a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 6v2.25m-18 0h18M5.25 6h.008v.008H5.25V6zM7.5 6h.008v.008H7.5V6zM9.75 6h.008v.008H9.75V6z",
2284
+ tags: [
2285
+ "browser",
2286
+ "app",
2287
+ "ui",
2288
+ "window"
2289
+ ]
2290
+ },
2291
+ {
2292
+ name: "Shopping Cart",
2293
+ slug: "shopping-cart",
2294
+ src: "M2.25 3h1.386c.51 0 .955.343 1.087.835l.383 1.437M7.5 14.25a3 3 0 00-3 3h15.75m-12.75-3h11.218c1.121-2.3 2.1-4.684 2.924-7.138a60.114 60.114 0 00-16.536-1.84M7.5 14.25L5.106 5.272M6 20.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm12.75 0a.75.75 0 11-1.5 0 .75.75 0 011.5 0z",
2295
+ tags: [
2296
+ "buy",
2297
+ "checkout",
2298
+ "store",
2299
+ "shopping-cart"
2300
+ ]
2301
+ },
2302
+ {
2303
+ name: "Shopping Bag",
2304
+ slug: "shopping-bag",
2305
+ src: "M15.75 10.5V6a3.75 3.75 0 10-7.5 0v4.5m11.356-1.993l1.263 12c.07.665-.45 1.243-1.119 1.243H4.25a1.125 1.125 0 01-1.12-1.243l1.264-12A1.125 1.125 0 015.513 7.5h12.974c.576 0 1.059.435 1.119 1.007zM8.625 10.5a.375.375 0 11-.75 0 .375.375 0 01.75 0zm7.5 0a.375.375 0 11-.75 0 .375.375 0 01.75 0z",
2306
+ tags: [
2307
+ "buy",
2308
+ "checkout",
2309
+ "store",
2310
+ "shopping-bag"
2311
+ ]
2312
+ },
2313
+ {
2314
+ name: "Basket",
2315
+ slug: "basket",
2316
+ src: "m15 11 0 9m4-9-4-7M2 11h20m-18.5 0 1.6 7.4a2 2 0 002 1.6h9.8a2 2 0 002-1.6l1.7-7.4M4.5 15.5h15m-14.5-4.5 4-7m0 7 0 9",
2317
+ tags: [
2318
+ "buy",
2319
+ "checkout",
2320
+ "store",
2321
+ "basket",
2322
+ "senangwebs",
2323
+ "cart",
2324
+ "shop",
2325
+ "sw-buy"
2326
+ ]
2327
+ },
2328
+ {
2329
+ name: "Credit Card",
2330
+ slug: "credit-card",
2331
+ src: "M2.25 8.25h19.5M2.25 9h19.5m-16.5 5.25h6m-6 2.25h3m-3.75 3h15a2.25 2.25 0 002.25-2.25V6.75A2.25 2.25 0 0019.5 4.5h-15a2.25 2.25 0 00-2.25 2.25v10.5A2.25 2.25 0 004.5 19.5z",
2332
+ tags: [
2333
+ "payment",
2334
+ "money",
2335
+ "purchase",
2336
+ "credit-card"
2337
+ ]
2338
+ },
2339
+ {
2340
+ name: "Banknotes",
2341
+ slug: "banknotes",
2342
+ src: "M2.25 18.75l15.75 2.25c1 .2 1-0 1.2-1L19.4 18.8M3.75 4.5v.75A.75.75 0 013 6h-.75m0 0v-.375c0-.621.504-1.125 1.125-1.125H20.25M2.25 6v9m18-10.5v.75c0 .414.336.75.75.75h.75m-1.5-1.5h.375c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-.375m1.5-1.5H21a.75.75 0 00-.75.75v.75m0 0H3.75m0 0h-.375a1.125 1.125 0 01-1.125-1.125V15m1.5 1.5v-.75A.75.75 0 003 15h-.75M15 10.5a3 3 0 11-6 0 3 3 0 016 0Zm3 0h.008v.008H18V10.5Zm-12 0h.008v.008H6V10.5Z",
2343
+ tags: [
2344
+ "money",
2345
+ "cash",
2346
+ "payment",
2347
+ "banknotes"
2348
+ ]
2349
+ },
2350
+ {
2351
+ name: "Calendar",
2352
+ slug: "calendar",
2353
+ src: "M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 7.5v11.25m-18 0A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75m-18 0v-7.5A2.25 2.25 0 015.25 9h13.5A2.25 2.25 0 0121 11.25v7.5",
2354
+ tags: [
2355
+ "date",
2356
+ "schedule",
2357
+ "time",
2358
+ "calendar"
2359
+ ]
2360
+ },
2361
+ {
2362
+ name: "Calendar Plus",
2363
+ slug: "calendar-plus",
2364
+ src: "M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 7.5v11.25m-18 0A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75m-18 0v-7.5A2.25 2.25 0 015.25 9h13.5A2.25 2.25 0 0121 11.25v7.5M12 12v6m3-3h-6",
2365
+ tags: [
2366
+ "date",
2367
+ "schedule",
2368
+ "time",
2369
+ "calendar",
2370
+ "add",
2371
+ "plus"
2372
+ ]
2373
+ },
2374
+ {
2375
+ name: "Calendar Minus",
2376
+ slug: "calendar-minus",
2377
+ src: "M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 7.5v11.25m-18 0A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75m-18 0v-7.5A2.25 2.25 0 015.25 9h13.5A2.25 2.25 0 0121 11.25M15 15H9",
2378
+ tags: [
2379
+ "date",
2380
+ "schedule",
2381
+ "time",
2382
+ "calendar",
2383
+ "subtract",
2384
+ "minus"
2385
+ ]
2386
+ },
2387
+ {
2388
+ name: "Calendar Approve",
2389
+ slug: "calendar-approve",
2390
+ src: "M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 7.5v11.25m-18 0A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75m-18 0v-7.5A2.25 2.25 0 015.25 9h13.5A2.25 2.25 0 0121 11.25M10.5 17.5 15 12.5M9 15.5l1.5 2",
2391
+ tags: [
2392
+ "date",
2393
+ "schedule",
2394
+ "time",
2395
+ "calendar",
2396
+ "approve",
2397
+ "check",
2398
+ "accept"
2399
+ ]
2400
+ },
2401
+ {
2402
+ name: "Calendar Reject",
2403
+ slug: "calendar-reject",
2404
+ src: "M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 7.5v11.25m-18 0A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75m-18 0v-7.5A2.25 2.25 0 015.25 9h13.5A2.25 2.25 0 0121 11.25M9.5 17.5 14.5 12.5M9.5 12.5l5 5",
2405
+ tags: [
2406
+ "date",
2407
+ "schedule",
2408
+ "time",
2409
+ "calendar",
2410
+ "reject",
2411
+ "x-mark",
2412
+ "remove"
2413
+ ]
2414
+ },
2415
+ {
2416
+ name: "Calendar Days",
2417
+ slug: "calendar-days",
2418
+ src: "M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 7.5v11.25m-18 0A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75m-18 0v-7.5A2.25 2.25 0 015.25 9h13.5A2.25 2.25 0 0121 11.25v7.5m-9-6h.008v.008H12v-.008zM12 15h.008v.008H12V15zm0 2.25h.008v.008H12v-.008zM9.75 15h.008v.008H9.75V15zm0 2.25h.008v.008H9.75v-.008zM7.5 15h.008v.008H7.5V15zm0 2.25h.008v.008H7.5v-.008zm6.75-4.5h.008v.008h-.008v-.008zm0 2.25h.008v.008h-.008V15zm0 2.25h.008v.008h-.008v-.008zm2.25-4.5h.008v.008H16.5v-.008zm0 2.25h.008v.008H16.5V15z",
2419
+ tags: [
2420
+ "date",
2421
+ "schedule",
2422
+ "time",
2423
+ "calendar-days"
2424
+ ]
2425
+ },
2426
+ {
2427
+ name: "Briefcase",
2428
+ slug: "briefcase",
2429
+ src: "M20.25 14.15v4.25c0 1.094-.787 2.036-1.872 2.18-2.087.277-4.216.42-6.378.42s-4.291-.143-6.378-.42c-1.085-.144-1.872-1.086-1.872-2.18v-4.25m16.5 0a2.18 2.18 0 00.75-1.661V8.706c0-1.081-.768-2.015-1.837-2.175a48.114 48.114 0 00-3.413-.387m4.5 8.006c-.194.165-.42.295-.675.38A23.978 23.978 0 0112 15.75c-2.648 0-5.195-.429-7.577-1.22a2.016 2.016 0 01-.675-.38m0 0A2.18 2.18 0 013 12.489V8.706c0-1.081.768-2.015 1.837-2.175a48.111 48.111 0 013.413-.387m7.5 0V5.25A2.25 2.25 0 0013.5 3h-3a2.25 2.25 0 00-2.25 2.25v.894m7.5 0a48.667 48.667 0 00-7.5 0M12 12.75h.008v.008H12v-.008z",
2430
+ tags: [
2431
+ "work",
2432
+ "business",
2433
+ "office",
2434
+ "briefcase"
2435
+ ]
2436
+ },
2437
+ {
2438
+ name: "Presentation Chart Line",
2439
+ slug: "presentation-chart-line",
2440
+ src: "M3.75 3v11.25A2.25 2.25 0 006 16.5h2.25M3.75 3h-1.5m1.5 0h16.5m0 0h1.5m-1.5 0v11.25A2.25 2.25 0 0118 16.5h-2.25m-7.5 0h7.5m-7.5 0l-1 3m8.5-3l1 3m0 0l.5 1.5m-.5-1.5h-9.5m0 0l-.5 1.5m.75-9 3-3 2.148 2.148A12.061 12.061 0 0116.5 7.605",
2441
+ tags: [
2442
+ "analytics",
2443
+ "graph",
2444
+ "stats",
2445
+ "presentation-chart-line"
2446
+ ]
2447
+ },
2448
+ {
2449
+ name: "Presentation Media",
2450
+ slug: "presentation-media",
2451
+ src: "M 3.75 3 v 11.25 A 2.25 2.25 0 0 0 6 16.5 h 2.25 M 3.75 3 h -1.5 m 1.5 0 h 16.5 m 0 0 h 1.5 m -1.5 0 v 11.25 A 2.25 2.25 0 0 1 18 16.5 h -2.25 m -7.5 0 h 7.5 m -7.5 0 l -1 3 m 8.5 -3 l 1 3 m 0 0 l 0.5 1.5 m -0.5 -1.5 h -9.5 m 0 0 l -0.5 1.5 M 10 7 l 5.005 2.487 l -5.005 2.513 z",
2452
+ tags: [
2453
+ "analytics",
2454
+ "graph",
2455
+ "screen",
2456
+ "presentation-media",
2457
+ "senangwebs",
2458
+ "presentation",
2459
+ "sw-deck"
2460
+ ]
2461
+ },
2462
+ {
2463
+ name: "Whiteboard",
2464
+ slug: "whiteboard",
2465
+ src: "M3 5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5zM2 17h20M6 17v4M18 17v4",
2466
+ tags: [
2467
+ "draw",
2468
+ "present",
2469
+ "board",
2470
+ "whiteboard",
2471
+ "senangwebs",
2472
+ "vector",
2473
+ "sw-whiteboard"
2474
+ ]
2475
+ },
2476
+ {
2477
+ name: "Chart Line",
2478
+ slug: "chart-line",
2479
+ src: "M4 3v15c0 2 1 3 3 3h13M8 15l3-4 2 2 6-8",
2480
+ tags: [
2481
+ "graph",
2482
+ "analytics",
2483
+ "stats",
2484
+ "chart-line"
2485
+ ]
2486
+ },
2487
+ {
2488
+ name: "Chart Bar",
2489
+ slug: "chart-bar",
2490
+ src: "M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 013 19.875v-6.75zM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V8.625zM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V4.125z",
2491
+ tags: [
2492
+ "graph",
2493
+ "analytics",
2494
+ "stats",
2495
+ "chart-bar"
2496
+ ]
2497
+ },
2498
+ {
2499
+ name: "Chart Pie",
2500
+ slug: "chart-pie",
2501
+ src: "M10.5 6a7.5 7.5 0 1 0 7.5 7.5h-7.5V6Z M13.5 10.5H21A7.5 7.5 0 0 0 13.5 3v7.5Z",
2502
+ tags: [
2503
+ "graph",
2504
+ "analytics",
2505
+ "stats",
2506
+ "chart-pie",
2507
+ "senangwebs",
2508
+ "chart",
2509
+ "sw-yield"
2510
+ ]
2511
+ },
2512
+ {
2513
+ name: "Currency Dollar",
2514
+ slug: "currency-dollar",
2515
+ src: "M12 6v12m-3-2.818l.879.659c1.171.879 3.07.879 4.242 0 1.172-.879 1.172-2.303 0-3.182C13.536 12.219 12.768 12 12 12c-.725 0-1.45-.22-2.003-.659-1.106-.879-1.106-2.303 0-3.182s2.9-.879 4.006 0l.415.33M21 12a9 9 0 11-18 0 9 9 0 0118 0z",
2516
+ tags: [
2517
+ "money",
2518
+ "price",
2519
+ "cost",
2520
+ "usd",
2521
+ "currency-dollar"
2522
+ ]
2523
+ },
2524
+ {
2525
+ name: "Currency Euro",
2526
+ slug: "currency-euro",
2527
+ src: "M14.25 7.756a4.5 4.5 0 100 8.488M7.5 10.5h5.25m-5.25 3h5.25M21 12a9 9 0 11-18 0 9 9 0 0118 0z",
2528
+ tags: [
2529
+ "money",
2530
+ "price",
2531
+ "cost",
2532
+ "eur",
2533
+ "currency-euro"
2534
+ ]
2535
+ },
2536
+ {
2537
+ name: "Currency Pound",
2538
+ slug: "currency-pound",
2539
+ src: "M14.1213 7.62877C12.9497 6.45719 11.0503 6.45719 9.87868 7.62877C9.37424 8.13321 9.08699 8.7726 9.01694 9.43073C8.9944 9.64251 9.01512 9.85582 9.04524 10.0667L9.5512 13.6084C9.68065 14.5146 9.5307 15.4386 9.12135 16.2573L9 16.5L10.5385 15.9872C11.0003 15.8332 11.4997 15.8332 11.9615 15.9872L12.6158 16.2053C13.182 16.394 13.7999 16.3501 14.3336 16.0832L15 15.75M8.25 12H12M21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12Z",
2540
+ tags: [
2541
+ "money",
2542
+ "price",
2543
+ "cost",
2544
+ "gbp",
2545
+ "currency-pound"
2546
+ ]
2547
+ },
2548
+ {
2549
+ name: "Currency Yen",
2550
+ slug: "currency-yen",
2551
+ src: "M9 7.5l3 4.5m0 0l3-4.5M12 12v5.25M15 12H9m6 3H9m12-3a9 9 0 11-18 0 9 9 0 0118 0z",
2552
+ tags: [
2553
+ "money",
2554
+ "price",
2555
+ "cost",
2556
+ "jpy",
2557
+ "currency-yen"
2558
+ ]
2559
+ },
2560
+ {
2561
+ name: "Currency Ringgit",
2562
+ slug: "currency-ringgit",
2563
+ src: "M7 15V9h2a1.5 1.5 0 0 1 0 3H7m2 0l1.5 3M13 15V9l2 3 2-3v6M21 12a9 9 0 11-18 0 9 9 0 0118 0z",
2564
+ tags: [
2565
+ "money",
2566
+ "price",
2567
+ "cost",
2568
+ "myr",
2569
+ "currency-ringgit"
2570
+ ]
2571
+ },
2572
+ {
2573
+ name: "Tabs",
2574
+ slug: "tabs",
2575
+ src: "M21 7.5V18a2.25 2.25 0 0 1-2.25 2.25H5.25A2.25 2.25 0 0 1 3 18V7.5V6a2.25 2.25 0 0 1 2.25-2.25H18.75a2.25 2.25 0 0 1 2.25 2.25V7.5H12V3.75",
2576
+ tags: [
2577
+ "browser",
2578
+ "ui",
2579
+ "navigation",
2580
+ "tabs",
2581
+ "senangwebs",
2582
+ "sw-herd"
2583
+ ]
2584
+ },
2585
+ {
2586
+ name: "Document",
2587
+ slug: "document",
2588
+ src: "M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z",
2589
+ tags: [
2590
+ "file",
2591
+ "paper",
2592
+ "page",
2593
+ "document"
2594
+ ]
2595
+ },
2596
+ {
2597
+ name: "Document Text",
2598
+ slug: "document-text",
2599
+ src: "M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z",
2600
+ tags: [
2601
+ "file",
2602
+ "paper",
2603
+ "page",
2604
+ "document-text"
2605
+ ]
2606
+ },
2607
+ {
2608
+ name: "Document Duplicate",
2609
+ slug: "document-duplicate",
2610
+ src: "M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 01-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 011.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9.06 9.06 0 00-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 01-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 00-3.375-3.375h-1.5a1.125 1.125 0 01-1.125-1.125v-1.5a3.375 3.375 0 00-3.375-3.375H9.75",
2611
+ tags: [
2612
+ "copy",
2613
+ "clone",
2614
+ "file",
2615
+ "document-duplicate"
2616
+ ]
2617
+ },
2618
+ {
2619
+ name: "Folder",
2620
+ slug: "folder",
2621
+ src: "M2.25 12.75V12A2.25 2.25 0 014.5 9.75h15A2.25 2.25 0 0121.75 12v.75m-8.69-6.44l-2.12-2.12a1.5 1.5 0 00-1.061-.44H4.5A2.25 2.25 0 002.25 6v12a2.25 2.25 0 002.25 2.25h15A2.25 2.25 0 0021.75 18V9a2.25 2.25 0 00-2.25-2.25h-5.379a1.5 1.5 0 01-1.06-.44z",
2622
+ tags: [
2623
+ "directory",
2624
+ "organize",
2625
+ "file",
2626
+ "folder"
2627
+ ]
2628
+ },
2629
+ {
2630
+ name: "Folder Open",
2631
+ slug: "folder-open",
2632
+ src: "M3.75 9.776c.112-.017.227-.026.344-.026h15.812c.117 0 .232.009.344.026m-16.5 0a2.25 2.25 0 00-1.883 2.542l.857 6a2.25 2.25 0 002.227 1.932H19.05a2.25 2.25 0 002.227-1.932l.857-6a2.25 2.25 0 00-1.883-2.542m-16.5 0V6A2.25 2.25 0 016 3.75h3.879a1.5 1.5 0 011.06.44l2.122 2.12a1.5 1.5 0 001.06.44H18A2.25 2.25 0 0120.25 9v.776",
2633
+ tags: [
2634
+ "directory",
2635
+ "organize",
2636
+ "file",
2637
+ "folder-open",
2638
+ "senangwebs",
2639
+ "sw-unfold"
2640
+ ]
2641
+ },
2642
+ {
2643
+ name: "Folder Plus",
2644
+ slug: "folder-plus",
2645
+ src: "M12 10.5v6m3-3H9m4.06-7.19l-2.12-2.12a1.5 1.5 0 00-1.061-.44H4.5A2.25 2.25 0 002.25 6v12a2.25 2.25 0 002.25 2.25h15A2.25 2.25 0 0021.75 18V9a2.25 2.25 0 00-2.25-2.25h-5.379a1.5 1.5 0 01-1.06-.44z",
2646
+ tags: [
2647
+ "add folder",
2648
+ "new directory",
2649
+ "folder-plus"
2650
+ ]
2651
+ },
2652
+ {
2653
+ name: "Folder minus",
2654
+ slug: "folder-minus",
2655
+ src: "M12 13.5 12 13.5m3 0H9m4.06-7.19-2.12-2.12a1.5 1.5 0 00-1.061-.44H4.5A2.25 2.25 0 002.25 6v12a2.25 2.25 0 002.25 2.25h15A2.25 2.25 0 0021.75 18V9a2.25 2.25 0 00-2.25-2.25h-5.379a1.5 1.5 0 01-1.06-.44z",
2656
+ tags: [
2657
+ "remove folder",
2658
+ "delete directory",
2659
+ "folder-minus"
2660
+ ]
2661
+ },
2662
+ {
2663
+ name: "Clipboard",
2664
+ slug: "clipboard",
2665
+ src: "M15.666 3.888A2.25 2.25 0 0 0 13.5 2.25h-3c-1.03 0-1.9.693-2.166 1.638m7.332 0c.055.194.084.4.084.612v0a.75.75 0 0 1-.75.75H9a.75.75 0 0 1-.75-.75v0c0-.212.03-.418.084-.612m7.332 0c.646.049 1.288.11 1.927.184 1.1.128 1.907 1.077 1.907 2.185V19.5a2.25 2.25 0 0 1-2.25 2.25H6.75A2.25 2.25 0 0 1 4.5 19.5V6.257c0-1.108.806-2.057 1.907-2.185a48.208 48.208 0 0 1 1.927-.184",
2666
+ tags: [
2667
+ "copy",
2668
+ "paste",
2669
+ "board",
2670
+ "clipboard",
2671
+ "senangwebs",
2672
+ "sw-jot"
2673
+ ]
2674
+ },
2675
+ {
2676
+ name: "Clipboard Document Check",
2677
+ slug: "clipboard-document-check",
2678
+ src: "M11.35 3.836c-.065.21-.1.433-.1.664 0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75 2.25 2.25 0 0 0-.1-.664m-5.8 0A2.251 2.251 0 0 1 13.5 2.25H15c1.012 0 1.867.668 2.15 1.586m-5.8 0c-.376.023-.75.05-1.124.08C9.095 4.01 8.25 4.973 8.25 6.108V8.25m8.9-4.414c.376.023.75.05 1.124.08 1.131.094 1.976 1.057 1.976 2.192V16.5A2.25 2.25 0 0 1 18 18.75h-2.25m-7.5-10.5H4.875c-.621 0-1.125.504-1.125 1.125v11.25c0 .621.504 1.125 1.125 1.125h9.75c.621 0 1.125-.504 1.125-1.125V18.75m-7.5-10.5h6.375c.621 0 1.125.504 1.125 1.125v9.375m-8.25-3 1.5 1.5 3-3.75",
2679
+ tags: [
2680
+ "checklist",
2681
+ "task",
2682
+ "done",
2683
+ "clipboard-document-check"
2684
+ ]
2685
+ },
2686
+ {
2687
+ name: "Paper Clip",
2688
+ slug: "paper-clip",
2689
+ src: "M18.375 12.739l-7.693 7.693a4.5 4.5 0 01-6.364-6.364l10.94-10.94A3 3 0 1119.5 7.372L8.552 18.32m.009-.01l-.01.01m5.699-9.941l-7.81 7.81a1.5 1.5 0 002.112 2.13",
2690
+ tags: [
2691
+ "attach",
2692
+ "file",
2693
+ "link",
2694
+ "paper-clip"
2695
+ ]
2696
+ },
2697
+ {
2698
+ name: "Archive Box",
2699
+ slug: "archive-box",
2700
+ src: "M20.25 7.5l-.625 10.632a2.25 2.25 0 01-2.247 2.118H6.622a2.25 2.25 0 01-2.247-2.118L3.75 7.5M10 11.25h4M3.375 7.5h17.25c.621 0 1.125-.504 1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125z",
2701
+ tags: [
2702
+ "store",
2703
+ "history",
2704
+ "backup",
2705
+ "archive-box"
2706
+ ]
2707
+ },
2708
+ {
2709
+ name: "Inbox",
2710
+ slug: "inbox",
2711
+ src: "M2.25 13.5h3.86a2.25 2.25 0 012.012 1.244l.256.512a2.25 2.25 0 002.013 1.244h3.218a2.25 2.25 0 002.013-1.244l.256-.512a2.25 2.25 0 012.013-1.244h3.859m-19.5.338V18a2.25 2.25 0 002.25 2.25h15A2.25 2.25 0 0021.75 18v-4.162c0-.224-.034-.447-.1-.661L19.24 5.338a2.25 2.25 0 00-2.15-1.588H6.911a2.25 2.25 0 00-2.15 1.588L2.35 13.177a2.25 2.25 0 00-.1.661z",
2712
+ tags: [
2713
+ "email",
2714
+ "message",
2715
+ "tray",
2716
+ "inbox"
2717
+ ]
2718
+ },
2719
+ {
2720
+ name: "Book Open",
2721
+ slug: "book-open",
2722
+ src: "M12 6.042A8.967 8.967 0 006 3.75c-1.052 0-2.062.18-3 .512v14.25A8.987 8.987 0 016 18c2.305 0 4.408.867 6 2.292m0-14.25a8.966 8.966 0 016-2.292c1.052 0 2.062.18 3 .512v14.25A8.987 8.987 0 0018 18a8.967 8.967 0 00-6 2.292m0-14.25v14.25",
2723
+ tags: [
2724
+ "read",
2725
+ "learn",
2726
+ "library",
2727
+ "book-open",
2728
+ "senangwebs",
2729
+ "sw-story"
2730
+ ]
2731
+ },
2732
+ {
2733
+ name: "Book Close",
2734
+ slug: "book-close",
2735
+ src: "M4 18.5v-13A2.5 2.5 0 016.5 3H19a1 1 0 011 1v16a1 1 0 01-1 1H6.5a1 1 0 010-5H20M7 13.5 7 5.5",
2736
+ tags: [
2737
+ "read",
2738
+ "learn",
2739
+ "library",
2740
+ "book-close"
2741
+ ]
2742
+ },
2743
+ {
2744
+ name: "Book Stacked",
2745
+ slug: "book-stacked",
2746
+ src: "M4 3h6a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z M7 3v18 M20.4 18.9c.2.5-.1 1.1-.6 1.3l-1.9.7c-.5.2-1.1-.1-1.3-.6L11.1 5.1c-.2-.5.1-1.1.6-1.3l1.9-.7c.5-.2 1.1.1 1.3.6Z",
2747
+ tags: [
2748
+ "read",
2749
+ "learn",
2750
+ "library",
2751
+ "book-stacked"
2752
+ ]
2753
+ },
2754
+ {
2755
+ name: "Lock Closed",
2756
+ slug: "lock-closed",
2757
+ src: "M16.5 10.5V6.75a4.5 4.5 0 10-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 002.25-2.25v-6.75a2.25 2.25 0 00-2.25-2.25H6.75a2.25 2.25 0 00-2.25 2.25v6.75a2.25 2.25 0 002.25 2.25z",
2758
+ tags: [
2759
+ "secure",
2760
+ "password",
2761
+ "private",
2762
+ "lock-closed"
2763
+ ]
2764
+ },
2765
+ {
2766
+ name: "Lock Open",
2767
+ slug: "lock-open",
2768
+ src: "M13.5 10.5V6.75a4.5 4.5 0 119 0v3.75M3.75 21.75h10.5a2.25 2.25 0 002.25-2.25v-6.75a2.25 2.25 0 00-2.25-2.25H3.75a2.25 2.25 0 00-2.25 2.25v6.75a2.25 2.25 0 002.25 2.25z",
2769
+ tags: [
2770
+ "unlock",
2771
+ "public",
2772
+ "access",
2773
+ "lock-open"
2774
+ ]
2775
+ },
2776
+ {
2777
+ name: "Key",
2778
+ slug: "key",
2779
+ src: "M15.75 5.25a3 3 0 013 3m3 0a6 6 0 01-7.029 5.912c-.563-.097-1.159.026-1.563.43L10.5 17.25H8.25v2.25H6v2.25H2.25v-2.818c0-.597.237-1.17.659-1.591l6.499-6.499c.404-.404.527-1 .43-1.563A6 6 0 1121.75 8.25z",
2780
+ tags: [
2781
+ "password",
2782
+ "access",
2783
+ "secure",
2784
+ "key"
2785
+ ]
2786
+ },
2787
+ {
2788
+ name: "Shield Check",
2789
+ slug: "shield-check",
2790
+ src: "M9 12.75 11.25 15 15 9.75m-3-7.036A11.959 11.959 0 0 1 3.598 6 11.99 11.99 0 0 0 3 9.749c0 5.592 3.824 10.29 9 11.623 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285Z",
2791
+ tags: [
2792
+ "secure",
2793
+ "safe",
2794
+ "verified",
2795
+ "shield-check"
2796
+ ]
2797
+ },
2798
+ {
2799
+ name: "Shield Exclamation",
2800
+ slug: "shield-exclamation",
2801
+ src: "M12 9v3.75M12 15.75h.008v.008H12v-.008zM12 2.714A11.959 11.959 0 0 1 3.598 6 11.99 11.99 0 0 0 3 9.749c0 5.592 3.824 10.29 9 11.623 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285Z",
2802
+ tags: [
2803
+ "danger",
2804
+ "warning",
2805
+ "security",
2806
+ "shield-exclamation"
2807
+ ]
2808
+ },
2809
+ {
2810
+ name: "Exclamation Circle",
2811
+ slug: "exclamation-circle",
2812
+ src: "M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z",
2813
+ tags: [
2814
+ "error",
2815
+ "warning",
2816
+ "alert",
2817
+ "exclamation-circle"
2818
+ ]
2819
+ },
2820
+ {
2821
+ name: "Exclamation Triangle",
2822
+ slug: "exclamation-triangle",
2823
+ src: "M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.008v.008H12v-.008z",
2824
+ tags: [
2825
+ "warning",
2826
+ "danger",
2827
+ "caution",
2828
+ "exclamation-triangle"
2829
+ ]
2830
+ },
2831
+ {
2832
+ name: "Information Circle",
2833
+ slug: "information-circle",
2834
+ src: "M11.25 11.25l.041-.02a.75.75 0 011.063.852l-.708 2.836a.75.75 0 001.063.853l.041-.021M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9-3.75h.008v.008H12V8.25z",
2835
+ tags: [
2836
+ "help",
2837
+ "details",
2838
+ "info",
2839
+ "information-circle"
2840
+ ]
2841
+ },
2842
+ {
2843
+ name: "Question Mark Circle",
2844
+ slug: "question-mark-circle",
2845
+ src: "M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9 5.25h.008v.008H12v-.008z",
2846
+ tags: [
2847
+ "help",
2848
+ "faq",
2849
+ "support",
2850
+ "question-mark-circle",
2851
+ "senangwebs",
2852
+ "question",
2853
+ "sw-quiz"
2854
+ ]
2855
+ },
2856
+ {
2857
+ name: "Bell",
2858
+ slug: "bell",
2859
+ src: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0",
2860
+ tags: [
2861
+ "notification",
2862
+ "alert",
2863
+ "alarm",
2864
+ "bell",
2865
+ "senangwebs",
2866
+ "prompt",
2867
+ "sw-notices"
2868
+ ]
2869
+ },
2870
+ {
2871
+ name: "Bell Alert",
2872
+ slug: "bell-alert",
2873
+ src: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0M3.124 7.5A8.969 8.969 0 015.292 3m13.416 0a8.969 8.969 0 012.168 4.5",
2874
+ tags: [
2875
+ "notification",
2876
+ "alert",
2877
+ "alarm",
2878
+ "bell-alert"
2879
+ ]
2880
+ },
2881
+ {
2882
+ name: "Eye",
2883
+ slug: "eye",
2884
+ src: "M2.036 12.322a1.012 1.012 0 010-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178zM15 12a3 3 0 11-6 0 3 3 0 016 0z",
2885
+ tags: [
2886
+ "view",
2887
+ "show",
2888
+ "visible",
2889
+ "eye"
2890
+ ]
2891
+ },
2892
+ {
2893
+ name: "Eye Slash",
2894
+ slug: "eye-slash",
2895
+ src: "M3.98 8.223A10.477 10.477 0 001.934 12C3.226 16.338 7.244 19.5 12 19.5c.993 0 1.953-.138 2.863-.395M6.228 6.228A10.45 10.45 0 0112 4.5c4.756 0 8.773 3.162 10.065 7.498a10.523 10.523 0 01-4.293 5.774M6.228 6.228L3 3m3.228 3.228l3.65 3.65m7.894 7.894L21 21m-3.228-3.228l-3.65-3.65m0 0a3 3 0 10-4.243-4.243m4.242 4.242L9.88 9.88",
2896
+ tags: [
2897
+ "hide",
2898
+ "invisible",
2899
+ "password",
2900
+ "eye-slash"
2901
+ ]
2902
+ },
2903
+ {
2904
+ name: "Light Bulb",
2905
+ slug: "light-bulb",
2906
+ src: "M12 2.25a7.5 7.5 0 00-7.5 7.5c0 2.5 1.2 4.8 3.1 6.2.8.6 1.4 1.4 1.4 2.4v1.9a.75.75 0 00.75.75h4.5a.75.75 0 00.75-.75v-1.9c0-1 .6-1.8 1.4-2.4 1.9-1.4 3.1-3.7 3.1-6.2a7.5 7.5 0 00-7.5-7.5ZM10 17h4M11 22v0L13 22M9.75 9.75c0-1.25 1.125-2.25 2.25-2.25s2.25 1 2.25 2.25",
2907
+ tags: [
2908
+ "idea",
2909
+ "tip",
2910
+ "solution",
2911
+ "light-bulb"
2912
+ ]
2913
+ },
2914
+ {
2915
+ name: "Bolt",
2916
+ slug: "bolt",
2917
+ src: "M3.75 13.5l10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75z",
2918
+ tags: [
2919
+ "energy",
2920
+ "power",
2921
+ "fast",
2922
+ "bolt"
2923
+ ]
2924
+ },
2925
+ {
2926
+ name: "Moon",
2927
+ slug: "moon",
2928
+ src: "M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z",
2929
+ tags: [
2930
+ "dark mode",
2931
+ "night",
2932
+ "sleep",
2933
+ "moon"
2934
+ ]
2935
+ },
2936
+ {
2937
+ name: "Sun",
2938
+ slug: "sun",
2939
+ src: "M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.263l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z",
2940
+ tags: [
2941
+ "light mode",
2942
+ "day",
2943
+ "bright",
2944
+ "sun"
2945
+ ]
2946
+ },
2947
+ {
2948
+ name: "Cloud",
2949
+ slug: "cloud",
2950
+ src: "M2.25 15a4.5 4.5 0 004.5 4.5H18a3.75 3.75 0 001.332-7.257 3 3 0 00-4.232-3.943 5.25 5.25 0 00-10.233 2.33A4.502 4.502 0 002.25 15z",
2951
+ tags: [
2952
+ "weather",
2953
+ "sky",
2954
+ "cloud"
2955
+ ]
2956
+ },
2957
+ {
2958
+ name: "Thunder",
2959
+ slug: "thunder",
2960
+ src: "M9 3h5L12 8 18 8 8.5 22l3.5-10h-6l2-9z",
2961
+ tags: [
2962
+ "weather",
2963
+ "storm",
2964
+ "lightning",
2965
+ "thunder"
2966
+ ]
2967
+ },
2968
+ {
2969
+ name: "Star",
2970
+ slug: "star",
2971
+ src: "M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.563.045.797.77.364 1.154l-4.22 3.737a.563.563 0 00-.172.527l1.283 5.376c.15.628-.548 1.13-1.066.77l-4.654-3.192a.563.563 0 00-.636 0l-4.654 3.192c-.518.36-1.216-.142-1.066-.77l1.283-5.376a.563.563 0 00-.172-.527l-4.22-3.737c-.433-.384-.199-1.11.364-1.154l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z",
2972
+ tags: [
2973
+ "favorite",
2974
+ "rating",
2975
+ "like",
2976
+ "star"
2977
+ ]
2978
+ },
2979
+ {
2980
+ name: "Heart",
2981
+ slug: "heart",
2982
+ src: "M21 8.25c0-2.485-2.099-4.5-4.688-4.5-1.935 0-3.597 1.126-4.312 2.733-.715-1.607-2.377-2.733-4.313-2.733C5.1 3.75 3 5.765 3 8.25c0 7.22 9 12 9 12s9-4.78 9-12z",
2983
+ tags: [
2984
+ "like",
2985
+ "love",
2986
+ "favorite",
2987
+ "heart"
2988
+ ]
2989
+ },
2990
+ {
2991
+ name: "Hand Thumb Up",
2992
+ slug: "hand-thumb-up",
2993
+ src: "M7.5 11.25h-3v8.25h3m0-8.25v-5.25a2.25 2.25 0 0 1 4.5 0v3.75h3.75a2.25 2.25 0 0 1 2.25 2.25v5.25a2.25 2.25 0 0 1-2.25 2.25h-8.25",
2994
+ tags: [
2995
+ "like",
2996
+ "approve",
2997
+ "good",
2998
+ "hand-thumb-up"
2999
+ ]
3000
+ },
3001
+ {
3002
+ name: "Hand Thumb Down",
3003
+ slug: "hand-thumb-down",
3004
+ src: "M7.5 12.75h-3v-8.25h3m0 8.25v5.25a2.25 2.25 0 0 0 4.5 0v-3.75h3.75a2.25 2.25 0 0 0 2.25-2.25v-5.25a2.25 2.25 0 0 0-2.25-2.25h-8.25",
3005
+ tags: [
3006
+ "dislike",
3007
+ "reject",
3008
+ "bad",
3009
+ "hand-thumb-down"
3010
+ ]
3011
+ },
3012
+ {
3013
+ name: "Flag",
3014
+ slug: "flag",
3015
+ src: "M3 3v1.5M3 21v-6m0 0l2.77-.693a9 9 0 016.208.682l.108.054a9 9 0 006.086.71l3.114-.732a48.524 48.524 0 01-.005-10.499l-3.11.732a9 9 0 01-6.085-.711l-.108-.054a9 9 0 00-6.208-.682L3 4.5M3 15V4.5",
3016
+ tags: [
3017
+ "report",
3018
+ "country",
3019
+ "goal",
3020
+ "flag"
3021
+ ]
3022
+ },
3023
+ {
3024
+ name: "Bookmark",
3025
+ slug: "bookmark",
3026
+ src: "M17.593 3.322c1.1.128 1.907 1.077 1.907 2.185V21L12 17.25 4.5 21V5.507c0-1.108.806-2.057 1.907-2.185a48.507 48.507 0 0111.186 0z",
3027
+ tags: [
3028
+ "save",
3029
+ "favorite",
3030
+ "tag",
3031
+ "bookmark"
3032
+ ]
3033
+ },
3034
+ {
3035
+ name: "Map",
3036
+ slug: "map",
3037
+ src: "M3 7.5v13.5l6-3 6 3 6-3V4.5l-6 3-6-3-6 3Z M9 4.5v13.5 M15 7.5v13.5",
3038
+ tags: [
3039
+ "location",
3040
+ "travel",
3041
+ "guide",
3042
+ "map"
3043
+ ]
3044
+ },
3045
+ {
3046
+ name: "Map Pin",
3047
+ slug: "map-pin",
3048
+ src: "M15 10.5a3 3 0 11-6 0 3 3 0 016 0zM19.5 10.5c0 7.142-7.5 11.25-7.5 11.25S4.5 17.642 4.5 10.5a7.5 7.5 0 1115 0z",
3049
+ tags: [
3050
+ "location",
3051
+ "marker",
3052
+ "spot",
3053
+ "map-pin"
3054
+ ]
3055
+ },
3056
+ {
3057
+ name: "Globe Alt",
3058
+ slug: "globe-alt",
3059
+ src: "M12 21a9.004 9.004 0 008.716-6.747M12 21a9.004 9.004 0 01-8.716-6.747M12 21c2.485 0 4.5-4.03 4.5-9S14.485 3 12 3m0 18c-2.485 0-4.5-4.03-4.5-9S9.515 3 12 3m0 0a8.997 8.997 0 017.843 4.582M12 3a8.997 8.997 0 00-7.843 4.582m15.686 0A11.953 11.953 0 0112 10.5c-2.998 0-5.74-1.1-7.843-2.918m15.686 0A8.959 8.959 0 0121 12c0 .778-.099 1.533-.284 2.253m0 0A17.919 17.919 0 0112 16.5c-3.162 0-6.133-.815-8.716-2.247m0 0A9.015 9.015 0 013 12c0-1.605.42-3.113 1.157-4.418",
3060
+ tags: [
3061
+ "world",
3062
+ "internet",
3063
+ "web",
3064
+ "globe-alt"
3065
+ ]
3066
+ },
3067
+ {
3068
+ name: "Truck",
3069
+ slug: "truck",
3070
+ src: "M8.25 18.75a1.5 1.5 0 01-3 0m3 0a1.5 1.5 0 00-3 0m3 0h6m-9 0H3.375a1.125 1.125 0 01-1.125-1.125V14.25m17.25 4.5a1.5 1.5 0 01-3 0m3 0a1.5 1.5 0 00-3 0m3 0h1.125c.621 0 1.129-.504 1.09-1.124a17.902 17.902 0 00-3.213-9.193 2.056 2.056 0 00-1.58-.86H14.25M16.5 18.75h-2.25m0-11.177v-.958c0-.568-.422-1.048-.987-1.106a48.554 48.554 0 00-10.026 0 1.106 1.106 0 00-.987 1.106v7.635m12-6.677v6.677m0 4.5v-4.5m0 0h-12",
3071
+ tags: [
3072
+ "delivery",
3073
+ "shipping",
3074
+ "transport",
3075
+ "truck"
3076
+ ]
3077
+ },
3078
+ {
3079
+ name: "Cake",
3080
+ slug: "cake",
3081
+ src: "M12 8.25v-1.5m0 1.5c-1.355 0-2.697.056-4.024.166C6.845 8.51 6 9.473 6 10.608v2.513m6-4.871c1.355 0 2.697.056 4.024.166C17.155 8.51 18 9.473 18 10.608v2.513M15 8.25v-1.5m-6 1.5v-1.5m12 9.75l-1.5.75a3.354 3.354 0 01-3 0 3.354 3.354 0 00-3 0 3.354 3.354 0 01-3 0 3.354 3.354 0 00-3 0 3.354 3.354 0 01-3 0L3 16.5m15-3.379a48.474 48.474 0 00-6-.371c-2.032 0-4.034.126-6 .371m12 0c.39.049.777.102 1.163.16 1.07.163 1.837 1.09 1.837 2.175v5.169c0 .621-.504 1.125-1.125 1.125H4.125A1.125 1.125 0 013 20.625v-5.169c0-1.085.768-2.012 1.837-2.175a48.041 48.041 0 011.163-.16",
3082
+ tags: [
3083
+ "birthday",
3084
+ "celebrate",
3085
+ "party",
3086
+ "cake"
3087
+ ]
3088
+ },
3089
+ {
3090
+ name: "Gift",
3091
+ slug: "gift",
3092
+ src: "M21 11.25v8.25a1.5 1.5 0 01-1.5 1.5H4.5a1.5 1.5 0 01-1.5-1.5v-8.25M12 4.875A2.625 2.625 0 109.375 7.5H12m0-2.625V7.5m0-2.625A2.625 2.625 0 1114.625 7.5H12m0 0V21m-8.625-9.75h17.25c.621 0 1.125-.504 1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125z",
3093
+ tags: [
3094
+ "present",
3095
+ "reward",
3096
+ "bonus",
3097
+ "gift"
3098
+ ]
3099
+ },
3100
+ {
3101
+ name: "Trophy",
3102
+ slug: "trophy",
3103
+ src: "M6 9c-1.5 0-3-1.5-3-3V5h3M18 9c1.5 0 3-1.5 3-3V5h-3M6 9V5h12v4c0 3.3-2.7 6-6 6s-6-2.7-6-6zM12 15v3M9 21h6M10 18h4",
3104
+ tags: [
3105
+ "award",
3106
+ "winner",
3107
+ "achievement",
3108
+ "trophy"
3109
+ ]
3110
+ },
3111
+ {
3112
+ name: "Medal",
3113
+ slug: "medal",
3114
+ src: "M7.21 15 2.66 7.14a2 2 0 0 1 .13-2.2L4.4 2.8A2 2 0 0 1 6 2h12a2 2 0 0 1 1.6.8l1.6 2.14a2 2 0 0 1 .14 2.2L16.79 15M11 12 5.12 2.2M13 12l5.88-9.8M8 7h8M12 22a5 5 0 100-10 5 5 0 000 10zM12 18v-2h-.5",
3115
+ tags: [
3116
+ "award",
3117
+ "achievement",
3118
+ "winner",
3119
+ "medal"
3120
+ ]
3121
+ },
3122
+ {
3123
+ name: "Qr Code",
3124
+ slug: "qr-code",
3125
+ src: "M4 3h3a1 1 0 011 1v3a1 1 0 01-1 1h-3a1 1 0 01-1-1v-3a1 1 0 011-1zM17 3h3a1 1 0 011 1v3a1 1 0 01-1 1h-3a1 1 0 01-1-1v-3a1 1 0 011-1zM4 16h3a1 1 0 011 1v3a1 1 0 01-1 1h-3a1 1 0 01-1-1v-3a1 1 0 011-1zM20 16h-2a2 2 0 00-2 2v2M12 8v2a2 2 0 01-2 2H8M4 12h0M12 4h0M16 12h5M12 21v-5",
3126
+ tags: [
3127
+ "scan",
3128
+ "code",
3129
+ "link",
3130
+ "qr-code"
3131
+ ]
3132
+ },
3133
+ {
3134
+ name: "Wifi",
3135
+ slug: "wifi",
3136
+ src: "M 8.25 13.5 a 3.75 3.75 0 0 1 5.25 0 m -8.25 -3 a 7.5 7.5 0 0 1 11.25 0 m -14.25 -3 a 11.25 11.25 0 0 1 17.25 0 M 11 16.5 a 1.125 1.125 0 1 0 0 2.25 a 1.125 1.125 0 0 0 0 -2.25 z",
3137
+ tags: [
3138
+ "internet",
3139
+ "connection",
3140
+ "network",
3141
+ "wifi"
3142
+ ]
3143
+ },
3144
+ {
3145
+ name: "Vr",
3146
+ slug: "vr",
3147
+ src: "M5 7h14a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2h-4l-2.29-2.29a1 1 0 0 0-1.42 0L9 17H5a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2zm2.5 3.5a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3zm9 0a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3z",
3148
+ tags: [
3149
+ "virtual reality",
3150
+ "glasses",
3151
+ "game",
3152
+ "vr"
3153
+ ]
3154
+ },
3155
+ {
3156
+ name: "AR",
3157
+ slug: "ar",
3158
+ src: "m21 7.5-2.25-1.313M21 7.5v2.25m0-2.25-2.25 1.313M3 7.5l2.25-1.313M3 7.5l2.25 1.313M3 7.5v2.25m9 3 2.25-1.313M12 12.75l-2.25-1.313M12 12.75V15m0 6.75 2.25-1.313M12 21.75V19.5m0 2.25-2.25-1.313m0-16.875L12 2.25l2.25 1.313M21 14.25v2.25l-2.25 1.313m-13.5 0L3 16.5v-2.25",
3159
+ tags: [
3160
+ "augmented reality",
3161
+ "3d",
3162
+ "ar",
3163
+ "cube"
3164
+ ]
3165
+ },
3166
+ {
3167
+ name: "Group Object",
3168
+ slug: "group-object",
3169
+ src: "M3 7V5c0-1.1.9-2 2-2h2M17 3h2c1.1 0 2 .9 2 2v2M21 17v2c0 1.1-.9 2-2 2h-2M7 21H5c-1.1 0-2-.9-2-2v-2M8 7h5a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1ZM11 12h5a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1h-5a1 1 0 0 1-1-1v-3a1 1 0 0 1 1-1Z",
3170
+ tags: [
3171
+ "combine",
3172
+ "merge",
3173
+ "group-object"
3174
+ ]
3175
+ },
3176
+ {
3177
+ name: "Ungroup Object",
3178
+ slug: "ungroup-object",
3179
+ src: "M6 4h6a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1ZM12 14h6a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1v-4a1 1 0 0 1 1-1Z",
3180
+ tags: [
3181
+ "separate",
3182
+ "split",
3183
+ "ungroup-object"
3184
+ ]
3185
+ },
3186
+ {
3187
+ name: "Align Left Object",
3188
+ slug: "align-left-object",
3189
+ src: "M7 4h6a1 1 0 011 1v4a1 1 0 01-1 1H7a1 1 0 01-1-1V5a1 1 0 011-1ZM12 14h6a1 1 0 011 1v4a1 1 0 01-1 1h-11a1 1 0 01-1-1v-4a1 1 0 011-1ZM3 21 3 3",
3190
+ tags: [
3191
+ "align",
3192
+ "left",
3193
+ "object"
3194
+ ]
3195
+ },
3196
+ {
3197
+ name: "Align Center Object",
3198
+ slug: "align-center-object",
3199
+ src: "M12 4h3a1 1 0 011 1v4a1 1 0 01-1 1H9a1 1 0 01-1-1V5a1 1 0 011-1ZM12 14h6a1 1 0 011 1v4a1 1 0 01-1 1h-12a1 1 0 01-1-1v-4a1 1 0 011-1ZM12 21 12 3",
3200
+ tags: [
3201
+ "align",
3202
+ "center",
3203
+ "object"
3204
+ ]
3205
+ },
3206
+ {
3207
+ name: "Align Right Object",
3208
+ slug: "align-right-object",
3209
+ src: "M13 4h4a1 1 0 011 1v4a1 1 0 01-1 1H11a1 1 0 01-1-1V5a1 1 0 011-1ZM12 14h5a1 1 0 011 1v4a1 1 0 01-1 1h-11a1 1 0 01-1-1v-4a1 1 0 011-1ZM21 21 21 3",
3210
+ tags: [
3211
+ "align",
3212
+ "right",
3213
+ "object"
3214
+ ]
3215
+ },
3216
+ {
3217
+ name: "Align Top Object",
3218
+ slug: "align-top-object",
3219
+ src: "M12 15h3a1 1 0 011 1v3a1 1 0 01-1 1H9a1 1 0 01-1-1V16a1 1 0 011-1ZM12 7h6a1 1 0 011 1v3a1 1 0 01-1 1h-12a1 1 0 01-1-1v-3a1 1 0 011-1ZM21 4 3 4",
3220
+ tags: [
3221
+ "align",
3222
+ "top",
3223
+ "object"
3224
+ ]
3225
+ },
3226
+ {
3227
+ name: "Align Middle Object",
3228
+ slug: "align-middle-object",
3229
+ src: "M12 4h6a1 1 0 011 1v3a1 1 0 01-1 1H6a1 1 0 01-1-1V5a1 1 0 011-1ZM12 15h6a1 1 0 011 1v3a1 1 0 01-1 1h-12a1 1 0 01-1-1v-3a1 1 0 011-1ZM21 12 3 12",
3230
+ tags: [
3231
+ "align",
3232
+ "middle",
3233
+ "object"
3234
+ ]
3235
+ },
3236
+ {
3237
+ name: "Align Bottom Object",
3238
+ slug: "align-bottom-object",
3239
+ src: "M12 4h3a1 1 0 011 1v3a1 1 0 01-1 1H9a1 1 0 01-1-1V5a1 1 0 011-1ZM12 12h6a1 1 0 011 1v3a1 1 0 01-1 1h-12a1 1 0 01-1-1v-3a1 1 0 011-1ZM21 20 3 20",
3240
+ tags: [
3241
+ "align",
3242
+ "bottom",
3243
+ "object"
3244
+ ]
3245
+ },
3246
+ {
3247
+ name: "Carousel",
3248
+ slug: "carousel",
3249
+ src: "M3 6v12M21 6v12M8 5h8a2 2 0 012 2v10a2 2 0 01-2 2H8a2 2 0 01-2-2V7a2 2 0 012-2Z",
3250
+ tags: [
3251
+ "senangwebs",
3252
+ "carousel",
3253
+ "sw-frame"
3254
+ ]
3255
+ },
3256
+ {
3257
+ name: "Reel",
3258
+ slug: "reel",
3259
+ src: "M6 3h12M6 21h12M19 8v8a2 2 0 01-2 2H7a2 2 0 01-2-2V8a2 2 0 012-2h10a2 2 0 012 2Z",
3260
+ tags: [
3261
+ "video",
3262
+ "movie",
3263
+ "film",
3264
+ "reel",
3265
+ "senangwebs",
3266
+ "sw-reel"
3267
+ ]
3268
+ },
3269
+ {
3270
+ name: "Grid",
3271
+ slug: "grid",
3272
+ src: "M9 3v18M15 3v18M3 9h18M3 15h18M3 21h18M3 3h18M3 3v18M21 3v18",
3273
+ tags: [
3274
+ "layout",
3275
+ "view",
3276
+ "grid"
3277
+ ]
3278
+ },
3279
+ {
3280
+ name: "Tic Tac Toe",
3281
+ slug: "tic-tac-toe",
3282
+ src: "M9 3v18 M15 3v18 M3 9h18 M3 15h18",
3283
+ tags: [
3284
+ "layout",
3285
+ "view",
3286
+ "tic-tac-toe"
3287
+ ]
3288
+ },
3289
+ {
3290
+ name: "Robot",
3291
+ slug: "robot",
3292
+ src: "M6 6h12a2.25 2.25 0 0 1 2.25 2.25v7.5A2.25 2.25 0 0 1 18 18H6a2.25 2.25 0 0 1-2.25-2.25v-7.5A2.25 2.25 0 0 1 6 6zM12 3v3M9 3h6M8.25 12a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5zM15.75 12a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5zM9 15h6M7.5 18v3M16.5 18v3",
3293
+ tags: [
3294
+ "bot",
3295
+ "ai",
3296
+ "automation",
3297
+ "robot"
3298
+ ]
3299
+ },
3300
+ {
3301
+ name: "Chatbot",
3302
+ slug: "chatbot",
3303
+ src: "M6 6h12a2.25 2.25 0 012.25 2.25v7.5A2.25 2.25 0 0118 18h-6l-4 3 0-3H6a2.25 2.25 0 01-2.25-2.25v-7.5A2.25 2.25 0 016 6zM12 3v3M9 3h6M8.25 12a.75.75 0 110-1.5.75.75 0 010 1.5zM15.75 12a.75.75 0 110-1.5.75.75 0 010 1.5zM9 15h6",
3304
+ tags: [
3305
+ "bot",
3306
+ "ai",
3307
+ "support",
3308
+ "chatbot",
3309
+ "senangwebs",
3310
+ "sw-chatbot"
3311
+ ]
3312
+ },
3313
+ {
3314
+ name: "Arrow Left Arrow Right",
3315
+ slug: "arrow-left-arrow-right",
3316
+ src: "M7.5 21 3 16.5m0 0 4.5-4.5M3 16.5h13.5m0-13.5L21 7.5m0 0-4.5 4.5M21 7.5H7.5",
3317
+ tags: [
3318
+ "swap",
3319
+ "exchange",
3320
+ "switch",
3321
+ "arrow-left-arrow-right"
3322
+ ]
3323
+ },
3324
+ {
3325
+ name: "Arrow Up Arrow Down",
3326
+ slug: "arrow-up-arrow-down",
3327
+ src: "M3 7.5 7.5 3m0 0L12 7.5M7.5 3v13.5m13.5 0L16.5 21m0 0L12 16.5m4.5 4.5V7.5",
3328
+ tags: [
3329
+ "sort",
3330
+ "swap",
3331
+ "switch",
3332
+ "arrow-up-arrow-down"
3333
+ ]
3334
+ },
3335
+ {
3336
+ name: "Arrow Left Right",
3337
+ slug: "arrow-left-right",
3338
+ src: "M 3 12 h 18 M 7 16 L 3 12 l 4 -4 M 17 8 L 21 12 l -4 4",
3339
+ tags: [
3340
+ "swap",
3341
+ "horizontal",
3342
+ "arrow-left-right"
3343
+ ]
3344
+ },
3345
+ {
3346
+ name: "Arrow Up Down",
3347
+ slug: "arrow-up-down",
3348
+ src: "M 12 3 v 18 M 8 7 L 12 3 l 4 4 M 16 17 L 12 21 l -4 -4",
3349
+ tags: [
3350
+ "swap",
3351
+ "vertical",
3352
+ "arrow-up-down"
3353
+ ]
3354
+ },
3355
+ {
3356
+ name: "Arrow Up Down Left Right",
3357
+ slug: "arrow-up-down-left-right",
3358
+ src: "M 3 12 h 18 M 12 3 v 18 M 6 15 L 3 12 l 3 -3 M 18 9 L 21 12 l -3 3 M 9 6 L 12 3 l 3 3 M 15 18 L 12 21 l -3 -3",
3359
+ tags: [
3360
+ "move",
3361
+ "all directions",
3362
+ "arrow-up-down-left-right"
3363
+ ]
3364
+ },
3365
+ {
3366
+ name: "Maximize",
3367
+ slug: "maximize",
3368
+ src: "M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15",
3369
+ tags: [
3370
+ "expand",
3371
+ "fullscreen",
3372
+ "maximize"
3373
+ ]
3374
+ },
3375
+ {
3376
+ name: "Minimize",
3377
+ slug: "minimize",
3378
+ src: "M4.5 9h4.5v-4.5m0 4.5L3.75 3.75M19.5 9h-4.5v-4.5m0 4.5L20.25 3.75M19.5 15h-4.5v4.5m0-4.5L20.25 20.25M4.5 15h4.5v4.5m0-4.5L3.75 20.25",
3379
+ tags: [
3380
+ "collapse",
3381
+ "small",
3382
+ "minimize"
3383
+ ]
3384
+ },
3385
+ {
3386
+ name: "Layout",
3387
+ slug: "layout",
3388
+ src: "M3 5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5Z M3 9h18 M12 9v12",
3389
+ tags: [
3390
+ "dashboard",
3391
+ "ui",
3392
+ "grid",
3393
+ "layout"
3394
+ ]
3395
+ },
3396
+ {
3397
+ name: "Focus",
3398
+ slug: "focus",
3399
+ src: "M3 7V5c0-1.1.9-2 2-2h2M17 3h2c1.1 0 2 .9 2 2v2M21 17v2c0 1.1-.9 2-2 2h-2M7 21H5c-1.1 0-2-.9-2-2v-2M5 3 7 3Z",
3400
+ tags: [
3401
+ "focus",
3402
+ "lock in",
3403
+ "scan",
3404
+ "fullscreen"
3405
+ ]
3406
+ },
3407
+ {
3408
+ name: "Hourglass 0",
3409
+ slug: "hourglass-0",
3410
+ src: "M6 2v6h.01L6 8.01 10 12l-4 4 .01.01H6V22h12v-5.99h-.01L18 16l-4-4 4-3.99-.01-.01H18V2H6zM9 6l6 0-3 3z",
3411
+ tags: [
3412
+ "time",
3413
+ "wait",
3414
+ "loading",
3415
+ "hourglass-0"
3416
+ ]
3417
+ },
3418
+ {
3419
+ name: "Hourglass 50",
3420
+ slug: "hourglass-50",
3421
+ src: "M6 2v6h.01L6 8.01 10 12l-4 4 .01.01H6V22h12v-5.99h-.01L18 16l-4-4 4-3.99-.01-.01H18V2H6zM10 7l4 0-2 2zM9 18l3-1L15 18l0 1L9 19z",
3422
+ tags: [
3423
+ "time",
3424
+ "wait",
3425
+ "loading",
3426
+ "hourglass-50"
3427
+ ]
3428
+ },
3429
+ {
3430
+ name: "Hourglass 80",
3431
+ slug: "hourglass-80",
3432
+ src: "M6 2v6h.01L6 8.01 10 12l-4 4 .01.01H6V22h12v-5.99h-.01L18 16l-4-4 4-3.99-.01-.01H18V2H6zM11 8l2 0-1 1zM9 17l3-1L15 17l0 2L9 19z",
3433
+ tags: [
3434
+ "time",
3435
+ "wait",
3436
+ "loading",
3437
+ "hourglass-80"
3438
+ ]
3439
+ },
3440
+ {
3441
+ name: "Hourglass 100",
3442
+ slug: "hourglass-100",
3443
+ src: "M6 2v6h.01L6 8.01 10 12l-4 4 .01.01H6V22h12v-5.99h-.01L18 16l-4-4 4-3.99-.01-.01H18V2H6zM9 17l3-1L15 17l0 2L9 19z",
3444
+ tags: [
3445
+ "time",
3446
+ "wait",
3447
+ "loading",
3448
+ "hourglass-100"
3449
+ ]
3450
+ },
3451
+ {
3452
+ name: "Clock",
3453
+ slug: "clock",
3454
+ src: "M12 6V12L16 12M21 12A9 9 0 113 12 9 9 0 0121 12Z",
3455
+ tags: [
3456
+ "time",
3457
+ "watch",
3458
+ "schedule",
3459
+ "clock",
3460
+ "senangwebs",
3461
+ "time",
3462
+ "sw-epoch"
3463
+ ]
3464
+ },
3465
+ {
3466
+ name: "Time Reset",
3467
+ slug: "time-reset",
3468
+ src: "M3.75 12a8.25 8.25 0 108.25-8.25c-2.3 0-4.5 1-6 2.5L3.75 8.5m0-4.5v4.5h4.5M12 7v5l3 0",
3469
+ tags: [
3470
+ "undo",
3471
+ "history",
3472
+ "restore",
3473
+ "time-reset"
3474
+ ]
3475
+ },
3476
+ {
3477
+ name: "Layer Stacks",
3478
+ slug: "layer-stacks",
3479
+ src: "M3.75 9L12 13.5 20.25 9 12 4.5 3.75 9zm0 4.5l8.25 4.5 8.25-4.5M3.75 18l8.25 4.5 8.25-4.5",
3480
+ tags: [
3481
+ "layers",
3482
+ "stack",
3483
+ "group",
3484
+ "layer-stacks"
3485
+ ]
3486
+ },
3487
+ {
3488
+ name: "Cube",
3489
+ slug: "cube",
3490
+ src: "M21 7.5l-9-5.25L3 7.5m18 0l-9 5.25m9-5.25v9l-9 5.25M3 7.5l9 5.25M3 7.5v9l9 5.25m0-9v9",
3491
+ tags: [
3492
+ "3d",
3493
+ "block",
3494
+ "shape",
3495
+ "cube",
3496
+ "senangwebs",
3497
+ "model",
3498
+ "sw-kiln"
3499
+ ]
3500
+ },
3501
+ {
3502
+ name: "Sphere",
3503
+ slug: "sphere",
3504
+ src: "M21 12a9 9 0 11-18 0 9 9 0 0118 0z M3 12c0 2.5 4.5 4.5 9 4.5s9-2 9-4.5 M12 3c2.5 0 4.5 4.5 4.5 9s-2 9-4.5 9",
3505
+ tags: [
3506
+ "shape",
3507
+ "round",
3508
+ "3d",
3509
+ "sphere"
3510
+ ]
3511
+ },
3512
+ {
3513
+ name: "Cylinder",
3514
+ slug: "cylinder",
3515
+ src: "M21 6.5c0 1.933-4.03 3.5-9 3.5s-9-1.567-9-3.5S7.03 3 12 3s9 1.567 9 3.5z M21 6.5v11c0 1.933-4.03 3.5-9 3.5s-9-1.567-9-3.5v-11",
3516
+ tags: [
3517
+ "shape",
3518
+ "round",
3519
+ "3d",
3520
+ "cylinder"
3521
+ ]
3522
+ },
3523
+ {
3524
+ name: "Tube",
3525
+ slug: "tube",
3526
+ src: "M21 6.5c0 1.933-4.03 3.5-9 3.5s-9-1.567-9-3.5S7 3 12 3s9 1.567 9 3.5zM21 6.5v11c0 1.933-4.03 3.5-9 3.5s-9-1.567-9-3.5v-11M17 6.5c0 .7-2 1.5-5 1.5s-5-.8-5-1.5S9 5 12 5s5 .8 5 1.5zM17 20.4 17 9.5",
3527
+ tags: [
3528
+ "shape",
3529
+ "round",
3530
+ "3d",
3531
+ "tube"
3532
+ ]
3533
+ },
3534
+ {
3535
+ name: "Cone",
3536
+ slug: "cone",
3537
+ src: "M21 19c0 1-3 3-9 3s-9-2-9-3c0-1 3-3 9-3s9 2 9 3zM3 19 12 3l9 16",
3538
+ tags: [
3539
+ "shape",
3540
+ "triangle",
3541
+ "3d",
3542
+ "cone"
3543
+ ]
3544
+ },
3545
+ {
3546
+ name: "Pyramid",
3547
+ slug: "pyramid",
3548
+ src: "M12 3l9.75 15-9.75 3-9.75-3L12 3z M12 3v18",
3549
+ tags: [
3550
+ "shape",
3551
+ "triangle",
3552
+ "3d",
3553
+ "pyramid"
3554
+ ]
3555
+ },
3556
+ {
3557
+ name: "Polygon",
3558
+ slug: "polygon",
3559
+ src: "M8 3l8 0L22 7 16 11 8 11 2 7 8 3M22 7v10M2 7v10M16 11v10M8 11v10M2 17l6 4L16 21 22 17",
3560
+ tags: [
3561
+ "shape",
3562
+ "polygon",
3563
+ "3d",
3564
+ "polygon"
3565
+ ]
3566
+ },
3567
+ {
3568
+ name: "Torus",
3569
+ slug: "torus",
3570
+ src: "M12 5c5 0 8.7 3 9 6s-1.5 8-9 8-9.3-5-9-8 4-6 9-6zM12 8c2.5 0 4.4 1.3 4.5 3s-2 3-4.5 3-4.6-1.3-4.5-3 2-3 4.5-3z",
3571
+ tags: [
3572
+ "shape",
3573
+ "donut",
3574
+ "3d",
3575
+ "torus",
3576
+ "ring"
3577
+ ]
3578
+ },
3579
+ {
3580
+ name: "Plane",
3581
+ slug: "plane",
3582
+ src: "M2 12l10 5 10-5-10-5-10 5zM2 12",
3583
+ tags: [
3584
+ "shape",
3585
+ "flat",
3586
+ "3d",
3587
+ "plane",
3588
+ "surface",
3589
+ "floor"
3590
+ ]
3591
+ },
3592
+ {
3593
+ name: "Wedge",
3594
+ slug: "wedge",
3595
+ src: "M3 21H17L3 7V21ZM3 7 17 21m0 0 4-5M3 7 8 3M8 3 21 16",
3596
+ tags: [
3597
+ "shape",
3598
+ "triangle",
3599
+ "3d",
3600
+ "wedge",
3601
+ "ramp"
3602
+ ]
3603
+ },
3604
+ {
3605
+ name: "Roof",
3606
+ slug: "roof",
3607
+ src: "M10 7 3 19h14L10 7zM10 7 14 5 21 17 17 19",
3608
+ tags: [
3609
+ "shape",
3610
+ "prism",
3611
+ "3d",
3612
+ "roof",
3613
+ "house"
3614
+ ]
3615
+ },
3616
+ {
3617
+ name: "Cylinder Half",
3618
+ slug: "cylinder-half",
3619
+ src: "M3 5a9 3 0 0 1 18 0H3zM3 5v14h18V5M3 19h18",
3620
+ tags: [
3621
+ "shape",
3622
+ "half",
3623
+ "3d",
3624
+ "cylinder-half",
3625
+ "cut"
3626
+ ]
3627
+ },
3628
+ {
3629
+ name: "Sphere Half",
3630
+ slug: "sphere-half",
3631
+ src: "M3 14a9 9 0 0118 0v2c0 1-4 3-9 3s-9-2-9-3v-2zM12 13c-5 0-9 2-9 3S7 19 12 19s9-2 9-3-4-3-9-3",
3632
+ tags: [
3633
+ "shape",
3634
+ "hemisphere",
3635
+ "3d",
3636
+ "sphere-half",
3637
+ "dome"
3638
+ ]
3639
+ },
3640
+ {
3641
+ name: "Heart Extruded",
3642
+ slug: "heart-extruded",
3643
+ src: "M12 5c-1-1.5-2.5-2-4-2C5.5 3 4 4.5 4 7c0 2 1.5 4 8 9 6.5-5 8-7 8-9 0-2.5-1.5-4-4-4-1.5 0-3 .5-4 2zM4 7v5c0 2 1.5 4 8 9v-5M20 7v5c0 2-1.5 4-8 9",
3644
+ tags: [
3645
+ "shape",
3646
+ "love",
3647
+ "3d",
3648
+ "heart-extruded",
3649
+ "valentine"
3650
+ ]
3651
+ },
3652
+ {
3653
+ name: "Torus Knot",
3654
+ slug: "torus-knot",
3655
+ src: "M20.8 12.0 L20.7 13.2 L20.3 14.4 L19.7 15.4 L18.9 16.4 L18.0 17.1 L17.0 17.6 L15.9 17.9 L14.8 18.1 L13.8 18.0 L12.9 17.8 L12.1 17.6 L11.3 17.2 L10.7 16.8 L10.1 16.5 L9.7 16.1 L9.2 15.8 L8.7 15.6 L8.3 15.3 L7.7 15.1 L7.2 14.8 L6.5 14.4 L5.9 14.0 L5.2 13.5 L4.6 12.8 L4.0 12.0 L3.5 11.1 L3.2 10.0 L3.1 8.9 L3.2 7.7 L3.5 6.6 L4.1 5.5 L4.8 4.5 L5.8 3.7 L6.8 3.2 L8.0 2.8 L9.2 2.7 L10.4 2.9 L11.6 3.2 L12.6 3.8 L13.4 4.5 L14.1 5.3 L14.7 6.2 L15.0 7.1 L15.2 8.0 L15.3 8.9 L15.3 9.6 L15.3 10.3 L15.3 10.9 L15.2 11.5 L15.2 12.0 L15.2 12.5 L15.3 13.1 L15.3 13.7 L15.3 14.4 L15.3 15.1 L15.2 16.0 L15.0 16.9 L14.7 17.8 L14.1 18.7 L13.4 19.5 L12.6 20.2 L11.6 20.8 L10.4 21.1 L9.2 21.3 L8.0 21.2 L6.8 20.8 L5.8 20.3 L4.8 19.5 L4.1 18.5 L3.5 17.4 L3.2 16.3 L3.1 15.1 L3.2 14.0 L3.5 12.9 L4.0 12.0 L4.6 11.2 L5.2 10.5 L5.9 10.0 L6.5 9.6 L7.2 9.2 L7.7 8.9 L8.3 8.7 L8.7 8.4 L9.2 8.2 L9.7 7.9 L10.1 7.5 L10.7 7.2 L11.3 6.8 L12.1 6.4 L12.9 6.2 L13.8 6.0 L14.8 5.9 L15.9 6.1 L17.0 6.4 L18.0 6.9 L18.9 7.6 L19.7 8.6 L20.3 9.6 L20.7 10.8 L20.8 12.0Z",
3656
+ tags: [
3657
+ "shape",
3658
+ "knot",
3659
+ "3d",
3660
+ "torus-knot",
3661
+ "twisted"
3662
+ ]
3663
+ },
3664
+ {
3665
+ name: "Tetrahedron",
3666
+ slug: "tetrahedron",
3667
+ src: "M12 3l9 18H3L12 3zM12 3v12M12 15l-9 6M12 15l9 6",
3668
+ tags: [
3669
+ "shape",
3670
+ "pyramid",
3671
+ "3d",
3672
+ "tetrahedron",
3673
+ "platonic"
3674
+ ]
3675
+ },
3676
+ {
3677
+ name: "Octahedron",
3678
+ slug: "octahedron",
3679
+ src: "M12 2 L22 12 L12 22 L2 12 Z M12 2 L12 14 L22 12 M12 22 L12 14 L2 12",
3680
+ tags: [
3681
+ "shape",
3682
+ "diamond",
3683
+ "3d",
3684
+ "octahedron",
3685
+ "platonic"
3686
+ ]
3687
+ },
3688
+ {
3689
+ name: "Icosahedron",
3690
+ slug: "icosahedron",
3691
+ src: "M12 2L21 7L21 17L12 22L3 17L3 7L12 2Z M12 22V15 M12 15L7 9L17 9L12 15Z M12 2L7 9 M12 2L17 9 M21 7L17 9 M21 17L17 9 M21 17L12 15 M3 17L12 15 M3 17L7 9 M3 7L7 9",
3692
+ tags: [
3693
+ "shape",
3694
+ "poly",
3695
+ "3d",
3696
+ "icosahedron",
3697
+ "platonic"
3698
+ ]
3699
+ },
3700
+ {
3701
+ name: "Dodecahedron",
3702
+ slug: "dodecahedron",
3703
+ src: "M12 3 18 6 21 11 20 17 18 21H6L4 17 3 11 6 6zM12 3v6M12 9l-6 5M12 9l6 5M6 14l2 7M18 14l-2 7M18 14 21 11M6 14 3 11",
3704
+ tags: [
3705
+ "shape",
3706
+ "pentagon",
3707
+ "3d",
3708
+ "dodecahedron",
3709
+ "platonic"
3710
+ ]
3711
+ },
3712
+ {
3713
+ name: "Sparkles",
3714
+ slug: "sparkles",
3715
+ src: "M9.813 15.904L9 18.75l-.813-2.846a4.5 4.5 0 00-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 003.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 003.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 00-3.09 3.09zM18.259 8.715L18 9.75l-.259-1.035a3.375 3.375 0 00-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 002.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 002.456 2.456L21.75 6l-1.035.259a3.375 3.375 0 00-2.456 2.456zM16.894 20.567L16.5 21.75l-.394-1.183a2.25 2.25 0 00-1.423-1.423L13.5 18.75l1.183-.394a2.25 2.25 0 001.423-1.423l.394-1.183.394 1.183a2.25 2.25 0 001.423 1.423l1.183.394-1.183.394a2.25 2.25 0 00-1.423 1.423z",
3716
+ tags: [
3717
+ "ai",
3718
+ "magic",
3719
+ "new",
3720
+ "sparkles",
3721
+ "senangwebs",
3722
+ "motion",
3723
+ "sw-animations"
3724
+ ]
3725
+ },
3726
+ {
3727
+ name: "Magic Wand",
3728
+ slug: "magic-wand",
3729
+ src: "m21.64 3.64-1.28-1.28a1.21 1.21 0 00-1.72 0L2.36 18.64a1.21 1.21 0 000 1.72l1.28 1.28a1.2 1.2 0 001.72 0L21.64 5.36a1.2 1.2 0 000-1.72M10.5 10.5l3 3M5 6v4M19 15v4M10 3v2M7 8H3M21 17h-4M11 4H9",
3730
+ tags: [
3731
+ "magic",
3732
+ "wizard",
3733
+ "spell",
3734
+ "magic-wand"
3735
+ ]
3736
+ },
3737
+ {
3738
+ name: "Contrast",
3739
+ slug: "contrast",
3740
+ src: "M12 2.25a9.75 9.75 0 010 19.5m0-19.5a9.75 9.75 0 000 19.5m0-19.5v19.5M8.7 2.827V21.211M5.5 4.736V19.263",
3741
+ tags: [
3742
+ "display",
3743
+ "accessibility",
3744
+ "contrast"
3745
+ ]
3746
+ },
3747
+ {
3748
+ name: "Cursor",
3749
+ slug: "cursor",
3750
+ src: "M3 3l7.07 16.97 2.51-7.39 7.39-2.51L3 3z",
3751
+ tags: [
3752
+ "pointer",
3753
+ "mouse",
3754
+ "click",
3755
+ "cursor"
3756
+ ]
3757
+ },
3758
+ {
3759
+ name: "Square",
3760
+ slug: "square",
3761
+ src: "M4 4h16v16H4z",
3762
+ tags: [
3763
+ "shape",
3764
+ "box",
3765
+ "square"
3766
+ ]
3767
+ },
3768
+ {
3769
+ name: "Rectangle",
3770
+ slug: "rectangle",
3771
+ src: "M3 5h18v14H3z",
3772
+ tags: [
3773
+ "shape",
3774
+ "box",
3775
+ "rectangle"
3776
+ ]
3777
+ },
3778
+ {
3779
+ name: "Circle",
3780
+ slug: "circle",
3781
+ src: "M21 12a9 9 0 11-18 0 9 9 0 0118 0z",
3782
+ tags: [
3783
+ "shape",
3784
+ "round",
3785
+ "circle"
3786
+ ]
3787
+ },
3788
+ {
3789
+ name: "Diamond",
3790
+ slug: "diamond",
3791
+ src: "M12 3l9 9-9 9-9-9 9-9z",
3792
+ tags: [
3793
+ "shape",
3794
+ "rhombus",
3795
+ "diamond"
3796
+ ]
3797
+ },
3798
+ {
3799
+ name: "Hexagon",
3800
+ slug: "hexagon",
3801
+ src: "M12 2l7 4v8l-7 4-7-4V6l7-4z",
3802
+ tags: [
3803
+ "shape",
3804
+ "polygon",
3805
+ "hexagon"
3806
+ ]
3807
+ },
3808
+ {
3809
+ name: "Draw Line",
3810
+ slug: "draw-line",
3811
+ src: "M3 21 21 3",
3812
+ tags: [
3813
+ "edit",
3814
+ "write",
3815
+ "draw",
3816
+ "line",
3817
+ "draw-line"
3818
+ ]
3819
+ },
3820
+ {
3821
+ name: "Draw Curve",
3822
+ slug: "draw-curve",
3823
+ src: "M3 21C6 4 18 20 21 3",
3824
+ tags: [
3825
+ "draw",
3826
+ "curve",
3827
+ "line",
3828
+ "s-curve"
3829
+ ]
3830
+ },
3831
+ {
3832
+ name: "Pencil",
3833
+ slug: "pencil",
3834
+ src: "M16.862 4.487l1.687-1.688a1.875 1.875 0 112.652 2.652L6.832 19.82a4.5 4.5 0 01-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 011.13-1.897L16.863 4.487zm0 0L19.5 7.125",
3835
+ tags: [
3836
+ "edit",
3837
+ "write",
3838
+ "draw",
3839
+ "pencil"
3840
+ ]
3841
+ },
3842
+ {
3843
+ name: "Eraser",
3844
+ slug: "eraser",
3845
+ src: "M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21M5.082 11.09l8.828 8.828",
3846
+ tags: [
3847
+ "delete",
3848
+ "remove",
3849
+ "clear",
3850
+ "eraser"
3851
+ ]
3852
+ },
3853
+ {
3854
+ name: "Scissor",
3855
+ slug: "scissor",
3856
+ src: "M6 3A3 3 0 116 9 3 3 0 116 3M8.12 8.12 19 19M19 5 8.12 15.88M6 15A3 3 0 116 21 3 3 0 116 15M10 14 10 10",
3857
+ tags: [
3858
+ "cut",
3859
+ "tool",
3860
+ "scissor",
3861
+ "senangwebs",
3862
+ "sw-photobooth"
3863
+ ]
3864
+ },
3865
+ {
3866
+ name: "Font",
3867
+ slug: "font",
3868
+ src: "M4 20.3h4M6 20.25l6-16.5 6 16.5M8 15h8M16 20.3h4",
3869
+ tags: [
3870
+ "text",
3871
+ "typography",
3872
+ "letter",
3873
+ "font"
3874
+ ]
3875
+ },
3876
+ {
3877
+ name: "Text",
3878
+ slug: "text",
3879
+ src: "M12 20.25V3.8M5.2 5.5 5.2 3.8h13.6L18.8 5.5M10 20.3h4",
3880
+ tags: [
3881
+ "text",
3882
+ "typography",
3883
+ "letter",
3884
+ "type"
3885
+ ]
3886
+ },
3887
+ {
3888
+ name: "Text Align Center",
3889
+ slug: "text-align-center",
3890
+ src: "M3.75 5h16.5M5.625 9h12.75M3.75 13h16.5M5.625 17h12.75",
3891
+ tags: [
3892
+ "format",
3893
+ "paragraph",
3894
+ "text-align-center"
3895
+ ]
3896
+ },
3897
+ {
3898
+ name: "Text Align Left",
3899
+ slug: "text-align-left",
3900
+ src: "M3.75 5h16.5M3.75 9h12.75M3.75 13h16.5M3.75 17h12.75",
3901
+ tags: [
3902
+ "format",
3903
+ "paragraph",
3904
+ "text-align-left"
3905
+ ]
3906
+ },
3907
+ {
3908
+ name: "Text Align Right",
3909
+ slug: "text-align-right",
3910
+ src: "M3.75 5h16.5M7.5 9h12.75M3.75 13h16.5M7.5 17h12.75",
3911
+ tags: [
3912
+ "format",
3913
+ "paragraph",
3914
+ "text-align-right"
3915
+ ]
3916
+ },
3917
+ {
3918
+ name: "Text Align Justify",
3919
+ slug: "text-align-justify",
3920
+ src: "M3.75 5h16.5M3.75 9h16.5M3.75 13h16.5M3.75 17h16.5",
3921
+ tags: [
3922
+ "format",
3923
+ "paragraph",
3924
+ "text-align-justify"
3925
+ ]
3926
+ },
3927
+ {
3928
+ name: "Sliders Horizontal",
3929
+ slug: "sliders-horizontal",
3930
+ src: "M6 13.5V3.75m0 9.75a1.5 1.5 0 0 1 0 3m0-3a1.5 1.5 0 0 0 0 3m0 3.75V16.5m12-3V3.75m0 9.75a1.5 1.5 0 0 1 0 3m0-3a1.5 1.5 0 0 0 0 3m0 3.75V16.5m-6-9V3.75m0 3.75a1.5 1.5 0 0 1 0 3m0-3a1.5 1.5 0 0 0 0 3m0 9.75V10.5",
3931
+ tags: [
3932
+ "settings",
3933
+ "filters",
3934
+ "adjust",
3935
+ "sliders-horizontal"
3936
+ ]
3937
+ },
3938
+ {
3939
+ name: "Sliders Vertical",
3940
+ slug: "sliders-vertical",
3941
+ src: "M13.5 6H3.75m9.75 0a1.5 1.5 0 0 1 3 0m-3 0a1.5 1.5 0 0 0 3 0m3.75 0H16.5m-3 12H3.75m9.75 0a1.5 1.5 0 0 1 3 0m-3 0a1.5 1.5 0 0 0 3 0m3.75 0H16.5m-9-6H3.75m3.75 0a1.5 1.5 0 0 1 3 0m-3 0a1.5 1.5 0 0 0 3 0m9.75 0H10.5",
3942
+ tags: [
3943
+ "settings",
3944
+ "filters",
3945
+ "adjust",
3946
+ "sliders-vertical"
3947
+ ]
3948
+ }
3949
+ ];
3950
+
1394
3951
  // UI Controller - Handles DOM manipulation and rendering
1395
3952
 
3953
+
1396
3954
  let UIController$1 = class UIController {
1397
3955
  constructor(editor) {
1398
3956
  this.editor = editor;
@@ -1582,9 +4140,18 @@
1582
4140
  const item = document.createElement("div");
1583
4141
  item.className = "hotspot-item" + (isActive ? " active" : "");
1584
4142
 
1585
- const color = document.createElement("div");
1586
- color.className = "hotspot-color";
1587
- color.style.backgroundColor = hotspot.color;
4143
+ const colorIndicator = document.createElement("div");
4144
+ colorIndicator.className = "hotspot-color";
4145
+ colorIndicator.style.backgroundColor = hotspot.color;
4146
+
4147
+ // If hotspot has an icon, show it with the color applied
4148
+ if (hotspot.icon) {
4149
+ colorIndicator.innerHTML = `<ss-icon icon="${hotspot.icon}" thickness="2.2" style="color: ${hotspot.color}; width: 20px; height: 20px;"></ss-icon>`;
4150
+ colorIndicator.style.backgroundColor = "transparent";
4151
+ colorIndicator.style.display = "flex";
4152
+ colorIndicator.style.alignItems = "center";
4153
+ colorIndicator.style.justifyContent = "center";
4154
+ }
1588
4155
 
1589
4156
  const info = document.createElement("div");
1590
4157
  info.className = "hotspot-info";
@@ -1623,7 +4190,7 @@
1623
4190
 
1624
4191
  actions.appendChild(deleteBtn);
1625
4192
 
1626
- item.appendChild(color);
4193
+ item.appendChild(colorIndicator);
1627
4194
  item.appendChild(info);
1628
4195
  item.appendChild(actions);
1629
4196
 
@@ -1634,6 +4201,58 @@
1634
4201
  return item;
1635
4202
  }
1636
4203
 
4204
+ /**
4205
+ * Set active state on icon grid button
4206
+ */
4207
+ setActiveIconButton(iconName) {
4208
+ const grid = document.getElementById("hotspotIconGrid");
4209
+ if (!grid) return;
4210
+
4211
+ // Remove active from all buttons
4212
+ grid.querySelectorAll(".icon-btn").forEach(btn => {
4213
+ btn.classList.remove("active");
4214
+ });
4215
+
4216
+ // Find and activate the matching button
4217
+ const activeBtn = grid.querySelector(`.icon-btn[data-icon="${iconName}"]`);
4218
+ if (activeBtn) {
4219
+ activeBtn.classList.add("active");
4220
+ }
4221
+ }
4222
+
4223
+ /**
4224
+ * Populate icon grid from SenangStart icons (baked in at build time)
4225
+ */
4226
+ populateIconGrid() {
4227
+ const grid = document.getElementById("hotspotIconGrid");
4228
+ if (!grid) return;
4229
+
4230
+ // Clear existing content
4231
+ grid.innerHTML = "";
4232
+
4233
+ // Add "No icon" button first
4234
+ const noIconBtn = document.createElement("button");
4235
+ noIconBtn.type = "button";
4236
+ noIconBtn.className = "icon-btn active";
4237
+ noIconBtn.dataset.icon = "";
4238
+ noIconBtn.title = "No icon";
4239
+ noIconBtn.innerHTML = '<ss-icon icon="x-mark" thickness="1.5" style="opacity: 0.5;"></ss-icon>';
4240
+ grid.appendChild(noIconBtn);
4241
+
4242
+ // Add buttons for each icon from imported JSON
4243
+ iconsData.forEach(icon => {
4244
+ const btn = document.createElement("button");
4245
+ btn.type = "button";
4246
+ btn.className = "icon-btn";
4247
+ btn.dataset.icon = icon.slug;
4248
+ btn.title = icon.name;
4249
+ btn.innerHTML = `<ss-icon icon="${icon.slug}" thickness="2.2"></ss-icon>`;
4250
+ grid.appendChild(btn);
4251
+ });
4252
+
4253
+ console.log(`Loaded ${iconsData.length} icons`);
4254
+ }
4255
+
1637
4256
  /**
1638
4257
  * Update properties panel for hotspot
1639
4258
  */
@@ -1653,6 +4272,8 @@
1653
4272
  document.getElementById("hotspotColor").value = "#00ff00";
1654
4273
  const colorText = document.getElementById("hotspotColorText");
1655
4274
  if (colorText) colorText.value = "#00ff00";
4275
+ // Reset icon grid to "no icon" button
4276
+ this.setActiveIconButton("");
1656
4277
  document.getElementById("hotspotPosX").value = "";
1657
4278
  document.getElementById("hotspotPosY").value = "";
1658
4279
  document.getElementById("hotspotPosZ").value = "";
@@ -1676,6 +4297,9 @@
1676
4297
  colorText.value = hotspot.color || "#00ff00";
1677
4298
  }
1678
4299
 
4300
+ // Update icon grid active button
4301
+ this.setActiveIconButton(hotspot.icon || "");
4302
+
1679
4303
  // Update position inputs
1680
4304
  const pos = hotspot.position || { x: 0, y: 0, z: 0 };
1681
4305
  document.getElementById("hotspotPosX").value = pos.x;
@@ -1690,16 +4314,34 @@
1690
4314
  * Update properties panel for scene
1691
4315
  */
1692
4316
  updateSceneProperties(scene) {
4317
+ const startingPosDisplay = document.getElementById("startingPositionDisplay");
4318
+
1693
4319
  if (!scene) {
1694
4320
  document.getElementById("sceneId").value = "";
1695
4321
  document.getElementById("sceneName").value = "";
1696
4322
  document.getElementById("sceneImageUrl").value = "";
4323
+ if (startingPosDisplay) {
4324
+ startingPosDisplay.textContent = "Not set (camera keeps current position)";
4325
+ }
1697
4326
  return;
1698
4327
  }
1699
4328
 
1700
4329
  document.getElementById("sceneId").value = scene.id || "";
1701
4330
  document.getElementById("sceneName").value = scene.name || "";
1702
4331
  document.getElementById("sceneImageUrl").value = scene.imageUrl || "";
4332
+
4333
+ // Update starting position display
4334
+ if (startingPosDisplay) {
4335
+ if (scene.startingPosition) {
4336
+ const pitchDeg = (scene.startingPosition.pitch * 180 / Math.PI).toFixed(1);
4337
+ const yawDeg = (scene.startingPosition.yaw * 180 / Math.PI).toFixed(1);
4338
+ startingPosDisplay.textContent = `Pitch: ${pitchDeg}° | Yaw: ${yawDeg}°`;
4339
+ startingPosDisplay.style.color = "var(--accent-primary)";
4340
+ } else {
4341
+ startingPosDisplay.textContent = "Not set (camera keeps current position)";
4342
+ startingPosDisplay.style.color = "var(--text-muted)";
4343
+ }
4344
+ }
1703
4345
  }
1704
4346
 
1705
4347
  /**
@@ -1710,10 +4352,6 @@
1710
4352
  document.getElementById("tourDescription").value = config.description || "";
1711
4353
  document.getElementById("tourInitialScene").value =
1712
4354
  config.initialSceneId || "";
1713
- document.getElementById("tourAutoRotate").checked =
1714
- config.autoRotate || false;
1715
- document.getElementById("tourShowCompass").checked =
1716
- config.showCompass || false;
1717
4355
 
1718
4356
  // Also update project name in header if it exists
1719
4357
  const projectName = document.getElementById("project-name");
@@ -1792,11 +4430,136 @@
1792
4430
  }
1793
4431
  };
1794
4432
 
4433
+ /**
4434
+ * IconRenderer - Converts SenangStart icon names to image data URLs for A-Frame
4435
+ */
4436
+ class IconRenderer {
4437
+ constructor() {
4438
+ this.iconCache = new Map();
4439
+ this.renderContainer = null;
4440
+ }
4441
+
4442
+ /**
4443
+ * Initialize the hidden render container
4444
+ */
4445
+ init() {
4446
+ if (this.renderContainer) return;
4447
+
4448
+ this.renderContainer = document.createElement('div');
4449
+ this.renderContainer.id = 'swt-icon-renderer';
4450
+ this.renderContainer.style.cssText = `
4451
+ position: absolute;
4452
+ left: -9999px;
4453
+ top: -9999px;
4454
+ width: 128px;
4455
+ height: 128px;
4456
+ pointer-events: none;
4457
+ visibility: hidden;
4458
+ `;
4459
+ document.body.appendChild(this.renderContainer);
4460
+ }
4461
+
4462
+ /**
4463
+ * Generate an image data URL from a SenangStart icon
4464
+ * @param {string} iconName - SenangStart icon name (e.g., 'arrow-right')
4465
+ * @param {string} color - Hex color for the icon
4466
+ * @param {number} size - Size in pixels (default 128)
4467
+ * @returns {Promise<string>} - Data URL of the icon image
4468
+ */
4469
+ async generateIconDataUrl(iconName, color = '#ffffff', size = 128) {
4470
+ const cacheKey = `${iconName}-${color}-${size}`;
4471
+
4472
+ if (this.iconCache.has(cacheKey)) {
4473
+ return this.iconCache.get(cacheKey);
4474
+ }
4475
+
4476
+ this.init();
4477
+
4478
+ return new Promise((resolve, reject) => {
4479
+ // Create the ss-icon element
4480
+ this.renderContainer.innerHTML = `
4481
+ <ss-icon
4482
+ icon="${iconName}"
4483
+ thickness="2.5"
4484
+ style="color: ${color}; width: ${size}px; height: ${size}px; display: block;"
4485
+ ></ss-icon>
4486
+ `;
4487
+
4488
+ // Wait for the custom element to render
4489
+ setTimeout(() => {
4490
+ try {
4491
+ const ssIcon = this.renderContainer.querySelector('ss-icon');
4492
+ if (!ssIcon || !ssIcon.shadowRoot) {
4493
+ console.warn(`Icon ${iconName} not rendered properly`);
4494
+ resolve(null);
4495
+ return;
4496
+ }
4497
+
4498
+ // Get the SVG from shadow root
4499
+ const svg = ssIcon.shadowRoot.querySelector('svg');
4500
+ if (!svg) {
4501
+ console.warn(`SVG not found for icon ${iconName}`);
4502
+ resolve(null);
4503
+ return;
4504
+ }
4505
+
4506
+ // Clone and prepare SVG
4507
+ const svgClone = svg.cloneNode(true);
4508
+ svgClone.setAttribute('width', size);
4509
+ svgClone.setAttribute('height', size);
4510
+ svgClone.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
4511
+
4512
+ // Apply the color to all paths/elements
4513
+ svgClone.querySelectorAll('path, circle, rect, line, polyline, polygon').forEach(el => {
4514
+ el.setAttribute('stroke', color);
4515
+ // Keep fill as currentColor if it's set
4516
+ const fill = el.getAttribute('fill');
4517
+ if (fill && fill !== 'none') {
4518
+ el.setAttribute('fill', color);
4519
+ }
4520
+ });
4521
+
4522
+ // Convert SVG to data URL
4523
+ const svgString = new XMLSerializer().serializeToString(svgClone);
4524
+ const dataUrl = 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(svgString)));
4525
+
4526
+ // Cache the result
4527
+ this.iconCache.set(cacheKey, dataUrl);
4528
+
4529
+ resolve(dataUrl);
4530
+ } catch (error) {
4531
+ console.error('Error generating icon data URL:', error);
4532
+ resolve(null);
4533
+ }
4534
+ }, 100); // Wait for custom element to render
4535
+ });
4536
+ }
4537
+
4538
+ /**
4539
+ * Clear the icon cache
4540
+ */
4541
+ clearCache() {
4542
+ this.iconCache.clear();
4543
+ }
4544
+
4545
+ /**
4546
+ * Destroy the renderer
4547
+ */
4548
+ destroy() {
4549
+ if (this.renderContainer && this.renderContainer.parentNode) {
4550
+ this.renderContainer.parentNode.removeChild(this.renderContainer);
4551
+ }
4552
+ this.renderContainer = null;
4553
+ this.iconCache.clear();
4554
+ }
4555
+ }
4556
+
1795
4557
  // Export Manager - Handles JSON generation for SWT library
1796
4558
 
1797
4559
  let ExportManager$1 = class ExportManager {
1798
4560
  constructor(editor) {
1799
4561
  this.editor = editor;
4562
+ this.iconRenderer = new IconRenderer();
1800
4563
  }
1801
4564
 
1802
4565
  /**
@@ -1833,8 +4596,13 @@
1833
4596
  // Add appearance
1834
4597
  hotspotData.appearance = {
1835
4598
  color: hotspot.color || "#FF6B6B",
1836
- scale: "2 2 2",
4599
+ scale: hotspot.scale || "2 2 2",
1837
4600
  };
4601
+
4602
+ // Add icon if set
4603
+ if (hotspot.icon) {
4604
+ hotspotData.appearance.icon = hotspot.icon;
4605
+ }
1838
4606
 
1839
4607
  // Add tooltip if title exists
1840
4608
  if (hotspot.title) {
@@ -1846,6 +4614,11 @@
1846
4614
  return hotspotData;
1847
4615
  }),
1848
4616
  };
4617
+
4618
+ // Add starting position if set
4619
+ if (scene.startingPosition) {
4620
+ scenesData[scene.id].startingPosition = scene.startingPosition;
4621
+ }
1849
4622
  });
1850
4623
 
1851
4624
  // Determine initial scene
@@ -1863,6 +4636,41 @@
1863
4636
  return jsonData;
1864
4637
  }
1865
4638
 
4639
+ /**
4640
+ * Generate JSON with icons baked in as SVG data URLs
4641
+ * This ensures the exported HTML doesn't need the SenangStart icons library
4642
+ */
4643
+ async generateJSONWithBakedIcons() {
4644
+ const jsonData = this.generateJSON();
4645
+
4646
+ // Process all scenes and convert icon names to data URLs
4647
+ for (const sceneId of Object.keys(jsonData.scenes)) {
4648
+ const scene = jsonData.scenes[sceneId];
4649
+
4650
+ for (let i = 0; i < scene.hotspots.length; i++) {
4651
+ const hotspot = scene.hotspots[i];
4652
+ const icon = hotspot.appearance?.icon;
4653
+
4654
+ // Skip if no icon or if it's already a data URL or URL
4655
+ if (!icon) continue;
4656
+ if (icon.startsWith('data:') || icon.startsWith('http') || icon.startsWith('/')) continue;
4657
+
4658
+ // Generate SVG data URL from icon name
4659
+ try {
4660
+ const color = hotspot.appearance?.color || '#ffffff';
4661
+ const dataUrl = await this.iconRenderer.generateIconDataUrl(icon, color, 128);
4662
+ if (dataUrl) {
4663
+ hotspot.appearance.icon = dataUrl;
4664
+ }
4665
+ } catch (err) {
4666
+ console.warn(`Failed to bake icon "${icon}" for export:`, err);
4667
+ }
4668
+ }
4669
+ }
4670
+
4671
+ return jsonData;
4672
+ }
4673
+
1866
4674
  /**
1867
4675
  * Export as JSON file
1868
4676
  */
@@ -1907,10 +4715,10 @@
1907
4715
  }
1908
4716
 
1909
4717
  /**
1910
- * Generate HTML viewer code
4718
+ * Generate HTML viewer code with icons baked in
1911
4719
  */
1912
- generateViewerHTML() {
1913
- const jsonData = this.generateJSON();
4720
+ async generateViewerHTML() {
4721
+ const jsonData = await this.generateJSONWithBakedIcons();
1914
4722
  const title = this.editor.config.title || "Virtual Tour";
1915
4723
 
1916
4724
  return `<!DOCTYPE html>
@@ -1923,7 +4731,7 @@
1923
4731
  </head>
1924
4732
  <body>
1925
4733
  <a-scene id="tour-container">
1926
- <a-camera>
4734
+ <a-camera look-controls>
1927
4735
  <a-cursor></a-cursor>
1928
4736
  </a-camera>
1929
4737
  </a-scene>
@@ -1947,11 +4755,11 @@
1947
4755
  }
1948
4756
 
1949
4757
  /**
1950
- * Export as standalone HTML viewer
4758
+ * Export as standalone HTML viewer with icons baked in
1951
4759
  */
1952
- exportViewerHTML() {
4760
+ async exportViewerHTML() {
1953
4761
  try {
1954
- const html = this.generateViewerHTML();
4762
+ const html = await this.generateViewerHTML();
1955
4763
  const title = this.editor.config.title || "tour";
1956
4764
  const filename = sanitizeId(title) + "-viewer.html";
1957
4765
 
@@ -1996,9 +4804,7 @@
1996
4804
  this.config = {
1997
4805
  title: options.projectName || 'My Virtual Tour',
1998
4806
  description: '',
1999
- initialSceneId: '',
2000
- autoRotate: false,
2001
- showCompass: false
4807
+ initialSceneId: ''
2002
4808
  };
2003
4809
 
2004
4810
  // Store initialization options
@@ -2040,13 +4846,16 @@
2040
4846
  const previewInit = await this.previewController.init();
2041
4847
  if (!previewInit) {
2042
4848
  console.error('Failed to initialize preview controller');
2043
- showToast('Failed to initialize preview', 'error');
4849
+ showToast$1('Failed to initialize preview', 'error');
2044
4850
  return false;
2045
4851
  }
2046
4852
 
2047
4853
  // Setup event listeners
2048
4854
  this.setupEventListeners();
2049
4855
 
4856
+ // Populate icon grid
4857
+ this.uiController.populateIconGrid();
4858
+
2050
4859
  // Load saved project if exists (but only if it has valid data)
2051
4860
  if (this.storageManager.hasProject()) {
2052
4861
  try {
@@ -2076,7 +4885,7 @@
2076
4885
  this.render();
2077
4886
  }
2078
4887
 
2079
- showToast('Editor ready', 'success');
4888
+ showToast$1('Editor ready', 'success');
2080
4889
 
2081
4890
  return true;
2082
4891
  }
@@ -2121,7 +4930,7 @@
2121
4930
  });
2122
4931
 
2123
4932
  document.getElementById('addHotspotBtn')?.addEventListener('click', () => {
2124
- this.hotspotEditor.enablePlacementMode();
4933
+ this.addHotspotAtCursor();
2125
4934
  });
2126
4935
 
2127
4936
  document.getElementById('clearHotspotsBtn')?.addEventListener('click', () => {
@@ -2153,6 +4962,19 @@
2153
4962
  this.updateCurrentHotspot('color', e.target.value);
2154
4963
  });
2155
4964
 
4965
+ // Icon grid button clicks
4966
+ document.getElementById('hotspotIconGrid')?.addEventListener('click', (e) => {
4967
+ const btn = e.target.closest('.icon-btn');
4968
+ if (btn) {
4969
+ const iconValue = btn.dataset.icon;
4970
+ // Update active state
4971
+ document.querySelectorAll('#hotspotIconGrid .icon-btn').forEach(b => b.classList.remove('active'));
4972
+ btn.classList.add('active');
4973
+ // Update hotspot
4974
+ this.updateCurrentHotspot('icon', iconValue);
4975
+ }
4976
+ });
4977
+
2156
4978
  document.getElementById('hotspotPosX')?.addEventListener('input', debounce((e) => {
2157
4979
  this.updateCurrentHotspotPosition('x', parseFloat(e.target.value) || 0);
2158
4980
  }, 300));
@@ -2177,6 +4999,14 @@
2177
4999
  this.updateCurrentSceneImage(e.target.value);
2178
5000
  }, 300));
2179
5001
 
5002
+ document.getElementById('setStartingPosBtn')?.addEventListener('click', () => {
5003
+ this.setSceneStartingPosition();
5004
+ });
5005
+
5006
+ document.getElementById('clearStartingPosBtn')?.addEventListener('click', () => {
5007
+ this.clearSceneStartingPosition();
5008
+ });
5009
+
2180
5010
  document.getElementById('tourTitle')?.addEventListener('input', debounce((e) => {
2181
5011
  this.config.title = e.target.value;
2182
5012
  this.markUnsavedChanges();
@@ -2204,16 +5034,6 @@
2204
5034
  this.config.initialSceneId = e.target.value;
2205
5035
  this.markUnsavedChanges();
2206
5036
  });
2207
-
2208
- document.getElementById('tourAutoRotate')?.addEventListener('change', (e) => {
2209
- this.config.autoRotate = e.target.checked;
2210
- this.markUnsavedChanges();
2211
- });
2212
-
2213
- document.getElementById('tourShowCompass')?.addEventListener('change', (e) => {
2214
- this.config.showCompass = e.target.checked;
2215
- this.markUnsavedChanges();
2216
- });
2217
5037
 
2218
5038
  document.getElementById('exportJsonBtn')?.addEventListener('click', () => {
2219
5039
  this.exportManager.exportJSON();
@@ -2223,8 +5043,8 @@
2223
5043
  this.exportManager.copyJSON();
2224
5044
  });
2225
5045
 
2226
- document.getElementById('exportViewerBtn')?.addEventListener('click', () => {
2227
- this.exportManager.exportViewerHTML();
5046
+ document.getElementById('exportViewerBtn')?.addEventListener('click', async () => {
5047
+ await this.exportManager.exportViewerHTML();
2228
5048
  });
2229
5049
 
2230
5050
  document.querySelectorAll('.modal-close').forEach(btn => {
@@ -2267,7 +5087,7 @@
2267
5087
 
2268
5088
  for (const file of files) {
2269
5089
  if (!file.type.startsWith('image/')) {
2270
- showToast(`${file.name} is not an image`, 'error');
5090
+ showToast$1(`${file.name} is not an image`, 'error');
2271
5091
  continue;
2272
5092
  }
2273
5093
 
@@ -2292,7 +5112,15 @@
2292
5112
  position.y = parseFloat(position.y.toFixed(2));
2293
5113
  position.z = parseFloat(position.z.toFixed(2));
2294
5114
  }
2295
- const hotspot = this.hotspotEditor.addHotspot(position);
5115
+
5116
+ // Capture current camera orientation for reliable pointing later
5117
+ const cameraRotation = this.previewController.getCameraRotation();
5118
+ const cameraOrientation = cameraRotation ? {
5119
+ pitch: cameraRotation.x,
5120
+ yaw: cameraRotation.y
5121
+ } : null;
5122
+
5123
+ const hotspot = this.hotspotEditor.addHotspot(position, '', cameraOrientation);
2296
5124
  if (hotspot) {
2297
5125
  this.lastRenderedSceneIndex = -1;
2298
5126
  this.render();
@@ -2302,6 +5130,26 @@
2302
5130
  }
2303
5131
  }
2304
5132
 
5133
+ /**
5134
+ * Add hotspot at current cursor position (center of view)
5135
+ * This uses the A-Cursor's raycaster intersection with the sky sphere
5136
+ */
5137
+ addHotspotAtCursor() {
5138
+ const scene = this.sceneManager.getCurrentScene();
5139
+ if (!scene) {
5140
+ showToast$1('Please select a scene first', 'error');
5141
+ return;
5142
+ }
5143
+
5144
+ const position = this.previewController.getCursorIntersection();
5145
+ if (!position) {
5146
+ showToast$1('Could not get cursor position. Please ensure the preview is loaded.', 'error');
5147
+ return;
5148
+ }
5149
+
5150
+ this.addHotspotAtPosition(position);
5151
+ }
5152
+
2305
5153
  /**
2306
5154
  * Select scene by index
2307
5155
  */
@@ -2337,8 +5185,8 @@
2337
5185
  this.uiController.updateTargetSceneOptions();
2338
5186
  this.uiController.switchTab('hotspot');
2339
5187
 
2340
- if (hotspot && hotspot.position) {
2341
- this.previewController.pointCameraToHotspot(hotspot.position);
5188
+ if (hotspot) {
5189
+ this.previewController.pointCameraToHotspot(hotspot);
2342
5190
  }
2343
5191
  }
2344
5192
  }
@@ -2412,6 +5260,10 @@
2412
5260
 
2413
5261
  hotspot.position[axis] = value;
2414
5262
 
5263
+ // Clear camera orientation since position changed manually
5264
+ // Will fallback to position-based calculation when pointing camera
5265
+ hotspot.cameraOrientation = null;
5266
+
2415
5267
  const pos = hotspot.position;
2416
5268
  const distance = Math.sqrt(pos.x * pos.x + pos.y * pos.y + pos.z * pos.z);
2417
5269
  if (distance > 10) {
@@ -2421,7 +5273,7 @@
2421
5273
  pos.z *= scale;
2422
5274
 
2423
5275
  document.getElementById(`hotspotPos${axis.toUpperCase()}`).value = pos[axis].toFixed(2);
2424
- showToast('Position clamped to 10-unit radius', 'info');
5276
+ showToast$1('Position clamped to 10-unit radius', 'info');
2425
5277
  }
2426
5278
 
2427
5279
  await this.previewController.updateHotspotMarker(index);
@@ -2460,12 +5312,55 @@
2460
5312
  if (scene) {
2461
5313
  await this.previewController.loadScene(scene);
2462
5314
  this.lastRenderedSceneIndex = index;
2463
- showToast('Scene image updated', 'success');
5315
+ showToast$1('Scene image updated', 'success');
2464
5316
  }
2465
5317
  this.markUnsavedChanges();
2466
5318
  }
2467
5319
  }
2468
5320
 
5321
+ /**
5322
+ * Set scene starting position to current camera rotation
5323
+ */
5324
+ setSceneStartingPosition() {
5325
+ const scene = this.sceneManager.getCurrentScene();
5326
+ if (!scene) {
5327
+ showToast$1('No scene selected', 'error');
5328
+ return;
5329
+ }
5330
+
5331
+ const rotation = this.previewController.getCameraRotation();
5332
+ if (!rotation) {
5333
+ showToast$1('Could not get camera rotation', 'error');
5334
+ return;
5335
+ }
5336
+
5337
+ scene.startingPosition = {
5338
+ pitch: rotation.x,
5339
+ yaw: rotation.y
5340
+ };
5341
+
5342
+ this.uiController.updateSceneProperties(scene);
5343
+ this.markUnsavedChanges();
5344
+ showToast$1('Starting position set', 'success');
5345
+ }
5346
+
5347
+ /**
5348
+ * Clear scene starting position
5349
+ */
5350
+ clearSceneStartingPosition() {
5351
+ const scene = this.sceneManager.getCurrentScene();
5352
+ if (!scene) {
5353
+ showToast$1('No scene selected', 'error');
5354
+ return;
5355
+ }
5356
+
5357
+ scene.startingPosition = null;
5358
+
5359
+ this.uiController.updateSceneProperties(scene);
5360
+ this.markUnsavedChanges();
5361
+ showToast$1('Starting position cleared', 'success');
5362
+ }
5363
+
2469
5364
  /**
2470
5365
  * Render all UI
2471
5366
  */
@@ -2517,7 +5412,7 @@
2517
5412
 
2518
5413
  if (this.storageManager.saveProject(projectData)) {
2519
5414
  this.hasUnsavedChanges = false;
2520
- showToast('Project saved', 'success');
5415
+ showToast$1('Project saved', 'success');
2521
5416
  return true;
2522
5417
  }
2523
5418
  return false;
@@ -2533,7 +5428,7 @@
2533
5428
  this.sceneManager.loadScenes(projectData.scenes || []);
2534
5429
  this.hasUnsavedChanges = false;
2535
5430
  this.render();
2536
- showToast('Project loaded', 'success');
5431
+ showToast$1('Project loaded', 'success');
2537
5432
  return true;
2538
5433
  }
2539
5434
  return false;
@@ -2552,16 +5447,14 @@
2552
5447
  this.config = {
2553
5448
  title: 'My Virtual Tour',
2554
5449
  description: '',
2555
- initialSceneId: '',
2556
- autoRotate: false,
2557
- showCompass: false
5450
+ initialSceneId: ''
2558
5451
  };
2559
5452
 
2560
5453
  this.sceneManager.clearScenes();
2561
5454
  this.hasUnsavedChanges = false;
2562
5455
  this.render();
2563
5456
 
2564
- showToast('New project created', 'success');
5457
+ showToast$1('New project created', 'success');
2565
5458
  return true;
2566
5459
  }
2567
5460
 
@@ -2591,7 +5484,7 @@
2591
5484
  this.render();
2592
5485
  this.uiController.setLoading(false);
2593
5486
 
2594
- showToast('Project imported successfully', 'success');
5487
+ showToast$1('Project imported successfully', 'success');
2595
5488
  } catch (error) {
2596
5489
  this.uiController.setLoading(false);
2597
5490
  console.error('Import failed:', error);