senangwebs-tour 1.0.3 → 1.0.6

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,
@@ -401,22 +423,43 @@
401
423
 
402
424
  /**
403
425
  * Add new scene
426
+ * @param {File|Object} fileOrConfig - Either a File object or a scene config object
427
+ * @param {string} fileOrConfig.id - Scene ID (if config object)
428
+ * @param {string} fileOrConfig.name - Scene name (if config object)
429
+ * @param {string} fileOrConfig.imageUrl - Image URL (if config object)
430
+ * @param {string} fileOrConfig.thumbnail - Thumbnail URL (if config object)
431
+ * @param {Array} fileOrConfig.hotspots - Hotspots array (if config object)
404
432
  */
405
- async addScene(file) {
433
+ async addScene(fileOrConfig) {
406
434
  try {
407
- // Generate thumbnail
408
- const thumbnail = await generateThumbnail(file);
409
-
410
- // Load full image
411
- const imageDataUrl = await loadImageAsDataUrl(file);
412
-
413
- const scene = {
414
- id: sanitizeId$1(file.name.replace(/\.[^/.]+$/, "")),
415
- name: file.name.replace(/\.[^/.]+$/, ""),
416
- imageUrl: imageDataUrl,
417
- thumbnail: thumbnail,
418
- hotspots: [],
419
- };
435
+ let scene;
436
+
437
+ // Check if it's a File/Blob or a config object
438
+ if (fileOrConfig instanceof File || fileOrConfig instanceof Blob) {
439
+ // Original behavior: handle File upload
440
+ const thumbnail = await generateThumbnail(fileOrConfig);
441
+ const imageDataUrl = await loadImageAsDataUrl(fileOrConfig);
442
+
443
+ scene = {
444
+ id: sanitizeId$1(fileOrConfig.name.replace(/\.[^/.]+$/, "")),
445
+ name: fileOrConfig.name.replace(/\.[^/.]+$/, ""),
446
+ imageUrl: imageDataUrl,
447
+ thumbnail: thumbnail,
448
+ hotspots: [],
449
+ };
450
+ } else if (typeof fileOrConfig === "object" && fileOrConfig !== null) {
451
+ // Handle config object with URL strings
452
+ scene = {
453
+ id: fileOrConfig.id || sanitizeId$1(`scene-${Date.now()}`),
454
+ name: fileOrConfig.name || "Untitled Scene",
455
+ imageUrl: fileOrConfig.imageUrl || "",
456
+ thumbnail: fileOrConfig.thumbnail || fileOrConfig.imageUrl || "",
457
+ hotspots: fileOrConfig.hotspots || [],
458
+ ...(fileOrConfig.startingPosition && { startingPosition: fileOrConfig.startingPosition }),
459
+ };
460
+ } else {
461
+ throw new Error("Invalid argument: expected File, Blob, or scene config object");
462
+ }
420
463
 
421
464
  this.scenes.push(scene);
422
465
  this.currentSceneIndex = this.scenes.length - 1;
@@ -591,66 +634,15 @@
591
634
  constructor(editor) {
592
635
  this.editor = editor;
593
636
  this.currentHotspotIndex = -1;
594
- this.placementMode = false;
595
- }
596
-
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
637
  }
627
638
 
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
639
  /**
651
640
  * Add hotspot at position
641
+ * @param {Object} position - The 3D position {x, y, z}
642
+ * @param {string} targetSceneId - Target scene ID for navigation
643
+ * @param {Object} cameraOrientation - Camera orientation at creation {pitch, yaw} in radians
652
644
  */
653
- addHotspot(position, targetSceneId = '') {
645
+ addHotspot(position, targetSceneId = '', cameraOrientation = null) {
654
646
  const scene = this.editor.sceneManager.getCurrentScene();
655
647
  if (!scene) {
656
648
  showToast$1('No scene selected', 'error');
@@ -661,17 +653,18 @@
661
653
  id: generateId('hotspot'),
662
654
  type: 'navigation',
663
655
  position: position,
656
+ cameraOrientation: cameraOrientation, // Store camera pitch/yaw for reliable pointing
664
657
  targetSceneId: targetSceneId,
665
658
  title: 'New Hotspot',
666
659
  description: '',
667
660
  color: '#00ff00',
668
- icon: ''
661
+ icon: '',
662
+ scale: '1 1 1'
669
663
  };
670
664
 
671
665
  scene.hotspots.push(hotspot);
672
666
  this.currentHotspotIndex = scene.hotspots.length - 1;
673
667
 
674
- this.disablePlacementMode();
675
668
  showToast$1('Hotspot added', 'success');
676
669
 
677
670
  return hotspot;
@@ -787,6 +780,9 @@
787
780
  y: original.position.y,
788
781
  z: original.position.z
789
782
  };
783
+
784
+ // Clear camera orientation since position changed - will fallback to position-based calculation
785
+ duplicate.cameraOrientation = null;
790
786
 
791
787
  scene.hotspots.push(duplicate);
792
788
  this.currentHotspotIndex = scene.hotspots.length - 1;
@@ -993,6 +989,7 @@
993
989
  name: s.name,
994
990
  panorama: s.imageUrl,
995
991
  hotspots: sceneHotspots,
992
+ startingPosition: s.startingPosition || null,
996
993
  };
997
994
  });
998
995
 
@@ -1000,10 +997,6 @@
1000
997
  title: scene.name,
1001
998
  initialScene: scene.id,
1002
999
  scenes: allScenes,
1003
- settings: {
1004
- autoRotate: false,
1005
- showCompass: false,
1006
- },
1007
1000
  };
1008
1001
 
1009
1002
  try {
@@ -1040,15 +1033,18 @@
1040
1033
  // Hide loading animation after scene loads
1041
1034
  this.hideLoading();
1042
1035
 
1043
- // Restore camera rotation if preserved
1036
+ // Handle camera rotation after scene loads
1044
1037
  if (savedRotation && preserveCameraRotation) {
1038
+ // Restore previous camera rotation
1045
1039
  this.setCameraRotation(savedRotation);
1040
+ } else if (scene.startingPosition) {
1041
+ // Set camera to scene's starting position immediately
1042
+ this.setCameraRotation({
1043
+ x: scene.startingPosition.pitch,
1044
+ y: scene.startingPosition.yaw,
1045
+ z: 0
1046
+ });
1046
1047
  }
1047
-
1048
- // Setup click handler after a short delay to ensure A-Frame is ready
1049
- setTimeout(() => {
1050
- this.setupClickHandler();
1051
- }, 500);
1052
1048
  } catch (error) {
1053
1049
  console.error("Failed to load preview:", error);
1054
1050
  showToast$1("Failed to load preview: " + error.message, "error");
@@ -1058,76 +1054,73 @@
1058
1054
  }
1059
1055
 
1060
1056
  /**
1061
- * Setup click handler for hotspot placement
1057
+ * Get the current cursor intersection point with the sky sphere.
1058
+ * Raycasts from the camera center (where the A-Cursor points) to find the intersection.
1059
+ * @returns {Object|null} The 3D position {x, y, z} or null if no intersection
1062
1060
  */
1063
- setupClickHandler() {
1064
- if (!this.tour) {
1065
- return;
1066
- }
1067
-
1068
- const aframeScene = this.previewContainer.querySelector("a-scene");
1061
+ getCursorIntersection() {
1062
+ const aframeScene = this.previewContainer?.querySelector("a-scene");
1069
1063
  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);
1064
+ return null;
1077
1065
  }
1078
1066
 
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
- };
1067
+ const camera = aframeScene.querySelector("[camera]");
1068
+ const sky = aframeScene.querySelector("a-sky");
1105
1069
 
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
1070
+ if (!camera || !sky) {
1071
+ return null;
1072
+ }
1110
1073
 
1111
- // Raycast against the sky sphere
1112
- const intersects = raycaster.intersectObject(sky.object3D, true);
1074
+ // Get pitch and yaw from look-controls (the authoritative source in A-Frame)
1075
+ const lookControls = camera.components?.["look-controls"];
1076
+ let pitch = 0;
1077
+ let yaw = 0;
1113
1078
 
1114
- if (intersects.length > 0) {
1115
- intersection = intersects[0];
1116
- } else {
1117
- showToast$1("Click on the panorama image", "warning");
1118
- return;
1119
- }
1120
- }
1079
+ if (lookControls && lookControls.pitchObject && lookControls.yawObject) {
1080
+ pitch = lookControls.pitchObject.rotation.x;
1081
+ yaw = lookControls.yawObject.rotation.y;
1082
+ } else {
1083
+ // Fallback to object3D rotation
1084
+ pitch = camera.object3D.rotation.x;
1085
+ yaw = camera.object3D.rotation.y;
1086
+ }
1121
1087
 
1122
- const point = intersection.point;
1123
- const position = {
1088
+ // Calculate direction vector from pitch/yaw
1089
+ // In A-Frame/Three.js coordinate system:
1090
+ // - Looking forward is -Z
1091
+ // - Yaw rotates around Y axis
1092
+ // - Pitch rotates around X axis
1093
+ const direction = new THREE.Vector3();
1094
+ direction.x = -Math.sin(yaw) * Math.cos(pitch);
1095
+ direction.y = Math.sin(pitch);
1096
+ direction.z = -Math.cos(yaw) * Math.cos(pitch);
1097
+ direction.normalize();
1098
+
1099
+ // Create raycaster from camera position in the direction we're looking
1100
+ const raycaster = new THREE.Raycaster();
1101
+ const origin = new THREE.Vector3(0, 0, 0); // Camera is typically at origin in 360 viewer
1102
+ raycaster.set(origin, direction);
1103
+
1104
+ // Raycast against the sky sphere
1105
+ const intersects = raycaster.intersectObject(sky.object3D, true);
1106
+
1107
+ if (intersects.length > 0) {
1108
+ const point = intersects[0].point;
1109
+
1110
+ // Calculate an upward offset to center the hotspot visual on the cursor
1111
+ // The offset is applied along the "up" direction relative to the sphere surface
1112
+ // For a sphere, we shift the point slightly in the Y direction (vertical up in world space)
1113
+ // The offset compensates for the hotspot visual being centered, so the top aligns with cursor
1114
+ const offsetAmount = 200; // Adjust this value to fine-tune alignment
1115
+
1116
+ return {
1124
1117
  x: parseFloat(point.x.toFixed(2)),
1125
- y: parseFloat(point.y.toFixed(2)),
1118
+ y: parseFloat((point.y + offsetAmount).toFixed(2)),
1126
1119
  z: parseFloat(point.z.toFixed(2)),
1127
1120
  };
1128
- this.editor.addHotspotAtPosition(position);
1129
- };
1130
- aframeScene.addEventListener("click", this.clickHandler);
1121
+ }
1122
+
1123
+ return null;
1131
1124
  }
1132
1125
 
1133
1126
  /**
@@ -1233,10 +1226,12 @@
1233
1226
  }
1234
1227
 
1235
1228
  /**
1236
- * Point camera to hotspot position
1229
+ * Point camera to hotspot
1230
+ * Uses stored camera orientation if available, otherwise calculates from position
1231
+ * @param {Object} hotspot - The hotspot object with position and optional cameraOrientation
1237
1232
  */
1238
- pointCameraToHotspot(hotspotPosition) {
1239
- if (!hotspotPosition) {
1233
+ pointCameraToHotspot(hotspot) {
1234
+ if (!hotspot) {
1240
1235
  return;
1241
1236
  }
1242
1237
 
@@ -1250,25 +1245,36 @@
1250
1245
  return;
1251
1246
  }
1252
1247
 
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
- );
1248
+ let pitch, yaw;
1249
+
1250
+ // Use stored camera orientation if available (more reliable)
1251
+ if (hotspot.cameraOrientation) {
1252
+ // Stored values are in radians, convert to degrees for animateCameraRotation
1253
+ pitch = hotspot.cameraOrientation.pitch * (180 / Math.PI);
1254
+ yaw = hotspot.cameraOrientation.yaw * (180 / Math.PI);
1255
+ } else if (hotspot.position) {
1256
+ // Fallback: calculate from position (for legacy hotspots without cameraOrientation)
1257
+ const hotspotPosition = hotspot.position;
1258
+ const cameraPos = camera.object3D.position;
1259
+
1260
+ // Calculate direction vector from camera to hotspot
1261
+ const direction = new THREE.Vector3(
1262
+ hotspotPosition.x - cameraPos.x,
1263
+ hotspotPosition.y - cameraPos.y,
1264
+ hotspotPosition.z - cameraPos.z
1265
+ );
1262
1266
 
1263
- // Calculate spherical coordinates (yaw and pitch)
1264
- const distance = direction.length();
1267
+ // Calculate spherical coordinates (yaw and pitch)
1268
+ const distance = direction.length();
1265
1269
 
1266
- // Pitch (up/down rotation around X-axis) - in degrees
1267
- const pitch = Math.asin(direction.y / distance) * (180 / Math.PI);
1270
+ // Pitch (up/down rotation around X-axis) - in degrees
1271
+ pitch = Math.asin(direction.y / distance) * (180 / Math.PI);
1268
1272
 
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);
1273
+ // Yaw (left/right rotation around Y-axis) - in degrees
1274
+ yaw = Math.atan2(direction.x, direction.z) * (180 / Math.PI);
1275
+ } else {
1276
+ return;
1277
+ }
1272
1278
 
1273
1279
  // Apply smooth rotation with animation
1274
1280
  this.animateCameraRotation(camera, { x: pitch, y: yaw, z: 0 });
@@ -1276,15 +1282,29 @@
1276
1282
 
1277
1283
  /**
1278
1284
  * Animate camera rotation smoothly
1285
+ * Uses look-controls internal pitchObject/yawObject to avoid being overwritten
1279
1286
  */
1280
1287
  animateCameraRotation(camera, targetRotation, duration = 800) {
1281
1288
  if (!camera || !camera.object3D) return;
1282
1289
 
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
- };
1290
+ // Get look-controls component
1291
+ const lookControls = camera.components?.["look-controls"];
1292
+
1293
+ // Get current rotation - prefer look-controls internal state
1294
+ let startRotation;
1295
+ if (lookControls && lookControls.pitchObject && lookControls.yawObject) {
1296
+ startRotation = {
1297
+ x: lookControls.pitchObject.rotation.x * (180 / Math.PI),
1298
+ y: lookControls.yawObject.rotation.y * (180 / Math.PI),
1299
+ z: 0,
1300
+ };
1301
+ } else {
1302
+ startRotation = {
1303
+ x: camera.object3D.rotation.x * (180 / Math.PI),
1304
+ y: camera.object3D.rotation.y * (180 / Math.PI),
1305
+ z: 0,
1306
+ };
1307
+ }
1288
1308
 
