Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6ec9cc3dcf | ||
|
|
01fa96ced3 | ||
|
|
481b27cc49 | ||
|
|
c5df7e73c6 | ||
|
|
428088436d | ||
|
|
eec2c97595 | ||
|
|
f0529b9ef7 | ||
|
|
0c216b41c5 | ||
|
|
ac892e5476 | ||
|
|
38f62a571c | ||
|
|
507750d0a7 | ||
|
|
33a0ed9539 | ||
|
|
37cb860ebe | ||
|
|
bd74ac880e |
@@ -3,7 +3,9 @@
|
||||
"tags": [
|
||||
"stream",
|
||||
"cast",
|
||||
"mirroring"
|
||||
"mirroring",
|
||||
"screen",
|
||||
"monitor"
|
||||
],
|
||||
"categories": [
|
||||
"multimedia",
|
||||
|
||||
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 |
@@ -2,7 +2,8 @@
|
||||
"$schema": "../icon.schema.json",
|
||||
"tags": [
|
||||
"chromecast",
|
||||
"airplay"
|
||||
"airplay",
|
||||
"screen"
|
||||
],
|
||||
"categories": [
|
||||
"devices",
|
||||
|
||||
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 |
@@ -1,9 +1,13 @@
|
||||
{
|
||||
"$schema": "../icon.schema.json",
|
||||
"tags": [
|
||||
"arrow"
|
||||
"arrow",
|
||||
"indent",
|
||||
"tab"
|
||||
],
|
||||
"categories": [
|
||||
"arrows"
|
||||
"arrows",
|
||||
"text",
|
||||
"development"
|
||||
]
|
||||
}
|
||||
@@ -10,9 +10,9 @@
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<ellipse cx="12" cy="5" rx="9" ry="3" />
|
||||
<path d="M3 12c0 1.18 2.03 2.2 5 2.7" />
|
||||
<path d="M21 5v4.5" />
|
||||
<path d="m12 16 1.27-1.35a4.75 4.75 0 1 1 .41 5.74" />
|
||||
<path d="M3 5v14c0 1.4 3 2.7 7 3" />
|
||||
<path d="M3 12c0 1.2 2 2.5 5 3" />
|
||||
<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="M3 5v14c0 1.43 2.97 2.63 7 2.93" />
|
||||
</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 |
@@ -11,5 +11,5 @@
|
||||
>
|
||||
<circle cx="12" cy="12" r="10" />
|
||||
<path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3" />
|
||||
<line x1="12" x2="12.01" y1="17" y2="17" />
|
||||
<path d="M12 17h.01" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 342 B After Width: | Height: | Size: 322 B |
@@ -10,6 +10,6 @@
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<circle cx="12" cy="12" r="10" />
|
||||
<line x1="12" x2="12" y1="16" y2="12" />
|
||||
<line x1="12" x2="12.01" y1="8" y2="8" />
|
||||
<path d="M12 16v-4" />
|
||||
<path d="M12 8h.01" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 331 B After Width: | Height: | Size: 294 B |
@@ -1,7 +1,9 @@
|
||||
{
|
||||
"$schema": "../icon.schema.json",
|
||||
"tags": [
|
||||
"computer"
|
||||
"computer",
|
||||
"screen",
|
||||
"remote"
|
||||
],
|
||||
"categories": [
|
||||
"devices"
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
{
|
||||
"$schema": "../icon.schema.json",
|
||||
"tags": [
|
||||
"computer"
|
||||
"computer",
|
||||
"screen",
|
||||
"remote"
|
||||
],
|
||||
"categories": [
|
||||
"devices"
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M16.8 11.2c.8-.9 1.2-2 1.2-3.2a6 6 0 0 0-9.3-5" />
|
||||
<path d="m2 2 20 20" />
|
||||
<path d="M6.3 6.3a4.67 4.67 0 0 0 1.2 5.2c.7.7 1.3 1.5 1.5 2.5" />
|
||||
<path d="M9 18h6" />
|
||||
<path d="M10 22h4" />
|
||||
<path d="m2 2 20 20" />
|
||||
<path d="M9 2.804A6 6 0 0 1 18 8a4.65 4.65 0 0 1-1.03 3" />
|
||||
<path d="M8.91 14a4.61 4.61 0 0 0-1.41-2.5C6.23 10.23 6 9 6 8a6 6 0 0 1 .084-1" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 428 B After Width: | Height: | Size: 412 B |
@@ -9,7 +9,7 @@
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<line x1="9" x2="15" y1="18" y2="18" />
|
||||
<line x1="10" x2="14" y1="22" y2="22" />
|
||||
<path d="M15.09 14c.18-.98.65-1.74 1.41-2.5A4.65 4.65 0 0 0 18 8 6 6 0 0 0 6 8c0 1 .23 2.23 1.5 3.5A4.61 4.61 0 0 1 8.91 14" />
|
||||
<path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5" />
|
||||
<path d="M9 18h6" />
|
||||
<path d="M10 22h4" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 423 B After Width: | Height: | Size: 371 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 |
@@ -8,7 +8,8 @@
|
||||
"mobile",
|
||||
"desktop",
|
||||
"monitor",
|
||||
"responsive"
|
||||
"responsive",
|
||||
"screens"
|
||||
],
|
||||
"categories": [
|
||||
"connectivity",
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M12 3a6.364 6.364 0 0 0 9 9 9 9 0 1 1-9-9Z" />
|
||||
<path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z" />
|
||||
<path d="M19 3v4" />
|
||||
<path d="M21 5h-4" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 313 B After Width: | Height: | Size: 305 B |
@@ -9,5 +9,5 @@
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M12 3a6.364 6.364 0 0 0 9 9 9 9 0 1 1-9-9Z" />
|
||||
<path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 266 B After Width: | Height: | Size: 258 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 |
@@ -2,7 +2,8 @@
|
||||
"$schema": "../icon.schema.json",
|
||||
"tags": [
|
||||
"desktop",
|
||||
"disconnect"
|
||||
"disconnect",
|
||||
"monitor"
|
||||
],
|
||||
"categories": [
|
||||
"connectivity",
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
"$schema": "../icon.schema.json",
|
||||
"tags": [
|
||||
"host",
|
||||
"desktop"
|
||||
"desktop",
|
||||
"monitor"
|
||||
],
|
||||
"categories": [
|
||||
"connectivity",
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
"phone",
|
||||
"cellphone",
|
||||
"device",
|
||||
"power"
|
||||
"power",
|
||||
"screen"
|
||||
],
|
||||
"categories": [
|
||||
"connectivity",
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
"tags": [
|
||||
"contactless",
|
||||
"payment",
|
||||
"near-field communication"
|
||||
"near-field communication",
|
||||
"screen"
|
||||
],
|
||||
"categories": [
|
||||
"communication",
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
"tags": [
|
||||
"phone",
|
||||
"cellphone",
|
||||
"device"
|
||||
"device",
|
||||
"screen"
|
||||
],
|
||||
"categories": [
|
||||
"connectivity",
|
||||
|
||||
14
icons/square-asterisk.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"$schema": "../icon.schema.json",
|
||||
"tags": [
|
||||
"password",
|
||||
"secret",
|
||||
"access",
|
||||
"key"
|
||||
],
|
||||
"categories": [
|
||||
"text",
|
||||
"security",
|
||||
"account"
|
||||
]
|
||||
}
|
||||
16
icons/square-asterisk.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="M12 8v8" />
|
||||
<path d="m8.5 14 7-4" />
|
||||
<path d="m8.5 10 7 4" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 338 B |
@@ -9,7 +9,7 @@
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8z" />
|
||||
<circle cx="12" cy="12" r="4" />
|
||||
<path d="M12 4h.01" />
|
||||
<path d="M20 12h.01" />
|
||||
<path d="M12 20h.01" />
|
||||
|
||||
|
Before Width: | Height: | Size: 493 B After Width: | Height: | Size: 477 B |
@@ -9,7 +9,7 @@
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8z" />
|
||||
<circle cx="12" cy="12" r="4" />
|
||||
<path d="M12 3v1" />
|
||||
<path d="M12 20v1" />
|
||||
<path d="M3 12h1" />
|
||||
|
||||
|
Before Width: | Height: | Size: 503 B After Width: | Height: | Size: 487 B |
@@ -9,8 +9,8 @@
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8z" />
|
||||
<path d="M12 8a2.828 2.828 0 1 0 4 4" />
|
||||
<circle cx="12" cy="12" r="4" />
|
||||
<path d="M12 8a2 2 0 1 0 4 4" />
|
||||
<path d="M12 2v2" />
|
||||
<path d="M12 20v2" />
|
||||
<path d="m4.93 4.93 1.41 1.41" />
|
||||
|
||||
|
Before Width: | Height: | Size: 544 B After Width: | Height: | Size: 520 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 |
@@ -5,7 +5,8 @@
|
||||
"notification",
|
||||
"rumble",
|
||||
"haptic feedback",
|
||||
"notifications"
|
||||
"notifications",
|
||||
"screen"
|
||||
],
|
||||
"categories": [
|
||||
"devices",
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
"smartphone",
|
||||
"notification",
|
||||
"rumble",
|
||||
"haptic feedback"
|
||||
"haptic feedback",
|
||||
"screen"
|
||||
],
|
||||
"categories": [
|
||||
"devices",
|
||||
|
||||
@@ -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<
|
||||
SVGSVGElement,
|
||||
{
|
||||
@@ -184,6 +209,7 @@ const SvgPreview = React.forwardRef<
|
||||
|
||||
const darkModeCss = `@media screen and (prefers-color-scheme: dark) {
|
||||
.svg-preview-grid-group,
|
||||
.svg-preview-radii-group,
|
||||
.svg-preview-shadow-mask-group,
|
||||
.svg-preview-shadow-group {
|
||||
stroke: #fff;
|
||||
@@ -223,6 +249,13 @@ const SvgPreview = React.forwardRef<
|
||||
'#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} />
|
||||
{children}
|
||||
</svg>
|
||||
|
||||
@@ -8,6 +8,7 @@ export type Path = {
|
||||
prev: Point;
|
||||
next: Point;
|
||||
isStart: boolean;
|
||||
circle: { x: number; y: number; r: 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 }[] => {
|
||||
if (/(rect|circle|ellipse|polygon|polyline|line|path)/.test(node.name)) {
|
||||
return [{ d: toPath(node), name: node.name }];
|
||||
const convertToPathNode = (node: INode): { d: string; name: typeof node.name } => {
|
||||
if (node.name === 'path') {
|
||||
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)) {
|
||||
return node.children.flatMap(extractPaths);
|
||||
return node.children.flatMap(extractNodes);
|
||||
}
|
||||
|
||||
return [];
|
||||
};
|
||||
|
||||
export const getNodes = (src: string) =>
|
||||
extractNodes(parseSync(src.includes('<svg') ? src : `<svg>${src}</svg>`));
|
||||
|
||||
export const getCommands = (src: string) =>
|
||||
extractPaths(parseSync(src)).flatMap(({ d, name }, idx) =>
|
||||
new SVGPathData(d).toAbs().commands.map((c) => ({ ...c, id: idx, name }))
|
||||
);
|
||||
getNodes(src)
|
||||
.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) => {
|
||||
const commands = getCommands(src.includes('<svg') ? src : `<svg>${src}</svg>`);
|
||||
const paths: Path[] = [];
|
||||
let prev: 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);
|
||||
paths.push({
|
||||
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,
|
||||
next,
|
||||
circle,
|
||||
isStart: start === prev,
|
||||
});
|
||||
prev = next;
|
||||
@@ -77,7 +110,7 @@ export const getPaths = (src: string) => {
|
||||
}
|
||||
case SVGPathData.CURVE_TO: {
|
||||
assert(prev);
|
||||
addPath(c, c, `M ${prev.x},${prev.y} ${encodeSVGPath(c)}`);
|
||||
addPath(c, c, `M ${prev.x} ${prev.y} ${encodeSVGPath(c)}`);
|
||||
break;
|
||||
}
|
||||
case SVGPathData.SMOOTH_CURVE_TO: {
|
||||
@@ -86,16 +119,16 @@ export const getPaths = (src: string) => {
|
||||
const reflectedCp1 = {
|
||||
x:
|
||||
previousCommand &&
|
||||
(previousCommand.type === SVGPathData.SMOOTH_CURVE_TO ||
|
||||
previousCommand.type === SVGPathData.CURVE_TO)
|
||||
(previousCommand.type === SVGPathData.SMOOTH_CURVE_TO ||
|
||||
previousCommand.type === SVGPathData.CURVE_TO)
|
||||
? previousCommand.relative
|
||||
? previousCommand.x2 - previousCommand.x
|
||||
: previousCommand.x2 - prev.x
|
||||
: 0,
|
||||
y:
|
||||
previousCommand &&
|
||||
(previousCommand.type === SVGPathData.SMOOTH_CURVE_TO ||
|
||||
previousCommand.type === SVGPathData.CURVE_TO)
|
||||
(previousCommand.type === SVGPathData.SMOOTH_CURVE_TO ||
|
||||
previousCommand.type === SVGPathData.CURVE_TO)
|
||||
? previousCommand.relative
|
||||
? previousCommand.y2 - previousCommand.y
|
||||
: previousCommand.y2 - prev.y
|
||||
@@ -104,7 +137,7 @@ export const getPaths = (src: string) => {
|
||||
addPath(
|
||||
c,
|
||||
c,
|
||||
`M ${prev.x},${prev.y} ${encodeSVGPath({
|
||||
`M ${prev.x} ${prev.y} ${encodeSVGPath({
|
||||
type: SVGPathData.CURVE_TO,
|
||||
relative: false,
|
||||
x: c.x,
|
||||
@@ -119,7 +152,7 @@ export const getPaths = (src: string) => {
|
||||
}
|
||||
case SVGPathData.QUAD_TO: {
|
||||
assert(prev);
|
||||
addPath(c, c, `M ${prev.x},${prev.y} ${encodeSVGPath(c)}`);
|
||||
addPath(c, c, `M ${prev.x} ${prev.y} ${encodeSVGPath(c)}`);
|
||||
break;
|
||||
}
|
||||
case SVGPathData.SMOOTH_QUAD_TO: {
|
||||
@@ -157,7 +190,7 @@ export const getPaths = (src: string) => {
|
||||
addPath(
|
||||
c,
|
||||
c,
|
||||
`M ${prev.x},${prev.y} ${encodeSVGPath({
|
||||
`M ${prev.x} ${prev.y} ${encodeSVGPath({
|
||||
type: SVGPathData.QUAD_TO,
|
||||
relative: false,
|
||||
x: c.x,
|
||||
@@ -170,10 +203,22 @@ export const getPaths = (src: string) => {
|
||||
}
|
||||
case SVGPathData.ARC: {
|
||||
assert(prev);
|
||||
const center = arcEllipseCenter(
|
||||
prev.x,
|
||||
prev.y,
|
||||
c.rX,
|
||||
c.rY,
|
||||
c.xRot,
|
||||
c.lArcFlag,
|
||||
c.sweepFlag,
|
||||
c.x,
|
||||
c.y
|
||||
);
|
||||
addPath(
|
||||
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;
|
||||
}
|
||||
@@ -184,3 +229,58 @@ export const getPaths = (src: string) => {
|
||||
}
|
||||
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] };
|
||||
};
|
||||
|
||||