Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9e996ef63c | ||
|
|
6ec9cc3dcf | ||
|
|
01fa96ced3 | ||
|
|
481b27cc49 | ||
|
|
c5df7e73c6 | ||
|
|
428088436d | ||
|
|
eec2c97595 | ||
|
|
f0529b9ef7 |
14
icons/arrow-down-from-line.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"direction",
|
||||||
|
"download",
|
||||||
|
"expand",
|
||||||
|
"fold",
|
||||||
|
"vertical"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"arrows",
|
||||||
|
"files"
|
||||||
|
]
|
||||||
|
}
|
||||||
15
icons/arrow-down-from-line.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<line x1="12" x2="12" y1="21" y2="7" />
|
||||||
|
<polyline points="6 15 12 21 18 15" />
|
||||||
|
<path d="M19 3H5" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 314 B |
11
icons/arrow-down-to-dot.json
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"direction",
|
||||||
|
"step",
|
||||||
|
"into"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"arrows"
|
||||||
|
]
|
||||||
|
}
|
||||||
15
icons/arrow-down-to-dot.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<line x1="12" x2="12" y1="2" y2="16" />
|
||||||
|
<polyline points="19,9 12,16 5,9" />
|
||||||
|
<circle cx="12" cy="21" r="1" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 324 B |
18
icons/arrow-down-to-line.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"direction",
|
||||||
|
"download",
|
||||||
|
"git",
|
||||||
|
"version control",
|
||||||
|
"pull",
|
||||||
|
"collapse",
|
||||||
|
"fold",
|
||||||
|
"vertical"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"arrows",
|
||||||
|
"files",
|
||||||
|
"development"
|
||||||
|
]
|
||||||
|
}
|
||||||
15
icons/arrow-down-to-line.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<line x1="12" x2="12" y1="17" y2="3" />
|
||||||
|
<polyline points="6 11 12 17 18 11" />
|
||||||
|
<path d="M19 21H5" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 315 B |
12
icons/arrow-left-from-line.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"direction",
|
||||||
|
"expand",
|
||||||
|
"fold",
|
||||||
|
"horizontal"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"arrows"
|
||||||
|
]
|
||||||
|
}
|
||||||
15
icons/arrow-left-from-line.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<line x1="3" x2="17" y1="12" y2="12" />
|
||||||
|
<polyline points="9 6 3 12 9 18" />
|
||||||
|
<path d="M21 19V5" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 312 B |
12
icons/arrow-left-to-line.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"direction",
|
||||||
|
"collapse",
|
||||||
|
"fold",
|
||||||
|
"horizontal"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"arrows"
|
||||||
|
]
|
||||||
|
}
|
||||||
15
icons/arrow-left-to-line.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<line x1="7" x2="21" y1="12" y2="12" />
|
||||||
|
<polyline points="13 6 7 12 13 18" />
|
||||||
|
<path d="M3 19V5" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 313 B |
13
icons/arrow-right-from-line.json
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"direction",
|
||||||
|
"export",
|
||||||
|
"expand",
|
||||||
|
"fold",
|
||||||
|
"horizontal"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"arrows"
|
||||||
|
]
|
||||||
|
}
|
||||||
15
icons/arrow-right-from-line.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<line x1="21" x2="7" y1="12" y2="12" />
|
||||||
|
<polyline points="15 18 21 12 15 6" />
|
||||||
|
<path d="M3 5v14" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 314 B |
19
icons/arrow-right-to-line.json
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"keyboard",
|
||||||
|
"key",
|
||||||
|
"tab",
|
||||||
|
"mac",
|
||||||
|
"button",
|
||||||
|
"indent",
|
||||||
|
"direction",
|
||||||
|
"collapse",
|
||||||
|
"fold",
|
||||||
|
"horizontal"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"arrows",
|
||||||
|
"development"
|
||||||
|
]
|
||||||
|
}
|
||||||
15
icons/arrow-right-to-line.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<line x1="17" x2="3" y1="12" y2="12" />
|
||||||
|
<polyline points="11 18 17 12 11 6" />
|
||||||
|
<path d="M21 5v14" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 315 B |
11
icons/arrow-up-from-dot.json
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"direction",
|
||||||
|
"step",
|
||||||
|
"out"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"arrows"
|
||||||
|
]
|
||||||
|
}
|
||||||
15
icons/arrow-up-from-dot.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<line x1="12" x2="12" y1="16" y2="2" />
|
||||||
|
<polyline points="5,9 12,2 19,9" />
|
||||||
|
<circle cx="12" cy="21" r="1" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 323 B |
18
icons/arrow-up-from-line.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"direction",
|
||||||
|
"upload",
|
||||||
|
"git",
|
||||||
|
"version control",
|
||||||
|
"push",
|
||||||
|
"expand",
|
||||||
|
"fold",
|
||||||
|
"vertical"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"arrows",
|
||||||
|
"files",
|
||||||
|
"development"
|
||||||
|
]
|
||||||
|
}
|
||||||
15
icons/arrow-up-from-line.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<line x1="12" x2="12" y1="3" y2="17" />
|
||||||
|
<polyline points="18 9 12 3 6 9" />
|
||||||
|
<path d="M5 21h14" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 312 B |
14
icons/arrow-up-to-line.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"direction",
|
||||||
|
"upload",
|
||||||
|
"collapse",
|
||||||
|
"fold",
|
||||||
|
"vertical"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"arrows",
|
||||||
|
"files"
|
||||||
|
]
|
||||||
|
}
|
||||||
15
icons/arrow-up-to-line.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<line x1="12" x2="12" y1="7" y2="21" />
|
||||||
|
<polyline points="18 13 12 7 6 13" />
|
||||||
|
<path d="M5 3h14" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 313 B |
19
icons/combine.json
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"cubes",
|
||||||
|
"packages",
|
||||||
|
"parts",
|
||||||
|
"units",
|
||||||
|
"collection",
|
||||||
|
"cluster",
|
||||||
|
"combine",
|
||||||
|
"gather",
|
||||||
|
"merge"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"shapes",
|
||||||
|
"development",
|
||||||
|
"files"
|
||||||
|
]
|
||||||
|
}
|
||||||
18
icons/combine.svg
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<rect width="8" height="8" x="2" y="2" rx="2" />
|
||||||
|
<path d="M14 2c1.1 0 2 .9 2 2v4c0 1.1-.9 2-2 2" />
|
||||||
|
<path d="M20 2c1.1 0 2 .9 2 2v4c0 1.1-.9 2-2 2" />
|
||||||
|
<path d="M10 18H5c-1.7 0-3-1.3-3-3v-1" />
|
||||||
|
<polyline points="7 21 10 18 7 15" />
|
||||||
|
<rect width="8" height="8" x="14" y="14" rx="2" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 502 B |
@@ -10,9 +10,9 @@
|
|||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<ellipse cx="12" cy="5" rx="9" ry="3" />
|
<ellipse cx="12" cy="5" rx="9" ry="3" />
|
||||||
<path d="M3 12c0 1.18 2.03 2.2 5 2.7" />
|
<path d="M3 5v14c0 1.4 3 2.7 7 3" />
|
||||||
<path d="M21 5v4.5" />
|
<path d="M3 12c0 1.2 2 2.5 5 3" />
|
||||||
<path d="m12 16 1.27-1.35a4.75 4.75 0 1 1 .41 5.74" />
|
<path d="M21 5v4" />
|
||||||
|
<path d="M13 20a5 5 0 0 0 9-3 4.5 4.5 0 0 0-4.5-4.5c-1.33 0-2.54.54-3.41 1.41L12 16" />
|
||||||
<path d="M12 12v4h4" />
|
<path d="M12 12v4h4" />
|
||||||
<path d="M3 5v14c0 1.43 2.97 2.63 7 2.93" />
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 449 B After Width: | Height: | Size: 466 B |
20
icons/dot.json
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"interpunct",
|
||||||
|
"interpoint",
|
||||||
|
"middot",
|
||||||
|
"step",
|
||||||
|
"punctuation",
|
||||||
|
"characters",
|
||||||
|
"font",
|
||||||
|
"typography",
|
||||||
|
"type",
|
||||||
|
"text",
|
||||||
|
"center"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"shapes",
|
||||||
|
"text"
|
||||||
|
]
|
||||||
|
}
|
||||||
13
icons/dot.svg
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<circle cx="12.1" cy="12.1" r="1" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 247 B |
14
icons/list-restart.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"reset",
|
||||||
|
"refresh",
|
||||||
|
"reload",
|
||||||
|
"playlist",
|
||||||
|
"replay"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"multimedia",
|
||||||
|
"text"
|
||||||
|
]
|
||||||
|
}
|
||||||
17
icons/list-restart.svg
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<path d="M21 6H3" />
|
||||||
|
<path d="M7 12H3" />
|
||||||
|
<path d="M7 18H3" />
|
||||||
|
<path d="M12 18a5 5 0 0 0 9-3 4.5 4.5 0 0 0-4.5-4.5c-1.33 0-2.54.54-3.41 1.41L11 14" />
|
||||||
|
<path d="M11 10v4h4" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 393 B |
15
icons/menu-square.json
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"bars",
|
||||||
|
"navigation",
|
||||||
|
"hamburger",
|
||||||
|
"options",
|
||||||
|
"menu bar",
|
||||||
|
"panel"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"layout",
|
||||||
|
"account"
|
||||||
|
]
|
||||||
|
}
|
||||||
16
icons/menu-square.svg
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<rect width="18" height="18" x="3" y="3" rx="2" />
|
||||||
|
<path d="M7 8h10" />
|
||||||
|
<path d="M7 12h10" />
|
||||||
|
<path d="M7 16h10" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 332 B |
14
icons/plug-zap-2.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"electricity",
|
||||||
|
"electronics",
|
||||||
|
"charge",
|
||||||
|
"charging",
|
||||||
|
"battery",
|
||||||
|
"connect"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"devices"
|
||||||
|
]
|
||||||
|
}
|
||||||
17
icons/plug-zap-2.svg
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<path d="m13 2-2 2.5h3L12 7" />
|
||||||
|
<path d="M10 14v-3" />
|
||||||
|
<path d="M14 14v-3" />
|
||||||
|
<path d="M11 19c-1.7 0-3-1.3-3-3v-2h8v2c0 1.7-1.3 3-3 3Z" />
|
||||||
|
<path d="M12 22v-3" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 380 B |
@@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"$schema": "../icon.schema.json",
|
"$schema": "../icon.schema.json",
|
||||||
"tags": [
|
"tags": [
|
||||||
|
"electricity",
|
||||||
|
"electronics",
|
||||||
"charge",
|
"charge",
|
||||||
"charging",
|
"charging",
|
||||||
"battery",
|
"battery",
|
||||||
|
|||||||
@@ -9,9 +9,9 @@
|
|||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<rect x="8" y="13" width="8" height="6" rx="2" />
|
<path d="M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z" />
|
||||||
<path d="m13 2-2 2.5h3L12 7" />
|
<path d="m2 22 3-3" />
|
||||||
<path d="M12 22v-3" />
|
<path d="M7.5 13.5 10 11" />
|
||||||
<path d="M10 13v-2.5" />
|
<path d="M10.5 16.5 13 14" />
|
||||||
<path d="M14 13v-2.5" />
|
<path d="m18 3-4 4h6l-4 4" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 373 B After Width: | Height: | Size: 413 B |
@@ -2,6 +2,7 @@
|
|||||||
"$schema": "../icon.schema.json",
|
"$schema": "../icon.schema.json",
|
||||||
"tags": [
|
"tags": [
|
||||||
"electricity",
|
"electricity",
|
||||||
|
"electronics",
|
||||||
"socket",
|
"socket",
|
||||||
"outlet"
|
"outlet"
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<path d="M12 22v-5" />
|
<path d="M12 22v-5" />
|
||||||
<path d="M9 7V2" />
|
<path d="M9 8V2" />
|
||||||
<path d="M15 7V2" />
|
<path d="M15 8V2" />
|
||||||
<path d="M6 13V8h12v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4Z" />
|
<path d="M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 338 B After Width: | Height: | Size: 335 B |
14
icons/redo-dot.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"redo",
|
||||||
|
"history",
|
||||||
|
"step",
|
||||||
|
"over",
|
||||||
|
"forward"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"text",
|
||||||
|
"arrows"
|
||||||
|
]
|
||||||
|
}
|
||||||
15
icons/redo-dot.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<circle cx="12" cy="17" r="1" />
|
||||||
|
<path d="M21 7v6h-6" />
|
||||||
|
<path d="M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3l3 2.7" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 326 B |
13
icons/undo-dot.json
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"redo",
|
||||||
|
"history",
|
||||||
|
"step",
|
||||||
|
"back"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"text",
|
||||||
|
"arrows"
|
||||||
|
]
|
||||||
|
}
|
||||||
15
icons/undo-dot.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<circle cx="12" cy="17" r="1" />
|
||||||
|
<path d="M3 7v6h6" />
|
||||||
|
<path d="M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 324 B |
15
icons/unplug.json
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"tags": [
|
||||||
|
"electricity",
|
||||||
|
"electronics",
|
||||||
|
"socket",
|
||||||
|
"outlet",
|
||||||
|
"disconnect"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"devices",
|
||||||
|
"coding",
|
||||||
|
"development"
|
||||||
|
]
|
||||||
|
}
|
||||||
18
icons/unplug.svg
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<path d="m19 5 3-3" />
|
||||||
|
<path d="m2 22 3-3" />
|
||||||
|
<path d="M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z" />
|
||||||
|
<path d="M7.5 13.5 10 11" />
|
||||||
|
<path d="M10.5 16.5 13 14" />
|
||||||
|
<path d="m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 489 B |
@@ -173,6 +173,31 @@ const ControlPath = ({
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const Radii = ({
|
||||||
|
paths,
|
||||||
|
...props
|
||||||
|
}: { paths: Path[] } & PathProps<
|
||||||
|
'strokeWidth' | 'stroke' | 'strokeDasharray' | 'strokeOpacity',
|
||||||
|
any
|
||||||
|
>) => {
|
||||||
|
return (
|
||||||
|
<g className="svg-preview-radii-group" {...props}>
|
||||||
|
{paths
|
||||||
|
.filter(({ circle }) => circle)
|
||||||
|
.map(({ c, prev, next, circle: { x, y, r } }) =>
|
||||||
|
c.name === 'circle' ? (
|
||||||
|
<path d={`M${x} ${y}h.01`} />
|
||||||
|
) : (
|
||||||
|
<>
|
||||||
|
<path d={`M${prev.x} ${prev.y} ${x} ${y} ${next.x} ${next.y}`} />
|
||||||
|
<circle cy={y} cx={x} r={r} />
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
)}
|
||||||
|
</g>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
const SvgPreview = React.forwardRef<
|
const SvgPreview = React.forwardRef<
|
||||||
SVGSVGElement,
|
SVGSVGElement,
|
||||||
{
|
{
|
||||||
@@ -184,6 +209,7 @@ const SvgPreview = React.forwardRef<
|
|||||||
|
|
||||||
const darkModeCss = `@media screen and (prefers-color-scheme: dark) {
|
const darkModeCss = `@media screen and (prefers-color-scheme: dark) {
|
||||||
.svg-preview-grid-group,
|
.svg-preview-grid-group,
|
||||||
|
.svg-preview-radii-group,
|
||||||
.svg-preview-shadow-mask-group,
|
.svg-preview-shadow-mask-group,
|
||||||
.svg-preview-shadow-group {
|
.svg-preview-shadow-group {
|
||||||
stroke: #fff;
|
stroke: #fff;
|
||||||
@@ -223,6 +249,13 @@ const SvgPreview = React.forwardRef<
|
|||||||
'#52A675',
|
'#52A675',
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
|
<Radii
|
||||||
|
paths={paths}
|
||||||
|
strokeWidth={0.12}
|
||||||
|
strokeDasharray="0 0.25 0.25"
|
||||||
|
stroke="#777"
|
||||||
|
strokeOpacity={0.3}
|
||||||
|
/>
|
||||||
<ControlPath radius={1} paths={paths} pointSize={1} stroke="#fff" strokeWidth={0.125} />
|
<ControlPath radius={1} paths={paths} pointSize={1} stroke="#fff" strokeWidth={0.125} />
|
||||||
{children}
|
{children}
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ export type Path = {
|
|||||||
prev: Point;
|
prev: Point;
|
||||||
next: Point;
|
next: Point;
|
||||||
isStart: boolean;
|
isStart: boolean;
|
||||||
|
circle: { x: number; y: number; r: number };
|
||||||
c: ReturnType<typeof getCommands>[number];
|
c: ReturnType<typeof getCommands>[number];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -12,33 +12,66 @@ export function assert(value: unknown): asserts value {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const extractPaths = (node: INode): { d: string; name: typeof node.name }[] => {
|
const convertToPathNode = (node: INode): { d: string; name: typeof node.name } => {
|
||||||
if (/(rect|circle|ellipse|polygon|polyline|line|path)/.test(node.name)) {
|
if (node.name === 'path') {
|
||||||
return [{ d: toPath(node), name: node.name }];
|
return { d: node.attributes.d, name: node.name };
|
||||||
|
}
|
||||||
|
if (node.name === 'circle') {
|
||||||
|
const cx = parseFloat(node.attributes.cx);
|
||||||
|
const cy = parseFloat(node.attributes.cy);
|
||||||
|
const r = parseFloat(node.attributes.r);
|
||||||
|
return {
|
||||||
|
d: [
|
||||||
|
`M ${cx} ${cy - r}`,
|
||||||
|
`a ${r} ${r} 0 0 1 ${r} ${r}`,
|
||||||
|
`a ${r} ${r} 0 0 1 ${0 - r} ${r}`,
|
||||||
|
`a ${r} ${r} 0 0 1 ${0 - r} ${0 - r}`,
|
||||||
|
`a ${r} ${r} 0 0 1 ${r} ${0 - r}`,
|
||||||
|
].join(''),
|
||||||
|
name: node.name,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return { d: toPath(node).replace(/z$/i, ''), name: node.name };
|
||||||
|
};
|
||||||
|
|
||||||
|
const extractNodes = (node: INode): INode[] => {
|
||||||
|
if (['rect', 'circle', 'ellipse', 'polygon', 'polyline', 'line', 'path'].includes(node.name)) {
|
||||||
|
return [node];
|
||||||
} else if (node.children && Array.isArray(node.children)) {
|
} else if (node.children && Array.isArray(node.children)) {
|
||||||
return node.children.flatMap(extractPaths);
|
return node.children.flatMap(extractNodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
return [];
|
return [];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const getNodes = (src: string) =>
|
||||||
|
extractNodes(parseSync(src.includes('<svg') ? src : `<svg>${src}</svg>`));
|
||||||
|
|
||||||
export const getCommands = (src: string) =>
|
export const getCommands = (src: string) =>
|
||||||
extractPaths(parseSync(src)).flatMap(({ d, name }, idx) =>
|
getNodes(src)
|
||||||
new SVGPathData(d).toAbs().commands.map((c) => ({ ...c, id: idx, name }))
|
.map(convertToPathNode)
|
||||||
);
|
.flatMap(({ d, name }, idx) =>
|
||||||
|
new SVGPathData(d).toAbs().commands.map((c, cIdx) => ({ ...c, id: idx, idx: cIdx, name }))
|
||||||
|
);
|
||||||
|
|
||||||
export const getPaths = (src: string) => {
|
export const getPaths = (src: string) => {
|
||||||
const commands = getCommands(src.includes('<svg') ? src : `<svg>${src}</svg>`);
|
const commands = getCommands(src.includes('<svg') ? src : `<svg>${src}</svg>`);
|
||||||
const paths: Path[] = [];
|
const paths: Path[] = [];
|
||||||
let prev: Point | undefined = undefined;
|
let prev: Point | undefined = undefined;
|
||||||
let start: Point | undefined = undefined;
|
let start: Point | undefined = undefined;
|
||||||
const addPath = (c: (typeof commands)[number], next: Point, d?: string) => {
|
const addPath = (
|
||||||
|
c: typeof commands[number],
|
||||||
|
next: Point,
|
||||||
|
d?: string,
|
||||||
|
circle?: Path['circle']
|
||||||
|
) => {
|
||||||
assert(prev);
|
assert(prev);
|
||||||
paths.push({
|
paths.push({
|
||||||
c,
|
c,
|
||||||
d: d || `M${prev.x} ${prev.y}L${next.x} ${next.y}`,
|
d: d || `M ${prev.x} ${prev.y} L ${next.x} ${next.y}`,
|
||||||
prev,
|
prev,
|
||||||
next,
|
next,
|
||||||
|
circle,
|
||||||
isStart: start === prev,
|
isStart: start === prev,
|
||||||
});
|
});
|
||||||
prev = next;
|
prev = next;
|
||||||
@@ -77,7 +110,7 @@ export const getPaths = (src: string) => {
|
|||||||
}
|
}
|
||||||
case SVGPathData.CURVE_TO: {
|
case SVGPathData.CURVE_TO: {
|
||||||
assert(prev);
|
assert(prev);
|
||||||
addPath(c, c, `M ${prev.x},${prev.y} ${encodeSVGPath(c)}`);
|
addPath(c, c, `M ${prev.x} ${prev.y} ${encodeSVGPath(c)}`);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SVGPathData.SMOOTH_CURVE_TO: {
|
case SVGPathData.SMOOTH_CURVE_TO: {
|
||||||
@@ -86,16 +119,16 @@ export const getPaths = (src: string) => {
|
|||||||
const reflectedCp1 = {
|
const reflectedCp1 = {
|
||||||
x:
|
x:
|
||||||
previousCommand &&
|
previousCommand &&
|
||||||
(previousCommand.type === SVGPathData.SMOOTH_CURVE_TO ||
|
(previousCommand.type === SVGPathData.SMOOTH_CURVE_TO ||
|
||||||
previousCommand.type === SVGPathData.CURVE_TO)
|
previousCommand.type === SVGPathData.CURVE_TO)
|
||||||
? previousCommand.relative
|
? previousCommand.relative
|
||||||
? previousCommand.x2 - previousCommand.x
|
? previousCommand.x2 - previousCommand.x
|
||||||
: previousCommand.x2 - prev.x
|
: previousCommand.x2 - prev.x
|
||||||
: 0,
|
: 0,
|
||||||
y:
|
y:
|
||||||
previousCommand &&
|
previousCommand &&
|
||||||
(previousCommand.type === SVGPathData.SMOOTH_CURVE_TO ||
|
(previousCommand.type === SVGPathData.SMOOTH_CURVE_TO ||
|
||||||
previousCommand.type === SVGPathData.CURVE_TO)
|
previousCommand.type === SVGPathData.CURVE_TO)
|
||||||
? previousCommand.relative
|
? previousCommand.relative
|
||||||
? previousCommand.y2 - previousCommand.y
|
? previousCommand.y2 - previousCommand.y
|
||||||
: previousCommand.y2 - prev.y
|
: previousCommand.y2 - prev.y
|
||||||
@@ -104,7 +137,7 @@ export const getPaths = (src: string) => {
|
|||||||
addPath(
|
addPath(
|
||||||
c,
|
c,
|
||||||
c,
|
c,
|
||||||
`M ${prev.x},${prev.y} ${encodeSVGPath({
|
`M ${prev.x} ${prev.y} ${encodeSVGPath({
|
||||||
type: SVGPathData.CURVE_TO,
|
type: SVGPathData.CURVE_TO,
|
||||||
relative: false,
|
relative: false,
|
||||||
x: c.x,
|
x: c.x,
|
||||||
@@ -119,7 +152,7 @@ export const getPaths = (src: string) => {
|
|||||||
}
|
}
|
||||||
case SVGPathData.QUAD_TO: {
|
case SVGPathData.QUAD_TO: {
|
||||||
assert(prev);
|
assert(prev);
|
||||||
addPath(c, c, `M ${prev.x},${prev.y} ${encodeSVGPath(c)}`);
|
addPath(c, c, `M ${prev.x} ${prev.y} ${encodeSVGPath(c)}`);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SVGPathData.SMOOTH_QUAD_TO: {
|
case SVGPathData.SMOOTH_QUAD_TO: {
|
||||||
@@ -157,7 +190,7 @@ export const getPaths = (src: string) => {
|
|||||||
addPath(
|
addPath(
|
||||||
c,
|
c,
|
||||||
c,
|
c,
|
||||||
`M ${prev.x},${prev.y} ${encodeSVGPath({
|
`M ${prev.x} ${prev.y} ${encodeSVGPath({
|
||||||
type: SVGPathData.QUAD_TO,
|
type: SVGPathData.QUAD_TO,
|
||||||
relative: false,
|
relative: false,
|
||||||
x: c.x,
|
x: c.x,
|
||||||
@@ -170,10 +203,22 @@ export const getPaths = (src: string) => {
|
|||||||
}
|
}
|
||||||
case SVGPathData.ARC: {
|
case SVGPathData.ARC: {
|
||||||
assert(prev);
|
assert(prev);
|
||||||
|
const center = arcEllipseCenter(
|
||||||
|
prev.x,
|
||||||
|
prev.y,
|
||||||
|
c.rX,
|
||||||
|
c.rY,
|
||||||
|
c.xRot,
|
||||||
|
c.lArcFlag,
|
||||||
|
c.sweepFlag,
|
||||||
|
c.x,
|
||||||
|
c.y
|
||||||
|
);
|
||||||
addPath(
|
addPath(
|
||||||
c,
|
c,
|
||||||
c,
|
c,
|
||||||
`M ${prev.x},${prev.y} A ${c.rX} ${c.rY} ${c.xRot} ${c.lArcFlag} ${c.sweepFlag} ${c.x} ${c.y}`
|
`M ${prev.x} ${prev.y} A${c.rX} ${c.rY} ${c.xRot} ${c.lArcFlag} ${c.sweepFlag} ${c.x} ${c.y}`,
|
||||||
|
c.rX === c.rY ? { ...center, r: c.rX } : undefined
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -184,3 +229,58 @@ export const getPaths = (src: string) => {
|
|||||||
}
|
}
|
||||||
return paths;
|
return paths;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const arcEllipseCenter = (
|
||||||
|
x1: number,
|
||||||
|
y1: number,
|
||||||
|
rx: number,
|
||||||
|
ry: number,
|
||||||
|
a: number,
|
||||||
|
fa: number,
|
||||||
|
fs: number,
|
||||||
|
x2: number,
|
||||||
|
y2: number
|
||||||
|
) => {
|
||||||
|
const phi = (a * Math.PI) / 180;
|
||||||
|
|
||||||
|
const M = [
|
||||||
|
[Math.cos(phi), Math.sin(phi)],
|
||||||
|
[-Math.sin(phi), Math.cos(phi)],
|
||||||
|
];
|
||||||
|
const V = [(x1 - x2) / 2, (y1 - y2) / 2];
|
||||||
|
|
||||||
|
const [x1p, y1p] = [M[0][0] * V[0] + M[0][1] * V[1], M[1][0] * V[0] + M[1][1] * V[1]];
|
||||||
|
|
||||||
|
rx = Math.abs(rx);
|
||||||
|
ry = Math.abs(ry);
|
||||||
|
|
||||||
|
const lambda = (x1p * x1p) / (rx * rx) + (y1p * y1p) / (ry * ry);
|
||||||
|
if (lambda > 1) {
|
||||||
|
rx = Math.sqrt(lambda) * rx;
|
||||||
|
ry = Math.sqrt(lambda) * ry;
|
||||||
|
}
|
||||||
|
|
||||||
|
const sign = fa === fs ? -1 : 1;
|
||||||
|
|
||||||
|
const co =
|
||||||
|
sign *
|
||||||
|
Math.sqrt(
|
||||||
|
Math.max(rx * rx * ry * ry - rx * rx * y1p * y1p - ry * ry * x1p * x1p, 0) /
|
||||||
|
(rx * rx * y1p * y1p + ry * ry * x1p * x1p)
|
||||||
|
);
|
||||||
|
|
||||||
|
const V2 = [(rx * y1p) / ry, (-ry * x1p) / rx];
|
||||||
|
const Cp = [V2[0] * co, V2[1] * co];
|
||||||
|
|
||||||
|
const M2 = [
|
||||||
|
[Math.cos(phi), -Math.sin(phi)],
|
||||||
|
[Math.sin(phi), Math.cos(phi)],
|
||||||
|
];
|
||||||
|
const V3 = [(x1 + x2) / 2, (y1 + y2) / 2];
|
||||||
|
const C = [
|
||||||
|
M2[0][0] * Cp[0] + M2[0][1] * Cp[1] + V3[0],
|
||||||
|
M2[1][0] * Cp[0] + M2[1][1] * Cp[1] + V3[1],
|
||||||
|
];
|
||||||
|
|
||||||
|
return { x: C[0], y: C[1] };
|
||||||
|
};
|
||||||
|
|||||||