1289
1309
  // Handle angle wrapping for smooth rotation
1290
1310
  let deltaY = targetRotation.y - startRotation.y;
@@ -1307,19 +1327,22 @@
1307
1327
  ? 2 * progress * progress
1308
1328
  : 1 - Math.pow(-2 * progress + 2, 2) / 2;
1309
1329
 
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
- };
1330
+ // Interpolate rotation (in degrees)
1331
+ const currentX = startRotation.x + (targetRotation.x - startRotation.x) * eased;
1332
+ const currentY = startRotation.y + (endRotationY - startRotation.y) * eased;
1316
1333
 
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
- );
1334
+ // Apply rotation using look-controls internal objects (in radians)
1335
+ if (lookControls && lookControls.pitchObject && lookControls.yawObject) {
1336
+ lookControls.pitchObject.rotation.x = currentX * (Math.PI / 180);
1337
+ lookControls.yawObject.rotation.y = currentY * (Math.PI / 180);
1338
+ } else {
1339
+ // Fallback to direct rotation
1340
+ camera.object3D.rotation.set(
1341
+ currentX * (Math.PI / 180),
1342
+ currentY * (Math.PI / 180),
1343
+ 0
1344
+ );
1345
+ }
1323
1346
 
1324
1347
  if (progress < 1) {
1325
1348
  requestAnimationFrame(animate);
@@ -1391,8 +1414,2564 @@
1391
1414
  }
1392
1415
  };
1393
1416
 
1417
+ var iconsData = [
1418
+ {
1419
+ name: "Bars 3",
1420
+ slug: "bars-3",
1421
+ src: "M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5",
1422
+ tags: [
1423
+ "menu",
1424
+ "hamburger",
1425
+ "navigation",
1426
+ "bars-3"
1427
+ ]
1428
+ },
1429
+ {
1430
+ name: "X Mark",
1431
+ slug: "x-mark",
1432
+ src: "M6 18L18 6M6 6l12 12",
1433
+ tags: [
1434
+ "close",
1435
+ "delete",
1436
+ "remove",
1437
+ "cancel",
1438
+ "x-mark"
1439
+ ]
1440
+ },
1441
+ {
1442
+ name: "Check",
1443
+ slug: "check",
1444
+ src: "M4.5 12.75l6 6 9-13.5",
1445
+ tags: [
1446
+ "tick",
1447
+ "success",
1448
+ "confirm",
1449
+ "done",
1450
+ "check"
1451
+ ]
1452
+ },
1453
+ {
1454
+ name: "Double Tick",
1455
+ slug: "double-tick",
1456
+ src: "M4.5 12.75l6 6 9-13.5m-12.5 3.75 3 3 4.6-6.8",
1457
+ tags: [
1458
+ "check",
1459
+ "done",
1460
+ "success",
1461
+ "double-tick"
1462
+ ]
1463
+ },
1464
+ {
1465
+ name: "Plus",
1466
+ slug: "plus",
1467
+ src: "M12 4.5v15m7.5-7.5h-15",
1468
+ tags: [
1469
+ "add",
1470
+ "create",
1471
+ "new",
1472
+ "plus"
1473
+ ]
1474
+ },
1475
+ {
1476
+ name: "Minus",
1477
+ slug: "minus",
1478
+ src: "M5 12h14",
1479
+ tags: [
1480
+ "subtract",
1481
+ "delete",
1482
+ "remove",
1483
+ "minus"
1484
+ ]
1485
+ },
1486
+ {
1487
+ name: "Magnifying Glass",
1488
+ slug: "magnifying-glass",
1489
+ src: "M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z",
1490
+ tags: [
1491
+ "search",
1492
+ "find",
1493
+ "zoom",
1494
+ "magnifying-glass",
1495
+ "senangwebs",
1496
+ "sw-index"
1497
+ ]
1498
+ },
1499
+ {
1500
+ name: "Magnifying Glass Focus",
1501
+ slug: "magnifying-glass-focus",
1502
+ 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",
1503
+ tags: [
1504
+ "search",
1505
+ "find",
1506
+ "zoom fit",
1507
+ "magnifying-glass-focus"
1508
+ ]
1509
+ },
1510
+ {
1511
+ name: "Magnifying Glass Plus",
1512
+ slug: "magnifying-glass-plus",
1513
+ 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",
1514
+ tags: [
1515
+ "search",
1516
+ "find",
1517
+ "zoom in",
1518
+ "magnifying-glass-plus",
1519
+ "plus"
1520
+ ]
1521
+ },
1522
+ {
1523
+ name: "Magnifying Glass Minus",
1524
+ slug: "magnifying-glass-minus",
1525
+ 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",
1526
+ tags: [
1527
+ "search",
1528
+ "find",
1529
+ "zoom out",
1530
+ "magnifying-glass-minus",
1531
+ "minus"
1532
+ ]
1533
+ },
1534
+ {
1535
+ name: "Home",
1536
+ slug: "home",
1537
+ 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",
1538
+ tags: [
1539
+ "house",
1540
+ "dashboard",
1541
+ "main",
1542
+ "home"
1543
+ ]
1544
+ },
1545
+ {
1546
+ name: "Cog 6 Tooth",
1547
+ slug: "cog-6-tooth",
1548
+ 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",
1549
+ tags: [
1550
+ "settings",
1551
+ "gear",
1552
+ "options",
1553
+ "config",
1554
+ "cog-6-tooth"
1555
+ ]
1556
+ },
1557
+ {
1558
+ name: "Trash",
1559
+ slug: "trash",
1560
+ 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",
1561
+ tags: [
1562
+ "delete",
1563
+ "remove",
1564
+ "bin",
1565
+ "garbage",
1566
+ "trash"
1567
+ ]
1568
+ },
1569
+ {
1570
+ name: "Arrow Left",
1571
+ slug: "arrow-left",
1572
+ src: "M10.5 19.5L3 12m0 0l7.5-7.5M3 12h18",
1573
+ tags: [
1574
+ "back",
1575
+ "previous",
1576
+ "direction",
1577
+ "arrow-left"
1578
+ ]
1579
+ },
1580
+ {
1581
+ name: "Arrow Right",
1582
+ slug: "arrow-right",
1583
+ src: "M13.5 4.5L21 12m0 0l-7.5 7.5M21 12H3",
1584
+ tags: [
1585
+ "forward",
1586
+ "next",
1587
+ "direction",
1588
+ "arrow-right"
1589
+ ]
1590
+ },
1591
+ {
1592
+ name: "Arrow Up",
1593
+ slug: "arrow-up",
1594
+ src: "M4.5 10.5L12 3m0 0l7.5 7.5M12 3v18",
1595
+ tags: [
1596
+ "top",
1597
+ "direction",
1598
+ "arrow-up"
1599
+ ]
1600
+ },
1601
+ {
1602
+ name: "Arrow Down",
1603
+ slug: "arrow-down",
1604
+ src: "M19.5 13.5L12 21m0 0l-7.5-7.5M12 21V3",
1605
+ tags: [
1606
+ "bottom",
1607
+ "direction",
1608
+ "arrow-down"
1609
+ ]
1610
+ },
1611
+ {
1612
+ name: "Arrow Long Left",
1613
+ slug: "arrow-long-left",
1614
+ src: "M6.75 15.75L3 12m0 0l3.75-3.75M3 12h18",
1615
+ tags: [
1616
+ "back",
1617
+ "previous",
1618
+ "direction",
1619
+ "arrow-long-left"
1620
+ ]
1621
+ },
1622
+ {
1623
+ name: "Arrow Long Right",
1624
+ slug: "arrow-long-right",
1625
+ src: "M17.25 8.25L21 12m0 0l-3.75 3.75M21 12H3",
1626
+ tags: [
1627
+ "forward",
1628
+ "next",
1629
+ "direction",
1630
+ "arrow-long-right"
1631
+ ]
1632
+ },
1633
+ {
1634
+ name: "Arrow Long Up",
1635
+ slug: "arrow-long-up",
1636
+ src: "M8.25 6.75L12 3m0 0l3.75 3.75M12 3v18",
1637
+ tags: [
1638
+ "top",
1639
+ "direction",
1640
+ "arrow-long-up"
1641
+ ]
1642
+ },
1643
+ {
1644
+ name: "Arrow Long Down",
1645
+ slug: "arrow-long-down",
1646
+ src: "M15.75 17.25L12 21m0 0l-3.75-3.75M12 21V3",
1647
+ tags: [
1648
+ "bottom",
1649
+ "direction",
1650
+ "arrow-long-down"
1651
+ ]
1652
+ },
1653
+ {
1654
+ name: "Arrow Path",
1655
+ slug: "arrow-path",
1656
+ 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",
1657
+ tags: [
1658
+ "refresh",
1659
+ "reload",
1660
+ "cycle",
1661
+ "loop",
1662
+ "arrow-path",
1663
+ "senangwebs",
1664
+ "sw-loading"
1665
+ ]
1666
+ },
1667
+ {
1668
+ name: "Arrow Rotate Cw",
1669
+ slug: "arrow-rotate-cw",
1670
+ 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",
1671
+ tags: [
1672
+ "rotate",
1673
+ "refresh",
1674
+ "reload",
1675
+ "arrow-rotate-cw"
1676
+ ]
1677
+ },
1678
+ {
1679
+ name: "Arrow Rotate Ccw",
1680
+ slug: "arrow-rotate-ccw",
1681
+ 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",
1682
+ tags: [
1683
+ "rotate",
1684
+ "undo",
1685
+ "arrow-rotate-ccw"
1686
+ ]
1687
+ },
1688
+ {
1689
+ name: "Arrow Top Right On Square",
1690
+ slug: "arrow-top-right-on-square",
1691
+ 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",
1692
+ tags: [
1693
+ "external",
1694
+ "link",
1695
+ "open",
1696
+ "arrow-top-right-on-square"
1697
+ ]
1698
+ },
1699
+ {
1700
+ name: "Arrow Right On Rectangle",
1701
+ slug: "arrow-right-on-rectangle",
1702
+ 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",
1703
+ tags: [
1704
+ "logout",
1705
+ "exit",
1706
+ "signout",
1707
+ "arrow-right-on-rectangle"
1708
+ ]
1709
+ },
1710
+ {
1711
+ name: "Arrow Left On Rectangle",
1712
+ slug: "arrow-left-on-rectangle",
1713
+ 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",
1714
+ tags: [
1715
+ "login",
1716
+ "enter",
1717
+ "signin",
1718
+ "arrow-left-on-rectangle"
1719
+ ]
1720
+ },
1721
+ {
1722
+ name: "Chevron Left",
1723
+ slug: "chevron-left",
1724
+ src: "M15.75 19.5L8.25 12l7.5-7.5",
1725
+ tags: [
1726
+ "back",
1727
+ "previous",
1728
+ "chevron-left"
1729
+ ]
1730
+ },
1731
+ {
1732
+ name: "Chevron Right",
1733
+ slug: "chevron-right",
1734
+ src: "M8.25 4.5l7.5 7.5-7.5 7.5",
1735
+ tags: [
1736
+ "forward",
1737
+ "next",
1738
+ "chevron-right"
1739
+ ]
1740
+ },
1741
+ {
1742
+ name: "Chevron Up",
1743
+ slug: "chevron-up",
1744
+ src: "M19.5 15.75l-7.5-7.5-7.5 7.5",
1745
+ tags: [
1746
+ "top",
1747
+ "collapse",
1748
+ "chevron-up"
1749
+ ]
1750
+ },
1751
+ {
1752
+ name: "Chevron Down",
1753
+ slug: "chevron-down",
1754
+ src: "M4.5 8.25l7.5 7.5 7.5-7.5",
1755
+ tags: [
1756
+ "bottom",
1757
+ "expand",
1758
+ "chevron-down"
1759
+ ]
1760
+ },
1761
+ {
1762
+ name: "Chevron Double Left",
1763
+ slug: "chevron-double-left",
1764
+ src: "M18.75 19.5l-7.5-7.5 7.5-7.5m-6 15L5.25 12l7.5-7.5",
1765
+ tags: [
1766
+ "back",
1767
+ "previous",
1768
+ "fast",
1769
+ "chevron-double-left"
1770
+ ]
1771
+ },
1772
+ {
1773
+ name: "Chevron Double Right",
1774
+ slug: "chevron-double-right",
1775
+ src: "M11.25 4.5l7.5 7.5-7.5 7.5m-6-15l7.5 7.5-7.5 7.5",
1776
+ tags: [
1777
+ "forward",
1778
+ "next",
1779
+ "fast",
1780
+ "chevron-double-right"
1781
+ ]
1782
+ },
1783
+ {
1784
+ name: "Envelope",
1785
+ slug: "envelope",
1786
+ 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",
1787
+ tags: [
1788
+ "mail",
1789
+ "email",
1790
+ "message",
1791
+ "contact",
1792
+ "envelope"
1793
+ ]
1794
+ },
1795
+ {
1796
+ name: "Envelope Open",
1797
+ slug: "envelope-open",
1798
+ 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",
1799
+ tags: [
1800
+ "mail",
1801
+ "email",
1802
+ "read",
1803
+ "envelope-open"
1804
+ ]
1805
+ },
1806
+ {
1807
+ name: "Chat Bubble Left",
1808
+ slug: "chat-bubble-left",
1809
+ 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",
1810
+ tags: [
1811
+ "message",
1812
+ "comment",
1813
+ "talk",
1814
+ "chat-bubble-left"
1815
+ ]
1816
+ },
1817
+ {
1818
+ name: "Chat Bubble Right",
1819
+ slug: "chat-bubble-right",
1820
+ 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",
1821
+ tags: [
1822
+ "message",
1823
+ "comment",
1824
+ "talk",
1825
+ "chat-bubble-right"
1826
+ ]
1827
+ },
1828
+ {
1829
+ name: "Chat Bubble Left Ellipsis",
1830
+ slug: "chat-bubble-left-ellipsis",
1831
+ 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",
1832
+ tags: [
1833
+ "message",
1834
+ "comment",
1835
+ "typing",
1836
+ "chat-bubble-left-ellipsis"
1837
+ ]
1838
+ },
1839
+ {
1840
+ name: "Chat Bubble Right Ellipsis",
1841
+ slug: "chat-bubble-right-ellipsis",
1842
+ 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",
1843
+ tags: [
1844
+ "message",
1845
+ "comment",
1846
+ "typing",
1847
+ "chat-bubble-right-ellipsis"
1848
+ ]
1849
+ },
1850
+ {
1851
+ name: "Chat Bubble Left Right",
1852
+ slug: "chat-bubble-left-right",
1853
+ 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",
1854
+ tags: [
1855
+ "conversation",
1856
+ "exchange",
1857
+ "chat-bubble-left-right"
1858
+ ]
1859
+ },
1860
+ {
1861
+ name: "Phone",
1862
+ slug: "phone",
1863
+ 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",
1864
+ tags: [
1865
+ "call",
1866
+ "contact",
1867
+ "mobile",
1868
+ "phone"
1869
+ ]
1870
+ },
1871
+ {
1872
+ name: "Phone X Mark",
1873
+ slug: "phone-x-mark",
1874
+ 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",
1875
+ tags: [
1876
+ "missed call",
1877
+ "hang up",
1878
+ "phone-x-mark"
1879
+ ]
1880
+ },
1881
+ {
1882
+ name: "User",
1883
+ slug: "user",
1884
+ 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",
1885
+ tags: [
1886
+ "person",
1887
+ "profile",
1888
+ "account",
1889
+ "user"
1890
+ ]
1891
+ },
1892
+ {
1893
+ name: "User Circle",
1894
+ slug: "user-circle",
1895
+ 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",
1896
+ tags: [
1897
+ "person",
1898
+ "profile",
1899
+ "account",
1900
+ "user-circle"
1901
+ ]
1902
+ },
1903
+ {
1904
+ name: "User Plus",
1905
+ slug: "user-plus",
1906
+ 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",
1907
+ tags: [
1908
+ "add user",
1909
+ "register",
1910
+ "user-plus"
1911
+ ]
1912
+ },
1913
+ {
1914
+ name: "User Minus",
1915
+ slug: "user-minus",
1916
+ 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",
1917
+ tags: [
1918
+ "remove user",
1919
+ "user-minus"
1920
+ ]
1921
+ },
1922
+ {
1923
+ name: "User Group",
1924
+ slug: "user-group",
1925
+ 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",
1926
+ tags: [
1927
+ "people",
1928
+ "team",
1929
+ "community",
1930
+ "user-group"
1931
+ ]
1932
+ },
1933
+ {
1934
+ name: "Users",
1935
+ slug: "users",
1936
+ 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",
1937
+ tags: [
1938
+ "people",
1939
+ "team",
1940
+ "community",
1941
+ "users"
1942
+ ]
1943
+ },
1944
+ {
1945
+ name: "Alert",
1946
+ slug: "alert",
1947
+ 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",
1948
+ tags: [
1949
+ "warning",
1950
+ "danger",
1951
+ "notification",
1952
+ "alert",
1953
+ "senangwebs",
1954
+ "popup",
1955
+ "sw-modals"
1956
+ ]
1957
+ },
1958
+ {
1959
+ name: "Play",
1960
+ slug: "play",
1961
+ 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",
1962
+ tags: [
1963
+ "start",
1964
+ "media",
1965
+ "video",
1966
+ "play"
1967
+ ]
1968
+ },
1969
+ {
1970
+ name: "Pause",
1971
+ slug: "pause",
1972
+ src: "M9 5.25v13.5m6-13.5v13.5",
1973
+ tags: [
1974
+ "stop",
1975
+ "media",
1976
+ "video",
1977
+ "pause"
1978
+ ]
1979
+ },
1980
+ {
1981
+ name: "Stop",
1982
+ slug: "stop",
1983
+ 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",
1984
+ tags: [
1985
+ "media",
1986
+ "video",
1987
+ "stop"
1988
+ ]
1989
+ },
1990
+ {
1991
+ name: "Play Circle",
1992
+ slug: "play-circle",
1993
+ 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",
1994
+ tags: [
1995
+ "start",
1996
+ "media",
1997
+ "play-circle"
1998
+ ]
1999
+ },
2000
+ {
2001
+ name: "Pause Circle",
2002
+ slug: "pause-circle",
2003
+ src: "M14.25 9v6m-4.5 0V9M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z",
2004
+ tags: [
2005
+ "stop",
2006
+ "media",
2007
+ "pause-circle"
2008
+ ]
2009
+ },
2010
+ {
2011
+ name: "Speaker Wave",
2012
+ slug: "speaker-wave",
2013
+ 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",
2014
+ tags: [
2015
+ "sound",
2016
+ "volume",
2017
+ "audio",
2018
+ "speaker-wave"
2019
+ ]
2020
+ },
2021
+ {
2022
+ name: "Speaker X Mark",
2023
+ slug: "speaker-x-mark",
2024
+ 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",
2025
+ tags: [
2026
+ "mute",
2027
+ "silent",
2028
+ "audio",
2029
+ "speaker-x-mark"
2030
+ ]
2031
+ },
2032
+ {
2033
+ name: "Microphone",
2034
+ slug: "microphone",
2035
+ 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",
2036
+ tags: [
2037
+ "record",
2038
+ "audio",
2039
+ "voice",
2040
+ "microphone"
2041
+ ]
2042
+ },
2043
+ {
2044
+ name: "Microphone Mute",
2045
+ slug: "microphone-mute",
2046
+ 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",
2047
+ tags: [
2048
+ "mute",
2049
+ "silent",
2050
+ "voice",
2051
+ "microphone-mute"
2052
+ ]
2053
+ },
2054
+ {
2055
+ name: "Video Camera",
2056
+ slug: "video-camera",
2057
+ 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",
2058
+ tags: [
2059
+ "movie",
2060
+ "film",
2061
+ "record",
2062
+ "video-camera"
2063
+ ]
2064
+ },
2065
+ {
2066
+ name: "Camera",
2067
+ slug: "camera",
2068
+ 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",
2069
+ tags: [
2070
+ "photo",
2071
+ "picture",
2072
+ "image",
2073
+ "camera"
2074
+ ]
2075
+ },
2076
+ {
2077
+ name: "Photo",
2078
+ slug: "photo",
2079
+ 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",
2080
+ tags: [
2081
+ "image",
2082
+ "picture",
2083
+ "gallery",
2084
+ "photo",
2085
+ "senangwebs",
2086
+ "lightbox",
2087
+ "sw-gallery"
2088
+ ]
2089
+ },
2090
+ {
2091
+ name: "Panorama",
2092
+ slug: "panorama",
2093
+ src: "M2 5C8 9 16 9 22 5V19C16 15 8 15 2 19V5ZM8 13 12 11 12 13 16 11",
2094
+ tags: [
2095
+ "image",
2096
+ "picture",
2097
+ "wide",
2098
+ "panorama",
2099
+ "senangwebs",
2100
+ "vr",
2101
+ "sw-tour"
2102
+ ]
2103
+ },
2104
+ {
2105
+ name: "Musical Note",
2106
+ slug: "musical-note",
2107
+ 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",
2108
+ tags: [
2109
+ "audio",
2110
+ "song",
2111
+ "sound",
2112
+ "musical-note"
2113
+ ]
2114
+ },
2115
+ {
2116
+ name: "Code",
2117
+ slug: "code",
2118
+ 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",
2119
+ tags: [
2120
+ "coding",
2121
+ "programming",
2122
+ "developer",
2123
+ "code"
2124
+ ]
2125
+ },
2126
+ {
2127
+ name: "Console",
2128
+ slug: "console",
2129
+ 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",
2130
+ tags: [
2131
+ "terminal",
2132
+ "cli",
2133
+ "command",
2134
+ "prompt",
2135
+ "console"
2136
+ ]
2137
+ },
2138
+ {
2139
+ name: "Horizontal 3 Dots",
2140
+ slug: "horizontal-3-dots",
2141
+ 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",
2142
+ tags: [
2143
+ "menu",
2144
+ "more",
2145
+ "options",
2146
+ "ellipsis",
2147
+ "horizontal-3-dots"
2148
+ ]
2149
+ },
2150
+ {
2151
+ name: "Vertical 3 Dots",
2152
+ slug: "vertical-3-dots",
2153
+ 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",
2154
+ tags: [
2155
+ "menu",
2156
+ "more",
2157
+ "options",
2158
+ "ellipsis",
2159
+ "vertical-3-dots"
2160
+ ]
2161
+ },
2162
+ {
2163
+ name: "Save",
2164
+ slug: "save",
2165
+ 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",
2166
+ tags: [
2167
+ "disk",
2168
+ "floppy",
2169
+ "store",
2170
+ "save"
2171
+ ]
2172
+ },
2173
+ {
2174
+ name: "Computer Laptop",
2175
+ slug: "computer-laptop",
2176
+ 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",
2177
+ tags: [
2178
+ "device",
2179
+ "macbook",
2180
+ "pc",
2181
+ "computer-laptop"
2182
+ ]
2183
+ },
2184
+ {
2185
+ name: "Computer Code",
2186
+ slug: "computer-code",
2187
+ 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",
2188
+ tags: [
2189
+ "develop",
2190
+ "program",
2191
+ "syntax",
2192
+ "computer-code",
2193
+ "senangwebs",
2194
+ "code",
2195
+ "sw-one"
2196
+ ]
2197
+ },
2198
+ {
2199
+ name: "Computer Desktop",
2200
+ slug: "computer-desktop",
2201
+ 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",
2202
+ tags: [
2203
+ "monitor",
2204
+ "screen",
2205
+ "pc",
2206
+ "computer-desktop"
2207
+ ]
2208
+ },
2209
+ {
2210
+ name: "Device Phone Mobile",
2211
+ slug: "device-phone-mobile",
2212
+ 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",
2213
+ tags: [
2214
+ "iphone",
2215
+ "smartphone",
2216
+ "cell",
2217
+ "device-phone-mobile",
2218
+ "senangwebs",
2219
+ "sw-roll"
2220
+ ]
2221
+ },
2222
+ {
2223
+ name: "Device Tablet",
2224
+ slug: "device-tablet",
2225
+ 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",
2226
+ tags: [
2227
+ "ipad",
2228
+ "kindle",
2229
+ "device-tablet"
2230
+ ]
2231
+ },
2232
+ {
2233
+ name: "Battery 0",
2234
+ slug: "battery-0",
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 18z",
2236
+ tags: [
2237
+ "power",
2238
+ "empty",
2239
+ "charge",
2240
+ "battery-0"
2241
+ ]
2242
+ },
2243
+ {
2244
+ name: "Battery 10",
2245
+ slug: "battery-10",
2246
+ 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",
2247
+ tags: [
2248
+ "power",
2249
+ "low",
2250
+ "battery-10"
2251
+ ]
2252
+ },
2253
+ {
2254
+ name: "Battery 50",
2255
+ slug: "battery-50",
2256
+ 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",
2257
+ tags: [
2258
+ "power",
2259
+ "half",
2260
+ "battery-50"
2261
+ ]
2262
+ },
2263
+ {
2264
+ name: "Battery 100",
2265
+ slug: "battery-100",
2266
+ 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",
2267
+ tags: [
2268
+ "power",
2269
+ "full",
2270
+ "battery-100"
2271
+ ]
2272
+ },
2273
+ {
2274
+ name: "Controller",
2275
+ slug: "controller",
2276
+ 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",
2277
+ tags: [
2278
+ "game",
2279
+ "play",
2280
+ "joystick",
2281
+ "controller",
2282
+ "senangwebs",
2283
+ "vr",
2284
+ "sw-verse"
2285
+ ]
2286
+ },
2287
+ {
2288
+ name: "Game",
2289
+ slug: "game",
2290
+ 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",
2291
+ tags: [
2292
+ "controller",
2293
+ "play",
2294
+ "joystick",
2295
+ "game",
2296
+ "senangwebs",
2297
+ "2d",
2298
+ "sw-xperience"
2299
+ ]
2300
+ },
2301
+ {
2302
+ name: "Window",
2303
+ slug: "window",
2304
+ 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",
2305
+ tags: [
2306
+ "browser",
2307
+ "app",
2308
+ "ui",
2309
+ "window"
2310
+ ]
2311
+ },
2312
+ {
2313
+ name: "Shopping Cart",
2314
+ slug: "shopping-cart",
2315
+ 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",
2316
+ tags: [
2317
+ "buy",
2318
+ "checkout",
2319
+ "store",
2320
+ "shopping-cart"
2321
+ ]
2322
+ },
2323
+ {
2324
+ name: "Shopping Bag",
2325
+ slug: "shopping-bag",
2326
+ 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",
2327
+ tags: [
2328
+ "buy",
2329
+ "checkout",
2330
+ "store",
2331
+ "shopping-bag"
2332
+ ]
2333
+ },
2334
+ {
2335
+ name: "Basket",
2336
+ slug: "basket",
2337
+ 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",
2338
+ tags: [
2339
+ "buy",
2340
+ "checkout",
2341
+ "store",
2342
+ "basket",
2343
+ "senangwebs",
2344
+ "cart",
2345
+ "shop",
2346
+ "sw-buy"
2347
+ ]
2348
+ },
2349
+ {
2350
+ name: "Credit Card",
2351
+ slug: "credit-card",
2352
+ 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",
2353
+ tags: [
2354
+ "payment",
2355
+ "money",
2356
+ "purchase",
2357
+ "credit-card"
2358
+ ]
2359
+ },
2360
+ {
2361
+ name: "Banknotes",
2362
+ slug: "banknotes",
2363
+ 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",
2364
+ tags: [
2365
+ "money",
2366
+ "cash",
2367
+ "payment",
2368
+ "banknotes"
2369
+ ]
2370
+ },
2371
+ {
2372
+ name: "Calendar",
2373
+ slug: "calendar",
2374
+ 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",
2375
+ tags: [
2376
+ "date",
2377
+ "schedule",
2378
+ "time",
2379
+ "calendar"
2380
+ ]
2381
+ },
2382
+ {
2383
+ name: "Calendar Plus",
2384
+ slug: "calendar-plus",
2385
+ 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",
2386
+ tags: [
2387
+ "date",
2388
+ "schedule",
2389
+ "time",
2390
+ "calendar",
2391
+ "add",
2392
+ "plus"
2393
+ ]
2394
+ },
2395
+ {
2396
+ name: "Calendar Minus",
2397
+ slug: "calendar-minus",
2398
+ 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",
2399
+ tags: [
2400
+ "date",
2401
+ "schedule",
2402
+ "time",
2403
+ "calendar",
2404
+ "subtract",
2405
+ "minus"
2406
+ ]
2407
+ },
2408
+ {
2409
+ name: "Calendar Approve",
2410
+ slug: "calendar-approve",
2411
+ 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",
2412
+ tags: [
2413
+ "date",
2414
+ "schedule",
2415
+ "time",
2416
+ "calendar",
2417
+ "approve",
2418
+ "check",
2419
+ "accept"
2420
+ ]
2421
+ },
2422
+ {
2423
+ name: "Calendar Reject",
2424
+ slug: "calendar-reject",
2425
+ 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",
2426
+ tags: [
2427
+ "date",
2428
+ "schedule",
2429
+ "time",
2430
+ "calendar",
2431
+ "reject",
2432
+ "x-mark",
2433
+ "remove"
2434
+ ]
2435
+ },
2436
+ {
2437
+ name: "Calendar Days",
2438
+ slug: "calendar-days",
2439
+ 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",
2440
+ tags: [
2441
+ "date",
2442
+ "schedule",
2443
+ "time",
2444
+ "calendar-days"
2445
+ ]
2446
+ },
2447
+ {
2448
+ name: "Briefcase",
2449
+ slug: "briefcase",
2450
+ 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",
2451
+ tags: [
2452
+ "work",
2453
+ "business",
2454
+ "office",
2455
+ "briefcase"
2456
+ ]
2457
+ },
2458
+ {
2459
+ name: "Presentation Chart Line",
2460
+ slug: "presentation-chart-line",
2461
+ 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",
2462
+ tags: [
2463
+ "analytics",
2464
+ "graph",
2465
+ "stats",
2466
+ "presentation-chart-line"
2467
+ ]
2468
+ },
2469
+ {
2470
+ name: "Presentation Media",
2471
+ slug: "presentation-media",
2472
+ 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",
2473
+ tags: [
2474
+ "analytics",
2475
+ "graph",
2476
+ "screen",
2477
+ "presentation-media",
2478
+ "senangwebs",
2479
+ "presentation",
2480
+ "sw-deck"
2481
+ ]
2482
+ },
2483
+ {
2484
+ name: "Whiteboard",
2485
+ slug: "whiteboard",
2486
+ 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",
2487
+ tags: [
2488
+ "draw",
2489
+ "present",
2490
+ "board",
2491
+ "whiteboard",
2492
+ "senangwebs",
2493
+ "vector",
2494
+ "sw-whiteboard"
2495
+ ]
2496
+ },
2497
+ {
2498
+ name: "Chart Line",
2499
+ slug: "chart-line",
2500
+ src: "M4 3v15c0 2 1 3 3 3h13M8 15l3-4 2 2 6-8",
2501
+ tags: [
2502
+ "graph",
2503
+ "analytics",
2504
+ "stats",
2505
+ "chart-line"
2506
+ ]
2507
+ },
2508
+ {
2509
+ name: "Chart Bar",
2510
+ slug: "chart-bar",
2511
+ 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",
2512
+ tags: [
2513
+ "graph",
2514
+ "analytics",
2515
+ "stats",
2516
+ "chart-bar"
2517
+ ]
2518
+ },
2519
+ {
2520
+ name: "Chart Pie",
2521
+ slug: "chart-pie",
2522
+ 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",
2523
+ tags: [
2524
+ "graph",
2525
+ "analytics",
2526
+ "stats",
2527
+ "chart-pie",
2528
+ "senangwebs",
2529
+ "chart",
2530
+ "sw-yield"
2531
+ ]
2532
+ },
2533
+ {
2534
+ name: "Currency Dollar",
2535
+ slug: "currency-dollar",
2536
+ 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",
2537
+ tags: [
2538
+ "money",
2539
+ "price",
2540
+ "cost",
2541
+ "usd",
2542
+ "currency-dollar"
2543
+ ]
2544
+ },
2545
+ {
2546
+ name: "Currency Euro",
2547
+ slug: "currency-euro",
2548
+ 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",
2549
+ tags: [
2550
+ "money",
2551
+ "price",
2552
+ "cost",
2553
+ "eur",
2554
+ "currency-euro"
2555
+ ]
2556
+ },
2557
+ {
2558
+ name: "Currency Pound",
2559
+ slug: "currency-pound",
2560
+ 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",
2561
+ tags: [
2562
+ "money",
2563
+ "price",
2564
+ "cost",
2565
+ "gbp",
2566
+ "currency-pound"
2567
+ ]
2568
+ },
2569
+ {
2570
+ name: "Currency Yen",
2571
+ slug: "currency-yen",
2572
+ src: "M9 7.5l3 4.5m0 0l3-4.5M12 12v5.25M15 12H9m6 3H9m12-3a9 9 0 11-18 0 9 9 0 0118 0z",
2573
+ tags: [
2574
+ "money",
2575
+ "price",
2576
+ "cost",
2577
+ "jpy",
2578
+ "currency-yen"
2579
+ ]
2580
+ },
2581
+ {
2582
+ name: "Currency Ringgit",
2583
+ slug: "currency-ringgit",
2584
+ 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",
2585
+ tags: [
2586
+ "money",
2587
+ "price",
2588
+ "cost",
2589
+ "myr",
2590
+ "currency-ringgit"
2591
+ ]
2592
+ },
2593
+ {
2594
+ name: "Tabs",
2595
+ slug: "tabs",
2596
+ 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",
2597
+ tags: [
2598
+ "browser",
2599
+ "ui",
2600
+ "navigation",
2601
+ "tabs",
2602
+ "senangwebs",
2603
+ "sw-herd"
2604
+ ]
2605
+ },
2606
+ {
2607
+ name: "Document",
2608
+ slug: "document",
2609
+ 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",
2610
+ tags: [
2611
+ "file",
2612
+ "paper",
2613
+ "page",
2614
+ "document"
2615
+ ]
2616
+ },
2617
+ {
2618
+ name: "Document Text",
2619
+ slug: "document-text",
2620
+ 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",
2621
+ tags: [
2622
+ "file",
2623
+ "paper",
2624
+ "page",
2625
+ "document-text"
2626
+ ]
2627
+ },
2628
+ {
2629
+ name: "Document Duplicate",
2630
+ slug: "document-duplicate",
2631
+ 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",
2632
+ tags: [
2633
+ "copy",
2634
+ "clone",
2635
+ "file",
2636
+ "document-duplicate"
2637
+ ]
2638
+ },
2639
+ {
2640
+ name: "Folder",
2641
+ slug: "folder",
2642
+ 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",
2643
+ tags: [
2644
+ "directory",
2645
+ "organize",
2646
+ "file",
2647
+ "folder"
2648
+ ]
2649
+ },
2650
+ {
2651
+ name: "Folder Open",
2652
+ slug: "folder-open",
2653
+ 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",
2654
+ tags: [
2655
+ "directory",
2656
+ "organize",
2657
+ "file",
2658
+ "folder-open",
2659
+ "senangwebs",
2660
+ "sw-unfold"
2661
+ ]
2662
+ },
2663
+ {
2664
+ name: "Folder Plus",
2665
+ slug: "folder-plus",
2666
+ 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",
2667
+ tags: [
2668
+ "add folder",
2669
+ "new directory",
2670
+ "folder-plus"
2671
+ ]
2672
+ },
2673
+ {
2674
+ name: "Folder minus",
2675
+ slug: "folder-minus",
2676
+ 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",
2677
+ tags: [
2678
+ "remove folder",
2679
+ "delete directory",
2680
+ "folder-minus"
2681
+ ]
2682
+ },
2683
+ {
2684
+ name: "Clipboard",
2685
+ slug: "clipboard",
2686
+ 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",
2687
+ tags: [
2688
+ "copy",
2689
+ "paste",
2690
+ "board",
2691
+ "clipboard",
2692
+ "senangwebs",
2693
+ "sw-jot"
2694
+ ]
2695
+ },
2696
+ {
2697
+ name: "Clipboard Document Check",
2698
+ slug: "clipboard-document-check",
2699
+ 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",
2700
+ tags: [
2701
+ "checklist",
2702
+ "task",
2703
+ "done",
2704
+ "clipboard-document-check"
2705
+ ]
2706
+ },
2707
+ {
2708
+ name: "Paper Clip",
2709
+ slug: "paper-clip",
2710
+ 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",
2711
+ tags: [
2712
+ "attach",
2713
+ "file",
2714
+ "link",
2715
+ "paper-clip"
2716
+ ]
2717
+ },
2718
+ {
2719
+ name: "Archive Box",
2720
+ slug: "archive-box",
2721
+ 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",
2722
+ tags: [
2723
+ "store",
2724
+ "history",
2725
+ "backup",
2726
+ "archive-box"
2727
+ ]
2728
+ },
2729
+ {
2730
+ name: "Inbox",
2731
+ slug: "inbox",
2732
+ 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",
2733
+ tags: [
2734
+ "email",
2735
+ "message",
2736
+ "tray",
2737
+ "inbox"
2738
+ ]
2739
+ },
2740
+ {
2741
+ name: "Book Open",
2742
+ slug: "book-open",
2743
+ 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",
2744
+ tags: [
2745
+ "read",
2746
+ "learn",
2747
+ "library",
2748
+ "book-open",
2749
+ "senangwebs",
2750
+ "sw-story"
2751
+ ]
2752
+ },
2753
+ {
2754
+ name: "Book Close",
2755
+ slug: "book-close",
2756
+ 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",
2757
+ tags: [
2758
+ "read",
2759
+ "learn",
2760
+ "library",
2761
+ "book-close"
2762
+ ]
2763
+ },
2764
+ {
2765
+ name: "Book Stacked",
2766
+ slug: "book-stacked",
2767
+ 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",
2768
+ tags: [
2769
+ "read",
2770
+ "learn",
2771
+ "library",
2772
+ "book-stacked"
2773
+ ]
2774
+ },
2775
+ {
2776
+ name: "Lock Closed",
2777
+ slug: "lock-closed",
2778
+ 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",
2779
+ tags: [
2780
+ "secure",
2781
+ "password",
2782
+ "private",
2783
+ "lock-closed"
2784
+ ]
2785
+ },
2786
+ {
2787
+ name: "Lock Open",
2788
+ slug: "lock-open",
2789
+ 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",
2790
+ tags: [
2791
+ "unlock",
2792
+ "public",
2793
+ "access",
2794
+ "lock-open"
2795
+ ]
2796
+ },
2797
+ {
2798
+ name: "Key",
2799
+ slug: "key",
2800
+ 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",
2801
+ tags: [
2802
+ "password",
2803
+ "access",
2804
+ "secure",
2805
+ "key"
2806
+ ]
2807
+ },
2808
+ {
2809
+ name: "Shield Check",
2810
+ slug: "shield-check",
2811
+ 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",
2812
+ tags: [
2813
+ "secure",
2814
+ "safe",
2815
+ "verified",
2816
+ "shield-check"
2817
+ ]
2818
+ },
2819
+ {
2820
+ name: "Shield Exclamation",
2821
+ slug: "shield-exclamation",
2822
+ 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",
2823
+ tags: [
2824
+ "danger",
2825
+ "warning",
2826
+ "security",
2827
+ "shield-exclamation"
2828
+ ]
2829
+ },
2830
+ {
2831
+ name: "Exclamation Circle",
2832
+ slug: "exclamation-circle",
2833
+ src: "M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z",
2834
+ tags: [
2835
+ "error",
2836
+ "warning",
2837
+ "alert",
2838
+ "exclamation-circle"
2839
+ ]
2840
+ },
2841
+ {
2842
+ name: "Exclamation Triangle",
2843
+ slug: "exclamation-triangle",
2844
+ 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",
2845
+ tags: [
2846
+ "warning",
2847
+ "danger",
2848
+ "caution",
2849
+ "exclamation-triangle"
2850
+ ]
2851
+ },
2852
+ {
2853
+ name: "Information Circle",
2854
+ slug: "information-circle",
2855
+ 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",
2856
+ tags: [
2857
+ "help",
2858
+ "details",
2859
+ "info",
2860
+ "information-circle"
2861
+ ]
2862
+ },
2863
+ {
2864
+ name: "Question Mark Circle",
2865
+ slug: "question-mark-circle",
2866
+ 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",
2867
+ tags: [
2868
+ "help",
2869
+ "faq",
2870
+ "support",
2871
+ "question-mark-circle",
2872
+ "senangwebs",
2873
+ "question",
2874
+ "sw-quiz"
2875
+ ]
2876
+ },
2877
+ {
2878
+ name: "Bell",
2879
+ slug: "bell",
2880
+ 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",
2881
+ tags: [
2882
+ "notification",
2883
+ "alert",
2884
+ "alarm",
2885
+ "bell",
2886
+ "senangwebs",
2887
+ "prompt",
2888
+ "sw-notices"
2889
+ ]
2890
+ },
2891
+ {
2892
+ name: "Bell Alert",
2893
+ slug: "bell-alert",
2894
+ 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",
2895
+ tags: [
2896
+ "notification",
2897
+ "alert",
2898
+ "alarm",
2899
+ "bell-alert"
2900
+ ]
2901
+ },
2902
+ {
2903
+ name: "Eye",
2904
+ slug: "eye",
2905
+ 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",
2906
+ tags: [
2907
+ "view",
2908
+ "show",
2909
+ "visible",
2910
+ "eye"
2911
+ ]
2912
+ },
2913
+ {
2914
+ name: "Eye Slash",
2915
+ slug: "eye-slash",
2916
+ 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",
2917
+ tags: [
2918
+ "hide",
2919
+ "invisible",
2920
+ "password",
2921
+ "eye-slash"
2922
+ ]
2923
+ },
2924
+ {
2925
+ name: "Light Bulb",
2926
+ slug: "light-bulb",
2927
+ 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",
2928
+ tags: [
2929
+ "idea",
2930
+ "tip",
2931
+ "solution",
2932
+ "light-bulb"
2933
+ ]
2934
+ },
2935
+ {
2936
+ name: "Bolt",
2937
+ slug: "bolt",
2938
+ src: "M3.75 13.5l10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75z",
2939
+ tags: [
2940
+ "energy",
2941
+ "power",
2942
+ "fast",
2943
+ "bolt"
2944
+ ]
2945
+ },
2946
+ {
2947
+ name: "Moon",
2948
+ slug: "moon",
2949
+ 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",
2950
+ tags: [
2951
+ "dark mode",
2952
+ "night",
2953
+ "sleep",
2954
+ "moon"
2955
+ ]
2956
+ },
2957
+ {
2958
+ name: "Sun",
2959
+ slug: "sun",
2960
+ 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",
2961
+ tags: [
2962
+ "light mode",
2963
+ "day",
2964
+ "bright",
2965
+ "sun"
2966
+ ]
2967
+ },
2968
+ {
2969
+ name: "Cloud",
2970
+ slug: "cloud",
2971
+ 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",
2972
+ tags: [
2973
+ "weather",
2974
+ "sky",
2975
+ "cloud"
2976
+ ]
2977
+ },
2978
+ {
2979
+ name: "Thunder",
2980
+ slug: "thunder",
2981
+ src: "M9 3h5L12 8 18 8 8.5 22l3.5-10h-6l2-9z",
2982
+ tags: [
2983
+ "weather",
2984
+ "storm",
2985
+ "lightning",
2986
+ "thunder"
2987
+ ]
2988
+ },
2989
+ {
2990
+ name: "Star",
2991
+ slug: "star",
2992
+ 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",
2993
+ tags: [
2994
+ "favorite",
2995
+ "rating",
2996
+ "like",
2997
+ "star"
2998
+ ]
2999
+ },
3000
+ {
3001
+ name: "Heart",
3002
+ slug: "heart",
3003
+ 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",
3004
+ tags: [
3005
+ "like",
3006
+ "love",
3007
+ "favorite",
3008
+ "heart"
3009
+ ]
3010
+ },
3011
+ {
3012
+ name: "Hand Thumb Up",
3013
+ slug: "hand-thumb-up",
3014
+ 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",
3015
+ tags: [
3016
+ "like",
3017
+ "approve",
3018
+ "good",
3019
+ "hand-thumb-up"
3020
+ ]
3021
+ },
3022
+ {
3023
+ name: "Hand Thumb Down",
3024
+ slug: "hand-thumb-down",
3025
+ 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",
3026
+ tags: [
3027
+ "dislike",
3028
+ "reject",
3029
+ "bad",
3030
+ "hand-thumb-down"
3031
+ ]
3032
+ },
3033
+ {
3034
+ name: "Flag",
3035
+ slug: "flag",
3036
+ 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",
3037
+ tags: [
3038
+ "report",
3039
+ "country",
3040
+ "goal",
3041
+ "flag"
3042
+ ]
3043
+ },
3044
+ {
3045
+ name: "Bookmark",
3046
+ slug: "bookmark",
3047
+ 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",
3048
+ tags: [
3049
+ "save",
3050
+ "favorite",
3051
+ "tag",
3052
+ "bookmark"
3053
+ ]
3054
+ },
3055
+ {
3056
+ name: "Map",
3057
+ slug: "map",
3058
+ 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",
3059
+ tags: [
3060
+ "location",
3061
+ "travel",
3062
+ "guide",
3063
+ "map"
3064
+ ]
3065
+ },
3066
+ {
3067
+ name: "Map Pin",
3068
+ slug: "map-pin",
3069
+ 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",
3070
+ tags: [
3071
+ "location",
3072
+ "marker",
3073
+ "spot",
3074
+ "map-pin"
3075
+ ]
3076
+ },
3077
+ {
3078
+ name: "Globe Alt",
3079
+ slug: "globe-alt",
3080
+ 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",
3081
+ tags: [
3082
+ "world",
3083
+ "internet",
3084
+ "web",
3085
+ "globe-alt"
3086
+ ]
3087
+ },
3088
+ {
3089
+ name: "Truck",
3090
+ slug: "truck",
3091
+ 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",
3092
+ tags: [
3093
+ "delivery",
3094
+ "shipping",
3095
+ "transport",
3096
+ "truck"
3097
+ ]
3098
+ },
3099
+ {
3100
+ name: "Cake",
3101
+ slug: "cake",
3102
+ 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",
3103
+ tags: [
3104
+ "birthday",
3105
+ "celebrate",
3106
+ "party",
3107
+ "cake"
3108
+ ]
3109
+ },
3110
+ {
3111
+ name: "Gift",
3112
+ slug: "gift",
3113
+ 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",
3114
+ tags: [
3115
+ "present",
3116
+ "reward",
3117
+ "bonus",
3118
+ "gift"
3119
+ ]
3120
+ },
3121
+ {
3122
+ name: "Trophy",
3123
+ slug: "trophy",
3124
+ 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",
3125
+ tags: [
3126
+ "award",
3127
+ "winner",
3128
+ "achievement",
3129
+ "trophy"
3130
+ ]
3131
+ },
3132
+ {
3133
+ name: "Medal",
3134
+ slug: "medal",
3135
+ 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",
3136
+ tags: [
3137
+ "award",
3138
+ "achievement",
3139
+ "winner",
3140
+ "medal"
3141
+ ]
3142
+ },
3143
+ {
3144
+ name: "Qr Code",
3145
+ slug: "qr-code",
3146
+ 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",
3147
+ tags: [
3148
+ "scan",
3149
+ "code",
3150
+ "link",
3151
+ "qr-code"
3152
+ ]
3153
+ },
3154
+ {
3155
+ name: "Wifi",
3156
+ slug: "wifi",
3157
+ 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",
3158
+ tags: [
3159
+ "internet",
3160
+ "connection",
3161
+ "network",
3162
+ "wifi"
3163
+ ]
3164
+ },
3165
+ {
3166
+ name: "Vr",
3167
+ slug: "vr",
3168
+ 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",
3169
+ tags: [
3170
+ "virtual reality",
3171
+ "glasses",
3172
+ "game",
3173
+ "vr"
3174
+ ]
3175
+ },
3176
+ {
3177
+ name: "AR",
3178
+ slug: "ar",
3179
+ 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",
3180
+ tags: [
3181
+ "augmented reality",
3182
+ "3d",
3183
+ "ar",
3184
+ "cube"
3185
+ ]
3186
+ },
3187
+ {
3188
+ name: "Group Object",
3189
+ slug: "group-object",
3190
+ 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",
3191
+ tags: [
3192
+ "combine",
3193
+ "merge",
3194
+ "group-object"
3195
+ ]
3196
+ },
3197
+ {
3198
+ name: "Ungroup Object",
3199
+ slug: "ungroup-object",
3200
+ 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",
3201
+ tags: [
3202
+ "separate",
3203
+ "split",
3204
+ "ungroup-object"
3205
+ ]
3206
+ },
3207
+ {
3208
+ name: "Align Left Object",
3209
+ slug: "align-left-object",
3210
+ 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",
3211
+ tags: [
3212
+ "align",
3213
+ "left",
3214
+ "object"
3215
+ ]
3216
+ },
3217
+ {
3218
+ name: "Align Center Object",
3219
+ slug: "align-center-object",
3220
+ 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",
3221
+ tags: [
3222
+ "align",
3223
+ "center",
3224
+ "object"
3225
+ ]
3226
+ },
3227
+ {
3228
+ name: "Align Right Object",
3229
+ slug: "align-right-object",
3230
+ 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",
3231
+ tags: [
3232
+ "align",
3233
+ "right",
3234
+ "object"
3235
+ ]
3236
+ },
3237
+ {
3238
+ name: "Align Top Object",
3239
+ slug: "align-top-object",
3240
+ 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",
3241
+ tags: [
3242
+ "align",
3243
+ "top",
3244
+ "object"
3245
+ ]
3246
+ },
3247
+ {
3248
+ name: "Align Middle Object",
3249
+ slug: "align-middle-object",
3250
+ 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",
3251
+ tags: [
3252
+ "align",
3253
+ "middle",
3254
+ "object"
3255
+ ]
3256
+ },
3257
+ {
3258
+ name: "Align Bottom Object",
3259
+ slug: "align-bottom-object",
3260
+ 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",
3261
+ tags: [
3262
+ "align",
3263
+ "bottom",
3264
+ "object"
3265
+ ]
3266
+ },
3267
+ {
3268
+ name: "Carousel",
3269
+ slug: "carousel",
3270
+ src: "M3 6v12M21 6v12M8 5h8a2 2 0 012 2v10a2 2 0 01-2 2H8a2 2 0 01-2-2V7a2 2 0 012-2Z",
3271
+ tags: [
3272
+ "senangwebs",
3273
+ "carousel",
3274
+ "sw-frame"
3275
+ ]
3276
+ },
3277
+ {
3278
+ name: "Reel",
3279
+ slug: "reel",
3280
+ src: "M6 3h12M6 21h12M19 8v8a2 2 0 01-2 2H7a2 2 0 01-2-2V8a2 2 0 012-2h10a2 2 0 012 2Z",
3281
+ tags: [
3282
+ "video",
3283
+ "movie",
3284
+ "film",
3285
+ "reel",
3286
+ "senangwebs",
3287
+ "sw-reel"
3288
+ ]
3289
+ },
3290
+ {
3291
+ name: "Grid",
3292
+ slug: "grid",
3293
+ src: "M9 3v18M15 3v18M3 9h18M3 15h18M3 21h18M3 3h18M3 3v18M21 3v18",
3294
+ tags: [
3295
+ "layout",
3296
+ "view",
3297
+ "grid"
3298
+ ]
3299
+ },
3300
+ {
3301
+ name: "Tic Tac Toe",
3302
+ slug: "tic-tac-toe",
3303
+ src: "M9 3v18 M15 3v18 M3 9h18 M3 15h18",
3304
+ tags: [
3305
+ "layout",
3306
+ "view",
3307
+ "tic-tac-toe"
3308
+ ]
3309
+ },
3310
+ {
3311
+ name: "Robot",
3312
+ slug: "robot",
3313
+ 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",
3314
+ tags: [
3315
+ "bot",
3316
+ "ai",
3317
+ "automation",
3318
+ "robot"
3319
+ ]
3320
+ },
3321
+ {
3322
+ name: "Chatbot",
3323
+ slug: "chatbot",
3324
+ 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",
3325
+ tags: [
3326
+ "bot",
3327
+ "ai",
3328
+ "support",
3329
+ "chatbot",
3330
+ "senangwebs",
3331
+ "sw-chatbot"
3332
+ ]
3333
+ },
3334
+ {
3335
+ name: "Arrow Left Arrow Right",
3336
+ slug: "arrow-left-arrow-right",
3337
+ 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",
3338
+ tags: [
3339
+ "swap",
3340
+ "exchange",
3341
+ "switch",
3342
+ "arrow-left-arrow-right"
3343
+ ]
3344
+ },
3345
+ {
3346
+ name: "Arrow Up Arrow Down",
3347
+ slug: "arrow-up-arrow-down",
3348
+ src: "M3 7.5 7.5 3m0 0L12 7.5M7.5 3v13.5m13.5 0L16.5 21m0 0L12 16.5m4.5 4.5V7.5",
3349
+ tags: [
3350
+ "sort",
3351
+ "swap",
3352
+ "switch",
3353
+ "arrow-up-arrow-down"
3354
+ ]
3355
+ },
3356
+ {
3357
+ name: "Arrow Left Right",
3358
+ slug: "arrow-left-right",
3359
+ src: "M 3 12 h 18 M 7 16 L 3 12 l 4 -4 M 17 8 L 21 12 l -4 4",
3360
+ tags: [
3361
+ "swap",
3362
+ "horizontal",
3363
+ "arrow-left-right"
3364
+ ]
3365
+ },
3366
+ {
3367
+ name: "Arrow Up Down",
3368
+ slug: "arrow-up-down",
3369
+ src: "M 12 3 v 18 M 8 7 L 12 3 l 4 4 M 16 17 L 12 21 l -4 -4",
3370
+ tags: [
3371
+ "swap",
3372
+ "vertical",
3373
+ "arrow-up-down"
3374
+ ]
3375
+ },
3376
+ {
3377
+ name: "Arrow Up Down Left Right",
3378
+ slug: "arrow-up-down-left-right",
3379
+ 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",
3380
+ tags: [
3381
+ "move",
3382
+ "all directions",
3383
+ "arrow-up-down-left-right"
3384
+ ]
3385
+ },
3386
+ {
3387
+ name: "Maximize",
3388
+ slug: "maximize",
3389
+ 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",
3390
+ tags: [
3391
+ "expand",
3392
+ "fullscreen",
3393
+ "maximize"
3394
+ ]
3395
+ },
3396
+ {
3397
+ name: "Minimize",
3398
+ slug: "minimize",
3399
+ 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",
3400
+ tags: [
3401
+ "collapse",
3402
+ "small",
3403
+ "minimize"
3404
+ ]
3405
+ },
3406
+ {
3407
+ name: "Layout",
3408
+ slug: "layout",
3409
+ 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",
3410
+ tags: [
3411
+ "dashboard",
3412
+ "ui",
3413
+ "grid",
3414
+ "layout"
3415
+ ]
3416
+ },
3417
+ {
3418
+ name: "Focus",
3419
+ slug: "focus",
3420
+ 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",
3421
+ tags: [
3422
+ "focus",
3423
+ "lock in",
3424
+ "scan",
3425
+ "fullscreen"
3426
+ ]
3427
+ },
3428
+ {
3429
+ name: "Hourglass 0",
3430
+ slug: "hourglass-0",
3431
+ 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",
3432
+ tags: [
3433
+ "time",
3434
+ "wait",
3435
+ "loading",
3436
+ "hourglass-0"
3437
+ ]
3438
+ },
3439
+ {
3440
+ name: "Hourglass 50",
3441
+ slug: "hourglass-50",
3442
+ 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",
3443
+ tags: [
3444
+ "time",
3445
+ "wait",
3446
+ "loading",
3447
+ "hourglass-50"
3448
+ ]
3449
+ },
3450
+ {
3451
+ name: "Hourglass 80",
3452
+ slug: "hourglass-80",
3453
+ 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",
3454
+ tags: [
3455
+ "time",
3456
+ "wait",
3457
+ "loading",
3458
+ "hourglass-80"
3459
+ ]
3460
+ },
3461
+ {
3462
+ name: "Hourglass 100",
3463
+ slug: "hourglass-100",
3464
+ 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",
3465
+ tags: [
3466
+ "time",
3467
+ "wait",
3468
+ "loading",
3469
+ "hourglass-100"
3470
+ ]
3471
+ },
3472
+ {
3473
+ name: "Clock",
3474
+ slug: "clock",
3475
+ src: "M12 6V12L16 12M21 12A9 9 0 113 12 9 9 0 0121 12Z",
3476
+ tags: [
3477
+ "time",
3478
+ "watch",
3479
+ "schedule",
3480
+ "clock",
3481
+ "senangwebs",
3482
+ "time",
3483
+ "sw-epoch"
3484
+ ]
3485
+ },
3486
+ {
3487
+ name: "Time Reset",
3488
+ slug: "time-reset",
3489
+ 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",
3490
+ tags: [
3491
+ "undo",
3492
+ "history",
3493
+ "restore",
3494
+ "time-reset"
3495
+ ]
3496
+ },
3497
+ {
3498
+ name: "Layer Stacks",
3499
+ slug: "layer-stacks",
3500
+ 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",
3501
+ tags: [
3502
+ "layers",
3503
+ "stack",
3504
+ "group",
3505
+ "layer-stacks"
3506
+ ]
3507
+ },
3508
+ {
3509
+ name: "Cube",
3510
+ slug: "cube",
3511
+ 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",
3512
+ tags: [
3513
+ "3d",
3514
+ "block",
3515
+ "shape",
3516
+ "cube",
3517
+ "senangwebs",
3518
+ "model",
3519
+ "sw-kiln"
3520
+ ]
3521
+ },
3522
+ {
3523
+ name: "Sphere",
3524
+ slug: "sphere",
3525
+ 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",
3526
+ tags: [
3527
+ "shape",
3528
+ "round",
3529
+ "3d",
3530
+ "sphere"
3531
+ ]
3532
+ },
3533
+ {
3534
+ name: "Cylinder",
3535
+ slug: "cylinder",
3536
+ 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",
3537
+ tags: [
3538
+ "shape",
3539
+ "round",
3540
+ "3d",
3541
+ "cylinder"
3542
+ ]
3543
+ },
3544
+ {
3545
+ name: "Tube",
3546
+ slug: "tube",
3547
+ 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",
3548
+ tags: [
3549
+ "shape",
3550
+ "round",
3551
+ "3d",
3552
+ "tube"
3553
+ ]
3554
+ },
3555
+ {
3556
+ name: "Cone",
3557
+ slug: "cone",
3558
+ src: "M21 19c0 1-3 3-9 3s-9-2-9-3c0-1 3-3 9-3s9 2 9 3zM3 19 12 3l9 16",
3559
+ tags: [
3560
+ "shape",
3561
+ "triangle",
3562
+ "3d",
3563
+ "cone"
3564
+ ]
3565
+ },
3566
+ {
3567
+ name: "Pyramid",
3568
+ slug: "pyramid",
3569
+ src: "M12 3l9.75 15-9.75 3-9.75-3L12 3z M12 3v18",
3570
+ tags: [
3571
+ "shape",
3572
+ "triangle",
3573
+ "3d",
3574
+ "pyramid"
3575
+ ]
3576
+ },
3577
+ {
3578
+ name: "Polygon",
3579
+ slug: "polygon",
3580
+ src: "M8 3l8 0L22 7 16 11 8 11 2 7 8 3M22 7v10M2 7v10M16 11v10M8 11v10M2 17l6 4L16 21 22 17",
3581
+ tags: [
3582
+ "shape",
3583
+ "polygon",
3584
+ "3d",
3585
+ "polygon"
3586
+ ]
3587
+ },
3588
+ {
3589
+ name: "Torus",
3590
+ slug: "torus",
3591
+ 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",
3592
+ tags: [
3593
+ "shape",
3594
+ "donut",
3595
+ "3d",
3596
+ "torus",
3597
+ "ring"
3598
+ ]
3599
+ },
3600
+ {
3601
+ name: "Plane",
3602
+ slug: "plane",
3603
+ src: "M2 12l10 5 10-5-10-5-10 5zM2 12",
3604
+ tags: [
3605
+ "shape",
3606
+ "flat",
3607
+ "3d",
3608
+ "plane",
3609
+ "surface",
3610
+ "floor"
3611
+ ]
3612
+ },
3613
+ {
3614
+ name: "Wedge",
3615
+ slug: "wedge",
3616
+ src: "M3 21H17L3 7V21ZM3 7 17 21m0 0 4-5M3 7 8 3M8 3 21 16",
3617
+ tags: [
3618
+ "shape",
3619
+ "triangle",
3620
+ "3d",
3621
+ "wedge",
3622
+ "ramp"
3623
+ ]
3624
+ },
3625
+ {
3626
+ name: "Roof",
3627
+ slug: "roof",
3628
+ src: "M10 7 3 19h14L10 7zM10 7 14 5 21 17 17 19",
3629
+ tags: [
3630
+ "shape",
3631
+ "prism",
3632
+ "3d",
3633
+ "roof",
3634
+ "house"
3635
+ ]
3636
+ },
3637
+ {
3638
+ name: "Cylinder Half",
3639
+ slug: "cylinder-half",
3640
+ src: "M3 5a9 3 0 0 1 18 0H3zM3 5v14h18V5M3 19h18",
3641
+ tags: [
3642
+ "shape",
3643
+ "half",
3644
+ "3d",
3645
+ "cylinder-half",
3646
+ "cut"
3647
+ ]
3648
+ },
3649
+ {
3650
+ name: "Sphere Half",
3651
+ slug: "sphere-half",
3652
+ 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",
3653
+ tags: [
3654
+ "shape",
3655
+ "hemisphere",
3656
+ "3d",
3657
+ "sphere-half",
3658
+ "dome"
3659
+ ]
3660
+ },
3661
+ {
3662
+ name: "Heart Extruded",
3663
+ slug: "heart-extruded",
3664
+ 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",
3665
+ tags: [
3666
+ "shape",
3667
+ "love",
3668
+ "3d",
3669
+ "heart-extruded",
3670
+ "valentine"
3671
+ ]
3672
+ },
3673
+ {
3674
+ name: "Torus Knot",
3675
+ slug: "torus-knot",
3676
+ 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",
3677
+ tags: [
3678
+ "shape",
3679
+ "knot",
3680
+ "3d",
3681
+ "torus-knot",
3682
+ "twisted"
3683
+ ]
3684
+ },
3685
+ {
3686
+ name: "Tetrahedron",
3687
+ slug: "tetrahedron",
3688
+ src: "M12 3l9 18H3L12 3zM12 3v12M12 15l-9 6M12 15l9 6",
3689
+ tags: [
3690
+ "shape",
3691
+ "pyramid",
3692
+ "3d",
3693
+ "tetrahedron",
3694
+ "platonic"
3695
+ ]
3696
+ },
3697
+ {
3698
+ name: "Octahedron",
3699
+ slug: "octahedron",
3700
+ src: "M12 2 L22 12 L12 22 L2 12 Z M12 2 L12 14 L22 12 M12 22 L12 14 L2 12",
3701
+ tags: [
3702
+ "shape",
3703
+ "diamond",
3704
+ "3d",
3705
+ "octahedron",
3706
+ "platonic"
3707
+ ]
3708
+ },
3709
+ {
3710
+ name: "Icosahedron",
3711
+ slug: "icosahedron",
3712
+ 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",
3713
+ tags: [
3714
+ "shape",
3715
+ "poly",
3716
+ "3d",
3717
+ "icosahedron",
3718
+ "platonic"
3719
+ ]
3720
+ },
3721
+ {
3722
+ name: "Dodecahedron",
3723
+ slug: "dodecahedron",
3724
+ 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",
3725
+ tags: [
3726
+ "shape",
3727
+ "pentagon",
3728
+ "3d",
3729
+ "dodecahedron",
3730
+ "platonic"
3731
+ ]
3732
+ },
3733
+ {
3734
+ name: "Sparkles",
3735
+ slug: "sparkles",
3736
+ 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",
3737
+ tags: [
3738
+ "ai",
3739
+ "magic",
3740
+ "new",
3741
+ "sparkles",
3742
+ "senangwebs",
3743
+ "motion",
3744
+ "sw-animations"
3745
+ ]
3746
+ },
3747
+ {
3748
+ name: "Magic Wand",
3749
+ slug: "magic-wand",
3750
+ 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",
3751
+ tags: [
3752
+ "magic",
3753
+ "wizard",
3754
+ "spell",
3755
+ "magic-wand"
3756
+ ]
3757
+ },
3758
+ {
3759
+ name: "Contrast",
3760
+ slug: "contrast",
3761
+ 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",
3762
+ tags: [
3763
+ "display",
3764
+ "accessibility",
3765
+ "contrast"
3766
+ ]
3767
+ },
3768
+ {
3769
+ name: "Cursor",
3770
+ slug: "cursor",
3771
+ src: "M3 3l7.07 16.97 2.51-7.39 7.39-2.51L3 3z",
3772
+ tags: [
3773
+ "pointer",
3774
+ "mouse",
3775
+ "click",
3776
+ "cursor"
3777
+ ]
3778
+ },
3779
+ {
3780
+ name: "Square",
3781
+ slug: "square",
3782
+ src: "M4 4h16v16H4z",
3783
+ tags: [
3784
+ "shape",
3785
+ "box",
3786
+ "square"
3787
+ ]
3788
+ },
3789
+ {
3790
+ name: "Rectangle",
3791
+ slug: "rectangle",
3792
+ src: "M3 5h18v14H3z",
3793
+ tags: [
3794
+ "shape",
3795
+ "box",
3796
+ "rectangle"
3797
+ ]
3798
+ },
3799
+ {
3800
+ name: "Circle",
3801
+ slug: "circle",
3802
+ src: "M21 12a9 9 0 11-18 0 9 9 0 0118 0z",
3803
+ tags: [
3804
+ "shape",
3805
+ "round",
3806
+ "circle"
3807
+ ]
3808
+ },
3809
+ {
3810
+ name: "Diamond",
3811
+ slug: "diamond",
3812
+ src: "M12 3l9 9-9 9-9-9 9-9z",
3813
+ tags: [
3814
+ "shape",
3815
+ "rhombus",
3816
+ "diamond"
3817
+ ]
3818
+ },
3819
+ {
3820
+ name: "Hexagon",
3821
+ slug: "hexagon",
3822
+ src: "M12 2l7 4v8l-7 4-7-4V6l7-4z",
3823
+ tags: [
3824
+ "shape",
3825
+ "polygon",
3826
+ "hexagon"
3827
+ ]
3828
+ },
3829
+ {
3830
+ name: "Draw Line",
3831
+ slug: "draw-line",
3832
+ src: "M3 21 21 3",
3833
+ tags: [
3834
+ "edit",
3835
+ "write",
3836
+ "draw",
3837
+ "line",
3838
+ "draw-line"
3839
+ ]
3840
+ },
3841
+ {
3842
+ name: "Draw Curve",
3843
+ slug: "draw-curve",
3844
+ src: "M3 21C6 4 18 20 21 3",
3845
+ tags: [
3846
+ "draw",
3847
+ "curve",
3848
+ "line",
3849
+ "s-curve"
3850
+ ]
3851
+ },
3852
+ {
3853
+ name: "Pencil",
3854
+ slug: "pencil",
3855
+ 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",
3856
+ tags: [
3857
+ "edit",
3858
+ "write",
3859
+ "draw",
3860
+ "pencil"
3861
+ ]
3862
+ },
3863
+ {
3864
+ name: "Eraser",
3865
+ slug: "eraser",
3866
+ 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",
3867
+ tags: [
3868
+ "delete",
3869
+ "remove",
3870
+ "clear",
3871
+ "eraser"
3872
+ ]
3873
+ },
3874
+ {
3875
+ name: "Scissor",
3876
+ slug: "scissor",
3877
+ 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",
3878
+ tags: [
3879
+ "cut",
3880
+ "tool",
3881
+ "scissor",
3882
+ "senangwebs",
3883
+ "sw-photobooth"
3884
+ ]
3885
+ },
3886
+ {
3887
+ name: "Font",
3888
+ slug: "font",
3889
+ src: "M4 20.3h4M6 20.25l6-16.5 6 16.5M8 15h8M16 20.3h4",
3890
+ tags: [
3891
+ "text",
3892
+ "typography",
3893
+ "letter",
3894
+ "font"
3895
+ ]
3896
+ },
3897
+ {
3898
+ name: "Text",
3899
+ slug: "text",
3900
+ src: "M12 20.25V3.8M5.2 5.5 5.2 3.8h13.6L18.8 5.5M10 20.3h4",
3901
+ tags: [
3902
+ "text",
3903
+ "typography",
3904
+ "letter",
3905
+ "type"
3906
+ ]
3907
+ },
3908
+ {
3909
+ name: "Text Align Center",
3910
+ slug: "text-align-center",
3911
+ src: "M3.75 5h16.5M5.625 9h12.75M3.75 13h16.5M5.625 17h12.75",
3912
+ tags: [
3913
+ "format",
3914
+ "paragraph",
3915
+ "text-align-center"
3916
+ ]
3917
+ },
3918
+ {
3919
+ name: "Text Align Left",
3920
+ slug: "text-align-left",
3921
+ src: "M3.75 5h16.5M3.75 9h12.75M3.75 13h16.5M3.75 17h12.75",
3922
+ tags: [
3923
+ "format",
3924
+ "paragraph",
3925
+ "text-align-left"
3926
+ ]
3927
+ },
3928
+ {
3929
+ name: "Text Align Right",
3930
+ slug: "text-align-right",
3931
+ src: "M3.75 5h16.5M7.5 9h12.75M3.75 13h16.5M7.5 17h12.75",
3932
+ tags: [
3933
+ "format",
3934
+ "paragraph",
3935
+ "text-align-right"
3936
+ ]
3937
+ },
3938
+ {
3939
+ name: "Text Align Justify",
3940
+ slug: "text-align-justify",
3941
+ src: "M3.75 5h16.5M3.75 9h16.5M3.75 13h16.5M3.75 17h16.5",
3942
+ tags: [
3943
+ "format",
3944
+ "paragraph",
3945
+ "text-align-justify"
3946
+ ]
3947
+ },
3948
+ {
3949
+ name: "Sliders Horizontal",
3950
+ slug: "sliders-horizontal",
3951
+ 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",
3952
+ tags: [
3953
+ "settings",
3954
+ "filters",
3955
+ "adjust",
3956
+ "sliders-horizontal"
3957
+ ]
3958
+ },
3959
+ {
3960
+ name: "Sliders Vertical",
3961
+ slug: "sliders-vertical",
3962
+ 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",
3963
+ tags: [
3964
+ "settings",
3965
+ "filters",
3966
+ "adjust",
3967
+ "sliders-vertical"
3968
+ ]
3969
+ }
3970
+ ];
3971
+
1394
3972
  // UI Controller - Handles DOM manipulation and rendering
1395
3973
 
3974
+
1396
3975
  let UIController$1 = class UIController {
1397
3976
  constructor(editor) {
1398
3977
  this.editor = editor;
@@ -1582,9 +4161,18 @@
1582
4161
  const item = document.createElement("div");
1583
4162
  item.className = "hotspot-item" + (isActive ? " active" : "");
1584
4163
 
1585
- const color = document.createElement("div");
1586
- color.className = "hotspot-color";
1587
- color.style.backgroundColor = hotspot.color;
4164
+ const colorIndicator = document.createElement("div");
4165
+ colorIndicator.className = "hotspot-color";
4166
+ colorIndicator.style.backgroundColor = hotspot.color;
4167
+
4168
+ // If hotspot has an icon, show it with the color applied
4169
+ if (hotspot.icon) {
4170
+ colorIndicator.innerHTML = `<ss-icon icon="${hotspot.icon}" thickness="2.2" style="color: ${hotspot.color}; width: 20px; height: 20px;"></ss-icon>`;
4171
+ colorIndicator.style.backgroundColor = "transparent";
4172
+ colorIndicator.style.display = "flex";
4173
+ colorIndicator.style.alignItems = "center";
4174
+ colorIndicator.style.justifyContent = "center";
4175
+ }
1588
4176
 
1589
4177
  const info = document.createElement("div");
1590
4178
  info.className = "hotspot-info";
@@ -1623,7 +4211,7 @@
1623
4211
 
1624
4212
  actions.appendChild(deleteBtn);
1625
4213
 
1626
- item.appendChild(color);
4214
+ item.appendChild(colorIndicator);
1627
4215
  item.appendChild(info);
1628
4216
  item.appendChild(actions);
1629
4217
 
@@ -1634,6 +4222,58 @@
1634
4222
  return item;
1635
4223
  }
1636
4224
 
4225
+ /**
4226
+ * Set active state on icon grid button
4227
+ */
4228
+ setActiveIconButton(iconName) {
4229
+ const grid = document.getElementById("hotspotIconGrid");
4230
+ if (!grid) return;
4231
+
4232
+ // Remove active from all buttons
4233
+ grid.querySelectorAll(".icon-btn").forEach(btn => {
4234
+ btn.classList.remove("active");
4235
+ });
4236
+
4237
+ // Find and activate the matching button
4238
+ const activeBtn = grid.querySelector(`.icon-btn[data-icon="${iconName}"]`);
4239
+ if (activeBtn) {
4240
+ activeBtn.classList.add("active");
4241
+ }
4242
+ }
4243
+
4244
+ /**
4245
+ * Populate icon grid from SenangStart icons (baked in at build time)
4246
+ */
4247
+ populateIconGrid() {
4248
+ const grid = document.getElementById("hotspotIconGrid");
4249
+ if (!grid) return;
4250
+
4251
+ // Clear existing content
4252
+ grid.innerHTML = "";
4253
+
4254
+ // Add "No icon" button first
4255
+ const noIconBtn = document.createElement("button");
4256
+ noIconBtn.type = "button";
4257
+ noIconBtn.className = "icon-btn active";
4258
+ noIconBtn.dataset.icon = "";
4259
+ noIconBtn.title = "No icon";
4260
+ noIconBtn.innerHTML = '<ss-icon icon="x-mark" thickness="1.5" style="opacity: 0.5;"></ss-icon>';
4261
+ grid.appendChild(noIconBtn);
4262
+
4263
+ // Add buttons for each icon from imported JSON
4264
+ iconsData.forEach(icon => {
4265
+ const btn = document.createElement("button");
4266
+ btn.type = "button";
4267
+ btn.className = "icon-btn";
4268
+ btn.dataset.icon = icon.slug;
4269
+ btn.title = icon.name;
4270
+ btn.innerHTML = `<ss-icon icon="${icon.slug}" thickness="2.2"></ss-icon>`;
4271
+ grid.appendChild(btn);
4272
+ });
4273
+
4274
+ console.log(`Loaded ${iconsData.length} icons`);
4275
+ }
4276
+
1637
4277
  /**
1638
4278
  * Update properties panel for hotspot
1639
4279
  */
@@ -1653,6 +4293,8 @@
1653
4293
  document.getElementById("hotspotColor").value = "#00ff00";
1654
4294
  const colorText = document.getElementById("hotspotColorText");
1655
4295
  if (colorText) colorText.value = "#00ff00";
4296
+ // Reset icon grid to "no icon" button
4297
+ this.setActiveIconButton("");
1656
4298
  document.getElementById("hotspotPosX").value = "";
1657
4299
  document.getElementById("hotspotPosY").value = "";
1658
4300
  document.getElementById("hotspotPosZ").value = "";
@@ -1676,6 +4318,9 @@
1676
4318
  colorText.value = hotspot.color || "#00ff00";
1677
4319
  }
1678
4320
 
4321
+ // Update icon grid active button
4322
+ this.setActiveIconButton(hotspot.icon || "");
4323
+
1679
4324
  // Update position inputs
1680
4325
  const pos = hotspot.position || { x: 0, y: 0, z: 0 };
1681
4326
  document.getElementById("hotspotPosX").value = pos.x;
@@ -1690,16 +4335,34 @@
1690
4335
  * Update properties panel for scene
1691
4336
  */
1692
4337
  updateSceneProperties(scene) {
4338
+ const startingPosDisplay = document.getElementById("startingPositionDisplay");
4339
+
1693
4340
  if (!scene) {
1694
4341
  document.getElementById("sceneId").value = "";
1695
4342
  document.getElementById("sceneName").value = "";
1696
4343
  document.getElementById("sceneImageUrl").value = "";
4344
+ if (startingPosDisplay) {
4345
+ startingPosDisplay.textContent = "Not set (camera keeps current position)";
4346
+ }
1697
4347
  return;
1698
4348
  }
1699
4349
 
1700
4350
  document.getElementById("sceneId").value = scene.id || "";
1701
4351
  document.getElementById("sceneName").value = scene.name || "";
1702
4352
  document.getElementById("sceneImageUrl").value = scene.imageUrl || "";
4353
+
4354
+ // Update starting position display
4355
+ if (startingPosDisplay) {
4356
+ if (scene.startingPosition) {
4357
+ const pitchDeg = (scene.startingPosition.pitch * 180 / Math.PI).toFixed(1);
4358
+ const yawDeg = (scene.startingPosition.yaw * 180 / Math.PI).toFixed(1);
4359
+ startingPosDisplay.textContent = `Pitch: ${pitchDeg}° | Yaw: ${yawDeg}°`;
4360
+ startingPosDisplay.style.color = "var(--accent-primary)";
4361
+ } else {
4362
+ startingPosDisplay.textContent = "Not set (camera keeps current position)";
4363
+ startingPosDisplay.style.color = "var(--text-muted)";
4364
+ }
4365
+ }
1703
4366
  }
1704
4367
 
1705
4368
  /**
@@ -1710,10 +4373,6 @@
1710
4373
  document.getElementById("tourDescription").value = config.description || "";
1711
4374
  document.getElementById("tourInitialScene").value =
1712
4375
  config.initialSceneId || "";
1713
- document.getElementById("tourAutoRotate").checked =
1714
- config.autoRotate || false;
1715
- document.getElementById("tourShowCompass").checked =
1716
- config.showCompass || false;
1717
4376
 
1718
4377
  // Also update project name in header if it exists
1719
4378
  const projectName = document.getElementById("project-name");
@@ -1792,11 +4451,136 @@
1792
4451
  }
1793
4452
  };
1794
4453
 
4454
+ /**
4455
+ * IconRenderer - Converts SenangStart icon names to image data URLs for A-Frame
4456
+ */
4457
+ class IconRenderer {
4458
+ constructor() {
4459
+ this.iconCache = new Map();
4460
+ this.renderContainer = null;
4461
+ }
4462
+
4463
+ /**
4464
+ * Initialize the hidden render container
4465
+ */
4466
+ init() {
4467
+ if (this.renderContainer) return;
4468
+
4469
+ this.renderContainer = document.createElement('div');
4470
+ this.renderContainer.id = 'swt-icon-renderer';
4471
+ this.renderContainer.style.cssText = `
4472
+ position: absolute;
4473
+ left: -9999px;
4474
+ top: -9999px;
4475
+ width: 128px;
4476
+ height: 128px;
4477
+ pointer-events: none;
4478
+ visibility: hidden;
4479
+ `;
4480
+ document.body.appendChild(this.renderContainer);
4481
+ }
4482
+
4483
+ /**
4484
+ * Generate an image data URL from a SenangStart icon
4485
+ * @param {string} iconName - SenangStart icon name (e.g., 'arrow-right')
4486
+ * @param {string} color - Hex color for the icon
4487
+ * @param {number} size - Size in pixels (default 128)
4488
+ * @returns {Promise<string>} - Data URL of the icon image
4489
+ */
4490
+ async generateIconDataUrl(iconName, color = '#ffffff', size = 128) {
4491
+ const cacheKey = `${iconName}-${color}-${size}`;
4492
+
4493
+ if (this.iconCache.has(cacheKey)) {
4494
+ return this.iconCache.get(cacheKey);
4495
+ }
4496
+
4497
+ this.init();
4498
+
4499
+ return new Promise((resolve, reject) => {
4500
+ // Create the ss-icon element
4501
+ this.renderContainer.innerHTML = `
4502
+ <ss-icon
4503
+ icon="${iconName}"
4504
+ thickness="2.5"
4505
+ style="color: ${color}; width: ${size}px; height: ${size}px; display: block;"
4506
+ ></ss-icon>
4507
+ `;
4508
+
4509
+ // Wait for the custom element to render
4510
+ setTimeout(() => {
4511
+ try {
4512
+ const ssIcon = this.renderContainer.querySelector('ss-icon');
4513
+ if (!ssIcon || !ssIcon.shadowRoot) {
4514
+ console.warn(`Icon ${iconName} not rendered properly`);
4515
+ resolve(null);
4516
+ return;
4517
+ }
4518
+
4519
+ // Get the SVG from shadow root
4520
+ const svg = ssIcon.shadowRoot.querySelector('svg');
4521
+ if (!svg) {
4522
+ console.warn(`SVG not found for icon ${iconName}`);
4523
+ resolve(null);
4524
+ return;
4525
+ }
4526
+
4527
+ // Clone and prepare SVG
4528
+ const svgClone = svg.cloneNode(true);
4529
+ svgClone.setAttribute('width', size);
4530
+ svgClone.setAttribute('height', size);
4531
+ svgClone.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
4532
+
4533
+ // Apply the color to all paths/elements
4534
+ svgClone.querySelectorAll('path, circle, rect, line, polyline, polygon').forEach(el => {
4535
+ el.setAttribute('stroke', color);
4536
+ // Keep fill as currentColor if it's set
4537
+ const fill = el.getAttribute('fill');
4538
+ if (fill && fill !== 'none') {
4539
+ el.setAttribute('fill', color);
4540
+ }
4541
+ });
4542
+
4543
+ // Convert SVG to data URL
4544
+ const svgString = new XMLSerializer().serializeToString(svgClone);
4545
+ const dataUrl = 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(svgString)));
4546
+
4547
+ // Cache the result
4548
+ this.iconCache.set(cacheKey, dataUrl);
4549
+
4550
+ resolve(dataUrl);
4551
+ } catch (error) {
4552
+ console.error('Error generating icon data URL:', error);
4553
+ resolve(null);
4554
+ }
4555
+ }, 100); // Wait for custom element to render
4556
+ });
4557
+ }
4558
+
4559
+ /**
4560
+ * Clear the icon cache
4561
+ */
4562
+ clearCache() {
4563
+ this.iconCache.clear();
4564
+ }
4565
+
4566
+ /**
4567
+ * Destroy the renderer
4568
+ */
4569
+ destroy() {
4570
+ if (this.renderContainer && this.renderContainer.parentNode) {
4571
+ this.renderContainer.parentNode.removeChild(this.renderContainer);
4572
+ }
4573
+ this.renderContainer = null;
4574
+ this.iconCache.clear();
4575
+ }
4576
+ }
4577
+
1795
4578
  // Export Manager - Handles JSON generation for SWT library
1796
4579
 
1797
4580
  let ExportManager$1 = class ExportManager {
1798
4581
  constructor(editor) {
1799
4582
  this.editor = editor;
4583
+ this.iconRenderer = new IconRenderer();
1800
4584
  }
1801
4585
 
1802
4586
  /**
@@ -1833,8 +4617,13 @@
1833
4617
  // Add appearance
1834
4618
  hotspotData.appearance = {
1835
4619
  color: hotspot.color || "#FF6B6B",
1836
- scale: "2 2 2",
4620
+ scale: hotspot.scale || "2 2 2",
1837
4621
  };
4622
+
4623
+ // Add icon if set
4624
+ if (hotspot.icon) {
4625
+ hotspotData.appearance.icon = hotspot.icon;
4626
+ }
1838
4627
 
1839
4628
  // Add tooltip if title exists
1840
4629
  if (hotspot.title) {
@@ -1846,6 +4635,11 @@
1846
4635
  return hotspotData;
1847
4636
  }),
1848
4637
  };
4638
+
4639
+ // Add starting position if set
4640
+ if (scene.startingPosition) {
4641
+ scenesData[scene.id].startingPosition = scene.startingPosition;
4642
+ }
1849
4643
  });
1850
4644
 
1851
4645
  // Determine initial scene
@@ -1863,6 +4657,41 @@
1863
4657
  return jsonData;
1864
4658
  }
1865
4659
 
4660
+ /**
4661
+ * Generate JSON with icons baked in as SVG data URLs
4662
+ * This ensures the exported HTML doesn't need the SenangStart icons library
4663
+ */
4664
+ async generateJSONWithBakedIcons() {
4665
+ const jsonData = this.generateJSON();
4666
+
4667
+ // Process all scenes and convert icon names to data URLs
4668
+ for (const sceneId of Object.keys(jsonData.scenes)) {
4669
+ const scene = jsonData.scenes[sceneId];
4670
+
4671
+ for (let i = 0; i < scene.hotspots.length; i++) {
4672
+ const hotspot = scene.hotspots[i];
4673
+ const icon = hotspot.appearance?.icon;
4674
+
4675
+ // Skip if no icon or if it's already a data URL or URL
4676
+ if (!icon) continue;
4677
+ if (icon.startsWith('data:') || icon.startsWith('http') || icon.startsWith('/')) continue;
4678
+
4679
+ // Generate SVG data URL from icon name
4680
+ try {
4681
+ const color = hotspot.appearance?.color || '#ffffff';
4682
+ const dataUrl = await this.iconRenderer.generateIconDataUrl(icon, color, 128);
4683
+ if (dataUrl) {
4684
+ hotspot.appearance.icon = dataUrl;
4685
+ }
4686
+ } catch (err) {
4687
+ console.warn(`Failed to bake icon "${icon}" for export:`, err);
4688
+ }
4689
+ }
4690
+ }
4691
+
4692
+ return jsonData;
4693
+ }
4694
+
1866
4695
  /**
1867
4696
  * Export as JSON file
1868
4697
  */
@@ -1907,10 +4736,10 @@
1907
4736
  }
1908
4737
 
1909
4738
  /**
1910
- * Generate HTML viewer code
4739
+ * Generate HTML viewer code with icons baked in
1911
4740
  */
1912
- generateViewerHTML() {
1913
- const jsonData = this.generateJSON();
4741
+ async generateViewerHTML() {
4742
+ const jsonData = await this.generateJSONWithBakedIcons();
1914
4743
  const title = this.editor.config.title || "Virtual Tour";
1915
4744
 
1916
4745
  return `<!DOCTYPE html>
@@ -1923,7 +4752,7 @@
1923
4752
  </head>
1924
4753
  <body>
1925
4754
  <a-scene id="tour-container">
1926
- <a-camera>
4755
+ <a-camera look-controls>
1927
4756
  <a-cursor></a-cursor>
1928
4757
  </a-camera>
1929
4758
  </a-scene>
@@ -1947,11 +4776,11 @@
1947
4776
  }
1948
4777
 
1949
4778
  /**
1950
- * Export as standalone HTML viewer
4779
+ * Export as standalone HTML viewer with icons baked in
1951
4780
  */
1952
- exportViewerHTML() {
4781
+ async exportViewerHTML() {
1953
4782
  try {
1954
- const html = this.generateViewerHTML();
4783
+ const html = await this.generateViewerHTML();
1955
4784
  const title = this.editor.config.title || "tour";
1956
4785
  const filename = sanitizeId(title) + "-viewer.html";
1957
4786
 
@@ -1996,9 +4825,7 @@
1996
4825
  this.config = {
1997
4826
  title: options.projectName || 'My Virtual Tour',
1998
4827
  description: '',
1999
- initialSceneId: '',
2000
- autoRotate: false,
2001
- showCompass: false
4828
+ initialSceneId: ''
2002
4829
  };
2003
4830
 
2004
4831
  // Store initialization options
@@ -2040,13 +4867,16 @@
2040
4867
  const previewInit = await this.previewController.init();
2041
4868
  if (!previewInit) {
2042
4869
  console.error('Failed to initialize preview controller');
2043
- showToast('Failed to initialize preview', 'error');
4870
+ showToast$1('Failed to initialize preview', 'error');
2044
4871
  return false;
2045
4872
  }
2046
4873
 
2047
4874
  // Setup event listeners
2048
4875
  this.setupEventListeners();
2049
4876
 
4877
+ // Populate icon grid
4878
+ this.uiController.populateIconGrid();
4879
+
2050
4880
  // Load saved project if exists (but only if it has valid data)
2051
4881
  if (this.storageManager.hasProject()) {
2052
4882
  try {
@@ -2076,7 +4906,7 @@
2076
4906
  this.render();
2077
4907
  }
2078
4908
 
2079
- showToast('Editor ready', 'success');
4909
+ showToast$1('Editor ready', 'success');
2080
4910
 
2081
4911
  return true;
2082
4912
  }
@@ -2121,7 +4951,7 @@
2121
4951
  });
2122
4952
 
2123
4953
  document.getElementById('addHotspotBtn')?.addEventListener('click', () => {
2124
- this.hotspotEditor.enablePlacementMode();
4954
+ this.addHotspotAtCursor();
2125
4955
  });
2126
4956
 
2127
4957
  document.getElementById('clearHotspotsBtn')?.addEventListener('click', () => {
@@ -2153,6 +4983,19 @@
2153
4983
  this.updateCurrentHotspot('color', e.target.value);
2154
4984
  });
2155
4985
 
4986
+ // Icon grid button clicks
4987
+ document.getElementById('hotspotIconGrid')?.addEventListener('click', (e) => {
4988
+ const btn = e.target.closest('.icon-btn');
4989
+ if (btn) {
4990
+ const iconValue = btn.dataset.icon;
4991
+ // Update active state
4992
+ document.querySelectorAll('#hotspotIconGrid .icon-btn').forEach(b => b.classList.remove('active'));
4993
+ btn.classList.add('active');
4994
+ // Update hotspot
4995
+ this.updateCurrentHotspot('icon', iconValue);
4996
+ }
4997
+ });
4998
+
2156
4999
  document.getElementById('hotspotPosX')?.addEventListener('input', debounce((e) => {
2157
5000
  this.updateCurrentHotspotPosition('x', parseFloat(e.target.value) || 0);
2158
5001
  }, 300));
@@ -2177,6 +5020,14 @@
2177
5020
  this.updateCurrentSceneImage(e.target.value);
2178
5021
  }, 300));
2179
5022
 
5023
+ document.getElementById('setStartingPosBtn')?.addEventListener('click', () => {
5024
+ this.setSceneStartingPosition();
5025
+ });
5026
+
5027
+ document.getElementById('clearStartingPosBtn')?.addEventListener('click', () => {
5028
+ this.clearSceneStartingPosition();
5029
+ });
5030
+
2180
5031
  document.getElementById('tourTitle')?.addEventListener('input', debounce((e) => {
2181
5032
  this.config.title = e.target.value;
2182
5033
  this.markUnsavedChanges();
@@ -2204,16 +5055,6 @@
2204
5055
  this.config.initialSceneId = e.target.value;
2205
5056
  this.markUnsavedChanges();
2206
5057
  });
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
5058
 
2218
5059
  document.getElementById('exportJsonBtn')?.addEventListener('click', () => {
2219
5060
  this.exportManager.exportJSON();
@@ -2223,8 +5064,8 @@
2223
5064
  this.exportManager.copyJSON();
2224
5065
  });
2225
5066
 
2226
- document.getElementById('exportViewerBtn')?.addEventListener('click', () => {
2227
- this.exportManager.exportViewerHTML();
5067
+ document.getElementById('exportViewerBtn')?.addEventListener('click', async () => {
5068
+ await this.exportManager.exportViewerHTML();
2228
5069
  });
2229
5070
 
2230
5071
  document.querySelectorAll('.modal-close').forEach(btn => {
@@ -2267,7 +5108,7 @@
2267
5108
 
2268
5109
  for (const file of files) {
2269
5110
  if (!file.type.startsWith('image/')) {
2270
- showToast(`${file.name} is not an image`, 'error');
5111
+ showToast$1(`${file.name} is not an image`, 'error');
2271
5112
  continue;
2272
5113
  }
2273
5114
 
@@ -2292,7 +5133,15 @@
2292
5133
  position.y = parseFloat(position.y.toFixed(2));
2293
5134
  position.z = parseFloat(position.z.toFixed(2));
2294
5135
  }
2295
- const hotspot = this.hotspotEditor.addHotspot(position);
5136
+
5137
+ // Capture current camera orientation for reliable pointing later
5138
+ const cameraRotation = this.previewController.getCameraRotation();
5139
+ const cameraOrientation = cameraRotation ? {
5140
+ pitch: cameraRotation.x,
5141
+ yaw: cameraRotation.y
5142
+ } : null;
5143
+
5144
+ const hotspot = this.hotspotEditor.addHotspot(position, '', cameraOrientation);
2296
5145
  if (hotspot) {
2297
5146
  this.lastRenderedSceneIndex = -1;
2298
5147
  this.render();
@@ -2302,6 +5151,26 @@
2302
5151
  }
2303
5152
  }
2304
5153
 
5154
+ /**
5155
+ * Add hotspot at current cursor position (center of view)
5156
+ * This uses the A-Cursor's raycaster intersection with the sky sphere
5157
+ */
5158
+ addHotspotAtCursor() {
5159
+ const scene = this.sceneManager.getCurrentScene();
5160
+ if (!scene) {
5161
+ showToast$1('Please select a scene first', 'error');
5162
+ return;
5163
+ }
5164
+
5165
+ const position = this.previewController.getCursorIntersection();
5166
+ if (!position) {
5167
+ showToast$1('Could not get cursor position. Please ensure the preview is loaded.', 'error');
5168
+ return;
5169
+ }
5170
+
5171
+ this.addHotspotAtPosition(position);
5172
+ }
5173
+
2305
5174
  /**
2306
5175
  * Select scene by index
2307
5176
  */
@@ -2337,8 +5206,8 @@
2337
5206
  this.uiController.updateTargetSceneOptions();
2338
5207
  this.uiController.switchTab('hotspot');
2339
5208
 
2340
- if (hotspot && hotspot.position) {
2341
- this.previewController.pointCameraToHotspot(hotspot.position);
5209
+ if (hotspot) {
5210
+ this.previewController.pointCameraToHotspot(hotspot);
2342
5211
  }
2343
5212
  }
2344
5213
  }
@@ -2412,6 +5281,10 @@
2412
5281
 
2413
5282
  hotspot.position[axis] = value;
2414
5283
 
5284
+ // Clear camera orientation since position changed manually
5285
+ // Will fallback to position-based calculation when pointing camera
5286
+ hotspot.cameraOrientation = null;
5287
+
2415
5288
  const pos = hotspot.position;
2416
5289
  const distance = Math.sqrt(pos.x * pos.x + pos.y * pos.y + pos.z * pos.z);
2417
5290
  if (distance > 10) {
@@ -2421,7 +5294,7 @@
2421
5294
  pos.z *= scale;
2422
5295
 
2423
5296
  document.getElementById(`hotspotPos${axis.toUpperCase()}`).value = pos[axis].toFixed(2);
2424
- showToast('Position clamped to 10-unit radius', 'info');
5297
+ showToast$1('Position clamped to 10-unit radius', 'info');
2425
5298
  }
2426
5299
 
2427
5300
  await this.previewController.updateHotspotMarker(index);
@@ -2460,12 +5333,55 @@
2460
5333
  if (scene) {
2461
5334
  await this.previewController.loadScene(scene);
2462
5335
  this.lastRenderedSceneIndex = index;
2463
- showToast('Scene image updated', 'success');
5336
+ showToast$1('Scene image updated', 'success');
2464
5337
  }
2465
5338
  this.markUnsavedChanges();
2466
5339
  }
2467
5340
  }
2468
5341
 
5342
+ /**
5343
+ * Set scene starting position to current camera rotation
5344
+ */
5345
+ setSceneStartingPosition() {
5346
+ const scene = this.sceneManager.getCurrentScene();
5347
+ if (!scene) {
5348
+ showToast$1('No scene selected', 'error');
5349
+ return;
5350
+ }
5351
+
5352
+ const rotation = this.previewController.getCameraRotation();
5353
+ if (!rotation) {
5354
+ showToast$1('Could not get camera rotation', 'error');
5355
+ return;
5356
+ }
5357
+
5358
+ scene.startingPosition = {
5359
+ pitch: rotation.x,
5360
+ yaw: rotation.y
5361
+ };
5362
+
5363
+ this.uiController.updateSceneProperties(scene);
5364
+ this.markUnsavedChanges();
5365
+ showToast$1('Starting position set', 'success');
5366
+ }
5367
+
5368
+ /**
5369
+ * Clear scene starting position
5370
+ */
5371
+ clearSceneStartingPosition() {
5372
+ const scene = this.sceneManager.getCurrentScene();
5373
+ if (!scene) {
5374
+ showToast$1('No scene selected', 'error');
5375
+ return;
5376
+ }
5377
+
5378
+ scene.startingPosition = null;
5379
+
5380
+ this.uiController.updateSceneProperties(scene);
5381
+ this.markUnsavedChanges();
5382
+ showToast$1('Starting position cleared', 'success');
5383
+ }
5384
+
2469
5385
  /**
2470
5386
  * Render all UI
2471
5387
  */
@@ -2517,7 +5433,7 @@
2517
5433
 
2518
5434
  if (this.storageManager.saveProject(projectData)) {
2519
5435
  this.hasUnsavedChanges = false;
2520
- showToast('Project saved', 'success');
5436
+ showToast$1('Project saved', 'success');
2521
5437
  return true;
2522
5438
  }
2523
5439
  return false;
@@ -2533,7 +5449,7 @@
2533
5449
  this.sceneManager.loadScenes(projectData.scenes || []);
2534
5450
  this.hasUnsavedChanges = false;
2535
5451
  this.render();
2536
- showToast('Project loaded', 'success');
5452
+ showToast$1('Project loaded', 'success');
2537
5453
  return true;
2538
5454
  }
2539
5455
  return false;
@@ -2552,16 +5468,14 @@
2552
5468
  this.config = {
2553
5469
  title: 'My Virtual Tour',
2554
5470
  description: '',
2555
- initialSceneId: '',
2556
- autoRotate: false,
2557
- showCompass: false
5471
+ initialSceneId: ''
2558
5472
  };
2559
5473
 
2560
5474
  this.sceneManager.clearScenes();
2561
5475
  this.hasUnsavedChanges = false;
2562
5476
  this.render();
2563
5477
 
2564
- showToast('New project created', 'success');
5478
+ showToast$1('New project created', 'success');
2565
5479
  return true;
2566
5480
  }
2567
5481
 
@@ -2591,7 +5505,7 @@
2591
5505
  this.render();
2592
5506
  this.uiController.setLoading(false);
2593
5507
 
2594
- showToast('Project imported successfully', 'success');
5508
+ showToast$1('Project imported successfully', 'success');
2595
5509
  } catch (error) {
2596
5510
  this.uiController.setLoading(false);
2597
5511
  console.error('Import failed:', error);